summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-09-24 00:12:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-24 00:12:44 +0000
commit11e3e6ad4c3495f8037ae5155f10af967567169c (patch)
tree3331e5b6de0cecd363eadb1a0bf0893fe31c9a2a
parent8760c39a3d9e20b1756d6452dd0fd061c0de5d45 (diff)
parent1b3c829fd2fbb420a7c6c3e596f2e835f1a82009 (diff)
Merge "Change method of checking for active task from index check to top visible activity check" into main
-rw-r--r--services/core/Android.bp1
-rw-r--r--services/core/java/com/android/server/wm/RecentTasks.java15
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java109
3 files changed, 112 insertions, 13 deletions
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 4e36e3ff9188..c6e599e8edee 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -225,6 +225,7 @@ java_library_static {
"updates_flags_lib",
"com_android_server_accessibility_flags_lib",
"//frameworks/libs/systemui:com_android_systemui_shared_flags_lib",
+ "com_android_launcher3_flags_lib",
"com_android_wm_shell_flags_lib",
"com.android.server.utils_aconfig-java",
"service-jobscheduler-deviceidle.flags-aconfig-java",
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index 7aede8b4a068..9da848aa05d8 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -38,6 +38,7 @@ import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_TASKS;
+import static com.android.launcher3.Flags.enableRefactorTaskThumbnail;
import static com.android.server.wm.ActivityRecord.State.RESUMED;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS_TRIM_TASKS;
@@ -1493,12 +1494,20 @@ class RecentTasks {
if (isExcludeFromRecents) {
if (DEBUG_RECENTS_TRIM_TASKS) {
Slog.d(TAG,
- "\texcludeFromRecents=true, taskIndex = " + taskIndex
- + ", isOnHomeDisplay: " + task.isOnHomeDisplay());
+ "\texcludeFromRecents=true,"
+ + " taskIndex: " + taskIndex
+ + " getTopVisibleActivity: " + task.getTopVisibleActivity()
+ + " isOnHomeDisplay: " + task.isOnHomeDisplay());
}
// The Recents is only supported on default display now, we should only keep the
// most recent task of home display.
- return (task.isOnHomeDisplay() && taskIndex == 0);
+ boolean isMostRecentTask;
+ if (enableRefactorTaskThumbnail()) {
+ isMostRecentTask = task.getTopVisibleActivity() != null;
+ } else {
+ isMostRecentTask = taskIndex == 0;
+ }
+ return (task.isOnHomeDisplay() && isMostRecentTask);
}
}
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 8f3d3c5a86e9..e0344d73f540 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -70,7 +70,10 @@ import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserManager;
+import android.platform.test.annotations.DisableFlags;
+import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.util.ArraySet;
import android.util.IntArray;
import android.util.SparseBooleanArray;
@@ -79,9 +82,12 @@ import android.window.TaskSnapshot;
import androidx.test.filters.MediumTest;
+import com.android.launcher3.Flags;
import com.android.server.wm.RecentTasks.Callbacks;
import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -122,6 +128,10 @@ public class RecentTasksTest extends WindowTestsBase {
private CallbacksRecorder mCallbacksRecorder;
+ @Rule
+ public SetFlagsRule mSetFlagsRule =
+ new SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT);
+
@Before
public void setUp() throws Exception {
mTaskPersister = new TestTaskPersister(mContext.getFilesDir());
@@ -697,14 +707,31 @@ public class RecentTasksTest extends WindowTestsBase {
}
@Test
+ @DisableFlags(Flags.FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL)
public void testVisibleTasks_excludedFromRecents() {
+ testVisibleTasks_excludedFromRecents_internal();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL)
+ public void testVisibleTasks_excludedFromRecents_withRefactorFlag() {
+ testVisibleTasks_excludedFromRecents_internal();
+ }
+
+ private void testVisibleTasks_excludedFromRecents_internal() {
mRecentTasks.setParameters(-1 /* min */, 4 /* max */, -1 /* ms */);
- Task excludedTask1 = createTaskBuilder(".ExcludedTask1")
+ Task invisibleExcludedTask = createTaskBuilder(".ExcludedTask1")
.setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .setCreateActivity(true)
.build();
- Task excludedTask2 = createTaskBuilder(".ExcludedTask2")
+ ActivityRecord activityRecord = invisibleExcludedTask.getTopMostActivity();
+ activityRecord.setVisibleRequested(false);
+ activityRecord.setVisible(false);
+
+ Task visibleExcludedTask = createTaskBuilder(".ExcludedTask2")
.setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .setCreateActivity(true)
.build();
Task detachedExcludedTask = createTaskBuilder(".DetachedExcludedTask")
.setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
@@ -718,18 +745,79 @@ public class RecentTasksTest extends WindowTestsBase {
assertFalse(detachedExcludedTask.isAttached());
mRecentTasks.add(detachedExcludedTask);
- mRecentTasks.add(excludedTask1);
+ mRecentTasks.add(invisibleExcludedTask);
mRecentTasks.add(mTasks.get(0));
mRecentTasks.add(mTasks.get(1));
mRecentTasks.add(mTasks.get(2));
- mRecentTasks.add(excludedTask2);
+ mRecentTasks.add(visibleExcludedTask);
- // Except the first-most excluded task, other excluded tasks should be trimmed.
- triggerTrimAndAssertTrimmed(excludedTask1, detachedExcludedTask);
+ // Excluded tasks should be trimmed, except those with a visible activity.
+ triggerTrimAndAssertTrimmed(invisibleExcludedTask, detachedExcludedTask);
}
@Test
+ @Ignore("b/342627272")
+ @DisableFlags(Flags.FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL)
+ public void testVisibleTasks_excludedFromRecents_visibleTaskNotFirstTask() {
+ testVisibleTasks_excludedFromRecents_visibleTaskNotFirstTask_internal();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL)
+ public void testVisibleTasks_excludedFromRecents_visibleTaskNotFirstTask_withRefactorFlag() {
+ testVisibleTasks_excludedFromRecents_visibleTaskNotFirstTask_internal();
+ }
+
+ private void testVisibleTasks_excludedFromRecents_visibleTaskNotFirstTask_internal() {
+ mRecentTasks.setParameters(-1 /* min */, 4 /* max */, -1 /* ms */);
+
+ Task invisibleExcludedTask = createTaskBuilder(".ExcludedTask1")
+ .setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .setCreateActivity(true)
+ .build();
+ ActivityRecord activityRecord = invisibleExcludedTask.getTopMostActivity();
+ activityRecord.setVisibleRequested(false);
+ activityRecord.setVisible(false);
+
+ Task visibleExcludedTask = createTaskBuilder(".ExcludedTask2")
+ .setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .setCreateActivity(true)
+ .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(visibleExcludedTask);
+ mRecentTasks.add(mTasks.get(0));
+ mRecentTasks.add(mTasks.get(1));
+ mRecentTasks.add(mTasks.get(2));
+ mRecentTasks.add(invisibleExcludedTask);
+
+ // Excluded tasks should be trimmed, except those with a visible activity.
+ triggerTrimAndAssertTrimmed(invisibleExcludedTask, detachedExcludedTask);
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL)
public void testVisibleTasks_excludedFromRecents_firstTaskNotVisible() {
+ testVisibleTasks_excludedFromRecents_firstTaskNotVisible_internal();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL)
+ public void testVisibleTasks_excludedFromRecents_firstTaskNotVisible_withRefactorFlag() {
+ testVisibleTasks_excludedFromRecents_firstTaskNotVisible_internal();
+ }
+
+ private void testVisibleTasks_excludedFromRecents_firstTaskNotVisible_internal() {
// Create some set of tasks, some of which are visible and some are not
Task homeTask = createTaskBuilder("com.android.pkg1", ".HomeTask")
.setParentTask(mTaskContainer.getRootHomeTask())
@@ -738,11 +826,12 @@ public class RecentTasksTest extends WindowTestsBase {
mRecentTasks.add(homeTask);
Task excludedTask1 = createTaskBuilder(".ExcludedTask1")
.setFlags(FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+ .setCreateActivity(true)
.build();
excludedTask1.mUserSetupComplete = true;
mRecentTasks.add(excludedTask1);
- // Expect that the first visible excluded-from-recents task is visible
+ // Expect that the visible excluded-from-recents task is visible
assertGetRecentTasksOrder(0 /* flags */, excludedTask1);
}
@@ -1439,9 +1528,9 @@ public class RecentTasksTest extends WindowTestsBase {
*/
private void assertGetRecentTasksOrder(int getRecentTaskFlags, Task... expectedTasks) {
List<RecentTaskInfo> infos = getRecentTasks(getRecentTaskFlags);
- assertTrue(expectedTasks.length == infos.size());
- for (int i = 0; i < infos.size(); i++) {
- assertTrue(expectedTasks[i].mTaskId == infos.get(i).taskId);
+ assertEquals(expectedTasks.length, infos.size());
+ for (int i = 0; i < infos.size(); i++) {
+ assertEquals(expectedTasks[i].mTaskId, infos.get(i).taskId);
}
}