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

Commit 5a28c5b6 authored by Evan Rosky's avatar Evan Rosky
Browse files

Disable PiP entry when switching tasks via recents

With shell transitions, the recents activity gets brought to
the front. This sets enter-pip-on-task-switch so once we actually
switch tasks, the previous one goes to pip.

In legacy, because of launch-behind, enter-pip-on-task-switch
doesn't get set.

In order to match the current behavior (don't PiP during recents
switch), we prevent enter-pip-on-task-switch into transient
activities. Then, only if the transient-launch is actually
committed, we enable the flag before attempting to pip.

Bug: 220196913
Test: open an auto-pip app. quickswitch to another app.
Change-Id: Ib7d2fa36c74eca9b166a957a907b2681f48e9d0e
parent 71ac6f00
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -5149,10 +5149,13 @@ class Task extends TaskFragment {
            // Ensure that we do not trigger entering PiP an activity on the root pinned task
            return false;
        }
        final boolean isTransient = opts != null && opts.getTransientLaunch();
        final Task targetRootTask = toFrontTask != null
                ? toFrontTask.getRootTask() : toFrontActivity.getRootTask();
        if (targetRootTask != null && targetRootTask.isActivityTypeAssistant()) {
            // Ensure the task/activity being brought forward is not the assistant
        if (targetRootTask != null && (targetRootTask.isActivityTypeAssistant() || isTransient)) {
            // Ensure the task/activity being brought forward is not the assistant and is not
            // transient. In the case of transient-launch, we want to wait until the end of the
            // transition and only allow switch if the transient launch was committed.
            return false;
        }
        return true;
+11 −1
Original line number Diff line number Diff line
@@ -459,9 +459,19 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
                // activity in a bad state.
                if (!visibleAtTransitionEnd && !ar.isVisibleRequested()) {
                    boolean commitVisibility = true;
                    if (ar.getDeferHidingClient() && ar.getTask() != null) {
                    if (ar.isVisible() && ar.getTask() != null) {
                        if (ar.pictureInPictureArgs != null
                                && ar.pictureInPictureArgs.isAutoEnterEnabled()) {
                            if (mTransientLaunches != null) {
                                for (int j = 0; j < mTransientLaunches.size(); ++j) {
                                    if (mTransientLaunches.valueAt(j).isVisibleRequested()) {
                                        // force enable pip-on-task-switch now that we've committed
                                        // to actually launching to the transient activity.
                                        ar.supportsEnterPipOnTaskSwitch = true;
                                        break;
                                    }
                                }
                            }
                            mController.mAtm.enterPictureInPictureMode(ar, ar.pictureInPictureArgs);
                            // Avoid commit visibility to false here, or else we will get a sudden
                            // "flash" / surface going invisible for a split second.