From 73456acfb45beb7a95b5aee5a1f7566d3b803a86 Mon Sep 17 00:00:00 2001 From: Paul Lawrence Date: Fri, 16 May 2014 07:56:04 -0700 Subject: [PATCH] Improve power fail/reset On power fail/reset, an encrypted device will sit at the enter password screen indefinitely, chirping. This is designed to attract the attention of the user. However, it also flattens the battery, and the user who's attention is not drawn will discover a discharged phone the next morning. We have had many complaints about this. Keep current functionality, but power down after 10 minutes. It's a compromise, but seems reasonable. @bug 12582489 Change-Id: I895c0147bed978ecf6984af2c748f971dfa0d221 --- src/com/android/settings/CryptKeeper.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java index 1efe98f79b8..c4e3e668247 100644 --- a/src/com/android/settings/CryptKeeper.java +++ b/src/com/android/settings/CryptKeeper.java @@ -120,6 +120,8 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList private LockPatternView mLockPatternView; /** Number of calls to {@link #notifyUser()} to ignore before notifying. */ private int mNotificationCountdown = 0; + /** Number of calls to {@link #notifyUser()} before we release the wakelock */ + private int mReleaseWakeLockCountdown = 0; /** * Used to propagate state through configuration changes (e.g. screen rotation) @@ -287,6 +289,14 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList // Notify the user again in 5 seconds. mHandler.removeMessages(MESSAGE_NOTIFY); mHandler.sendEmptyMessageDelayed(MESSAGE_NOTIFY, 5 * 1000); + + if (mWakeLock.isHeld()) { + if (mReleaseWakeLockCountdown > 0) { + --mReleaseWakeLockCountdown; + } else { + mWakeLock.release(); + } + } } /** @@ -624,8 +634,12 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList if (pm != null) { mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG); mWakeLock.acquire(); + // Keep awake for 10 minutes - if the user hasn't been alerted by then + // best not to just drain their battery + mReleaseWakeLockCountdown = 96; // 96 * 5 + 120 = 600 } } + // Asynchronously throw up the IME, since there are issues with requesting it to be shown // immediately. if (mLockPatternView == null) {