diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index dcdbfdedb0c86..0474af268b8e6 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4620,7 +4620,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // the current contract for "auto-Pip" is that the app should enter it before onPause // returns. Just need to confirm this reasoning makes sense. final boolean deferHidingClient = canEnterPictureInPicture - && !isState(STOPPING, STOPPED, PAUSED); + && !isState(STARTED, STOPPING, STOPPED, PAUSED); setDeferHidingClient(deferHidingClient); setVisibility(false); @@ -4631,9 +4631,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // activity is hidden supportsEnterPipOnTaskSwitch = false; break; - - case INITIALIZING: case RESUMED: + // If the app is capable of entering PIP, we should try pausing it now + // so it can PIP correctly. + if (deferHidingClient) { + getRootTask().startPausingLocked( + mStackSupervisor.mUserLeaving /* userLeaving */, + false /* uiSleeping */, null /* resuming */); + break; + } + case INITIALIZING: case PAUSING: case PAUSED: case STARTED: diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 2ab03ce058b2b..1340b04148fad 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -2676,9 +2676,9 @@ class ActivityStack extends Task { mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */, getDisplay().mDisplayId, false /* markFrozenIfConfigChanged */, false /* deferResume */); + } else { + mRootWindowContainer.resumeFocusedStacksTopActivities(); } - - mRootWindowContainer.resumeFocusedStacksTopActivities(); return true; }