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

Commit 6ca26516 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 03c2f2cc
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
@@ -199,6 +199,8 @@ import com.android.systemui.statusbar.stack.NotificationStackScrollLayout.OnChil
import com.android.systemui.statusbar.stack.StackScrollAlgorithm;
import com.android.systemui.statusbar.stack.StackScrollState.ViewState;
import com.android.systemui.volume.VolumeComponent;
import cyanogenmod.app.CustomTileListenerService;
import cyanogenmod.app.StatusBarPanelCustomTile;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -1293,6 +1295,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);
@@ -1495,6 +1508,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();
@@ -3914,6 +3962,16 @@ 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);

        makeStatusBarView();
        repositionNavigationBar();
        addHeadsUpView();
+16 −49
Original line number Diff line number Diff line
@@ -80,7 +80,6 @@ import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.volume.VolumeComponent;

import cyanogenmod.app.CustomTile;
import cyanogenmod.app.CustomTileListenerService;
import cyanogenmod.app.StatusBarPanelCustomTile;

@@ -117,6 +116,7 @@ public class QSTileHost implements QSTile.Host {
    private Handler mHandler;

    private CustomTileData mCustomTileData;
    private CustomTileListenerService mCustomTileListenerService;

    private Callback mCallback;

@@ -165,19 +165,14 @@ public class QSTileHost implements QSTile.Host {
        };
        recreateTiles();

        // 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);
        }

        mUserTracker.startTracking();
        mObserver.register();
    }

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

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

    @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) {
@@ -394,41 +391,7 @@ public class QSTileHost implements QSTile.Host {
        return tiles;
    }

    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) {
@@ -438,7 +401,7 @@ public class QSTileHost implements QSTile.Host {
        }
    }

    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) {
@@ -446,7 +409,7 @@ public class QSTileHost implements QSTile.Host {
        }
    }

    private void removeCustomTileSysUi(String key) {
    void removeCustomTileSysUi(String key) {
        if (mTiles.containsKey(key)) {
            mTiles.remove(key);
            mCustomTileData.remove(key);
@@ -456,6 +419,10 @@ public class QSTileHost implements QSTile.Host {
        }
    }

    CustomTileData getCustomTileData() {
        return mCustomTileData;
    }

    private class Observer extends ContentObserver {
        private boolean mRegistered;