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

Commit aa82677f authored by wilsonshih's avatar wilsonshih
Browse files

[Shell Transition] Defer remove splash screen window when it is

inTransition.

If splash screen window was in transition, the client side is unable
to draw because of Session#cancelDraw, which can also blocking the
reveal animation. But since the client side may alreday report draw
finish after prepareSync, defer the remove starting window signal
after the start transaction applied.

Bug: 246518648
Test: repeat run atest testConvertTranslucentOnTranslucentActivity
Change-Id: Ia6a555b5657f531dfed1d2f97e23302f7cd584a2
parent 376a2453
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -2746,6 +2746,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }

        final StartingSurfaceController.StartingSurface surface;
        final WindowState startingWindow = mStartingWindow;
        final boolean animate;
        if (mStartingData != null) {
            animate = prepareAnimation && mStartingData.needRevealAnimation()
@@ -2770,8 +2771,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            return;
        }

        if (animate && mTransitionController.inCollectingTransition(startingWindow)
                && startingWindow.cancelAndRedraw()) {
            // Defer remove starting window after transition start.
            // If splash screen window was in collecting, the client side is unable to draw because
            // of Session#cancelDraw, which will blocking the remove animation.
            startingWindow.mSyncTransaction.addTransactionCommittedListener(Runnable::run, () -> {
                synchronized (mAtmService.mGlobalLock) {
                    surface.remove(true);
                }
            });
        } else {
            surface.remove(animate);
        }
    }

    /**
     * Reparents this activity into {@param newTaskFrag} at the provided {@param position}. The