From 5edfb78721c3cc4c718db20942840a5c08a94f94 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 21 Nov 2019 16:51:45 +0100 Subject: [PATCH] Cleanup errors and close keyboard at each login step --- .../im/vector/riotx/features/login/LoginFragment.kt | 10 +++++++++- .../login/LoginGenericTextInputFormFragment.kt | 9 ++++++++- .../features/login/LoginResetPasswordFragment.kt | 12 +++++++++++- .../features/login/LoginServerUrlFormFragment.kt | 10 +++++++++- .../riotx/features/login/terms/LoginTermsFragment.kt | 7 ------- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt index fac305e2cc..fd86dcbbc2 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt @@ -29,6 +29,7 @@ import com.airbnb.mvrx.withState import com.jakewharton.rxbinding3.widget.textChanges import im.vector.riotx.R import im.vector.riotx.core.error.ErrorFormatter +import im.vector.riotx.core.extensions.hideKeyboard import im.vector.riotx.core.extensions.showPassword import io.reactivex.Observable import io.reactivex.functions.BiFunction @@ -79,6 +80,8 @@ class LoginFragment @Inject constructor( @OnClick(R.id.loginSubmit) fun submit() { + cleanupUi() + val login = loginField.text?.trim().toString() val password = passwordField.text?.trim().toString() @@ -89,6 +92,12 @@ class LoginFragment @Inject constructor( } } + private fun cleanupUi() { + loginSubmit.hideKeyboard() + loginFieldTil.error = null + passwordFieldTil.error = null + } + private fun setupUi() { val resId = when (loginViewModel.signMode) { SignMode.Unknown -> error("developer error") @@ -128,7 +137,6 @@ class LoginFragment @Inject constructor( }) } - private fun setupSubmitButton() { Observable .combineLatest( diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginGenericTextInputFormFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginGenericTextInputFormFragment.kt index 324b61d102..bc7ab56500 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginGenericTextInputFormFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginGenericTextInputFormFragment.kt @@ -33,6 +33,7 @@ import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.failure.MatrixError import im.vector.riotx.R import im.vector.riotx.core.error.ErrorFormatter +import im.vector.riotx.core.extensions.hideKeyboard import im.vector.riotx.core.extensions.isEmail import im.vector.riotx.core.extensions.setTextOrHide import kotlinx.android.parcel.Parcelize @@ -135,7 +136,8 @@ class LoginGenericTextInputFormFragment @Inject constructor(private val errorFor } @OnClick(R.id.loginGenericTextInputFormSubmit) - fun onSubmitClicked() { + fun submit() { + cleanupUi() val text = loginGenericTextInputFormTextInput.text.toString() if (text.isEmpty()) { @@ -158,6 +160,11 @@ class LoginGenericTextInputFormFragment @Inject constructor(private val errorFor } } + private fun cleanupUi() { + loginGenericTextInputFormSubmit.hideKeyboard() + loginGenericTextInputFormSubmit.error = null + } + private fun getCountryCodeOrShowError(text: String): String? { // We expect an international format for the moment (see https://github.com/vector-im/riotX-android/issues/693) if (text.startsWith("+")) { diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginResetPasswordFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginResetPasswordFragment.kt index ccb4526047..9c912e07d7 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginResetPasswordFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginResetPasswordFragment.kt @@ -27,6 +27,7 @@ import com.airbnb.mvrx.withState import com.jakewharton.rxbinding3.widget.textChanges import im.vector.riotx.R import im.vector.riotx.core.error.ErrorFormatter +import im.vector.riotx.core.extensions.hideKeyboard import im.vector.riotx.core.extensions.isEmail import im.vector.riotx.core.extensions.showPassword import io.reactivex.Observable @@ -35,6 +36,7 @@ import io.reactivex.rxkotlin.subscribeBy import kotlinx.android.synthetic.main.fragment_login.passwordField import kotlinx.android.synthetic.main.fragment_login.passwordFieldTil import kotlinx.android.synthetic.main.fragment_login.passwordReveal +import kotlinx.android.synthetic.main.fragment_login_generic_text_input_form.* import kotlinx.android.synthetic.main.fragment_login_reset_password.* import javax.inject.Inject @@ -71,7 +73,7 @@ class LoginResetPasswordFragment @Inject constructor( } ) .subscribeBy { - resetPasswordEmail.error = null + resetPasswordEmailTil.error = null passwordFieldTil.error = null resetPasswordSubmit.isEnabled = it } @@ -80,12 +82,20 @@ class LoginResetPasswordFragment @Inject constructor( @OnClick(R.id.resetPasswordSubmit) fun submit() { + cleanupUi() + val email = resetPasswordEmail.text.toString() val password = passwordField.text.toString() loginViewModel.handle(LoginAction.ResetPassword(email, password)) } + private fun cleanupUi() { + resetPasswordSubmit.hideKeyboard() + resetPasswordEmailTil.error = null + passwordFieldTil.error = null + } + private fun setupPasswordReveal() { passwordShown = false diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginServerUrlFormFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginServerUrlFormFragment.kt index 004fb0107a..9181516834 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginServerUrlFormFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginServerUrlFormFragment.kt @@ -29,6 +29,7 @@ import com.airbnb.mvrx.withState import com.jakewharton.rxbinding3.widget.textChanges import im.vector.riotx.R import im.vector.riotx.core.error.ErrorFormatter +import im.vector.riotx.core.extensions.hideKeyboard import im.vector.riotx.core.utils.openUrlInExternalBrowser import kotlinx.android.synthetic.main.fragment_login_server_url_form.* import javax.inject.Inject @@ -88,7 +89,7 @@ class LoginServerUrlFormFragment @Inject constructor( } @OnClick(R.id.loginServerUrlFormLearnMore) - fun learMore() { + fun learnMore() { openUrlInExternalBrowser(requireActivity(), MODULAR_LINK) } @@ -99,6 +100,8 @@ class LoginServerUrlFormFragment @Inject constructor( @SuppressLint("SetTextI18n") @OnClick(R.id.loginServerUrlFormSubmit) fun submit() { + cleanupUi() + // Static check of homeserver url, empty, malformed, etc. var serverUrl = loginServerUrlFormHomeServerUrl.text.toString() @@ -116,6 +119,11 @@ class LoginServerUrlFormFragment @Inject constructor( } } + private fun cleanupUi() { + loginServerUrlFormSubmit.hideKeyboard() + loginServerUrlFormHomeServerUrlTil.error = null + } + override fun onRegistrationError(throwable: Throwable) { // Cannot happen here, but just in case AlertDialog.Builder(requireActivity()) diff --git a/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt index f7f61b71bc..faf53ab49d 100755 --- a/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt @@ -93,13 +93,6 @@ class LoginTermsFragment @Inject constructor( ?.takeIf { it.isNotBlank() } ?.let { openUrlInExternalBrowser(requireContext(), it) - - // This code crashed, because user is not authenticated yet - //val intent = VectorWebViewActivity.getIntent(requireContext(), - // localizedFlowDataLoginTerms.localizedUrl!!, - // localizedFlowDataLoginTerms.localizedName!!, - // WebViewMode.DEFAULT) - //startActivity(intent) } }