Update SpaceRoom visibility related UI
This commit is contained in:
parent
7b3ceeb19b
commit
8625c9d5ae
4 changed files with 27 additions and 68 deletions
|
|
@ -14,12 +14,12 @@ import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
sealed interface SpaceRoomVisibility {
|
sealed interface SpaceRoomVisibility {
|
||||||
data object Private : SpaceRoomVisibility
|
data object Private : SpaceRoomVisibility
|
||||||
data object Public : SpaceRoomVisibility
|
data object Public : SpaceRoomVisibility
|
||||||
data object Restricted : SpaceRoomVisibility
|
data object SpaceMembers : SpaceRoomVisibility
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromJoinRule(joinRule: JoinRule?): SpaceRoomVisibility = when (joinRule) {
|
fun fromJoinRule(joinRule: JoinRule?): SpaceRoomVisibility = when (joinRule) {
|
||||||
JoinRule.Public -> Public
|
JoinRule.Public -> Public
|
||||||
is JoinRule.Restricted, is JoinRule.KnockRestricted -> Restricted
|
is JoinRule.Restricted, is JoinRule.KnockRestricted -> SpaceMembers
|
||||||
// Else fallback to Private
|
// Else fallback to Private
|
||||||
else -> Private
|
else -> Private
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ internal fun SpaceInfoRowPreview() = ElementPreview {
|
||||||
visibility = SpaceRoomVisibility.Public
|
visibility = SpaceRoomVisibility.Public
|
||||||
)
|
)
|
||||||
SpaceInfoRow(
|
SpaceInfoRow(
|
||||||
visibility = SpaceRoomVisibility.Restricted
|
visibility = SpaceRoomVisibility.SpaceMembers
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,9 @@ import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.material3.ripple
|
import androidx.compose.material3.ripple
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.ReadOnlyComposable
|
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
|
||||||
import androidx.compose.ui.res.pluralStringResource
|
import androidx.compose.ui.res.pluralStringResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
|
@ -100,22 +98,16 @@ fun SpaceRoomItemView(
|
||||||
showIndicator = showUnreadIndicator
|
showIndicator = showUnreadIndicator
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.height(1.dp))
|
Spacer(modifier = Modifier.height(1.dp))
|
||||||
SubtitleRow(
|
VisibilityRow(visibility = spaceRoom.visibility)
|
||||||
visibilityIcon = spaceRoom.visibilityIcon(),
|
|
||||||
subtitle = spaceRoom.subtitle()
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.height(1.dp))
|
Spacer(modifier = Modifier.height(1.dp))
|
||||||
val info = spaceRoom.info()
|
Text(
|
||||||
if (info.isNotBlank()) {
|
modifier = Modifier.weight(1f),
|
||||||
Text(
|
style = ElementTheme.typography.fontBodyMdRegular,
|
||||||
modifier = Modifier.weight(1f),
|
text = pluralStringResource(CommonPlurals.common_member_count, spaceRoom.numJoinedMembers, spaceRoom.numJoinedMembers),
|
||||||
style = ElementTheme.typography.fontBodyMdRegular,
|
color = ElementTheme.colors.textSecondary,
|
||||||
text = info,
|
maxLines = 1,
|
||||||
color = ElementTheme.colors.textSecondary,
|
overflow = TextOverflow.Ellipsis
|
||||||
maxLines = 1,
|
)
|
||||||
overflow = TextOverflow.Ellipsis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (bottomAction != null) {
|
if (bottomAction != null) {
|
||||||
Spacer(modifier = Modifier.height(12.dp))
|
Spacer(modifier = Modifier.height(12.dp))
|
||||||
|
|
@ -129,29 +121,26 @@ fun SpaceRoomItemView(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SubtitleRow(
|
private fun VisibilityRow(
|
||||||
visibilityIcon: ImageVector?,
|
visibility: SpaceRoomVisibility,
|
||||||
subtitle: String,
|
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
Row(
|
Row(
|
||||||
modifier = modifier.fillMaxWidth(),
|
modifier = modifier.fillMaxWidth(),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
) {
|
) {
|
||||||
if (visibilityIcon != null) {
|
Icon(
|
||||||
Icon(
|
modifier = Modifier
|
||||||
modifier = Modifier
|
.size(16.dp)
|
||||||
.size(16.dp)
|
.padding(end = 4.dp),
|
||||||
.padding(end = 4.dp),
|
imageVector = visibility.icon,
|
||||||
imageVector = visibilityIcon,
|
contentDescription = null,
|
||||||
contentDescription = null,
|
tint = ElementTheme.colors.iconTertiary,
|
||||||
tint = ElementTheme.colors.iconTertiary,
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
style = ElementTheme.typography.fontBodyMdRegular,
|
style = ElementTheme.typography.fontBodyMdRegular,
|
||||||
text = subtitle,
|
text = visibility.label,
|
||||||
color = ElementTheme.colors.textSecondary,
|
color = ElementTheme.colors.textSecondary,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis
|
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
|
@Composable
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
internal fun SpaceRoomItemViewPreview(@PreviewParameter(SpaceRoomProvider::class) spaceRoom: SpaceRoom) = ElementPreview {
|
internal fun SpaceRoomItemViewPreview(@PreviewParameter(SpaceRoomProvider::class) spaceRoom: SpaceRoom) = ElementPreview {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ val SpaceRoomVisibility.icon: ImageVector
|
||||||
return when (this) {
|
return when (this) {
|
||||||
SpaceRoomVisibility.Private -> CompoundIcons.LockSolid()
|
SpaceRoomVisibility.Private -> CompoundIcons.LockSolid()
|
||||||
SpaceRoomVisibility.Public -> CompoundIcons.Public()
|
SpaceRoomVisibility.Public -> CompoundIcons.Public()
|
||||||
SpaceRoomVisibility.Restricted -> CompoundIcons.Space()
|
SpaceRoomVisibility.SpaceMembers -> CompoundIcons.Space()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,8 +41,8 @@ val SpaceRoomVisibility.label: String
|
||||||
@ReadOnlyComposable
|
@ReadOnlyComposable
|
||||||
get() {
|
get() {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
SpaceRoomVisibility.Private -> stringResource(CommonStrings.common_private_space)
|
SpaceRoomVisibility.Private -> stringResource(CommonStrings.common_private)
|
||||||
SpaceRoomVisibility.Public -> stringResource(CommonStrings.common_public_space)
|
SpaceRoomVisibility.Public -> stringResource(CommonStrings.common_public)
|
||||||
SpaceRoomVisibility.Restricted -> stringResource(CommonStrings.common_shared_space)
|
SpaceRoomVisibility.SpaceMembers -> stringResource(CommonStrings.common_space_members)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue