diff options
author | Jeff Brown <jeffbrown@google.com> | 2012-10-03 14:57:03 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2012-10-03 14:57:03 -0700 |
commit | 645832dd2ba63d5328cf934ceaa0ec6339573558 (patch) | |
tree | 73d615d7a920795fc850e5cb2750c08cf5d740f0 /services | |
parent | 8bd206b54872d7b77110562ed535b6d1c72a1ca9 (diff) | |
download | frameworks_base-645832dd2ba63d5328cf934ceaa0ec6339573558.zip frameworks_base-645832dd2ba63d5328cf934ceaa0ec6339573558.tar.gz frameworks_base-645832dd2ba63d5328cf934ceaa0ec6339573558.tar.bz2 |
Ensure dreams can be started when not powered.
Previously dreams could not be started unless plugged in.
Now we allow them to start but they will eventually stop
if a user activity timeout occurs and no screen wakelocks
are held.
Bug: 7253639
Change-Id: I84703e144ca6d4aba1ef9437f04a201c3dde8a49
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/power/PowerManagerService.java | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java index d1c24eb..c91fa3c 100644 --- a/services/java/com/android/server/power/PowerManagerService.java +++ b/services/java/com/android/server/power/PowerManagerService.java @@ -1282,15 +1282,25 @@ public final class PowerManagerService extends IPowerManager.Stub return changed; } - // Also used when exiting a dream to determine whether we should go back - // to being fully awake or else go to sleep for good. + /** + * Returns true if the device should go to sleep now. + * Also used when exiting a dream to determine whether we should go back + * to being fully awake or else go to sleep for good. + */ private boolean isItBedTimeYetLocked() { - return mBootCompleted && !mStayOn - && (mWakeLockSummary - & (WAKE_LOCK_SCREEN_BRIGHT | WAKE_LOCK_SCREEN_DIM - | WAKE_LOCK_PROXIMITY_SCREEN_OFF)) == 0 - && (mUserActivitySummary - & (USER_ACTIVITY_SCREEN_BRIGHT | USER_ACTIVITY_SCREEN_DIM)) == 0; + return mBootCompleted && !isScreenBeingKeptOnLocked(); + } + + /** + * Returns true if the screen is being kept on by a wake lock, user activity + * or the stay on while powered setting. + */ + private boolean isScreenBeingKeptOnLocked() { + return mStayOn + || (mWakeLockSummary & (WAKE_LOCK_SCREEN_BRIGHT | WAKE_LOCK_SCREEN_DIM + | WAKE_LOCK_PROXIMITY_SCREEN_OFF)) != 0 + || (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT + | USER_ACTIVITY_SCREEN_DIM)) != 0; } /** @@ -1298,6 +1308,9 @@ public final class PowerManagerService extends IPowerManager.Stub */ private void updateDreamLocked(int dirty) { if ((dirty & (DIRTY_WAKEFULNESS + | DIRTY_USER_ACTIVITY + | DIRTY_WAKE_LOCKS + | DIRTY_BOOT_COMPLETED | DIRTY_SETTINGS | DIRTY_IS_POWERED | DIRTY_STAY_ON @@ -1380,15 +1393,15 @@ public final class PowerManagerService extends IPowerManager.Stub } /** - * Returns true if the device is allowed to dream in its current state, - * assuming that there was either an explicit request to nap or the user activity - * timeout expired and no wake locks are held. + * Returns true if the device is allowed to dream in its current state + * assuming that it is currently napping or dreaming. */ private boolean canDreamLocked() { - return mIsPowered - && mDreamsSupportedConfig + return mDreamsSupportedConfig && mDreamsEnabledSetting - && mDisplayPowerRequest.screenState != DisplayPowerRequest.SCREEN_STATE_OFF; + && mDisplayPowerRequest.screenState != DisplayPowerRequest.SCREEN_STATE_OFF + && mBootCompleted + && (mIsPowered || isScreenBeingKeptOnLocked()); } /** |