[Architecture] introduce nodeBuilder concept

This commit is contained in:
ganfra 2023-03-07 20:31:16 +01:00
parent 49f624afd3
commit 84bfb14bd9
30 changed files with 153 additions and 59 deletions

View file

@ -16,10 +16,20 @@
package io.element.android.features.preferences.api
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import io.element.android.libraries.architecture.FeatureEntryPoint
interface PreferencesEntryPoint: FeatureEntryPoint {
interface PreferencesEntryPoint : FeatureEntryPoint {
fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder
interface NodeBuilder {
fun callback(callback: Callback): NodeBuilder
fun build(): Node
}
interface Callback : Plugin {
fun onOpenBugReport()
}

View file

@ -27,7 +27,17 @@ import javax.inject.Inject
@ContributesBinding(AppScope::class)
class DefaultPreferencesEntryPoint @Inject constructor() : PreferencesEntryPoint {
override fun node(parentNode: Node, buildContext: BuildContext, plugins: List<Plugin>): Node {
return parentNode.createNode<PreferencesFlowNode>(buildContext, plugins)
override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): PreferencesEntryPoint.NodeBuilder {
return object : PreferencesEntryPoint.NodeBuilder {
val plugins = ArrayList<Plugin>()
override fun callback(callback: PreferencesEntryPoint.Callback): PreferencesEntryPoint.NodeBuilder {
plugins += callback
return this
}
override fun build(): Node {
return parentNode.createNode<PreferencesFlowNode>(buildContext)
}
}
}
}