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 1155ea174ed13..e6bcbb5301938 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 @@ -949,7 +949,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 3b97e637a20a1..5944c61567c30 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -4440,6 +4440,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) {