From 71ecba17fc765048fd570349afb076d67edbefee Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 26 Jan 2023 12:26:25 -0500 Subject: [PATCH] Fix crash when saving empty formatted text drafts. --- .../conversation/ConversationParentFragment.java | 2 +- .../securesms/conversation/MessageStyler.kt | 10 +++++++--- .../securesms/conversation/drafts/DraftRepository.kt | 7 ++++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 947379a44..b132bcfd3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -3830,7 +3830,7 @@ public class ConversationParentFragment extends Fragment @Override public void onTextChanged(@NonNull CharSequence text) { - handleSaveDraftOnTextChange(text); + handleSaveDraftOnTextChange(composeText.getTextTrimmed()); handleTypingIndicatorOnTextChange(text.toString()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt index 9d0a58f55..0a6853e33 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt @@ -84,7 +84,7 @@ object MessageStyler { fun hasStyling(text: Spanned): Boolean { return if (FeatureFlags.textFormatting()) { text.getSpans(0, text.length, CharacterStyle::class.java) - .any { s -> isSupportedCharacterStyle(s) } + .any { s -> isSupportedCharacterStyle(s) && text.getSpanEnd(s) - text.getSpanStart(s) > 0 } } else { false } @@ -96,7 +96,7 @@ object MessageStyler { text .getSpans(0, text.length, CharacterStyle::class.java) .filter { s -> isSupportedCharacterStyle(s) } - .map { span: CharacterStyle -> + .mapNotNull { span: CharacterStyle -> val spanStart = text.getSpanStart(span) val spanLength = text.getSpanEnd(span) - spanStart @@ -107,7 +107,11 @@ object MessageStyler { else -> throw IllegalArgumentException("Provided text contains unsupported spans") } - BodyRangeList.BodyRange.newBuilder().setStart(spanStart).setLength(spanLength).setStyle(style).build() + if (spanLength > 0) { + BodyRangeList.BodyRange.newBuilder().setStart(spanStart).setLength(spanLength).setStyle(style).build() + } else { + null + } } .toList() } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt index 6ecbfeb98..efc007413 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt @@ -61,14 +61,15 @@ class DraftRepository( fun loadDrafts(threadId: Long): Single { return Single.fromCallable { val drafts: Drafts = draftTable.getDrafts(threadId) - val bodyRangesDraft = drafts.getDraftOfType(DraftTable.Draft.BODY_RANGES) + val bodyRangesDraft: DraftTable.Draft? = drafts.getDraftOfType(DraftTable.Draft.BODY_RANGES) + val textDraft: DraftTable.Draft? = drafts.getDraftOfType(DraftTable.Draft.TEXT) var updatedText: Spannable? = null - if (bodyRangesDraft != null) { + if (textDraft != null && bodyRangesDraft != null) { val bodyRanges: BodyRangeList = BodyRangeList.parseFrom(Base64.decodeOrThrow(bodyRangesDraft.value)) val mentions: List = MentionUtil.bodyRangeListToMentions(bodyRanges) - val updated = MentionUtil.updateBodyAndMentionsWithDisplayNames(context, drafts.getDraftOfType(DraftTable.Draft.TEXT)!!.value, mentions) + val updated = MentionUtil.updateBodyAndMentionsWithDisplayNames(context, textDraft.value, mentions) updatedText = SpannableString(updated.body) MentionAnnotation.setMentionAnnotations(updatedText, updated.mentions)