Merge pull request #5488 from element-hq/feature/fga/space_room_heroes

Space : makes sure to use room heroes for avatar
This commit is contained in:
Benoit Marty 2025-10-08 17:36:12 +02:00 committed by GitHub
commit cf6672a261
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 34 additions and 11 deletions

View file

@ -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<MatrixUser>,
val heroes: ImmutableList<MatrixUser>,
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<String>,
val via: ImmutableList<String>,
val isDirect: Boolean?,
) {
val isSpace = roomType == RoomType.Space

View file

@ -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,
)
}

View file

@ -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<AvatarData>,
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))

View file

@ -27,6 +27,7 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
state = CurrentUserMembership.LEFT,
),
aSpaceRoom(
displayName = "Alice",
roomType = RoomType.Room,
isDirect = true,
heroes = listOf(aMatrixUser(displayName = "Alice")),
@ -66,5 +67,12 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
roomId = RoomId("!spaceId2:example.com"),
state = CurrentUserMembership.INVITED,
),
aSpaceRoom(
displayName = "Alice",
roomType = RoomType.Space,
heroes = listOf(aMatrixUser(displayName = "Alice")),
state = CurrentUserMembership.JOINED,
numJoinedMembers = 2,
),
)
}

View file

@ -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
)

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a9aa3aa6fd58dbba3db9e568773770397dcb4a2a7ea4c4cf61b762a0c6ef513a
size 10631
oid sha256:333ae4e1f2e0ad7df938dfa3f0b54137ed641d327bcd7c316965fb4b4cc049c7
size 8937

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f4df538763a96fb5511bbb175856943539951b804b7ca2b5d69d7033fa5d3588
size 11012

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:63dfdaf33475bcbf6c0c001b6c62c14fcbc5e84cf9d7f55c4b082dc359fbd7ea
size 10515
oid sha256:05368c1bf4caed7d565daadade2dade7046fce15f1bd37eff4b1ec0faed5e948
size 9163

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:59a2703c34c580655ff8e8c4681ad3937d7daaf9211e899ac8ade2826fdaab03
size 10782