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
This commit is contained in:
Evan Rosky
2022-02-17 15:43:41 -08:00
parent 71ac6f0031
commit 5a28c5b6cd
2 changed files with 16 additions and 3 deletions

View File

@@ -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;

View File

@@ -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.