diff options
author | David Girault <david.f.girault@gmail.com> | 2010-10-31 21:55:23 +0100 |
---|---|---|
committer | David Girault <david.f.girault@gmail.com> | 2010-11-04 11:00:51 +0100 |
commit | 7313cc3239dc8f24a48c1ed645c2a693030bd076 (patch) | |
tree | b05e20d367ec290211e07a7d8e26b7a3f8899d11 /services/java/com/android/server | |
parent | 6bcf8b9ad21a6661e1db134c9c92bae4b3df4e48 (diff) | |
download | frameworks_base-7313cc3239dc8f24a48c1ed645c2a693030bd076.zip frameworks_base-7313cc3239dc8f24a48c1ed645c2a693030bd076.tar.gz frameworks_base-7313cc3239dc8f24a48c1ed645c2a693030bd076.tar.bz2 |
Don't instantiate unused power buttons in StatusBarService.
New power buttons in the StatusBar is a great thing. But, on my HTC Hero,
I got a lot of the following error in logcat:
E/FlashlightButton( 133): getFlashlightEnabled failed
E/FlashlightButton( 133): java.io.FileNotFoundException: /sys/class/leds/flashlight/brightness (No such file or directory)
E/FlashlightButton( 133): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
E/FlashlightButton( 133): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
E/FlashlightButton( 133): at java.io.FileInputStream.<init>(FileInputStream.java:82)
E/FlashlightButton( 133): at java.io.FileInputStream.<init>(FileInputStream.java:134)
E/FlashlightButton( 133): at com.android.server.status.widget.FlashlightButton.getFlashlightEnabled(FlashlightButton.java:73)
E/FlashlightButton( 133): at com.android.server.status.widget.FlashlightButton.updateState(FlashlightButton.java:47)
E/FlashlightButton( 133): at com.android.server.status.StatusBarService.updateStates(StatusBarService.java:2043)
E/FlashlightButton( 133): at com.android.server.status.StatusBarService.updateWidget(StatusBarService.java:2065)
E/FlashlightButton( 133): at com.android.server.status.StatusBarService.access$800(StatusBarService.java:120)
E/FlashlightButton( 133): at com.android.server.status.StatusBarService$7.onReceive(StatusBarService.java:2094)
E/FlashlightButton( 133): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
E/FlashlightButton( 133): at android.os.Handler.handleCallback(Handler.java:587)
E/FlashlightButton( 133): at android.os.Handler.dispatchMessage(Handler.java:92)
E/FlashlightButton( 133): at android.os.Looper.loop(Looper.java:123)
E/FlashlightButton( 133): at com.android.server.ServerThread.run(SystemServer.java:524)
This is beacause, all power buttons are instantiate, even if unused or
functionnality is missing. So, I remove most calls to getInstance() for
all of them and use a HashMap to store the buttons used and only call
them in updateStates() and updateWidget().
Additionnaly, my change reduce memory usage of the status bar.
Fixed tabs, some indents and long lines.
Change-Id: I22b98bddc791c547d02b50a09b561aa469cc25b7
Diffstat (limited to 'services/java/com/android/server')
-rw-r--r-- | services/java/com/android/server/status/StatusBarService.java | 262 |
1 files changed, 113 insertions, 149 deletions
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java index cf60e07..beeb951 100644 --- a/services/java/com/android/server/status/StatusBarService.java +++ b/services/java/com/android/server/status/StatusBarService.java @@ -285,6 +285,8 @@ public class StatusBarService extends IStatusBar.Stub ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>(); int mDisabled = 0; + private HashMap<String,PowerButton> mUsedPowerButtons = new HashMap<String,PowerButton>(); + /** * Construct the service, add the status bar view to the window manager */ @@ -332,11 +334,11 @@ public class StatusBarService extends IStatusBar.Stub mDateView = (DateView)sb.findViewById(R.id.date); if (custNotBar) { - mStatusBarView.setBackgroundDrawable(res.getDrawable(com.android.internal.R.drawable.statusbar_background_sq, - notifBarColorMask, notifPDMode)); - mDateView.setBackgroundDrawable(res.getDrawable(com.android.internal.R.drawable.statusbar_background_sq, - notifBarColorMask, notifPDMode)); - mDateView.setPadding(6, 0, 6, 0); + mStatusBarView.setBackgroundDrawable(res.getDrawable(com.android.internal.R.drawable.statusbar_background_sq, + notifBarColorMask, notifPDMode)); + mDateView.setBackgroundDrawable(res.getDrawable(com.android.internal.R.drawable.statusbar_background_sq, + notifBarColorMask, notifPDMode)); + mDateView.setPadding(6, 0, 6, 0); } mStatusIcons = (LinearLayout)sb.findViewById(R.id.statusIcons); @@ -380,12 +382,12 @@ public class StatusBarService extends IStatusBar.Stub mTrackingView.mService = this; mCloseView = (CloseDragHandle)mTrackingView.findViewById(R.id.close); if (custExpBar) { - ImageView iv = (ImageView)mTrackingView.findViewById(R.id.close_image); - mCloseView.removeAllViews(); - iv.setImageDrawable(closerDrawable); - iv.setColorFilter(expBarColorMask, expPDMode); + ImageView iv = (ImageView)mTrackingView.findViewById(R.id.close_image); + mCloseView.removeAllViews(); + iv.setImageDrawable(closerDrawable); + iv.setColorFilter(expBarColorMask, expPDMode); mCloseView.addView(iv); - } + } mCloseView.mService = this; mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore); @@ -919,7 +921,7 @@ public class StatusBarService extends IStatusBar.Stub }; View makeNotificationView(StatusBarNotification notification, ViewGroup parent) { - Resources res = mContext.getResources(); + Resources res = mContext.getResources(); final NotificationData n = notification.data; RemoteViews remoteViews = n.contentView; if (remoteViews == null) { @@ -975,9 +977,9 @@ public class StatusBarService extends IStatusBar.Stub // This will try to handle text color for all notifications from apps, applying the appropriate // color if ID is possible, otherwise setting it to notification text color - startRecurse(child); + startRecurse(child); - content.addView(child); + content.addView(child); row.setDrawingCacheEnabled(true); @@ -988,18 +990,18 @@ public class StatusBarService extends IStatusBar.Stub } void startRecurse(View v) { - ViewGroup vg = (ViewGroup) v; + ViewGroup vg = (ViewGroup) v; int childcount = vg.getChildCount(); if (childcount > 0) { - int i; - for (i = 0; i < childcount; i++) { - try { - setViewColors((TextView) vg.getChildAt(i)); - } catch (Exception e) { } - try { - startRecurse((View) vg.getChildAt(i)); - } catch (Exception e) { } - } + int i; + for (i = 0; i < childcount; i++) { + try { + setViewColors((TextView) vg.getChildAt(i)); + } catch (Exception e) { } + try { + startRecurse((View) vg.getChildAt(i)); + } catch (Exception e) { } + } } } @@ -1008,19 +1010,19 @@ public class StatusBarService extends IStatusBar.Stub try { tvID = tv.getId(); switch (tvID) { - case com.android.internal.R.id.title: - tv.setTextColor(notificationTitleColor); - break; - case com.android.internal.R.id.text: - tv.setTextColor(notificationTextColor); - break; - case com.android.internal.R.id.time: - tv.setTextColor(notificationTimeColor); - break; - default: - tv.setTextColor(notificationTextColor); - } - } catch (Exception e) { } + case com.android.internal.R.id.title: + tv.setTextColor(notificationTitleColor); + break; + case com.android.internal.R.id.text: + tv.setTextColor(notificationTextColor); + break; + case com.android.internal.R.id.time: + tv.setTextColor(notificationTimeColor); + break; + default: + tv.setTextColor(notificationTextColor); + } + } catch (Exception e) { } } @@ -1909,37 +1911,8 @@ public class StatusBarService extends IStatusBar.Stub public void onClick(View v) { LinearLayout layout = (LinearLayout)v; String type = (String)layout.getTag(); - if(PowerButton.TOGGLE_WIFI.equals(type)) { - WifiButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_GPS.equals(type)) { - GPSButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_BLUETOOTH.equals(type)) { - BluetoothButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_BRIGHTNESS.equals(type)) { - BrightnessButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_SOUND.equals(type)) { - SoundButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_SYNC.equals(type)) { - SyncButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_WIFIAP.equals(type)) { - WifiApButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_SCREENTIMEOUT.equals(type)) { - ScreenTimeoutButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_MOBILEDATA.equals(type)) { - MobileDataButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_LOCKSCREEN.equals(type)) { - LockScreenButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_NETWORKMODE.equals(type)) { - NetworkModeButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_AUTOROTATE.equals(type)) { - AutoRotateButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_AIRPLANE.equals(type)) { - AirplaneButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_FLASHLIGHT.equals(type)) { - FlashlightButton.getInstance().toggleState(mContext); - } else if(PowerButton.TOGGLE_SLEEPMODE.equals(type)) { - SleepButton.getInstance().toggleState(mContext); - } + PowerButton btn = mUsedPowerButtons.get(type); + btn.toggleState(mContext); updateWidget(); } }; @@ -1968,37 +1941,43 @@ public class StatusBarService extends IStatusBar.Stub } private void setupWidget(String buttonType, int position) { - + PowerButton btn = null; if(PowerButton.TOGGLE_WIFI.equals(buttonType)) { - WifiButton.getInstance().setupButton(position); + btn = WifiButton.getInstance(); } else if(PowerButton.TOGGLE_GPS.equals(buttonType)) { - GPSButton.getInstance().setupButton(position); + btn = GPSButton.getInstance(); } else if(PowerButton.TOGGLE_BLUETOOTH.equals(buttonType)) { - BluetoothButton.getInstance().setupButton(position); + btn = BluetoothButton.getInstance(); } else if(PowerButton.TOGGLE_BRIGHTNESS.equals(buttonType)) { - BrightnessButton.getInstance().setupButton(position); + btn = BrightnessButton.getInstance(); } else if(PowerButton.TOGGLE_SOUND.equals(buttonType)) { - SoundButton.getInstance().setupButton(position); + btn = SoundButton.getInstance(); } else if(PowerButton.TOGGLE_SYNC.equals(buttonType)) { - SyncButton.getInstance().setupButton(position); + btn = SyncButton.getInstance(); } else if(PowerButton.TOGGLE_WIFIAP.equals(buttonType)) { - WifiApButton.getInstance().setupButton(position); + btn = WifiApButton.getInstance(); } else if(PowerButton.TOGGLE_SCREENTIMEOUT.equals(buttonType)) { - ScreenTimeoutButton.getInstance().setupButton(position); + btn = ScreenTimeoutButton.getInstance(); } else if(PowerButton.TOGGLE_MOBILEDATA.equals(buttonType)) { - MobileDataButton.getInstance().setupButton(position); + btn = MobileDataButton.getInstance(); } else if(PowerButton.TOGGLE_LOCKSCREEN.equals(buttonType)) { - LockScreenButton.getInstance().setupButton(position); + btn = LockScreenButton.getInstance(); } else if(PowerButton.TOGGLE_NETWORKMODE.equals(buttonType)) { - NetworkModeButton.getInstance().setupButton(position); + btn = NetworkModeButton.getInstance(); } else if(PowerButton.TOGGLE_AUTOROTATE.equals(buttonType)) { - AutoRotateButton.getInstance().setupButton(position); + btn = AutoRotateButton.getInstance(); } else if(PowerButton.TOGGLE_AIRPLANE.equals(buttonType)) { - AirplaneButton.getInstance().setupButton(position); + btn = AirplaneButton.getInstance(); } else if(PowerButton.TOGGLE_FLASHLIGHT.equals(buttonType)) { - FlashlightButton.getInstance().setupButton(position); + btn = FlashlightButton.getInstance(); } else if(PowerButton.TOGGLE_SLEEPMODE.equals(buttonType)) { - SleepButton.getInstance().setupButton(position); + btn = SleepButton.getInstance(); + } + if (btn != null) { + synchronized(mUsedPowerButtons) { + btn.setupButton(position); + mUsedPowerButtons.put(buttonType, btn); + } } } @@ -2008,57 +1987,34 @@ public class StatusBarService extends IStatusBar.Stub layout.setVisibility(View.GONE); layout.setTag(""); } - WifiButton.getInstance().setupButton(0); - GPSButton.getInstance().setupButton(0); - BluetoothButton.getInstance().setupButton(0); - BrightnessButton.getInstance().setupButton(0); - SoundButton.getInstance().setupButton(0); - SyncButton.getInstance().setupButton(0); - WifiApButton.getInstance().setupButton(0); - ScreenTimeoutButton.getInstance().setupButton(0); - MobileDataButton.getInstance().setupButton(0); - LockScreenButton.getInstance().setupButton(0); - NetworkModeButton.getInstance().setupButton(0); - AutoRotateButton.getInstance().setupButton(0); - AirplaneButton.getInstance().setupButton(0); - FlashlightButton.getInstance().setupButton(0); - SleepButton.getInstance().setupButton(0); + synchronized(mUsedPowerButtons) { + Set<String> keys = mUsedPowerButtons.keySet(); + for (String key: keys) { + PowerButton btn = mUsedPowerButtons.get(key); + btn.setupButton(0); + } + mUsedPowerButtons.clear(); + } } - private void updateStates() { - GPSButton.getInstance().updateState(mContext); - WifiButton.getInstance().updateState(mContext); - BluetoothButton.getInstance().updateState(mContext); - BrightnessButton.getInstance().updateState(mContext); - SoundButton.getInstance().updateState(mContext); - SyncButton.getInstance().updateState(mContext); - WifiApButton.getInstance().updateState(mContext); - ScreenTimeoutButton.getInstance().updateState(mContext); - MobileDataButton.getInstance().updateState(mContext); - LockScreenButton.getInstance().updateState(mContext); - NetworkModeButton.getInstance().updateState(mContext); - AutoRotateButton.getInstance().updateState(mContext); - AirplaneButton.getInstance().updateState(mContext); - FlashlightButton.getInstance().updateState(mContext); - SleepButton.getInstance().updateState(mContext); + synchronized(mUsedPowerButtons) { + Set<String> keys = mUsedPowerButtons.keySet(); + for (String key: keys) { + PowerButton btn = mUsedPowerButtons.get(key); + btn.updateState(mContext); + } + } } + private void updateViews() { - GPSButton.getInstance().updateView(mContext, mExpandedView); - WifiButton.getInstance().updateView(mContext, mExpandedView); - BluetoothButton.getInstance().updateView(mContext, mExpandedView); - BrightnessButton.getInstance().updateView(mContext, mExpandedView); - SoundButton.getInstance().updateView(mContext, mExpandedView); - SyncButton.getInstance().updateView(mContext, mExpandedView); - WifiApButton.getInstance().updateView(mContext, mExpandedView); - ScreenTimeoutButton.getInstance().updateView(mContext, mExpandedView); - MobileDataButton.getInstance().updateView(mContext, mExpandedView); - LockScreenButton.getInstance().updateView(mContext, mExpandedView); - NetworkModeButton.getInstance().updateView(mContext, mExpandedView); - AutoRotateButton.getInstance().updateView(mContext, mExpandedView); - AirplaneButton.getInstance().updateView(mContext, mExpandedView); - FlashlightButton.getInstance().updateView(mContext, mExpandedView); - SleepButton.getInstance().updateView(mContext, mExpandedView); + synchronized(mUsedPowerButtons) { + Set<String> keys = mUsedPowerButtons.keySet(); + for (String key: keys) { + PowerButton btn = mUsedPowerButtons.get(key); + btn.updateView(mContext, mExpandedView); + } + } } private void updateWidget() { @@ -2083,13 +2039,21 @@ public class StatusBarService extends IStatusBar.Stub updateResources(); } else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { - WifiButton.getInstance().onReceive(context, intent); - } else if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) { - WifiApButton.getInstance().onReceive(context, intent); - } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) { - BluetoothButton.getInstance().onReceive(context, intent); - } else if (NetworkModeButton.NETWORK_MODE_CHANGED.equals(intent.getAction())) { - NetworkModeButton.getInstance().onReceive(context, intent); + WifiButton btn = (WifiButton) + mUsedPowerButtons.get(PowerButton.TOGGLE_WIFI); + if (btn != null) btn.onReceive(context, intent); + } else if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(action)) { + WifiApButton btn = (WifiApButton) + mUsedPowerButtons.get(PowerButton.TOGGLE_WIFIAP); + if (btn != null) btn.onReceive(context, intent); + } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { + BluetoothButton btn = (BluetoothButton) + mUsedPowerButtons.get(PowerButton.TOGGLE_BLUETOOTH); + if (btn != null) btn.onReceive(context, intent); + } else if (NetworkModeButton.NETWORK_MODE_CHANGED.equals(action)) { + NetworkModeButton btn = (NetworkModeButton) + mUsedPowerButtons.get(PowerButton.TOGGLE_NETWORKMODE); + if (btn != null) btn.onReceive(context, intent); } updateWidget(); } @@ -2223,36 +2187,36 @@ public class StatusBarService extends IStatusBar.Stub } private void getNotBarConfig() { - Resources res = mContext.getResources(); - /* - * Setup color and bar type for notification strip - */ - boolean useCustom = Settings.System.getInt(mContext.getContentResolver(), - Settings.System.NOTIF_BAR_CUSTOM, 0) == 1; + Resources res = mContext.getResources(); + /* + * Setup color and bar type for notification strip + */ + boolean useCustom = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.NOTIF_BAR_CUSTOM, 0) == 1; notifBarColorMask = Settings.System.getInt(mContext.getContentResolver(), Settings.System.NOTIF_BAR_COLOR, whiteColor); if (useCustom) { - custNotBar = true; + custNotBar = true; } else { - custNotBar = false; + custNotBar = false; } /* * Setup colors for expanded notification drawables */ boolean useCustomExp = Settings.System.getInt(mContext.getContentResolver(), - Settings.System.NOTIF_EXPANDED_BAR_CUSTOM, 0) == 1; + Settings.System.NOTIF_EXPANDED_BAR_CUSTOM, 0) == 1; expBarColorMask = Settings.System.getInt(mContext.getContentResolver(), Settings.System.NOTIF_EXPANDED_BAR_COLOR, whiteColor); int noalpha = expBarColorMask | 0xFF000000; if (useCustomExp) { - closerDrawable = res.getDrawable(com.android.internal.R.drawable.status_bar_close_on_cust); + closerDrawable = res.getDrawable(com.android.internal.R.drawable.status_bar_close_on_cust); expBarHeadDrawable = res.getDrawable(com.android.internal.R.drawable.status_bar_header_background_cust, - expBarColorMask, expPDMode); + expBarColorMask, expPDMode); expBarNotifTitleDrawable = res.getDrawable(com.android.internal.R.drawable.title_bar_portrait_cust, - noalpha, expPDMode); // always solid + noalpha, expPDMode); // always solid custExpBar = true; } else { - custExpBar = false; + custExpBar = false; } } |