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

Commit 040e3678 authored by Louis Chang's avatar Louis Chang
Browse files

Fix no recents animations after unify

Recents animation doesn't work once AppWindowToken and ActivityRecord
unified because the mLaunchTaskBehind is updated to false too early
while running recents animation. We should also defer the updates until
recents animation completed.

Bug: 80414790
Test: atest RecentsAnimationTest
Change-Id: Ie1dd5c580b8f1c7cc66c7e12590a31398e59b2b5
parent 3afc6731
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -973,6 +973,7 @@ public class WindowManagerService extends IWindowManager.Stub
            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
        }
    }

    /** Listener to notify activity manager about app transitions. */
    final WindowManagerInternal.AppTransitionListener mActivityManagerAppTransitionNotifier
            = new WindowManagerInternal.AppTransitionListener() {
@@ -989,7 +990,13 @@ public class WindowManagerService extends IWindowManager.Stub
            if (atoken == null) {
                return;
            }
            if (atoken.mLaunchTaskBehind) {

            // While running a recents animation, this will get called early because we show the
            // recents animation target activity immediately when the animation starts. Defer the
            // mLaunchTaskBehind updates until recents animation finishes.
            final boolean isRecentsAnimationTarget = getRecentsAnimationController() != null
                    && getRecentsAnimationController().isTargetApp(atoken);
            if (atoken.mLaunchTaskBehind && !isRecentsAnimationTarget) {
                try {
                    mActivityTaskManager.notifyLaunchTaskBehindComplete(atoken.token);
                } catch (RemoteException e) {
@@ -997,15 +1004,9 @@ public class WindowManagerService extends IWindowManager.Stub
                atoken.mLaunchTaskBehind = false;
            } else {
                atoken.updateReportedVisibilityLocked();
                if (atoken.mEnteringAnimation) {
                    if (getRecentsAnimationController() != null
                            && getRecentsAnimationController().isTargetApp(atoken)) {
                        // Currently running a recents animation, this will get called early because
                        // we show the recents animation target activity immediately when the
                        // animation starts. In this case, we should defer sending the finished
                        // callback until the animation successfully finishes
                        return;
                    } else {
                // We should also defer sending the finished callback until the recents animation
                // successfully finishes.
                if (atoken.mEnteringAnimation && !isRecentsAnimationTarget) {
                    atoken.mEnteringAnimation = false;
                    try {
                        mActivityTaskManager.notifyEnterAnimationComplete(atoken.token);
@@ -1014,7 +1015,6 @@ public class WindowManagerService extends IWindowManager.Stub
                }
            }
        }
        }
    };

    final ArrayList<AppFreezeListener> mAppFreezeListeners = new ArrayList<>();