Only fade window token on exact rotation change

The rotation animation may apply without rotation degree change
to freeze display for display configuration change. The duration
is shorter so it is unnecessary to fade for covering frozen time.

Bug: 185403130
Test: DisplayContentTests#testHybridRotationAnimation
Test: Toggle dark theme from quick setting.
      The notification shade should not disappear a while.
Change-Id: Ia943a9025bb4ab4a7e804e5e67648c9e8302a77b
This commit is contained in:
Riddle Hsu
2021-05-18 00:14:19 +08:00
parent 63a1453832
commit 89f313fce1
2 changed files with 3 additions and 0 deletions

View File

@@ -2998,6 +2998,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
// Hide the windows which are not significant in rotation animation. So that the windows
// don't need to block the unfreeze time.
if (screenRotationAnimation != null && screenRotationAnimation.hasScreenshot()
// Do not fade for freezing without rotation change.
&& mDisplayRotation.getRotation() != getWindowConfiguration().getRotation()
&& mFadeRotationAnimationController == null) {
startFadeRotationAnimation(false /* shouldDebounce */);
}

View File

@@ -1275,6 +1275,7 @@ public class DisplayContentTests extends WindowTestsBase {
// Assume that the display rotation is changed so it is frozen in preparation for animation.
doReturn(true).when(rotationAnim).hasScreenshot();
mWm.mDisplayFrozen = true;
displayContent.getDisplayRotation().setRotation((displayContent.getRotation() + 1) % 4);
displayContent.setRotationAnimation(rotationAnim);
// The fade rotation animation also starts to hide some non-app windows.
assertNotNull(displayContent.getFadeRotationAnimationController());