Merge pull request #4790 from vector-im/feature/adm/emoji-recycling
Timeline recycling crash
This commit is contained in:
commit
296929e179
1
changelog.d/4789.bugfix
Normal file
1
changelog.d/4789.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fixing crashes when quickly scrolling or restoring the room timeline
|
@ -92,29 +92,27 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
|
|||||||
it.bind(holder.messageView)
|
it.bind(holder.messageView)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val textFuture = if (bindingOptions?.canUseTextFuture.orFalse()) {
|
message?.charSequence.let { charSequence ->
|
||||||
PrecomputedTextCompat.getTextFuture(
|
markwonPlugins?.forEach { plugin -> plugin.beforeSetText(holder.messageView, charSequence as Spanned) }
|
||||||
message?.charSequence ?: "",
|
|
||||||
TextViewCompat.getTextMetricsParams(holder.messageView),
|
|
||||||
null)
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
}
|
||||||
markwonPlugins?.forEach { plugin -> plugin.beforeSetText(holder.messageView, message?.charSequence as Spanned) }
|
|
||||||
super.bind(holder)
|
super.bind(holder)
|
||||||
holder.messageView.movementMethod = movementMethod
|
holder.messageView.movementMethod = movementMethod
|
||||||
renderSendState(holder.messageView, holder.messageView)
|
renderSendState(holder.messageView, holder.messageView)
|
||||||
holder.messageView.onClick(attributes.itemClickListener)
|
holder.messageView.onClick(attributes.itemClickListener)
|
||||||
holder.messageView.onLongClickIgnoringLinks(attributes.itemLongClickListener)
|
holder.messageView.onLongClickIgnoringLinks(attributes.itemLongClickListener)
|
||||||
|
holder.messageView.setTextWithEmojiSupport(message?.charSequence, bindingOptions)
|
||||||
if (bindingOptions?.canUseTextFuture.orFalse()) {
|
|
||||||
holder.messageView.setTextFuture(textFuture)
|
|
||||||
} else {
|
|
||||||
holder.messageView.text = message?.charSequence
|
|
||||||
}
|
|
||||||
markwonPlugins?.forEach { plugin -> plugin.afterSetText(holder.messageView) }
|
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) {
|
override fun unbind(holder: Holder) {
|
||||||
super.unbind(holder)
|
super.unbind(holder)
|
||||||
previewUrlViewUpdater.previewUrlView = null
|
previewUrlViewUpdater.previewUrlView = null
|
||||||
|
Loading…
Reference in New Issue
Block a user