Merge pull request #5948 from element-hq/feature/fga/space_settings_menu_entry
Change : add "settings" entry menu
This commit is contained in:
commit
a09f444b87
3 changed files with 59 additions and 44 deletions
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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 = {},
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue