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 566515ca88
commit 05c5f3c914
138 changed files with 450 additions and 375 deletions

View File

@@ -334,7 +334,6 @@ class LoggedInFlowNode(
} }
} }
homeEntryPoint.createNode( homeEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = callback, callback = callback,
) )
@@ -391,7 +390,6 @@ class LoggedInFlowNode(
} }
} }
userProfileEntryPoint.createNode( userProfileEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = UserProfileEntryPoint.Params(userId = navTarget.userId), params = UserProfileEntryPoint.Params(userId = navTarget.userId),
callback = callback, callback = callback,
@@ -421,7 +419,6 @@ class LoggedInFlowNode(
} }
val inputs = PreferencesEntryPoint.Params(navTarget.initialElement) val inputs = PreferencesEntryPoint.Params(navTarget.initialElement)
preferencesEntryPoint.createNode( preferencesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = inputs, params = inputs,
callback = callback, callback = callback,
@@ -439,14 +436,12 @@ class LoggedInFlowNode(
} }
startChatEntryPoint.createNode( startChatEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = callback, callback = callback,
) )
} }
is NavTarget.SecureBackup -> { is NavTarget.SecureBackup -> {
secureBackupEntryPoint.createNode( secureBackupEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = SecureBackupEntryPoint.Params(initialElement = navTarget.initialElement), params = SecureBackupEntryPoint.Params(initialElement = navTarget.initialElement),
callback = object : SecureBackupEntryPoint.Callback { callback = object : SecureBackupEntryPoint.Callback {
@@ -457,11 +452,10 @@ class LoggedInFlowNode(
) )
} }
NavTarget.Ftue -> { NavTarget.Ftue -> {
ftueEntryPoint.createNode(this, buildContext) ftueEntryPoint.createNode(buildContext)
} }
NavTarget.RoomDirectory -> { NavTarget.RoomDirectory -> {
roomDirectoryEntryPoint.createNode( roomDirectoryEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = object : RoomDirectoryEntryPoint.Callback { callback = object : RoomDirectoryEntryPoint.Callback {
override fun navigateToRoom(roomDescription: RoomDescription) { override fun navigateToRoom(roomDescription: RoomDescription) {
@@ -478,7 +472,6 @@ class LoggedInFlowNode(
} }
is NavTarget.IncomingShare -> { is NavTarget.IncomingShare -> {
shareEntryPoint.createNode( shareEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = ShareEntryPoint.Params(intent = navTarget.intent), params = ShareEntryPoint.Params(intent = navTarget.intent),
callback = object : ShareEntryPoint.Callback { callback = object : ShareEntryPoint.Callback {
@@ -493,7 +486,6 @@ class LoggedInFlowNode(
} }
is NavTarget.IncomingVerificationRequest -> { is NavTarget.IncomingVerificationRequest -> {
incomingVerificationEntryPoint.createNode( incomingVerificationEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = IncomingVerificationEntryPoint.Params(navTarget.data), params = IncomingVerificationEntryPoint.Params(navTarget.data),
callback = object : IncomingVerificationEntryPoint.Callback { callback = object : IncomingVerificationEntryPoint.Callback {

View File

@@ -84,7 +84,6 @@ class NotLoggedInFlowNode(
} }
} }
loginEntryPoint.createNode( loginEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = LoginEntryPoint.Params( params = LoginEntryPoint.Params(
accountProvider = inputs.loginParams?.accountProvider, accountProvider = inputs.loginParams?.accountProvider,

View File

@@ -250,7 +250,6 @@ class RootFlowNode(
} }
is NavTarget.SignedOutFlow -> { is NavTarget.SignedOutFlow -> {
signedOutEntryPoint.createNode( signedOutEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = SignedOutEntryPoint.Params( params = SignedOutEntryPoint.Params(
sessionId = navTarget.sessionId, sessionId = navTarget.sessionId,
@@ -265,7 +264,6 @@ class RootFlowNode(
} }
} }
bugReportEntryPoint.createNode( bugReportEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = callback, callback = callback,
) )
@@ -294,7 +292,6 @@ class RootFlowNode(
} }
} }
accountSelectEntryPoint.createNode( accountSelectEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = callback, callback = callback,
) )

View File

@@ -181,7 +181,6 @@ class RoomFlowNode(
} }
val params = Params(navTarget.roomAlias) val params = Params(navTarget.roomAlias)
roomAliasResolverEntryPoint.createNode( roomAliasResolverEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,
@@ -195,7 +194,7 @@ class RoomFlowNode(
serverNames = navTarget.serverNames, serverNames = navTarget.serverNames,
trigger = navTarget.trigger, trigger = navTarget.trigger,
) )
joinRoomEntryPoint.createNode(this, buildContext, inputs) joinRoomEntryPoint.createNode(buildContext, inputs)
} }
is NavTarget.JoinedRoom -> { is NavTarget.JoinedRoom -> {
val roomFlowNodeCallback = plugins<JoinedRoomLoadedFlowNode.Callback>() val roomFlowNodeCallback = plugins<JoinedRoomLoadedFlowNode.Callback>()
@@ -208,7 +207,6 @@ class RoomFlowNode(
is NavTarget.JoinedSpace -> { is NavTarget.JoinedSpace -> {
val spaceCallback = plugins<SpaceEntryPoint.Callback>().single() val spaceCallback = plugins<SpaceEntryPoint.Callback>().single()
spaceEntryPoint.createNode( spaceEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
inputs = SpaceEntryPoint.Inputs(roomId = navTarget.spaceId), inputs = SpaceEntryPoint.Inputs(roomId = navTarget.spaceId),
callback = spaceCallback, callback = spaceCallback,

View File

@@ -141,7 +141,6 @@ class JoinedRoomLoadedFlowNode(
} }
} }
return roomDetailsEntryPoint.createNode( return roomDetailsEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = RoomDetailsEntryPoint.Params(initialTarget), params = RoomDetailsEntryPoint.Params(initialTarget),
callback = callback, callback = callback,
@@ -180,7 +179,6 @@ class JoinedRoomLoadedFlowNode(
} }
} }
forwardEntryPoint.createNode( forwardEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,
@@ -204,7 +202,6 @@ class JoinedRoomLoadedFlowNode(
} }
} }
return spaceEntryPoint.createNode( return spaceEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
inputs = SpaceEntryPoint.Inputs(roomId = inputs.room.roomId), inputs = SpaceEntryPoint.Inputs(roomId = inputs.room.roomId),
callback = callback, callback = callback,
@@ -240,7 +237,6 @@ class JoinedRoomLoadedFlowNode(
MessagesEntryPoint.InitialTarget.Messages(navTarget.focusedEventId) MessagesEntryPoint.InitialTarget.Messages(navTarget.focusedEventId)
) )
return messagesEntryPoint.createNode( return messagesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,

View File

@@ -54,8 +54,8 @@ class JoinedRoomLoadedFlowNodeTest {
var parameters: MessagesEntryPoint.Params? = null var parameters: MessagesEntryPoint.Params? = null
var callback: MessagesEntryPoint.Callback? = null var callback: MessagesEntryPoint.Callback? = null
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: MessagesEntryPoint.Params, params: MessagesEntryPoint.Params,
callback: MessagesEntryPoint.Callback, callback: MessagesEntryPoint.Callback,
@@ -77,8 +77,8 @@ class JoinedRoomLoadedFlowNodeTest {
private class FakeRoomDetailsEntryPoint : RoomDetailsEntryPoint { private class FakeRoomDetailsEntryPoint : RoomDetailsEntryPoint {
var nodeId: String? = null var nodeId: String? = null
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: RoomDetailsEntryPoint.Params, params: RoomDetailsEntryPoint.Params,
callback: RoomDetailsEntryPoint.Callback, callback: RoomDetailsEntryPoint.Callback,
@@ -90,8 +90,8 @@ class JoinedRoomLoadedFlowNodeTest {
private class FakeSpaceEntryPoint : SpaceEntryPoint { private class FakeSpaceEntryPoint : SpaceEntryPoint {
var nodeId: String? = null var nodeId: String? = null
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
inputs: SpaceEntryPoint.Inputs, inputs: SpaceEntryPoint.Inputs,
callback: SpaceEntryPoint.Callback, callback: SpaceEntryPoint.Callback,
@@ -101,8 +101,8 @@ class JoinedRoomLoadedFlowNodeTest {
} }
private class FakeForwardEntryPoint : ForwardEntryPoint { private class FakeForwardEntryPoint : ForwardEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: ForwardEntryPoint.Params, params: ForwardEntryPoint.Params,
callback: ForwardEntryPoint.Callback, callback: ForwardEntryPoint.Callback,

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultAnalyticsEntryPoint : AnalyticsEntryPoint { class DefaultAnalyticsEntryPoint : AnalyticsEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext): Node {
return parentNode.createNode<AnalyticsOptInNode>(buildContext) return parentNode.createNode<AnalyticsOptInNode>(buildContext)
} }
} }

View File

@@ -33,7 +33,9 @@ class DefaultAnalyticsEntryPointTest {
) )
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null)) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null))
}
assertThat(result).isInstanceOf(AnalyticsOptInNode::class.java) assertThat(result).isInstanceOf(AnalyticsOptInNode::class.java)
} }
} }

View File

@@ -15,8 +15,8 @@ import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.JoinedRoom
fun interface ChangeRoomMemberRolesEntryPoint : FeatureEntryPoint { fun interface ChangeRoomMemberRolesEntryPoint : FeatureEntryPoint {
context(parentNode: Node)
fun createNode( fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
room: JoinedRoom, room: JoinedRoom,
listType: ChangeRoomMemberRolesListType, listType: ChangeRoomMemberRolesListType,

View File

@@ -18,8 +18,8 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom
@ContributesBinding(SessionScope::class) @ContributesBinding(SessionScope::class)
class DefaultChangeRoomMemberRolesEntyPoint : ChangeRoomMemberRolesEntryPoint { class DefaultChangeRoomMemberRolesEntyPoint : ChangeRoomMemberRolesEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
room: JoinedRoom, room: JoinedRoom,
listType: ChangeRoomMemberRolesListType, listType: ChangeRoomMemberRolesListType,

View File

@@ -31,12 +31,13 @@ class DefaultChangeRoomMemberRolesEntyPointTest {
} }
val room = FakeJoinedRoom() val room = FakeJoinedRoom()
val listType = ChangeRoomMemberRolesListType.Admins val listType = ChangeRoomMemberRolesListType.Admins
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
room = FakeJoinedRoom(), room = FakeJoinedRoom(),
listType = listType, listType = listType,
) )
}
assertThat(result).isInstanceOf(ChangeRoomMemberRolesRootNode::class.java) assertThat(result).isInstanceOf(ChangeRoomMemberRolesRootNode::class.java)
// Search for the Inputs plugin // Search for the Inputs plugin
val input = result.plugins.filterIsInstance<ChangeRoomMemberRolesRootNode.Inputs>().single() val input = result.plugins.filterIsInstance<ChangeRoomMemberRolesRootNode.Inputs>().single()

View File

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

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.di.SessionScope
@ContributesBinding(SessionScope::class) @ContributesBinding(SessionScope::class)
class DefaultCreateRoomEntryPoint : CreateRoomEntryPoint { class DefaultCreateRoomEntryPoint : CreateRoomEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, callback: CreateRoomEntryPoint.Callback): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, callback: CreateRoomEntryPoint.Callback): Node {
return parentNode.createNode<CreateRoomFlowNode>(buildContext, listOf(callback)) return parentNode.createNode<CreateRoomFlowNode>(buildContext, listOf(callback))
} }
} }

