Use context parameter for the parentNode

This commit is contained in:
Benoit Marty 2025-10-30 13:02:20 +01:00 committed by Benoit Marty
parent 02dc71c4c3
commit f174084942
138 changed files with 450 additions and 375 deletions

View file

@ -14,7 +14,8 @@ import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.matrix.api.core.SessionId
interface AccountSelectEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin {
fun onAccountSelected(sessionId: SessionId)

View file

@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class)
class DefaultAccountSelectEntryPoint : AccountSelectEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, callback: AccountSelectEntryPoint.Callback): Node {
context(parentNode: Node)
override fun createNode(buildContext: BuildContext, callback: AccountSelectEntryPoint.Callback): Node {
return parentNode.createNode<AccountSelectNode>(buildContext, listOf(callback))
}
}

View file

@ -35,11 +35,12 @@ class DefaultAccountSelectEntryPointTest {
override fun onAccountSelected(sessionId: SessionId) = lambdaError()
override fun onCancel() = lambdaError()
}
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
callback = callback,
)
}
assertThat(result).isInstanceOf(AccountSelectNode::class.java)
assertThat(result.plugins).contains(callback)
}

View file

@ -19,5 +19,6 @@ interface FeatureEntryPoint
* Can be used when the feature only exposes a simple node without the need of plugins.
*/
fun interface SimpleFeatureEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext): Node
}

View file

@ -14,7 +14,8 @@ import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.matrix.api.core.EventId
interface MediaGalleryEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin {
fun onBackClick()

View file

@ -19,7 +19,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline
import kotlinx.parcelize.Parcelize
interface MediaViewerEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params, callback: Callback): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params, callback: Callback): Node
fun createParamsForAvatar(filename: String, avatarUrl: String): Params

View file

