Bug 1814187 - Refactor code to toggle the save button when needed

fenix/116.0
gitstart 2 years ago committed by mergify[bot]
parent 987cc817af
commit ca010578b3

@ -21,6 +21,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import com.google.android.material.textfield.TextInputLayout
import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.service.glean.private.NoExtras import mozilla.components.service.glean.private.NoExtras
import mozilla.components.support.ktx.android.view.hideKeyboard import mozilla.components.support.ktx.android.view.hideKeyboard
@ -155,6 +156,24 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login), MenuProvider {
binding.usernameText.addTextChangedListener( binding.usernameText.addTextChangedListener(
object : TextWatcher { object : TextWatcher {
override fun afterTextChanged(u: Editable?) { override fun afterTextChanged(u: Editable?) {
when {
u.toString().isEmpty() -> {
validUsername = false
binding.clearUsernameTextButton.isVisible = false
setLayoutError(
context?.getString(R.string.saved_login_username_required),
binding.inputLayoutUsername,
)
}
else -> {
validUsername = true
binding.inputLayoutUsername.error = null
binding.inputLayoutUsername.errorIconDrawable = null
binding.inputLayoutUsername.isVisible = true
binding.clearUsernameTextButton.isVisible = true
}
}
updateUsernameField() updateUsernameField()
findDuplicate() findDuplicate()
setSaveButtonState() setSaveButtonState()
@ -180,10 +199,14 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login), MenuProvider {
override fun afterTextChanged(p: Editable?) { override fun afterTextChanged(p: Editable?) {
when { when {
p.toString().isEmpty() -> { p.toString().isEmpty() -> {
validPassword = false
passwordChanged = true passwordChanged = true
binding.revealPasswordButton.isVisible = false binding.revealPasswordButton.isVisible = false
binding.clearPasswordTextButton.isVisible = false binding.clearPasswordTextButton.isVisible = false
setPasswordError() setLayoutError(
context?.getString(R.string.saved_login_password_required),
binding.inputLayoutPassword,
)
} }
p.toString() == oldLogin.password -> { p.toString() == oldLogin.password -> {
passwordChanged = false passwordChanged = false
@ -239,10 +262,6 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login), MenuProvider {
// existing login was already a dupe and the username hasn't // existing login was already a dupe and the username hasn't
// changed // changed
usernameChanged = oldLogin.username != currentValue usernameChanged = oldLogin.username != currentValue
validUsername = true
layout.error = null
layout.errorIconDrawable = null
clearButton.isVisible = true
} }
else -> { else -> {
// Invalid login because it's a dupe of another one // Invalid login because it's a dupe of another one
@ -265,10 +284,9 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login), MenuProvider {
setSaveButtonState() setSaveButtonState()
} }
private fun setPasswordError() { private fun setLayoutError(error: String?, inputLayout: TextInputLayout) {
binding.inputLayoutPassword.let { layout -> inputLayout.let { layout ->
validPassword = false layout.error = error
layout.error = context?.getString(R.string.saved_login_password_required)
layout.setErrorIconDrawable(R.drawable.mozac_ic_warning_with_bottom_padding) layout.setErrorIconDrawable(R.drawable.mozac_ic_warning_with_bottom_padding)
layout.setErrorIconTintList( layout.setErrorIconTintList(
ColorStateList.valueOf( ColorStateList.valueOf(
@ -286,7 +304,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login), MenuProvider {
inflater.inflate(R.menu.login_save, menu) inflater.inflate(R.menu.login_save, menu)
} }
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareMenu(menu: Menu) {
val saveButton = menu.findItem(R.id.save_login_button) val saveButton = menu.findItem(R.id.save_login_button)
val changesMadeWithNoErrors = val changesMadeWithNoErrors =
validUsername && validPassword && (usernameChanged || passwordChanged) validUsername && validPassword && (usernameChanged || passwordChanged)

Loading…
Cancel
Save