Update rotation with animating recents if the device will sleep

Since live tile, the recents animation doesn't finish until back to
the original activity or switch to other activity. If AOD shows when
recents animates a task in different orientation, the rotation change
will be skipped and cause the AOD screen to show with old rotation.

Fix: 199527653
Test: DisplayContentTests#testRecentsNotRotatingWithFixedRotation
Test: On a device with AOD2 enabled, enter recents from a landscape
      app and press power key to enter AOD. The notification shade
      should show in portrait.
Change-Id: I134293cf083377b575f7560a39424a540ec53be9
This commit is contained in:
Riddle Hsu
2021-09-16 00:53:40 +08:00
parent c72d4fc175
commit 8bbb95fd41
2 changed files with 9 additions and 1 deletions

View File

@@ -444,7 +444,9 @@ public class DisplayRotation {
}
if (mDisplayContent.mFixedRotationTransitionListener
.isTopFixedOrientationRecentsAnimating()) {
.isTopFixedOrientationRecentsAnimating()
// If screen is off or the device is going to sleep, then still allow to update.
&& mService.mPolicy.okToAnimate(false /* ignoreScreenOn */)) {
// 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

@@ -1565,6 +1565,12 @@ public class DisplayContentTests extends WindowTestsBase {
mDisplayContent.mFixedRotationTransitionListener.onFinishRecentsAnimation();
assertTrue(displayRotation.updateRotationUnchecked(false));
// Rotation can be updated if the policy is not ok to animate (e.g. going to sleep).
mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity);
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
((TestWindowManagerPolicy) mWm.mPolicy).mOkToAnimate = 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);