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

Commit 7ddd5a4a authored by Ikram Gabiyev's avatar Ikram Gabiyev Committed by Android (Google) Code Review
Browse files

Merge "Only mark queued transition as no-op if Shell-init" into main

parents ee24e3f5 a4478110
Loading
Loading
Loading
Loading
+20 −8
Original line number Original line Diff line number Diff line
@@ -1571,13 +1571,14 @@ class TransitionController {
        proto.end(token);
        proto.end(token);
    }
    }


    /** Returns {@code true} if it started collecting, {@code false} if it was queued. */
    private void queueTransition(Transition transit, OnStartCollect onStartCollect,
    private void queueTransition(Transition transit, OnStartCollect onStartCollect) {
            boolean noopIfDuringDisplayChange) {
        final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect);
        final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect);


        // If we queue a non-display transition while a collecting transition is still not
        // If we queue a non-display transition while a collecting transition
        // formally started, then check if collecting transition is changing a display
        // is still not formally started, then check if collecting transition is changing a display.
        if ((transit.getFlags() & TRANSIT_FLAG_DISPLAY_LEVEL_TRANSITION) == 0
        if (noopIfDuringDisplayChange
                && (transit.getFlags() & TRANSIT_FLAG_DISPLAY_LEVEL_TRANSITION) == 0
                && mCollectingTransition != null && !mCollectingTransition.hasStarted()) {
                && mCollectingTransition != null && !mCollectingTransition.hasStarted()) {
            for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) {
            for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) {
                if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) {
                if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) {
@@ -1592,11 +1593,22 @@ class TransitionController {
                "Queueing transition: %s", transit);
                "Queueing transition: %s", transit);
    }
    }


    /** Returns {@code true} if it started collecting, {@code false} if it was queued. */
    /** @see #startCollectOrQueue(Transition, OnStartCollect, boolean) */
    boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) {
    boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) {
        return startCollectOrQueue(transit, onStartCollect, false /* isDirectFromShell */);
    }

    /**
     * Returns {@code true} if it started collecting, {@code false} if it was queued.
     *
     * @param noopIfDuringDisplayChange true we should no-op this transition when a display
     *                                  changing transition is collecting but not formally started.
     */
    boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect,
            boolean noopIfDuringDisplayChange) {
        if (!mQueuedTransitions.isEmpty()) {
        if (!mQueuedTransitions.isEmpty()) {
            // Just add to queue since we already have a queue.
            // Just add to queue since we already have a queue.
            queueTransition(transit, onStartCollect);
            queueTransition(transit, onStartCollect, noopIfDuringDisplayChange);
            return false;
            return false;
        }
        }
        if (mSyncEngine.hasActiveSync()) {
        if (mSyncEngine.hasActiveSync()) {
@@ -1615,7 +1627,7 @@ class TransitionController {
            } else {
            } else {
                Slog.w(TAG, "Ongoing Sync outside of transition.");
                Slog.w(TAG, "Ongoing Sync outside of transition.");
            }
            }
            queueTransition(transit, onStartCollect);
            queueTransition(transit, onStartCollect, noopIfDuringDisplayChange);
            return false;
            return false;
        }
        }
        moveToCollecting(transit);
        moveToCollecting(transit);
+1 −1
Original line number Original line Diff line number Diff line
@@ -380,7 +380,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                                    setAllReadyIfNeeded(nextTransition, wct);
                                    setAllReadyIfNeeded(nextTransition, wct);
                                }
                                }
                                mService.mChainTracker.end();
                                mService.mChainTracker.end();
                            });
                            }, true /* noopIfDuringDisplayChange */);
                    return nextTransition.getToken();
                    return nextTransition.getToken();
                }
                }
                // The transition already started collecting before sending a request to shell,
                // The transition already started collecting before sending a request to shell,
+3 −3
Original line number Original line Diff line number Diff line
@@ -3109,7 +3109,7 @@ public class TransitionTests extends WindowTestsBase {


        final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class);
        final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class);
        final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller);
        final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller);
        controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback);
        controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback, true);


        // Finish display transition
        // Finish display transition
        controller.requestStartTransition(displayTransition, /* startTask= */ null,
        controller.requestStartTransition(displayTransition, /* startTask= */ null,
@@ -3141,7 +3141,7 @@ public class TransitionTests extends WindowTestsBase {


        final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class);
        final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class);
        final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller);
        final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller);
        controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback);
        controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback, true);


        // Finish the display transition
        // Finish the display transition
        player.finish();
        player.finish();
@@ -3215,7 +3215,7 @@ public class TransitionTests extends WindowTestsBase {


        final OnStartCollect queuedTransitionStartedCallback = mock(OnStartCollect.class);
        final OnStartCollect queuedTransitionStartedCallback = mock(OnStartCollect.class);
        final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller);
        final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller);
        controller.startCollectOrQueue(queuedTransition, queuedTransitionStartedCallback);
        controller.startCollectOrQueue(queuedTransition, queuedTransitionStartedCallback, true);


        // Finish the first transition
        // Finish the first transition
        controller.requestStartTransition(nonDisplayTransition, /* startTask= */ null,
        controller.requestStartTransition(nonDisplayTransition, /* startTask= */ null,