@@ -9,6 +9,7 @@ package io.element.android.features.ftue.impl.sessionverification
9
9
10
10
import android.os.Parcelable
11
11
import androidx.compose.runtime.Composable
12
+ import androidx.compose.runtime.mutableStateOf
12
13
import androidx.compose.ui.Modifier
13
14
import androidx.lifecycle.lifecycleScope
14
15
import com.bumble.appyx.core.modality.BuildContext
@@ -17,15 +18,21 @@ import com.bumble.appyx.core.plugin.Plugin
17
18
import com.bumble.appyx.core.plugin.plugins
18
19
import com.bumble.appyx.navmodel.backstack.BackStack
19
20
import com.bumble.appyx.navmodel.backstack.operation.newRoot
21
+ import com.bumble.appyx.navmodel.backstack.operation.pop
20
22
import com.bumble.appyx.navmodel.backstack.operation.push
21
23
import dagger.assisted.Assisted
22
24
import dagger.assisted.AssistedInject
23
25
import io.element.android.anvilannotations.ContributesNode
26
+ import io.element.android.appconfig.LearnMoreConfig
27
+ import io.element.android.features.ftue.impl.sessionverification.choosemode.ChooseSelfVerificationModeNode
24
28
import io.element.android.features.securebackup.api.SecureBackupEntryPoint
25
29
import io.element.android.features.verifysession.api.VerifySessionEntryPoint
26
30
import io.element.android.libraries.architecture.BackstackView
27
31
import io.element.android.libraries.architecture.BaseFlowNode
32
+ import io.element.android.libraries.architecture.createNode
33
+ import io.element.android.libraries.designsystem.utils.OpenUrlInTabView
28
34
import io.element.android.libraries.di.SessionScope
35
+ import io.element.android.libraries.matrix.api.verification.VerificationRequest
29
36
import kotlinx.coroutines.launch
30
37
import kotlinx.parcelize.Parcelize
31
38
@@ -37,15 +44,18 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor(
37
44
private val secureBackupEntryPoint : SecureBackupEntryPoint ,
38
45
) : BaseFlowNode<FtueSessionVerificationFlowNode.NavTarget>(
39
46
backstack = BackStack (
40
- initialElement = NavTarget .Root (showDeviceVerifiedScreen = false) ,
47
+ initialElement = NavTarget .Root ,
41
48
savedStateMap = buildContext.savedStateMap,
42
49
),
43
50
buildContext = buildContext,
44
51
plugins = plugins,
45
52
) {
46
53
sealed interface NavTarget : Parcelable {
47
54
@Parcelize
48
- data class Root (val showDeviceVerifiedScreen : Boolean ) : NavTarget
55
+ data object Root : NavTarget
56
+
57
+ @Parcelize
58
+ data object UseAnotherDevice : NavTarget
49
59
50
60
@Parcelize
51
61
data object EnterRecoveryKey : NavTarget
@@ -62,27 +72,51 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor(
62
72
override fun onDone () {
63
73
lifecycleScope.launch {
64
74
// Move to the completed state view in the verification flow
65
- backstack.newRoot(NavTarget .Root (showDeviceVerifiedScreen = true ) )
75
+ backstack.newRoot(NavTarget .UseAnotherDevice )
66
76
}
67
77
}
68
78
}
69
79
70
80
override fun resolve (navTarget : NavTarget , buildContext : BuildContext ): Node {
71
81
return when (navTarget) {
72
82
is NavTarget .Root -> {
83
+ val callback = object : ChooseSelfVerificationModeNode .Callback {
84
+ override fun onUseAnotherDevice () {
85
+ backstack.push(NavTarget .UseAnotherDevice )
86
+ }
87
+
88
+ override fun onUseRecoveryKey () {
89
+ backstack.push(NavTarget .EnterRecoveryKey )
90
+ }
91
+
92
+ override fun onResetKey () {
93
+ backstack.push(NavTarget .ResetIdentity )
94
+ }
95
+
96
+ override fun onLearnMoreAboutEncryption () {
97
+ learnMoreUrl.value = LearnMoreConfig .ENCRYPTION_URL
98
+ }
99
+ }
100
+
101
+ createNode<ChooseSelfVerificationModeNode >(buildContext, plugins = listOf (callback))
102
+ }
103
+ is NavTarget .UseAnotherDevice -> {
73
104
verifySessionEntryPoint.nodeBuilder(this , buildContext)
74
- .params(VerifySessionEntryPoint .Params (navTarget.showDeviceVerifiedScreen))
105
+ .params(VerifySessionEntryPoint .Params (
106
+ showDeviceVerifiedScreen = true ,
107
+ verificationRequest = VerificationRequest .Outgoing .CurrentSession ,
108
+ ))
75
109
.callback(object : VerifySessionEntryPoint .Callback {
76
- override fun onEnterRecoveryKey () {
77
- backstack.push(NavTarget .EnterRecoveryKey )
78
- }
79
-
80
110
override fun onDone () {
81
111
plugins<Callback >().forEach { it.onDone() }
82
112
}
83
113
84
- override fun onResetKey () {
85
- backstack.push(NavTarget .ResetIdentity )
114
+ override fun onBack () {
115
+ backstack.pop()
116
+ }
117
+
118
+ override fun onLearnMoreAboutEncryption () {
119
+ learnMoreUrl.value = LearnMoreConfig .ENCRYPTION_URL
86
120
}
87
121
})
88
122
.build()
@@ -106,8 +140,12 @@ class FtueSessionVerificationFlowNode @AssistedInject constructor(
106
140
}
107
141
}
108
142
143
+ private val learnMoreUrl = mutableStateOf<String ?>(null )
144
+
109
145
@Composable
110
146
override fun View (modifier : Modifier ) {
111
147
BackstackView ()
148
+
149
+ OpenUrlInTabView (learnMoreUrl)
112
150
}
113
151
}
0 commit comments