Wake device when Keyguard invisible and getting fingerprint
Also fixes a bug where we didn't listen for fingerprint after
rebooting the device.
Bug: 22644634
Bug: 23046263
Change-Id: Ide85a01d9d4cfcc880fbc29ca4f3cc6eef47da2d
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 55d85206..0ee68fd 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -118,7 +118,13 @@
* Mode in which we wake up the device, but play the normal dismiss animation. Active when we
* acquire a fingerprint pulsing in doze mode.
* */
- private static final int FP_WAKE_WAKE_TO_BOUNCER = 2;
+ private static final int FP_WAKE_TO_BOUNCER = 2;
+
+ /**
+ * Mode in which we only wake up the device, and keyguard was not showing when we acquired a
+ * fingerprint.
+ * */
+ private static final int FP_ONLY_WAKE = 3;
// Callback messages
private static final int MSG_TIME_UPDATE = 301;
@@ -401,14 +407,14 @@
mWakeLock = mPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, FINGERPRINT_WAKE_LOCK_NAME);
mWakeLock.acquire();
- mFpWakeMode = FP_WAKE_DIRECT_UNLOCK;
+ mFpWakeMode = mKeyguardIsVisible ? FP_WAKE_DIRECT_UNLOCK : FP_ONLY_WAKE;
if (DEBUG_FP_WAKELOCK) {
Log.i(TAG, "fingerprint acquired, grabbing fp wakelock");
}
mHandler.postDelayed(mReleaseFingerprintWakeLockRunnable,
FINGERPRINT_WAKELOCK_TIMEOUT_MS);
} else if (!mDeviceInteractive) {
- mFpWakeMode = FP_WAKE_WAKE_TO_BOUNCER;
+ mFpWakeMode = FP_WAKE_TO_BOUNCER;
} else {
mFpWakeMode = FP_WAKE_NONE;
}
@@ -436,7 +442,8 @@
}
private void handleFingerprintAuthenticated() {
- if (mFpWakeMode == FP_WAKE_WAKE_TO_BOUNCER || mFpWakeMode == FP_WAKE_DIRECT_UNLOCK) {
+ if (mFpWakeMode == FP_WAKE_TO_BOUNCER || mFpWakeMode == FP_WAKE_DIRECT_UNLOCK
+ || mFpWakeMode == FP_ONLY_WAKE) {
if (DEBUG_FP_WAKELOCK) {
Log.i(TAG, "fp wakelock: Authenticated, waking up...");
}
@@ -942,9 +949,7 @@
}
private boolean shouldListenForFingerprint() {
- return mKeyguardIsVisible && !mSwitchingUser &&
- mTrustManager.hasUserAuthenticatedSinceBoot(
- ActivityManager.getCurrentUser());
+ return (mKeyguardIsVisible || !mDeviceInteractive) && !mSwitchingUser;
}
private void startListeningForFingerprint() {