mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
feature(space) : plumb up space settings screen
This commit is contained in:
-4
@@ -195,10 +195,6 @@ class JoinedRoomLoadedFlowNode(
|
|||||||
callback.navigateToRoom(roomId, viaParameters)
|
callback.navigateToRoom(roomId, viaParameters)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun navigateToRoomDetails() {
|
|
||||||
backstack.push(NavTarget.RoomDetails)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun navigateToRoomMemberList() {
|
override fun navigateToRoomMemberList() {
|
||||||
backstack.push(NavTarget.RoomMemberList)
|
backstack.push(NavTarget.RoomMemberList)
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -28,7 +28,6 @@ interface SpaceEntryPoint : FeatureEntryPoint {
|
|||||||
|
|
||||||
interface Callback : Plugin {
|
interface Callback : Plugin {
|
||||||
fun navigateToRoom(roomId: RoomId, viaParameters: List<String>)
|
fun navigateToRoom(roomId: RoomId, viaParameters: List<String>)
|
||||||
fun navigateToRoomDetails()
|
|
||||||
fun navigateToRoomMemberList()
|
fun navigateToRoomMemberList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-7
@@ -18,6 +18,7 @@ import com.bumble.appyx.core.modality.BuildContext
|
|||||||
import com.bumble.appyx.core.node.Node
|
import com.bumble.appyx.core.node.Node
|
||||||
import com.bumble.appyx.core.plugin.Plugin
|
import com.bumble.appyx.core.plugin.Plugin
|
||||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||||
|
import com.bumble.appyx.navmodel.backstack.operation.pop
|
||||||
import com.bumble.appyx.navmodel.backstack.operation.push
|
import com.bumble.appyx.navmodel.backstack.operation.push
|
||||||
import dev.zacsweers.metro.Assisted
|
import dev.zacsweers.metro.Assisted
|
||||||
import dev.zacsweers.metro.AssistedInject
|
import dev.zacsweers.metro.AssistedInject
|
||||||
@@ -26,14 +27,15 @@ import io.element.android.features.space.api.SpaceEntryPoint
|
|||||||
import io.element.android.features.space.impl.di.SpaceFlowGraph
|
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.leave.LeaveSpaceNode
|
||||||
import io.element.android.features.space.impl.root.SpaceNode
|
import io.element.android.features.space.impl.root.SpaceNode
|
||||||
|
import io.element.android.features.space.impl.settings.SpaceSettingsNode
|
||||||
import io.element.android.libraries.architecture.BackstackView
|
import io.element.android.libraries.architecture.BackstackView
|
||||||
import io.element.android.libraries.architecture.BaseFlowNode
|
import io.element.android.libraries.architecture.BaseFlowNode
|
||||||
import io.element.android.libraries.architecture.callback
|
import io.element.android.libraries.architecture.callback
|
||||||
import io.element.android.libraries.architecture.createNode
|
import io.element.android.libraries.architecture.createNode
|
||||||
import io.element.android.libraries.architecture.inputs
|
|
||||||
import io.element.android.libraries.di.DependencyInjectionGraphOwner
|
import io.element.android.libraries.di.DependencyInjectionGraphOwner
|
||||||
import io.element.android.libraries.di.RoomScope
|
import io.element.android.libraries.di.RoomScope
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
import io.element.android.libraries.matrix.api.room.BaseRoom
|
||||||
import io.element.android.libraries.matrix.api.spaces.SpaceService
|
import io.element.android.libraries.matrix.api.spaces.SpaceService
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@@ -42,6 +44,7 @@ import kotlinx.parcelize.Parcelize
|
|||||||
class SpaceFlowNode(
|
class SpaceFlowNode(
|
||||||
@Assisted val buildContext: BuildContext,
|
@Assisted val buildContext: BuildContext,
|
||||||
@Assisted plugins: List<Plugin>,
|
@Assisted plugins: List<Plugin>,
|
||||||
|
room: BaseRoom,
|
||||||
spaceService: SpaceService,
|
spaceService: SpaceService,
|
||||||
graphFactory: SpaceFlowGraph.Factory,
|
graphFactory: SpaceFlowGraph.Factory,
|
||||||
) : BaseFlowNode<SpaceFlowNode.NavTarget>(
|
) : BaseFlowNode<SpaceFlowNode.NavTarget>(
|
||||||
@@ -52,15 +55,17 @@ class SpaceFlowNode(
|
|||||||
buildContext = buildContext,
|
buildContext = buildContext,
|
||||||
plugins = plugins,
|
plugins = plugins,
|
||||||
), DependencyInjectionGraphOwner {
|
), DependencyInjectionGraphOwner {
|
||||||
private val inputs: SpaceEntryPoint.Inputs = inputs()
|
|
||||||
private val callback: SpaceEntryPoint.Callback = callback()
|
private val callback: SpaceEntryPoint.Callback = callback()
|
||||||
private val spaceRoomList = spaceService.spaceRoomList(inputs.roomId)
|
private val spaceRoomList = spaceService.spaceRoomList(room.roomId)
|
||||||
override val graph = graphFactory.create(spaceRoomList)
|
override val graph = graphFactory.create(spaceRoomList)
|
||||||
|
|
||||||
sealed interface NavTarget : Parcelable {
|
sealed interface NavTarget : Parcelable {
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data object Root : NavTarget
|
data object Root : NavTarget
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data object Settings : NavTarget
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data object Leave : NavTarget
|
data object Leave : NavTarget
|
||||||
}
|
}
|
||||||
@@ -77,7 +82,7 @@ class SpaceFlowNode(
|
|||||||
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
|
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
|
||||||
return when (navTarget) {
|
return when (navTarget) {
|
||||||
NavTarget.Leave -> {
|
NavTarget.Leave -> {
|
||||||
createNode<LeaveSpaceNode>(buildContext, listOf(inputs))
|
createNode<LeaveSpaceNode>(buildContext)
|
||||||
}
|
}
|
||||||
NavTarget.Root -> {
|
NavTarget.Root -> {
|
||||||
val callback = object : SpaceNode.Callback {
|
val callback = object : SpaceNode.Callback {
|
||||||
@@ -85,8 +90,8 @@ class SpaceFlowNode(
|
|||||||
callback.navigateToRoom(roomId, viaParameters)
|
callback.navigateToRoom(roomId, viaParameters)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun navigateToRoomDetails() {
|
override fun navigateToSpaceSettings() {
|
||||||
callback.navigateToRoomDetails()
|
backstack.push(NavTarget.Settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun navigateToRoomMemberList() {
|
override fun navigateToRoomMemberList() {
|
||||||
@@ -97,7 +102,35 @@ class SpaceFlowNode(
|
|||||||
backstack.push(NavTarget.Leave)
|
backstack.push(NavTarget.Leave)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createNode<SpaceNode>(buildContext, listOf(inputs, callback))
|
createNode<SpaceNode>(buildContext, listOf(callback))
|
||||||
|
}
|
||||||
|
NavTarget.Settings -> {
|
||||||
|
val callback = object : SpaceSettingsNode.Callback {
|
||||||
|
override fun onBackClick() {
|
||||||
|
backstack.pop()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSpaceInfoClick() {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onMembersClick() {
|
||||||
|
callback.navigateToRoomMemberList()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRolesAndPermissionsClick() {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSecurityAndPrivacyClick() {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLeaveSpaceClick() {
|
||||||
|
backstack.push(NavTarget.Leave)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
createNode<SpaceSettingsNode>(buildContext, listOf(callback))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -16,10 +16,9 @@ import com.bumble.appyx.core.plugin.Plugin
|
|||||||
import dev.zacsweers.metro.Assisted
|
import dev.zacsweers.metro.Assisted
|
||||||
import dev.zacsweers.metro.AssistedInject
|
import dev.zacsweers.metro.AssistedInject
|
||||||
import io.element.android.annotations.ContributesNode
|
import io.element.android.annotations.ContributesNode
|
||||||
import io.element.android.features.space.api.SpaceEntryPoint
|
|
||||||
import io.element.android.features.space.impl.di.SpaceFlowScope
|
import io.element.android.features.space.impl.di.SpaceFlowScope
|
||||||
import io.element.android.libraries.architecture.inputs
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
|
|
||||||
@ContributesNode(SpaceFlowScope::class)
|
@ContributesNode(SpaceFlowScope::class)
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
@@ -27,10 +26,10 @@ class LeaveSpaceNode(
|
|||||||
@Assisted buildContext: BuildContext,
|
@Assisted buildContext: BuildContext,
|
||||||
@Assisted plugins: List<Plugin>,
|
@Assisted plugins: List<Plugin>,
|
||||||
matrixClient: MatrixClient,
|
matrixClient: MatrixClient,
|
||||||
|
room: JoinedRoom,
|
||||||
presenterFactory: LeaveSpacePresenter.Factory,
|
presenterFactory: LeaveSpacePresenter.Factory,
|
||||||
) : Node(buildContext, plugins = plugins) {
|
) : Node(buildContext, plugins = plugins) {
|
||||||
private val inputs: SpaceEntryPoint.Inputs = inputs()
|
private val leaveSpaceHandle = matrixClient.spaceService.getLeaveSpaceHandle(room.roomId)
|
||||||
private val leaveSpaceHandle = matrixClient.spaceService.getLeaveSpaceHandle(inputs.roomId)
|
|
||||||
private val presenter: LeaveSpacePresenter = presenterFactory.create(leaveSpaceHandle)
|
private val presenter: LeaveSpacePresenter = presenterFactory.create(leaveSpaceHandle)
|
||||||
|
|
||||||
override fun onBuilt() {
|
override fun onBuilt() {
|
||||||
|
|||||||
+2
-2
@@ -42,7 +42,7 @@ class SpaceNode(
|
|||||||
) : Node(buildContext, plugins = plugins) {
|
) : Node(buildContext, plugins = plugins) {
|
||||||
interface Callback : Plugin {
|
interface Callback : Plugin {
|
||||||
fun navigateToRoom(roomId: RoomId, viaParameters: List<String>)
|
fun navigateToRoom(roomId: RoomId, viaParameters: List<String>)
|
||||||
fun navigateToRoomDetails()
|
fun navigateToSpaceSettings()
|
||||||
fun navigateToRoomMemberList()
|
fun navigateToRoomMemberList()
|
||||||
fun startLeaveSpaceFlow()
|
fun startLeaveSpaceFlow()
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ class SpaceNode(
|
|||||||
callback.navigateToRoom(spaceRoom.roomId, spaceRoom.via)
|
callback.navigateToRoom(spaceRoom.roomId, spaceRoom.via)
|
||||||
},
|
},
|
||||||
onDetailsClick = {
|
onDetailsClick = {
|
||||||
callback.navigateToRoomDetails()
|
callback.navigateToSpaceSettings()
|
||||||
},
|
},
|
||||||
onShareSpace = {
|
onShareSpace = {
|
||||||
onShareRoom(context)
|
onShareRoom(context)
|
||||||
|
|||||||
Reference in New Issue
Block a user