@ -17,7 +17,8 @@ import io.element.android.libraries.mediaviewer.impl.gallery.root.MediaGalleryFl
@ContributesBinding(AppScope::class)
class DefaultMediaGalleryEntryPoint : MediaGalleryEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, callback: MediaGalleryEntryPoint.Callback): Node {
context(parentNode: Node)
override fun createNode(buildContext: BuildContext, callback: MediaGalleryEntryPoint.Callback): Node {
return parentNode.createNode<MediaGalleryFlowNode>(
buildContext = buildContext,
plugins = listOf(callback),

View file

@ -48,8 +48,8 @@ class DefaultMediaViewerEntryPoint : MediaViewerEntryPoint {
)
}
context(parentNode: Node)
override fun createNode(
parentNode: Node,
buildContext: BuildContext,
params: MediaViewerEntryPoint.Params,
callback: MediaViewerEntryPoint.Callback,

View file

@ -125,7 +125,6 @@ class MediaGalleryFlowNode(
}
}
mediaViewerEntryPoint.createNode(
parentNode = this,
buildContext = buildContext,
params = MediaViewerEntryPoint.Params(
mode = navTarget.mode,

View file

@ -37,8 +37,8 @@ class DefaultMediaGalleryEntryPointTest {
plugins = plugins,
mediaViewerEntryPoint = object : MediaViewerEntryPoint {
override fun createParamsForAvatar(filename: String, avatarUrl: String) = lambdaError()
context(parentNode: Node)
override fun createNode(
parentNode: Node,
buildContext: BuildContext,
params: MediaViewerEntryPoint.Params,
callback: MediaViewerEntryPoint.Callback,
@ -51,11 +51,12 @@ class DefaultMediaGalleryEntryPointTest {
override fun viewInTimeline(eventId: EventId) = lambdaError()
override fun forward(eventId: EventId) = lambdaError()
}
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
callback = callback,
)
}
assertThat(result).isInstanceOf(MediaGalleryFlowNode::class.java)
assertThat(result.plugins).contains(callback)
}

View file

@ -75,12 +75,13 @@ class DefaultMediaViewerEntryPointTest {
override fun forwardEvent(eventId: EventId) = lambdaError()
}
val params = createMediaViewerEntryPointParams()
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
params = params,
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
params = params,
callback = callback,
)
}
assertThat(result).isInstanceOf(MediaViewerNode::class.java)
assertThat(result.plugins).contains(params)
assertThat(result.plugins).contains(callback)
@ -124,12 +125,13 @@ class DefaultMediaViewerEntryPointTest {
filename = "fn",
avatarUrl = "avatarUrl",
)
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
params = params,
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
params = params,
callback = callback,
)
}
assertThat(result).isInstanceOf(MediaViewerNode::class.java)
assertThat(result.plugins).contains(
MediaViewerEntryPoint.Params(

View file

@ -18,7 +18,8 @@ interface RoomSelectEntryPoint : FeatureEntryPoint {
val mode: RoomSelectMode,
)
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params, callback: Callback): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params, callback: Callback): Node
interface Callback : Plugin {
fun onRoomSelected(roomIds: List<RoomId>)

View file

@ -16,7 +16,8 @@ import io.element.android.libraries.roomselect.api.RoomSelectEntryPoint
@ContributesBinding(SessionScope::class)
class DefaultRoomSelectEntryPoint : RoomSelectEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, params: RoomSelectEntryPoint.Params, callback: RoomSelectEntryPoint.Callback): Node {
context(parentNode: Node)
override fun createNode(buildContext: BuildContext, params: RoomSelectEntryPoint.Params, callback: RoomSelectEntryPoint.Callback): Node {
return parentNode.createNode<RoomSelectNode>(
buildContext = buildContext,
plugins = listOf(

View file

@ -42,12 +42,13 @@ class DefaultRoomSelectEntryPointTest {
override fun onCancel() = lambdaError()
}
val params = RoomSelectEntryPoint.Params(testMode)
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
params = params,
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
params = params,
callback = callback,
)
}
assertThat(result).isInstanceOf(RoomSelectNode::class.java)
assertThat(result.plugins).contains(RoomSelectNode.Inputs(params.mode))
assertThat(result.plugins).contains(callback)

View file

@ -13,7 +13,8 @@ import com.bumble.appyx.core.plugin.Plugin
import io.element.android.libraries.architecture.FeatureEntryPoint
interface NotificationTroubleShootEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin {
fun onDone()

View file

@ -15,7 +15,8 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
interface PushHistoryEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node
context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin {
fun onDone()

View file

@ -16,7 +16,8 @@ import io.element.android.libraries.troubleshoot.api.NotificationTroubleShootEnt
@ContributesBinding(AppScope::class)
class DefaultNotificationTroubleShootEntryPoint : NotificationTroubleShootEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, callback: NotificationTroubleShootEntryPoint.Callback): Node {
context(parentNode: Node)
override fun createNode(buildContext: BuildContext, callback: NotificationTroubleShootEntryPoint.Callback): Node {
return parentNode.createNode<TroubleshootNotificationsNode>(buildContext, listOf(callback))
}
}

View file

@ -16,7 +16,8 @@ import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint
@ContributesBinding(AppScope::class)
class DefaultPushHistoryEntryPoint : PushHistoryEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, callback: PushHistoryEntryPoint.Callback): Node {
context(parentNode: Node)
override fun createNode(buildContext: BuildContext, callback: PushHistoryEntryPoint.Callback): Node {
return parentNode.createNode<PushHistoryNode>(buildContext, listOf(callback))
}
}

View file

@ -36,11 +36,12 @@ class DefaultNotificationTroubleShootEntryPointTest {
override fun onDone() = lambdaError()
override fun navigateToBlockedUsers() = lambdaError()
}
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
callback = callback,
)
}
assertThat(result).isInstanceOf(TroubleshootNotificationsNode::class.java)
assertThat(result.plugins).contains(callback)
}

View file

@ -48,11 +48,12 @@ class DefaultPushHistoryEntryPointTest {
override fun onDone() = lambdaError()
override fun navigateToEvent(roomId: RoomId, eventId: EventId) = lambdaError()
}
val result = entryPoint.createNode(
parentNode = parentNode,
buildContext = BuildContext.root(null),
callback = callback,
)
val result = with(parentNode) {
entryPoint.createNode(
buildContext = BuildContext.root(null),
callback = callback,
)
}
assertThat(result).isInstanceOf(PushHistoryNode::class.java)
assertThat(result.plugins).contains(callback)
}