Add "Add existing rooms" entry to space

This commit is contained in:
ganfra
2026-01-20 21:07:42 +01:00
parent c3a469544e
commit e840671bf2
5 changed files with 72 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedInject
import io.element.android.annotations.ContributesNode
import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.features.space.impl.addroom.AddRoomToSpaceNode
import io.element.android.features.space.impl.di.SpaceFlowGraph
import io.element.android.features.space.impl.leave.LeaveSpaceNode
import io.element.android.features.space.impl.root.SpaceNode
@@ -69,6 +70,9 @@ class SpaceFlowNode(
@Parcelize
data object Leave : NavTarget
@Parcelize
data object AddRoom : NavTarget
}
override fun onBuilt() {
@@ -111,6 +115,10 @@ class SpaceFlowNode(
override fun startLeaveSpaceFlow() {
backstack.push(NavTarget.Leave)
}
override fun navigateToAddRoom() {
backstack.push(NavTarget.AddRoom)
}
}
createNode<SpaceNode>(buildContext, listOf(callback))
}
@@ -132,6 +140,14 @@ class SpaceFlowNode(
}
createNode<SpaceSettingsFlowNode>(buildContext, listOf(callback))
}
NavTarget.AddRoom -> {
val callback = object : AddRoomToSpaceNode.Callback {
override fun onFinish() {
backstack.pop()
}
}
createNode<AddRoomToSpaceNode>(buildContext, listOf(callback))
}
}
}

View File

@@ -0,0 +1,38 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.space.impl.addroom
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedInject
import io.element.android.annotations.ContributesNode
import io.element.android.features.space.impl.di.SpaceFlowScope
import io.element.android.libraries.architecture.callback
@ContributesNode(SpaceFlowScope::class)
@AssistedInject
class AddRoomToSpaceNode(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
fun onFinish()
}
private val callback: Callback = callback()
@Composable
override fun View(modifier: Modifier) {
}
}

View File

@@ -46,6 +46,7 @@ class SpaceNode(
fun navigateToSpaceSettings()
fun navigateToRoomMemberList()
fun startLeaveSpaceFlow()
fun navigateToAddRoom()
}
private val callback: Callback = callback()
@@ -89,6 +90,9 @@ class SpaceNode(
onViewMembersClick = {
callback.navigateToRoomMemberList()
},
onAddRoomClick = {
callback.navigateToAddRoom()
},
acceptDeclineInviteView = {
acceptDeclineInviteView.Render(
state = state.acceptDeclineInviteState,

View File

@@ -98,6 +98,7 @@ fun SpaceView(
onLeaveSpaceClick: () -> Unit,
onSettingsClick: () -> Unit,
onViewMembersClick: () -> Unit,
onAddRoomClick: () -> Unit,
modifier: Modifier = Modifier,
acceptDeclineInviteView: @Composable () -> Unit,
) {
@@ -140,6 +141,7 @@ fun SpaceView(
onShareSpace = onShareSpace,
onViewMembersClick = onViewMembersClick,
onManageRoomsClick = { state.eventSink(SpaceEvents.EnterManageMode) },
onAddRoomClick = onAddRoomClick,
)
}
}
@@ -344,6 +346,7 @@ private fun SpaceViewTopBar(
onShareSpace: () -> Unit,
onViewMembersClick: () -> Unit,
onManageRoomsClick: () -> Unit,
onAddRoomClick: () -> Unit,
modifier: Modifier = Modifier,
) {
TopAppBar(
@@ -376,6 +379,14 @@ private fun SpaceViewTopBar(
onDismissRequest = { showMenu = false }
) {
if (showManageRoomsAction) {
SpaceMenuItem(
titleRes = CommonStrings.action_add_existing_rooms,
icon = CompoundIcons.Room(),
onClick = {
showMenu = false
onAddRoomClick()
}
)
SpaceMenuItem(
titleRes = CommonStrings.action_manage_rooms,
icon = CompoundIcons.Edit(),
@@ -600,6 +611,7 @@ internal fun SpaceViewPreview(
acceptDeclineInviteView = {},
onSettingsClick = {},
onViewMembersClick = {},
onAddRoomClick = {},
onBackClick = {},
)
}

View File

@@ -210,6 +210,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setSpace
onLeaveSpaceClick: () -> Unit = EnsureNeverCalled(),
onSettingsClick: () -> Unit = EnsureNeverCalled(),
onViewMembersClick: () -> Unit = EnsureNeverCalled(),
onAddRoomClick: () -> Unit = EnsureNeverCalled(),
acceptDeclineInviteView: @Composable () -> Unit = {},
) {
setContent {
@@ -221,6 +222,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setSpace
onLeaveSpaceClick = onLeaveSpaceClick,
onSettingsClick = onSettingsClick,
onViewMembersClick = onViewMembersClick,
onAddRoomClick = onAddRoomClick,
acceptDeclineInviteView = acceptDeclineInviteView,
)
}