From a3be470b45a725e745861eb04202b09e73f1b98a Mon Sep 17 00:00:00 2001 From: cketti Date: Fri, 9 Sep 2022 22:03:13 +0200 Subject: [PATCH] Allow unmasking when the original password was removed/replaced --- .../base/extensions/TextInputLayoutExtensions.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/ui/base/src/main/java/com/fsck/k9/ui/base/extensions/TextInputLayoutExtensions.kt b/app/ui/base/src/main/java/com/fsck/k9/ui/base/extensions/TextInputLayoutExtensions.kt index ae0ff3a3de..8adf315e29 100644 --- a/app/ui/base/src/main/java/com/fsck/k9/ui/base/extensions/TextInputLayoutExtensions.kt +++ b/app/ui/base/src/main/java/com/fsck/k9/ui/base/extensions/TextInputLayoutExtensions.kt @@ -12,6 +12,7 @@ import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK import androidx.biometric.BiometricManager.Authenticators.DEVICE_CREDENTIAL import androidx.biometric.BiometricPrompt import androidx.core.content.ContextCompat +import androidx.core.widget.doOnTextChanged import androidx.fragment.app.FragmentActivity import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner @@ -69,9 +70,16 @@ fun TextInputLayout.configureAuthenticatedPasswordToggle( val editText = this.editText ?: error("TextInputLayout.editText == null") + editText.doOnTextChanged { text, _, before, count -> + // Check if the password field is empty or if all of the previous text was replaced + if (text != null && before > 0 && (text.isEmpty() || text.length - count == 0)) { + viewModel.isNewPassword = true + } + } + setEndIconOnClickListener { if (editText.isPasswordHidden) { - if (viewModel.isAuthenticated) { + if (viewModel.isShowPasswordAllowed) { activity.setSecure(true) editText.showPassword() } else { @@ -102,6 +110,10 @@ private fun FragmentActivity.setSecure(secure: Boolean) { @SuppressLint("StaticFieldLeak") class AuthenticatedPasswordToggleViewModel : ViewModel() { + val isShowPasswordAllowed: Boolean + get() = isAuthenticated || isNewPassword + + var isNewPassword = false var isAuthenticated = false var textInputLayout: TextInputLayout? = null var activity: FragmentActivity? = null -- GitLab