Merge pull request #5614 from element-hq/feature/fga/space_flow_inject_room
Misc : space flow inject room
This commit is contained in:
commit
83d8151012
29 changed files with 163 additions and 74 deletions
|
|
@ -31,12 +31,12 @@ import io.element.android.libraries.architecture.BaseFlowNode
|
|||
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.SessionScope
|
||||
import io.element.android.libraries.di.RoomScope
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.spaces.SpaceService
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@ContributesNode(SessionScope::class)
|
||||
@ContributesNode(RoomScope::class)
|
||||
@AssistedInject
|
||||
class SpaceFlowNode(
|
||||
@Assisted val buildContext: BuildContext,
|
||||
|
|
@ -84,6 +84,10 @@ class SpaceFlowNode(
|
|||
callback.onOpenRoom(roomId, viaParameters)
|
||||
}
|
||||
|
||||
override fun onOpenDetails() {
|
||||
callback.onOpenDetails()
|
||||
}
|
||||
|
||||
override fun onLeaveSpace() {
|
||||
backstack.push(NavTarget.Leave)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,12 +11,12 @@ import dev.zacsweers.metro.ContributesTo
|
|||
import dev.zacsweers.metro.GraphExtension
|
||||
import dev.zacsweers.metro.Provides
|
||||
import io.element.android.libraries.architecture.NodeFactoriesBindings
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.di.RoomScope
|
||||
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
|
||||
|
||||
@GraphExtension(SpaceFlowScope::class)
|
||||
interface SpaceFlowGraph : NodeFactoriesBindings {
|
||||
@ContributesTo(SessionScope::class)
|
||||
@ContributesTo(RoomScope::class)
|
||||
@GraphExtension.Factory
|
||||
interface Factory {
|
||||
fun create(@Provides spaceRoomList: SpaceRoomList): SpaceFlowGraph
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ class SpaceNode(
|
|||
) : Node(buildContext, plugins = plugins) {
|
||||
interface Callback : Plugin {
|
||||
fun onOpenRoom(roomId: RoomId, viaParameters: List<String>)
|
||||
fun onOpenDetails()
|
||||
fun onLeaveSpace()
|
||||
}
|
||||
|
||||
|
|
@ -76,6 +77,9 @@ class SpaceNode(
|
|||
onRoomClick = { spaceRoom ->
|
||||
callback.onOpenRoom(spaceRoom.roomId, spaceRoom.via)
|
||||
},
|
||||
onDetailsClick = {
|
||||
callback.onOpenDetails()
|
||||
},
|
||||
onShareSpace = {
|
||||
onShareRoom(context)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
package io.element.android.features.space.impl.root
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Row
|
||||
|
|
@ -15,6 +16,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
|
|
@ -25,6 +27,7 @@ import androidx.compose.runtime.rememberUpdatedState
|
|||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.heading
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
|
|
@ -74,6 +77,7 @@ fun SpaceView(
|
|||
onRoomClick: (spaceRoom: SpaceRoom) -> Unit,
|
||||
onShareSpace: () -> Unit,
|
||||
onLeaveSpaceClick: () -> Unit,
|
||||
onDetailsClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
acceptDeclineInviteView: @Composable () -> Unit,
|
||||
) {
|
||||
|
|
@ -85,6 +89,7 @@ fun SpaceView(
|
|||
onBackClick = onBackClick,
|
||||
onLeaveSpaceClick = onLeaveSpaceClick,
|
||||
onShareSpace = onShareSpace,
|
||||
onDetailsClick = onDetailsClick
|
||||
)
|
||||
},
|
||||
content = { padding ->
|
||||
|
|
@ -249,6 +254,7 @@ private fun SpaceViewTopBar(
|
|||
currentSpace: SpaceRoom?,
|
||||
onBackClick: () -> Unit,
|
||||
onLeaveSpaceClick: () -> Unit,
|
||||
onDetailsClick: () -> Unit,
|
||||
onShareSpace: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
|
|
@ -259,9 +265,14 @@ private fun SpaceViewTopBar(
|
|||
},
|
||||
title = {
|
||||
if (currentSpace != null) {
|
||||
val roundedCornerShape = RoundedCornerShape(8.dp)
|
||||
SpaceAvatarAndNameRow(
|
||||
name = currentSpace.displayName,
|
||||
avatarData = currentSpace.getAvatarData(AvatarSize.TimelineRoom),
|
||||
modifier = Modifier
|
||||
.clip(roundedCornerShape)
|
||||
// TODO enable when screen ready for space
|
||||
.clickable(enabled = false, onClick = onDetailsClick)
|
||||
)
|
||||
}
|
||||
},
|
||||
|
|
@ -391,6 +402,7 @@ internal fun SpaceViewPreview(
|
|||
onShareSpace = {},
|
||||
onLeaveSpaceClick = {},
|
||||
acceptDeclineInviteView = {},
|
||||
onDetailsClick = {},
|
||||
onBackClick = {},
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ class DefaultSpaceEntryPointTest {
|
|||
}
|
||||
val callback = object : SpaceEntryPoint.Callback {
|
||||
override fun onOpenRoom(roomId: RoomId, viaParameters: List<String>) = lambdaError()
|
||||
override fun onOpenDetails() = lambdaError()
|
||||
}
|
||||
val result = entryPoint.nodeBuilder(parentNode, BuildContext.root(null))
|
||||
.inputs(nodeInputs)
|
||||
|
|
|
|||
|
|
@ -139,6 +139,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setSpace
|
|||
onRoomClick: (SpaceRoom) -> Unit = EnsureNeverCalledWithParam(),
|
||||
onShareSpace: () -> Unit = EnsureNeverCalled(),
|
||||
onLeaveSpaceClick: () -> Unit = EnsureNeverCalled(),
|
||||
onDetailsClick: () -> Unit = EnsureNeverCalled(),
|
||||
acceptDeclineInviteView: @Composable () -> Unit = {},
|
||||
) {
|
||||
setContent {
|
||||
|
|
@ -148,6 +149,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setSpace
|
|||
onRoomClick = onRoomClick,
|
||||
onShareSpace = onShareSpace,
|
||||
onLeaveSpaceClick = onLeaveSpaceClick,
|
||||
onDetailsClick = onDetailsClick,
|
||||
acceptDeclineInviteView = acceptDeclineInviteView,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue