diff options
4 files changed, 50 insertions, 17 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.kt b/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.kt index b48ea23dbf27..be93550158c6 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/AutoAddTracker.kt @@ -43,6 +43,7 @@ import java.util.concurrent.Executor import javax.inject.Inject private const val TAG = "AutoAddTracker" +private const val DELIMITER = "," /** * Class to track tiles that have been auto-added @@ -67,7 +68,7 @@ class AutoAddTracker @VisibleForTesting constructor( @GuardedBy("autoAdded") private val autoAdded = ArraySet<String>() - private var restoredTiles: Set<String>? = null + private var restoredTiles: Map<String, AutoTile>? = null override val currentUserId: Int get() = userId @@ -98,25 +99,26 @@ class AutoAddTracker @VisibleForTesting constructor( when (intent.getStringExtra(Intent.EXTRA_SETTING_NAME)) { Settings.Secure.QS_TILES -> { restoredTiles = intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE) - ?.split(",") - ?.toSet() + ?.split(DELIMITER) + ?.mapIndexed(::AutoTile) + ?.associateBy(AutoTile::tileType) ?: run { Log.w(TAG, "Null restored tiles for user $userId") - emptySet() + emptyMap() } } Settings.Secure.QS_AUTO_ADDED_TILES -> { - restoredTiles?.let { tiles -> + restoredTiles?.let { restoredTiles -> val restoredAutoAdded = intent .getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE) - ?.split(",") + ?.split(DELIMITER) ?: emptyList() val autoAddedBeforeRestore = intent .getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE) - ?.split(",") + ?.split(DELIMITER) ?: emptyList() - val tilesToRemove = restoredAutoAdded.filter { it !in tiles } + val tilesToRemove = restoredAutoAdded.filter { it !in restoredTiles } if (tilesToRemove.isNotEmpty()) { qsHost.removeTiles(tilesToRemove) } @@ -180,6 +182,9 @@ class AutoAddTracker @VisibleForTesting constructor( registerBroadcastReceiver() } + fun getRestoredTilePosition(tile: String): Int = + restoredTiles?.get(tile)?.index ?: QSTileHost.POSITION_AT_END + /** * Returns `true` if the tile has been auto-added before */ @@ -196,12 +201,12 @@ class AutoAddTracker @VisibleForTesting constructor( */ fun setTileAdded(tile: String) { val tiles = synchronized(autoAdded) { - if (autoAdded.add(tile)) { - getTilesFromListLocked() - } else { - null - } + if (autoAdded.add(tile)) { + getTilesFromListLocked() + } else { + null } + } tiles?.let { saveTiles(it) } } @@ -222,7 +227,7 @@ class AutoAddTracker @VisibleForTesting constructor( } private fun getTilesFromListLocked(): String { - return TextUtils.join(",", autoAdded) + return TextUtils.join(DELIMITER, autoAdded) } private fun saveTiles(tiles: String) { @@ -245,7 +250,7 @@ class AutoAddTracker @VisibleForTesting constructor( private fun getAdded(): Collection<String> { 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>) { @@ -281,4 +286,6 @@ class AutoAddTracker @VisibleForTesting constructor( ) } } + + private data class AutoTile(val index: Int, val tileType: String) }
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java index 149ec545dfa7..8b1a02b05e0f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java @@ -279,7 +279,8 @@ public class AutoTileManager implements UserAwareController { public void onManagedProfileChanged() { if (mManagedProfileController.hasActiveProfile()) { if (mAutoTracker.isAdded(WORK)) return; - mHost.addTile(WORK); + final int position = mAutoTracker.getRestoredTilePosition(WORK); + mHost.addTile(WORK, position); mAutoTracker.setTileAdded(WORK); } else { if (!mAutoTracker.isAdded(WORK)) return; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java index 43fb1bd8636e..dee1cc8b0354 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java @@ -59,6 +59,7 @@ import java.util.concurrent.Executor; @SmallTest public class AutoAddTrackerTest extends SysuiTestCase { + private static final int END_POSITION = -1; private static final int USER = 0; @Mock @@ -142,6 +143,29 @@ public class AutoAddTrackerTest extends SysuiTestCase { } @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 public void testBroadcastReceiverRegistered() { verify(mBroadcastDispatcher).registerReceiver( any(), mIntentFilterArgumentCaptor.capture(), any(), eq(UserHandle.of(USER)), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java index 091bb5455d93..8cfcc075bfaf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java @@ -510,6 +510,7 @@ public class AutoTileManagerTest extends SysuiTestCase { @Test public void managedProfileAdded_tileAdded() { when(mAutoAddTracker.isAdded(eq("work"))).thenReturn(false); + when(mAutoAddTracker.getRestoredTilePosition(eq("work"))).thenReturn(2); mAutoTileManager = createAutoTileManager(mContext); Mockito.doAnswer((Answer<Object>) invocation -> { mManagedProfileCallback = invocation.getArgument(0); @@ -520,7 +521,7 @@ public class AutoTileManagerTest extends SysuiTestCase { 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")); } |