Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8e9069b authored by lpeter's avatar lpeter
Browse files

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
parent f2ec83ae
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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();

+17 −3
Original line number Diff line number Diff line
@@ -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);
                    }
                }
            }