Fix missing operation when hiding window for rotation

Commit d8152bd changed to use a map of token operation to
decide the animation appearance. But forgot to migrate the
usage of hideImmediately, that only hides the surface without
storing the information so when the window is drawn in new
rotation (e.g. IME), the controller doesn't know the window
should be shown again.

Fix: 222424027
Test: atest DisplayContentTests#testApplyTopFixedRotationTransform
Change-Id: I8f45bbd73ad06f9961aa55f3c05a571f77c5655b
This commit is contained in:
Riddle Hsu
2022-03-07 15:08:06 +08:00
parent 1be9ef4fbe
commit a581b4b13c
2 changed files with 8 additions and 1 deletions

View File

@@ -329,8 +329,12 @@ class AsyncRotationController extends FadeAnimationController implements Consume
void hideImmediately(WindowToken windowToken) {
final boolean original = mHideImmediately;
mHideImmediately = true;
final Operation op = new Operation(Operation.ACTION_FADE);
mTargetWindowTokens.put(windowToken, op);
fadeWindowToken(false /* show */, windowToken, ANIMATION_TYPE_FIXED_TRANSFORM);
op.mLeash = windowToken.getAnimationLeash();
mHideImmediately = original;
if (DEBUG) Slog.d(TAG, "hideImmediately " + windowToken.getTopChild());
}
/** Returns {@code true} if the window will rotate independently. */

View File

@@ -1370,7 +1370,9 @@ public class DisplayContentTests extends WindowTestsBase {
ROTATION_0 /* oldRotation */, ROTATION_90 /* newRotation */,
false /* forceUpdate */));
assertNotNull(mDisplayContent.getAsyncRotationController());
final AsyncRotationController asyncRotationController =
mDisplayContent.getAsyncRotationController();
assertNotNull(asyncRotationController);
assertTrue(mStatusBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
assertTrue(mNavBarWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));
// Notification shade may have its own view animation in real case so do not fade out it.
@@ -1443,6 +1445,7 @@ public class DisplayContentTests extends WindowTestsBase {
mDisplayContent.setImeLayeringTarget(mAppWindow);
LocalServices.getService(WindowManagerInternal.class).onToggleImeRequested(true /* show */,
app.token, app.token, mDisplayContent.mDisplayId);
assertTrue(asyncRotationController.isTargetToken(mImeWindow.mToken));
assertTrue(mImeWindow.mToken.hasFixedRotationTransform());
assertTrue(mImeWindow.isAnimating(PARENTS, ANIMATION_TYPE_FIXED_TRANSFORM));