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

Commit cf951a02 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Apply rotation animation when canceling fixed rotation

... if the activity requested the same orientation as display.

The launching activity may not declare fixed orientation, so when
launching it in a different orientation, the fixed rotation will
be applied. But if the activity requested to use previous
orientation before the transition is done, it suddenly redraws
that causes flickering.

Fix: 186759371
Test: ActivityRecordTests#testActivityOnCancelFixedRotationTransform
Change-Id: I839dc1b563e9e3c150fbad8c33596dbc2bf0677b
parent 285e3754
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -6598,9 +6598,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

    @Override
    void onCancelFixedRotationTransform(int originalDisplayRotation) {
        if (this != mDisplayContent.getLastOrientationSource()
                || getRequestedConfigurationOrientation() != ORIENTATION_UNDEFINED) {
            // Only need to handle the activity that should be rotated with display.
        if (this != mDisplayContent.getLastOrientationSource()) {
            // This activity doesn't affect display rotation.
            return;
        }
        final int requestedOrientation = getRequestedConfigurationOrientation();
        if (requestedOrientation != ORIENTATION_UNDEFINED
                && requestedOrientation != mDisplayContent.getConfiguration().orientation) {
            // Only need to handle the activity that can be rotated with display or the activity
            // has requested the same orientation.
            return;
        }

+9 −0
Original line number Diff line number Diff line
@@ -1723,6 +1723,15 @@ public class ActivityRecordTests extends WindowTestsBase {

        assertFalse(display.hasTopFixedRotationLaunchingApp());
        assertFalse(activity.hasFixedRotationTransform());

        // Simulate that the activity requests the same orientation as display.
        activity.setOrientation(display.getConfiguration().orientation);
        // Skip the real freezing.
        activity.mVisibleRequested = false;
        clearInvocations(activity);
        activity.onCancelFixedRotationTransform(originalRotation);
        // The implementation of cancellation must be executed.
        verify(activity).startFreezingScreen(originalRotation);
    }

    @Test