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

Commit 1a29e10b authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Split collect logic out of requestIfNeeded methods" into main

parents 5b17c6ca b0a2d965
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -3717,8 +3717,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

            final boolean endTask = task.getTopNonFinishingActivity() == null
                    && !task.isClearingToReuseTask();
            final WindowContainer<?> trigger = endTask ? task : this;
            final Transition newTransition =
                    mTransitionController.requestCloseTransitionIfNeeded(endTask ? task : this);
                    mTransitionController.requestCloseTransitionIfNeeded(trigger);
            if (newTransition != null) {
                newTransition.collectClose(trigger);
            } else if (mTransitionController.isCollecting()) {
                mTransitionController.getCollectingTransition().collectClose(trigger);
            }
            if (isState(RESUMED)) {
                if (endTask) {
                    mAtmService.getTaskChangeNotificationController().notifyTaskRemovalStarted(
@@ -4377,7 +4383,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // closing the task.
        final WindowContainer trigger = remove && task != null && task.getChildCount() == 1
                ? task : this;
        mTransitionController.requestCloseTransitionIfNeeded(trigger);
        final Transition newTransit = mTransitionController.requestCloseTransitionIfNeeded(trigger);
        if (newTransit != null) {
            newTransit.collectClose(trigger);
        } else if (mTransitionController.isCollecting()) {
            mTransitionController.getCollectingTransition().collectClose(trigger);
        }
        cleanUp(true /* cleanServices */, true /* setState */);
        if (remove) {
            if (mStartingData != null && mVisible && task != null) {
+1 −1
Original line number Diff line number Diff line
@@ -3665,7 +3665,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    }

    /**
     * Prepare to enter PiP mode after {@link TransitionController#requestStartTransition}.
     * Prepare to enter PiP mode after {@link TransitionController#requestStartDisplayTransition}.
     *
     * @param r activity auto entering pip
     * @return true if the activity is about to auto-enter pip or is already in pip mode.
+14 −4
Original line number Diff line number Diff line
@@ -1598,9 +1598,14 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
    }

    private void removePinnedRootTaskInSurfaceTransaction(Task rootTask) {
        rootTask.mTransitionController.requestTransitionIfNeeded(TRANSIT_TO_BACK, 0 /* flags */,
                rootTask, rootTask.mDisplayContent, null /* remoteTransition */,
                null /* displayChange */);
        final Transition transition = rootTask.mTransitionController.requestTransitionIfNeeded(
                TRANSIT_TO_BACK, 0 /* flags */, rootTask, rootTask.mDisplayContent);
        if (transition == null) {
            rootTask.mTransitionController.collect(rootTask);
        } else {
            transition.collect(rootTask);
        }

        /**
         * Workaround: Force-stop all the activities in the root pinned task before we reparent them
         * to the fullscreen root task.  This is to guarantee that when we are removing a root task,
@@ -1683,7 +1688,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
            // Prevent recursion.
            return;
        }
        task.mTransitionController.requestCloseTransitionIfNeeded(task);
        final Transition transit = task.mTransitionController.requestCloseTransitionIfNeeded(task);
        if (transit != null) {
            transit.collectClose(task);
        } else if (task.mTransitionController.isCollecting()) {
            task.mTransitionController.getCollectingTransition().collectClose(task);
        }
        // Consume the stopping activities immediately so activity manager won't skip killing
        // the process because it is still foreground state, i.e. RESUMED -> PAUSING set from
        // removeActivities -> finishIfPossible.
+62 −60
Original line number Diff line number Diff line
@@ -1625,22 +1625,23 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp

        if (configChanged) {
            mWaitingForConfig = true;
            if (mTransitionController.isShellTransitionsEnabled()) {
            if (mLastHasContent && mTransitionController.isShellTransitionsEnabled()) {
                final Rect startBounds = currentDisplayConfig.windowConfiguration.getBounds();
                final Rect endBounds = mTmpConfiguration.windowConfiguration.getBounds();
                final Transition transition = mTransitionController.getCollectingTransition();
                final TransitionRequestInfo.DisplayChange change = transition != null
                                ? null : new TransitionRequestInfo.DisplayChange(mDisplayId);
                if (change != null) {
                if (!mTransitionController.isCollecting()) {
                    final TransitionRequestInfo.DisplayChange change =
                            new TransitionRequestInfo.DisplayChange(mDisplayId);
                    change.setStartAbsBounds(startBounds);
                    change.setEndAbsBounds(endBounds);
                    requestChangeTransition(changes, change);
                } else {
                    final Transition transition = mTransitionController.getCollectingTransition();
                    transition.setKnownConfigChanges(this, changes);
                    // A collecting transition is existed. The sync method must be set before
                    // collecting this display, so WindowState#prepareSync can use the sync method.
                    mTransitionController.setDisplaySyncMethod(startBounds, endBounds, this);
                    collectDisplayChange(transition);
                }
                requestChangeTransitionIfNeeded(changes, change);
            } else if (mLastHasContent) {
                mWmService.startFreezingDisplay(0 /* exitAnim */, 0 /* enterAnim */, this);
            }
@@ -3551,32 +3552,35 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    }

    /**
     * Requests to start a transition for the display configuration change. The given changes must
     * be non-zero. This method is no-op if the display has been collected.
     * Collects this display into an already-collecting transition.
     */
    void requestChangeTransitionIfNeeded(@ActivityInfo.Config int changes,
            @Nullable TransitionRequestInfo.DisplayChange displayChange) {
    void collectDisplayChange(@NonNull Transition transition) {
        if (!mLastHasContent) return;
        final TransitionController controller = mTransitionController;
        if (controller.isCollecting()) {
            if (displayChange != null) {
                throw new IllegalArgumentException("Provided displayChange for non-new transition");
        if (!transition.isCollecting()) {
            throw new IllegalArgumentException("Can only collect display change if transition"
                    + " is collecting");
        }
            if (!controller.isCollecting(this)) {
                controller.collect(this);
        if (!transition.mParticipants.contains(this)) {
            transition.collect(this);
            startAsyncRotationIfNeeded();
            if (mFixedRotationLaunchingApp != null) {
                    setSeamlessTransitionForFixedRotation(controller.getCollectingTransition());
                setSeamlessTransitionForFixedRotation(transition);
            }
        } else if (mAsyncRotationController != null && !isRotationChanging()) {
            Slog.i(TAG, "Finish AsyncRotation for previous intermediate change");
            finishAsyncRotationIfPossible();
        }
            return;
    }
        final Transition t = controller.requestTransitionIfNeeded(TRANSIT_CHANGE, 0 /* flags */,
                this, this, null /* remoteTransition */, displayChange);
        if (t != null) {

    /**
     * Requests to start a transition for a display change. {@code changes} must be non-zero.
     */
    void requestChangeTransition(@ActivityInfo.Config int changes,
            @Nullable TransitionRequestInfo.DisplayChange displayChange) {
        final TransitionController controller = mTransitionController;
        final Transition t = controller.requestStartDisplayTransition(TRANSIT_CHANGE, 0 /* flags */,
                this, null /* remoteTransition */, displayChange);
        t.collect(this);
        mAtmService.startPowerMode(POWER_MODE_REASON_CHANGE_DISPLAY);
        if (mAsyncRotationController != null) {
            // Give a chance to update the transform if the current rotation is changed when
@@ -3603,7 +3607,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        }
        t.setKnownConfigChanges(this, changes);
    }
    }

    private void setSeamlessTransitionForFixedRotation(Transition t) {
        t.setSeamlessRotation(this);
@@ -5722,14 +5725,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     */
    void requestTransitionAndLegacyPrepare(@WindowManager.TransitionType int transit,
            @WindowManager.TransitionFlags int flags) {
        requestTransitionAndLegacyPrepare(transit, flags, null /* trigger */);
    }

    /** @see #requestTransitionAndLegacyPrepare(int, int) */
    void requestTransitionAndLegacyPrepare(@WindowManager.TransitionType int transit,
            @WindowManager.TransitionFlags int flags, @Nullable WindowContainer trigger) {
        prepareAppTransition(transit, flags);
        mTransitionController.requestTransitionIfNeeded(transit, flags, trigger, this);
        mTransitionController.requestTransitionIfNeeded(transit, flags, null /* trigger */, this);
    }

    void executeAppTransition() {
@@ -6372,8 +6369,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        if (changes != 0) {
            Slog.i(TAG, "Override config changes=" + Integer.toHexString(changes) + " "
                    + mTempConfig + " for displayId=" + mDisplayId);
            if (isReady() && mTransitionController.isShellTransitionsEnabled()) {
                requestChangeTransitionIfNeeded(changes, null /* displayChange */);
            if (isReady() && mTransitionController.isShellTransitionsEnabled() && mLastHasContent) {
                final Transition transition = mTransitionController.getCollectingTransition();
                if (transition != null) {
                    collectDisplayChange(transition);
                } else {
                    requestChangeTransition(changes, null /* displayChange */);
                }
            }
            onRequestedOverrideConfigurationChanged(mTempConfig);

+11 −7
Original line number Diff line number Diff line
@@ -629,13 +629,17 @@ public class DisplayRotation {

        if (mDisplayContent.mTransitionController.isShellTransitionsEnabled()) {
            final boolean wasCollecting = mDisplayContent.mTransitionController.isCollecting();
            final TransitionRequestInfo.DisplayChange change = wasCollecting ? null
                    : new TransitionRequestInfo.DisplayChange(mDisplayContent.getDisplayId(),
            if (!wasCollecting) {
                if (mDisplayContent.getLastHasContent()) {
                    final TransitionRequestInfo.DisplayChange change =
                            new TransitionRequestInfo.DisplayChange(mDisplayContent.getDisplayId(),
                                    oldRotation, mRotation);

            mDisplayContent.requestChangeTransitionIfNeeded(
                    mDisplayContent.requestChangeTransition(
                            ActivityInfo.CONFIG_WINDOW_CONFIGURATION, change);
            if (wasCollecting) {
                }
            } else {
                mDisplayContent.collectDisplayChange(
                        mDisplayContent.mTransitionController.getCollectingTransition());
                // Use remote-rotation infra since the transition has already been requested
                // TODO(shell-transitions): Remove this once lifecycle management can cover all
                //                          rotation cases.
Loading