Don't check the keyguard PIN a second time
If you tap the enter key twice on the keyguard PIN entry screen, the second tap can sometimes register because keyguard hasn't been dismissed yet. The fix is to ignore a second attempt after the PIN has already been verified. Fixes bug 19216025 Change-Id: I73a004e91e43f3da65ec84f90de6943e717d737f
This commit is contained in:
@@ -40,6 +40,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout
|
||||
protected SecurityMessageDisplay mSecurityMessageDisplay;
|
||||
protected View mEcaView;
|
||||
protected boolean mEnableHaptics;
|
||||
private boolean mDismissing;
|
||||
|
||||
// To avoid accidental lockout due to events while the device in in the pocket, ignore
|
||||
// any passwords with length less than or equal to this length.
|
||||
@@ -67,6 +68,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout
|
||||
@Override
|
||||
public void reset() {
|
||||
// start fresh
|
||||
mDismissing = false;
|
||||
resetPasswordText(false /* animate */);
|
||||
// if the user is currently locked out, enforce it.
|
||||
long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
|
||||
@@ -113,6 +115,8 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout
|
||||
}
|
||||
|
||||
protected void verifyPasswordAndUnlock() {
|
||||
if (mDismissing) return; // already verified but haven't been dismissed; don't do it again.
|
||||
|
||||
final String entry = getPasswordText();
|
||||
setPasswordEntryInputEnabled(false);
|
||||
if (mPendingLockCheck != null) {
|
||||
@@ -143,6 +147,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout
|
||||
|
||||
private void onPasswordChecked(boolean matched, int timeoutMs, boolean isValidPassword) {
|
||||
if (matched) {
|
||||
mDismissing = true;
|
||||
mCallback.reportUnlockAttempt(true, 0);
|
||||
mCallback.dismiss(true);
|
||||
} else {
|
||||
|
||||
@@ -62,6 +62,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
|
||||
return mPasswordEntry.requestFocus(direction, previouslyFocusedRect);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void resetState() {
|
||||
mPasswordEntry.setEnabled(true);
|
||||
}
|
||||
@@ -69,11 +70,13 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
|
||||
@Override
|
||||
protected void setPasswordEntryEnabled(boolean enabled) {
|
||||
mPasswordEntry.setEnabled(enabled);
|
||||
mOkButton.setEnabled(enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setPasswordEntryInputEnabled(boolean enabled) {
|
||||
mPasswordEntry.setEnabled(enabled);
|
||||
mOkButton.setEnabled(enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -186,6 +189,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
|
||||
mDeleteButton = findViewById(R.id.delete_button);
|
||||
mDeleteButton.setVisibility(View.VISIBLE);
|
||||
mDeleteButton.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// check for time-based lockouts
|
||||
if (mPasswordEntry.isEnabled()) {
|
||||
@@ -195,6 +199,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
|
||||
}
|
||||
});
|
||||
mDeleteButton.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
// check for time-based lockouts
|
||||
if (mPasswordEntry.isEnabled()) {
|
||||
|
||||
Reference in New Issue
Block a user