OSDN Git Service

BatteryService: Specify low battery levels in resources.
authorMike Lockwood <lockwood@android.com>
Fri, 25 Sep 2009 13:32:19 +0000 (09:32 -0400)
committerMike Lockwood <lockwood@android.com>
Sun, 27 Sep 2009 19:42:07 +0000 (15:42 -0400)
Also trigger low battery when battery reaches the specified level
rather than when it drops below the level.

Fixes bug b/1788656

Change-Id: I81f5cbb9892fc6574320d92e153211f83c69f415
Signed-off-by: Mike Lockwood <lockwood@android.com>
core/res/res/values/config.xml
core/res/res/values/strings.xml
services/java/com/android/server/BatteryService.java
services/java/com/android/server/status/StatusBarPolicy.java

index cf0dfd7..907fd8f 100644 (file)
 
     <bool name="config_use_strict_phone_number_comparation">false</bool>
 
+    <!-- Display low battery warning when battery level dips to this value -->
+    <integer name="config_lowBatteryWarningLevel">15</integer>
+    <!-- Close low battery warning when battery level reaches this value -->
+    <integer name="config_lowBatteryCloseWarningLevel">20</integer>
+
 </resources>
index eb15183..2a55d85 100644 (file)
     <string name="battery_low_subtitle">The battery is getting low:</string>
 
     <!-- A message that appears when the battery level is getting low in a dialog.  This is appened to the subtitle of the low battery alert. -->
-    <string name="battery_low_percent_format">less than <xliff:g id="number">%d%%</xliff:g>
-    remaining.</string>
+    <string name="battery_low_percent_format"><xliff:g id="number">%d%%</xliff:g>
+    or less remaining.</string>
 
     <!-- When the battery is low, this is the label of the button to go to the
          power usage activity to find out what drained the battery. -->
index 53edf31..bb36936 100644 (file)
@@ -90,9 +90,6 @@ class BatteryService extends Binder {
     // This should probably be exposed in the API, though it's not critical
     private static final int BATTERY_PLUGGED_NONE = 0;
 
-    private static final int BATTERY_LEVEL_CLOSE_WARNING = 20;
-    private static final int BATTERY_LEVEL_WARNING = 15;
-
     private final Context mContext;
     private final IBatteryStats mBatteryStats;
     
@@ -114,7 +111,10 @@ class BatteryService extends Binder {
     private int mLastBatteryVoltage;
     private int mLastBatteryTemperature;
     private boolean mLastBatteryLevelCritical;
-    
+
+    private int mLowBatteryWarningLevel;
+    private int mLowBatteryCloseWarningLevel;
+
     private int mPlugType;
     private int mLastPlugType = -1; // Extra state so we can detect first run
     
@@ -127,6 +127,11 @@ class BatteryService extends Binder {
         mContext = context;
         mBatteryStats = BatteryStatsService.getService();
 
+        mLowBatteryWarningLevel = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_lowBatteryWarningLevel);
+        mLowBatteryCloseWarningLevel = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_lowBatteryCloseWarningLevel);
+
         mUEventObserver.startObserving("SUBSYSTEM=power_supply");
 
         // set initial status
@@ -271,13 +276,15 @@ class BatteryService extends Binder {
             final boolean oldPlugged = mLastPlugType != BATTERY_PLUGGED_NONE;
 
             /* The ACTION_BATTERY_LOW broadcast is sent in these situations:
-             * - is just un-plugged (previously was plugged) and battery level is under WARNING, or
-             * - is not plugged and battery level crosses the WARNING boundary (becomes < 15).
+             * - is just un-plugged (previously was plugged) and battery level is
+             *   less than or equal to WARNING, or
+             * - is not plugged and battery level falls to WARNING boundary
+             *   (becomes <= mLowBatteryWarningLevel).
              */
             final boolean sendBatteryLow = !plugged
                 && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
-                && mBatteryLevel < BATTERY_LEVEL_WARNING
-                && (oldPlugged || mLastBatteryLevel >= BATTERY_LEVEL_WARNING);
+                && mBatteryLevel <= mLowBatteryWarningLevel
+                && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
             
             sendIntent();
             
@@ -299,7 +306,7 @@ class BatteryService extends Binder {
                 mSentLowBatteryBroadcast = true;
                 statusIntent.setAction(Intent.ACTION_BATTERY_LOW);
                 mContext.sendBroadcast(statusIntent);
-            } else if (mSentLowBatteryBroadcast && mLastBatteryLevel >= BATTERY_LEVEL_CLOSE_WARNING) {
+            } else if (mSentLowBatteryBroadcast && mLastBatteryLevel >= mLowBatteryCloseWarningLevel) {
                 mSentLowBatteryBroadcast = false;
                 statusIntent.setAction(Intent.ACTION_BATTERY_OKAY);
                 mContext.sendBroadcast(statusIntent);
index da64e54..6570bcd 100644 (file)
@@ -670,11 +670,9 @@ public class StatusBarPolicy {
     private void showLowBatteryWarning() {
         closeLastBatteryView();
 
-        /* Show exact battery level.
-         * Add 1 because the text says "less than X%".
-         */
+        // Show exact battery level.
         CharSequence levelText = mContext.getString(
-                    com.android.internal.R.string.battery_low_percent_format, mBatteryLevel + 1);
+                    com.android.internal.R.string.battery_low_percent_format, mBatteryLevel);
 
         if (mBatteryLevelTextView != null) {
             mBatteryLevelTextView.setText(levelText);