diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java | 22 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt | 18 |
2 files changed, 36 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java index fd47e39534a7..f23bb0ae11f6 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java @@ -38,12 +38,15 @@ public class KeyguardPinViewController private LockPatternUtils mLockPatternUtils; private final FeatureFlags mFeatureFlags; private static final int DEFAULT_PIN_LENGTH = 6; + private static final int MIN_FAILED_PIN_ATTEMPTS = 5; private NumPadButton mBackspaceKey; private View mOkButton = mView.findViewById(R.id.key_enter); private int mUserId; private long mPinLength; + private int mPasswordFailedAttempts; + protected KeyguardPinViewController(KeyguardPINView view, KeyguardUpdateMonitor keyguardUpdateMonitor, SecurityMode securityMode, LockPatternUtils lockPatternUtils, @@ -82,8 +85,10 @@ public class KeyguardPinViewController protected void onUserInput() { super.onUserInput(); if (isAutoConfirmation()) { + updateOKButtonVisibility(); updateBackSpaceVisibility(); - if (mPasswordEntry.getText().length() == mPinLength) { + if (mPasswordEntry.getText().length() == mPinLength + && mOkButton.getVisibility() == View.INVISIBLE) { verifyPasswordAndUnlock(); } } @@ -101,7 +106,7 @@ public class KeyguardPinViewController mUserId = KeyguardUpdateMonitor.getCurrentUser(); mPinLength = mLockPatternUtils.getPinLength(mUserId); mBackspaceKey.setTransparentMode(/* isTransparentMode= */ isAutoConfirmation()); - mOkButton.setVisibility(isAutoConfirmation() ? View.INVISIBLE : View.VISIBLE); + updateOKButtonVisibility(); updateBackSpaceVisibility(); mPasswordEntry.setUsePinShapes(true); mPasswordEntry.setIsPinHinting(isAutoConfirmation() && isPinHinting()); @@ -115,7 +120,18 @@ public class KeyguardPinViewController mKeyguardUpdateMonitor.needsSlowUnlockTransition(), finishRunnable); } - // + + /** + * Updates the visibility of the OK button for auto confirm feature + */ + private void updateOKButtonVisibility() { + mPasswordFailedAttempts = mLockPatternUtils.getCurrentFailedPasswordAttempts(mUserId); + if (isAutoConfirmation() && mPasswordFailedAttempts < MIN_FAILED_PIN_ATTEMPTS) { + mOkButton.setVisibility(View.INVISIBLE); + } else { + mOkButton.setVisibility(View.VISIBLE); + } + } /** * Updates the visibility and the enabled state of the backspace. diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt index a1af8e8fac9c..70476aa088dc 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt @@ -129,10 +129,11 @@ class KeyguardPinViewControllerTest : SysuiTestCase() { } @Test - fun startAppearAnimation_withAutoPinConfirmation() { + fun startAppearAnimation_withAutoPinConfirmationFailedPasswordAttemptsLessThan5() { `when`(featureFlags.isEnabled(Flags.AUTO_PIN_CONFIRMATION)).thenReturn(true) `when`(lockPatternUtils.getPinLength(anyInt())).thenReturn(6) `when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true) + `when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(3) `when`(passwordTextView.text).thenReturn("") pinViewController.startAppearAnimation() @@ -141,4 +142,19 @@ class KeyguardPinViewControllerTest : SysuiTestCase() { verify(passwordTextView).setUsePinShapes(true) verify(passwordTextView).setIsPinHinting(true) } + + @Test + fun startAppearAnimation_withAutoPinConfirmationFailedPasswordAttemptsMoreThan5() { + `when`(featureFlags.isEnabled(Flags.AUTO_PIN_CONFIRMATION)).thenReturn(true) + `when`(lockPatternUtils.getPinLength(anyInt())).thenReturn(6) + `when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true) + `when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(6) + `when`(passwordTextView.text).thenReturn("") + + pinViewController.startAppearAnimation() + verify(deleteButton).visibility = View.INVISIBLE + verify(enterButton).visibility = View.VISIBLE + verify(passwordTextView).setUsePinShapes(true) + verify(passwordTextView).setIsPinHinting(true) + } } |