Set the reason for screen-off before usage.
An occasional call sequence through updateLightsLocked ended up storing
the old screen-off reason rather than the current screen-off reason.
This caused the Keyguard screen to be bypassed when turning back on. By
saving the power-off reason in mScreenOffReason prior to calling
updateLightsLocked we eliminate this problem.
The offending calling sequence was:
PowerManagerService.setPowerState(..., reason) => updateLightsLocked
=> animateTo => screenOffFinishedAminatingLocked(mScreenOffReason)
=> sendNotificationLocked.
Change-Id: I8ee0b3226f94af7ff7e7b7b0bf54e47fd0c03631
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 63418db..52a4110 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -1858,6 +1858,7 @@
} else {
// Update the lights *before* taking care of turning the
// screen off, so we can initiate any animations that are desired.
+ mScreenOffReason = reason;
if (stateChanged) {
updateLightsLocked(newState, 0);
}
@@ -1876,7 +1877,6 @@
Binder.restoreCallingIdentity(identity);
}
mPowerState &= ~SCREEN_ON_BIT;
- mScreenOffReason = reason;
if (!mScreenBrightnessAnimator.isAnimating()) {
err = screenOffFinishedAnimatingLocked(reason);
} else {