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 85d7532124
commit cbcf86b1c9
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(
spaceRoom: SpaceRoom,
showUnreadIndicator: Boolean,
hideAvatars: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier,
) {
@@ -61,6 +62,7 @@ internal fun HomeSpaceItemView(
modifier = modifier,
spaceRoom = spaceRoom,
onClick = onClick,
hideAvatars = hideAvatars,
onLongClick = { },
) {
NameAndIndicatorRow(
@@ -151,7 +153,7 @@ private fun SpaceScaffoldRow(
onClick: () -> Unit,
onLongClick: () -> Unit,
modifier: Modifier = Modifier,
hideAvatarImage: Boolean,
hideAvatars: Boolean,
content: @Composable ColumnScope.() -> Unit
) {
val clickModifier = Modifier
@@ -173,7 +175,7 @@ private fun SpaceScaffoldRow(
Avatar(
avatarData = spaceRoom.getAvatarData(AvatarSize.SpaceListItem),
avatarType = AvatarType.Space(),
hideImage = hideAvatarImage,
hideImage = hideAvatars,
)
Spacer(modifier = Modifier.width(16.dp))
Column(
@@ -189,6 +191,7 @@ internal fun HomeSpaceItemViewPreview(@PreviewParameter(SpaceRoomProvider::class
HomeSpaceItemView(
spaceRoom = spaceRoom,
showUnreadIndicator = false,
hideAvatars = true,
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.seenSpaceIds
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.mapState
import io.element.android.libraries.matrix.api.MatrixClient
import kotlinx.collections.immutable.persistentSetOf
import kotlinx.collections.immutable.toPersistentSet
@@ -26,6 +27,12 @@ class HomeSpacesPresenter @Inject constructor(
) : Presenter<HomeSpacesState> {
@Composable
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 seenSpaceInvites by remember {
seenInvitesStore.seenSpaceIds().map { it.toPersistentSet() }
@@ -38,6 +45,7 @@ class HomeSpacesPresenter @Inject constructor(
return HomeSpacesState(
spaceRooms = spaceRooms,
seenSpaceInvites = seenSpaceInvites,
hideInvitesAvatar = hideInvitesAvatar,
eventSink = ::handleEvents,
)
}

View File

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

View File

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

View File

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