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 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(

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.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("+")) {

View file

@ -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

View file

@ -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())

View file

@ -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)
}
}