Cleanup errors and close keyboard at each login step

This commit is contained in:
Benoit Marty 2019-11-21 16:51:45 +01:00
parent 491a38a79f
commit 5edfb78721
5 changed files with 37 additions and 11 deletions

View File

@ -29,6 +29,7 @@ import com.airbnb.mvrx.withState
import com.jakewharton.rxbinding3.widget.textChanges import com.jakewharton.rxbinding3.widget.textChanges
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.error.ErrorFormatter import im.vector.riotx.core.error.ErrorFormatter
import im.vector.riotx.core.extensions.hideKeyboard
import im.vector.riotx.core.extensions.showPassword import im.vector.riotx.core.extensions.showPassword
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.functions.BiFunction import io.reactivex.functions.BiFunction
@ -79,6 +80,8 @@ class LoginFragment @Inject constructor(
@OnClick(R.id.loginSubmit) @OnClick(R.id.loginSubmit)
fun submit() { fun submit() {
cleanupUi()
val login = loginField.text?.trim().toString() val login = loginField.text?.trim().toString()
val password = passwordField.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() { private fun setupUi() {
val resId = when (loginViewModel.signMode) { val resId = when (loginViewModel.signMode) {
SignMode.Unknown -> error("developer error") SignMode.Unknown -> error("developer error")
@ -128,7 +137,6 @@ class LoginFragment @Inject constructor(
}) })
} }
private fun setupSubmitButton() { private fun setupSubmitButton() {
Observable Observable
.combineLatest( .combineLatest(

View File

@ -33,6 +33,7 @@ import im.vector.matrix.android.api.failure.Failure
import im.vector.matrix.android.api.failure.MatrixError import im.vector.matrix.android.api.failure.MatrixError
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.error.ErrorFormatter 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.isEmail
import im.vector.riotx.core.extensions.setTextOrHide import im.vector.riotx.core.extensions.setTextOrHide
import kotlinx.android.parcel.Parcelize import kotlinx.android.parcel.Parcelize
@ -135,7 +136,8 @@ class LoginGenericTextInputFormFragment @Inject constructor(private val errorFor
} }
@OnClick(R.id.loginGenericTextInputFormSubmit) @OnClick(R.id.loginGenericTextInputFormSubmit)
fun onSubmitClicked() { fun submit() {
cleanupUi()
val text = loginGenericTextInputFormTextInput.text.toString() val text = loginGenericTextInputFormTextInput.text.toString()
if (text.isEmpty()) { 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? { private fun getCountryCodeOrShowError(text: String): String? {
// We expect an international format for the moment (see https://github.com/vector-im/riotX-android/issues/693) // We expect an international format for the moment (see https://github.com/vector-im/riotX-android/issues/693)
if (text.startsWith("+")) { if (text.startsWith("+")) {

View File

@ -27,6 +27,7 @@ import com.airbnb.mvrx.withState
import com.jakewharton.rxbinding3.widget.textChanges import com.jakewharton.rxbinding3.widget.textChanges
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.error.ErrorFormatter 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.isEmail
import im.vector.riotx.core.extensions.showPassword import im.vector.riotx.core.extensions.showPassword
import io.reactivex.Observable 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.passwordField
import kotlinx.android.synthetic.main.fragment_login.passwordFieldTil import kotlinx.android.synthetic.main.fragment_login.passwordFieldTil
import kotlinx.android.synthetic.main.fragment_login.passwordReveal 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 kotlinx.android.synthetic.main.fragment_login_reset_password.*
import javax.inject.Inject import javax.inject.Inject
@ -71,7 +73,7 @@ class LoginResetPasswordFragment @Inject constructor(
} }
) )
.subscribeBy { .subscribeBy {
resetPasswordEmail.error = null resetPasswordEmailTil.error = null
passwordFieldTil.error = null passwordFieldTil.error = null
resetPasswordSubmit.isEnabled = it resetPasswordSubmit.isEnabled = it
} }
@ -80,12 +82,20 @@ class LoginResetPasswordFragment @Inject constructor(
@OnClick(R.id.resetPasswordSubmit) @OnClick(R.id.resetPasswordSubmit)
fun submit() { fun submit() {
cleanupUi()
val email = resetPasswordEmail.text.toString() val email = resetPasswordEmail.text.toString()
val password = passwordField.text.toString() val password = passwordField.text.toString()
loginViewModel.handle(LoginAction.ResetPassword(email, password)) loginViewModel.handle(LoginAction.ResetPassword(email, password))
} }
private fun cleanupUi() {
resetPasswordSubmit.hideKeyboard()
resetPasswordEmailTil.error = null
passwordFieldTil.error = null
}
private fun setupPasswordReveal() { private fun setupPasswordReveal() {
passwordShown = false passwordShown = false

View File

@ -29,6 +29,7 @@ import com.airbnb.mvrx.withState
import com.jakewharton.rxbinding3.widget.textChanges import com.jakewharton.rxbinding3.widget.textChanges
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.error.ErrorFormatter import im.vector.riotx.core.error.ErrorFormatter
import im.vector.riotx.core.extensions.hideKeyboard
import im.vector.riotx.core.utils.openUrlInExternalBrowser import im.vector.riotx.core.utils.openUrlInExternalBrowser
import kotlinx.android.synthetic.main.fragment_login_server_url_form.* import kotlinx.android.synthetic.main.fragment_login_server_url_form.*
import javax.inject.Inject import javax.inject.Inject
@ -88,7 +89,7 @@ class LoginServerUrlFormFragment @Inject constructor(
} }
@OnClick(R.id.loginServerUrlFormLearnMore) @OnClick(R.id.loginServerUrlFormLearnMore)
fun learMore() { fun learnMore() {
openUrlInExternalBrowser(requireActivity(), MODULAR_LINK) openUrlInExternalBrowser(requireActivity(), MODULAR_LINK)
} }
@ -99,6 +100,8 @@ class LoginServerUrlFormFragment @Inject constructor(
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@OnClick(R.id.loginServerUrlFormSubmit) @OnClick(R.id.loginServerUrlFormSubmit)
fun submit() { fun submit() {
cleanupUi()
// Static check of homeserver url, empty, malformed, etc. // Static check of homeserver url, empty, malformed, etc.
var serverUrl = loginServerUrlFormHomeServerUrl.text.toString() 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) { override fun onRegistrationError(throwable: Throwable) {
// Cannot happen here, but just in case // Cannot happen here, but just in case
AlertDialog.Builder(requireActivity()) AlertDialog.Builder(requireActivity())

View File

@ -93,13 +93,6 @@ class LoginTermsFragment @Inject constructor(
?.takeIf { it.isNotBlank() } ?.takeIf { it.isNotBlank() }
?.let { ?.let {
openUrlInExternalBrowser(requireContext(), it) 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)
} }
} }