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
|
@Override
|
||||||
public void onTextChanged(@NonNull CharSequence text) {
|
public void onTextChanged(@NonNull CharSequence text) {
|
||||||
handleSaveDraftOnTextChange(text);
|
handleSaveDraftOnTextChange(composeText.getTextTrimmed());
|
||||||
handleTypingIndicatorOnTextChange(text.toString());
|
handleTypingIndicatorOnTextChange(text.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Ładowanie…
Reference in New Issue