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

Commit cb654cb1 authored by Jason Monk's avatar Jason Monk
Browse files

Fix drag to add tiles showing too many times

It was appearing from the night tile being unavailable and causing
extra nulls in the list.  Fix the night mode tile so the nulls don't
happen.  Also fix the null handling to avoid this happening with other
bad specs.

Bug: 27061683
Change-Id: I48f769c06ed17c2ff1f166434857ec1faff14d02
parent 596e1d3b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ public final class Prefs {
        Key.QS_DATA_SAVER_ADDED,
        Key.QS_INVERT_COLORS_ADDED,
        Key.QS_WORK_ADDED,
        Key.QS_NIGHT_ADDED,
    })
    public @interface Key {
        String OVERVIEW_SEARCH_APP_WIDGET_ID = "searchAppWidgetId";
@@ -68,6 +69,7 @@ public final class Prefs {
        String QS_DATA_SAVER_ADDED = "QsDataSaverAdded";
        String QS_INVERT_COLORS_ADDED = "QsInvertColorsAdded";
        String QS_WORK_ADDED = "QsWorkAdded";
        String QS_NIGHT_ADDED = "QsNightAdded";
    }

    public static boolean getBoolean(Context context, @Key String key, boolean defaultValue) {
+4 −1
Original line number Diff line number Diff line
@@ -107,7 +107,10 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
        mOtherTiles = new ArrayList<TileInfo>(mAllTiles);
        mTiles.clear();
        for (int i = 0; i < mCurrentSpecs.size(); i++) {
            mTiles.add(getAndRemoveOther(mCurrentSpecs.get(i)));
            final TileInfo tile = getAndRemoveOther(mCurrentSpecs.get(i));
            if (tile != null) {
                mTiles.add(tile);
            }
        }
        mTiles.add(null);
        mTiles.addAll(mOtherTiles);
+11 −2
Original line number Diff line number Diff line
@@ -28,11 +28,14 @@ import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.service.quicksettings.TileService;
import com.android.systemui.Prefs;
import com.android.systemui.Prefs.Key;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.QSTile.DrawableIcon;
import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.statusbar.phone.QSTileHost;
import com.android.systemui.tuner.TunerService;

import java.util.ArrayList;
import java.util.Collection;
@@ -54,7 +57,8 @@ public class TileQueryHelper {
    }

    private void addSystemTiles(QSTileHost host) {
        boolean hasColorMod = host.getNightModeController().isEnabled();
        boolean hasColorMod = Prefs.getBoolean(host.getContext(), Key.QS_NIGHT_ADDED, false)
                && TunerService.isTunerEnabled(host.getContext());
        String possible = mContext.getString(R.string.quick_settings_tiles_default)
                + ",hotspot,inversion,saver,work,cast" + (hasColorMod ? ",night" : "");
        String[] possibleTiles = possible.split(",");
@@ -86,12 +90,17 @@ public class TileQueryHelper {
            });
        }
        qsHandler.post(new Runnable() {
            @Override
            public void run() {
                mainHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        new QueryTilesTask().execute();
                    }
                });
            }
        });
    }

    public void setListener(TileStateListener listener) {
        mListener = listener;
+22 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.DataSaverController.Listener;
import com.android.systemui.statusbar.policy.HotspotController;
import com.android.systemui.statusbar.policy.HotspotController.Callback;
import com.android.systemui.statusbar.policy.NightModeController;

/**
 * Manages which tiles should be automatically added to QS.
@@ -66,12 +67,33 @@ public class AutoTileManager {
        if (!Prefs.getBoolean(context, Key.QS_WORK_ADDED, false)) {
            host.getManagedProfileController().addCallback(mProfileCallback);
        }
        if (!Prefs.getBoolean(context, Key.QS_NIGHT_ADDED, false)) {
            host.getNightModeController().addListener(mNightModeListener);
        }
    }

    public void destroy() {
        // TODO: Remove any registered listeners.
    }

    private final NightModeController.Listener mNightModeListener =
            new NightModeController.Listener() {
        @Override
        public void onNightModeChanged() {
            mHost.addTile("night");
            Prefs.putBoolean(mContext, Key.QS_NIGHT_ADDED, true);
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    mHost.getNightModeController().removeListener(mNightModeListener);
                }
            });
        }

        @Override
        public void onTwilightAutoChanged() { }
    };

    private final ManagedProfileController.Callback mProfileCallback =
            new ManagedProfileController.Callback() {
                @Override