diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index 0b6fd1300538..2087a165b215 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -216,15 +216,28 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback { // until the clock and the notifications are faded out. mStatusBarWindowManager.setForceDozeBrightness(true); } - if (!wasDeviceInteractive) { - if (DEBUG_BIO_WAKELOCK) { - Log.i(TAG, "bio wakelock: Authenticated, waking up..."); + // During wake and unlock, we need to draw black before waking up to avoid abrupt + // brightness changes due to display state transitions. + boolean alwaysOnEnabled = DozeParameters.getInstance(mContext).getAlwaysOn(); + boolean delayWakeUp = mode == MODE_WAKE_AND_UNLOCK && alwaysOnEnabled; + Runnable wakeUp = ()-> { + if (!wasDeviceInteractive) { + if (DEBUG_BIO_WAKELOCK) { + Log.i(TAG, "bio wakelock: Authenticated, waking up..."); + } + mPowerManager.wakeUp(SystemClock.uptimeMillis(), "android.policy:BIOMETRIC"); + } + if (delayWakeUp) { + mKeyguardViewMediator.onWakeAndUnlocking(); } - mPowerManager.wakeUp(SystemClock.uptimeMillis(), "android.policy:BIOMETRIC"); + Trace.beginSection("release wake-and-unlock"); + releaseBiometricWakeLock(); + Trace.endSection(); + }; + + if (!delayWakeUp) { + wakeUp.run(); } - Trace.beginSection("release wake-and-unlock"); - releaseBiometricWakeLock(); - Trace.endSection(); switch (mMode) { case MODE_DISMISS_BOUNCER: Trace.beginSection("MODE_DISMISS"); @@ -257,7 +270,11 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback { mUpdateMonitor.awakenFromDream(); } mStatusBarWindowManager.setStatusBarFocusable(false); - mKeyguardViewMediator.onWakeAndUnlocking(); + if (delayWakeUp) { + mHandler.postDelayed(wakeUp, 50); + } else { + mKeyguardViewMediator.onWakeAndUnlocking(); + } if (mStatusBar.getNavigationBarView() != null) { mStatusBar.getNavigationBarView().setWakeAndUnlocking(true); } |