Start migrating messages screen

This commit is contained in:
ganfra 2023-01-12 18:19:27 +01:00
parent becfda79a2
commit 020fd3b458
38 changed files with 1337 additions and 1205 deletions

View file

@ -8,11 +8,8 @@ import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.pop
import com.bumble.appyx.navmodel.backstack.operation.push
import io.element.android.x.architecture.createNode
import io.element.android.x.architecture.viewmodel.viewModelSupportNode
import io.element.android.x.features.messages.MessagesScreen
import io.element.android.x.features.preferences.PreferencesFlowNode
import io.element.android.x.features.roomlist.RoomListNode
import io.element.android.x.matrix.core.RoomId
@ -34,7 +31,7 @@ class LoggedInFlowNode(
private val roomListCallback = object : RoomListNode.Callback {
override fun onRoomClicked(roomId: RoomId) {
backstack.push(NavTarget.Messages(roomId))
backstack.push(NavTarget.Room(roomId))
}
override fun onSettingsClicked() {
@ -47,7 +44,7 @@ class LoggedInFlowNode(
object RoomList : NavTarget
@Parcelize
data class Messages(val roomId: RoomId) : NavTarget
data class Room(val roomId: RoomId) : NavTarget
@Parcelize
object Settings : NavTarget
@ -58,11 +55,8 @@ class LoggedInFlowNode(
NavTarget.RoomList -> {
createNode<RoomListNode>(buildContext, plugins = listOf(roomListCallback))
}
is NavTarget.Messages -> viewModelSupportNode(buildContext) {
MessagesScreen(
roomId = navTarget.roomId.value,
onBackPressed = { backstack.pop() }
)
is NavTarget.Room -> {
RoomFlowNode(buildContext, navTarget.roomId)
}
NavTarget.Settings -> {
PreferencesFlowNode(buildContext, onOpenBugReport)

View file

@ -0,0 +1,52 @@
package io.element.android.x.node
import android.os.Parcelable
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.composable.Children
import com.bumble.appyx.core.lifecycle.subscribe
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack
import io.element.android.x.architecture.createNode
import io.element.android.x.features.messages.MessagesNode
import io.element.android.x.matrix.core.RoomId
import kotlinx.parcelize.Parcelize
import timber.log.Timber
class RoomFlowNode(
buildContext: BuildContext,
private val roomId: RoomId,
private val backstack: BackStack<NavTarget> = BackStack(
initialElement = NavTarget.Messages,
savedStateMap = buildContext.savedStateMap,
),
) : ParentNode<RoomFlowNode.NavTarget>(
navModel = backstack,
buildContext = buildContext
) {
init {
lifecycle.subscribe(
onCreate = { Timber.v("OnCreate") },
onDestroy = { Timber.v("OnDestroy") }
)
}
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) {
NavTarget.Messages -> createNode<MessagesNode>(buildContext)
}
}
sealed interface NavTarget : Parcelable {
@Parcelize
object Messages : NavTarget
}
@Composable
override fun View(modifier: Modifier) {
Children(navModel = backstack)
}
}