Merge "Add memorizing work tile position when it's restored to use it when adding the tile" into tm-qpr-dev am: b9e2d49cf2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21073183

Change-Id: I969287bfc77075f66190a2fe59b01f80413def87
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Anton Potapov
2023-01-25 11:34:06 +00:00
committed by Automerger Merge Worker
4 changed files with 50 additions and 17 deletions

View File

@@ -43,6 +43,7 @@ import java.util.concurrent.Executor
import javax.inject.Inject import javax.inject.Inject
private const val TAG = "AutoAddTracker" private const val TAG = "AutoAddTracker"
private const val DELIMITER = ","
/** /**
* Class to track tiles that have been auto-added * Class to track tiles that have been auto-added
@@ -67,7 +68,7 @@ class AutoAddTracker @VisibleForTesting constructor(
@GuardedBy("autoAdded") @GuardedBy("autoAdded")
private val autoAdded = ArraySet<String>() private val autoAdded = ArraySet<String>()
private var restoredTiles: Set<String>? = null private var restoredTiles: Map<String, AutoTile>? = null
override val currentUserId: Int override val currentUserId: Int
get() = userId get() = userId
@@ -98,25 +99,26 @@ class AutoAddTracker @VisibleForTesting constructor(
when (intent.getStringExtra(Intent.EXTRA_SETTING_NAME)) { when (intent.getStringExtra(Intent.EXTRA_SETTING_NAME)) {
Settings.Secure.QS_TILES -> { Settings.Secure.QS_TILES -> {
restoredTiles = intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE) restoredTiles = intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE)
?.split(",") ?.split(DELIMITER)
?.toSet() ?.mapIndexed(::AutoTile)
?.associateBy(AutoTile::tileType)
?: run { ?: run {
Log.w(TAG, "Null restored tiles for user $userId") Log.w(TAG, "Null restored tiles for user $userId")
emptySet() emptyMap()
} }
} }
Settings.Secure.QS_AUTO_ADDED_TILES -> { Settings.Secure.QS_AUTO_ADDED_TILES -> {
restoredTiles?.let { tiles -> restoredTiles?.let { restoredTiles ->
val restoredAutoAdded = intent val restoredAutoAdded = intent
.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE) .getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE)
?.split(",") ?.split(DELIMITER)
?: emptyList() ?: emptyList()
val autoAddedBeforeRestore = intent val autoAddedBeforeRestore = intent
.getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE) .getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE)
?.split(",") ?.split(DELIMITER)
?: emptyList() ?: emptyList()
val tilesToRemove = restoredAutoAdded.filter { it !in tiles } val tilesToRemove = restoredAutoAdded.filter { it !in restoredTiles }
if (tilesToRemove.isNotEmpty()) { if (tilesToRemove.isNotEmpty()) {
qsHost.removeTiles(tilesToRemove) qsHost.removeTiles(tilesToRemove)
} }
@@ -180,6 +182,9 @@ class AutoAddTracker @VisibleForTesting constructor(
registerBroadcastReceiver() registerBroadcastReceiver()
} }
fun getRestoredTilePosition(tile: String): Int =
restoredTiles?.get(tile)?.index ?: QSTileHost.POSITION_AT_END
/** /**
* Returns `true` if the tile has been auto-added before * Returns `true` if the tile has been auto-added before
*/ */
@@ -222,7 +227,7 @@ class AutoAddTracker @VisibleForTesting constructor(
} }
private fun getTilesFromListLocked(): String { private fun getTilesFromListLocked(): String {
return TextUtils.join(",", autoAdded) return TextUtils.join(DELIMITER, autoAdded)
} }
private fun saveTiles(tiles: String) { private fun saveTiles(tiles: String) {
@@ -245,7 +250,7 @@ class AutoAddTracker @VisibleForTesting constructor(
private fun getAdded(): Collection<String> { private fun getAdded(): Collection<String> {
val current = secureSettings.getStringForUser(Settings.Secure.QS_AUTO_ADDED_TILES, userId) val current = secureSettings.getStringForUser(Settings.Secure.QS_AUTO_ADDED_TILES, userId)
return current?.split(",") ?: emptySet() return current?.split(DELIMITER) ?: emptySet()
} }
override fun dump(pw: PrintWriter, args: Array<out String>) { override fun dump(pw: PrintWriter, args: Array<out String>) {
@@ -281,4 +286,6 @@ class AutoAddTracker @VisibleForTesting constructor(
) )
} }
} }
private data class AutoTile(val index: Int, val tileType: String)
} }

