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

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

Merge "Use normal rotation if orientation is changed by resume-scheduled app"

parents 96aeb654 4d576bfa
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -1465,6 +1465,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                // intermediate orientation change, it is more stable to freeze the display.
                // intermediate orientation change, it is more stable to freeze the display.
                return false;
                return false;
            }
            }
            if (r.isState(RESUMED) && !r.getRootTask().mInResumeTopActivity) {
                // If the activity is executing or has done the lifecycle callback, use normal
                // rotation animation so the display info can be updated immediately (see
                // updateDisplayAndOrientation). This prevents a compatibility issue such as
                // calling setRequestedOrientation in Activity#onCreate and then get display info.
                // If fixed rotation is applied, the display rotation will still be the old one,
                // unless the client side gets the rotation again after the adjustments arrive.
                return false;
            }
        } else if (r != topRunningActivity()) {
        } else if (r != topRunningActivity()) {
            // If the transition has not started yet, the activity must be the top.
            // If the transition has not started yet, the activity must be the top.
            return false;
            return false;
+21 −0
Original line number Original line Diff line number Diff line
@@ -1348,6 +1348,27 @@ public class DisplayContentTests extends WindowTestsBase {
        assertTrue(displayContent.getPinnedStackController().isPipActiveOrWindowingModeChanging());
        assertTrue(displayContent.getPinnedStackController().isPipActiveOrWindowingModeChanging());
    }
    }


    @Test
    public void testNoFixedRotationOnResumedScheduledApp() {
        unblockDisplayRotation(mDisplayContent);
        final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true).build();
        app.setVisible(false);
        app.setState(Task.ActivityState.RESUMED, "test");
        mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
                false /* alwaysKeepCurrent */);
        mDisplayContent.mOpeningApps.add(app);
        final int newOrientation = getRotatedOrientation(mDisplayContent);
        app.setRequestedOrientation(newOrientation);

        // The condition should reject using fixed rotation because the resumed client in real case
        // might get display info immediately. And the fixed rotation adjustments haven't arrived
        // client side so the info may be inconsistent with the requested orientation.
        verify(mDisplayContent).handleTopActivityLaunchingInDifferentOrientation(eq(app),
                eq(true) /* checkOpening */);
        assertFalse(app.isFixedRotationTransforming());
        assertFalse(mDisplayContent.hasTopFixedRotationLaunchingApp());
    }

    @Test
    @Test
    public void testRecentsNotRotatingWithFixedRotation() {
    public void testRecentsNotRotatingWithFixedRotation() {
        unblockDisplayRotation(mDisplayContent);
        unblockDisplayRotation(mDisplayContent);