Loading services/core/java/com/android/server/wm/RecentTasks.java +4 −6 Original line number Diff line number Diff line Loading @@ -1436,20 +1436,18 @@ class RecentTasks { /** @return whether the given task can be trimmed even if it is outside the visible range. */ protected boolean isTrimmable(Task task) { final Task rootTask = task.getRootTask(); // No stack for task, just trim it if (rootTask == null) { // The task was detached, just trim it. if (!task.isAttached()) { return true; } // Ignore tasks from different displays // TODO (b/115289124): No Recents on non-default displays. if (!rootTask.isOnHomeDisplay()) { if (!task.isOnHomeDisplay()) { return false; } final Task rootHomeTask = rootTask.getDisplayArea().getRootHomeTask(); final Task rootHomeTask = task.getDisplayArea().getRootHomeTask(); // Home task does not exist. Don't trim the task. if (rootHomeTask == null) { return false; Loading services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +13 −3 Original line number Diff line number Diff line Loading @@ -641,7 +641,6 @@ public class RecentTasksTest extends WindowTestsBase { @Test public void testVisibleTasks_excludedFromRecents() { mRecentTasks.setOnlyTestVisibleRange(); mRecentTasks.setParameters(-1 /* min */, 4 /* max */, -1 /* ms */); Task excludedTask1 = createTaskBuilder(".ExcludedTask1") Loading @@ -650,15 +649,26 @@ public class RecentTasksTest extends WindowTestsBase { Task excludedTask2 = createTaskBuilder(".ExcludedTask2") .setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) .build(); Task detachedExcludedTask = createTaskBuilder(".DetachedExcludedTask") .setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) .build(); // Move home to front so other task can satisfy the condition in RecentTasks#isTrimmable. mRootWindowContainer.getDefaultTaskDisplayArea().getRootHomeTask().moveToFront("test"); // Avoid Task#autoRemoveFromRecents when removing from parent. detachedExcludedTask.setHasBeenVisible(true); detachedExcludedTask.removeImmediately(); assertFalse(detachedExcludedTask.isAttached()); mRecentTasks.add(detachedExcludedTask); mRecentTasks.add(excludedTask1); mRecentTasks.add(mTasks.get(0)); mRecentTasks.add(mTasks.get(1)); mRecentTasks.add(mTasks.get(2)); mRecentTasks.add(excludedTask2); // The last excluded task should be trimmed, while the first-most excluded task should not triggerTrimAndAssertTrimmed(excludedTask1); // Except the first-most excluded task, other excluded tasks should be trimmed. triggerTrimAndAssertTrimmed(excludedTask1, detachedExcludedTask); } @Test Loading Loading
services/core/java/com/android/server/wm/RecentTasks.java +4 −6 Original line number Diff line number Diff line Loading @@ -1436,20 +1436,18 @@ class RecentTasks { /** @return whether the given task can be trimmed even if it is outside the visible range. */ protected boolean isTrimmable(Task task) { final Task rootTask = task.getRootTask(); // No stack for task, just trim it if (rootTask == null) { // The task was detached, just trim it. if (!task.isAttached()) { return true; } // Ignore tasks from different displays // TODO (b/115289124): No Recents on non-default displays. if (!rootTask.isOnHomeDisplay()) { if (!task.isOnHomeDisplay()) { return false; } final Task rootHomeTask = rootTask.getDisplayArea().getRootHomeTask(); final Task rootHomeTask = task.getDisplayArea().getRootHomeTask(); // Home task does not exist. Don't trim the task. if (rootHomeTask == null) { return false; Loading
services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +13 −3 Original line number Diff line number Diff line Loading @@ -641,7 +641,6 @@ public class RecentTasksTest extends WindowTestsBase { @Test public void testVisibleTasks_excludedFromRecents() { mRecentTasks.setOnlyTestVisibleRange(); mRecentTasks.setParameters(-1 /* min */, 4 /* max */, -1 /* ms */); Task excludedTask1 = createTaskBuilder(".ExcludedTask1") Loading @@ -650,15 +649,26 @@ public class RecentTasksTest extends WindowTestsBase { Task excludedTask2 = createTaskBuilder(".ExcludedTask2") .setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) .build(); Task detachedExcludedTask = createTaskBuilder(".DetachedExcludedTask") .setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) .build(); // Move home to front so other task can satisfy the condition in RecentTasks#isTrimmable. mRootWindowContainer.getDefaultTaskDisplayArea().getRootHomeTask().moveToFront("test"); // Avoid Task#autoRemoveFromRecents when removing from parent. detachedExcludedTask.setHasBeenVisible(true); detachedExcludedTask.removeImmediately(); assertFalse(detachedExcludedTask.isAttached()); mRecentTasks.add(detachedExcludedTask); mRecentTasks.add(excludedTask1); mRecentTasks.add(mTasks.get(0)); mRecentTasks.add(mTasks.get(1)); mRecentTasks.add(mTasks.get(2)); mRecentTasks.add(excludedTask2); // The last excluded task should be trimmed, while the first-most excluded task should not triggerTrimAndAssertTrimmed(excludedTask1); // Except the first-most excluded task, other excluded tasks should be trimmed. triggerTrimAndAssertTrimmed(excludedTask1, detachedExcludedTask); } @Test Loading