Make detached task trimmable
Otherwise Task#isOnHomeDisplay also returns false for a detached task, which causes a task without activities is not trimmable even if it is exclude-from-recent. Fix: 185481296 Test: atest RecentTasksTest#testVisibleTasks_excludedFromRecents Change-Id: I66d494376bc750563b914b18e9f4a999913c70e9
This commit is contained in:
@@ -1433,20 +1433,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;
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user