Move the battery LED code over to the battery service from the notification service (!)
Change-Id: I12d7994ae245a36b8b2c3272fcbe173881caebd0
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 32dd0d5..23bd5c8 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -120,10 +120,13 @@
private long mDischargeStartTime;
private int mDischargeStartLevel;
+ private Led mLed;
+
private boolean mSentLowBatteryBroadcast = false;
- public BatteryService(Context context) {
+ public BatteryService(Context context, LightsService lights) {
mContext = context;
+ mLed = new Led(context, lights);
mBatteryStats = BatteryStatsService.getService();
mLowBatteryWarningLevel = mContext.getResources().getInteger(
@@ -311,9 +314,9 @@
* (becomes <= mLowBatteryWarningLevel).
*/
final boolean sendBatteryLow = !plugged
- && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
- && mBatteryLevel <= mLowBatteryWarningLevel
- && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
+ && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
+ && mBatteryLevel <= mLowBatteryWarningLevel
+ && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
sendIntent();
@@ -341,6 +344,9 @@
mContext.sendBroadcast(statusIntent);
}
+ // Update the battery LED
+ mLed.updateLightsLocked();
+
// This needs to be done after sendIntent() so that we get the lastest battery stats.
if (logOutlier && dischargeDuration != 0) {
logOutlier(dischargeDuration);
@@ -495,4 +501,66 @@
pw.println(" technology: " + mBatteryTechnology);
}
}
+
+ class Led {
+ private LightsService mLightsService;
+ private LightsService.Light mBatteryLight;
+
+ private int mBatteryLowARGB;
+ private int mBatteryMediumARGB;
+ private int mBatteryFullARGB;
+ private int mBatteryLedOn;
+ private int mBatteryLedOff;
+
+ private boolean mBatteryCharging;
+ private boolean mBatteryLow;
+ private boolean mBatteryFull;
+
+ Led(Context context, LightsService lights) {
+ mLightsService = lights;
+ mBatteryLight = lights.getLight(LightsService.LIGHT_ID_BATTERY);
+
+ mBatteryLowARGB = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_notificationsBatteryLowARGB);
+ mBatteryMediumARGB = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_notificationsBatteryMediumARGB);
+ mBatteryFullARGB = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_notificationsBatteryFullARGB);
+ mBatteryLedOn = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_notificationsBatteryLedOn);
+ mBatteryLedOff = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_notificationsBatteryLedOff);
+ }
+
+ /**
+ * Synchronize on BatteryService.
+ */
+ void updateLightsLocked() {
+ final int level = mBatteryLevel;
+ final int status = mBatteryStatus;
+ 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, LightsService.LIGHT_FLASH_TIMED,
+ mBatteryLedOn, mBatteryLedOff);
+ }
+ } else if (status == BatteryManager.BATTERY_STATUS_CHARGING
+ || status == BatteryManager.BATTERY_STATUS_FULL) {
+ if (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90) {
+ // Solid green when full or charging and nearly full
+ mBatteryLight.setColor(mBatteryFullARGB);
+ } else {
+ // Solid orange when charging and halfway full
+ mBatteryLight.setColor(mBatteryMediumARGB);
+ }
+ } else {
+ // No lights if not charging and not low
+ mBatteryLight.turnOff();
+ }
+ }
+ }
}
+
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 8066fa7..1081a20 100755
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -93,7 +93,6 @@
private WorkerHandler mHandler;
private StatusBarManagerService mStatusBar;
private LightsService mLightsService;
- private LightsService.Light mBatteryLight;
private LightsService.Light mNotificationLight;
private LightsService.Light mAttentionLight;
@@ -128,18 +127,8 @@
private ArrayList<ToastRecord> mToastQueue;
private ArrayList<NotificationRecord> mLights = new ArrayList<NotificationRecord>();
-
- private boolean mBatteryCharging;
- private boolean mBatteryLow;
- private boolean mBatteryFull;
private NotificationRecord mLedNotification;
- private static int mBatteryLowARGB;
- private static int mBatteryMediumARGB;
- private static int mBatteryFullARGB;
- private static int mBatteryLedOn;
- private static int mBatteryLedOff;
-
private static String idDebugString(Context baseContext, String packageName, int id) {
Context c = null;
@@ -342,22 +331,7 @@
boolean queryRestart = false;
- if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
- boolean batteryCharging = (intent.getIntExtra("plugged", 0) != 0);
- int level = intent.getIntExtra("level", -1);
- boolean batteryLow = (level >= 0 && level <= Power.LOW_BATTERY_THRESHOLD);
- int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
- boolean batteryFull = (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90);
-
- if (batteryCharging != mBatteryCharging ||
- batteryLow != mBatteryLow ||
- batteryFull != mBatteryFull) {
- mBatteryCharging = batteryCharging;
- mBatteryLow = batteryLow;
- mBatteryFull = batteryFull;
- updateLights();
- }
- } else if (action.equals(Usb.ACTION_USB_STATE)) {
+ if (action.equals(Usb.ACTION_USB_STATE)) {
Bundle extras = intent.getExtras();
boolean usbConnected = extras.getBoolean(Usb.USB_CONNECTED);
boolean adbEnabled = (Usb.USB_FUNCTION_ENABLED.equals(
@@ -435,7 +409,6 @@
{
super();
mContext = context;
- mLightsService = lights;
mAm = ActivityManagerNative.getDefault();
mSound = new NotificationPlayer(TAG);
mSound.setUsesWakeLock(context);
@@ -445,7 +418,6 @@
mStatusBar = statusBar;
statusBar.setNotificationCallbacks(mNotificationCallbacks);
- mBatteryLight = lights.getLight(LightsService.LIGHT_ID_BATTERY);
mNotificationLight = lights.getLight(LightsService.LIGHT_ID_NOTIFICATIONS);
mAttentionLight = lights.getLight(LightsService.LIGHT_ID_ATTENTION);
@@ -457,17 +429,6 @@
mDefaultNotificationLedOff = resources.getInteger(
com.android.internal.R.integer.config_defaultNotificationLedOff);
- mBatteryLowARGB = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_notificationsBatteryLowARGB);
- mBatteryMediumARGB = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_notificationsBatteryMediumARGB);
- mBatteryFullARGB = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_notificationsBatteryFullARGB);
- mBatteryLedOn = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_notificationsBatteryLedOn);
- mBatteryLedOff = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_notificationsBatteryLedOff);
-
// Don't start allowing notifications until the setup wizard has run once.
// After that, including subsequent boots, init with notifications turned on.
// This works on the first boot because the setup wizard will toggle this
@@ -479,7 +440,6 @@
// register for battery changed notifications
IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Usb.ACTION_USB_STATE);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
@@ -1076,25 +1036,6 @@
// lock on mNotificationList
private void updateLightsLocked()
{
- // Battery low always shows, other states only show if charging.
- if (mBatteryLow) {
- if (mBatteryCharging) {
- mBatteryLight.setColor(mBatteryLowARGB);
- } else {
- // Flash when battery is low and not charging
- mBatteryLight.setFlashing(mBatteryLowARGB, LightsService.LIGHT_FLASH_TIMED,
- mBatteryLedOn, mBatteryLedOff);
- }
- } else if (mBatteryCharging) {
- if (mBatteryFull) {
- mBatteryLight.setColor(mBatteryFullARGB);
- } else {
- mBatteryLight.setColor(mBatteryMediumARGB);
- }
- } else {
- mBatteryLight.turnOff();
- }
-
// clear pending pulse notification if screen is on
if (mScreenOn || mLedNotification == null) {
mPendingPulseNotification = false;
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 46797c5..237ab80 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -170,13 +170,13 @@
Slog.i(TAG, "System Content Providers");
ActivityManagerService.installSystemProviders();
- Slog.i(TAG, "Battery Service");
- battery = new BatteryService(context);
- ServiceManager.addService("battery", battery);
-
Slog.i(TAG, "Lights Service");
lights = new LightsService(context);
+ Slog.i(TAG, "Battery Service");
+ battery = new BatteryService(context, lights);
+ ServiceManager.addService("battery", battery);
+
Slog.i(TAG, "Vibrator Service");
ServiceManager.addService("vibrator", new VibratorService(context));