diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index 297c79e86ad1a..f170e774739fc 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -966,7 +966,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, // Re-set the PIP bounds to none. mPipBoundsState.setBounds(new Rect()); mPipUiEventLoggerLogger.setTaskInfo(null); - mMainExecutor.executeDelayed(() -> mPipMenuController.detach(), 0); + mPipMenuController.detach(); mLeash = null; if (info.displayId != Display.DEFAULT_DISPLAY && mOnDisplayIdChangeCallback != null) { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 436cc4d4cbe9c..91db27861a38f 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -4465,6 +4465,14 @@ class Task extends TaskFragment { // transferring the transform on the leash to the task, reset this state once we're // moving out of pip setCanAffectSystemUiFlags(true); + // Turn on userLeaveHint so other app can enter PiP mode. + mTaskSupervisor.mUserLeaving = true; + // Allow entering PiP from current top most activity when we are leaving PiP. + final Task topFocused = mRootWindowContainer.getTopDisplayFocusedRootTask(); + if (topFocused != null) { + final ActivityRecord ar = topFocused.getTopResumedActivity(); + enableEnterPipOnTaskSwitch(ar, null /* toFrontTask */, ar, null /* opts */); + } mRootWindowContainer.notifyActivityPipModeChanged(this, null); } if (likelyResolvedMode == WINDOWING_MODE_PINNED) {