extracting registration flow handling to its own function

- flattening nested ifs
- formatting
This commit is contained in:
Adam Brown 2022-04-19 11:41:17 +01:00
parent 98dc4a57fc
commit 5b01290057

View File

@ -131,24 +131,7 @@ class FtueAuthVariant(
private fun handleOnboardingViewEvents(viewEvents: OnboardingViewEvents) { private fun handleOnboardingViewEvents(viewEvents: OnboardingViewEvents) {
when (viewEvents) { when (viewEvents) {
is OnboardingViewEvents.RegistrationFlowResult -> { is OnboardingViewEvents.RegistrationFlowResult -> {
if (registrationShouldFallback(viewEvents)) { onRegistrationFlow(viewEvents)
// Display a popup to propose use web fallback
onRegistrationStageNotSupported()
} else {
if (viewEvents.isRegistrationStarted) {
// Go on with registration flow
handleRegistrationNavigation(viewEvents.flowResult)
} else {
if (vectorFeatures.isOnboardingCombinedRegisterEnabled()) {
openCombinedRegister()
} else {
// First ask for login and password
// I add a tag to indicate that this fragment is a registration stage.
// This way it will be automatically popped in when starting the next registration stage
openAuthLoginFragmentWithTag(FRAGMENT_REGISTRATION_STAGE_TAG)
}
}
}
} }
is OnboardingViewEvents.OutdatedHomeserver -> { is OnboardingViewEvents.OutdatedHomeserver -> {
MaterialAlertDialogBuilder(activity) MaterialAlertDialogBuilder(activity)
@ -176,25 +159,33 @@ class FtueAuthVariant(
is OnboardingViewEvents.OnServerSelectionDone -> onServerSelectionDone(viewEvents) is OnboardingViewEvents.OnServerSelectionDone -> onServerSelectionDone(viewEvents)
is OnboardingViewEvents.OnSignModeSelected -> onSignModeSelected(viewEvents) is OnboardingViewEvents.OnSignModeSelected -> onSignModeSelected(viewEvents)
is OnboardingViewEvents.OnLoginFlowRetrieved -> is OnboardingViewEvents.OnLoginFlowRetrieved ->
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthSignUpSignInSelectionFragment::class.java, FtueAuthSignUpSignInSelectionFragment::class.java,
option = commonOption) option = commonOption
)
is OnboardingViewEvents.OnWebLoginError -> onWebLoginError(viewEvents) is OnboardingViewEvents.OnWebLoginError -> onWebLoginError(viewEvents)
is OnboardingViewEvents.OnForgetPasswordClicked -> is OnboardingViewEvents.OnForgetPasswordClicked ->
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthResetPasswordFragment::class.java, FtueAuthResetPasswordFragment::class.java,
option = commonOption) option = commonOption
)
is OnboardingViewEvents.OnResetPasswordSendThreePidDone -> { is OnboardingViewEvents.OnResetPasswordSendThreePidDone -> {
supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE) supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE)
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthResetPasswordMailConfirmationFragment::class.java, FtueAuthResetPasswordMailConfirmationFragment::class.java,
option = commonOption) option = commonOption
)
} }
is OnboardingViewEvents.OnResetPasswordMailConfirmationSuccess -> { is OnboardingViewEvents.OnResetPasswordMailConfirmationSuccess -> {
supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE) supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE)
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthResetPasswordSuccessFragment::class.java, FtueAuthResetPasswordSuccessFragment::class.java,
option = commonOption) option = commonOption
)
} }
is OnboardingViewEvents.OnResetPasswordMailConfirmationSuccessDone -> { is OnboardingViewEvents.OnResetPasswordMailConfirmationSuccessDone -> {
// Go back to the login fragment // Go back to the login fragment
@ -221,11 +212,13 @@ class FtueAuthVariant(
// This is handled by the Fragments // This is handled by the Fragments
Unit Unit
OnboardingViewEvents.OpenUseCaseSelection -> { OnboardingViewEvents.OpenUseCaseSelection -> {
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthUseCaseFragment::class.java, FtueAuthUseCaseFragment::class.java,
option = commonOption) option = commonOption
)
} }
OnboardingViewEvents.OpenCombinedRegister -> openCombinedRegister() OnboardingViewEvents.OpenCombinedRegister -> openStartCombinedRegister()
is OnboardingViewEvents.OnAccountCreated -> onAccountCreated() is OnboardingViewEvents.OnAccountCreated -> onAccountCreated()
OnboardingViewEvents.OnAccountSignedIn -> onAccountSignedIn() OnboardingViewEvents.OnAccountSignedIn -> onAccountSignedIn()
OnboardingViewEvents.OnChooseDisplayName -> onChooseDisplayName() OnboardingViewEvents.OnChooseDisplayName -> onChooseDisplayName()
@ -244,7 +237,21 @@ class FtueAuthVariant(
} }
} }
private fun openCombinedRegister() { private fun onRegistrationFlow(viewEvents: OnboardingViewEvents.RegistrationFlowResult) {
when {
registrationShouldFallback(viewEvents) -> displayFallbackWebDialog()
viewEvents.isRegistrationStarted -> handleRegistrationNavigation(viewEvents.flowResult)
vectorFeatures.isOnboardingCombinedRegisterEnabled() -> openStartCombinedRegister()
else -> {
// First ask for login and password
// I add a tag to indicate that this fragment is a registration stage.
// This way it will be automatically popped in when starting the next registration stage
openAuthLoginFragmentWithTag(FRAGMENT_REGISTRATION_STAGE_TAG)
}
}
}
private fun openStartCombinedRegister() {
addRegistrationStageFragmentToBackstack(FtueAuthCombinedRegisterFragment::class.java) addRegistrationStageFragmentToBackstack(FtueAuthCombinedRegisterFragment::class.java)
} }
@ -254,14 +261,16 @@ class FtueAuthVariant(
private fun OnboardingViewEvents.RegistrationFlowResult.containsUnsupportedRegistrationFlow() = private fun OnboardingViewEvents.RegistrationFlowResult.containsUnsupportedRegistrationFlow() =
flowResult.missingStages.any { !it.isSupported() } flowResult.missingStages.any { !it.isSupported() }
private fun onRegistrationStageNotSupported() { private fun displayFallbackWebDialog() {
MaterialAlertDialogBuilder(activity) MaterialAlertDialogBuilder(activity)
.setTitle(R.string.app_name) .setTitle(R.string.app_name)
.setMessage(activity.getString(R.string.login_registration_not_supported)) .setMessage(activity.getString(R.string.login_registration_not_supported))
.setPositiveButton(R.string.yes) { _, _ -> .setPositiveButton(R.string.yes) { _, _ ->
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthWebFragment::class.java, FtueAuthWebFragment::class.java,
option = commonOption) option = commonOption
)
} }
.setNegativeButton(R.string.no, null) .setNegativeButton(R.string.no, null)
.show() .show()
@ -283,9 +292,11 @@ class FtueAuthVariant(
when (OnboardingViewEvents.serverType) { when (OnboardingViewEvents.serverType) {
ServerType.MatrixOrg -> Unit // In this case, we wait for the login flow ServerType.MatrixOrg -> Unit // In this case, we wait for the login flow
ServerType.EMS, ServerType.EMS,
ServerType.Other -> activity.addFragmentToBackstack(views.loginFragmentContainer, ServerType.Other -> activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthServerUrlFormFragment::class.java, FtueAuthServerUrlFormFragment::class.java,
option = commonOption) option = commonOption
)
ServerType.Unknown -> Unit /* Should not happen */ ServerType.Unknown -> Unit /* Should not happen */
} }
} }
@ -317,10 +328,12 @@ class FtueAuthVariant(
} }
private fun openAuthLoginFragmentWithTag(tag: String) { private fun openAuthLoginFragmentWithTag(tag: String) {
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthLoginFragment::class.java, FtueAuthLoginFragment::class.java,
tag = tag, tag = tag,
option = commonOption) option = commonOption
)
} }
private fun onLoginModeNotSupported(supportedTypes: List<String>) { private fun onLoginModeNotSupported(supportedTypes: List<String>) {
@ -341,9 +354,11 @@ class FtueAuthVariant(
} }
private fun openAuthWebFragment() { private fun openAuthWebFragment() {
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthWebFragment::class.java, FtueAuthWebFragment::class.java,
option = commonOption) option = commonOption
)
} }
/** /**
@ -437,14 +452,16 @@ class FtueAuthVariant(
} }
private fun onChooseDisplayName() { private fun onChooseDisplayName() {
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthChooseDisplayNameFragment::class.java, FtueAuthChooseDisplayNameFragment::class.java,
option = commonOption option = commonOption
) )
} }
private fun onChooseProfilePicture() { private fun onChooseProfilePicture() {
activity.addFragmentToBackstack(views.loginFragmentContainer, activity.addFragmentToBackstack(
views.loginFragmentContainer,
FtueAuthChooseProfilePictureFragment::class.java, FtueAuthChooseProfilePictureFragment::class.java,
option = commonOption option = commonOption
) )