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