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

Commit 58fdce5c authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

Merge "Put transition collect in scope of defer layout" into tm-qpr-dev am:...

Merge "Put transition collect in scope of defer layout" into tm-qpr-dev am: fb3ae632 am: 11c4903f

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



Change-Id: I4478cf9002652b6db744fd4c0ce625a3c6a91c1a
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 1f7737e9 11c4903f
Loading
Loading
Loading
Loading
+26 −21
Original line number Diff line number Diff line
@@ -559,47 +559,52 @@ public class ActivityStartController {
        final Task rootTask = mService.mRootWindowContainer.getDefaultTaskDisplayArea()
                .getRootTask(WINDOWING_MODE_UNDEFINED, activityType);
        if (rootTask == null) return false;
        final RemoteTransition remote = options.getRemoteTransition();
        final ActivityRecord r = rootTask.topRunningActivity();
        if (r == null || r.mVisibleRequested || !r.attachedToProcess()
        if (r == null || r.mVisibleRequested || !r.attachedToProcess() || remote == null
                || !r.mActivityComponent.equals(intent.getComponent())
                // Recents keeps invisible while device is locked.
                || r.mDisplayContent.isKeyguardLocked()) {
            return false;
        }
        mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
        final RemoteTransition remote = options.getRemoteTransition();
        if (remote != null && rootTask.mTransitionController.isCollecting()) {
        final ActivityMetricsLogger.LaunchingState launchingState =
                mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
        final Transition transition = new Transition(WindowManager.TRANSIT_TO_FRONT,
                    0 /* flags */, rootTask.mTransitionController,
                    mService.mWindowManager.mSyncEngine);
                0 /* flags */, r.mTransitionController, mService.mWindowManager.mSyncEngine);
        if (r.mTransitionController.isCollecting()) {
            // 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);
                        if (r.isAttached()) {
                            r.mTransitionController.moveToCollecting(transition);
                        }
                    },
                    () -> {
                        if (r.isAttached() && transition.isCollecting()) {
                            startExistingRecentsIfPossibleInner(options, r, rootTask,
                                    launchingState, remote, transition);
                        }
                    });
        } else {
            final Task task = r.getTask();
            task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT,
                    0 /* flags */, task, task /* readyGroupRef */,
                    options.getRemoteTransition(), null /* displayChange */);
            startExistingRecentsIfPossibleInner(intent, options, r, task, rootTask);
            r.mTransitionController.moveToCollecting(transition);
            startExistingRecentsIfPossibleInner(options, r, rootTask, launchingState, remote,
                    transition);
        }
        return true;
    }

    void startExistingRecentsIfPossibleInner(Intent intent, ActivityOptions options,
            ActivityRecord r, Task task, Task rootTask) {
        final ActivityMetricsLogger.LaunchingState launchingState =
                mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
    private void startExistingRecentsIfPossibleInner(ActivityOptions options, ActivityRecord r,
            Task rootTask, ActivityMetricsLogger.LaunchingState launchingState,
            RemoteTransition remoteTransition, Transition transition) {
        final Task task = r.getTask();
        mService.deferWindowLayout();
        try {
            r.mTransitionController.requestStartTransition(transition,
                    task, remoteTransition, null /* displayChange */);
            r.mTransitionController.collect(task);
            r.mTransitionController.setTransientLaunch(r,
                    TaskDisplayArea.getRootTaskAbove(rootTask));
            task.moveToFront("startExistingRecents");
+1 −1
Original line number Diff line number Diff line
@@ -1388,9 +1388,9 @@ class ActivityStarter {
                && transitionController.getTransitionPlayer() != null)
                ? transitionController.createTransition(TRANSIT_OPEN) : null;
        RemoteTransition remoteTransition = r.takeRemoteTransition();
        transitionController.collect(r);
        try {
            mService.deferWindowLayout();
            transitionController.collect(r);
            try {
                Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
                result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,
+1 −1
Original line number Diff line number Diff line
@@ -338,7 +338,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
        return mFinishTransaction;
    }

    private boolean isCollecting() {
    boolean isCollecting() {
        return mState == STATE_COLLECTING || mState == STATE_STARTED;
    }