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
commit a09f444b87
3 changed files with 59 additions and 44 deletions

View file

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

View file

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

View file

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