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

Commit 5d65824a authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Make sure that a recents-launch with remote gets its own transition"...

Merge "Make sure that a recents-launch with remote gets its own transition" into tm-qpr-dev am: 965f0316 am: 80e47c6a

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



Change-Id: I90ae1b47600190483c7e9f40d671182e3e631b93
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d46493e6 80e47c6a
Loading
Loading
Loading
Loading
+30 −5
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.view.RemoteAnimationAdapter;
import android.view.WindowManager;
import android.window.RemoteTransition;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
@@ -566,14 +567,39 @@ public class ActivityStartController {
            return false;
        }
        mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
        final ActivityMetricsLogger.LaunchingState launchingState =
                mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
        final RemoteTransition remote = options.getRemoteTransition();
        if (remote != null && rootTask.mTransitionController.isCollecting()) {
            final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
                    0 /* flags */, rootTask.mTransitionController,
                    mService.mWindowManager.mSyncEngine);
            // Special case: we are entering recents while an existing transition is running. In
            // this case, we know it's safe to "defer" the activity launch, so lets do so now so
            // that it can get its own transition and thus update launcher correctly.
            mService.mWindowManager.mSyncEngine.queueSyncSet(
                    () -> rootTask.mTransitionController.moveToCollecting(transition),
                    () -> {
                        final Task task = r.getTask();
                        task.mTransitionController.requestStartTransition(transition,
                                task, remote, null /* displayChange */);
                        task.mTransitionController.collect(task);
                        startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
                    });
        } else {
            final Task task = r.getTask();
        mService.deferWindowLayout();
        try {
            task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT,
                    0 /* flags */, task, task /* readyGroupRef */,
                    options.getRemoteTransition(), null /* displayChange */);
            startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
        }
        return true;
    }

    void startExistingRecentsIfPossibleInner(Intent intent, ActivityOptions options,
            ActivityRecord r, Task task, Task rootTask) {
        final ActivityMetricsLogger.LaunchingState launchingState =
                mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
        mService.deferWindowLayout();
        try {
            r.mTransitionController.setTransientLaunch(r,
                    TaskDisplayArea.getRootTaskAbove(rootTask));
            task.moveToFront("startExistingRecents");
@@ -585,7 +611,6 @@ public class ActivityStartController {
            task.mInResumeTopActivity = false;
            mService.continueWindowLayout();
        }
        return true;
    }

    void registerRemoteAnimationForNextActivityStart(String packageName,