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

Commit 040feeca authored by Adnan Begovic's avatar Adnan Begovic
Browse files

SystemUI: Move custom tile listener service registration to phonestatusbar.

  Otherwise we're holding onto the instance of a previously created
  CustomTileListenerService and we're leaking memory.

Change-Id: If57033439048dd577bc4d05f8841f4eb2c8b874a
parent cf6674d7
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -186,6 +186,8 @@ import com.android.systemui.statusbar.stack.NotificationStackScrollLayout.OnChil
import com.android.systemui.statusbar.stack.StackStateAnimator;
import com.android.systemui.statusbar.stack.StackViewState;
import com.android.systemui.volume.VolumeComponent;
import cyanogenmod.app.CustomTileListenerService;
import cyanogenmod.app.StatusBarPanelCustomTile;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -1176,6 +1178,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            });
        }

        // Set up the initial custom tile listener state.
        try {
            mCustomTileListenerService.registerAsSystemService(mContext,
                    new ComponentName(mContext.getPackageName(), getClass().getCanonicalName()),
                    UserHandle.USER_ALL);
        } catch (RemoteException e) {
            Log.e(TAG, "Unable to register custom tile listener", e);
        }

        mQSPanel.getHost().setCustomTileListenerService(mCustomTileListenerService);

        // User info. Trigger first load.
        mHeader.setUserInfoController(mUserInfoController);
        mKeyguardStatusBar.setUserInfoController(mUserInfoController);
@@ -1350,6 +1363,41 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        return mNaturalBarHeight;
    }

    private final CustomTileListenerService mCustomTileListenerService =
            new CustomTileListenerService() {
                @Override
                public void onListenerConnected() {
                    //Connected
                }
                @Override
                public void onCustomTilePosted(final StatusBarPanelCustomTile sbc) {
                    if (DEBUG) Log.d(TAG, "onCustomTilePosted: " + sbc.getCustomTile());
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            boolean isUpdate = mQSPanel.getHost().getCustomTileData()
                                    .get(sbc.getKey()) != null;
                            if (isUpdate) {
                                mQSPanel.getHost().updateCustomTile(sbc);
                            } else {
                                mQSPanel.getHost().addCustomTile(sbc);
                            }
                        }
                    });
                }

                @Override
                public void onCustomTileRemoved(final StatusBarPanelCustomTile sbc) {
                    if (DEBUG) Log.d(TAG, "onCustomTileRemoved: " + sbc.getCustomTile());
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            mQSPanel.getHost().removeCustomTileSysUi(sbc.getKey());
                        }
                    });
                }
            };

    private View.OnClickListener mRecentsClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            awakenDreams();
@@ -3604,6 +3652,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

        // Stop the command queue until the new status bar container settles and has a layout pass
        mCommandQueue.pause();

        if (mCustomTileListenerService != null) {
            try {
                mCustomTileListenerService.unregisterAsSystemService();
            } catch (RemoteException e) {
                Log.e(TAG, "Unable to unregister custom tile listener", e);
            }
        }

        mQSPanel.getHost().setCustomTileListenerService(null);

        mStatusBarWindow.requestLayout();
        mStatusBarWindow.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
+17 −50
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import cyanogenmod.app.CustomTileListenerService;
import cyanogenmod.app.StatusBarPanelCustomTile;
import cyanogenmod.providers.CMSettings;
@@ -96,9 +97,9 @@ public class QSTileHost implements QSTile.Host, Tunable {
    private final UserSwitcherController mUserSwitcherController;
    private final KeyguardMonitor mKeyguard;
    private final SecurityController mSecurity;
    private Handler mHandler;

    private CustomTileData mCustomTileData;
    private CustomTileListenerService mCustomTileListenerService;

    private Callback mCallback;

@@ -128,16 +129,6 @@ public class QSTileHost implements QSTile.Host, Tunable {
                Process.THREAD_PRIORITY_BACKGROUND);
        ht.start();
        mLooper = ht.getLooper();
        mHandler = new Handler();

        // Set up the initial notification state.
        try {
            mCustomTileListenerService.registerAsSystemService(mContext,
                    new ComponentName(mContext.getPackageName(), getClass().getCanonicalName()),
                    UserHandle.USER_ALL);
        } catch (RemoteException e) {
            Log.e(TAG, "Unable to register custom tile listener", e);
        }

        TunerService.get(mContext).addTunableByProvider(this, CMSettings.Secure.QS_TILES, true);
    }
@@ -157,6 +148,10 @@ public class QSTileHost implements QSTile.Host, Tunable {
        mCallback.setEditing(editing);
    }

    void setCustomTileListenerService(CustomTileListenerService customTileListenerService) {
        mCustomTileListenerService = customTileListenerService;
    }

    @Override
    public void setCallback(Callback callback) {
        mCallback = callback;
@@ -187,9 +182,11 @@ public class QSTileHost implements QSTile.Host, Tunable {

    @Override
    public void removeCustomTile(StatusBarPanelCustomTile customTile) {
        if (mCustomTileListenerService != null) {
            mCustomTileListenerService.removeCustomTile(customTile.getPackage(),
                    customTile.getTag(), customTile.getId());
        }
    }

    @Override
    public void warn(String message, Throwable t) {
@@ -392,41 +389,7 @@ public class QSTileHost implements QSTile.Host, Tunable {
        return 0;
    }

    private final CustomTileListenerService mCustomTileListenerService =
            new CustomTileListenerService() {
                @Override
                public void onListenerConnected() {
                    //Connected
                }
                @Override
                public void onCustomTilePosted(final StatusBarPanelCustomTile sbc) {
                    if (DEBUG) Log.d(TAG, "onCustomTilePosted: " + sbc.getCustomTile());
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            boolean isUpdate = mCustomTileData.get(sbc.getKey()) != null;
                            if (isUpdate) {
                                updateCustomTile(sbc);
                            } else {
                                addCustomTile(sbc);
                            }
                        }
                    });
                }

                @Override
                public void onCustomTileRemoved(final StatusBarPanelCustomTile sbc) {
                    if (DEBUG) Log.d(TAG, "onCustomTileRemoved: " + sbc.getCustomTile());
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            removeCustomTileSysUi(sbc.getKey());
                        }
                    });
                }
            };

    private void updateCustomTile(StatusBarPanelCustomTile sbc) {
    void updateCustomTile(StatusBarPanelCustomTile sbc) {
        if (mTiles.containsKey(sbc.getKey())) {
            QSTile<?> tile = mTiles.get(sbc.getKey());
            if (tile instanceof CustomQSTile) {
@@ -436,7 +399,7 @@ public class QSTileHost implements QSTile.Host, Tunable {
        }
    }

    private void addCustomTile(StatusBarPanelCustomTile sbc) {
    void addCustomTile(StatusBarPanelCustomTile sbc) {
        mCustomTileData.add(new CustomTileData.Entry(sbc));
        mTiles.put(sbc.getKey(), new CustomQSTile(this, sbc));
        if (mCallback != null) {
@@ -444,7 +407,7 @@ public class QSTileHost implements QSTile.Host, Tunable {
        }
    }

    private void removeCustomTileSysUi(String key) {
    void removeCustomTileSysUi(String key) {
        if (mTiles.containsKey(key)) {
            mTiles.remove(key);
            mCustomTileData.remove(key);
@@ -453,4 +416,8 @@ public class QSTileHost implements QSTile.Host, Tunable {
            }
        }
    }

    CustomTileData getCustomTileData() {
        return mCustomTileData;
    }
}