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