diff --git a/changelog.d/4789.bugfix b/changelog.d/4789.bugfix new file mode 100644 index 0000000000..4612dd1ecd --- /dev/null +++ b/changelog.d/4789.bugfix @@ -0,0 +1 @@ +Fixing crashes when quickly scrolling or restoring the room timeline \ No newline at end of file diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageTextItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageTextItem.kt index e9563aa69c..e499f090fb 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageTextItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageTextItem.kt @@ -92,29 +92,27 @@ abstract class MessageTextItem : AbsMessageItem() { it.bind(holder.messageView) } } - val textFuture = if (bindingOptions?.canUseTextFuture.orFalse()) { - PrecomputedTextCompat.getTextFuture( - message?.charSequence ?: "", - TextViewCompat.getTextMetricsParams(holder.messageView), - null) - } else { - null + message?.charSequence.let { charSequence -> + markwonPlugins?.forEach { plugin -> plugin.beforeSetText(holder.messageView, charSequence as Spanned) } } - markwonPlugins?.forEach { plugin -> plugin.beforeSetText(holder.messageView, message?.charSequence as Spanned) } super.bind(holder) holder.messageView.movementMethod = movementMethod renderSendState(holder.messageView, holder.messageView) holder.messageView.onClick(attributes.itemClickListener) holder.messageView.onLongClickIgnoringLinks(attributes.itemLongClickListener) - - if (bindingOptions?.canUseTextFuture.orFalse()) { - holder.messageView.setTextFuture(textFuture) - } else { - holder.messageView.text = message?.charSequence - } + holder.messageView.setTextWithEmojiSupport(message?.charSequence, bindingOptions) markwonPlugins?.forEach { plugin -> plugin.afterSetText(holder.messageView) } } + private fun AppCompatTextView.setTextWithEmojiSupport(message: CharSequence?, bindingOptions: BindingOptions?) { + if (bindingOptions?.canUseTextFuture.orFalse() && message != null) { + val textFuture = PrecomputedTextCompat.getTextFuture(message, TextViewCompat.getTextMetricsParams(this), null) + setTextFuture(textFuture) + } else { + text = message + } + } + override fun unbind(holder: Holder) { super.unbind(holder) previewUrlViewUpdater.previewUrlView = null