diff options
3 files changed, 38 insertions, 0 deletions
diff --git a/core/tests/coretests/src/android/util/RotationUtilsTest.java b/core/tests/coretests/src/android/util/RotationUtilsTest.java index 1b1ee4fb1a1c..06b28f5b58ef 100644 --- a/core/tests/coretests/src/android/util/RotationUtilsTest.java +++ b/core/tests/coretests/src/android/util/RotationUtilsTest.java @@ -19,6 +19,7 @@ package android.util; import static android.util.RotationUtils.rotateBounds; import static android.util.RotationUtils.rotatePoint; import static android.util.RotationUtils.rotatePointF; +import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_180; import static android.view.Surface.ROTATION_270; import static android.view.Surface.ROTATION_90; @@ -103,4 +104,19 @@ public class RotationUtilsTest { assertEquals(560f, testResult.x, .1f); assertEquals(60f, testResult.y, .1f); } + + @Test + public void testReverseRotationDirectionAroundZAxis() { + assertEquals(ROTATION_90, + RotationUtils.reverseRotationDirectionAroundZAxis(ROTATION_270)); + assertEquals(ROTATION_270, + RotationUtils.reverseRotationDirectionAroundZAxis(ROTATION_90)); + assertEquals(ROTATION_0, + RotationUtils.reverseRotationDirectionAroundZAxis(ROTATION_0)); + assertEquals(ROTATION_180, + RotationUtils.reverseRotationDirectionAroundZAxis(ROTATION_180)); + + assertEquals(-1, + RotationUtils.reverseRotationDirectionAroundZAxis(-1)); + } } diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index 20048ce543f3..a5e652cce41e 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -946,6 +946,10 @@ public class DisplayRotation { } void freezeRotation(int rotation) { + if (mDeviceStateController.shouldReverseRotationDirectionAroundZAxis()) { + rotation = RotationUtils.reverseRotationDirectionAroundZAxis(rotation); + } + rotation = (rotation == -1) ? mRotation : rotation; setUserRotation(WindowManagerPolicy.USER_ROTATION_LOCKED, rotation); } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java index 4b2d1071d113..8e80485bca7c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java @@ -541,6 +541,24 @@ public class DisplayRotationTests { SCREEN_ORIENTATION_UNSPECIFIED, Surface.ROTATION_180)); } + @Test + public void testFreezeRotation_reverseRotationDirectionAroundZAxis_yes() throws Exception { + mBuilder.build(); + when(mDeviceStateController.shouldReverseRotationDirectionAroundZAxis()).thenReturn(true); + + freezeRotation(Surface.ROTATION_90); + assertEquals(Surface.ROTATION_270, mTarget.getUserRotation()); + } + + @Test + public void testFreezeRotation_reverseRotationDirectionAroundZAxis_no() throws Exception { + mBuilder.build(); + when(mDeviceStateController.shouldReverseRotationDirectionAroundZAxis()).thenReturn(false); + + freezeRotation(Surface.ROTATION_90); + assertEquals(Surface.ROTATION_90, mTarget.getUserRotation()); + } + private boolean waitForUiHandler() { final CountDownLatch latch = new CountDownLatch(1); UiThread.getHandler().post(latch::countDown); |