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
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 @@
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 @@
*/
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 @@
}
/**
- * 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());
}
/**