Add plugin API for individual QS tiles
This will allow prototyping of individual QS tiles and/or their
visual representation without having to write a plugin for the
entire panel. This will allow quick iteration on QS UI + dual
target tiles.
Test: Install plugin using new API
Change-Id: I05ca9d9f5a200a1dad2c3582251a36edb5cb9aba
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index e8d5ece..b257ca9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -33,7 +33,9 @@
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QS.DetailAdapter;
-import com.android.systemui.qs.QSTile.Host.Callback;
+import com.android.systemui.plugins.qs.QSTile;
+import com.android.systemui.plugins.qs.QSTileView;
+import com.android.systemui.qs.QSHost.Callback;
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.settings.BrightnessController;
@@ -159,11 +161,11 @@
}
public void openDetails(String subPanel) {
- QSTile<?> tile = getTile(subPanel);
+ QSTile tile = getTile(subPanel);
showDetailAdapter(true, tile.getDetailAdapter(), new int[] {getWidth() / 2, 0});
}
- private QSTile<?> getTile(String subPanel) {
+ private QSTile getTile(String subPanel) {
for (int i = 0; i < mRecords.size(); i++) {
if (subPanel.equals(mRecords.get(i).tile.getTileSpec())) {
return mRecords.get(i).tile;
@@ -301,17 +303,17 @@
mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0, r).sendToTarget();
}
- public void setTiles(Collection<QSTile<?>> tiles) {
+ public void setTiles(Collection<QSTile> tiles) {
setTiles(tiles, false);
}
- public void setTiles(Collection<QSTile<?>> tiles, boolean collapsedView) {
+ public void setTiles(Collection<QSTile> tiles, boolean collapsedView) {
for (TileRecord record : mRecords) {
mTileLayout.removeTile(record);
record.tile.removeCallback(record.callback);
}
mRecords.clear();
- for (QSTile<?> tile : tiles) {
+ for (QSTile tile : tiles) {
addTile(tile, collapsedView);
}
}
@@ -320,15 +322,15 @@
r.tileView.onStateChanged(state);
}
- protected QSTileBaseView createTileView(QSTile<?> tile, boolean collapsedView) {
- return new QSTileView(mContext, tile.createTileView(mContext), collapsedView);
+ protected QSTileView createTileView(QSTile tile, boolean collapsedView) {
+ return mHost.createTileView(tile, collapsedView);
}
protected boolean shouldShowDetail() {
return mExpanded;
}
- protected TileRecord addTile(final QSTile<?> tile, boolean collapsedView) {
+ protected TileRecord addTile(final QSTile tile, boolean collapsedView) {
final TileRecord r = new TileRecord();
r.tile = tile;
r.tileView = createTileView(tile, collapsedView);
@@ -372,10 +374,7 @@
};
r.tile.addCallback(callback);
r.callback = callback;
- r.tileView.init(v -> r.tile.click(), v -> r.tile.secondaryClick(), v -> {
- r.tile.longClick();
- return true;
- });
+ r.tileView.init(r.tile);
r.tile.refreshState();
mRecords.add(r);
@@ -441,15 +440,7 @@
}
r.tile.setDetailListening(show);
int x = r.tileView.getLeft() + r.tileView.getWidth() / 2;
- int y;
- if (r.tileView instanceof QSTileView) {
- View labelContainer = (View) ((QSTileView) r.tileView).getLabel().getParent();
- y = r.tileView.getTop() + mTileLayout.getOffsetTop(r) + getTop()
- + labelContainer.getTop() + labelContainer.getHeight() / 2;
- } else {
- y = r.tileView.getTop() + mTileLayout.getOffsetTop(r) + r.tileView.getHeight() / 2
- + getTop();
- }
+ int y = r.tileView.getDetailY() + mTileLayout.getOffsetTop(r) + getTop();
handleShowDetailImpl(r, show, x, y);
}
@@ -515,7 +506,7 @@
return mTileLayout;
}
- QSTileBaseView getTileView(QSTile<?> tile) {
+ QSTileView getTileView(QSTile tile) {
for (TileRecord r : mRecords) {
if (r.tile == tile) {
return r.tileView;
@@ -553,8 +544,8 @@
}
public static final class TileRecord extends Record {
- public QSTile<?> tile;
- public QSTileBaseView tileView;
+ public QSTile tile;
+ public com.android.systemui.plugins.qs.QSTileView tileView;
public boolean scanState;
public QSTile.Callback callback;
}