Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9d0d003 authored by Tiger Huang's avatar Tiger Huang
Browse files

Fix a bug about missing committing app visibility

If we have pending transitions, committing visibility would be delayed
until the opening apps are all drawn. However, the original logic in
AppWindowToken.transferStartingWindow would just remove the app from
mOpeningApps which caused the app visibility would not be committed.

This CL doesn't remove the app from mOpeningApps while transferring the
starting window. Instead, we set a flag to indicate that we no longer
need to apply an animation to the app. In this way, the app visibility
will be committed.

Fix: 131180307
Test: atest WindowManagerSmokeTest
Test: Steps in the bug
Change-Id: Ia84d73136dcbda07ae055b91f5a038e1bc070d2a
parent f61e5f24
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
    boolean inPendingTransaction;
    boolean allDrawn;
    private boolean mLastAllDrawn;
    private boolean mUseTransferredAnimation;

    // Set to true when this app creates a surface while in the middle of an animation. In that
    // case do not clear allDrawn until the animation completes.
@@ -618,9 +619,12 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
            boolean runningAppAnimation = false;

            if (transit != WindowManager.TRANSIT_UNSET) {
                if (applyAnimationLocked(lp, transit, visible, isVoiceInteraction)) {
                    delayed = runningAppAnimation = true;
                if (mUseTransferredAnimation) {
                    runningAppAnimation = isReallyAnimating();
                } else if (applyAnimationLocked(lp, transit, visible, isVoiceInteraction)) {
                    runningAppAnimation = true;
                }
                delayed = runningAppAnimation;
                final WindowState window = findMainWindow();
                if (window != null && accessibilityController != null) {
                    accessibilityController.onAppWindowTransitionLocked(window, transit);
@@ -667,6 +671,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
                getDisplayContent().getInputMonitor().updateInputWindowsLw(false /*force*/);
            }
        }
        mUseTransferredAnimation = false;

        if (isReallyAnimating()) {
            delayed = true;
@@ -1531,9 +1536,9 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
                transferAnimation(fromToken);

                // When transferring an animation, we no longer need to apply an animation to the
                // the token we transfer the animation over. Thus, remove the animation from
                // pending opening apps.
                getDisplayContent().mOpeningApps.remove(this);
                // the token we transfer the animation over. Thus, set this flag to indicate we've
                // transferred the animation.
                mUseTransferredAnimation = true;

                mWmService.updateFocusedWindowLocked(
                        UPDATE_FOCUS_WILL_PLACE_SURFACES, true /*updateInputWindows*/);