Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7313cc32 authored by David Girault's avatar David Girault
Browse files

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
parent 6bcf8b9a
Loading
Loading
Loading
Loading
+113 −149
Original line number Original line Diff line number Diff line
@@ -285,6 +285,8 @@ public class StatusBarService extends IStatusBar.Stub
    ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>();
    ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>();
    int mDisabled = 0;
    int mDisabled = 0;


    private HashMap<String,PowerButton> mUsedPowerButtons = new HashMap<String,PowerButton>();

    /**
    /**
     * Construct the service, add the status bar view to the window manager
     * Construct the service, add the status bar view to the window manager
     */
     */
@@ -1909,37 +1911,8 @@ public class StatusBarService extends IStatusBar.Stub
        public void onClick(View v) {
        public void onClick(View v) {
            LinearLayout layout = (LinearLayout)v;
            LinearLayout layout = (LinearLayout)v;
            String type = (String)layout.getTag();
            String type = (String)layout.getTag();
            if(PowerButton.TOGGLE_WIFI.equals(type)) {
            PowerButton btn = mUsedPowerButtons.get(type);
                WifiButton.getInstance().toggleState(mContext);
            btn.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);
            }
            updateWidget();
            updateWidget();
        }
        }
    };
    };
@@ -1968,37 +1941,43 @@ public class StatusBarService extends IStatusBar.Stub
    }
    }


    private void setupWidget(String buttonType, int position) {
    private void setupWidget(String buttonType, int position) {

        PowerButton btn = null;
        if(PowerButton.TOGGLE_WIFI.equals(buttonType)) {
        if(PowerButton.TOGGLE_WIFI.equals(buttonType)) {
            WifiButton.getInstance().setupButton(position);
            btn = WifiButton.getInstance();
        } else if(PowerButton.TOGGLE_GPS.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_GPS.equals(buttonType)) {
            GPSButton.getInstance().setupButton(position);
            btn = GPSButton.getInstance();
        } else if(PowerButton.TOGGLE_BLUETOOTH.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_BLUETOOTH.equals(buttonType)) {
            BluetoothButton.getInstance().setupButton(position);
            btn = BluetoothButton.getInstance();
        } else if(PowerButton.TOGGLE_BRIGHTNESS.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_BRIGHTNESS.equals(buttonType)) {
            BrightnessButton.getInstance().setupButton(position);
            btn = BrightnessButton.getInstance();
        } else if(PowerButton.TOGGLE_SOUND.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_SOUND.equals(buttonType)) {
            SoundButton.getInstance().setupButton(position);
            btn = SoundButton.getInstance();
        } else if(PowerButton.TOGGLE_SYNC.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_SYNC.equals(buttonType)) {
            SyncButton.getInstance().setupButton(position);
            btn = SyncButton.getInstance();
        } else if(PowerButton.TOGGLE_WIFIAP.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_WIFIAP.equals(buttonType)) {
            WifiApButton.getInstance().setupButton(position);
            btn = WifiApButton.getInstance();
        } else if(PowerButton.TOGGLE_SCREENTIMEOUT.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_SCREENTIMEOUT.equals(buttonType)) {
            ScreenTimeoutButton.getInstance().setupButton(position);
            btn = ScreenTimeoutButton.getInstance();
        } else if(PowerButton.TOGGLE_MOBILEDATA.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_MOBILEDATA.equals(buttonType)) {
            MobileDataButton.getInstance().setupButton(position);
            btn = MobileDataButton.getInstance();
        } else if(PowerButton.TOGGLE_LOCKSCREEN.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_LOCKSCREEN.equals(buttonType)) {
            LockScreenButton.getInstance().setupButton(position);
            btn = LockScreenButton.getInstance();
        } else if(PowerButton.TOGGLE_NETWORKMODE.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_NETWORKMODE.equals(buttonType)) {
            NetworkModeButton.getInstance().setupButton(position);
            btn = NetworkModeButton.getInstance();
        } else if(PowerButton.TOGGLE_AUTOROTATE.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_AUTOROTATE.equals(buttonType)) {
            AutoRotateButton.getInstance().setupButton(position);
            btn = AutoRotateButton.getInstance();
        } else if(PowerButton.TOGGLE_AIRPLANE.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_AIRPLANE.equals(buttonType)) {
            AirplaneButton.getInstance().setupButton(position);
            btn = AirplaneButton.getInstance();
        } else if(PowerButton.TOGGLE_FLASHLIGHT.equals(buttonType)) {
        } else if(PowerButton.TOGGLE_FLASHLIGHT.equals(buttonType)) {
            FlashlightButton.getInstance().setupButton(position);
            btn = FlashlightButton.getInstance();
        } else if(PowerButton.TOGGLE_SLEEPMODE.equals(buttonType)) {
        } 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.setVisibility(View.GONE);
            layout.setTag("");
            layout.setTag("");
        }
        }
        WifiButton.getInstance().setupButton(0);
        synchronized(mUsedPowerButtons) {
        GPSButton.getInstance().setupButton(0);
            Set<String> keys = mUsedPowerButtons.keySet();
        BluetoothButton.getInstance().setupButton(0);
            for (String key: keys) {
        BrightnessButton.getInstance().setupButton(0);
                PowerButton btn = mUsedPowerButtons.get(key);
        SoundButton.getInstance().setupButton(0);
                btn.setupButton(0);
        SyncButton.getInstance().setupButton(0);
            }
        WifiApButton.getInstance().setupButton(0);
            mUsedPowerButtons.clear();
        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);
    }
    }



    private void updateStates() {
    private void updateStates() {
        GPSButton.getInstance().updateState(mContext);
        synchronized(mUsedPowerButtons) {
        WifiButton.getInstance().updateState(mContext);
            Set<String> keys = mUsedPowerButtons.keySet();
        BluetoothButton.getInstance().updateState(mContext);
            for (String key: keys) {
        BrightnessButton.getInstance().updateState(mContext);
                PowerButton btn = mUsedPowerButtons.get(key);
        SoundButton.getInstance().updateState(mContext);
                btn.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);
    }
    }

    private void updateViews() {
    private void updateViews() {
        GPSButton.getInstance().updateView(mContext, mExpandedView);
        synchronized(mUsedPowerButtons) {
        WifiButton.getInstance().updateView(mContext, mExpandedView);
            Set<String> keys = mUsedPowerButtons.keySet();
        BluetoothButton.getInstance().updateView(mContext, mExpandedView);
            for (String key: keys) {
        BrightnessButton.getInstance().updateView(mContext, mExpandedView);
                PowerButton btn = mUsedPowerButtons.get(key);
        SoundButton.getInstance().updateView(mContext, mExpandedView);
                btn.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);
    }
    }


    private void updateWidget() {
    private void updateWidget() {
@@ -2083,13 +2039,21 @@ public class StatusBarService extends IStatusBar.Stub
                updateResources();
                updateResources();
            }
            }
            else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
            else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
                WifiButton.getInstance().onReceive(context, intent);
                WifiButton btn = (WifiButton)
            } else if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) {
                    mUsedPowerButtons.get(PowerButton.TOGGLE_WIFI);
                WifiApButton.getInstance().onReceive(context, intent);
                if (btn != null) btn.onReceive(context, intent);
            } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) {
            } else if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(action)) {
                BluetoothButton.getInstance().onReceive(context, intent);
                WifiApButton btn = (WifiApButton)
            } else if (NetworkModeButton.NETWORK_MODE_CHANGED.equals(intent.getAction())) {
                    mUsedPowerButtons.get(PowerButton.TOGGLE_WIFIAP);
                NetworkModeButton.getInstance().onReceive(context, intent);
                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();
            updateWidget();
        }
        }