Merge pull request #3123 from element-hq/feature/fga/fix_timeline_text_item_not_refreshed
Timeline : fix text item not refreshed when content change
This commit is contained in:
commit
aabd51aec4
1 changed files with 18 additions and 19 deletions
|
|
@ -74,31 +74,30 @@ fun TimelineItemTextView(
|
||||||
internal fun getTextWithResolvedMentions(content: TimelineItemTextBasedContent): CharSequence {
|
internal fun getTextWithResolvedMentions(content: TimelineItemTextBasedContent): CharSequence {
|
||||||
val userProfileCache = LocalRoomMemberProfilesCache.current
|
val userProfileCache = LocalRoomMemberProfilesCache.current
|
||||||
val lastCacheUpdate by userProfileCache.lastCacheUpdate.collectAsState()
|
val lastCacheUpdate by userProfileCache.lastCacheUpdate.collectAsState()
|
||||||
val formattedBody = remember(content.htmlBody, lastCacheUpdate) {
|
val formattedBody = remember(content.formattedBody, lastCacheUpdate) {
|
||||||
updateMentionSpans(content.formattedBody, userProfileCache)
|
content.formattedBody?.let { formattedBody ->
|
||||||
SpannableString(content.formattedBody ?: content.body)
|
updateMentionSpans(formattedBody, userProfileCache)
|
||||||
|
formattedBody
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return SpannableString(formattedBody ?: content.body)
|
||||||
return formattedBody
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateMentionSpans(text: CharSequence?, cache: RoomMemberProfilesCache): Boolean {
|
private fun updateMentionSpans(text: CharSequence, cache: RoomMemberProfilesCache): Boolean {
|
||||||
var changedContents = false
|
var changedContents = false
|
||||||
if (text != null) {
|
for (mentionSpan in text.getMentionSpans()) {
|
||||||
for (mentionSpan in text.getMentionSpans()) {
|
when (mentionSpan.type) {
|
||||||
when (mentionSpan.type) {
|
MentionSpan.Type.USER -> {
|
||||||
MentionSpan.Type.USER -> {
|
val displayName = cache.getDisplayName(UserId(mentionSpan.rawValue)) ?: mentionSpan.rawValue
|
||||||
val displayName = cache.getDisplayName(UserId(mentionSpan.rawValue)) ?: mentionSpan.rawValue
|
if (mentionSpan.text != displayName) {
|
||||||
if (mentionSpan.text != displayName) {
|
changedContents = true
|
||||||
changedContents = true
|
mentionSpan.text = displayName
|
||||||
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
|
return changedContents
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue