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

Commit 3d569572 authored by Gaurav Bhola's avatar Gaurav Bhola
Browse files

Always create root task for ACTIVITY_TYPE_RECENTS

- When alwaysCreateRootTask() returns false lets say for recents
  activity, it leads to double nesting of root tasks on top of recents.
- This double nesting works fine for phones where recents is
  full-screen but it leads to inconsistent state for the cases where
  the recents activity itself needs to be in a multi window mode i.e.
  inside a launch root task.

Fix: 277088827
Test: atest TaskDisplayAreaTests
Change-Id: I3a097028b58b451a33932eb039ae9fb970d734df
parent d373da3c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6045,7 +6045,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    static boolean alwaysCreateRootTask(int windowingMode, int activityType) {
        // Always create a root task for fullscreen, freeform, and multi windowing
        // modes so that we can manage visual ordering and return types correctly.
        return activityType == ACTIVITY_TYPE_STANDARD
        return (activityType == ACTIVITY_TYPE_STANDARD || activityType == ACTIVITY_TYPE_RECENTS)
                && (windowingMode == WINDOWING_MODE_FULLSCREEN
                || windowingMode == WINDOWING_MODE_FREEFORM
                || windowingMode == WINDOWING_MODE_PINNED
+16 −13
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ import com.android.server.wm.LaunchParamsController.LaunchParams;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.List;

/**
 * Tests for the {@link TaskDisplayArea} container.
 *
@@ -349,7 +351,9 @@ public class TaskDisplayAreaTests extends WindowTestsBase {
    @Test
    public void testReuseTaskAsRootTask() {
        final Task candidateTask = createTask(mDisplayContent);
        final int type = ACTIVITY_TYPE_STANDARD;
        List<Integer> activityTypesWithReusableRootTask = List.of(ACTIVITY_TYPE_STANDARD,
                ACTIVITY_TYPE_RECENTS);
        for (Integer type : activityTypesWithReusableRootTask) {
            assertGetOrCreateRootTask(WINDOWING_MODE_FULLSCREEN, type, candidateTask,
                    true /* reuseCandidate */);
            assertGetOrCreateRootTask(WINDOWING_MODE_UNDEFINED, type, candidateTask,
@@ -360,12 +364,11 @@ public class TaskDisplayAreaTests extends WindowTestsBase {
                    true /* reuseCandidate */);
            assertGetOrCreateRootTask(WINDOWING_MODE_PINNED, type, candidateTask,
                    true /* reuseCandidate */);
        }

        final int windowingMode = WINDOWING_MODE_FULLSCREEN;
        assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_HOME, candidateTask,
                false /* reuseCandidate */);
        assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_RECENTS, candidateTask,
                false /* reuseCandidate */);
        assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_ASSISTANT, candidateTask,
                false /* reuseCandidate */);
        assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_DREAM, candidateTask,