View File

@@ -38,11 +38,12 @@ class DefaultCreateRoomEntryPointTest {
val callback = object : CreateRoomEntryPoint.Callback { val callback = object : CreateRoomEntryPoint.Callback {
override fun onRoomCreated(roomId: RoomId) = lambdaError() override fun onRoomCreated(roomId: RoomId) = lambdaError()
} }
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
callback = callback, callback = callback,
) )
}
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)
} }
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultAccountDeactivationEntryPoint : AccountDeactivationEntryPoint { class DefaultAccountDeactivationEntryPoint : AccountDeactivationEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext): Node {
return parentNode.createNode<AccountDeactivationNode>(buildContext) return parentNode.createNode<AccountDeactivationNode>(buildContext)
} }
} }

View File

@@ -28,7 +28,9 @@ class DefaultAccountDeactivationEntryPointTest {
presenter = createPresenter(), presenter = createPresenter(),
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null)) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null))
}
assertThat(result).isInstanceOf(AccountDeactivationNode::class.java) assertThat(result).isInstanceOf(AccountDeactivationNode::class.java)
} }
} }

View File

@@ -26,5 +26,6 @@ interface ForwardEntryPoint : FeatureEntryPoint {
val timelineProvider: TimelineProvider, val timelineProvider: TimelineProvider,
) : NodeInputs ) : NodeInputs
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params, callback: Callback): Node
} }

View File

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

View File

