<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. -->
// 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;
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
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
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();
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);
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);