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

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

Merge "Refactor ensurePip call to be more explicit" into main

parents 920dc725 718e62fd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1945,7 +1945,7 @@ class ActivityStarter {
                && sourceRecord != null && sourceRecord.getTask() == mStartActivity.getTask()
                && balVerdict.allows()) {
            mRootWindowContainer.moveActivityToPinnedRootTask(mStartActivity,
                    sourceRecord, "launch-into-pip");
                    sourceRecord, "launch-into-pip", null /* bounds */);
        }

        mSupervisor.getBackgroundActivityLaunchController()
+16 −3
Original line number Diff line number Diff line
@@ -3796,9 +3796,22 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                        r.shortComponentName, Boolean.toString(isAutoEnter));
                r.setPictureInPictureParams(params);
                r.mAutoEnteringPip = isAutoEnter;

                if (transition != null) {
                    mRootWindowContainer.moveActivityToPinnedRootTaskAndRequestStart(r,
                            "enterPictureInPictureMode");
                } else if (getTransitionController().isCollecting()
                        || !getTransitionController().isShellTransitionsEnabled()) {
                    mRootWindowContainer.moveActivityToPinnedRootTask(r,
                            null /* launchIntoPipHostActivity */, "enterPictureInPictureMode",
                        transition);
                            null /* bounds */);
                } else {
                    // Need to make a transition just for this. This shouldn't really happen
                    // though because if transition == null, we should be part of an existing one.
                    getTransitionController().createTransition(TRANSIT_PIP);
                    mRootWindowContainer.moveActivityToPinnedRootTaskAndRequestStart(r,
                            "enterPictureInPictureMode");
                }
                // Continue the pausing process after entering pip.
                if (r.isState(PAUSING) && r.mPauseSchedulePendingForPip) {
                    r.getTask().schedulePauseActivity(r, false /* userLeaving */,
+26 −18
Original line number Diff line number Diff line
@@ -2032,33 +2032,39 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                onTop);
    }

    void moveActivityToPinnedRootTask(@NonNull ActivityRecord r,
            @Nullable ActivityRecord launchIntoPipHostActivity, String reason) {
        moveActivityToPinnedRootTask(r, launchIntoPipHostActivity, reason, null /* transition */);
    /** Wrapper/Helper for tests */
    void moveActivityToPinnedRootTask(@NonNull ActivityRecord r, String reason) {
        Transition newTransit = (r.mTransitionController.isCollecting()
                || !r.mTransitionController.isShellTransitionsEnabled())
                ? null : r.mTransitionController.createTransition(TRANSIT_PIP);
        moveActivityToPinnedRootTaskInner(r, null /* launchIntoPipHostActivity */, reason,
                null /* bounds */, newTransit != null);
    }

    void moveActivityToPinnedRootTask(@NonNull ActivityRecord r,
            @Nullable ActivityRecord launchIntoPipHostActivity, String reason,
            @Nullable Transition transition) {
        moveActivityToPinnedRootTask(r, launchIntoPipHostActivity, reason, transition,
                null /* bounds */);
            @Nullable Rect bounds) {
        moveActivityToPinnedRootTaskInner(r, launchIntoPipHostActivity, reason, bounds,
                false /* requestStart */);
    }

    void moveActivityToPinnedRootTask(@NonNull ActivityRecord r,
    /**
     * Moves activity to pinned in the provided transition and also requests start on that
     * Transition at an appropriate time.
     */
    void moveActivityToPinnedRootTaskAndRequestStart(@NonNull ActivityRecord r, String reason) {
        moveActivityToPinnedRootTaskInner(r, null /* launchIntoPipHostActivity */, reason,
                null /* bounds */, true /* requestStart */);
    }

    private void moveActivityToPinnedRootTaskInner(@NonNull ActivityRecord r,
            @Nullable ActivityRecord launchIntoPipHostActivity, String reason,
            @Nullable Transition transition, @Nullable Rect bounds) {
            @Nullable Rect bounds, boolean requestStart) {
        final TaskDisplayArea taskDisplayArea = r.getDisplayArea();
        final Task task = r.getTask();
        final Task rootTask;

        Transition newTransition = transition;
        // Create a transition now (if not provided) to collect the current pinned Task dismiss.
        // Only do the create here as the Task (trigger) to enter PIP is not ready yet.
        final TransitionController transitionController = task.mTransitionController;
        if (newTransition == null && !transitionController.isCollecting()
                && transitionController.getTransitionPlayer() != null) {
            newTransition = transitionController.createTransition(TRANSIT_PIP);
        }

        transitionController.deferTransitionReady();
        Transition.ReadyCondition pipChangesApplied = new Transition.ReadyCondition("movedToPip");
@@ -2273,14 +2279,16 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
            }
        }

        if (newTransition != null) {
        // can be null (for now) if shell transitions are disabled or inactive at this time
        final Transition transit = transitionController.getCollectingTransition();
        if (requestStart && transit != null) {
            // Request at end since we want task-organizer events from ensureActivitiesVisible
            // to be recognized.
            transitionController.requestStartTransition(newTransition, rootTask,
            transitionController.requestStartTransition(transit, rootTask,
                    null /* remoteTransition */, null /* displayChange */);
            // A new transition was created just for this operations. Since the operation is
            // complete, mark it as ready.
            newTransition.setReady(rootTask, true /* ready */);
            transit.setReady(rootTask, true /* ready */);
        }

        resumeFocusedTasksTopActivities();
+1 −1
Original line number Diff line number Diff line
@@ -1339,7 +1339,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                Rect entryBounds = hop.getBounds();
                mService.mRootWindowContainer.moveActivityToPinnedRootTask(
                        pipActivity, null /* launchIntoPipHostActivity */,
                        "moveActivityToPinnedRootTask", null /* transition */, entryBounds);
                        "moveActivityToPinnedRootTask", entryBounds);

                if (pipActivity.isState(PAUSING) && pipActivity.mPauseSchedulePendingForPip) {
                    // Continue the pausing process. This must be done after moving PiP activity to
+8 −16
Original line number Diff line number Diff line
@@ -371,8 +371,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        ensureTaskPlacement(fullscreenTask, firstActivity, secondActivity);

        // Move first activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(firstActivity,
                null /* launchIntoPipHostActivity */, "initialMove");
        mRootWindowContainer.moveActivityToPinnedRootTask(firstActivity, "initialMove");

        final TaskDisplayArea taskDisplayArea = fullscreenTask.getDisplayArea();
        Task pinnedRootTask = taskDisplayArea.getRootPinnedTask();
@@ -381,8 +380,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        ensureTaskPlacement(fullscreenTask, secondActivity);

        // Move second activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(secondActivity,
                null /* launchIntoPipHostActivity */, "secondMove");
        mRootWindowContainer.moveActivityToPinnedRootTask(secondActivity, "secondMove");

        // Need to get root tasks again as a new instance might have been created.
        pinnedRootTask = taskDisplayArea.getRootPinnedTask();
@@ -413,8 +411,7 @@ public class RootWindowContainerTests extends WindowTestsBase {


        // Move first activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(secondActivity,
                null /* launchIntoPipHostActivity */, "initialMove");
        mRootWindowContainer.moveActivityToPinnedRootTask(secondActivity, "initialMove");

        assertTrue(firstActivity.mRequestForceTransition);
    }
