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

Commit 1616dafa authored by Will Osborn's avatar Will Osborn Committed by Android (Google) Code Review
Browse files

Merge "Fix tabletop autorotate freezing the device in portrait" into tm-qpr-dev

parents 3e69219a 4c736a09
Loading
Loading
Loading
Loading
+25 −8
Original line number Diff line number Diff line
@@ -1537,6 +1537,7 @@ public class DisplayRotation {
        private int mHalfFoldSavedRotation = -1; // No saved rotation
        private DeviceStateController.FoldState mFoldState =
                DeviceStateController.FoldState.UNKNOWN;
        private boolean mInHalfFoldTransition = false;

        boolean overrideFrozenRotation() {
            return mFoldState == DeviceStateController.FoldState.HALF_FOLDED;
@@ -1544,6 +1545,7 @@ public class DisplayRotation {

        boolean shouldRevertOverriddenRotation() {
            return mFoldState == DeviceStateController.FoldState.OPEN // When transitioning to open.
                    && mInHalfFoldTransition
                    && mHalfFoldSavedRotation != -1 // Ignore if we've already reverted.
                    && mUserRotationMode
                    == WindowManagerPolicy.USER_ROTATION_LOCKED; // Ignore if we're unlocked.
@@ -1552,6 +1554,7 @@ public class DisplayRotation {
        int revertOverriddenRotation() {
            int savedRotation = mHalfFoldSavedRotation;
            mHalfFoldSavedRotation = -1;
            mInHalfFoldTransition = false;
            return savedRotation;
        }

@@ -1577,16 +1580,11 @@ public class DisplayRotation {
                mService.updateRotation(false /* alwaysSendConfiguration */,
                        false /* forceRelayout */);
            } else {
                // Revert the rotation to our saved value if we transition from HALF_FOLDED.
                if (mHalfFoldSavedRotation != -1) {
                    mRotation = mHalfFoldSavedRotation;
                }
                // Tell the device to update its orientation (mFoldState is still HALF_FOLDED here
                // so we will override USER_ROTATION_LOCKED and allow a rotation).
                mInHalfFoldTransition = true;
                mFoldState = newState;
                // Tell the device to update its orientation.
                mService.updateRotation(false /* alwaysSendConfiguration */,
                        false /* forceRelayout */);
                // Once we are rotated, set mFoldstate, effectively removing the lock override.
                mFoldState = newState;
            }
        }
    }
@@ -1683,6 +1681,7 @@ public class DisplayRotation {

    private static class RotationHistory {
        private static final int MAX_SIZE = 8;
        private static final int NO_FOLD_CONTROLLER = -2;
        private static class Record {
            final @Surface.Rotation int mFromRotation;
            final @Surface.Rotation int mToRotation;
@@ -1694,6 +1693,9 @@ public class DisplayRotation {
            final String mLastOrientationSource;
            final @ActivityInfo.ScreenOrientation int mSourceOrientation;
            final long mTimestamp = System.currentTimeMillis();
            final int mHalfFoldSavedRotation;
            final boolean mInHalfFoldTransition;
            final DeviceStateController.FoldState mFoldState;

            Record(DisplayRotation dr, int fromRotation, int toRotation) {
                mFromRotation = fromRotation;
@@ -1719,6 +1721,15 @@ public class DisplayRotation {
                    mLastOrientationSource = null;
                    mSourceOrientation = SCREEN_ORIENTATION_UNSET;
                }
                if (dr.mFoldController != null) {
                    mHalfFoldSavedRotation = dr.mFoldController.mHalfFoldSavedRotation;
                    mInHalfFoldTransition = dr.mFoldController.mInHalfFoldTransition;
                    mFoldState = dr.mFoldController.mFoldState;
                } else {
                    mHalfFoldSavedRotation = NO_FOLD_CONTROLLER;
                    mInHalfFoldTransition = false;
                    mFoldState = DeviceStateController.FoldState.UNKNOWN;
                }
            }

            void dump(String prefix, PrintWriter pw) {
@@ -1735,6 +1746,12 @@ public class DisplayRotation {
                if (mNonDefaultRequestingTaskDisplayArea != null) {
                    pw.println(prefix + "  requestingTda=" + mNonDefaultRequestingTaskDisplayArea);
                }
                if (mHalfFoldSavedRotation != NO_FOLD_CONTROLLER) {
                    pw.println(prefix + " halfFoldSavedRotation="
                            + mHalfFoldSavedRotation
                            + " mInHalfFoldTransition=" + mInHalfFoldTransition
                            + " mFoldState=" + mFoldState);
                }
            }
        }