From 63ef40f58b7717ea79ddd8260f22726bd5809594 Mon Sep 17 00:00:00 2001 From: jonnyandrew Date: Fri, 17 Nov 2023 17:09:18 +0000 Subject: [PATCH] Fix issue with timeline message view reuse while rich text editor is enabled (#8688) --- changelog.d/8688.bugfix | 1 + .../detail/timeline/item/MessageTextItem.kt | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 changelog.d/8688.bugfix diff --git a/changelog.d/8688.bugfix b/changelog.d/8688.bugfix new file mode 100644 index 0000000000..0f746f1293 --- /dev/null +++ b/changelog.d/8688.bugfix @@ -0,0 +1 @@ +Fix issue with timeline message view reuse while rich text editor is enabled \ 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 a9cd25ae19..6ffaa6d896 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 @@ -85,8 +85,13 @@ abstract class MessageTextItem : AbsMessageItem() { } holder.previewUrlView.delegate = previewUrlCallback holder.previewUrlView.renderMessageLayout(attributes.informationData.messageLayout) - - val messageView: AppCompatTextView = if (useRichTextEditorStyle) holder.richMessageView else holder.plainMessageView + if (useRichTextEditorStyle) { + holder.plainMessageView?.isVisible = false + } else { + holder.richMessageView?.isVisible = false + } + val messageView: AppCompatTextView = if (useRichTextEditorStyle) holder.requireRichMessageView() else holder.requirePlainMessageView() + messageView.isVisible = true if (useBigFont) { messageView.textSize = 44F } else { @@ -133,11 +138,21 @@ abstract class MessageTextItem : AbsMessageItem() { val previewUrlView by bind(R.id.messageUrlPreview) private val richMessageStub by bind(R.id.richMessageTextViewStub) private val plainMessageStub by bind(R.id.plainMessageTextViewStub) - val richMessageView: AppCompatTextView by lazy { - richMessageStub.inflate().findViewById(R.id.messageTextView) + var richMessageView: AppCompatTextView? = null + private set + var plainMessageView: AppCompatTextView? = null + private set + + fun requireRichMessageView(): AppCompatTextView { + val view = richMessageView ?: richMessageStub.inflate().findViewById(R.id.messageTextView) + richMessageView = view + return view } - val plainMessageView: AppCompatTextView by lazy { - plainMessageStub.inflate().findViewById(R.id.messageTextView) + + fun requirePlainMessageView(): AppCompatTextView { + val view = plainMessageView ?: plainMessageStub.inflate().findViewById(R.id.messageTextView) + plainMessageView = view + return view } }