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

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

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

View File

@@ -5486,10 +5486,10 @@ class DisplayContent extends DisplayArea.Root implements WindowManagerPolicy.Dis
* 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.
*/
boolean isFixedOrientationRecentsAnimating() {
boolean isTopFixedOrientationRecentsAnimating() {
return mAnimatingRecents != null
&& mAnimatingRecents.getRequestedConfigurationOrientation()
!= ORIENTATION_UNDEFINED;
!= ORIENTATION_UNDEFINED && !hasTopFixedRotationLaunchingApp();
}
@Override

View File

@@ -432,7 +432,7 @@ public class DisplayRotation {
}
if (mDisplayContent.mFixedRotationTransitionListener
.isFixedOrientationRecentsAnimating()) {
.isTopFixedOrientationRecentsAnimating()) {
// 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
// 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() {
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
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,
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS);
recentsActivity.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT);
// Do not rotate if the recents animation is animating on top.
mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity);
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
assertFalse(displayRotation.updateRotationUnchecked(false));
// Rotation can be updated if the recents animation is finished.
mDisplayContent.mFixedRotationTransitionListener.onFinishRecentsAnimation(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