summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server
diff options
context:
space:
mode:
authorDavid Girault <david.f.girault@gmail.com>2010-10-31 21:55:23 +0100
committerDavid Girault <david.f.girault@gmail.com>2010-11-04 11:00:51 +0100
commit7313cc3239dc8f24a48c1ed645c2a693030bd076 (patch)
treeb05e20d367ec290211e07a7d8e26b7a3f8899d11 /services/java/com/android/server
parent6bcf8b9ad21a6661e1db134c9c92bae4b3df4e48 (diff)
downloadframeworks_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.java262
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;
}
}