@@ -71,7 +71,6 @@ class ForwardMessagesNode(
} }
return roomSelectEntryPoint.createNode( return roomSelectEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = RoomSelectEntryPoint.Params(mode = RoomSelectMode.Forward), params = RoomSelectEntryPoint.Params(mode = RoomSelectMode.Forward),
callback = callback, callback = callback,

View File

@@ -39,8 +39,8 @@ class DefaultForwardEntryPointTest {
plugins = plugins, plugins = plugins,
presenterFactory = { _, _ -> createForwardMessagesPresenter() }, presenterFactory = { _, _ -> createForwardMessagesPresenter() },
roomSelectEntryPoint = object : RoomSelectEntryPoint { roomSelectEntryPoint = object : RoomSelectEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: RoomSelectEntryPoint.Params, params: RoomSelectEntryPoint.Params,
callback: RoomSelectEntryPoint.Callback, callback: RoomSelectEntryPoint.Callback,
@@ -55,12 +55,13 @@ class DefaultForwardEntryPointTest {
eventId = AN_EVENT_ID, eventId = AN_EVENT_ID,
timelineProvider = FakeTimelineProvider(), timelineProvider = FakeTimelineProvider(),
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(ForwardMessagesNode::class.java) assertThat(result).isInstanceOf(ForwardMessagesNode::class.java)
assertThat(result.plugins).contains( assertThat(result.plugins).contains(
ForwardMessagesNode.Inputs( ForwardMessagesNode.Inputs(

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultFtueEntryPoint : FtueEntryPoint { class DefaultFtueEntryPoint : FtueEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext): Node {
return parentNode.createNode<FtueFlowNode>(buildContext) return parentNode.createNode<FtueFlowNode>(buildContext)
} }
} }

View File

@@ -102,7 +102,7 @@ class FtueFlowNode(
createNode<NotificationsOptInNode>(buildContext, listOf(callback)) createNode<NotificationsOptInNode>(buildContext, listOf(callback))
} }
NavTarget.AnalyticsOptIn -> { NavTarget.AnalyticsOptIn -> {
analyticsEntryPoint.createNode(this, buildContext) analyticsEntryPoint.createNode(buildContext)
} }
NavTarget.LockScreenSetup -> { NavTarget.LockScreenSetup -> {
val callback = object : LockScreenEntryPoint.Callback { val callback = object : LockScreenEntryPoint.Callback {
@@ -111,7 +111,6 @@ class FtueFlowNode(
} }
} }
lockScreenEntryPoint.createNode( lockScreenEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
navTarget = LockScreenEntryPoint.Target.Setup, navTarget = LockScreenEntryPoint.Target.Setup,
callback = callback, callback = callback,

View File

@@ -104,7 +104,6 @@ class FtueSessionVerificationFlowNode(
} }
is NavTarget.UseAnotherDevice -> { is NavTarget.UseAnotherDevice -> {
outgoingVerificationEntryPoint.createNode( outgoingVerificationEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = OutgoingVerificationEntryPoint.Params( params = OutgoingVerificationEntryPoint.Params(
showDeviceVerifiedScreen = true, showDeviceVerifiedScreen = true,
@@ -128,7 +127,6 @@ class FtueSessionVerificationFlowNode(
} }
is NavTarget.EnterRecoveryKey -> { is NavTarget.EnterRecoveryKey -> {
secureBackupEntryPoint.createNode( secureBackupEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.EnterRecoveryKey), params = SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.EnterRecoveryKey),
callback = secureBackupEntryPointCallback callback = secureBackupEntryPointCallback
@@ -136,7 +134,6 @@ class FtueSessionVerificationFlowNode(
} }
is NavTarget.ResetIdentity -> { is NavTarget.ResetIdentity -> {
secureBackupEntryPoint.createNode( secureBackupEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.ResetIdentity), params = SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.ResetIdentity),
callback = object : SecureBackupEntryPoint.Callback { callback = object : SecureBackupEntryPoint.Callback {

View File

@@ -35,11 +35,11 @@ class DefaultFtueEntryPointTest {
FtueFlowNode( FtueFlowNode(
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
analyticsEntryPoint = { _, _ -> lambdaError() }, analyticsEntryPoint = { _ -> lambdaError() },
defaultFtueService = createDefaultFtueService(), defaultFtueService = createDefaultFtueService(),
lockScreenEntryPoint = object : LockScreenEntryPoint { lockScreenEntryPoint = object : LockScreenEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
navTarget: LockScreenEntryPoint.Target, navTarget: LockScreenEntryPoint.Target,
callback: LockScreenEntryPoint.Callback, callback: LockScreenEntryPoint.Callback,
@@ -51,7 +51,9 @@ class DefaultFtueEntryPointTest {
}, },
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null)) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null))
}
assertThat(result).isInstanceOf(FtueFlowNode::class.java) assertThat(result).isInstanceOf(FtueFlowNode::class.java)
} }
} }

View File

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

View File

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

View File

@@ -186,12 +186,11 @@ class HomeFlowNode(
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) { return when (navTarget) {
is NavTarget.ReportRoom -> reportRoomEntryPoint.createNode(this, buildContext, navTarget.roomId) is NavTarget.ReportRoom -> reportRoomEntryPoint.createNode(buildContext, navTarget.roomId)
is NavTarget.DeclineInviteAndBlockUser -> declineInviteAndBlockUserEntryPoint.createNode(this, buildContext, navTarget.inviteData) is NavTarget.DeclineInviteAndBlockUser -> declineInviteAndBlockUserEntryPoint.createNode(buildContext, navTarget.inviteData)
is NavTarget.SelectNewOwnersWhenLeavingRoom -> { is NavTarget.SelectNewOwnersWhenLeavingRoom -> {
val room = runBlocking { matrixClient.getJoinedRoom(navTarget.roomId) } ?: error("Room ${navTarget.roomId} not found") val room = runBlocking { matrixClient.getJoinedRoom(navTarget.roomId) } ?: error("Room ${navTarget.roomId} not found")
changeRoomMemberRolesEntryPoint.createNode( changeRoomMemberRolesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
room = room, room = room,
listType = ChangeRoomMemberRolesListType.SelectNewOwnersWhenLeaving, listType = ChangeRoomMemberRolesListType.SelectNewOwnersWhenLeaving,

View File

@@ -34,9 +34,9 @@ class DefaultHomeEntryPointTest {
analyticsService = FakeAnalyticsService(), analyticsService = FakeAnalyticsService(),
acceptDeclineInviteView = { _, _, _, _ -> lambdaError() }, acceptDeclineInviteView = { _, _, _, _ -> lambdaError() },
directLogoutView = { _ -> lambdaError() }, directLogoutView = { _ -> lambdaError() },
reportRoomEntryPoint = { _, _, _ -> lambdaError() }, reportRoomEntryPoint = { _, _ -> lambdaError() },
declineInviteAndBlockUserEntryPoint = { _, _, _ -> lambdaError() }, declineInviteAndBlockUserEntryPoint = { _, _ -> lambdaError() },
changeRoomMemberRolesEntryPoint = { _, _, _, _ -> lambdaError() }, changeRoomMemberRolesEntryPoint = { _, _, _ -> lambdaError() },
leaveRoomRenderer = { _, _, _ -> lambdaError() }, leaveRoomRenderer = { _, _, _ -> lambdaError() },
) )
} }
@@ -49,11 +49,12 @@ class DefaultHomeEntryPointTest {
override fun navigateToRoomSettings(roomId: RoomId) = lambdaError() override fun navigateToRoomSettings(roomId: RoomId) = lambdaError()
override fun navigateToBugReport() = lambdaError() override fun navigateToBugReport() = lambdaError()
} }
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(HomeFlowNode::class.java) assertThat(result).isInstanceOf(HomeFlowNode::class.java)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)
} }

View File

@@ -13,5 +13,6 @@ import io.element.android.features.invite.api.InviteData
import io.element.android.libraries.architecture.FeatureEntryPoint import io.element.android.libraries.architecture.FeatureEntryPoint
fun interface DeclineInviteAndBlockEntryPoint : FeatureEntryPoint { fun interface DeclineInviteAndBlockEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, inviteData: InviteData): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, inviteData: InviteData): Node
} }

View File

@@ -17,7 +17,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultDeclineAndBlockEntryPoint : DeclineInviteAndBlockEntryPoint { class DefaultDeclineAndBlockEntryPoint : DeclineInviteAndBlockEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, inviteData: InviteData): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, inviteData: InviteData): Node {
val inputs = DeclineAndBlockNode.Inputs(inviteData) val inputs = DeclineAndBlockNode.Inputs(inviteData)
return parentNode.createNode<DeclineAndBlockNode>(buildContext, plugins = listOf(inputs)) return parentNode.createNode<DeclineAndBlockNode>(buildContext, plugins = listOf(inputs))
} }

View File

@@ -30,11 +30,12 @@ class DefaultDeclineAndBlockEntryPointTest {
) )
} }
val inviteData = anInviteData() val inviteData = anInviteData()
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
inviteData = inviteData inviteData = inviteData
) )
}
assertThat(result).isInstanceOf(DeclineAndBlockNode::class.java) assertThat(result).isInstanceOf(DeclineAndBlockNode::class.java)
assertThat(result.plugins).contains(DeclineAndBlockNode.Inputs(inviteData)) assertThat(result.plugins).contains(DeclineAndBlockNode.Inputs(inviteData))
} }

View File

@@ -18,7 +18,8 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
import java.util.Optional import java.util.Optional
interface JoinRoomEntryPoint : FeatureEntryPoint { interface JoinRoomEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, inputs: Inputs): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, inputs: Inputs): Node
data class Inputs( data class Inputs(
val roomId: RoomId, val roomId: RoomId,

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultJoinRoomEntryPoint : JoinRoomEntryPoint { class DefaultJoinRoomEntryPoint : JoinRoomEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: JoinRoomEntryPoint.Inputs): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, inputs: JoinRoomEntryPoint.Inputs): Node {
return parentNode.createNode<JoinRoomFlowNode>( return parentNode.createNode<JoinRoomFlowNode>(
buildContext = buildContext, buildContext = buildContext,
plugins = listOf(inputs) plugins = listOf(inputs)

View File

@@ -64,7 +64,7 @@ class JoinRoomFlowNode(
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) { return when (navTarget) {
is NavTarget.DeclineInviteAndBlockUser -> declineAndBlockEntryPoint.createNode(this, buildContext, navTarget.inviteData) is NavTarget.DeclineInviteAndBlockUser -> declineAndBlockEntryPoint.createNode(buildContext, navTarget.inviteData)
NavTarget.Root -> rootNode(buildContext) NavTarget.Root -> rootNode(buildContext)
} }
} }

View File

@@ -41,7 +41,8 @@ class DefaultJoinRoomEntryPointTest {
presenterFactory = { _, _, _, _, _ -> createJoinRoomPresenter() }, presenterFactory = { _, _, _, _, _ -> createJoinRoomPresenter() },
acceptDeclineInviteView = { _, _, _, _ -> lambdaError() }, acceptDeclineInviteView = { _, _, _, _ -> lambdaError() },
declineAndBlockEntryPoint = object : DeclineInviteAndBlockEntryPoint { declineAndBlockEntryPoint = object : DeclineInviteAndBlockEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, inviteData: InviteData) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext, inviteData: InviteData) = lambdaError()
} }
) )
} }
@@ -52,7 +53,9 @@ class DefaultJoinRoomEntryPointTest {
serverNames = emptyList(), serverNames = emptyList(),
trigger = JoinedRoom.Trigger.RoomDirectory, trigger = JoinedRoom.Trigger.RoomDirectory,
) )
val result = entryPoint.createNode(parentNode, BuildContext.root(null), inputs) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null), inputs)
}
assertThat(result).isInstanceOf(JoinRoomFlowNode::class.java) assertThat(result).isInstanceOf(JoinRoomFlowNode::class.java)
assertThat(result.plugins).contains(inputs) assertThat(result.plugins).contains(inputs)
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultKnockRequestsListEntryPoint : KnockRequestsListEntryPoint { class DefaultKnockRequestsListEntryPoint : KnockRequestsListEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext): Node {
return parentNode.createNode<KnockRequestsListNode>(buildContext) return parentNode.createNode<KnockRequestsListNode>(buildContext)
} }
} }

View File

