diff options
| -rw-r--r-- | services/core/java/com/android/server/BatteryService.java | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index 50f15ca0739f..3b78fdafbd94 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -356,10 +356,27 @@ public final class BatteryService extends SystemService { && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel); } + private boolean shouldShutdownLocked() { + if (mHealthInfo.batteryLevel > 0) { + return false; + } + + // Battery-less devices should not shutdown. + if (!mHealthInfo.batteryPresent) { + return false; + } + + // If battery state is not CHARGING, shutdown. + // - If battery present and state == unknown, this is an unexpected error state. + // - If level <= 0 and state == full, this is also an unexpected state + // - All other states (NOT_CHARGING, DISCHARGING) means it is not charging. + return mHealthInfo.batteryStatus != BatteryManager.BATTERY_STATUS_CHARGING; + } + private void shutdownIfNoPowerLocked() { // shut down gracefully if our battery is critically low and we are not powered. // wait until the system has booted before attempting to display the shutdown dialog. - if (mHealthInfo.batteryLevel == 0 && !isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY)) { + if (shouldShutdownLocked()) { mHandler.post(new Runnable() { @Override public void run() { |