View File

@@ -279,7 +279,8 @@ public class AutoTileManager implements UserAwareController {
public void onManagedProfileChanged() { public void onManagedProfileChanged() {
if (mManagedProfileController.hasActiveProfile()) { if (mManagedProfileController.hasActiveProfile()) {
if (mAutoTracker.isAdded(WORK)) return; if (mAutoTracker.isAdded(WORK)) return;
mHost.addTile(WORK); final int position = mAutoTracker.getRestoredTilePosition(WORK);
mHost.addTile(WORK, position);
mAutoTracker.setTileAdded(WORK); mAutoTracker.setTileAdded(WORK);
} else { } else {
if (!mAutoTracker.isAdded(WORK)) return; if (!mAutoTracker.isAdded(WORK)) return;

View File

@@ -59,6 +59,7 @@ import java.util.concurrent.Executor;
@SmallTest @SmallTest
public class AutoAddTrackerTest extends SysuiTestCase { public class AutoAddTrackerTest extends SysuiTestCase {
private static final int END_POSITION = -1;
private static final int USER = 0; private static final int USER = 0;
@Mock @Mock
@@ -141,6 +142,29 @@ public class AutoAddTrackerTest extends SysuiTestCase {
assertTrue(mAutoTracker.isAdded(SAVER)); assertTrue(mAutoTracker.isAdded(SAVER));
} }
@Test
public void testRestoredTilePositionPreserved() {
verify(mBroadcastDispatcher).registerReceiver(
mBroadcastReceiverArgumentCaptor.capture(), any(), any(), any(), anyInt(), any());
String restoredTiles = "saver,internet,work,cast";
Intent restoreTilesIntent = makeRestoreIntent(Secure.QS_TILES, null, restoredTiles);
mBroadcastReceiverArgumentCaptor.getValue().onReceive(mContext, restoreTilesIntent);
assertEquals(2, mAutoTracker.getRestoredTilePosition("work"));
}
@Test
public void testNoRestoredTileReturnsEndPosition() {
verify(mBroadcastDispatcher).registerReceiver(
mBroadcastReceiverArgumentCaptor.capture(), any(), any(), any(), anyInt(), any());
Intent restoreTilesIntent = makeRestoreIntent(Secure.QS_TILES, null, null);
mBroadcastReceiverArgumentCaptor.getValue().onReceive(mContext, restoreTilesIntent);
assertEquals(END_POSITION, mAutoTracker.getRestoredTilePosition("work"));
}
@Test @Test
public void testBroadcastReceiverRegistered() { public void testBroadcastReceiverRegistered() {
verify(mBroadcastDispatcher).registerReceiver( verify(mBroadcastDispatcher).registerReceiver(

View File

@@ -510,6 +510,7 @@ public class AutoTileManagerTest extends SysuiTestCase {
@Test @Test
public void managedProfileAdded_tileAdded() { public void managedProfileAdded_tileAdded() {
when(mAutoAddTracker.isAdded(eq("work"))).thenReturn(false); when(mAutoAddTracker.isAdded(eq("work"))).thenReturn(false);
when(mAutoAddTracker.getRestoredTilePosition(eq("work"))).thenReturn(2);
mAutoTileManager = createAutoTileManager(mContext); mAutoTileManager = createAutoTileManager(mContext);
Mockito.doAnswer((Answer<Object>) invocation -> { Mockito.doAnswer((Answer<Object>) invocation -> {
mManagedProfileCallback = invocation.getArgument(0); mManagedProfileCallback = invocation.getArgument(0);
@@ -520,7 +521,7 @@ public class AutoTileManagerTest extends SysuiTestCase {
mManagedProfileCallback.onManagedProfileChanged(); mManagedProfileCallback.onManagedProfileChanged();
verify(mQsTileHost, times(1)).addTile(eq("work")); verify(mQsTileHost, times(1)).addTile(eq("work"), eq(2));
verify(mAutoAddTracker, times(1)).setTileAdded(eq("work")); verify(mAutoAddTracker, times(1)).setTileAdded(eq("work"));
} }