Amin Shaikh | a07a17b | 2018-02-23 16:02:52 -0500 | [diff] [blame] | 1 | package com.android.systemui.qs; |
| 2 | |
| 3 | import static com.android.systemui.Prefs.Key.QS_TILE_SPECS_REVEALED; |
| 4 | |
| 5 | import android.content.Context; |
| 6 | import android.os.Handler; |
| 7 | import android.util.ArraySet; |
| 8 | |
| 9 | import com.android.systemui.Prefs; |
| 10 | import com.android.systemui.plugins.qs.QSTile; |
| 11 | |
| 12 | import java.util.Collection; |
| 13 | import java.util.Collections; |
| 14 | import java.util.Set; |
| 15 | |
| 16 | public class QSTileRevealController { |
| 17 | private static final long QS_REVEAL_TILES_DELAY = 500L; |
| 18 | |
| 19 | private final Context mContext; |
| 20 | private final QSPanel mQSPanel; |
| 21 | private final PagedTileLayout mPagedTileLayout; |
| 22 | private final ArraySet<String> mTilesToReveal = new ArraySet<>(); |
| 23 | private final Handler mHandler = new Handler(); |
| 24 | |
| 25 | private final Runnable mRevealQsTiles = new Runnable() { |
| 26 | @Override |
| 27 | public void run() { |
| 28 | mPagedTileLayout.startTileReveal(mTilesToReveal, () -> { |
| 29 | if (mQSPanel.isExpanded()) { |
| 30 | addTileSpecsToRevealed(mTilesToReveal); |
| 31 | mTilesToReveal.clear(); |
| 32 | } |
| 33 | }); |
| 34 | } |
| 35 | }; |
| 36 | |
| 37 | QSTileRevealController(Context context, QSPanel qsPanel, PagedTileLayout pagedTileLayout) { |
| 38 | mContext = context; |
| 39 | mQSPanel = qsPanel; |
| 40 | mPagedTileLayout = pagedTileLayout; |
| 41 | } |
| 42 | |
| 43 | public void setExpansion(float expansion) { |
| 44 | if (expansion == 1f) { |
| 45 | mHandler.postDelayed(mRevealQsTiles, QS_REVEAL_TILES_DELAY); |
| 46 | } else { |
| 47 | mHandler.removeCallbacks(mRevealQsTiles); |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | public void updateRevealedTiles(Collection<QSTile> tiles) { |
| 52 | ArraySet<String> tileSpecs = new ArraySet<>(); |
| 53 | for (QSTile tile : tiles) { |
| 54 | tileSpecs.add(tile.getTileSpec()); |
| 55 | } |
| 56 | |
| 57 | final Set<String> revealedTiles = Prefs.getStringSet( |
| 58 | mContext, QS_TILE_SPECS_REVEALED, Collections.EMPTY_SET); |
| 59 | if (revealedTiles.isEmpty() || mQSPanel.isShowingCustomize()) { |
| 60 | // Do not reveal QS tiles the user has upon first load or those that they directly |
| 61 | // added through customization. |
| 62 | addTileSpecsToRevealed(tileSpecs); |
| 63 | } else { |
| 64 | // Animate all tiles that the user has not directly added themselves. |
| 65 | tileSpecs.removeAll(revealedTiles); |
| 66 | mTilesToReveal.addAll(tileSpecs); |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | private void addTileSpecsToRevealed(ArraySet<String> specs) { |
| 71 | final ArraySet<String> revealedTiles = new ArraySet<>( |
| 72 | Prefs.getStringSet(mContext, QS_TILE_SPECS_REVEALED, Collections.EMPTY_SET)); |
| 73 | revealedTiles.addAll(specs); |
| 74 | Prefs.putStringSet(mContext, QS_TILE_SPECS_REVEALED, revealedTiles); |
| 75 | } |
| 76 | } |