diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerAnnotation.kt b/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerAnnotation.kt index e8bcdd2ce9..788670bb9d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerAnnotation.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/spoiler/SpoilerAnnotation.kt @@ -69,6 +69,7 @@ object SpoilerAnnotation { if (text is Spannable) { Selection.removeSelection(text) } + widget.text = text } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java index a5736a9cd8..9860af4bad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.longmessage; import android.graphics.PorterDuff; import android.os.Bundle; import android.text.SpannableString; -import android.text.method.LinkMovementMethod; import android.text.style.URLSpan; import android.text.util.Linkify; import android.util.TypedValue; @@ -29,6 +28,7 @@ import org.thoughtcrime.securesms.conversation.colors.ColorizerView; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.LinkUtil; +import org.thoughtcrime.securesms.util.LongClickMovementMethod; import org.thoughtcrime.securesms.util.Projection; import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.views.Stub; @@ -131,7 +131,7 @@ public class LongMessageFragment extends FullScreenDialogFragment { bubble.setVisibility(View.VISIBLE); text.setText(styledBody); - text.setMovementMethod(LinkMovementMethod.getInstance()); + text.setMovementMethod(LongClickMovementMethod.getInstance(getContext())); text.setTextSize(TypedValue.COMPLEX_UNIT_SP, SignalStore.settings().getMessageFontSize()); if (!message.get().getMessageRecord().isOutgoing()) { text.setMentionBackgroundTint(ContextCompat.getColor(requireContext(), ThemeUtil.isDarkTheme(requireActivity()) ? R.color.core_grey_60 : R.color.core_grey_20)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostModel.kt index 2981dd827b..d88da1bb6a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostModel.kt @@ -140,7 +140,7 @@ data class StoryTextPostModel( val useLargeThumbnail = source.text.isBlank() view.setTypeface(typeface) - view.bindFromStoryTextPost(source.storyTextPost, source.bodyRanges) + view.bindFromStoryTextPost(source.storySentAtMillis, source.storyTextPost, source.bodyRanges) view.bindLinkPreview(linkPreview, useLargeThumbnail, loadThumbnail = false) view.postAdjustLinkPreviewTranslationY() diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt index 1e2979c676..5839084a7b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt @@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryPostCreationState import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryScale import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryTextWatcher +import org.thoughtcrime.securesms.util.LongClickMovementMethod import org.thoughtcrime.securesms.util.concurrent.ListenableFuture import org.thoughtcrime.securesms.util.visible import java.util.Locale @@ -47,6 +48,7 @@ class StoryTextPostView @JvmOverloads constructor( init { TextStoryTextWatcher.install(textView) + textView.movementMethod = LongClickMovementMethod.getInstance(context) } fun getLinkPreviewThumbnailWidth(useLargeThumbnail: Boolean): Int { @@ -122,7 +124,7 @@ class StoryTextPostView @JvmOverloads constructor( postAdjustLinkPreviewTranslationY() } - fun bindFromStoryTextPost(storyTextPost: StoryTextPost, bodyRanges: BodyRangeList?) { + fun bindFromStoryTextPost(id: Long, storyTextPost: StoryTextPost, bodyRanges: BodyRangeList?) { visible = true linkPreviewView.visible = false @@ -134,7 +136,7 @@ class StoryTextPostView @JvmOverloads constructor( } else { val body = SpannableString(storyTextPost.body) if (font == TextFont.REGULAR && bodyRanges != null) { - MessageStyler.style(System.currentTimeMillis(), bodyRanges, body) + MessageStyler.style(id, bodyRanges, body) } setText(body, false) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostState.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostState.kt index 2f93ecb7e8..0cdb23d588 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostState.kt @@ -10,6 +10,7 @@ import kotlin.time.Duration sealed class StoryPostState { data class TextPost( + val storyTextPostId: Long = 0L, val storyTextPost: StoryTextPost? = null, val linkPreview: LinkPreview? = null, val typeface: Typeface? = null, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostViewModel.kt index 8770a3e385..5148444273 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryPostViewModel.kt @@ -90,6 +90,7 @@ class StoryPostViewModel(private val repository: StoryTextPostRepository) : View store.update { StoryPostState.TextPost( + storyTextPostId = record.id, storyTextPost = text, linkPreview = linkPreview, typeface = t, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryTextLoader.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryTextLoader.kt index 736d670f6e..ee407ac371 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryTextLoader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/post/StoryTextLoader.kt @@ -21,7 +21,7 @@ class StoryTextLoader( ) { fun load() { - text.bindFromStoryTextPost(state.storyTextPost!!, state.bodyRanges) + text.bindFromStoryTextPost(state.storyTextPostId, state.storyTextPost!!, state.bodyRanges) text.bindLinkPreview(state.linkPreview, state.storyTextPost.body.isBlank()) text.postAdjustLinkPreviewTranslationY() diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LongClickMovementMethod.java b/app/src/main/java/org/thoughtcrime/securesms/util/LongClickMovementMethod.java index 95d01b9850..1cfe455bd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LongClickMovementMethod.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LongClickMovementMethod.java @@ -16,6 +16,7 @@ import androidx.core.content.ContextCompat; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import java.lang.ref.WeakReference; @@ -116,6 +117,11 @@ public class LongClickMovementMethod extends LinkMovementMethod { return super.onTouchEvent(widget, buffer, event); } + /** This signature is available in the base class and can lead to the wrong instance being returned. */ + public static LongClickMovementMethod getInstance() { + return getInstance(ApplicationDependencies.getApplication()); + } + public static LongClickMovementMethod getInstance(Context context) { if (sInstance == null) { sInstance = new LongClickMovementMethod(context.getApplicationContext());