From eabac83ad161309e49e7b3de16cb3bd1c6c8ccaf Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Fri, 30 Oct 2020 20:19:12 +0800 Subject: [PATCH] Append organized child task info for task created by organizer Appends organized child task info for task created by organizer in order to present organized child tasks in overview. Fix: 172043048 Test: atest RecentsTest Change-Id: Idc213fbc524ff9606e14a8d7071e1a452934ae1c --- core/java/android/app/ActivityManager.java | 9 ++++++++ .../com/android/server/wm/RecentTasks.java | 16 ++++++++++++-- .../android/server/wm/RecentTasksTest.java | 22 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index ec287fe106343..b2a039f4d1b31 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1693,6 +1693,13 @@ public class ActivityManager { @Deprecated public int affiliatedTaskId; + /** + * Information of organized child tasks. + * + * @hide + */ + public ArrayList childrenTaskInfos = new ArrayList<>(); + public RecentTaskInfo() { } @@ -1708,6 +1715,7 @@ public class ActivityManager { public void readFromParcel(Parcel source) { id = source.readInt(); persistentId = source.readInt(); + childrenTaskInfos = source.readArrayList(RecentTaskInfo.class.getClassLoader()); super.readFromParcel(source); } @@ -1715,6 +1723,7 @@ public class ActivityManager { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeInt(persistentId); + dest.writeList(childrenTaskInfos); super.writeToParcel(dest, flags); } diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 0503c0de51952..37f9082f22ee3 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -1874,11 +1874,23 @@ class RecentTasks { * Creates a new RecentTaskInfo from a Task. */ ActivityManager.RecentTaskInfo createRecentTaskInfo(Task tr, boolean stripExtras) { - ActivityManager.RecentTaskInfo rti = new ActivityManager.RecentTaskInfo(); + final ActivityManager.RecentTaskInfo rti = new ActivityManager.RecentTaskInfo(); tr.fillTaskInfo(rti, stripExtras); - // Fill in some deprecated values + // Fill in some deprecated values. rti.id = rti.isRunning ? rti.taskId : INVALID_TASK_ID; rti.persistentId = rti.taskId; + + // Fill in organized child task info for the task created by organizer. + if (tr.mCreatedByOrganizer) { + for (int i = tr.getChildCount() - 1; i >= 0; i--) { + final Task childTask = tr.getChildAt(i).asTask(); + if (childTask != null && childTask.isOrganized()) { + final ActivityManager.RecentTaskInfo cti = new ActivityManager.RecentTaskInfo(); + childTask.fillTaskInfo(cti); + rti.childrenTaskInfos.add(cti); + } + } + } return rti; } 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 bea0d8e60c403..d348389a44b18 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java @@ -473,6 +473,28 @@ public class RecentTasksTest extends WindowTestsBase { true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList().size()); } + @Test + public void testAppendOrganizedChildTaskInfo() { + final Task root = createTaskBuilder(".CreatedByOrganizerRoot").build(); + root.mCreatedByOrganizer = true; + // Add organized and non-organized child. + final Task child1 = createTaskBuilder(".Task1").setParentTask(root).build(); + final Task child2 = createTaskBuilder(".Task2").setParentTask(root).build(); + doReturn(true).when(child1).isOrganized(); + doReturn(false).when(child2).isOrganized(); + mRecentTasks.add(root); + + doNothing().when(mRecentTasks).loadUserRecentsLocked(anyInt()); + doReturn(true).when(mRecentTasks).isUserRunning(anyInt(), anyInt()); + final List infos = mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */, + true /* getTasksAllowed */, TEST_USER_0_ID, 0 /* callingUid */).getList(); + + // Make sure only organized child will be appended. + final List childrenTaskInfos = infos.get(0).childrenTaskInfos; + assertEquals(childrenTaskInfos.size(), 1); + assertEquals(childrenTaskInfos.get(0).taskId, child1.mTaskId); + } + @Test public void testAddTasksHomeClearUntrackedTasks_expectFinish() { // There may be multiple tasks with the same base intent by flags (FLAG_ACTIVITY_NEW_TASK |