Shutdown device gracefully when net discharging

Instead of checking the presence of power supplies, check
battery status to determine whether it should
shutdown. In detail, shutdown if

battery level == 0 && status != charging

Change-Id: Ie3d93d305e40f2f45d60538e7831f00be0380544
Fixes: 115715604
Test: boots
This commit is contained in:
Yifan Hong
2019-02-13 16:00:43 -08:00
parent 96cf453355
commit 258c8af1e5

View File

@@ -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() {