diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/registration/Stage.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/registration/Stage.kt index beb776dba3..c3f4864232 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/registration/Stage.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/registration/Stage.kt @@ -30,8 +30,9 @@ sealed class Stage(open val mandatory: Boolean) { // m.login.token - // m.login.dummy, never mandatory by definition - object Dummy : Stage(false) + // m.login.dummy, can be mandatory if there is no other stages. In this case the account cannot be created by just sending a username + // and a password, the dummy stage has to be done + data class Dummy(override val mandatory: Boolean) : Stage(mandatory) // Undocumented yet: m.login.terms data class Terms(override val mandatory: Boolean, val policies: TermPolicies) : Stage(mandatory) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt index 113cbb16b2..2d3d25e538 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt @@ -81,7 +81,7 @@ fun RegistrationFlowResponse.toFlowResult(): FlowResult { val stage = when (type) { LoginFlowTypes.RECAPTCHA -> Stage.ReCaptcha(isMandatory, ((params?.get(type) as? Map<*, *>)?.get("public_key") as? String) ?: "") - LoginFlowTypes.DUMMY -> Stage.Dummy + LoginFlowTypes.DUMMY -> Stage.Dummy(isMandatory) LoginFlowTypes.TERMS -> Stage.Terms(isMandatory, params?.get(type) as? TermPolicies ?: emptyMap()) LoginFlowTypes.EMAIL_IDENTITY -> Stage.Email(isMandatory) LoginFlowTypes.MSISDN -> Stage.Msisdn(isMandatory) diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt index 4819df8762..c4290a5c65 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt @@ -128,14 +128,14 @@ class LoginActivity : VectorBaseActivity(), ToolbarConfigurable { } is LoginNavigation.OnSendEmailSuccess -> addFragmentToBackstack(R.id.loginFragmentContainer, - LoginWaitForEmailFragment::class.java, - LoginWaitForEmailFragmentArgument(loginNavigation.email), - tag = FRAGMENT_REGISTRATION_STAGE_TAG) + LoginWaitForEmailFragment::class.java, + LoginWaitForEmailFragmentArgument(loginNavigation.email), + tag = FRAGMENT_REGISTRATION_STAGE_TAG) is LoginNavigation.OnSendMsisdnSuccess -> addFragmentToBackstack(R.id.loginFragmentContainer, - LoginGenericTextInputFormFragment::class.java, - LoginGenericTextInputFormFragmentArgument(TextInputFormFragmentMode.ConfirmMsisdn, true, loginNavigation.msisdn), - tag = FRAGMENT_REGISTRATION_STAGE_TAG) + LoginGenericTextInputFormFragment::class.java, + LoginGenericTextInputFormFragmentArgument(TextInputFormFragmentMode.ConfirmMsisdn, true, loginNavigation.msisdn), + tag = FRAGMENT_REGISTRATION_STAGE_TAG) } } diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt index a79fa76151..12ca553304 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt @@ -27,6 +27,7 @@ import im.vector.matrix.android.api.auth.login.LoginWizard import im.vector.matrix.android.api.auth.registration.FlowResult import im.vector.matrix.android.api.auth.registration.RegistrationResult import im.vector.matrix.android.api.auth.registration.RegistrationWizard +import im.vector.matrix.android.api.auth.registration.Stage import im.vector.matrix.android.api.session.Session import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.android.api.util.MatrixCallbackDelegate @@ -450,8 +451,14 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi } private fun onFlowResponse(flowResult: FlowResult) { - // Notify the user - _viewEvents.post(LoginViewEvents.RegistrationFlowResult(flowResult)) + // If dummy stage is mandatory, and password is already sent, do the dummy stage now + if (isRegistrationStarted + && flowResult.missingStages.any { it is Stage.Dummy && it.mandatory }) { + handleRegisterDummy() + } else { + // Notify the user + _viewEvents.post(LoginViewEvents.RegistrationFlowResult(flowResult)) + } } private fun onSessionCreated(session: Session) { diff --git a/vector/src/main/java/im/vector/riotx/features/login/SupportedStage.kt b/vector/src/main/java/im/vector/riotx/features/login/SupportedStage.kt index 5fd4505b00..ce234caeb0 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/SupportedStage.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/SupportedStage.kt @@ -19,7 +19,7 @@ package im.vector.riotx.features.login import im.vector.matrix.android.api.auth.registration.Stage /** - * Stage.Other is not supported, as well as any other new stage added to the SDK before it is added to the list below + * Stage.Other is not supported, as well as any other new stages added to the SDK before it is added to the list below */ fun Stage.isSupported(): Boolean { return this is Stage.ReCaptcha