@@ -434,8 +431,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        transientActivity.setState(RESUMED, "test");
        transientActivity.getTask().moveToFront("test");

        mRootWindowContainer.moveActivityToPinnedRootTask(activity2,
                null /* launchIntoPipHostActivity */, "test");
        mRootWindowContainer.moveActivityToPinnedRootTask(activity2, "test");
        assertEquals("Created PiP task must not change focus", transientActivity.getTask(),
                mRootWindowContainer.getTopDisplayFocusedRootTask());
        final Task newPipTask = activity2.getTask();
@@ -460,8 +456,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        final Task task = activity.getTask();

        // Move activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(activity,
                null /* launchIntoPipHostActivity */, "test");
        mRootWindowContainer.moveActivityToPinnedRootTask(activity, "test");

        // Ensure a task has moved over.
        ensureTaskPlacement(task, activity);
@@ -499,8 +494,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        final Task task = activity.getTask();

        // Move activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(activity,
                null /* launchIntoPipHostActivity */, "test");
        mRootWindowContainer.moveActivityToPinnedRootTask(activity, "test");

        // Ensure a task has moved over.
        ensureTaskPlacement(task, activity);
@@ -524,8 +518,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        final ActivityRecord secondActivity = taskFragment.getBottomMostActivity();

        // Move first activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(firstActivity,
                null /* launchIntoPipHostActivity */, "test");
        mRootWindowContainer.moveActivityToPinnedRootTask(firstActivity, "test");

        final TaskDisplayArea taskDisplayArea = fullscreenTask.getDisplayArea();
        final Task pinnedRootTask = taskDisplayArea.getRootPinnedTask();
@@ -556,8 +549,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
        final ActivityRecord topActivity = taskFragment.getTopMostActivity();

        // Move the top activity to pinned root task.
        mRootWindowContainer.moveActivityToPinnedRootTask(topActivity,
                null /* launchIntoPipHostActivity */, "test");
        mRootWindowContainer.moveActivityToPinnedRootTask(topActivity, "test");

        final Task pinnedRootTask = task.getDisplayArea().getRootPinnedTask();

Loading