Take into account hiding avatars from invitation

This commit is contained in:
Benoit Marty 2025-08-20 14:50:10 +02:00 committed by Benoit Marty
parent 81d82fb0de
commit a0ec8658af
5 changed files with 19 additions and 3 deletions

View file

@ -54,6 +54,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
internal fun HomeSpaceItemView( internal fun HomeSpaceItemView(
spaceRoom: SpaceRoom, spaceRoom: SpaceRoom,
showUnreadIndicator: Boolean, showUnreadIndicator: Boolean,
hideAvatars: Boolean,
onClick: () -> Unit, onClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
@ -61,6 +62,7 @@ internal fun HomeSpaceItemView(
modifier = modifier, modifier = modifier,
spaceRoom = spaceRoom, spaceRoom = spaceRoom,
onClick = onClick, onClick = onClick,
hideAvatars = hideAvatars,
onLongClick = { }, onLongClick = { },
) { ) {
NameAndIndicatorRow( NameAndIndicatorRow(
@ -151,7 +153,7 @@ private fun SpaceScaffoldRow(
onClick: () -> Unit, onClick: () -> Unit,
onLongClick: () -> Unit, onLongClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
hideAvatarImage: Boolean, hideAvatars: Boolean,
content: @Composable ColumnScope.() -> Unit content: @Composable ColumnScope.() -> Unit
) { ) {
val clickModifier = Modifier val clickModifier = Modifier
@ -173,7 +175,7 @@ private fun SpaceScaffoldRow(
Avatar( Avatar(
avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem), avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem),
avatarType = AvatarType.Space(), avatarType = AvatarType.Space(),
hideImage = hideAvatarImage, hideImage = hideAvatars,
) )
Spacer(modifier = Modifier.width(16.dp)) Spacer(modifier = Modifier.width(16.dp))
Column( Column(
@ -189,6 +191,7 @@ internal fun HomeSpaceItemViewPreview(@PreviewParameter(SpaceRoomProvider::class
HomeSpaceItemView( HomeSpaceItemView(
spaceRoom = spaceRoom, spaceRoom = spaceRoom,
showUnreadIndicator = false, showUnreadIndicator = false,
hideAvatars = true,
onClick = {}, onClick = {},
) )
} }

View file

@ -14,6 +14,7 @@ import androidx.compose.runtime.remember
import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.SeenInvitesStore
import io.element.android.features.invite.api.seenSpaceIds import io.element.android.features.invite.api.seenSpaceIds
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.mapState
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClient
import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.persistentSetOf
import kotlinx.collections.immutable.toPersistentSet import kotlinx.collections.immutable.toPersistentSet
@ -26,6 +27,12 @@ class HomeSpacesPresenter @Inject constructor(
) : Presenter<HomeSpacesState> { ) : Presenter<HomeSpacesState> {
@Composable @Composable
override fun present(): HomeSpacesState { override fun present(): HomeSpacesState {
val hideInvitesAvatar by remember {
client
.mediaPreviewService()
.mediaPreviewConfigFlow
.mapState { config -> config.hideInviteAvatar }
}.collectAsState()
val spaceRooms by client.spaceService.spaceRooms.collectAsState(emptyList()) val spaceRooms by client.spaceService.spaceRooms.collectAsState(emptyList())
val seenSpaceInvites by remember { val seenSpaceInvites by remember {
seenInvitesStore.seenSpaceIds().map { it.toPersistentSet() } seenInvitesStore.seenSpaceIds().map { it.toPersistentSet() }
@ -38,6 +45,7 @@ class HomeSpacesPresenter @Inject constructor(
return HomeSpacesState( return HomeSpacesState(
spaceRooms = spaceRooms, spaceRooms = spaceRooms,
seenSpaceInvites = seenSpaceInvites, seenSpaceInvites = seenSpaceInvites,
hideInvitesAvatar = hideInvitesAvatar,
eventSink = ::handleEvents, eventSink = ::handleEvents,
) )
} }

View file

@ -14,5 +14,6 @@ import kotlinx.collections.immutable.ImmutableSet
data class HomeSpacesState( data class HomeSpacesState(
val spaceRooms: List<SpaceRoom>, val spaceRooms: List<SpaceRoom>,
val seenSpaceInvites: ImmutableSet<SpaceId>, val seenSpaceInvites: ImmutableSet<SpaceId>,
val hideInvitesAvatar: Boolean,
val eventSink: (HomeSpacesEvents) -> Unit, val eventSink: (HomeSpacesEvents) -> Unit,
) )

View file

@ -27,10 +27,12 @@ open class HomeSpacesStateProvider : PreviewParameterProvider<HomeSpacesState> {
internal fun aHomeSpacesState( internal fun aHomeSpacesState(
spaceRooms: List<SpaceRoom> = aListOfSpaceRooms(), spaceRooms: List<SpaceRoom> = aListOfSpaceRooms(),
seenSpaceInvites: Set<SpaceId> = emptySet(), seenSpaceInvites: Set<SpaceId> = emptySet(),
hideInvitesAvatar: Boolean = false,
eventSink: (HomeSpacesEvents) -> Unit = {}, eventSink: (HomeSpacesEvents) -> Unit = {},
) = HomeSpacesState( ) = HomeSpacesState(
spaceRooms = spaceRooms, spaceRooms = spaceRooms,
seenSpaceInvites = seenSpaceInvites.toImmutableSet(), seenSpaceInvites = seenSpaceInvites.toImmutableSet(),
hideInvitesAvatar = hideInvitesAvatar,
eventSink = eventSink, eventSink = eventSink,
) )

View file

@ -25,9 +25,11 @@ fun HomeSpacesView(
LazyColumn(modifier) { LazyColumn(modifier) {
state.spaceRooms.forEach { state.spaceRooms.forEach {
item(it.spaceId) { item(it.spaceId) {
val isInvitation = it.state == CurrentUserMembership.INVITED
HomeSpaceItemView( HomeSpaceItemView(
spaceRoom = it, spaceRoom = it,
showUnreadIndicator = it.state == CurrentUserMembership.INVITED && it.spaceId !in state.seenSpaceInvites, showUnreadIndicator = isInvitation && it.spaceId !in state.seenSpaceInvites,
hideAvatars = isInvitation && state.hideInvitesAvatar,
onClick = { onClick = {
onSpaceClick(it.spaceId) onSpaceClick(it.spaceId)
} }