kopia lustrzana https://github.com/ryukoposting/Signal-Android
Strip mention Spans out of media captions.
rodzic
c3bcba6380
commit
dca47e4cb5
|
@ -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
|
||||||
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue