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

Commit ec0335cd authored by Chris Li's avatar Chris Li Committed by Automerger Merge Worker
Browse files

Merge "Only check canSpecifyOrientation at leaf Task" into sc-dev am: 1ac9e246

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13766643

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ibaf4eb659da1dc2bffe5fe9ed7aa2d76bafdd399
parents 04b20998 1ac9e246
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -3291,11 +3291,22 @@ class Task extends WindowContainer<WindowContainer> {

    @Override
    boolean handlesOrientationChangeFromDescendant() {
        return super.handlesOrientationChangeFromDescendant()
        if (!super.handlesOrientationChangeFromDescendant()) {
            return false;
        }

        // At task level, we want to check canSpecifyOrientation() based on the top activity type.
        // Do this only on leaf Task, so that the result is not affecting by the sibling leaf Task.
        // Otherwise, root Task will use the result from the top leaf Task, and all its child
        // leaf Tasks will rely on that from super.handlesOrientationChangeFromDescendant().
        if (!isLeafTask()) {
            return true;
        }

        // Check for leaf Task.
        // Display won't rotate for the orientation request if the Task/TaskDisplayArea
        // can't specify orientation.
                && canSpecifyOrientation()
                && getDisplayArea().canSpecifyOrientation();
        return canSpecifyOrientation() && getDisplayArea().canSpecifyOrientation();
    }

    void resize(boolean relayout, boolean forced) {
+20 −0
Original line number Diff line number Diff line
@@ -16,8 +16,11 @@

package com.android.server.wm;

import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -257,4 +260,21 @@ public class TaskTests extends WindowTestsBase {
        task.resolveOverrideConfiguration(parentConfig);
        assertThat(resolvedOverride.getWindowingMode()).isEqualTo(WINDOWING_MODE_UNDEFINED);
    }

    @Test
    public void testHandlesOrientationChangeFromDescendant() {
        final Task rootTask = createTaskStackOnDisplay(WINDOWING_MODE_MULTI_WINDOW,
                ACTIVITY_TYPE_STANDARD, mDisplayContent);
        final Task leafTask1 = createTaskInStack(rootTask, 0 /* userId */);
        final Task leafTask2 = createTaskInStack(rootTask, 0 /* userId */);
        leafTask1.getWindowConfiguration().setActivityType(ACTIVITY_TYPE_HOME);
        leafTask2.getWindowConfiguration().setActivityType(ACTIVITY_TYPE_STANDARD);

        assertEquals(leafTask2, rootTask.getTopChild());
        assertTrue(rootTask.handlesOrientationChangeFromDescendant());
        // Treat orientation request from home as handled.
        assertTrue(leafTask1.handlesOrientationChangeFromDescendant());
        // Orientation request from standard activity in multi window will not be handled.
        assertFalse(leafTask2.handlesOrientationChangeFromDescendant());
    }
}