Ensure a Callback and only one is provided in the Plugin. Also reduce boilerplate code in Nodes.
This commit is contained in:
parent
2e8785b36b
commit
be03c50aaf
76 changed files with 374 additions and 741 deletions
|
|
@ -21,13 +21,13 @@ import com.bumble.appyx.core.navigation.model.permanent.PermanentNavModel
|
|||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.node.ParentNode
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedInject
|
||||
import io.element.android.annotations.ContributesNode
|
||||
import io.element.android.appnav.di.SessionGraphFactory
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.callback
|
||||
import io.element.android.libraries.architecture.createNode
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.di.DependencyInjectionGraphOwner
|
||||
|
|
@ -60,6 +60,8 @@ class LoggedInAppScopeFlowNode(
|
|||
fun navigateToAddAccount()
|
||||
}
|
||||
|
||||
private val callback: Callback = callback()
|
||||
|
||||
@Parcelize
|
||||
object NavTarget : Parcelable
|
||||
|
||||
|
|
@ -82,11 +84,11 @@ class LoggedInAppScopeFlowNode(
|
|||
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
|
||||
val callback = object : LoggedInFlowNode.Callback {
|
||||
override fun navigateToBugReport() {
|
||||
plugins<Callback>().forEach { it.navigateToBugReport() }
|
||||
callback.navigateToBugReport()
|
||||
}
|
||||
|
||||
override fun navigateToAddAccount() {
|
||||
plugins<Callback>().forEach { it.navigateToAddAccount() }
|
||||
callback.navigateToAddAccount()
|
||||
}
|
||||
}
|
||||
return createNode<LoggedInFlowNode>(buildContext, listOf(callback))
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import com.bumble.appyx.core.navigation.NavKey
|
|||
import com.bumble.appyx.core.navigation.model.permanent.PermanentNavModel
|
||||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||
import com.bumble.appyx.navmodel.backstack.BackStack.State.ACTIVE
|
||||
import com.bumble.appyx.navmodel.backstack.BackStack.State.CREATED
|
||||
|
|
@ -67,6 +66,7 @@ import io.element.android.features.userprofile.api.UserProfileEntryPoint
|
|||
import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint
|
||||
import io.element.android.libraries.architecture.BackstackView
|
||||
import io.element.android.libraries.architecture.BaseFlowNode
|
||||
import io.element.android.libraries.architecture.callback
|
||||
import io.element.android.libraries.architecture.createNode
|
||||
import io.element.android.libraries.architecture.waitForChildAttached
|
||||
import io.element.android.libraries.architecture.waitForNavTargetAttached
|
||||
|
|
@ -152,6 +152,7 @@ class LoggedInFlowNode(
|
|||
fun navigateToAddAccount()
|
||||
}
|
||||
|
||||
private val callback: Callback = callback()
|
||||
private val loggedInFlowProcessor = LoggedInEventProcessor(
|
||||
snackbarDispatcher = snackbarDispatcher,
|
||||
roomMembershipObserver = matrixClient.roomMembershipObserver,
|
||||
|
|
@ -329,7 +330,7 @@ class LoggedInFlowNode(
|
|||
}
|
||||
|
||||
override fun navigateToBugReport() {
|
||||
plugins<Callback>().forEach { it.navigateToBugReport() }
|
||||
callback.navigateToBugReport()
|
||||
}
|
||||
}
|
||||
homeEntryPoint
|
||||
|
|
@ -396,11 +397,11 @@ class LoggedInFlowNode(
|
|||
is NavTarget.Settings -> {
|
||||
val callback = object : PreferencesEntryPoint.Callback {
|
||||
override fun navigateToAddAccount() {
|
||||
plugins<Callback>().forEach { it.navigateToAddAccount() }
|
||||
callback.navigateToAddAccount()
|
||||
}
|
||||
|
||||
override fun navigateToBugReport() {
|
||||
plugins<Callback>().forEach { it.navigateToBugReport() }
|
||||
callback.navigateToAddAccount()
|
||||
}
|
||||
|
||||
override fun navigateToSecureBackup() {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ 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.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.Assisted
|
||||
|
|
@ -29,6 +28,7 @@ import io.element.android.features.login.api.LoginParams
|
|||
import io.element.android.libraries.architecture.BackstackView
|
||||
import io.element.android.libraries.architecture.BaseFlowNode
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.callback
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.designsystem.utils.ForceOrientationInMobileDevices
|
||||
import io.element.android.libraries.designsystem.utils.ScreenOrientation
|
||||
|
|
@ -58,6 +58,7 @@ class NotLoggedInFlowNode(
|
|||
fun navigateToBugReport()
|
||||
}
|
||||
|
||||
private val callback: Callback = callback()
|
||||
private val inputs = inputs<Params>()
|
||||
|
||||
override fun onBuilt() {
|
||||
|
|
@ -79,7 +80,7 @@ class NotLoggedInFlowNode(
|
|||
NavTarget.Root -> {
|
||||
val callback = object : LoginEntryPoint.Callback {
|
||||
override fun navigateToBugReport() {
|
||||
plugins<Callback>().forEach { it.navigateToBugReport() }
|
||||
callback.navigateToBugReport()
|
||||
}
|
||||
}
|
||||
loginEntryPoint
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@ 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 com.bumble.appyx.core.plugin.plugins
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedInject
|
||||
import io.element.android.annotations.ContributesNode
|
||||
import io.element.android.libraries.architecture.callback
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
|
||||
@ContributesNode(SessionScope::class)
|
||||
|
|
@ -32,18 +32,14 @@ class LoggedInNode(
|
|||
fun navigateToNotificationTroubleshoot()
|
||||
}
|
||||
|
||||
private fun navigateToNotificationTroubleshoot() {
|
||||
plugins<Callback>().forEach {
|
||||
it.navigateToNotificationTroubleshoot()
|
||||
}
|
||||
}
|
||||
private val callback: Callback = callback()
|
||||
|
||||
@Composable
|
||||
override fun View(modifier: Modifier) {
|
||||
val loggedInState = loggedInPresenter.present()
|
||||
LoggedInView(
|
||||
state = loggedInState,
|
||||
navigateToNotificationTroubleshoot = ::navigateToNotificationTroubleshoot,
|
||||
navigateToNotificationTroubleshoot = callback::navigateToNotificationTroubleshoot,
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import io.element.android.features.space.api.SpaceEntryPoint
|
|||
import io.element.android.libraries.architecture.BackstackView
|
||||
import io.element.android.libraries.architecture.BaseFlowNode
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.callback
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.architecture.waitForChildAttached
|
||||
import io.element.android.libraries.di.DependencyInjectionGraphOwner
|
||||
|
|
@ -87,7 +88,7 @@ class JoinedRoomLoadedFlowNode(
|
|||
) : NodeInputs
|
||||
|
||||
private val inputs: Inputs = inputs()
|
||||
private val callbacks = plugins.filterIsInstance<Callback>()
|
||||
private val callback: Callback = callback()
|
||||
override val graph = roomGraphFactory.create(inputs.room)
|
||||
|
||||
init {
|
||||
|
|
@ -124,15 +125,15 @@ class JoinedRoomLoadedFlowNode(
|
|||
private fun createRoomDetailsNode(buildContext: BuildContext, initialTarget: RoomDetailsEntryPoint.InitialTarget): Node {
|
||||
val callback = object : RoomDetailsEntryPoint.Callback {
|
||||
override fun navigateToGlobalNotificationSettings() {
|
||||
callbacks.forEach { it.navigateToGlobalNotificationSettings() }
|
||||
callback.navigateToGlobalNotificationSettings()
|
||||
}
|
||||
|
||||
override fun navigateToRoom(roomId: RoomId, serverNames: List<String>) {
|
||||
callbacks.forEach { it.navigateToRoom(roomId, serverNames) }
|
||||
callback.navigateToRoom(roomId, serverNames)
|
||||
}
|
||||
|
||||
override fun handlePermalinkClick(data: PermalinkData, pushToBackstack: Boolean) {
|
||||
callbacks.forEach { it.handlePermalinkClick(data, pushToBackstack) }
|
||||
callback.handlePermalinkClick(data, pushToBackstack)
|
||||
}
|
||||
|
||||
override fun startForwardEventFlow(eventId: EventId) {
|
||||
|
|
@ -172,7 +173,7 @@ class JoinedRoomLoadedFlowNode(
|
|||
override fun onDone(roomIds: List<RoomId>) {
|
||||
backstack.pop()
|
||||
roomIds.singleOrNull()?.let { roomId ->
|
||||
callbacks.forEach { it.navigateToRoom(roomId, emptyList()) }
|
||||
callback.navigateToRoom(roomId, emptyList())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -187,7 +188,7 @@ class JoinedRoomLoadedFlowNode(
|
|||
private fun createSpaceNode(buildContext: BuildContext): Node {
|
||||
val callback = object : SpaceEntryPoint.Callback {
|
||||
override fun navigateToRoom(roomId: RoomId, viaParameters: List<String>) {
|
||||
callbacks.forEach { it.navigateToRoom(roomId, viaParameters) }
|
||||
callback.navigateToRoom(roomId, viaParameters)
|
||||
}
|
||||
|
||||
override fun navigateToRoomDetails() {
|
||||
|
|
@ -218,7 +219,7 @@ class JoinedRoomLoadedFlowNode(
|
|||
}
|
||||
|
||||
override fun handlePermalinkClick(data: PermalinkData, pushToBackstack: Boolean) {
|
||||
callbacks.forEach { it.handlePermalinkClick(data, pushToBackstack) }
|
||||
callback.handlePermalinkClick(data, pushToBackstack)
|
||||
}
|
||||
|
||||
override fun forwardEvent(eventId: EventId) {
|
||||
|
|
@ -226,7 +227,7 @@ class JoinedRoomLoadedFlowNode(
|
|||
}
|
||||
|
||||
override fun navigateToRoom(roomId: RoomId) {
|
||||
callbacks.forEach { it.navigateToRoom(roomId, emptyList()) }
|
||||
callback.navigateToRoom(roomId, emptyList())
|
||||
}
|
||||
}
|
||||
val params = MessagesEntryPoint.Params(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue