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

Commit 9975780f authored by Danny Baumann's avatar Danny Baumann
Browse files

Fix SystemUI memory leaks on theme changes.

ContentObserver and BroadcastReceiver instances were dangling after the
status bar was recreated.

Change-Id: I0ef7ef134029e5deec066d405545b8d9ec58d76b
parent c9269760
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -14,12 +14,14 @@ import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;

public class AirplaneModeTile extends QuickSettingsTile implements NetworkSignalChangedCallback{

    private NetworkController mController;
    private boolean enabled = false;

    public AirplaneModeTile(Context context, QuickSettingsController qsc) {
    public AirplaneModeTile(Context context, QuickSettingsController qsc, NetworkController controller) {
        super(context, qsc);

        mController = controller;

        mOnClick = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -45,12 +47,17 @@ public class AirplaneModeTile extends QuickSettingsTile implements NetworkSignal

    @Override
    void onPostCreate() {
        NetworkController controller = new NetworkController(mContext);
        controller.addNetworkSignalChangedCallback(this);
        mController.addNetworkSignalChangedCallback(this);
        updateTile();
        super.onPostCreate();
    }

    @Override
    public void onDestroy() {
        mController.removeNetworkSignalChangedCallback(this);
        super.onDestroy();
    }

    @Override
    public void updateResources() {
        updateTile();
+11 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;

public class BatteryTile extends QuickSettingsTile implements BatteryStateChangeCallback{
    private BatteryController mController;

    private boolean charging = false;
    private int batteryLevel = 0;
@@ -24,9 +25,11 @@ public class BatteryTile extends QuickSettingsTile implements BatteryStateChange
    private LevelListDrawable batteryLevels;
    private LevelListDrawable chargingBatteryLevels;

    public BatteryTile(Context context, QuickSettingsController qsc) {
    public BatteryTile(Context context, QuickSettingsController qsc, BatteryController controller) {
        super(context, qsc, R.layout.quick_settings_tile_battery);

        mController = controller;

        mOnClick = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -38,11 +41,16 @@ public class BatteryTile extends QuickSettingsTile implements BatteryStateChange
    @Override
    void onPostCreate() {
        updateTile();
        BatteryController controller = new BatteryController(mContext, false);
        controller.addStateChangedCallback(this);
        mController.addStateChangedCallback(this);
        super.onPostCreate();
    }

    @Override
    public void onDestroy() {
        mController.removeStateChangedCallback(this);
        super.onDestroy();
    }

    @Override
    public void onBatteryLevelChanged(int level, boolean pluggedIn) {
        batteryLevel = level;
+10 −3
Original line number Diff line number Diff line
@@ -19,10 +19,12 @@ public class BluetoothTile extends QuickSettingsTile implements BluetoothStateCh
    private boolean enabled = false;
    private boolean connected = false;
    private BluetoothAdapter mBluetoothAdapter;
    private BluetoothController mController;

    public BluetoothTile(Context context, QuickSettingsController qsc) {
    public BluetoothTile(Context context, QuickSettingsController qsc, BluetoothController controller) {
        super(context, qsc);
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        mController = controller;
        enabled = mBluetoothAdapter.isEnabled();
        connected = mBluetoothAdapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTED;

@@ -101,11 +103,16 @@ public class BluetoothTile extends QuickSettingsTile implements BluetoothStateCh
    void onPostCreate() {
        checkBluetoothState();
        updateTile();
        BluetoothController controller = new BluetoothController(mContext);
        controller.addStateChangedCallback(this);
        mController.addStateChangedCallback(this);
        super.onPostCreate();
    }

    @Override
    public void onDestroy() {
        mController.removeStateChangedCallback(this);
        super.onDestroy();
    }

    @Override
    public void onBluetoothStateChange(boolean on) {
        this.enabled = on;
+11 −4
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ import com.android.systemui.statusbar.policy.DockBatteryController;
import com.android.systemui.statusbar.policy.DockBatteryController.DockBatteryStateChangeCallback;

public class DockBatteryTile extends QuickSettingsTile implements DockBatteryStateChangeCallback {

    private DockBatteryController mController;
    private boolean mPresent = false;
    private boolean mCharging = false;
    private int mDockBatteryLevel = 0;
@@ -25,9 +25,11 @@ public class DockBatteryTile extends QuickSettingsTile implements DockBatterySta
    private LevelListDrawable mDockBatteryLevels;
    private LevelListDrawable mChargingDockBatteryLevels;

    public DockBatteryTile(Context context, QuickSettingsController qsc) {
    public DockBatteryTile(Context context, QuickSettingsController qsc, DockBatteryController controller) {
        super(context, qsc, R.layout.quick_settings_tile_dock_battery);

        mController = controller;

        mOnClick = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -39,11 +41,16 @@ public class DockBatteryTile extends QuickSettingsTile implements DockBatterySta
    @Override
    void onPostCreate() {
        updateTile();
        DockBatteryController controller = new DockBatteryController(mContext);
        controller.addStateChangedCallback(this);
        mController.addStateChangedCallback(this);
        super.onPostCreate();
    }

    @Override
    public void onDestroy() {
        mController.removeStateChangedCallback(this);
        super.onDestroy();
    }

    @Override
    public void onDockBatteryLevelChanged(int level, boolean present, boolean pluggedIn) {
        mDockBatteryLevel = level;
+10 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ public class MobileNetworkTile extends QuickSettingsTile implements NetworkSigna
    private static final int NO_OVERLAY = 0;
    private static final int DISABLED_OVERLAY = -1;

    private NetworkController mController;
    private boolean mEnabled;
    private String mDescription;
    private int mDataTypeIconId = NO_OVERLAY;
@@ -34,9 +35,10 @@ public class MobileNetworkTile extends QuickSettingsTile implements NetworkSigna

    private ConnectivityManager mCm;

    public MobileNetworkTile(Context context, QuickSettingsController qsc) {
    public MobileNetworkTile(Context context, QuickSettingsController qsc, NetworkController controller) {
        super(context, qsc, R.layout.quick_settings_tile_rssi);

        mController = controller;
        mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);

        mOnClick = new View.OnClickListener() {
@@ -67,12 +69,17 @@ public class MobileNetworkTile extends QuickSettingsTile implements NetworkSigna

    @Override
    void onPostCreate() {
        NetworkController controller = new NetworkController(mContext);
        controller.addNetworkSignalChangedCallback(this);
        mController.addNetworkSignalChangedCallback(this);
        updateTile();
        super.onPostCreate();
    }

    @Override
    public void onDestroy() {
        mController.removeNetworkSignalChangedCallback(this);
        super.onDestroy();
    }

    @Override
    public void updateResources() {
        updateTile();
Loading