Strip mention Spans out of media captions.

main
Nicholas 2023-01-31 09:47:09 -05:00 zatwierdzone przez Nicholas Tinsley
rodzic c3bcba6380
commit dca47e4cb5
1 zmienionych plików z 19 dodań i 9 usunięć

Wyświetl plik

@ -9,20 +9,19 @@ import android.content.Intent
import android.graphics.PorterDuff import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter import android.graphics.PorterDuffColorFilter
import android.os.Bundle import android.os.Bundle
import android.text.Annotation
import android.text.SpannableString import android.text.SpannableString
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.GONE
import android.view.ViewGroup.MarginLayoutParams
import android.view.ViewGroup.VISIBLE
import android.view.animation.PathInterpolator import android.view.animation.PathInterpolator
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuBuilder
import androidx.core.app.ShareCompat import androidx.core.app.ShareCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.text.getSpans
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
@ -44,6 +43,7 @@ import org.thoughtcrime.securesms.LoggingFragment
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.attachments.DatabaseAttachment
import org.thoughtcrime.securesms.components.ViewBinderDelegate import org.thoughtcrime.securesms.components.ViewBinderDelegate
import org.thoughtcrime.securesms.components.mention.MentionAnnotation
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs
import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.database.MediaTable
@ -268,19 +268,19 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
val caption = currentItem.attachment?.caption val caption = currentItem.attachment?.caption
if (caption != null) { if (caption != null) {
bindCaptionView(caption) bindCaptionView(SpannableString(caption))
} else { } else {
bindCaptionView(messageBodies[messageId]) bindCaptionView(messageBodies[messageId])
} }
} }
private fun bindCaptionView(displayBody: CharSequence?) { private fun bindCaptionView(displayBody: SpannableString?) {
val caption: ExpandingCaptionView = binding.mediaPreviewCaption val caption: ExpandingCaptionView = binding.mediaPreviewCaption
if (displayBody.isNullOrEmpty()) { if (displayBody.isNullOrEmpty()) {
caption.visible = false caption.visible = false
} else { } else {
caption.expandedHeight = calculateExpandedHeight() caption.expandedHeight = calculateExpandedHeight()
caption.fullCaptionText = displayBody caption.fullCaptionText = displayBody.removeMentionAnnotations()
caption.visible = true caption.visible = true
} }
} }
@ -331,7 +331,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
private fun bindAlbumRail(albumThumbnailMedia: List<Media>, currentItem: MediaTable.MediaRecord) { private fun bindAlbumRail(albumThumbnailMedia: List<Media>, currentItem: MediaTable.MediaRecord) {
val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView
if (albumThumbnailMedia.size > 1) { if (albumThumbnailMedia.size > 1) {
val firstRailDisplay = albumRail.visibility == GONE val firstRailDisplay = albumRail.visibility == View.GONE
if (firstRailDisplay) { if (firstRailDisplay) {
albumRail.visibility = View.INVISIBLE albumRail.visibility = View.INVISIBLE
albumRail.alpha = 0f albumRail.alpha = 0f
@ -370,7 +370,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
.alpha(1f) .alpha(1f)
.setDuration(duration) .setDuration(duration)
.withStartAction { .withStartAction {
view.visibility = VISIBLE view.visibility = View.VISIBLE
} }
.withEndAction { .withEndAction {
if (getView() != null && view == binding.mediaPreviewPlaybackControls.recyclerView) { if (getView() != null && view == binding.mediaPreviewPlaybackControls.recyclerView) {
@ -439,7 +439,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
private fun anchorMarginsToBottomInsets(viewToAnchor: View) { private fun anchorMarginsToBottomInsets(viewToAnchor: View) {
ViewCompat.setOnApplyWindowInsetsListener(viewToAnchor) { view: View, windowInsetsCompat: WindowInsetsCompat -> ViewCompat.setOnApplyWindowInsetsListener(viewToAnchor) { view: View, windowInsetsCompat: WindowInsetsCompat ->
val layoutParams = view.layoutParams as MarginLayoutParams val layoutParams = view.layoutParams as ViewGroup.MarginLayoutParams
layoutParams.setMargins( layoutParams.setMargins(
windowInsetsCompat.systemWindowInsetLeft, windowInsetsCompat.systemWindowInsetLeft,
layoutParams.topMargin, layoutParams.topMargin,
@ -644,3 +644,13 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
} }
} }
} }
private fun SpannableString.removeMentionAnnotations(): CharSequence {
val spans: Array<out Annotation> = this.getSpans()
spans.forEach {
if (MentionAnnotation.isMentionAnnotation(it)) {
this.removeSpan(it)
}
}
return this
}