summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/DisplayRotation.java14
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java8
2 files changed, 14 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 5aacb094207e..1d09116cad73 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -702,17 +702,17 @@ public class DisplayRotation {
}
boolean canRotateSeamlessly(int oldRotation, int newRotation) {
+ // If the navigation bar can't change sides, then it will jump when we change orientations
+ // and we don't rotate seamlessly - unless that is allowed, eg. with gesture navigation
+ // where the navbar is low-profile enough that this isn't very noticeable.
+ if (mAllowSeamlessRotationDespiteNavBarMoving || mDisplayPolicy.navigationBarCanMove()) {
+ return true;
+ }
// For the upside down rotation we don't rotate seamlessly as the navigation bar moves
// position. Note most apps (using orientation:sensor or user as opposed to fullSensor)
// will not enter the reverse portrait orientation, so actually the orientation won't change
// at all.
- if (oldRotation == mUpsideDownRotation || newRotation == mUpsideDownRotation) {
- return false;
- }
- // If the navigation bar can't change sides, then it will jump when we change orientations
- // and we don't rotate seamlessly - unless that is allowed, eg. with gesture navigation
- // where the navbar is low-profile enough that this isn't very noticeable.
- return mAllowSeamlessRotationDespiteNavBarMoving || mDisplayPolicy.navigationBarCanMove();
+ return oldRotation != Surface.ROTATION_180 && newRotation != Surface.ROTATION_180;
}
void markForSeamlessRotation(WindowState w, boolean seamlesslyRotated) {
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 25cff61c3b78..e8d0acba5e52 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
@@ -721,14 +721,20 @@ public class DisplayRotationTests {
doReturn(true).when(mMockDisplayPolicy).navigationBarCanMove();
doReturn(win).when(mMockDisplayPolicy).getTopFullscreenOpaqueWindow();
mMockDisplayContent.mCurrentFocus = win;
- mTarget.mUpsideDownRotation = Surface.ROTATION_180;
+ // This should not affect the condition of shouldRotateSeamlessly.
+ mTarget.mUpsideDownRotation = Surface.ROTATION_90;
doReturn(true).when(win.mActivityRecord).matchParentBounds();
// The focused fullscreen opaque window without override bounds should be able to be
// rotated seamlessly.
assertTrue(mTarget.shouldRotateSeamlessly(
Surface.ROTATION_0, Surface.ROTATION_90, false /* forceUpdate */));
+ // Reject any 180 degree because non-movable navbar will be placed in a different position.
+ doReturn(false).when(mMockDisplayPolicy).navigationBarCanMove();
+ assertFalse(mTarget.shouldRotateSeamlessly(
+ Surface.ROTATION_90, Surface.ROTATION_180, false /* forceUpdate */));
+ doReturn(true).when(mMockDisplayPolicy).navigationBarCanMove();
doReturn(false).when(win.mActivityRecord).matchParentBounds();
// No seamless rotation if the window may be positioned with offset after rotation.
assertFalse(mTarget.shouldRotateSeamlessly(