summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andres Morales <anmorales@google.com> 2015-09-08 13:17:37 -0700
committer Andres Morales <anmorales@google.com> 2015-09-09 15:45:31 -0700
commita4e23375663ac3a2b6115da71e6711282f03492d (patch)
treeb0437d763fa5975fa9444b570f522afae2e3e92d
parent5bba07eb01d923beea173712295d6b10c9762400 (diff)
reset lockout deadline on device reboot
Gatekeeper retains lockouts after reboot, but framework doesn't. This causes odd behavior on a reboot after a lockout as gatekeeper refuses to check the password and the framework thinks it's an invalid attempt. Reset the lockout deadline if we notice the clock reset in the framework. Bug: 23681267 Change-Id: I3127ccd8f205494af5a8ed2b44d4370c37cc2f8f
-rw-r--r--core/java/com/android/internal/widget/LockPatternUtils.java14
1 files changed, 12 insertions, 2 deletions
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 86d11be78b0a..61ba4edd6650 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -1067,12 +1067,22 @@ public class LockPatternUtils {
* enter a pattern.
*/
public long getLockoutAttemptDeadline(int userId) {
- final long deadline = getLong(LOCKOUT_ATTEMPT_DEADLINE, 0L, userId);
+ long deadline = getLong(LOCKOUT_ATTEMPT_DEADLINE, 0L, userId);
final long timeoutMs = getLong(LOCKOUT_ATTEMPT_TIMEOUT_MS, 0L, userId);
final long now = SystemClock.elapsedRealtime();
- if (deadline < now || deadline > (now + timeoutMs)) {
+ if (deadline < now) {
+ // timeout expired
+ setLong(LOCKOUT_ATTEMPT_DEADLINE, 0, userId);
+ setLong(LOCKOUT_ATTEMPT_TIMEOUT_MS, 0, userId);
return 0L;
}
+
+ if (deadline > (now + timeoutMs)) {
+ // device was rebooted, set new deadline
+ deadline = now + timeoutMs;
+ setLong(LOCKOUT_ATTEMPT_DEADLINE, deadline, userId);
+ }
+
return deadline;
}