From 313aa7e3c2b0a35b4f751940d3fe2590b21726db Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 15 Dec 2025 20:46:23 +0100 Subject: [PATCH] change(space) : last admin navigate to security&privacy --- .../android/features/space/impl/SpaceFlowNode.kt | 10 ++++++---- .../features/space/impl/leave/LeaveSpaceView.kt | 3 +-- .../space/impl/settings/SpaceSettingsFlowNode.kt | 9 +++++++-- .../android/libraries/architecture/NodeCallback.kt | 7 +++++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt index 5fe646aaeb..4c91da0301 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt @@ -65,7 +65,7 @@ class SpaceFlowNode( data object Root : NavTarget @Parcelize - data object Settings : NavTarget + data class Settings(val initialTarget: SpaceSettingsFlowNode.NavTarget = SpaceSettingsFlowNode.NavTarget.Root) : NavTarget @Parcelize data object Leave : NavTarget @@ -89,7 +89,7 @@ class SpaceFlowNode( } override fun navigateToRolesAndPermissions() { - // TODO + backstack.push(NavTarget.Settings(SpaceSettingsFlowNode.NavTarget.RolesAndPermissions)) } } createNode(buildContext, listOf(callback)) @@ -101,7 +101,7 @@ class SpaceFlowNode( } override fun navigateToSpaceSettings() { - backstack.push(NavTarget.Settings) + backstack.push(NavTarget.Settings()) } override fun navigateToRoomMemberList() { @@ -114,8 +114,10 @@ class SpaceFlowNode( } createNode(buildContext, listOf(callback)) } - NavTarget.Settings -> { + is NavTarget.Settings -> { val callback = object : SpaceSettingsFlowNode.Callback { + override fun initialTarget() = navTarget.initialTarget + override fun navigateToSpaceMembers() { callback.navigateToRoomMemberList() } diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt index 02598f25ed..d405162b88 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt @@ -132,8 +132,7 @@ fun LeaveSpaceView( state.eventSink(LeaveSpaceEvents.LeaveSpace) }, onCancel = onCancel, - // TODO enable when navigation is ready - showRolesAndPermissionsButton = false, // state.isLastAdmin, + showRolesAndPermissionsButton = state.isLastAdmin, onRolesAndPermissionsClick = onRolesAndPermissionsClick, ) } diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsFlowNode.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsFlowNode.kt index b5f0495bcb..8fc7f51aa7 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsFlowNode.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsFlowNode.kt @@ -39,13 +39,14 @@ class SpaceSettingsFlowNode( private val roomDetailsEditEntryPoint: RoomDetailsEditEntryPoint ) : BaseFlowNode( backstack = BackStack( - initialElement = NavTarget.Root, + initialElement = initialElement(plugins), savedStateMap = buildContext.savedStateMap, ), buildContext = buildContext, plugins = plugins, ) { interface Callback : Plugin { + fun initialTarget(): NavTarget = NavTarget.Root fun navigateToSpaceMembers() fun startLeaveSpaceFlow() fun closeSettings() @@ -56,7 +57,7 @@ class SpaceSettingsFlowNode( data object Root : NavTarget @Parcelize - data object EditDetails: NavTarget + data object EditDetails : NavTarget @Parcelize data object SecurityAndPrivacy : NavTarget @@ -138,3 +139,7 @@ class SpaceSettingsFlowNode( BackstackView(modifier) } } + +fun initialElement(plugins: List): SpaceSettingsFlowNode.NavTarget { + return plugins.callback().initialTarget() +} diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeCallback.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeCallback.kt index 4a35f99db4..e949dcaf63 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeCallback.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeCallback.kt @@ -10,8 +10,11 @@ package io.element.android.libraries.architecture import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.bumble.appyx.core.plugin.plugins inline fun Node.callback(): I { - return requireNotNull(plugins().singleOrNull()) { "Make sure to actually pass a Callback plugin to your node" } + return plugins.callback() +} + +inline fun List.callback(): I { + return requireNotNull(filterIsInstance().singleOrNull()) { "Make sure to actually pass a Callback plugin to your node" } }