From cc736ec759e271ae6538e5cc0c94966ed321b425 Mon Sep 17 00:00:00 2001 From: bxdxnn <267911624+bxdxnn@users.noreply.github.com> Date: Wed, 17 Jun 2026 16:18:59 +0000 Subject: [PATCH] Fix wrong avatar in the thread list top bar --- .../impl/threads/list/ThreadsListPresenter.kt | 11 +++++++++++ .../messages/impl/threads/list/ThreadsListView.kt | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListPresenter.kt index 07c0838a2b..ba10df46f2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListPresenter.kt @@ -9,8 +9,10 @@ package io.element.android.features.messages.impl.threads.list import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemContentFactory @@ -18,9 +20,12 @@ import io.element.android.features.messages.impl.utils.messagesummary.MessageSum import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode +import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.threads.ThreadListPaginationStatus +import io.element.android.libraries.matrix.ui.model.getAvatarData import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList @@ -95,6 +100,10 @@ class ThreadsListPresenter( val roomInfo by room.roomInfoFlow.collectAsState() + val heroes by remember { + derivedStateOf { roomInfo.heroes.map { it.getAvatarData(AvatarSize.CurrentUserTopBar) }.toImmutableList() } + } + fun handleEvent(event: ThreadsListEvents) { when (event) { ThreadsListEvents.Paginate -> if ((paginationStatus as? ThreadListPaginationStatus.Idle)?.hasMoreToLoad == true) { @@ -115,6 +124,7 @@ class ThreadsListPresenter( roomName = roomInfo.name ?: room.roomId.value, roomAvatarUrl = roomInfo.avatarUrl, isRoomTombstoned = roomInfo.successorRoom != null, + heroes = heroes, eventSink = ::handleEvent, ) } @@ -125,6 +135,7 @@ data class ThreadsListState( val roomName: String, val roomAvatarUrl: String?, val isRoomTombstoned: Boolean, + val heroes: ImmutableList, val threads: ImmutableList, val eventSink: (ThreadsListEvents) -> Unit, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt index 5494a9e844..3bcb8ab67a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt @@ -67,6 +67,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageTy import io.element.android.libraries.matrix.api.timeline.item.event.getAvatarUrl import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.ui.strings.CommonStrings +import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay @@ -102,7 +103,10 @@ fun ThreadsListView( url = state.roomAvatarUrl, size = AvatarSize.CurrentUserTopBar, ), - avatarType = AvatarType.Room(isTombstoned = state.isRoomTombstoned), + avatarType = AvatarType.Room( + heroes = state.heroes, + isTombstoned = state.isRoomTombstoned, + ), contentDescription = null, ) Column { @@ -323,6 +327,7 @@ internal fun ThreadsListViewPreview() { roomId = RoomId("!room-id:server"), roomName = ROOM_NAME, roomAvatarUrl = null, + heroes = persistentListOf(), threads = List(10) { aThreadListRowItem(threadId = ThreadId("\$thread-$it")) }.toImmutableList(), isRoomTombstoned = false, eventSink = {},