blob: 2f012e6e608ea6312e5ab088368dfd3797e765ea [file] [log] [blame]
Amin Shaikha07a17b2018-02-23 16:02:52 -05001package com.android.systemui.qs;
2
3import static com.android.systemui.Prefs.Key.QS_TILE_SPECS_REVEALED;
4
5import android.content.Context;
6import android.os.Handler;
7import android.util.ArraySet;
8
9import com.android.systemui.Prefs;
10import com.android.systemui.plugins.qs.QSTile;
11
12import java.util.Collection;
13import java.util.Collections;
14import java.util.Set;
15
16public 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}