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