Merge pull request #5948 from element-hq/feature/fga/space_settings_menu_entry

Change : add "settings" entry menu
This commit is contained in:
ganfra
2025-12-22 17:31:20 +01:00
committed by GitHub
3 changed files with 59 additions and 44 deletions

View File

@@ -80,7 +80,7 @@ class SpaceNode(
onRoomClick = { spaceRoom ->
callback.navigateToRoom(spaceRoom.roomId, spaceRoom.via)
},
onDetailsClick = {
onSettingsClick = {
callback.navigateToSpaceSettings()
},
onShareSpace = {

View File

@@ -8,6 +8,7 @@
package io.element.android.features.space.impl.root
import androidx.annotation.StringRes
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
@@ -29,6 +30,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.semantics
@@ -78,7 +80,7 @@ fun SpaceView(
onRoomClick: (spaceRoom: SpaceRoom) -> Unit,
onShareSpace: () -> Unit,
onLeaveSpaceClick: () -> Unit,
onDetailsClick: () -> Unit,
onSettingsClick: () -> Unit,
onViewMembersClick: () -> Unit,
modifier: Modifier = Modifier,
acceptDeclineInviteView: @Composable () -> Unit,
@@ -92,7 +94,7 @@ fun SpaceView(
onBackClick = onBackClick,
onLeaveSpaceClick = onLeaveSpaceClick,
onShareSpace = onShareSpace,
onDetailsClick = onDetailsClick,
onSettingsClick = onSettingsClick,
onViewMembersClick = onViewMembersClick,
)
},
@@ -259,7 +261,7 @@ private fun SpaceViewTopBar(
canAccessSpaceSettings: Boolean,
onBackClick: () -> Unit,
onLeaveSpaceClick: () -> Unit,
onDetailsClick: () -> Unit,
onSettingsClick: () -> Unit,
onShareSpace: () -> Unit,
onViewMembersClick: () -> Unit,
modifier: Modifier = Modifier,
@@ -277,7 +279,7 @@ private fun SpaceViewTopBar(
avatarData = currentSpace.getAvatarData(AvatarSize.TimelineRoom),
modifier = Modifier
.clip(roundedCornerShape)
.clickable(enabled = canAccessSpaceSettings, onClick = onDetailsClick)
.clickable(enabled = canAccessSpaceSettings, onClick = onSettingsClick)
)
}
},
@@ -295,51 +297,39 @@ private fun SpaceViewTopBar(
expanded = showMenu,
onDismissRequest = { showMenu = false }
) {
DropdownMenuItem(
onClick = {
showMenu = false
onShareSpace()
},
text = { Text(stringResource(id = CommonStrings.action_share)) },
leadingIcon = {
Icon(
imageVector = CompoundIcons.ShareAndroid(),
tint = ElementTheme.colors.iconSecondary,
contentDescription = null,
)
}
)
DropdownMenuItem(
SpaceMenuItem(
titleRes = CommonStrings.screen_space_menu_action_members,
icon = CompoundIcons.User(),
onClick = {
showMenu = false
onViewMembersClick()
},
text = { Text(stringResource(id = CommonStrings.screen_space_menu_action_members)) },
leadingIcon = {
Icon(
imageVector = CompoundIcons.User(),
tint = ElementTheme.colors.iconSecondary,
contentDescription = null,
)
}
)
DropdownMenuItem(
SpaceMenuItem(
titleRes = CommonStrings.action_share,
icon = CompoundIcons.ShareAndroid(),
onClick = {
showMenu = false
onShareSpace()
}
)
if (canAccessSpaceSettings) {
SpaceMenuItem(
titleRes = CommonStrings.common_settings,
icon = CompoundIcons.Settings(),
onClick = {
showMenu = false
onSettingsClick()
}
)
}
SpaceMenuItem(
titleRes = CommonStrings.action_leave_space,
icon = CompoundIcons.Leave(),
isCritical = true,
onClick = {
showMenu = false
onLeaveSpaceClick()
},
text = {
Text(
text = stringResource(id = CommonStrings.action_leave_space),
color = ElementTheme.colors.textCriticalPrimary,
)
},
leadingIcon = {
Icon(
imageVector = CompoundIcons.Leave(),
tint = ElementTheme.colors.iconCriticalPrimary,
contentDescription = null,
)
}
)
}
@@ -347,6 +337,31 @@ private fun SpaceViewTopBar(
)
}
@Composable
private fun SpaceMenuItem(
@StringRes titleRes: Int,
icon: ImageVector,
onClick: () -> Unit,
isCritical: Boolean = false,
) {
DropdownMenuItem(
onClick = onClick,
text = {
Text(
text = stringResource(titleRes),
color = if (isCritical) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textPrimary,
)
},
leadingIcon = {
Icon(
imageVector = icon,
tint = if (isCritical) ElementTheme.colors.iconCriticalPrimary else ElementTheme.colors.iconSecondary,
contentDescription = null,
)
}
)
}
@Composable
private fun SpaceAvatarAndNameRow(
name: String?,
@@ -421,7 +436,7 @@ internal fun SpaceViewPreview(
onShareSpace = {},
onLeaveSpaceClick = {},
acceptDeclineInviteView = {},
onDetailsClick = {},
onSettingsClick = {},
onViewMembersClick = {},
onBackClick = {},
)

View File

@@ -151,7 +151,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setSpace
onRoomClick = onRoomClick,
onShareSpace = onShareSpace,
onLeaveSpaceClick = onLeaveSpaceClick,
onDetailsClick = onDetailsClick,
onSettingsClick = onDetailsClick,
onViewMembersClick = onViewMembersClick,
acceptDeclineInviteView = acceptDeclineInviteView,
)