Return right activities in getTopVisibleActivities method

Currently, it will only return a top visible activity for every
visible root task in the getTopVisibleActivities method.
On a split screen, there will be two visible activities in the
same root task. It will miss to return an activity when using
the getTopVisibleActivities method on the split screen.

We need to return right activities on the split screen in
getTopVisibleActivities method.

Bug: 245507506
Test: atest CtsVoiceInteractionTestCases
Test: manual test
Change-Id: Id9df59be04bfe805a160d41f044386c3d20eecb6
This commit is contained in:
lpeter
2023-05-02 13:37:09 +00:00
parent f2ec83ae6d
commit e8e9069b3a
2 changed files with 20 additions and 3 deletions

View File

@@ -171,6 +171,9 @@ public abstract class ActivityTaskManagerInternal {
/**
* Returns the top activity from each of the currently visible root tasks, and the related task
* id. The first entry will be the focused activity.
*
* <p>NOTE: If the top activity is in the split screen, the other activities in the same split
* screen will also be returned.
*/
public abstract List<ActivityAssistInfo> getTopVisibleActivities();

View File

@@ -1741,9 +1741,13 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
/**
* @return a list of pairs, containing activities and their task id which are the top ones in
* each visible root task. The first entry will be the focused activity.
*
* <p>NOTE: If the top activity is in the split screen, the other activities in the same split
* screen will also be returned.
*/
List<ActivityAssistInfo> getTopVisibleActivities() {
final ArrayList<ActivityAssistInfo> topVisibleActivities = new ArrayList<>();
final ArrayList<ActivityAssistInfo> activityAssistInfos = new ArrayList<>();
final Task topFocusedRootTask = getTopDisplayFocusedRootTask();
// Traverse all displays.
forAllRootTasks(rootTask -> {
@@ -1751,11 +1755,21 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
if (rootTask.shouldBeVisible(null /* starting */)) {
final ActivityRecord top = rootTask.getTopNonFinishingActivity();
if (top != null) {
ActivityAssistInfo visibleActivity = new ActivityAssistInfo(top);
activityAssistInfos.clear();
activityAssistInfos.add(new ActivityAssistInfo(top));
// Check if the activity on the split screen.
final Task adjacentTask = top.getTask().getAdjacentTask();
if (adjacentTask != null) {
final ActivityRecord adjacentActivityRecord =
adjacentTask.getTopNonFinishingActivity();
if (adjacentActivityRecord != null) {
activityAssistInfos.add(new ActivityAssistInfo(adjacentActivityRecord));
}
}
if (rootTask == topFocusedRootTask) {
topVisibleActivities.add(0, visibleActivity);
topVisibleActivities.addAll(0, activityAssistInfos);
} else {
topVisibleActivities.add(visibleActivity);
topVisibleActivities.addAll(activityAssistInfos);
}
}
}