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

Commit 8fd29146 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Make large screen display ignore orientation request by default" into main

parents c1e1aea0 b458c493
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -3212,8 +3212,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     * will be ignored.
     */
    boolean isUniversalResizeable() {
        final boolean isLargeScreen = mDisplayContent != null && mDisplayContent.getConfiguration()
                .smallestScreenWidthDp >= WindowManager.LARGE_SCREEN_SMALLEST_SCREEN_WIDTH_DP
        final boolean isLargeScreen = mDisplayContent != null && mDisplayContent.isLargeScreen()
                && mDisplayContent.getIgnoreOrientationRequest();
        if (!canBeUniversalResizeable(info.applicationInfo, mWmService, isLargeScreen,
                true /* forActivity */)) {
+21 −0
Original line number Diff line number Diff line
@@ -439,6 +439,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     */
    private boolean mSandboxDisplayApis = true;

    /** Whether {@link #setIgnoreOrientationRequest} is called to override the default policy. */
    @VisibleForTesting
    boolean mHasSetIgnoreOrientationRequest;

    /**
     * Overridden display density for current user. Initialized with {@link #mInitialDisplayDensity}
     * but can be set from Settings or via shell command "adb shell wm density".
@@ -6722,8 +6726,25 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        return mDisplayPolicy.getSystemUiContext();
    }

    /** Returns {@code} true if the smallest screen width dp >= 600. */
    boolean isLargeScreen() {
        return getConfiguration().smallestScreenWidthDp
                >= WindowManager.LARGE_SCREEN_SMALLEST_SCREEN_WIDTH_DP;
    }

    @Override
    boolean getIgnoreOrientationRequest() {
        if (mHasSetIgnoreOrientationRequest
                || !com.android.window.flags.Flags.universalResizableByDefault()) {
            return super.getIgnoreOrientationRequest();
        }
        // Large screen (sw >= 600dp) ignores orientation request by default.
        return isLargeScreen() && !mWmService.isIgnoreOrientationRequestDisabled();
    }

    @Override
    boolean setIgnoreOrientationRequest(boolean ignoreOrientationRequest) {
        mHasSetIgnoreOrientationRequest = true;
        if (mSetIgnoreOrientationRequest == ignoreOrientationRequest) return false;
        final boolean rotationChanged = super.setIgnoreOrientationRequest(ignoreOrientationRequest);
        mWmService.mDisplayWindowSettings.setIgnoreOrientationRequest(
+3 −3
Original line number Diff line number Diff line
@@ -374,9 +374,9 @@ class DisplayWindowSettings {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);

        final boolean ignoreOrientationRequest = settings.mIgnoreOrientationRequest != null
                ? settings.mIgnoreOrientationRequest : false;
        dc.setIgnoreOrientationRequest(ignoreOrientationRequest);
        if (settings.mIgnoreOrientationRequest != null) {
            dc.setIgnoreOrientationRequest(settings.mIgnoreOrientationRequest);
        }

        dc.getDisplayRotation().resetAllowAllRotations();
    }
+11 −1
Original line number Diff line number Diff line
@@ -554,6 +554,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void testSetRequestedOrientationUpdatesConfiguration() throws Exception {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final ActivityRecord activity = new ActivityBuilder(mAtm)
                .setCreateTask(true)
                .setConfigChanges(ORIENTATION_CONFIG_CHANGES)
@@ -641,6 +642,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void ignoreRequestedOrientationForResizableInSplitWindows() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final ActivityRecord activity = createActivityWith2LevelTask();
        final Task task = activity.getTask();
        final Task rootTask = activity.getRootTask();
@@ -685,6 +687,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void respectRequestedOrientationForNonResizableInSplitWindows() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final TaskDisplayArea tda = mDisplayContent.getDefaultTaskDisplayArea();
        spyOn(tda);
        doReturn(true).when(tda).supportsNonResizableMultiWindow();
@@ -1906,6 +1909,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void testActivityOnCancelFixedRotationTransform() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final ActivityRecord activity = createActivityWithTask();
        final DisplayRotation displayRotation = activity.mDisplayContent.getDisplayRotation();
        final RemoteDisplayChangeController remoteDisplayChangeController = activity
@@ -2054,6 +2058,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void testFixedRotationSnapshotStartingWindow() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final ActivityRecord activity = createActivityWithTask();
        // TaskSnapshotSurface requires a fullscreen opaque window.
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
@@ -2278,6 +2283,7 @@ public class ActivityRecordTests extends WindowTestsBase {
    @Test
    public void testSupportsFreeform() {
        final ActivityRecord activity = new ActivityBuilder(mAtm)
                .setComponent(getUniqueComponentName(mContext.getPackageName()))
                .setCreateTask(true)
                .setResizeMode(ActivityInfo.RESIZE_MODE_UNRESIZEABLE)
                .setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE)
@@ -2410,6 +2416,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void testOrientationForScreenOrientationBehind() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final Task task = createTask(mDisplayContent);
        // Activity below
        new ActivityBuilder(mAtm)
@@ -2507,6 +2514,7 @@ public class ActivityRecordTests extends WindowTestsBase {
    @SetupWindows(addWindows = W_ACTIVITY)
    @Test
    public void testLandscapeSeascapeRotationByApp() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final Task task = new TaskBuilder(mSupervisor)
                .setDisplay(mDisplayContent).setCreateActivity(true).build();
        final ActivityRecord activity = task.getTopNonFinishingActivity();
@@ -2572,6 +2580,7 @@ public class ActivityRecordTests extends WindowTestsBase {
    @Test
    @Presubmit
    public void testGetOrientation() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        // ActivityBuilder will resume top activities and cause the activity been added into
        // opening apps list. Since this test is focus on the effect of visible on getting
        // orientation, we skip app transition to avoid interference.
@@ -2663,8 +2672,8 @@ public class ActivityRecordTests extends WindowTestsBase {
    @Test
    public void testSetOrientation_restrictedByTargetSdk() {
        mSetFlagsRule.enableFlags(Flags.FLAG_UNIVERSAL_RESIZABLE_BY_DEFAULT);
        mDisplayContent.setIgnoreOrientationRequest(true);
        makeDisplayLargeScreen(mDisplayContent);
        assertTrue(mDisplayContent.getIgnoreOrientationRequest());

        assertSetOrientation(Build.VERSION_CODES.CUR_DEVELOPMENT, CATEGORY_SOCIAL, false);
        assertSetOrientation(Build.VERSION_CODES.CUR_DEVELOPMENT, CATEGORY_GAME, true);
@@ -2702,6 +2711,7 @@ public class ActivityRecordTests extends WindowTestsBase {

    @Test
    public void testRespectTopFullscreenOrientation() {
        mDisplayContent.setIgnoreOrientationRequest(false);
        final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
        final Configuration displayConfig = activity.mDisplayContent.getConfiguration();
        final Configuration activityConfig = activity.getConfiguration();
+1 −0
Original line number Diff line number Diff line
@@ -511,6 +511,7 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase {
    @Test
    public void testSupportsMultiWindow_nonResizable() {
        final ActivityRecord activity = new ActivityBuilder(mAtm)
                .setComponent(getUniqueComponentName(mContext.getPackageName()))
                .setCreateTask(true)
                .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
                .build();
Loading