| package com.android.systemui.qs; |
| |
| import static com.android.systemui.Prefs.Key.QS_TILE_SPECS_REVEALED; |
| |
| import android.content.Context; |
| import android.os.Handler; |
| import android.util.ArraySet; |
| |
| import com.android.systemui.Prefs; |
| import com.android.systemui.plugins.qs.QSTile; |
| |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.Set; |
| |
| public class QSTileRevealController { |
| private static final long QS_REVEAL_TILES_DELAY = 500L; |
| |
| private final Context mContext; |
| private final QSPanel mQSPanel; |
| private final PagedTileLayout mPagedTileLayout; |
| private final ArraySet<String> mTilesToReveal = new ArraySet<>(); |
| private final Handler mHandler = new Handler(); |
| |
| private final Runnable mRevealQsTiles = new Runnable() { |
| @Override |
| public void run() { |
| mPagedTileLayout.startTileReveal(mTilesToReveal, () -> { |
| if (mQSPanel.isExpanded()) { |
| addTileSpecsToRevealed(mTilesToReveal); |
| mTilesToReveal.clear(); |
| } |
| }); |
| } |
| }; |
| |
| QSTileRevealController(Context context, QSPanel qsPanel, PagedTileLayout pagedTileLayout) { |
| mContext = context; |
| mQSPanel = qsPanel; |
| mPagedTileLayout = pagedTileLayout; |
| } |
| |
| public void setExpansion(float expansion) { |
| if (expansion == 1f) { |
| mHandler.postDelayed(mRevealQsTiles, QS_REVEAL_TILES_DELAY); |
| } else { |
| mHandler.removeCallbacks(mRevealQsTiles); |
| } |
| } |
| |
| public void updateRevealedTiles(Collection<QSTile> tiles) { |
| ArraySet<String> tileSpecs = new ArraySet<>(); |
| for (QSTile tile : tiles) { |
| tileSpecs.add(tile.getTileSpec()); |
| } |
| |
| final Set<String> revealedTiles = Prefs.getStringSet( |
| mContext, QS_TILE_SPECS_REVEALED, Collections.EMPTY_SET); |
| if (revealedTiles.isEmpty() || mQSPanel.isShowingCustomize()) { |
| // Do not reveal QS tiles the user has upon first load or those that they directly |
| // added through customization. |
| addTileSpecsToRevealed(tileSpecs); |
| } else { |
| // Animate all tiles that the user has not directly added themselves. |
| tileSpecs.removeAll(revealedTiles); |
| mTilesToReveal.addAll(tileSpecs); |
| } |
| } |
| |
| private void addTileSpecsToRevealed(ArraySet<String> specs) { |
| final ArraySet<String> revealedTiles = new ArraySet<>( |
| Prefs.getStringSet(mContext, QS_TILE_SPECS_REVEALED, Collections.EMPTY_SET)); |
| revealedTiles.addAll(specs); |
| Prefs.putStringSet(mContext, QS_TILE_SPECS_REVEALED, revealedTiles); |
| } |
| } |