From 4c2b792c116e04591b0d28235ca6329b944ecf32 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Fri, 21 Apr 2023 22:00:11 +0000 Subject: [PATCH] Also reverse rotation for #freezeRotation path When auto-rotation is disabled, users can apply the suggested rotation using the rotation icon from SysUI. The sensor value passed to DisplayRotation#freezeRotation(int) that comes from WindowManagerService#freezeDisplayRotation also needs to apply the same reversing logic as DisplayRotation#rotationForOrientation. Fixes: 275286150 Test: atest DisplayRotationTests Change-Id: I985ae560d8eff6ea063206c1e39bd694ab576fde Merged-In: I985ae560d8eff6ea063206c1e39bd694ab576fde --- .../com/android/server/wm/DisplayRotation.java | 10 ++++++++++ .../server/wm/DisplayRotationTests.java | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index 0a1e29ace045e..31b987943f5bd 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -913,6 +913,16 @@ public class DisplayRotation { } void freezeRotation(int rotation) { + if (mDeviceStateController.shouldReverseRotationDirectionAroundZAxis()) { + // Flipping 270 and 90 has the same effect as changing the direction which rotation is + // applied. + if (rotation == Surface.ROTATION_90) { + rotation = Surface.ROTATION_270; + } else if (rotation == Surface.ROTATION_270) { + rotation = Surface.ROTATION_90; + } + } + 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 950e9e4848b0d..a831b270dbd97 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java @@ -537,6 +537,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);