From 71ae3c4a8ca8472d721287e4d002679102f3ada5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 21 Nov 2019 23:50:27 +0100 Subject: [PATCH] Login screens: reset password: display a warning when the process is not finished --- .../features/login/AbstractLoginFragment.kt | 49 +++++++++++++------ .../riotx/features/login/LoginActivity.kt | 2 +- .../riotx/features/login/LoginViewModel.kt | 17 +++++-- vector/src/main/res/values/strings_riotX.xml | 5 +- 4 files changed, 49 insertions(+), 24 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/login/AbstractLoginFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/AbstractLoginFragment.kt index 8322a91c81..a6e201613a 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/AbstractLoginFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/AbstractLoginFragment.kt @@ -80,23 +80,40 @@ abstract class AbstractLoginFragment : VectorBaseFragment(), OnBackPressed { abstract fun onRegistrationError(throwable: Throwable) override fun onBackPressed(toolbarButton: Boolean): Boolean { - if (loginViewModel.isPasswordSent) { - // Ask for confirmation before cancelling the registration - AlertDialog.Builder(requireActivity()) - .setTitle(R.string.login_signup_cancel_confirmation_title) - .setMessage(R.string.login_signup_cancel_confirmation_content) - .setPositiveButton(R.string.login_signup_cancel_confirmation_yes) { _, _ -> - resetViewModel() - vectorBaseActivity.onBackPressed() - } - .setNegativeButton(R.string.login_signup_cancel_confirmation_no, null) - .show() + return when { + loginViewModel.isRegistrationStarted -> { + // Ask for confirmation before cancelling the registration + AlertDialog.Builder(requireActivity()) + .setTitle(R.string.login_signup_cancel_confirmation_title) + .setMessage(R.string.login_signup_cancel_confirmation_content) + .setPositiveButton(R.string.yes) { _, _ -> + resetViewModel() + vectorBaseActivity.onBackPressed() + } + .setNegativeButton(R.string.no, null) + .show() - return true - } else { - resetViewModel() - // Do not consume the Back event - return false + true + } + loginViewModel.isResetPasswordStarted -> { + // Ask for confirmation before cancelling the reset password + AlertDialog.Builder(requireActivity()) + .setTitle(R.string.login_reset_password_cancel_confirmation_title) + .setMessage(R.string.login_reset_password_cancel_confirmation_content) + .setPositiveButton(R.string.yes) { _, _ -> + resetViewModel() + vectorBaseActivity.onBackPressed() + } + .setNegativeButton(R.string.no, null) + .show() + + true + } + else -> { + resetViewModel() + // Do not consume the Back event + false + } } } 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 4ab7dc266b..fceb736660 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 @@ -134,7 +134,7 @@ class LoginActivity : VectorBaseActivity(), ToolbarConfigurable { onRegistrationStageNotSupported() } else { // Go on with registration flow - if (loginViewModel.isPasswordSent) { + if (loginViewModel.isRegistrationStarted) { handleRegistrationNavigation(loginViewEvents.flowResult) } else { // First ask for login and password 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 36792008aa..a79fa76151 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 @@ -69,9 +69,14 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi val currentThreePid: String? get() = registrationWizard?.currentThreePid - var isPasswordSent: Boolean = false + // True when login and password are sent with success to the homeserver + var isRegistrationStarted: Boolean = false private set + // True when email is sent with success to the homeserver + val isResetPasswordStarted: Boolean + get() = resetPasswordEmail.isNullOrBlank().not() + private var registrationWizard: RegistrationWizard? = null private var loginWizard: LoginWizard? = null @@ -232,7 +237,7 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi action.initialDeviceName, object : MatrixCallbackDelegate(registrationCallback) { override fun onSuccess(data: RegistrationResult) { - isPasswordSent = true + isRegistrationStarted = true // Not sure that this will work: // super.onSuccess(data) registrationCallback.onSuccess(data) @@ -252,7 +257,7 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi when (action) { LoginAction.ResetLogin -> { - isPasswordSent = false + isRegistrationStarted = false setState { copy( @@ -323,8 +328,6 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi ) } } else { - resetPasswordEmail = action.email - setState { copy( asyncResetPassword = Loading() @@ -333,6 +336,8 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi currentTask = safeLoginWizard.resetPassword(action.email, action.newPassword, object : MatrixCallback { override fun onSuccess(data: Unit) { + resetPasswordEmail = action.email + setState { copy( asyncResetPassword = Success(data) @@ -370,6 +375,8 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi currentTask = safeLoginWizard.resetPasswordMailConfirmed(object : MatrixCallback { override fun onSuccess(data: Unit) { + resetPasswordEmail = null + setState { copy( asyncResetMailConfirmed = Success(data) diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 674e1b8f72..adf9976bbc 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -84,6 +84,9 @@ You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device. Back to Sign In + Warning + Your password is not yet changed.\n\nStop the password change process? + Set email address Set an email to recover your account. Later, you can optionally allow people you know to discover you by your email. Email @@ -115,8 +118,6 @@ That username is taken Warning Your account is not created yet.\n\nStop the registration process? - Yes - No Select matrix.org Select modular