Merge "Only ignore rotation update if recents animation is on top" into rvc-dev am: 3a05bfb7f5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11907858

Change-Id: I3b88f1ae188876aa14c36439283222c2698afa2c
This commit is contained in:
TreeHugger Robot
2020-06-18 16:35:57 +00:00
committed by Automerger Merge Worker
3 changed files with 14 additions and 4 deletions

View File

@@ -5664,10 +5664,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
* Return {@code true} if there is an ongoing animation to the "Recents" activity and this * Return {@code true} if there is an ongoing animation to the "Recents" activity and this
* activity as a fixed orientation so shouldn't be rotated. * activity as a fixed orientation so shouldn't be rotated.
*/ */
boolean isFixedOrientationRecentsAnimating() { boolean isTopFixedOrientationRecentsAnimating() {
return mAnimatingRecents != null return mAnimatingRecents != null
&& mAnimatingRecents.getRequestedConfigurationOrientation() && mAnimatingRecents.getRequestedConfigurationOrientation()
!= ORIENTATION_UNDEFINED; != ORIENTATION_UNDEFINED && !hasTopFixedRotationLaunchingApp();
} }
@Override @Override

View File

@@ -432,7 +432,7 @@ public class DisplayRotation {
} }
if (mDisplayContent.mFixedRotationTransitionListener if (mDisplayContent.mFixedRotationTransitionListener
.isFixedOrientationRecentsAnimating()) { .isTopFixedOrientationRecentsAnimating()) {
// During the recents animation, the closing app might still be considered on top. // During the recents animation, the closing app might still be considered on top.
// In order to ignore its requested orientation to avoid a sensor led rotation (e.g // In order to ignore its requested orientation to avoid a sensor led rotation (e.g
// user rotating the device while the recents animation is running), we ignore // user rotating the device while the recents animation is running), we ignore

View File

@@ -1236,18 +1236,28 @@ public class DisplayContentTests extends WindowTestsBase {
public void testRecentsNotRotatingWithFixedRotation() { public void testRecentsNotRotatingWithFixedRotation() {
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation(); final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
doCallRealMethod().when(displayRotation).updateRotationUnchecked(anyBoolean()); doCallRealMethod().when(displayRotation).updateRotationUnchecked(anyBoolean());
doCallRealMethod().when(displayRotation).updateOrientation(anyInt(), anyBoolean()); // Skip freezing so the unrelated conditions in updateRotationUnchecked won't disturb.
doNothing().when(mWm).startFreezingDisplay(anyInt(), anyInt(), any(), anyInt());
final ActivityRecord recentsActivity = createActivityRecord(mDisplayContent, final ActivityRecord recentsActivity = createActivityRecord(mDisplayContent,
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS); WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS);
recentsActivity.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT); recentsActivity.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT);
// Do not rotate if the recents animation is animating on top.
mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity); mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity);
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4); displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
assertFalse(displayRotation.updateRotationUnchecked(false)); assertFalse(displayRotation.updateRotationUnchecked(false));
// Rotation can be updated if the recents animation is finished.
mDisplayContent.mFixedRotationTransitionListener.onFinishRecentsAnimation(false); mDisplayContent.mFixedRotationTransitionListener.onFinishRecentsAnimation(false);
assertTrue(displayRotation.updateRotationUnchecked(false)); assertTrue(displayRotation.updateRotationUnchecked(false));
// Rotation can be updated if the recents animation is animating but it is not on top, e.g.
// switching activities in different orientations by quickstep gesture.
mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity);
mDisplayContent.setFixedRotationLaunchingAppUnchecked(mAppWindow.mActivityRecord);
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
assertTrue(displayRotation.updateRotationUnchecked(false));
} }
@Test @Test