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
public void onTextChanged(@NonNull CharSequence text) {
handleSaveDraftOnTextChange(text);
handleSaveDraftOnTextChange(composeText.getTextTrimmed());
handleTypingIndicatorOnTextChange(text.toString());
}

Wyświetl plik

@ -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 {

Wyświetl plik

@ -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)