Properly hide preview URLs for messages that don't support previews

Notices and formatted messages don't have imageContentRenderer and
previewUrlRetriever set.
Accordingly, when recycling messages that previously had an URL preview,
we do not want to keep that preview, but actually hide it, instead of
returning early (without rendering any update).
This commit is contained in:
SpiritCroc 2020-12-19 19:51:56 +01:00
parent 2b780a8b76
commit 9fcf7263b5
2 changed files with 13 additions and 3 deletions

View File

@ -8,7 +8,7 @@ Improvements 🙌:
- -
Bugfix 🐛: Bugfix 🐛:
- - Url previews sometimes attached to wrong message (#2561)
Translations 🗣: Translations 🗣:
- -

View File

@ -19,6 +19,7 @@ package im.vector.app.features.home.room.detail.timeline.item
import android.text.method.MovementMethod import android.text.method.MovementMethod
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import androidx.core.text.PrecomputedTextCompat import androidx.core.text.PrecomputedTextCompat
import androidx.core.view.isVisible
import androidx.core.widget.TextViewCompat import androidx.core.widget.TextViewCompat
import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyAttribute
import com.airbnb.epoxy.EpoxyModelClass import com.airbnb.epoxy.EpoxyModelClass
@ -60,7 +61,12 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
// Preview URL // Preview URL
previewUrlViewUpdater.previewUrlView = holder.previewUrlView previewUrlViewUpdater.previewUrlView = holder.previewUrlView
previewUrlViewUpdater.imageContentRenderer = imageContentRenderer previewUrlViewUpdater.imageContentRenderer = imageContentRenderer
previewUrlRetriever?.addListener(attributes.informationData.eventId, previewUrlViewUpdater) val safePreviewUrlRetriever = previewUrlRetriever
if (safePreviewUrlRetriever == null) {
holder.previewUrlView.isVisible = false
} else {
safePreviewUrlRetriever.addListener(attributes.informationData.eventId, previewUrlViewUpdater)
}
holder.previewUrlView.delegate = previewUrlCallback holder.previewUrlView.delegate = previewUrlCallback
if (useBigFont) { if (useBigFont) {
@ -106,7 +112,11 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
var imageContentRenderer: ImageContentRenderer? = null var imageContentRenderer: ImageContentRenderer? = null
override fun onStateUpdated(state: PreviewUrlUiState) { override fun onStateUpdated(state: PreviewUrlUiState) {
val safeImageContentRenderer = imageContentRenderer ?: return val safeImageContentRenderer = imageContentRenderer
if (safeImageContentRenderer == null) {
previewUrlView?.isVisible = false
return
}
previewUrlView?.render(state, safeImageContentRenderer) previewUrlView?.render(state, safeImageContentRenderer)
} }
} }