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:
@@ -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
|
||||||
*/
|
*/
|
||||||
@@ -196,12 +201,12 @@ class AutoAddTracker @VisibleForTesting constructor(
|
|||||||
*/
|
*/
|
||||||
fun setTileAdded(tile: String) {
|
fun setTileAdded(tile: String) {
|
||||||
val tiles = synchronized(autoAdded) {
|
val tiles = synchronized(autoAdded) {
|
||||||
if (autoAdded.add(tile)) {
|
if (autoAdded.add(tile)) {
|
||||||
getTilesFromListLocked()
|
getTilesFromListLocked()
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
tiles?.let { saveTiles(it) }
|
tiles?.let { saveTiles(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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)
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user