diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java index 6ae16a481dcd9..4192a9349f407 100644 --- a/services/java/com/android/server/BatteryService.java +++ b/services/java/com/android/server/BatteryService.java @@ -204,6 +204,11 @@ public class BatteryService extends Binder { return mBatteryLevel; } + // true if battery level is below the first warning threshold + public final boolean isBatteryLow() { + return mBatteryPresent && mBatteryLevel <= mLowBatteryWarningLevel; + } + void systemReady() { // check our power situation now that it is safe to display the shutdown dialog. shutdownIfNoPower(); diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java index a5cb55a733743..9f2b247d31061 100644 --- a/services/java/com/android/server/power/PowerManagerService.java +++ b/services/java/com/android/server/power/PowerManagerService.java @@ -1137,7 +1137,7 @@ public final class PowerManagerService extends IPowerManager.Stub */ private void updateDreamLocked(int dirty) { if ((dirty & (DIRTY_WAKEFULNESS | DIRTY_SETTINGS - | DIRTY_IS_POWERED | DIRTY_STAY_ON)) != 0) { + | DIRTY_IS_POWERED | DIRTY_STAY_ON | DIRTY_BATTERY_STATE)) != 0) { scheduleSandmanLocked(); } } @@ -1163,13 +1163,13 @@ public final class PowerManagerService extends IPowerManager.Stub boolean startDreaming = false; synchronized (mLock) { mSandmanScheduled = false; - + boolean canDream = canDreamLocked(); if (DEBUG_SPEW) { - Log.d(TAG, "handleSandman: canDream=" + canDreamLocked() + Log.d(TAG, "handleSandman: canDream=" + canDream + ", mWakefulness=" + wakefulnessToString(mWakefulness)); } - if (canDreamLocked() && mWakefulness == WAKEFULNESS_NAPPING) { + if (canDream && mWakefulness == WAKEFULNESS_NAPPING) { startDreaming = true; } } @@ -1253,8 +1253,11 @@ public final class PowerManagerService extends IPowerManager.Stub * assuming there has been no recent user activity and no wake locks are held. */ private boolean canDreamLocked() { - return mIsPowered && mDreamsSupportedConfig - && mDreamsEnabledSetting && mDreamsActivateOnSleepSetting; + return mIsPowered + && mDreamsSupportedConfig + && mDreamsEnabledSetting + && mDreamsActivateOnSleepSetting + && !mBatteryService.isBatteryLow(); } /**