diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoom.kt index 64ac04fedd..3e72632e6c 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoom.kt @@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.user.MatrixUser +import kotlinx.collections.immutable.ImmutableList data class SpaceRoom( val rawName: String?, @@ -21,7 +22,7 @@ data class SpaceRoom( val canonicalAlias: RoomAlias?, val childrenCount: Int, val guestCanJoin: Boolean, - val heroes: List, + val heroes: ImmutableList, val joinRule: JoinRule?, val numJoinedMembers: Int, val roomId: RoomId, @@ -32,7 +33,7 @@ data class SpaceRoom( /** * The via parameters of the room. */ - val via: List, + val via: ImmutableList, val isDirect: Boolean?, ) { val isSpace = roomType == RoomType.Space diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/SpaceRoomMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/SpaceRoomMapper.kt index ac5cbf5c00..3a9b78c3f9 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/SpaceRoomMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/SpaceRoomMapper.kt @@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.impl.room.join.map import io.element.android.libraries.matrix.impl.room.map +import kotlinx.collections.immutable.toImmutableList import org.matrix.rustcomponents.sdk.SpaceRoom as RustSpaceRoom class SpaceRoomMapper { @@ -22,7 +23,7 @@ class SpaceRoomMapper { canonicalAlias = spaceRoom.canonicalAlias?.let(::RoomAlias), childrenCount = spaceRoom.childrenCount.toInt(), guestCanJoin = spaceRoom.guestCanJoin, - heroes = spaceRoom.heroes.orEmpty().map { it.map() }, + heroes = spaceRoom.heroes.orEmpty().map { it.map() }.toImmutableList(), joinRule = spaceRoom.joinRule?.map(), rawName = spaceRoom.rawName, displayName = spaceRoom.displayName, @@ -32,7 +33,7 @@ class SpaceRoomMapper { state = spaceRoom.state?.map(), topic = spaceRoom.topic, worldReadable = spaceRoom.worldReadable.orFalse(), - via = spaceRoom.via, + via = spaceRoom.via.toImmutableList(), isDirect = spaceRoom.isDirect, ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt index e1bff25538..1995f08267 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt @@ -53,6 +53,8 @@ import io.element.android.libraries.matrix.ui.model.icon import io.element.android.libraries.matrix.ui.model.label import io.element.android.libraries.ui.strings.CommonPlurals import io.element.android.libraries.ui.strings.CommonStrings +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList @Composable fun SpaceRoomItemView( @@ -70,6 +72,9 @@ fun SpaceRoomItemView( avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem), isSpace = spaceRoom.isSpace, hideAvatars = hideAvatars, + heroes = spaceRoom.heroes + .map { hero -> hero.getAvatarData(AvatarSize.SpaceListItem) } + .toImmutableList(), onClick = onClick, onLongClick = onLongClick, trailingAction = trailingAction, @@ -164,6 +169,7 @@ private fun NameAndIndicatorRow( private fun SpaceRoomItemScaffold( avatarData: AvatarData, isSpace: Boolean, + heroes: ImmutableList, onClick: () -> Unit, onLongClick: () -> Unit, hideAvatars: Boolean, @@ -189,7 +195,7 @@ private fun SpaceRoomItemScaffold( ) { Avatar( avatarData = avatarData, - avatarType = if (isSpace) AvatarType.Space() else AvatarType.Room(), + avatarType = if (isSpace) AvatarType.Space() else AvatarType.Room(heroes = heroes), hideImage = hideAvatars, ) Spacer(modifier = Modifier.width(16.dp)) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomProvider.kt index eb2de583d1..4ffda58239 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomProvider.kt @@ -27,6 +27,7 @@ class SpaceRoomProvider : PreviewParameterProvider { state = CurrentUserMembership.LEFT, ), aSpaceRoom( + displayName = "Alice", roomType = RoomType.Room, isDirect = true, heroes = listOf(aMatrixUser(displayName = "Alice")), @@ -66,5 +67,12 @@ class SpaceRoomProvider : PreviewParameterProvider { roomId = RoomId("!spaceId2:example.com"), state = CurrentUserMembership.INVITED, ), + aSpaceRoom( + displayName = "Alice", + roomType = RoomType.Space, + heroes = listOf(aMatrixUser(displayName = "Alice")), + state = CurrentUserMembership.JOINED, + numJoinedMembers = 2, + ), ) } diff --git a/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/SpaceRoomFixture.kt b/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/SpaceRoomFixture.kt index 5f8fd2ee38..aae6bbfb76 100644 --- a/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/SpaceRoomFixture.kt +++ b/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/SpaceRoomFixture.kt @@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.api.user.MatrixUser +import kotlinx.collections.immutable.toImmutableList fun aSpaceRoom( rawName: String? = null, @@ -39,7 +40,7 @@ fun aSpaceRoom( canonicalAlias = canonicalAlias, childrenCount = childrenCount, guestCanJoin = guestCanJoin, - heroes = heroes, + heroes = heroes.toImmutableList(), joinRule = joinRule, numJoinedMembers = numJoinedMembers, roomId = roomId, @@ -47,6 +48,6 @@ fun aSpaceRoom( state = state, topic = topic, worldReadable = worldReadable, - via = via, + via = via.toImmutableList(), isDirect = isDirect ) diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_2_en.png index 5fece91084..a8d5daeed1 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9aa3aa6fd58dbba3db9e568773770397dcb4a2a7ea4c4cf61b762a0c6ef513a -size 10631 +oid sha256:333ae4e1f2e0ad7df938dfa3f0b54137ed641d327bcd7c316965fb4b4cc049c7 +size 8937 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_8_en.png new file mode 100644 index 0000000000..cd9d503167 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Day_8_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4df538763a96fb5511bbb175856943539951b804b7ca2b5d69d7033fa5d3588 +size 11012 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_2_en.png index 2774e54c70..6eedc6c22c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63dfdaf33475bcbf6c0c001b6c62c14fcbc5e84cf9d7f55c4b082dc359fbd7ea -size 10515 +oid sha256:05368c1bf4caed7d565daadade2dade7046fce15f1bd37eff4b1ec0faed5e948 +size 9163 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_8_en.png new file mode 100644 index 0000000000..3e5373a5b6 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_SpaceRoomItemView_Night_8_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59a2703c34c580655ff8e8c4681ad3937d7daaf9211e899ac8ade2826fdaab03 +size 10782