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

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

Merge "Ignore orientation request from resizable apps in multi window" into...

Merge "Ignore orientation request from resizable apps in multi window" into sc-dev am: d6443b41 am: 5fc09fde am: 74be236d

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

Change-Id: I69170b9ff7cf8f775f182c8e09becf5db9ce9a60
parents 644a8174 74be236d
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -7030,7 +7030,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // TODO(b/181207944): Consider removing the if condition and always run
        // resolveFixedOrientationConfiguration() since this should be applied for all cases.
        if (isFixedOrientationLetterboxAllowed) {
            resolveFixedOrientationConfiguration(newParentConfiguration);
            resolveFixedOrientationConfiguration(newParentConfiguration, parentWindowingMode);
        }

        if (mCompatDisplayInsets != null) {
@@ -7177,16 +7177,21 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     * change and the requested orientation is different from the parent.
     *
     * <p>If letterboxed due to fixed orientation then aspect ratio restrictions are also applied
     * in this methiod.
     * in this method.
     */
    private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) {
    private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig,
            int windowingMode) {
        mLetterboxBoundsForFixedOrientationAndAspectRatio = null;
        if (handlesOrientationChangeFromDescendant()) {
            // No need to letterbox because of fixed orientation. Display will handle
            // fixed-orientation requests.
            return;
        }
        if (newParentConfig.windowConfiguration.getWindowingMode() == WINDOWING_MODE_PINNED) {
        if (WindowConfiguration.inMultiWindowMode(windowingMode) && isResizeable()) {
            // Ignore orientation request for resizable apps in multi window.
            return;
        }
        if (windowingMode == WINDOWING_MODE_PINNED) {
            // PiP bounds have higher priority than the requested orientation. Otherwise the
            // activity may be squeezed into a small piece.
            return;
+39 −6
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_IF_ALLOWLISTED;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_NEVER;
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
@@ -546,7 +547,7 @@ public class ActivityRecordTests extends WindowTestsBase {
    }

    @Test
    public void ignoreRequestedOrientationInSplitWindows() {
    public void ignoreRequestedOrientationForResizableInSplitWindows() {
        final ActivityRecord activity = createActivityWith2LevelTask();
        final Task task = activity.getTask();
        final Task rootTask = activity.getRootTask();
@@ -578,13 +579,45 @@ public class ActivityRecordTests extends WindowTestsBase {
        }
        task.setBounds(bounds);

        final int activityCurOrientation = activity.getConfiguration().orientation;

        // Requests orientation that's different from its bounds.
        activity.setRequestedOrientation(
                isScreenPortrait ? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE);
        activity.setRequestedOrientation(activityCurOrientation == ORIENTATION_LANDSCAPE
                ? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE);

        // Asserts it has orientation derived requested orientation (fixed orientation letterbox).
        assertEquals(isScreenPortrait ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE,
                activity.getConfiguration().orientation);
        // Asserts fixed orientation request is ignored, and the orientation is not changed
        // (fill Task).
        assertEquals(activityCurOrientation, activity.getConfiguration().orientation);
        assertFalse(activity.isLetterboxedForFixedOrientationAndAspectRatio());
    }

    @Test
    public void respectRequestedOrientationForNonResizableInSplitWindows() {
        final Task task = new TaskBuilder(mSupervisor)
                .setCreateParentTask(true).setCreateActivity(true).build();
        final Task rootTask = task.getRootTask();
        final ActivityRecord activity = new ActivityBuilder(mAtm)
                .setParentTask(task)
                .setOnTop(true)
                .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
                .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
                .build();

        // Task in landscape.
        rootTask.setWindowingMode(WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
        task.setBounds(0, 0, 1000, 500);
        assertEquals(ORIENTATION_LANDSCAPE, task.getConfiguration().orientation);

        // Asserts fixed orientation request is respected, and the orientation is not changed.
        assertEquals(ORIENTATION_PORTRAIT, activity.getConfiguration().orientation);

        // Clear size compat.
        activity.clearSizeCompatMode();
        activity.ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
        activity.mDisplayContent.sendNewConfiguration();

        // Relaunching the app should still respect the orientation request.
        assertEquals(ORIENTATION_PORTRAIT, activity.getConfiguration().orientation);
        assertTrue(activity.isLetterboxedForFixedOrientationAndAspectRatio());
    }