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:
commit
33b31e7473
9 changed files with 34 additions and 11 deletions
|
|
@ -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.RoomType
|
||||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
|
||||||
data class SpaceRoom(
|
data class SpaceRoom(
|
||||||
val rawName: String?,
|
val rawName: String?,
|
||||||
|
|
@ -21,7 +22,7 @@ data class SpaceRoom(
|
||||||
val canonicalAlias: RoomAlias?,
|
val canonicalAlias: RoomAlias?,
|
||||||
val childrenCount: Int,
|
val childrenCount: Int,
|
||||||
val guestCanJoin: Boolean,
|
val guestCanJoin: Boolean,
|
||||||
val heroes: List<MatrixUser>,
|
val heroes: ImmutableList<MatrixUser>,
|
||||||
val joinRule: JoinRule?,
|
val joinRule: JoinRule?,
|
||||||
val numJoinedMembers: Int,
|
val numJoinedMembers: Int,
|
||||||
val roomId: RoomId,
|
val roomId: RoomId,
|
||||||
|
|
@ -32,7 +33,7 @@ data class SpaceRoom(
|
||||||
/**
|
/**
|
||||||
* The via parameters of the room.
|
* The via parameters of the room.
|
||||||
*/
|
*/
|
||||||
val via: List<String>,
|
val via: ImmutableList<String>,
|
||||||
val isDirect: Boolean?,
|
val isDirect: Boolean?,
|
||||||
) {
|
) {
|
||||||
val isSpace = roomType == RoomType.Space
|
val isSpace = roomType == RoomType.Space
|
||||||
|
|
|
||||||
|
|
@ -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.api.spaces.SpaceRoom
|
||||||
import io.element.android.libraries.matrix.impl.room.join.map
|
import io.element.android.libraries.matrix.impl.room.join.map
|
||||||
import io.element.android.libraries.matrix.impl.room.map
|
import io.element.android.libraries.matrix.impl.room.map
|
||||||
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import org.matrix.rustcomponents.sdk.SpaceRoom as RustSpaceRoom
|
import org.matrix.rustcomponents.sdk.SpaceRoom as RustSpaceRoom
|
||||||
|
|
||||||
class SpaceRoomMapper {
|
class SpaceRoomMapper {
|
||||||
|
|
@ -22,7 +23,7 @@ class SpaceRoomMapper {
|
||||||
canonicalAlias = spaceRoom.canonicalAlias?.let(::RoomAlias),
|
canonicalAlias = spaceRoom.canonicalAlias?.let(::RoomAlias),
|
||||||
childrenCount = spaceRoom.childrenCount.toInt(),
|
childrenCount = spaceRoom.childrenCount.toInt(),
|
||||||
guestCanJoin = spaceRoom.guestCanJoin,
|
guestCanJoin = spaceRoom.guestCanJoin,
|
||||||
heroes = spaceRoom.heroes.orEmpty().map { it.map() },
|
heroes = spaceRoom.heroes.orEmpty().map { it.map() }.toImmutableList(),
|
||||||
joinRule = spaceRoom.joinRule?.map(),
|
joinRule = spaceRoom.joinRule?.map(),
|
||||||
rawName = spaceRoom.rawName,
|
rawName = spaceRoom.rawName,
|
||||||
displayName = spaceRoom.displayName,
|
displayName = spaceRoom.displayName,
|
||||||
|
|
@ -32,7 +33,7 @@ class SpaceRoomMapper {
|
||||||
state = spaceRoom.state?.map(),
|
state = spaceRoom.state?.map(),
|
||||||
topic = spaceRoom.topic,
|
topic = spaceRoom.topic,
|
||||||
worldReadable = spaceRoom.worldReadable.orFalse(),
|
worldReadable = spaceRoom.worldReadable.orFalse(),
|
||||||
via = spaceRoom.via,
|
via = spaceRoom.via.toImmutableList(),
|
||||||
isDirect = spaceRoom.isDirect,
|
isDirect = spaceRoom.isDirect,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.matrix.ui.model.label
|
||||||
import io.element.android.libraries.ui.strings.CommonPlurals
|
import io.element.android.libraries.ui.strings.CommonPlurals
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SpaceRoomItemView(
|
fun SpaceRoomItemView(
|
||||||
|
|
@ -70,6 +72,9 @@ fun SpaceRoomItemView(
|
||||||
avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem),
|
avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem),
|
||||||
isSpace = spaceRoom.isSpace,
|
isSpace = spaceRoom.isSpace,
|
||||||
hideAvatars = hideAvatars,
|
hideAvatars = hideAvatars,
|
||||||
|
heroes = spaceRoom.heroes
|
||||||
|
.map { hero -> hero.getAvatarData(AvatarSize.SpaceListItem) }
|
||||||
|
.toImmutableList(),
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
onLongClick = onLongClick,
|
onLongClick = onLongClick,
|
||||||
trailingAction = trailingAction,
|
trailingAction = trailingAction,
|
||||||
|
|
@ -164,6 +169,7 @@ private fun NameAndIndicatorRow(
|
||||||
private fun SpaceRoomItemScaffold(
|
private fun SpaceRoomItemScaffold(
|
||||||
avatarData: AvatarData,
|
avatarData: AvatarData,
|
||||||
isSpace: Boolean,
|
isSpace: Boolean,
|
||||||
|
heroes: ImmutableList<AvatarData>,
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit,
|
||||||
onLongClick: () -> Unit,
|
onLongClick: () -> Unit,
|
||||||
hideAvatars: Boolean,
|
hideAvatars: Boolean,
|
||||||
|
|
@ -189,7 +195,7 @@ private fun SpaceRoomItemScaffold(
|
||||||
) {
|
) {
|
||||||
Avatar(
|
Avatar(
|
||||||
avatarData = avatarData,
|
avatarData = avatarData,
|
||||||
avatarType = if (isSpace) AvatarType.Space() else AvatarType.Room(),
|
avatarType = if (isSpace) AvatarType.Space() else AvatarType.Room(heroes = heroes),
|
||||||
hideImage = hideAvatars,
|
hideImage = hideAvatars,
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(16.dp))
|
Spacer(modifier = Modifier.width(16.dp))
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
|
||||||
state = CurrentUserMembership.LEFT,
|
state = CurrentUserMembership.LEFT,
|
||||||
),
|
),
|
||||||
aSpaceRoom(
|
aSpaceRoom(
|
||||||
|
displayName = "Alice",
|
||||||
roomType = RoomType.Room,
|
roomType = RoomType.Room,
|
||||||
isDirect = true,
|
isDirect = true,
|
||||||
heroes = listOf(aMatrixUser(displayName = "Alice")),
|
heroes = listOf(aMatrixUser(displayName = "Alice")),
|
||||||
|
|
@ -66,5 +67,12 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
|
||||||
roomId = RoomId("!spaceId2:example.com"),
|
roomId = RoomId("!spaceId2:example.com"),
|
||||||
state = CurrentUserMembership.INVITED,
|
state = CurrentUserMembership.INVITED,
|
||||||
),
|
),
|
||||||
|
aSpaceRoom(
|
||||||
|
displayName = "Alice",
|
||||||
|
roomType = RoomType.Space,
|
||||||
|
heroes = listOf(aMatrixUser(displayName = "Alice")),
|
||||||
|
state = CurrentUserMembership.JOINED,
|
||||||
|
numJoinedMembers = 2,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
|
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
fun aSpaceRoom(
|
fun aSpaceRoom(
|
||||||
rawName: String? = null,
|
rawName: String? = null,
|
||||||
|
|
@ -39,7 +40,7 @@ fun aSpaceRoom(
|
||||||
canonicalAlias = canonicalAlias,
|
canonicalAlias = canonicalAlias,
|
||||||
childrenCount = childrenCount,
|
childrenCount = childrenCount,
|
||||||
guestCanJoin = guestCanJoin,
|
guestCanJoin = guestCanJoin,
|
||||||
heroes = heroes,
|
heroes = heroes.toImmutableList(),
|
||||||
joinRule = joinRule,
|
joinRule = joinRule,
|
||||||
numJoinedMembers = numJoinedMembers,
|
numJoinedMembers = numJoinedMembers,
|
||||||
roomId = roomId,
|
roomId = roomId,
|
||||||
|
|
@ -47,6 +48,6 @@ fun aSpaceRoom(
|
||||||
state = state,
|
state = state,
|
||||||
topic = topic,
|
topic = topic,
|
||||||
worldReadable = worldReadable,
|
worldReadable = worldReadable,
|
||||||
via = via,
|
via = via.toImmutableList(),
|
||||||
isDirect = isDirect
|
isDirect = isDirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a9aa3aa6fd58dbba3db9e568773770397dcb4a2a7ea4c4cf61b762a0c6ef513a
|
oid sha256:333ae4e1f2e0ad7df938dfa3f0b54137ed641d327bcd7c316965fb4b4cc049c7
|
||||||
size 10631
|
size 8937
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f4df538763a96fb5511bbb175856943539951b804b7ca2b5d69d7033fa5d3588
|
||||||
|
size 11012
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:63dfdaf33475bcbf6c0c001b6c62c14fcbc5e84cf9d7f55c4b082dc359fbd7ea
|
oid sha256:05368c1bf4caed7d565daadade2dade7046fce15f1bd37eff4b1ec0faed5e948
|
||||||
size 10515
|
size 9163
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:59a2703c34c580655ff8e8c4681ad3937d7daaf9211e899ac8ade2826fdaab03
|
||||||
|
size 10782
|
||||||
Loading…
Add table
Add a link
Reference in a new issue