From f15e9daf677c5a6f0b6036eb4111b8d09549a9ff Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 1 Jul 2024 21:48:35 +0200 Subject: [PATCH] Timeline : fix text item not refreshed when content change --- .../components/event/TimelineItemTextView.kt | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt index b9fba5fc1a..b9e441f84e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt @@ -74,31 +74,30 @@ fun TimelineItemTextView( internal fun getTextWithResolvedMentions(content: TimelineItemTextBasedContent): CharSequence { val userProfileCache = LocalRoomMemberProfilesCache.current val lastCacheUpdate by userProfileCache.lastCacheUpdate.collectAsState() - val formattedBody = remember(content.htmlBody, lastCacheUpdate) { - updateMentionSpans(content.formattedBody, userProfileCache) - SpannableString(content.formattedBody ?: content.body) + val formattedBody = remember(content.formattedBody, lastCacheUpdate) { + content.formattedBody?.let { formattedBody -> + updateMentionSpans(formattedBody, userProfileCache) + formattedBody + } } - - return formattedBody + return SpannableString(formattedBody ?: content.body) } -private fun updateMentionSpans(text: CharSequence?, cache: RoomMemberProfilesCache): Boolean { +private fun updateMentionSpans(text: CharSequence, cache: RoomMemberProfilesCache): Boolean { var changedContents = false - if (text != null) { - for (mentionSpan in text.getMentionSpans()) { - when (mentionSpan.type) { - MentionSpan.Type.USER -> { - val displayName = cache.getDisplayName(UserId(mentionSpan.rawValue)) ?: mentionSpan.rawValue - if (mentionSpan.text != displayName) { - changedContents = true - mentionSpan.text = displayName - } + for (mentionSpan in text.getMentionSpans()) { + when (mentionSpan.type) { + MentionSpan.Type.USER -> { + val displayName = cache.getDisplayName(UserId(mentionSpan.rawValue)) ?: mentionSpan.rawValue + if (mentionSpan.text != displayName) { + changedContents = true + mentionSpan.text = displayName } - // There's no need to do anything for `@room` pills - MentionSpan.Type.EVERYONE -> Unit - // Nothing yet for room mentions - MentionSpan.Type.ROOM -> Unit } + // There's no need to do anything for `@room` pills + MentionSpan.Type.EVERYONE -> Unit + // Nothing yet for room mentions + MentionSpan.Type.ROOM -> Unit } } return changedContents