Skip to content

Commit

Permalink
Fix crash when saving empty formatted text drafts.
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-signal authored and greyson-signal committed Jan 27, 2023
1 parent afa5c68 commit 71ecba1
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3830,7 +3830,7 @@ private class ComposeTextWatcher extends SimpleTextWatcher {

@Override
public void onTextChanged(@NonNull CharSequence text) {
handleSaveDraftOnTextChange(text);
handleSaveDraftOnTextChange(composeText.getTextTrimmed());
handleTypingIndicatorOnTextChange(text.toString());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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

Expand All @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,15 @@ class DraftRepository(
fun loadDrafts(threadId: Long): Single<DatabaseDraft> {
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<Mention> = 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)
Expand Down

0 comments on commit 71ecba1

Please sign in to comment.