Auto added tiles should add at the end

Custom tiles that were added to QSTileHost were always added at the
beginning. Add a parameter so they can either be added at the beginning
(from StatusBar) or at the end (from AutoTileManager).

Test: manual
Test: atest AutoTileManagerTest QSTileHostTest
Fixes: 157497851
Change-Id: Ifb24d6dcca164d30f5888581654fe3e9c7489d4e
This commit is contained in:
Fabian Kozynski
2020-06-03 11:05:02 -04:00
parent 22e135e17c
commit fb5f143247
4 changed files with 49 additions and 5 deletions

View File

@@ -355,10 +355,23 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
}
public void addTile(ComponentName tile) {
addTile(tile, /* end */ false);
}
/**
* Adds a custom tile to the set of current tiles.
* @param tile the component name of the {@link android.service.quicksettings.TileService}
* @param end if true, the tile will be added at the end. If false, at the beginning.
*/
public void addTile(ComponentName tile, boolean end) {
String spec = CustomTile.toSpec(tile);
if (!mTileSpecs.contains(spec)) {
List<String> newSpecs = new ArrayList<>(mTileSpecs);
newSpecs.add(0, spec);
if (end) {
newSpecs.add(spec);
} else {
newSpecs.add(0, spec);
}
changeTiles(mTileSpecs, newSpecs);
}
}

View File

@@ -274,7 +274,7 @@ public class AutoTileManager {
}
if (value != 0) {
if (mSpec.startsWith(CustomTile.PREFIX)) {
mHost.addTile(CustomTile.getComponentFromSpec(mSpec));
mHost.addTile(CustomTile.getComponentFromSpec(mSpec), /* end */ true);
} else {
mHost.addTile(mSpec);
}

View File

@@ -219,12 +219,42 @@ public class QSTileHostTest extends SysuiTestCase {
public void testNoRepeatedSpecs_customTile() {
mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, CUSTOM_TILE_SPEC);
mQSTileHost.addTile(CUSTOM_TILE);
mQSTileHost.addTile(CUSTOM_TILE, /* end */ false);
assertEquals(1, mQSTileHost.mTileSpecs.size());
assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(0));
}
@Test
public void testAddedAtBeginningOnDefault_customTile() {
mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1"); // seed
mQSTileHost.addTile(CUSTOM_TILE);
assertEquals(2, mQSTileHost.mTileSpecs.size());
assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(0));
}
@Test
public void testAddedAtBeginning_customTile() {
mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1"); // seed
mQSTileHost.addTile(CUSTOM_TILE, /* end */ false);
assertEquals(2, mQSTileHost.mTileSpecs.size());
assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(0));
}
@Test
public void testAddedAtEnd_customTile() {
mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1"); // seed
mQSTileHost.addTile(CUSTOM_TILE, /* end */ true);
assertEquals(2, mQSTileHost.mTileSpecs.size());
assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(1));
}
@Test
public void testLoadTileSpec_repeated() {
List<String> specs = QSTileHost.loadTileSpecs(mContext, "spec1,spec1,spec2");

View File

@@ -172,11 +172,12 @@ public class AutoTileManagerTest extends SysuiTestCase {
}
@Test
public void testSettingTileAddedComponent_onChanged() {
public void testSettingTileAddedComponentAtEnd_onChanged() {
changeValue(TEST_SETTING_COMPONENT, 1);
waitForIdleSync();
verify(mAutoAddTracker).setTileAdded(TEST_CUSTOM_SPEC);
verify(mQsTileHost).addTile(ComponentName.unflattenFromString(TEST_COMPONENT));
verify(mQsTileHost).addTile(ComponentName.unflattenFromString(TEST_COMPONENT)
, /* end */ true);
}
@Test