diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index 77db3b31ff..7239cd8277 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -45,6 +45,7 @@ import org.thoughtcrime.securesms.components.emoji.MediaKeyboard; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; import org.thoughtcrime.securesms.conversation.ConversationMessage; import org.thoughtcrime.securesms.conversation.ConversationStickerSuggestionAdapter; +import org.thoughtcrime.securesms.conversation.MessageStyler; import org.thoughtcrime.securesms.conversation.VoiceNoteDraftView; import org.thoughtcrime.securesms.database.DraftTable; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; @@ -396,6 +397,7 @@ public class InputPanel extends LinearLayout public void enterEditMessageMode(@NonNull GlideRequests glideRequests, @NonNull ConversationMessage conversationMessageToEdit, boolean fromDraft) { SpannableString textToEdit = conversationMessageToEdit.getDisplayBody(getContext()); if (!fromDraft) { + MessageStyler.convertSpoilersToComposeMode(textToEdit); composeText.setText(textToEdit); composeText.setSelection(textToEdit.length()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt index 6ff76204d7..9f4833ba01 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageStyler.kt @@ -261,6 +261,22 @@ object MessageStyler { } } + @JvmStatic + fun convertSpoilersToComposeMode(text: Spannable) { + SpoilerAnnotation.getSpoilerAndClickAnnotations(text) + .forEach { (spoiler, clickSpan) -> + val start = text.getSpanStart(spoiler) + val end = text.getSpanEnd(spoiler) + val convertedSpoiler = copyStyleSpan(spoiler, start, end - start) + text.removeSpan(spoiler) + text.setSpan(convertedSpoiler, start, end, SPAN_FLAGS) + + if (clickSpan != null) { + text.removeSpan(clickSpan) + } + } + } + fun Any.isSupportedStyle(): Boolean { return when (this) { is CharacterStyle -> isSupportedCharacterStyle()