Browse Source

Merge pull request #3123 from element-hq/feature/fga/fix_timeline_text_item_not_refreshed

Timeline : fix text item not refreshed when content change
pull/3128/head
ganfra 3 months ago committed by GitHub
parent
commit
bc13c242c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 37
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt

37
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt

@ -74,31 +74,30 @@ fun TimelineItemTextView( @@ -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

Loading…
Cancel
Save