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

Commit 32b7c278 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Automerger Merge Worker
Browse files

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

Merge "[Shell Transition] Defer remove splash screen window when it is inTransition." into tm-qpr-dev am: 9394254f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19953044



Change-Id: I2f83699e9b3768f0e9be42f3d0776527b328f34b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d0d6108d 9394254f
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -2764,6 +2764,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

        final StartingSurfaceController.StartingSurface surface;
        final StartingData startingData = mStartingData;
        final WindowState startingWindow = mStartingWindow;
        if (mStartingData != null) {
            surface = mStartingSurface;
            mStartingData = null;
@@ -2782,22 +2783,32 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            return;
        }


        ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Schedule remove starting %s startingWindow=%s"
                + " startingView=%s Callers=%s", this, mStartingWindow, mStartingSurface,
                Debug.getCallers(5));

        final boolean removeWithAnimate = prepareAnimation && startingData.needRevealAnimation();
        final Runnable removeSurface = () -> {
            ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Removing startingView=%s", surface);
            try {
                surface.remove(prepareAnimation && startingData.needRevealAnimation());
                surface.remove(removeWithAnimate);
            } catch (Exception e) {
                Slog.w(TAG_WM, "Exception when removing starting window", e);
            }
        };

        if (removeWithAnimate && 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) {
                    removeSurface.run();
                }
            });
        } else {
            removeSurface.run();
        }
    }

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