summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Dupin <dupin@google.com>2018-07-02 11:17:14 -0700
committerLucas Dupin <dupin@google.com>2018-07-03 18:41:01 -0700
commite63abf76782b1856c8f67ced10366900313bd923 (patch)
tree08132871eb42ec07ae2bca7c14c54bd8d4b39d56
parent843e54f9031b26486569c045b5fef3dd78d4f1fb (diff)
Delay brightness change
During a fingerprint wake-up, the display state changes bumping up the display brightness. This means that the screen will flash bright if the scrims couldn't draw and blank the screen yet. The fix updates the state of the keyguard, waits for the frame to be pushed to the display (can take up to 2 frames since we're using triple buffers), when then asks PowerManager to wake-up the device. Fixes: 80415238 Test: fp unlock with AOD on and off on devices with displays from multiple vendors Change-Id: I752f9bd5ffd754166ffee7dc15960909dd3f1a81
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java33
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);
}