@@ -30,7 +30,9 @@ class DefaultKnockRequestsListEntryPointTest {
presenter = createKnockRequestsListPresenter(), presenter = createKnockRequestsListPresenter(),
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null)) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null))
}
assertThat(result).isInstanceOf(KnockRequestsListNode::class.java) assertThat(result).isInstanceOf(KnockRequestsListNode::class.java)
} }
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultOpenSourcesLicensesEntryPoint : OpenSourceLicensesEntryPoint { class DefaultOpenSourcesLicensesEntryPoint : OpenSourceLicensesEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext): Node {
return parentNode.createNode<DependenciesFlowNode>(buildContext) return parentNode.createNode<DependenciesFlowNode>(buildContext)
} }
} }

View File

@@ -31,7 +31,9 @@ class DefaultOpenSourcesLicensesEntryPointTest {
plugins = plugins, plugins = plugins,
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null)) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null))
}
assertThat(result).isInstanceOf(DependenciesFlowNode::class.java) assertThat(result).isInstanceOf(DependenciesFlowNode::class.java)
} }
} }

View File

@@ -18,8 +18,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline
* Allows a user to share a location message within a room. * Allows a user to share a location message within a room.
*/ */
interface SendLocationEntryPoint : FeatureEntryPoint { interface SendLocationEntryPoint : FeatureEntryPoint {
context(parentNode: Node)
fun createNode( fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
timelineMode: Timeline.Mode, timelineMode: Timeline.Mode,
): Node ): Node

View File

@@ -15,5 +15,6 @@ import io.element.android.libraries.architecture.NodeInputs
interface ShowLocationEntryPoint : FeatureEntryPoint { interface ShowLocationEntryPoint : FeatureEntryPoint {
data class Inputs(val location: Location, val description: String?) : NodeInputs data class Inputs(val location: Location, val description: String?) : NodeInputs
fun createNode(parentNode: Node, buildContext: BuildContext, inputs: Inputs): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, inputs: Inputs): Node
} }

View File

@@ -17,8 +17,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultSendLocationEntryPoint : SendLocationEntryPoint { class DefaultSendLocationEntryPoint : SendLocationEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
timelineMode: Timeline.Mode, timelineMode: Timeline.Mode,
): Node { ): Node {

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultShowLocationEntryPoint : ShowLocationEntryPoint { class DefaultShowLocationEntryPoint : ShowLocationEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs): Node {
return parentNode.createNode<ShowLocationNode>(buildContext, listOf(inputs)) return parentNode.createNode<ShowLocationNode>(buildContext, listOf(inputs))
} }
} }

View File

@@ -47,11 +47,12 @@ class DefaultSendLocationEntryPointTest {
) )
} }
val timelineMode = Timeline.Mode.Live val timelineMode = Timeline.Mode.Live
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
timelineMode = timelineMode, timelineMode = timelineMode,
) )
}
assertThat(result).isInstanceOf(SendLocationNode::class.java) assertThat(result).isInstanceOf(SendLocationNode::class.java)
assertThat(result.plugins).contains(SendLocationNode.Inputs(timelineMode)) assertThat(result.plugins).contains(SendLocationNode.Inputs(timelineMode))
} }

View File

@@ -47,11 +47,12 @@ class DefaultShowLocationEntryPointTest {
location = Location(37.4219983, -122.084, 10f), location = Location(37.4219983, -122.084, 10f),
description = "My location", description = "My location",
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode, entryPoint.createNode(
BuildContext.root(null), buildContext = BuildContext.root(null),
inputs = inputs, inputs = inputs,
) )
}
assertThat(result).isInstanceOf(ShowLocationNode::class.java) assertThat(result).isInstanceOf(ShowLocationNode::class.java)
assertThat(result.plugins).contains(inputs) assertThat(result.plugins).contains(inputs)
} }

View File

@@ -15,7 +15,9 @@ import com.bumble.appyx.core.plugin.Plugin
import io.element.android.libraries.architecture.FeatureEntryPoint import io.element.android.libraries.architecture.FeatureEntryPoint
interface LockScreenEntryPoint : FeatureEntryPoint { interface LockScreenEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, navTarget: Target, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, navTarget: Target, callback: Callback): Node
fun pinUnlockIntent(context: Context): Intent fun pinUnlockIntent(context: Context): Intent
interface Callback : Plugin { interface Callback : Plugin {

View File

@@ -19,8 +19,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultLockScreenEntryPoint : LockScreenEntryPoint { class DefaultLockScreenEntryPoint : LockScreenEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
navTarget: LockScreenEntryPoint.Target, navTarget: LockScreenEntryPoint.Target,
callback: LockScreenEntryPoint.Callback, callback: LockScreenEntryPoint.Callback,

View File

@@ -37,12 +37,13 @@ class DefaultLockScreenEntryPointTest {
override fun onSetupDone() = lambdaError() override fun onSetupDone() = lambdaError()
} }
val navTarget = LockScreenEntryPoint.Target.Setup val navTarget = LockScreenEntryPoint.Target.Setup
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
navTarget = navTarget, navTarget = navTarget,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(LockScreenFlowNode::class.java) assertThat(result).isInstanceOf(LockScreenFlowNode::class.java)
assertThat(result.plugins).contains(LockScreenFlowNode.Inputs(LockScreenFlowNode.NavTarget.Setup)) assertThat(result.plugins).contains(LockScreenFlowNode.Inputs(LockScreenFlowNode.NavTarget.Setup))
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)
@@ -61,12 +62,13 @@ class DefaultLockScreenEntryPointTest {
override fun onSetupDone() = lambdaError() override fun onSetupDone() = lambdaError()
} }
val navTarget = LockScreenEntryPoint.Target.Settings val navTarget = LockScreenEntryPoint.Target.Settings
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
navTarget = navTarget, navTarget = navTarget,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(LockScreenFlowNode::class.java) assertThat(result).isInstanceOf(LockScreenFlowNode::class.java)
assertThat(result.plugins).contains(LockScreenFlowNode.Inputs(LockScreenFlowNode.NavTarget.Settings)) assertThat(result.plugins).contains(LockScreenFlowNode.Inputs(LockScreenFlowNode.NavTarget.Settings))
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)

View File

