Merge "Making OK button re-appear after 5 failed attempts of entering the PIN" into udc-dev am: d2f7183990

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22246804

Change-Id: If1d53b3f1aca199b2dee3a2d593fce156e032f67
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2023-03-27 16:34:01 +00:00
committed by Automerger Merge Worker
2 changed files with 36 additions and 4 deletions

View File

@@ -38,12 +38,15 @@ public class KeyguardPinViewController
private LockPatternUtils mLockPatternUtils; private LockPatternUtils mLockPatternUtils;
private final FeatureFlags mFeatureFlags; private final FeatureFlags mFeatureFlags;
private static final int DEFAULT_PIN_LENGTH = 6; private static final int DEFAULT_PIN_LENGTH = 6;
private static final int MIN_FAILED_PIN_ATTEMPTS = 5;
private NumPadButton mBackspaceKey; private NumPadButton mBackspaceKey;
private View mOkButton = mView.findViewById(R.id.key_enter); private View mOkButton = mView.findViewById(R.id.key_enter);
private int mUserId; private int mUserId;
private long mPinLength; private long mPinLength;
private int mPasswordFailedAttempts;
protected KeyguardPinViewController(KeyguardPINView view, protected KeyguardPinViewController(KeyguardPINView view,
KeyguardUpdateMonitor keyguardUpdateMonitor, KeyguardUpdateMonitor keyguardUpdateMonitor,
SecurityMode securityMode, LockPatternUtils lockPatternUtils, SecurityMode securityMode, LockPatternUtils lockPatternUtils,
@@ -82,8 +85,10 @@ public class KeyguardPinViewController
protected void onUserInput() { protected void onUserInput() {
super.onUserInput(); super.onUserInput();
if (isAutoConfirmation()) { if (isAutoConfirmation()) {
updateOKButtonVisibility();
updateBackSpaceVisibility(); updateBackSpaceVisibility();
if (mPasswordEntry.getText().length() == mPinLength) { if (mPasswordEntry.getText().length() == mPinLength
&& mOkButton.getVisibility() == View.INVISIBLE) {
verifyPasswordAndUnlock(); verifyPasswordAndUnlock();
} }
} }
@@ -101,7 +106,7 @@ public class KeyguardPinViewController
mUserId = KeyguardUpdateMonitor.getCurrentUser(); mUserId = KeyguardUpdateMonitor.getCurrentUser();
mPinLength = mLockPatternUtils.getPinLength(mUserId); mPinLength = mLockPatternUtils.getPinLength(mUserId);
mBackspaceKey.setTransparentMode(/* isTransparentMode= */ isAutoConfirmation()); mBackspaceKey.setTransparentMode(/* isTransparentMode= */ isAutoConfirmation());
mOkButton.setVisibility(isAutoConfirmation() ? View.INVISIBLE : View.VISIBLE); updateOKButtonVisibility();
updateBackSpaceVisibility(); updateBackSpaceVisibility();
mPasswordEntry.setUsePinShapes(true); mPasswordEntry.setUsePinShapes(true);
mPasswordEntry.setIsPinHinting(isAutoConfirmation() && isPinHinting()); mPasswordEntry.setIsPinHinting(isAutoConfirmation() && isPinHinting());
@@ -115,7 +120,18 @@ public class KeyguardPinViewController
mKeyguardUpdateMonitor.needsSlowUnlockTransition(), finishRunnable); 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. * Updates the visibility and the enabled state of the backspace.

View File

@@ -129,10 +129,11 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
} }
@Test @Test
fun startAppearAnimation_withAutoPinConfirmation() { fun startAppearAnimation_withAutoPinConfirmationFailedPasswordAttemptsLessThan5() {
`when`(featureFlags.isEnabled(Flags.AUTO_PIN_CONFIRMATION)).thenReturn(true) `when`(featureFlags.isEnabled(Flags.AUTO_PIN_CONFIRMATION)).thenReturn(true)
`when`(lockPatternUtils.getPinLength(anyInt())).thenReturn(6) `when`(lockPatternUtils.getPinLength(anyInt())).thenReturn(6)
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true) `when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(3)
`when`(passwordTextView.text).thenReturn("") `when`(passwordTextView.text).thenReturn("")
pinViewController.startAppearAnimation() pinViewController.startAppearAnimation()
@@ -141,4 +142,19 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
verify(passwordTextView).setUsePinShapes(true) verify(passwordTextView).setUsePinShapes(true)
verify(passwordTextView).setIsPinHinting(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)
}
} }