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

Commit 110ed210 authored by davidln's avatar davidln
Browse files

Clear transitions for app windows display change.

This prevents unwanted animations from running for windows on the new
display that are no longer relevant.

Bug: 128449959

Test: manual - launch activity with options moving between virtual and
default display, atest WmTests
Change-Id: I2fbd7ab5240c626f3bce82c930001a6a2c6ed6a9
parent 3baa0b34
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -1322,7 +1322,9 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
        if (prevDc == null || prevDc == mDisplayContent) {
            return;
        }
        if (prevDc.mChangingApps.contains(this)) {

        prevDc.mOpeningApps.remove(this);
        if (prevDc.mChangingApps.remove(this)) {
            // This gets called *after* the AppWindowToken has been reparented to the new display.
            // That reparenting resulted in this window changing modes (eg. FREEFORM -> FULLSCREEN),
            // so this token is now "frozen" while waiting for the animation to start on prevDc
@@ -1331,6 +1333,8 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
            // so we need to cancel the change transition here.
            clearChangeLeash(getPendingTransaction(), true /* cancel */);
        }
        prevDc.mClosingApps.remove(this);

        if (prevDc.mFocusedApp == this) {
            prevDc.setFocusedApp(null);
            final TaskStack stack = dc.getTopStack();
@@ -3216,16 +3220,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
                true /* topToBottom */);
    }

    void removeFromPendingTransition() {
        if (isWaitingForTransitionStart() && mDisplayContent != null) {
            mDisplayContent.mOpeningApps.remove(this);
            if (mDisplayContent.mChangingApps.remove(this)) {
                clearChangeLeash(getPendingTransaction(), true /* cancel */);
            }
            mDisplayContent.mClosingApps.remove(this);
        }
    }

    private void updateColorTransform() {
        if (mSurfaceControl != null && mLastAppSaturationInfo != null) {
            getPendingTransaction().setColorTransform(mSurfaceControl,
+0 −3
Original line number Diff line number Diff line
@@ -2377,9 +2377,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
                    + " to its current displayId=" + mDisplayId);
        }

        // Clean up all pending transitions when stack reparent to another display.
        stack.forAllAppWindows(AppWindowToken::removeFromPendingTransition);

        prevDc.mTaskStackContainers.removeChild(stack);
        mTaskStackContainers.addStackToDisplay(stack, onTop);
    }