@@ -22,5 +22,6 @@ interface LoginEntryPoint : FeatureEntryPoint {
fun navigateToBugReport() fun navigateToBugReport()
} }
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params, callback: Callback): Node
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultLoginEntryPoint : LoginEntryPoint { class DefaultLoginEntryPoint : LoginEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, params: LoginEntryPoint.Params, callback: LoginEntryPoint.Callback): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, params: LoginEntryPoint.Params, callback: LoginEntryPoint.Callback): Node {
return parentNode.createNode<LoginFlowNode>( return parentNode.createNode<LoginFlowNode>(
buildContext = buildContext, buildContext = buildContext,
plugins = listOf( plugins = listOf(

View File

@@ -45,12 +45,13 @@ class DefaultLoginEntryPointTest {
accountProvider = "ac", accountProvider = "ac",
loginHint = "lh", loginHint = "lh",
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(LoginFlowNode::class.java) assertThat(result).isInstanceOf(LoginFlowNode::class.java)
assertThat(result.plugins).contains(LoginFlowNode.Params(params.accountProvider, params.loginHint)) assertThat(result.plugins).contains(LoginFlowNode.Params(params.accountProvider, params.loginHint))
assertThat(result.plugins).contains(callback) 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 import io.element.android.libraries.architecture.FeatureEntryPoint
interface LogoutEntryPoint : FeatureEntryPoint { interface LogoutEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin { interface Callback : Plugin {
fun navigateToSecureBackup() fun navigateToSecureBackup()

View File

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

View File

@@ -34,11 +34,12 @@ class DefaultLogoutEntryPointTest {
val callback = object : LogoutEntryPoint.Callback { val callback = object : LogoutEntryPoint.Callback {
override fun navigateToSecureBackup() = lambdaError() override fun navigateToSecureBackup() = lambdaError()
} }
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(LogoutNode::class.java) assertThat(result).isInstanceOf(LogoutNode::class.java)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)
} }

View File

@@ -41,7 +41,8 @@ interface MessagesEntryPoint : FeatureEntryPoint {
data class Params(val initialTarget: InitialTarget) : NodeInputs data class Params(val initialTarget: InitialTarget) : NodeInputs
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params, callback: Callback): Node
} }
interface MessagesEntryPointNode { interface MessagesEntryPointNode {

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.di.SessionScope
@ContributesBinding(SessionScope::class) @ContributesBinding(SessionScope::class)
class DefaultMessagesEntryPoint : MessagesEntryPoint { class DefaultMessagesEntryPoint : MessagesEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, params: MessagesEntryPoint.Params, callback: MessagesEntryPoint.Callback): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, params: MessagesEntryPoint.Params, callback: MessagesEntryPoint.Callback): Node {
return parentNode.createNode<MessagesFlowNode>(buildContext, listOf(params, callback)) return parentNode.createNode<MessagesFlowNode>(buildContext, listOf(params, callback))
} }
} }

View File

@@ -321,7 +321,6 @@ class MessagesFlowNode(
} }
} }
mediaViewerEntryPoint.createNode( mediaViewerEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback callback = callback
@@ -337,7 +336,7 @@ class MessagesFlowNode(
} }
is NavTarget.LocationViewer -> { is NavTarget.LocationViewer -> {
val inputs = ShowLocationEntryPoint.Inputs(navTarget.location, navTarget.description) val inputs = ShowLocationEntryPoint.Inputs(navTarget.location, navTarget.description)
showLocationEntryPoint.createNode(this, buildContext, inputs) showLocationEntryPoint.createNode(buildContext, inputs)
} }
is NavTarget.EventDebugInfo -> { is NavTarget.EventDebugInfo -> {
val inputs = EventDebugInfoNode.Inputs(navTarget.eventId, navTarget.debugInfo) val inputs = EventDebugInfoNode.Inputs(navTarget.eventId, navTarget.debugInfo)
@@ -359,7 +358,6 @@ class MessagesFlowNode(
} }
} }
forwardEntryPoint.createNode( forwardEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,
@@ -371,14 +369,12 @@ class MessagesFlowNode(
} }
is NavTarget.SendLocation -> { is NavTarget.SendLocation -> {
sendLocationEntryPoint.createNode( sendLocationEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
timelineMode = navTarget.timelineMode, timelineMode = navTarget.timelineMode,
) )
} }
is NavTarget.CreatePoll -> { is NavTarget.CreatePoll -> {
createPollEntryPoint.createNode( createPollEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = CreatePollEntryPoint.Params( params = CreatePollEntryPoint.Params(
timelineMode = navTarget.timelineMode, timelineMode = navTarget.timelineMode,
@@ -388,7 +384,6 @@ class MessagesFlowNode(
} }
is NavTarget.EditPoll -> { is NavTarget.EditPoll -> {
createPollEntryPoint.createNode( createPollEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = CreatePollEntryPoint.Params( params = CreatePollEntryPoint.Params(
timelineMode = navTarget.timelineMode, timelineMode = navTarget.timelineMode,
@@ -428,7 +423,7 @@ class MessagesFlowNode(
createNode<PinnedMessagesListNode>(buildContext, plugins = listOf(callback)) createNode<PinnedMessagesListNode>(buildContext, plugins = listOf(callback))
} }
NavTarget.KnockRequestsList -> { NavTarget.KnockRequestsList -> {
knockRequestsListEntryPoint.createNode(this, buildContext) knockRequestsListEntryPoint.createNode(buildContext)
} }
is NavTarget.Thread -> { is NavTarget.Thread -> {
val inputs = ThreadedMessagesNode.Inputs( val inputs = ThreadedMessagesNode.Inputs(

View File

@@ -66,18 +66,19 @@ class DefaultMessagesEntryPointTest {
roomListService = FakeRoomListService(), roomListService = FakeRoomListService(),
sessionId = A_SESSION_ID, sessionId = A_SESSION_ID,
sendLocationEntryPoint = object : SendLocationEntryPoint { sendLocationEntryPoint = object : SendLocationEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
timelineMode: Timeline.Mode, timelineMode: Timeline.Mode,
) = lambdaError() ) = lambdaError()
}, },
showLocationEntryPoint = object : ShowLocationEntryPoint { showLocationEntryPoint = object : ShowLocationEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs) = lambdaError()
}, },
createPollEntryPoint = object : CreatePollEntryPoint { createPollEntryPoint = object : CreatePollEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: Params, params: Params,
) = lambdaError() ) = lambdaError()
@@ -99,16 +100,16 @@ class DefaultMessagesEntryPointTest {
}, },
mediaViewerEntryPoint = object : MediaViewerEntryPoint { mediaViewerEntryPoint = object : MediaViewerEntryPoint {
override fun createParamsForAvatar(filename: String, avatarUrl: String) = lambdaError() override fun createParamsForAvatar(filename: String, avatarUrl: String) = lambdaError()
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: MediaViewerEntryPoint.Params, params: MediaViewerEntryPoint.Params,
callback: MediaViewerEntryPoint.Callback, callback: MediaViewerEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
forwardEntryPoint = object : ForwardEntryPoint { forwardEntryPoint = object : ForwardEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: ForwardEntryPoint.Params, params: ForwardEntryPoint.Params,
callback: ForwardEntryPoint.Callback, callback: ForwardEntryPoint.Callback,
@@ -129,7 +130,8 @@ class DefaultMessagesEntryPointTest {
pinnedEventsTimelineProvider = createPinnedEventsTimelineProvider(), pinnedEventsTimelineProvider = createPinnedEventsTimelineProvider(),
timelineController = createTimelineController(), timelineController = createTimelineController(),
knockRequestsListEntryPoint = object : KnockRequestsListEntryPoint { knockRequestsListEntryPoint = object : KnockRequestsListEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext) = lambdaError()
}, },
dateFormatter = FakeDateFormatter(), dateFormatter = FakeDateFormatter(),
coroutineDispatchers = testCoroutineDispatchers(), coroutineDispatchers = testCoroutineDispatchers(),
@@ -144,12 +146,13 @@ class DefaultMessagesEntryPointTest {
} }
val initialTarget = MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID) val initialTarget = MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID)
val params = MessagesEntryPoint.Params(initialTarget) val params = MessagesEntryPoint.Params(initialTarget)
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(MessagesFlowNode::class.java) assertThat(result).isInstanceOf(MessagesFlowNode::class.java)
assertThat(result.plugins).contains(MessagesEntryPoint.Params(initialTarget)) assertThat(result.plugins).contains(MessagesEntryPoint.Params(initialTarget))
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)

View File

@@ -18,5 +18,6 @@ interface CreatePollEntryPoint : FeatureEntryPoint {
val mode: CreatePollMode, val mode: CreatePollMode,
) )
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params): Node
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultCreatePollEntryPoint : CreatePollEntryPoint { class DefaultCreatePollEntryPoint : CreatePollEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, params: CreatePollEntryPoint.Params): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, params: CreatePollEntryPoint.Params): Node {
return parentNode.createNode<CreatePollNode>( return parentNode.createNode<CreatePollNode>(
buildContext = buildContext, buildContext = buildContext,
plugins = listOf(CreatePollNode.Inputs(timelineMode = params.timelineMode, mode = params.mode)) plugins = listOf(CreatePollNode.Inputs(timelineMode = params.timelineMode, mode = params.mode))

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultPollHistoryEntryPoint : PollHistoryEntryPoint { class DefaultPollHistoryEntryPoint : PollHistoryEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext): Node {
return parentNode.createNode<PollHistoryFlowNode>(buildContext) return parentNode.createNode<PollHistoryFlowNode>(buildContext)
} }
} }

View File

@@ -54,7 +54,6 @@ class PollHistoryFlowNode(
return when (navTarget) { return when (navTarget) {
is NavTarget.EditPoll -> { is NavTarget.EditPoll -> {
createPollEntryPoint.createNode( createPollEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = CreatePollEntryPoint.Params( params = CreatePollEntryPoint.Params(
timelineMode = Timeline.Mode.Live, timelineMode = Timeline.Mode.Live,

View File

@@ -53,11 +53,12 @@ class DefaultCreatePollEntryPointTest {
timelineMode = Timeline.Mode.Live, timelineMode = Timeline.Mode.Live,
mode = CreatePollMode.NewPoll, mode = CreatePollMode.NewPoll,
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
) )
}
assertThat(result).isInstanceOf(CreatePollNode::class.java) assertThat(result).isInstanceOf(CreatePollNode::class.java)
assertThat(result.plugins).contains(CreatePollNode.Inputs(timelineMode = params.timelineMode, mode = params.mode)) assertThat(result.plugins).contains(CreatePollNode.Inputs(timelineMode = params.timelineMode, mode = params.mode))
} }

View File

@@ -34,15 +34,17 @@ class DefaultPollHistoryEntryPointTest {
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
createPollEntryPoint = object : CreatePollEntryPoint { createPollEntryPoint = object : CreatePollEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: CreatePollEntryPoint.Params, params: CreatePollEntryPoint.Params,
) = lambdaError() ) = lambdaError()
} }
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null)) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null))
}
assertThat(result).isInstanceOf(PollHistoryFlowNode::class.java) assertThat(result).isInstanceOf(PollHistoryFlowNode::class.java)
} }
} }

