diff options
| author | Joe Onorato <joeo@google.com> | 2010-10-27 12:29:12 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-10-27 12:29:12 -0700 |
| commit | 82ced694ec784040185239d653ef88a8c285856d (patch) | |
| tree | 7b3a4d0c6dd0dad7e876e5af038897e270d4aa94 | |
| parent | f3bac948e4f95dd17dc61505f9d12e84cb3c5ea6 (diff) | |
| parent | de1b359e88ef1dcafdc0c6a724f660ad0b55fc3a (diff) | |
| download | frameworks_base-82ced694ec784040185239d653ef88a8c285856d.zip frameworks_base-82ced694ec784040185239d653ef88a8c285856d.tar.gz frameworks_base-82ced694ec784040185239d653ef88a8c285856d.tar.bz2 | |
Merge "Move the battery LED code over to the battery service from the notification service (!)"
3 files changed, 77 insertions, 68 deletions
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 @@ class BatteryService extends Binder { 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 @@ class BatteryService extends Binder { * (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 @@ class BatteryService extends Binder { 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 @@ class BatteryService extends Binder { 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 @@ public class NotificationManagerService extends INotificationManager.Stub 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 @@ public class NotificationManagerService extends INotificationManager.Stub 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 @@ public class NotificationManagerService extends INotificationManager.Stub 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 @@ public class NotificationManagerService extends INotificationManager.Stub { super(); mContext = context; - mLightsService = lights; mAm = ActivityManagerNative.getDefault(); mSound = new NotificationPlayer(TAG); mSound.setUsesWakeLock(context); @@ -445,7 +418,6 @@ public class NotificationManagerService extends INotificationManager.Stub 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 @@ public class NotificationManagerService extends INotificationManager.Stub 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 @@ public class NotificationManagerService extends INotificationManager.Stub // 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 @@ public class NotificationManagerService extends INotificationManager.Stub // 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 @@ class ServerThread extends Thread { 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)); |
