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

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

Merge "QS: Use current tile state when removing custom tiles" into nyc-dev

parents c1499639 21582d46
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public class TileQueryHelper {
        // TODO: Live?
    }

    private void addSystemTiles(QSTileHost host) {
    private void addSystemTiles(final QSTileHost host) {
        String possible = mContext.getString(R.string.quick_settings_tiles_default)
                + ",hotspot,inversion,saver,work,cast,night";
        String[] possibleTiles = possible.split(",");
@@ -93,7 +93,7 @@ public class TileQueryHelper {
                mainHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        new QueryTilesTask().execute();
                        new QueryTilesTask().execute(host.getTiles());
                    }
                });
            }
@@ -133,9 +133,10 @@ public class TileQueryHelper {
        public boolean isSystem;
    }

    private class QueryTilesTask extends AsyncTask<Void, Void, Collection<TileInfo>> {
    private class QueryTilesTask extends
            AsyncTask<Collection<QSTile<?>>, Void, Collection<TileInfo>> {
        @Override
        protected Collection<TileInfo> doInBackground(Void... params) {
        protected Collection<TileInfo> doInBackground(Collection<QSTile<?>>... params) {
            List<TileInfo> tiles = new ArrayList<>();
            PackageManager pm = mContext.getPackageManager();
            List<ResolveInfo> services = pm.queryIntentServicesAsUser(
@@ -143,7 +144,13 @@ public class TileQueryHelper {
            for (ResolveInfo info : services) {
                String packageName = info.serviceInfo.packageName;
                ComponentName componentName = new ComponentName(packageName, info.serviceInfo.name);
                final CharSequence appLabel = info.serviceInfo.applicationInfo.loadLabel(pm);
                String spec = CustomTile.toSpec(componentName);
                State state = getState(params[0], spec);
                if (state != null) {
                    addTile(spec, appLabel, state, false);
                    continue;
                }
                if (info.serviceInfo.icon == 0) {
                    continue;
                }
@@ -157,12 +164,22 @@ public class TileQueryHelper {
                icon.mutate();
                icon.setTint(mContext.getColor(android.R.color.white));
                CharSequence label = info.serviceInfo.loadLabel(pm);
                final CharSequence appLabel = info.serviceInfo.applicationInfo.loadLabel(pm);
                addTile(spec, icon, label != null ? label.toString() : "null", appLabel, mContext);
            }
            return tiles;
        }

        private State getState(Collection<QSTile<?>> tiles, String spec) {
            for (QSTile<?> tile : tiles) {
                if (spec.equals(tile.getTileSpec())) {
                    final QSTile.State state = tile.newTileState();
                    tile.getState().copyTo(state);
                    return state;
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Collection<TileInfo> result) {
            mTiles.addAll(result);