summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/power/DisplayPowerController.java
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-10-04 13:16:19 -0700
committerJeff Brown <jeffbrown@google.com>2012-10-05 14:39:23 -0700
commitc38c9be031ddad5cf551b55458889f11e01dc5b2 (patch)
tree12902e6c1bf90145600bebe0aaa847cd243025f6 /services/java/com/android/server/power/DisplayPowerController.java
parentb29088540b2ecb3046277fbeb5ee1c87abe74d95 (diff)
Coordinate screen on with the window manager.
Bug: 7267457 Change-Id: Ic2c322253639e1f0b2e4e72a7b145025d0240f93
Diffstat (limited to 'services/java/com/android/server/power/DisplayPowerController.java')
-rw-r--r--services/java/com/android/server/power/DisplayPowerController.java54
1 files changed, 41 insertions, 13 deletions
diff --git a/services/java/com/android/server/power/DisplayPowerController.java b/services/java/com/android/server/power/DisplayPowerController.java
index b9f9df7b9b8e..23df7011a766 100644
--- a/services/java/com/android/server/power/DisplayPowerController.java
+++ b/services/java/com/android/server/power/DisplayPowerController.java
@@ -531,6 +531,7 @@ final class DisplayPowerController {
final boolean mustNotify;
boolean mustInitialize = false;
boolean updateAutoBrightness = mTwilightChanged;
+ boolean screenOnWasBlocked = false;
mTwilightChanged = false;
synchronized (mLock) {
@@ -588,7 +589,6 @@ final class DisplayPowerController {
if (mScreenOffBecauseOfProximity
&& mProximity != PROXIMITY_POSITIVE) {
mScreenOffBecauseOfProximity = false;
- setScreenOn(true);
sendOnProximityNegative();
}
} else {
@@ -639,20 +639,43 @@ final class DisplayPowerController {
// It is relatively short but if we cancel it and switch to the
// on animation immediately then the results are pretty ugly.
if (!mElectronBeamOffAnimator.isStarted()) {
- setScreenOn(true);
- if (USE_ELECTRON_BEAM_ON_ANIMATION) {
- if (!mElectronBeamOnAnimator.isStarted()) {
- if (mPowerState.getElectronBeamLevel() == 1.0f) {
- mPowerState.dismissElectronBeam();
- } else if (mPowerState.prepareElectronBeam(true)) {
- mElectronBeamOnAnimator.start();
- } else {
- mElectronBeamOnAnimator.end();
- }
+ if (mPowerRequest.blockScreenOn && !mPowerState.isScreenOn()) {
+ if (DEBUG) {
+ Slog.d(TAG, "Blocked screen on while screen currently off.");
}
+ screenOnWasBlocked = true;
} else {
- mPowerState.setElectronBeamLevel(1.0f);
- mPowerState.dismissElectronBeam();
+ setScreenOn(true);
+ if (USE_ELECTRON_BEAM_ON_ANIMATION) {
+ if (!mElectronBeamOnAnimator.isStarted()) {
+ if (mPowerState.getElectronBeamLevel() == 1.0f) {
+ mPowerState.dismissElectronBeam();
+ } else if (mPowerState.prepareElectronBeam(true)) {
+ mElectronBeamOnAnimator.start();
+ } else {
+ mElectronBeamOnAnimator.end();
+ }
+ }
+ } else {
+ mPowerState.setElectronBeamLevel(1.0f);
+ mPowerState.dismissElectronBeam();
+ }
+ }
+ } else {
+ // FIXME: If the electron beam off animation is playing then we have a bit
+ // of a problem. The window manager policy would only have requested
+ // to block screen on if it was about to start preparing the keyguard.
+ // It's already too late to do anything about that. Ideally we would
+ // let the animation play out first but that would require making
+ // some pretty deep changes to the power manager and we don't have
+ // time just now. For now, short-circuit the animation and get ready.
+ if (mPowerRequest.blockScreenOn) {
+ if (DEBUG) {
+ Slog.d(TAG, "Blocked screen on while screen off animation running.");
+ }
+ screenOnWasBlocked = true;
+ setScreenOn(false);
+ mElectronBeamOffAnimator.end();
}
}
} else {
@@ -677,12 +700,17 @@ final class DisplayPowerController {
// We mostly care about the screen state here, ignoring brightness changes
// which will be handled asynchronously.
if (mustNotify
+ && !screenOnWasBlocked
&& !mElectronBeamOnAnimator.isStarted()
&& !mElectronBeamOffAnimator.isStarted()
&& mPowerState.waitUntilClean(mCleanListener)) {
synchronized (mLock) {
if (!mPendingRequestChangedLocked) {
mDisplayReadyLocked = true;
+
+ if (DEBUG) {
+ Slog.d(TAG, "Display ready!");
+ }
}
}
sendOnStateChanged();