From cdd4c3fa982ac6f158a0eb67c7a07889de322098 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 17 Apr 2019 15:40:11 -0700 Subject: [PATCH] Ensure that we are removing recent tasks for a user including their profiles - Also ensure that only the recents component can freeze the task list Bug: 130662533 Test: atest RecentTasksTest Change-Id: I0bdebcfd03f998b5a897e7622e9207c442b05957 --- .../android/server/wm/ActivityStackSupervisor.java | 3 ++- .../core/java/com/android/server/wm/RecentTasks.java | 4 +++- .../src/com/android/server/wm/RecentTasksTest.java | 11 ++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index 5790a1b39493b..9c97674dc3c36 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -2717,7 +2717,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { if (activityOptions != null) { activityType = activityOptions.getLaunchActivityType(); windowingMode = activityOptions.getLaunchWindowingMode(); - if (activityOptions.freezeRecentTasksReordering()) { + if (activityOptions.freezeRecentTasksReordering() + && mRecentTasks.isCallerRecents(callingUid)) { mRecentTasks.setFreezeTaskListReordering(); } } diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 7dcbedf811c2a..23911e61a68df 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -653,9 +653,11 @@ class RecentTasks { } void removeAllVisibleTasks(int userId) { + Set profileIds = getProfileIds(userId); for (int i = mTasks.size() - 1; i >= 0; --i) { final TaskRecord tr = mTasks.get(i); - if (tr.userId == userId && isVisibleRecentTask(tr)) { + if (!profileIds.contains(tr.userId)) continue; + if (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 3392bc43e5686..a1999c9017028 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java @@ -860,14 +860,19 @@ public class RecentTasksTest extends ActivityTestsBase { .build(); mRecentTasks.add(t1); - TaskRecord t2 = createTaskBuilder(".Task1") - .setUserId(TEST_USER_1_ID) + TaskRecord t2 = createTaskBuilder(".Task2") + .setUserId(TEST_QUIET_USER_ID) .build(); mRecentTasks.add(t2); + TaskRecord t3 = createTaskBuilder(".Task3") + .setUserId(TEST_USER_1_ID) + .build(); + mRecentTasks.add(t3); + // Remove all the visible tasks and ensure that they are removed mRecentTasks.removeAllVisibleTasks(TEST_USER_0_ID); - assertTrimmed(t1); + assertTrimmed(t1, t2); } @Test