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

Commit 21aba3ff authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Remove QS tiles that get uninstalled" into nyc-dev

parents f3d24148 07f55a2a
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -16,13 +16,18 @@
package com.android.systemui.qs.external;

import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Handler;
import android.os.UserHandle;
import android.service.quicksettings.IQSTileService;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
import libcore.util.Objects;

/**
 * Manages the priority which lets {@link TileServices} make decisions about which tiles
@@ -68,6 +73,12 @@ public class TileServiceManager {
        mHandler = handler;
        mStateManager = tileLifecycleManager;
        mStateManager.setQSService(tileServices);

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addDataScheme("package");
        mServices.getContext().registerReceiverAsUser(mUninstallReceiver,
                new UserHandle(ActivityManager.getCurrentUser()), filter, null, mHandler);
    }

    public boolean isActiveTile() {
@@ -106,6 +117,7 @@ public class TileServiceManager {
    }

    public void handleDestroy() {
        mServices.getContext().unregisterReceiver(mUninstallReceiver);
        mStateManager.handleDestroy();
    }

@@ -198,4 +210,23 @@ public class TileServiceManager {
            mServices.recalculateBindAllowance();
        }
    };

    private final BroadcastReceiver mUninstallReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (!Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {
                return;
            }
            if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                return;
            }
            Uri data = intent.getData();
            String pkgName = data.getEncodedSchemeSpecificPart();
            final ComponentName component = mStateManager.getComponent();
            if (!Objects.equal(pkgName, component.getPackageName())) {
                return;
            }
            mServices.getHost().removeTile(component);
        }
    };
}
+5 −0
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ public class TileServices extends IQSService.Stub {
        return mContext;
    }

    public QSTileHost getHost() {
        return mHost;
    }

    public TileServiceManager getTileWrapper(CustomTile tile) {
        ComponentName component = tile.getComponent();
        TileServiceManager service = onCreateTileService(component);
@@ -89,6 +93,7 @@ public class TileServices extends IQSService.Stub {
    public void freeService(CustomTile tile, TileServiceManager service) {
        synchronized (mServices) {
            service.setBindAllowed(false);
            service.handleDestroy();
            mServices.remove(tile);
            mTiles.remove(tile.getComponent());
            final String slot = tile.getComponent().getClassName();