View File

@@ -31,7 +31,8 @@ interface PreferencesEntryPoint : FeatureEntryPoint {
data class Params(val initialElement: InitialTarget) : NodeInputs data class Params(val initialElement: InitialTarget) : NodeInputs
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 { interface Callback : Plugin {
fun navigateToAddAccount() fun navigateToAddAccount()

View File

@@ -16,8 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultPreferencesEntryPoint : PreferencesEntryPoint { class DefaultPreferencesEntryPoint : PreferencesEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: PreferencesEntryPoint.Params, params: PreferencesEntryPoint.Params,
callback: PreferencesEntryPoint.Callback, callback: PreferencesEntryPoint.Callback,

View File

@@ -216,7 +216,6 @@ class PreferencesFlowNode(
} }
NavTarget.TroubleshootNotifications -> { NavTarget.TroubleshootNotifications -> {
notificationTroubleShootEntryPoint.createNode( notificationTroubleShootEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = object : NotificationTroubleShootEntryPoint.Callback { callback = object : NotificationTroubleShootEntryPoint.Callback {
override fun onDone() { override fun onDone() {
@@ -235,9 +234,8 @@ class PreferencesFlowNode(
} }
NavTarget.PushHistory -> { NavTarget.PushHistory -> {
pushHistoryEntryPoint.createNode( pushHistoryEntryPoint.createNode(
this, buildContext = buildContext,
buildContext, callback = object : PushHistoryEntryPoint.Callback {
object : PushHistoryEntryPoint.Callback {
override fun onDone() { override fun onDone() {
if (backstack.canPop()) { if (backstack.canPop()) {
backstack.pop() backstack.pop()
@@ -270,7 +268,6 @@ class PreferencesFlowNode(
} }
NavTarget.LockScreenSettings -> { NavTarget.LockScreenSettings -> {
lockScreenEntryPoint.createNode( lockScreenEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
navTarget = LockScreenEntryPoint.Target.Settings, navTarget = LockScreenEntryPoint.Target.Settings,
callback = object : LockScreenEntryPoint.Callback { callback = object : LockScreenEntryPoint.Callback {
@@ -290,16 +287,15 @@ class PreferencesFlowNode(
} }
} }
logoutEntryPoint.createNode( logoutEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = callBack, callback = callBack,
) )
} }
is NavTarget.OssLicenses -> { is NavTarget.OssLicenses -> {
openSourceLicensesEntryPoint.createNode(this, buildContext) openSourceLicensesEntryPoint.createNode(buildContext)
} }
NavTarget.AccountDeactivation -> { NavTarget.AccountDeactivation -> {
accountDeactivationEntryPoint.createNode(this, buildContext) accountDeactivationEntryPoint.createNode(buildContext)
} }
} }
} }

View File

@@ -42,8 +42,8 @@ class DefaultPreferencesEntryPointTest {
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
lockScreenEntryPoint = object : LockScreenEntryPoint { lockScreenEntryPoint = object : LockScreenEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
navTarget: LockScreenEntryPoint.Target, navTarget: LockScreenEntryPoint.Target,
callback: LockScreenEntryPoint.Callback, callback: LockScreenEntryPoint.Callback,
@@ -52,31 +52,33 @@ class DefaultPreferencesEntryPointTest {
override fun pinUnlockIntent(context: Context) = lambdaError() override fun pinUnlockIntent(context: Context) = lambdaError()
}, },
notificationTroubleShootEntryPoint = object : NotificationTroubleShootEntryPoint { notificationTroubleShootEntryPoint = object : NotificationTroubleShootEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
callback: NotificationTroubleShootEntryPoint.Callback, callback: NotificationTroubleShootEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
pushHistoryEntryPoint = object : PushHistoryEntryPoint { pushHistoryEntryPoint = object : PushHistoryEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
callback: PushHistoryEntryPoint.Callback, callback: PushHistoryEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
logoutEntryPoint = object : LogoutEntryPoint { logoutEntryPoint = object : LogoutEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
callback: LogoutEntryPoint.Callback, callback: LogoutEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
openSourceLicensesEntryPoint = object : OpenSourceLicensesEntryPoint { openSourceLicensesEntryPoint = object : OpenSourceLicensesEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext) = lambdaError()
}, },
accountDeactivationEntryPoint = object : AccountDeactivationEntryPoint { accountDeactivationEntryPoint = object : AccountDeactivationEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext) = lambdaError()
}, },
) )
} }
@@ -90,12 +92,13 @@ class DefaultPreferencesEntryPointTest {
val params = PreferencesEntryPoint.Params( val params = PreferencesEntryPoint.Params(
initialElement = PreferencesEntryPoint.InitialTarget.NotificationSettings, initialElement = PreferencesEntryPoint.InitialTarget.NotificationSettings,
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(PreferencesFlowNode::class.java) assertThat(result).isInstanceOf(PreferencesFlowNode::class.java)
assertThat(result.plugins).contains(params) assertThat(result.plugins).contains(params)
assertThat(result.plugins).contains(callback) 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 import io.element.android.libraries.architecture.FeatureEntryPoint
interface BugReportEntryPoint : FeatureEntryPoint { interface BugReportEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin { interface Callback : Plugin {
fun onDone() fun onDone()

View File

@@ -78,7 +78,6 @@ class BugReportFlowNode(
rootPath = navTarget.rootPath, rootPath = navTarget.rootPath,
) )
viewFolderEntryPoint.createNode( viewFolderEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,

View File

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

View File

@@ -35,8 +35,8 @@ class DefaultBugReportEntryPointTest {
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
viewFolderEntryPoint = object : ViewFolderEntryPoint { viewFolderEntryPoint = object : ViewFolderEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: ViewFolderEntryPoint.Params, params: ViewFolderEntryPoint.Params,
callback: ViewFolderEntryPoint.Callback, callback: ViewFolderEntryPoint.Callback,
@@ -47,11 +47,12 @@ class DefaultBugReportEntryPointTest {
val callback = object : BugReportEntryPoint.Callback { val callback = object : BugReportEntryPoint.Callback {
override fun onDone() = lambdaError() override fun onDone() = lambdaError()
} }
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(BugReportFlowNode::class.java) assertThat(result).isInstanceOf(BugReportFlowNode::class.java)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)
} }

View File

@@ -13,5 +13,6 @@ import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
fun interface ReportRoomEntryPoint : FeatureEntryPoint { fun interface ReportRoomEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, roomId: RoomId): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, roomId: RoomId): Node
} }

View File

@@ -17,7 +17,8 @@ import io.element.android.libraries.matrix.api.core.RoomId
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultReportRoomEntryPoint : ReportRoomEntryPoint { class DefaultReportRoomEntryPoint : ReportRoomEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, roomId: RoomId): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, roomId: RoomId): Node {
return parentNode.createNode<ReportRoomNode>(buildContext, plugins = listOf(ReportRoomNode.Inputs(roomId))) return parentNode.createNode<ReportRoomNode>(buildContext, plugins = listOf(ReportRoomNode.Inputs(roomId)))
} }
} }

View File

@@ -32,7 +32,9 @@ class DefaultReportRoomEntryPointTest {
} }
) )
} }
val result = entryPoint.createNode(parentNode, BuildContext.root(null), A_ROOM_ID) val result = with(parentNode) {
entryPoint.createNode(BuildContext.root(null), A_ROOM_ID)
}
assertThat(result).isInstanceOf(ReportRoomNode::class.java) assertThat(result).isInstanceOf(ReportRoomNode::class.java)
assertThat(result.plugins).contains(ReportRoomNode.Inputs(A_ROOM_ID)) assertThat(result.plugins).contains(ReportRoomNode.Inputs(A_ROOM_ID))
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias
interface RoomAliasResolverEntryPoint : FeatureEntryPoint { interface RoomAliasResolverEntryPoint : FeatureEntryPoint {
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 { interface Callback : Plugin {
fun onAliasResolved(data: ResolvedRoomAlias) fun onAliasResolved(data: ResolvedRoomAlias)

View File

@@ -16,8 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultRoomAliasResolverEntryPoint : RoomAliasResolverEntryPoint { class DefaultRoomAliasResolverEntryPoint : RoomAliasResolverEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: RoomAliasResolverEntryPoint.Params, params: RoomAliasResolverEntryPoint.Params,
callback: RoomAliasResolverEntryPoint.Callback, callback: RoomAliasResolverEntryPoint.Callback,

View File

@@ -43,12 +43,13 @@ class DefaultRoomAliasResolverEntryPointTest {
val params = RoomAliasResolverEntryPoint.Params( val params = RoomAliasResolverEntryPoint.Params(
roomAlias = A_ROOM_ALIAS roomAlias = A_ROOM_ALIAS
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(RoomAliasResolverNode::class.java) assertThat(result).isInstanceOf(RoomAliasResolverNode::class.java)
assertThat(result.plugins).contains(params) assertThat(result.plugins).contains(params)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)

View File

@@ -43,5 +43,6 @@ interface RoomDetailsEntryPoint : FeatureEntryPoint {
fun startForwardEventFlow(eventId: EventId) fun startForwardEventFlow(eventId: EventId)
} }
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params, callback: Callback): Node
} }

View File

@@ -18,8 +18,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultRoomDetailsEntryPoint : RoomDetailsEntryPoint { class DefaultRoomDetailsEntryPoint : RoomDetailsEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: RoomDetailsEntryPoint.Params, params: RoomDetailsEntryPoint.Params,
callback: RoomDetailsEntryPoint.Callback, callback: RoomDetailsEntryPoint.Callback,

View File

@@ -308,14 +308,13 @@ class RoomDetailsFlowNode(
avatarUrl = navTarget.avatarUrl, avatarUrl = navTarget.avatarUrl,
) )
mediaViewerEntryPoint.createNode( mediaViewerEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,
) )
} }
is NavTarget.PollHistory -> { is NavTarget.PollHistory -> {
pollHistoryEntryPoint.createNode(this, buildContext) pollHistoryEntryPoint.createNode(buildContext)
} }
is NavTarget.MediaGallery -> { is NavTarget.MediaGallery -> {
val callback = object : MediaGalleryEntryPoint.Callback { val callback = object : MediaGalleryEntryPoint.Callback {
@@ -336,7 +335,6 @@ class RoomDetailsFlowNode(
} }
} }
mediaGalleryEntryPoint.createNode( mediaGalleryEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
callback = callback, callback = callback,
) )
@@ -367,14 +365,13 @@ class RoomDetailsFlowNode(
} }
} }
return messagesEntryPoint.createNode( return messagesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = callback, callback = callback,
) )
} }
NavTarget.KnockRequestsList -> { NavTarget.KnockRequestsList -> {
knockRequestsListEntryPoint.createNode(this, buildContext) knockRequestsListEntryPoint.createNode(buildContext)
} }
NavTarget.SecurityAndPrivacy -> { NavTarget.SecurityAndPrivacy -> {
createNode<SecurityAndPrivacyFlowNode>(buildContext) createNode<SecurityAndPrivacyFlowNode>(buildContext)
@@ -385,7 +382,6 @@ class RoomDetailsFlowNode(
verificationRequest = VerificationRequest.Outgoing.User(userId = navTarget.userId) verificationRequest = VerificationRequest.Outgoing.User(userId = navTarget.userId)
) )
outgoingVerificationEntryPoint.createNode( outgoingVerificationEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = params, params = params,
callback = object : OutgoingVerificationEntryPoint.Callback { callback = object : OutgoingVerificationEntryPoint.Callback {
@@ -404,12 +400,11 @@ class RoomDetailsFlowNode(
) )
} }
is NavTarget.ReportRoom -> { is NavTarget.ReportRoom -> {
reportRoomEntryPoint.createNode(this, buildContext, room.roomId) reportRoomEntryPoint.createNode(buildContext, room.roomId)
} }
is NavTarget.SelectNewOwnersWhenLeaving -> { is NavTarget.SelectNewOwnersWhenLeaving -> {
changeRoomMemberRolesEntryPoint.createNode( changeRoomMemberRolesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
room = room, room = room,
listType = ChangeRoomMemberRolesListType.SelectNewOwnersWhenLeaving, listType = ChangeRoomMemberRolesListType.SelectNewOwnersWhenLeaving,

View File

@@ -102,7 +102,6 @@ class RolesAndPermissionsFlowNode(
} }
is NavTarget.AdminList -> { is NavTarget.AdminList -> {
changeRoomMemberRolesEntryPoint.createNode( changeRoomMemberRolesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
room = joinedRoom, room = joinedRoom,
listType = ChangeRoomMemberRolesListType.Admins, listType = ChangeRoomMemberRolesListType.Admins,
@@ -110,7 +109,6 @@ class RolesAndPermissionsFlowNode(
} }
is NavTarget.ModeratorList -> { is NavTarget.ModeratorList -> {
changeRoomMemberRolesEntryPoint.createNode( changeRoomMemberRolesEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
room = joinedRoom, room = joinedRoom,
listType = ChangeRoomMemberRolesListType.Moderators, listType = ChangeRoomMemberRolesListType.Moderators,

View File

@@ -53,7 +53,8 @@ class DefaultRoomDetailsEntryPointTest {
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
pollHistoryEntryPoint = object : PollHistoryEntryPoint { pollHistoryEntryPoint = object : PollHistoryEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext) = lambdaError()
}, },
elementCallEntryPoint = object : ElementCallEntryPoint { elementCallEntryPoint = object : ElementCallEntryPoint {
override fun startCall(callType: CallType) = lambdaError() override fun startCall(callType: CallType) = lambdaError()
@@ -73,46 +74,49 @@ class DefaultRoomDetailsEntryPointTest {
room = FakeJoinedRoom(), room = FakeJoinedRoom(),
analyticsService = FakeAnalyticsService(), analyticsService = FakeAnalyticsService(),
messagesEntryPoint = object : MessagesEntryPoint { messagesEntryPoint = object : MessagesEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: MessagesEntryPoint.Params, params: MessagesEntryPoint.Params,
callback: MessagesEntryPoint.Callback, callback: MessagesEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
knockRequestsListEntryPoint = object : KnockRequestsListEntryPoint { knockRequestsListEntryPoint = object : KnockRequestsListEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext) = lambdaError()
}, },
mediaViewerEntryPoint = object : MediaViewerEntryPoint { mediaViewerEntryPoint = object : MediaViewerEntryPoint {
override fun createParamsForAvatar(filename: String, avatarUrl: String) = lambdaError() override fun createParamsForAvatar(filename: String, avatarUrl: String) = lambdaError()
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: MediaViewerEntryPoint.Params, params: MediaViewerEntryPoint.Params,
callback: MediaViewerEntryPoint.Callback, callback: MediaViewerEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
mediaGalleryEntryPoint = object : MediaGalleryEntryPoint { mediaGalleryEntryPoint = object : MediaGalleryEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
callback: MediaGalleryEntryPoint.Callback, callback: MediaGalleryEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
outgoingVerificationEntryPoint = object : OutgoingVerificationEntryPoint { outgoingVerificationEntryPoint = object : OutgoingVerificationEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: OutgoingVerificationEntryPoint.Params, params: OutgoingVerificationEntryPoint.Params,
callback: OutgoingVerificationEntryPoint.Callback, callback: OutgoingVerificationEntryPoint.Callback,
) = lambdaError() ) = lambdaError()
}, },
reportRoomEntryPoint = object : ReportRoomEntryPoint { reportRoomEntryPoint = object : ReportRoomEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, roomId: RoomId) = lambdaError() context(parentNode: Node)
override fun createNode(buildContext: BuildContext, roomId: RoomId) = lambdaError()
}, },
changeRoomMemberRolesEntryPoint = object : ChangeRoomMemberRolesEntryPoint { changeRoomMemberRolesEntryPoint = object : ChangeRoomMemberRolesEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
room: JoinedRoom, room: JoinedRoom,
listType: ChangeRoomMemberRolesListType, listType: ChangeRoomMemberRolesListType,
@@ -129,12 +133,13 @@ class DefaultRoomDetailsEntryPointTest {
val params = RoomDetailsEntryPoint.Params( val params = RoomDetailsEntryPoint.Params(
initialElement = RoomDetailsEntryPoint.InitialTarget.RoomDetails, initialElement = RoomDetailsEntryPoint.InitialTarget.RoomDetails,
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(RoomDetailsFlowNode::class.java) assertThat(result).isInstanceOf(RoomDetailsFlowNode::class.java)
assertThat(result.plugins).contains(params) assertThat(result.plugins).contains(params)
assertThat(result.plugins).contains(callback) 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 import io.element.android.libraries.architecture.FeatureEntryPoint
interface RoomDirectoryEntryPoint : FeatureEntryPoint { interface RoomDirectoryEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin { interface Callback : Plugin {
fun navigateToRoom(roomDescription: RoomDescription) fun navigateToRoom(roomDescription: RoomDescription)

View File

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

View File

@@ -37,11 +37,12 @@ class DefaultRoomDirectoryEntryPointTest {
val callback = object : RoomDirectoryEntryPoint.Callback { val callback = object : RoomDirectoryEntryPoint.Callback {
override fun navigateToRoom(roomDescription: RoomDescription) = lambdaError() override fun navigateToRoom(roomDescription: RoomDescription) = lambdaError()
} }
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(RoomDirectoryNode::class.java) assertThat(result).isInstanceOf(RoomDirectoryNode::class.java)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)
} }

View File

@@ -32,7 +32,8 @@ interface SecureBackupEntryPoint : FeatureEntryPoint {
data class Params(val initialElement: InitialTarget) : NodeInputs data class Params(val initialElement: InitialTarget) : NodeInputs
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 { interface Callback : Plugin {
fun onDone() fun onDone()

View File

@@ -16,8 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultSecureBackupEntryPoint : SecureBackupEntryPoint { class DefaultSecureBackupEntryPoint : SecureBackupEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: SecureBackupEntryPoint.Params, params: SecureBackupEntryPoint.Params,
callback: SecureBackupEntryPoint.Callback, callback: SecureBackupEntryPoint.Callback,

View File

@@ -37,12 +37,13 @@ class DefaultSecureBackupEntryPointTest {
override fun onDone() = lambdaError() override fun onDone() = lambdaError()
} }
val params = SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.ResetIdentity) val params = SecureBackupEntryPoint.Params(SecureBackupEntryPoint.InitialTarget.ResetIdentity)
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(SecureBackupFlowNode::class.java) assertThat(result).isInstanceOf(SecureBackupFlowNode::class.java)
assertThat(result.plugins).contains(params) assertThat(result.plugins).contains(params)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)

View File

@@ -17,7 +17,8 @@ import io.element.android.libraries.matrix.api.core.RoomId
interface ShareEntryPoint : FeatureEntryPoint { interface ShareEntryPoint : FeatureEntryPoint {
data class Params(val intent: Intent) data class Params(val intent: Intent)
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 { interface Callback : Plugin {
fun onDone(roomIds: List<RoomId>) fun onDone(roomIds: List<RoomId>)

View File

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

View File

@@ -67,7 +67,6 @@ class ShareNode(
} }
return roomSelectEntryPoint.createNode( return roomSelectEntryPoint.createNode(
parentNode = this,
buildContext = buildContext, buildContext = buildContext,
params = RoomSelectEntryPoint.Params(mode = RoomSelectMode.Share), params = RoomSelectEntryPoint.Params(mode = RoomSelectMode.Share),
callback = callback, callback = callback,

View File

@@ -38,8 +38,8 @@ class DefaultShareEntryPointTest {
plugins = plugins, plugins = plugins,
presenterFactory = { createSharePresenter() }, presenterFactory = { createSharePresenter() },
roomSelectEntryPoint = object : RoomSelectEntryPoint { roomSelectEntryPoint = object : RoomSelectEntryPoint {
context(parentNode: Node)
override fun createNode( override fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
params: RoomSelectEntryPoint.Params, params: RoomSelectEntryPoint.Params,
callback: RoomSelectEntryPoint.Callback, callback: RoomSelectEntryPoint.Callback,
@@ -53,12 +53,13 @@ class DefaultShareEntryPointTest {
val params = ShareEntryPoint.Params( val params = ShareEntryPoint.Params(
intent = Intent(), intent = Intent(),
) )
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(ShareNode::class.java) assertThat(result).isInstanceOf(ShareNode::class.java)
assertThat(result.plugins).contains(ShareNode.Inputs(params.intent)) assertThat(result.plugins).contains(ShareNode.Inputs(params.intent))
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)

View File

@@ -17,5 +17,6 @@ interface SignedOutEntryPoint : FeatureEntryPoint {
val sessionId: SessionId, val sessionId: SessionId,
) )
fun createNode(parentNode: Node, buildContext: BuildContext, params: Params): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, params: Params): Node
} }

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.architecture.createNode
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
class DefaultSignedOutEntryPoint : SignedOutEntryPoint { class DefaultSignedOutEntryPoint : SignedOutEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, params: SignedOutEntryPoint.Params): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, params: SignedOutEntryPoint.Params): Node {
return parentNode.createNode<SignedOutNode>( return parentNode.createNode<SignedOutNode>(
buildContext = buildContext, buildContext = buildContext,
plugins = listOf(SignedOutNode.Inputs(params.sessionId)) plugins = listOf(SignedOutNode.Inputs(params.sessionId))

View File

@@ -34,11 +34,12 @@ class DefaultSignedOutEntryPointTest {
) )
} }
val params = SignedOutEntryPoint.Params(A_SESSION_ID) val params = SignedOutEntryPoint.Params(A_SESSION_ID)
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
params = params, params = params,
) )
}
assertThat(result).isInstanceOf(SignedOutNode::class.java) assertThat(result).isInstanceOf(SignedOutNode::class.java)
assertThat(result.plugins).contains(SignedOutNode.Inputs(params.sessionId)) assertThat(result.plugins).contains(SignedOutNode.Inputs(params.sessionId))
} }

View File

@@ -15,8 +15,8 @@ import io.element.android.libraries.architecture.NodeInputs
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
interface SpaceEntryPoint : FeatureEntryPoint { interface SpaceEntryPoint : FeatureEntryPoint {
context(parentNode: Node)
fun createNode( fun createNode(
parentNode: Node,
buildContext: BuildContext, buildContext: BuildContext,
inputs: Inputs, inputs: Inputs,
callback: Callback callback: Callback

View File

@@ -16,7 +16,8 @@ import io.element.android.libraries.di.SessionScope
@ContributesBinding(SessionScope::class) @ContributesBinding(SessionScope::class)
class DefaultSpaceEntryPoint : SpaceEntryPoint { class DefaultSpaceEntryPoint : SpaceEntryPoint {
override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: SpaceEntryPoint.Inputs, callback: SpaceEntryPoint.Callback): Node { context(parentNode: Node)
override fun createNode(buildContext: BuildContext, inputs: SpaceEntryPoint.Inputs, callback: SpaceEntryPoint.Callback): Node {
return parentNode.createNode<SpaceFlowNode>( return parentNode.createNode<SpaceFlowNode>(
buildContext = buildContext, buildContext = buildContext,
plugins = listOf(inputs, callback), plugins = listOf(inputs, callback),

View File

@@ -48,12 +48,13 @@ class DefaultSpaceEntryPointTest {
override fun navigateToRoomDetails() = lambdaError() override fun navigateToRoomDetails() = lambdaError()
override fun navigateToRoomMemberList() = lambdaError() override fun navigateToRoomMemberList() = lambdaError()
} }
val result = entryPoint.createNode( val result = with(parentNode) {
parentNode = parentNode, entryPoint.createNode(
buildContext = BuildContext.root(null), buildContext = BuildContext.root(null),
inputs = nodeInputs, inputs = nodeInputs,
callback = callback, callback = callback,
) )
}
assertThat(result).isInstanceOf(SpaceFlowNode::class.java) assertThat(result).isInstanceOf(SpaceFlowNode::class.java)
assertThat(result.plugins).contains(nodeInputs) assertThat(result.plugins).contains(nodeInputs)
assertThat(result.plugins).contains(callback) assertThat(result.plugins).contains(callback)

View File

@@ -14,7 +14,8 @@ import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
interface StartChatEntryPoint : FeatureEntryPoint { interface StartChatEntryPoint : FeatureEntryPoint {
fun createNode(parentNode: Node, buildContext: BuildContext, callback: Callback): Node context(parentNode: Node)
fun createNode(buildContext: BuildContext, callback: Callback): Node
interface Callback : Plugin { interface Callback : Plugin {
fun onRoomCreated(roomIdOrAlias: RoomIdOrAlias, serverNames: List<String>) fun onRoomCreated(roomIdOrAlias: RoomIdOrAlias, serverNames: List<String>)

Some files were not shown because too many files have changed in this diff Show More