Fix crash when saving empty formatted text drafts.

main
Cody Henthorne 2023-01-26 12:26:25 -05:00 zatwierdzone przez Greyson Parrelli
rodzic afa5c68312
commit 71ecba17fc
3 zmienionych plików z 12 dodań i 7 usunięć

Wyświetl plik

@ -3830,7 +3830,7 @@ public class ConversationParentFragment extends Fragment
@Override @Override
public void onTextChanged(@NonNull CharSequence text) { public void onTextChanged(@NonNull CharSequence text) {
handleSaveDraftOnTextChange(text); handleSaveDraftOnTextChange(composeText.getTextTrimmed());
handleTypingIndicatorOnTextChange(text.toString()); handleTypingIndicatorOnTextChange(text.toString());
} }

Wyświetl plik

@ -84,7 +84,7 @@ object MessageStyler {
fun hasStyling(text: Spanned): Boolean { fun hasStyling(text: Spanned): Boolean {
return if (FeatureFlags.textFormatting()) { return if (FeatureFlags.textFormatting()) {
text.getSpans(0, text.length, CharacterStyle::class.java) text.getSpans(0, text.length, CharacterStyle::class.java)
.any { s -> isSupportedCharacterStyle(s) } .any { s -> isSupportedCharacterStyle(s) && text.getSpanEnd(s) - text.getSpanStart(s) > 0 }
} else { } else {
false false
} }
@ -96,7 +96,7 @@ object MessageStyler {
text text
.getSpans(0, text.length, CharacterStyle::class.java) .getSpans(0, text.length, CharacterStyle::class.java)
.filter { s -> isSupportedCharacterStyle(s) } .filter { s -> isSupportedCharacterStyle(s) }
.map { span: CharacterStyle -> .mapNotNull { span: CharacterStyle ->
val spanStart = text.getSpanStart(span) val spanStart = text.getSpanStart(span)
val spanLength = text.getSpanEnd(span) - spanStart val spanLength = text.getSpanEnd(span) - spanStart
@ -107,7 +107,11 @@ object MessageStyler {
else -> throw IllegalArgumentException("Provided text contains unsupported spans") 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() .toList()
} else { } else {

Wyświetl plik

@ -61,14 +61,15 @@ class DraftRepository(
fun loadDrafts(threadId: Long): Single<DatabaseDraft> { fun loadDrafts(threadId: Long): Single<DatabaseDraft> {
return Single.fromCallable { return Single.fromCallable {
val drafts: Drafts = draftTable.getDrafts(threadId) 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 var updatedText: Spannable? = null
if (bodyRangesDraft != null) { if (textDraft != null && bodyRangesDraft != null) {
val bodyRanges: BodyRangeList = BodyRangeList.parseFrom(Base64.decodeOrThrow(bodyRangesDraft.value)) val bodyRanges: BodyRangeList = BodyRangeList.parseFrom(Base64.decodeOrThrow(bodyRangesDraft.value))
val mentions: List<Mention> = MentionUtil.bodyRangeListToMentions(bodyRanges) 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) updatedText = SpannableString(updated.body)
MentionAnnotation.setMentionAnnotations(updatedText, updated.mentions) MentionAnnotation.setMentionAnnotations(updatedText, updated.mentions)