Only remove visible recent tasks for the current user
Bug: 128389239
Test: atest WmTests:RecentTasksTest
Change-Id: I13d1fcff8cda0e3a7ddbdb54790f6c24b6763657
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 9a8824f..98c37e6 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -2084,7 +2084,7 @@
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
try {
- getRecentTasks().removeAllVisibleTasks();
+ getRecentTasks().removeAllVisibleTasks(mAmInternal.getCurrentUserId());
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index 24b0213..d6c7b21 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -653,10 +653,10 @@
}
}
- void removeAllVisibleTasks() {
+ void removeAllVisibleTasks(int userId) {
for (int i = mTasks.size() - 1; i >= 0; --i) {
final TaskRecord tr = mTasks.get(i);
- if (isVisibleRecentTask(tr)) {
+ if (tr.userId == userId && isVisibleRecentTask(tr)) {
mTasks.remove(i);
notifyTaskRemoved(tr, true /* wasTrimmed */, true /* killProcess */);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
index 08e6ce4..af04858 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -625,7 +625,7 @@
// excludedTask is not trimmed.
assertTrimmed(mTasks.get(0));
- mRecentTasks.removeAllVisibleTasks();
+ mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID);
// Only visible tasks removed.
assertTrimmed(mTasks.get(0), mTasks.get(1), mTasks.get(2), mTasks.get(3));
@@ -849,11 +849,31 @@
mRecentTasks.add(t7);
// Remove all the visible tasks and ensure that they are removed
- mRecentTasks.removeAllVisibleTasks();
+ mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID);
assertTrimmed(t1, t2, t3, t4, t5, t6, t7);
}
@Test
+ public void testRemoveAllVisibleTasksPerUser() {
+ mRecentTasks.setParameters(-1 /* min */, 3 /* max */, 100 /* ms */);
+
+ // Create a visible task per user
+ TaskRecord t1 = createTaskBuilder(".Task1")
+ .setUserId(TEST_USER_0_ID)
+ .build();
+ mRecentTasks.add(t1);
+
+ TaskRecord t2 = createTaskBuilder(".Task1")
+ .setUserId(TEST_USER_1_ID)
+ .build();
+ mRecentTasks.add(t2);
+
+ // Remove all the visible tasks and ensure that they are removed
+ mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID);
+ assertTrimmed(t1);
+ }
+
+ @Test
public void testNotRestoreRecentTaskApis() {
final TaskRecord task = createTaskBuilder(".Task").build();
final int taskId = task.taskId;