Merge "Support surrogate pairs when layouting text"
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 @@
 
     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 @@
         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 @@
     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);