kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix crash when saving empty formatted text drafts.
rodzic
afa5c68312
commit
71ecba17fc
|
@ -3830,7 +3830,7 @@ public class ConversationParentFragment extends Fragment
|
|||
|
||||
@Override
|
||||
public void onTextChanged(@NonNull CharSequence text) {
|
||||
handleSaveDraftOnTextChange(text);
|
||||
handleSaveDraftOnTextChange(composeText.getTextTrimmed());
|
||||
handleTypingIndicatorOnTextChange(text.toString());
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue