From 5be868c590257f6cdccc19770051bf54552216df Mon Sep 17 00:00:00 2001 From: Hidenari Koshimae Date: Thu, 21 Aug 2014 11:27:33 +0200 Subject: [PATCH] Improve "Try again in 1 seconds" behavior in lockscreen When user fails an authentification in lockscreen many times, "Try again in 30 seconds." is displayed and a 30 seconds timer starts to count backwards. This lets "Try again in 1 seconds" to be displayed for one second. Bug: 31078006 Change-Id: I6c7de2b751582bb06a93e583b710f83201da1728 --- .../com/android/keyguard/KeyguardAbsKeyInputView.java | 11 +++++++++-- .../src/com/android/keyguard/KeyguardPatternView.java | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index 94286ec6a7853..5aa673b401248 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -44,6 +44,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout protected View mEcaView; protected boolean mEnableHaptics; private boolean mDismissing; + private CountDownTimer mCountdownTimer = null; // 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. @@ -215,11 +216,13 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout protected void handleAttemptLockout(long elapsedRealtimeDeadline) { setPasswordEntryEnabled(false); long elapsedRealtime = SystemClock.elapsedRealtime(); - new CountDownTimer(elapsedRealtimeDeadline - elapsedRealtime, 1000) { + long secondsInFuture = (long) Math.ceil( + (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0); + mCountdownTimer = new CountDownTimer(secondsInFuture * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { - int secondsRemaining = (int) (millisUntilFinished / 1000); + int secondsRemaining = (int) Math.round(millisUntilFinished / 1000.0); mSecurityMessageDisplay.formatMessage( R.string.kg_too_many_failed_attempts_countdown, secondsRemaining); } @@ -252,6 +255,10 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout @Override public void onPause() { + if (mCountdownTimer != null) { + mCountdownTimer.cancel(); + mCountdownTimer = null; + } if (mPendingLockCheck != null) { mPendingLockCheck.cancel(false); mPendingLockCheck = null; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java index 330632b701f15..c2b57ffa61137 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java @@ -325,12 +325,13 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit mLockPatternView.clearPattern(); mLockPatternView.setEnabled(false); final long elapsedRealtime = SystemClock.elapsedRealtime(); - - mCountdownTimer = new CountDownTimer(elapsedRealtimeDeadline - elapsedRealtime, 1000) { + final long secondsInFuture = (long) Math.ceil( + (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0); + mCountdownTimer = new CountDownTimer(secondsInFuture * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { - final int secondsRemaining = (int) (millisUntilFinished / 1000); + final int secondsRemaining = (int) Math.round(millisUntilFinished / 1000.0); mSecurityMessageDisplay.formatMessage( R.string.kg_too_many_failed_attempts_countdown, secondsRemaining); }