@@ -131,24 +131,7 @@ class FtueAuthVariant(
131131 private fun handleOnboardingViewEvents (viewEvents : OnboardingViewEvents ) {
132132 when (viewEvents) {
133133 is OnboardingViewEvents .RegistrationFlowResult -> {
134- if (registrationShouldFallback(viewEvents)) {
135- // Display a popup to propose use web fallback
136- onRegistrationStageNotSupported()
137- } else {
138- if (viewEvents.isRegistrationStarted) {
139- // Go on with registration flow
140- handleRegistrationNavigation(viewEvents.flowResult)
141- } else {
142- if (vectorFeatures.isOnboardingCombinedRegisterEnabled()) {
143- openCombinedRegister()
144- } else {
145- // First ask for login and password
146- // I add a tag to indicate that this fragment is a registration stage.
147- // This way it will be automatically popped in when starting the next registration stage
148- openAuthLoginFragmentWithTag(FRAGMENT_REGISTRATION_STAGE_TAG )
149- }
150- }
151- }
134+ onRegistrationFlow(viewEvents)
152135 }
153136 is OnboardingViewEvents .OutdatedHomeserver -> {
154137 MaterialAlertDialogBuilder (activity)
@@ -176,25 +159,33 @@ class FtueAuthVariant(
176159 is OnboardingViewEvents .OnServerSelectionDone -> onServerSelectionDone(viewEvents)
177160 is OnboardingViewEvents .OnSignModeSelected -> onSignModeSelected(viewEvents)
178161 is OnboardingViewEvents .OnLoginFlowRetrieved ->
179- activity.addFragmentToBackstack(views.loginFragmentContainer,
162+ activity.addFragmentToBackstack(
163+ views.loginFragmentContainer,
180164 FtueAuthSignUpSignInSelectionFragment ::class .java,
181- option = commonOption)
165+ option = commonOption
166+ )
182167 is OnboardingViewEvents .OnWebLoginError -> onWebLoginError(viewEvents)
183168 is OnboardingViewEvents .OnForgetPasswordClicked ->
184- activity.addFragmentToBackstack(views.loginFragmentContainer,
169+ activity.addFragmentToBackstack(
170+ views.loginFragmentContainer,
185171 FtueAuthResetPasswordFragment ::class .java,
186- option = commonOption)
172+ option = commonOption
173+ )
187174 is OnboardingViewEvents .OnResetPasswordSendThreePidDone -> {
188175 supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG , POP_BACK_STACK_EXCLUSIVE )
189- activity.addFragmentToBackstack(views.loginFragmentContainer,
176+ activity.addFragmentToBackstack(
177+ views.loginFragmentContainer,
190178 FtueAuthResetPasswordMailConfirmationFragment ::class .java,
191- option = commonOption)
179+ option = commonOption
180+ )
192181 }
193182 is OnboardingViewEvents .OnResetPasswordMailConfirmationSuccess -> {
194183 supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG , POP_BACK_STACK_EXCLUSIVE )
195- activity.addFragmentToBackstack(views.loginFragmentContainer,
184+ activity.addFragmentToBackstack(
185+ views.loginFragmentContainer,
196186 FtueAuthResetPasswordSuccessFragment ::class .java,
197- option = commonOption)
187+ option = commonOption
188+ )
198189 }
199190 is OnboardingViewEvents .OnResetPasswordMailConfirmationSuccessDone -> {
200191 // Go back to the login fragment
@@ -221,11 +212,13 @@ class FtueAuthVariant(
221212 // This is handled by the Fragments
222213 Unit
223214 OnboardingViewEvents .OpenUseCaseSelection -> {
224- activity.addFragmentToBackstack(views.loginFragmentContainer,
215+ activity.addFragmentToBackstack(
216+ views.loginFragmentContainer,
225217 FtueAuthUseCaseFragment ::class .java,
226- option = commonOption)
218+ option = commonOption
219+ )
227220 }
228- OnboardingViewEvents .OpenCombinedRegister -> openCombinedRegister ()
221+ OnboardingViewEvents .OpenCombinedRegister -> openStartCombinedRegister ()
229222 is OnboardingViewEvents .OnAccountCreated -> onAccountCreated()
230223 OnboardingViewEvents .OnAccountSignedIn -> onAccountSignedIn()
231224 OnboardingViewEvents .OnChooseDisplayName -> onChooseDisplayName()
@@ -244,7 +237,21 @@ class FtueAuthVariant(
244237 }
245238 }
246239
247- private fun openCombinedRegister () {
240+ private fun onRegistrationFlow (viewEvents : OnboardingViewEvents .RegistrationFlowResult ) {
241+ when {
242+ registrationShouldFallback(viewEvents) -> displayFallbackWebDialog()
243+ viewEvents.isRegistrationStarted -> handleRegistrationNavigation(viewEvents.flowResult.orderedStages())
244+ vectorFeatures.isOnboardingCombinedRegisterEnabled() -> openStartCombinedRegister()
245+ else -> openAuthLoginFragmentWithTag(FRAGMENT_REGISTRATION_STAGE_TAG )
246+ }
247+ }
248+
249+ private fun FlowResult.orderedStages () = when {
250+ vectorFeatures.isOnboardingCombinedRegisterEnabled() -> missingStages.sortedWith(FtueMissingRegistrationStagesComparator ())
251+ else -> missingStages
252+ }
253+
254+ private fun openStartCombinedRegister () {
248255 addRegistrationStageFragmentToBackstack(FtueAuthCombinedRegisterFragment ::class .java)
249256 }
250257
@@ -254,14 +261,16 @@ class FtueAuthVariant(
254261 private fun OnboardingViewEvents.RegistrationFlowResult.containsUnsupportedRegistrationFlow () =
255262 flowResult.missingStages.any { ! it.isSupported() }
256263
257- private fun onRegistrationStageNotSupported () {
264+ private fun displayFallbackWebDialog () {
258265 MaterialAlertDialogBuilder (activity)
259266 .setTitle(R .string.app_name)
260267 .setMessage(activity.getString(R .string.login_registration_not_supported))
261268 .setPositiveButton(R .string.yes) { _, _ ->
262- activity.addFragmentToBackstack(views.loginFragmentContainer,
269+ activity.addFragmentToBackstack(
270+ views.loginFragmentContainer,
263271 FtueAuthWebFragment ::class .java,
264- option = commonOption)
272+ option = commonOption
273+ )
265274 }
266275 .setNegativeButton(R .string.no, null )
267276 .show()
@@ -283,9 +292,11 @@ class FtueAuthVariant(
283292 when (OnboardingViewEvents .serverType) {
284293 ServerType .MatrixOrg -> Unit // In this case, we wait for the login flow
285294 ServerType .EMS ,
286- ServerType .Other -> activity.addFragmentToBackstack(views.loginFragmentContainer,
295+ ServerType .Other -> activity.addFragmentToBackstack(
296+ views.loginFragmentContainer,
287297 FtueAuthServerUrlFormFragment ::class .java,
288- option = commonOption)
298+ option = commonOption
299+ )
289300 ServerType .Unknown -> Unit /* Should not happen */
290301 }
291302 }
@@ -317,10 +328,12 @@ class FtueAuthVariant(
317328 }
318329
319330 private fun openAuthLoginFragmentWithTag (tag : String ) {
320- activity.addFragmentToBackstack(views.loginFragmentContainer,
331+ activity.addFragmentToBackstack(
332+ views.loginFragmentContainer,
321333 FtueAuthLoginFragment ::class .java,
322334 tag = tag,
323- option = commonOption)
335+ option = commonOption
336+ )
324337 }
325338
326339 private fun onLoginModeNotSupported (supportedTypes : List <String >) {
@@ -341,9 +354,11 @@ class FtueAuthVariant(
341354 }
342355
343356 private fun openAuthWebFragment () {
344- activity.addFragmentToBackstack(views.loginFragmentContainer,
357+ activity.addFragmentToBackstack(
358+ views.loginFragmentContainer,
345359 FtueAuthWebFragment ::class .java,
346- option = commonOption)
360+ option = commonOption
361+ )
347362 }
348363
349364 /* *
@@ -355,15 +370,15 @@ class FtueAuthVariant(
355370 ?.let { onboardingViewModel.handle(OnboardingAction .LoginWithToken (it)) }
356371 }
357372
358- private fun handleRegistrationNavigation (flowResult : FlowResult ) {
373+ private fun handleRegistrationNavigation (remainingStages : List < Stage > ) {
359374 // Complete all mandatory stages first
360- val mandatoryStage = flowResult.missingStages .firstOrNull { it.mandatory }
375+ val mandatoryStage = remainingStages .firstOrNull { it.mandatory }
361376
362377 if (mandatoryStage != null ) {
363378 doStage(mandatoryStage)
364379 } else {
365380 // Consider optional stages
366- val optionalStage = flowResult.missingStages .firstOrNull { ! it.mandatory && it !is Stage .Dummy }
381+ val optionalStage = remainingStages .firstOrNull { ! it.mandatory && it !is Stage .Dummy }
367382 if (optionalStage == null ) {
368383 // Should not happen...
369384 } else {
@@ -437,14 +452,16 @@ class FtueAuthVariant(
437452 }
438453
439454 private fun onChooseDisplayName () {
440- activity.addFragmentToBackstack(views.loginFragmentContainer,
455+ activity.addFragmentToBackstack(
456+ views.loginFragmentContainer,
441457 FtueAuthChooseDisplayNameFragment ::class .java,
442458 option = commonOption
443459 )
444460 }
445461
446462 private fun onChooseProfilePicture () {
447- activity.addFragmentToBackstack(views.loginFragmentContainer,
463+ activity.addFragmentToBackstack(
464+ views.loginFragmentContainer,
448465 FtueAuthChooseProfilePictureFragment ::class .java,
449466 option = commonOption
450467 )
0 commit comments