summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorImre Sunyi <imre.sunyi@sonyericsson.com>2010-08-26 09:23:42 +0200
committerJohan Redestig <johan.redestig@sonyericsson.com>2010-08-26 09:23:42 +0200
commitfd04143a47770256dabcfa4d8447127b3ec8b2bf (patch)
treeb2b609b71ea40fadc807d662ce5a0c51ba4d2c57 /services
parentf3ee6f87a344b185d8bde12c77440c9020378510 (diff)
downloadframeworks_base-fd04143a47770256dabcfa4d8447127b3ec8b2bf.zip
frameworks_base-fd04143a47770256dabcfa4d8447127b3ec8b2bf.tar.gz
frameworks_base-fd04143a47770256dabcfa4d8447127b3ec8b2bf.tar.bz2
Shutdown when capacity is 0% and no charging or when battery is dead
Android framework does not shutdown when battery capacity is 0% and a charger is attached (USB or AC). This handling is incomplete since a charger might very well be attached but charging has stopped because USB suspended or the charging algorithm has stopped because of battery safety handling. Also shutdown when battery is reported 'dead'. This might happen although charging is present. Change-Id: If328260ebf4d38f912e4d2fad204431cbb19c993
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/BatteryService.java20
1 files changed, 16 insertions, 4 deletions
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 5cf61bd..6ac35fd 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -136,7 +136,13 @@ class BatteryService extends Binder {
final boolean isPowered() {
// assume we are powered if battery state is unknown so the "stay on while plugged in" option will work.
- return (mAcOnline || mUsbOnline || mBatteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN);
+ // Do not look at the plug status to check if we are powered.
+ // Charger can be plugged but not charging because of i.e. USB suspend,
+ // battery temperature reasons etc. We are powered only if battery is
+ // being charged. This function fill return false if charger is
+ // connected and battery is reported full.
+ return (mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING ||
+ mBatteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN);
}
final boolean isPowered(int plugTypeSet) {
@@ -148,11 +154,13 @@ class BatteryService extends Binder {
if (plugTypeSet == 0) {
return false;
}
+
+ // we are not powered when plug is connected and not charging
int plugTypeBit = 0;
- if (mAcOnline) {
+ if (mAcOnline && mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) {
plugTypeBit |= BatteryManager.BATTERY_PLUGGED_AC;
}
- if (mUsbOnline) {
+ if (mUsbOnline && mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) {
plugTypeBit |= BatteryManager.BATTERY_PLUGGED_USB;
}
return (plugTypeSet & plugTypeBit) != 0;
@@ -183,7 +191,11 @@ class BatteryService extends Binder {
private final void shutdownIfNoPower() {
// 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 (mBatteryLevel == 0 && !isPowered() && ActivityManagerNative.isSystemReady()) {
+ // Also shutdown if battery is reported to be 'dead' independent of
+ // battery level and power supply.
+ if (((mBatteryLevel == 0 && !isPowered()) ||
+ mBatteryHealth == BatteryManager.BATTERY_HEALTH_DEAD) &&
+ ActivityManagerNative.isSystemReady()) {
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);