Loading services/java/com/android/server/BatteryService.java +72 −4 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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); Loading Loading @@ -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(); } } } } services/java/com/android/server/NotificationManagerService.java +1 −60 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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( Loading Loading @@ -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); Loading @@ -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); Loading @@ -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 Loading @@ -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); Loading Loading @@ -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; Loading services/java/com/android/server/SystemServer.java +4 −4 Original line number Diff line number Diff line Loading @@ -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)); Loading Loading
services/java/com/android/server/BatteryService.java +72 −4 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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); Loading Loading @@ -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(); } } } }
services/java/com/android/server/NotificationManagerService.java +1 −60 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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( Loading Loading @@ -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); Loading @@ -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); Loading @@ -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 Loading @@ -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); Loading Loading @@ -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; Loading
services/java/com/android/server/SystemServer.java +4 −4 Original line number Diff line number Diff line Loading @@ -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)); Loading