diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 1c2f4ee1050e0..14c1af4477008 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1264,6 +1264,13 @@ 2000 + + 0 + 0xFFFF0000 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index db9d979ed6a60..51251cdc94662 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2042,6 +2042,7 @@ + diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index db1a62c18387a..31dcc8b1681c9 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -1173,6 +1173,11 @@ public final class BatteryService extends SystemService { } private final class Led { + // must match: config_notificationsBatteryLowBehavior in config.xml + static final int LOW_BATTERY_BEHAVIOR_DEFAULT = 0; + static final int LOW_BATTERY_BEHAVIOR_SOLID = 1; + static final int LOW_BATTERY_BEHAVIOR_FLASHING = 2; + private final LogicalLight mBatteryLight; private final int mBatteryLowARGB; @@ -1180,6 +1185,7 @@ public final class BatteryService extends SystemService { private final int mBatteryFullARGB; private final int mBatteryLedOn; private final int mBatteryLedOff; + private final int mBatteryLowBehavior; public Led(Context context, LightsManager lights) { mBatteryLight = lights.getLight(LightsManager.LIGHT_ID_BATTERY); @@ -1196,6 +1202,8 @@ public final class BatteryService extends SystemService { com.android.internal.R.integer.config_notificationsBatteryLedOff); mBatteryNearlyFullLevel = context.getResources().getInteger( com.android.internal.R.integer.config_notificationsBatteryNearlyFullLevel); + mBatteryLowBehavior = context.getResources().getInteger( + com.android.internal.R.integer.config_notificationsBatteryLowBehavior); } /** @@ -1208,13 +1216,26 @@ public final class BatteryService extends SystemService { final int level = mHealthInfo.batteryLevel; final int status = mHealthInfo.batteryStatus; if (level < mLowBatteryWarningLevel) { - if (status == BatteryManager.BATTERY_STATUS_CHARGING) { - // Solid red when battery is charging - mBatteryLight.setColor(mBatteryLowARGB); - } else { - // Flash red when battery is low and not charging - mBatteryLight.setFlashing(mBatteryLowARGB, LogicalLight.LIGHT_FLASH_TIMED, - mBatteryLedOn, mBatteryLedOff); + switch (mBatteryLowBehavior) { + case LOW_BATTERY_BEHAVIOR_SOLID: + // Solid red when low battery + mBatteryLight.setColor(mBatteryLowARGB); + break; + case LOW_BATTERY_BEHAVIOR_FLASHING: + // Flash red when battery is low and not charging + mBatteryLight.setFlashing(mBatteryLowARGB, LogicalLight.LIGHT_FLASH_TIMED, + mBatteryLedOn, mBatteryLedOff); + break; + default: + if (status == BatteryManager.BATTERY_STATUS_CHARGING) { + // Solid red when battery is charging + mBatteryLight.setColor(mBatteryLowARGB); + } else { + // Flash red when battery is low and not charging + mBatteryLight.setFlashing(mBatteryLowARGB, + LogicalLight.LIGHT_FLASH_TIMED, mBatteryLedOn, mBatteryLedOff); + } + break; } } else if (status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL) {