From 0118b47a380c1bf37de434bc944a9a0227debfec Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 6 Feb 2026 09:36:42 +0100 Subject: [PATCH] Update SpaceRoom visibility related UI --- .../matrix/api/spaces/SpaceRoomVisibility.kt | 4 +- .../matrix/ui/components/SpaceInfoRow.kt | 2 +- .../matrix/ui/components/SpaceRoomItemView.kt | 81 +++++-------------- .../matrix/ui/model/SpaceExtension.kt | 8 +- 4 files changed, 27 insertions(+), 68 deletions(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoomVisibility.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoomVisibility.kt index 47a74461db..e3d8e58b3d 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoomVisibility.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoomVisibility.kt @@ -14,12 +14,12 @@ import io.element.android.libraries.matrix.api.room.join.JoinRule sealed interface SpaceRoomVisibility { data object Private : SpaceRoomVisibility data object Public : SpaceRoomVisibility - data object Restricted : SpaceRoomVisibility + data object SpaceMembers : SpaceRoomVisibility companion object { fun fromJoinRule(joinRule: JoinRule?): SpaceRoomVisibility = when (joinRule) { JoinRule.Public -> Public - is JoinRule.Restricted, is JoinRule.KnockRestricted -> Restricted + is JoinRule.Restricted, is JoinRule.KnockRestricted -> SpaceMembers // Else fallback to Private else -> Private } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceInfoRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceInfoRow.kt index 052d9862a6..f83b46a3d7 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceInfoRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceInfoRow.kt @@ -117,7 +117,7 @@ internal fun SpaceInfoRowPreview() = ElementPreview { visibility = SpaceRoomVisibility.Public ) SpaceInfoRow( - visibility = SpaceRoomVisibility.Restricted + visibility = SpaceRoomVisibility.SpaceMembers ) } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt index 61cb3f9839..4d79018e88 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SpaceRoomItemView.kt @@ -24,11 +24,9 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material3.ripple import androidx.compose.runtime.Composable -import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow @@ -100,22 +98,16 @@ fun SpaceRoomItemView( showIndicator = showUnreadIndicator ) Spacer(modifier = Modifier.height(1.dp)) - SubtitleRow( - visibilityIcon = spaceRoom.visibilityIcon(), - subtitle = spaceRoom.subtitle() - ) + VisibilityRow(visibility = spaceRoom.visibility) Spacer(modifier = Modifier.height(1.dp)) - val info = spaceRoom.info() - if (info.isNotBlank()) { - Text( - modifier = Modifier.weight(1f), - style = ElementTheme.typography.fontBodyMdRegular, - text = info, - color = ElementTheme.colors.textSecondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - } + Text( + modifier = Modifier.weight(1f), + style = ElementTheme.typography.fontBodyMdRegular, + text = pluralStringResource(CommonPlurals.common_member_count, spaceRoom.numJoinedMembers, spaceRoom.numJoinedMembers), + color = ElementTheme.colors.textSecondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) } if (bottomAction != null) { Spacer(modifier = Modifier.height(12.dp)) @@ -129,29 +121,26 @@ fun SpaceRoomItemView( } @Composable -private fun SubtitleRow( - visibilityIcon: ImageVector?, - subtitle: String, +private fun VisibilityRow( + visibility: SpaceRoomVisibility, modifier: Modifier = Modifier, ) { Row( modifier = modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, ) { - if (visibilityIcon != null) { - Icon( - modifier = Modifier - .size(16.dp) - .padding(end = 4.dp), - imageVector = visibilityIcon, - contentDescription = null, - tint = ElementTheme.colors.iconTertiary, - ) - } + Icon( + modifier = Modifier + .size(16.dp) + .padding(end = 4.dp), + imageVector = visibility.icon, + contentDescription = null, + tint = ElementTheme.colors.iconTertiary, + ) Text( modifier = Modifier.weight(1f), style = ElementTheme.typography.fontBodyMdRegular, - text = subtitle, + text = visibility.label, color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -219,36 +208,6 @@ private fun SpaceRoomItemScaffold( } } -@Composable -@ReadOnlyComposable -private fun SpaceRoom.subtitle(): String { - return if (isSpace) { - visibility.label - } else { - pluralStringResource(CommonPlurals.common_member_count, numJoinedMembers, numJoinedMembers) - } -} - -@Composable -@ReadOnlyComposable -private fun SpaceRoom.info(): String { - return if (isSpace) { - pluralStringResource(CommonPlurals.common_member_count, numJoinedMembers, numJoinedMembers) - } else { - topic.orEmpty() - } -} - -@Composable -private fun SpaceRoom.visibilityIcon(): ImageVector? { - // Don't show any icon for restricted rooms as it's the default and would add noise - return if (visibility == SpaceRoomVisibility.Restricted) { - null - } else { - visibility.icon - } -} - @Composable @PreviewsDayNight internal fun SpaceRoomItemViewPreview(@PreviewParameter(SpaceRoomProvider::class) spaceRoom: SpaceRoom) = ElementPreview { diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/SpaceExtension.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/SpaceExtension.kt index 195dfdb40e..14e3bfa35b 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/SpaceExtension.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/SpaceExtension.kt @@ -32,7 +32,7 @@ val SpaceRoomVisibility.icon: ImageVector return when (this) { SpaceRoomVisibility.Private -> CompoundIcons.LockSolid() SpaceRoomVisibility.Public -> CompoundIcons.Public() - SpaceRoomVisibility.Restricted -> CompoundIcons.Space() + SpaceRoomVisibility.SpaceMembers -> CompoundIcons.Space() } } @@ -41,8 +41,8 @@ val SpaceRoomVisibility.label: String @ReadOnlyComposable get() { return when (this) { - SpaceRoomVisibility.Private -> stringResource(CommonStrings.common_private_space) - SpaceRoomVisibility.Public -> stringResource(CommonStrings.common_public_space) - SpaceRoomVisibility.Restricted -> stringResource(CommonStrings.common_shared_space) + SpaceRoomVisibility.Private -> stringResource(CommonStrings.common_private) + SpaceRoomVisibility.Public -> stringResource(CommonStrings.common_public) + SpaceRoomVisibility.SpaceMembers -> stringResource(CommonStrings.common_space_members) } }