diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 00720cf40f761..5970f622955ec 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -5154,6 +5154,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A void notifyAppStopped() { ProtoLog.v(WM_DEBUG_ADD_REMOVE, "notifyAppStopped: %s", this); mAppStopped = true; + // This is to fix the edge case that auto-enter-pip is finished in Launcher but app calls + // setAutoEnterEnabled(false) and transitions to STOPPED state, see b/191930787. + // Clear any surface transactions and content overlay in this case. + if (task != null && task.mLastRecentsAnimationTransaction != null) { + task.clearLastRecentsAnimationTransaction(true /* forceRemoveOverlay */); + } // Reset the last saved PiP snap fraction on app stop. mDisplayContent.mPinnedTaskController.onActivityHidden(mActivityComponent); mDisplayContent.mUnknownAppVisibilityController.appRemovedOrHidden(this); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 0b463a962cb3d..24c5c82ef5c65 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2157,7 +2157,7 @@ class RootWindowContainer extends WindowContainer rootTask.setLastRecentsAnimationTransaction( task.mLastRecentsAnimationTransaction, task.mLastRecentsAnimationOverlay); - task.clearLastRecentsAnimationTransaction(); + task.clearLastRecentsAnimationTransaction(false /* forceRemoveOverlay */); } // There are multiple activities in the task and moving the top activity should diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 04f5739d96d60..2355dde0486ec 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -6031,7 +6031,10 @@ class Task extends TaskFragment { mLastRecentsAnimationOverlay = overlay; } - void clearLastRecentsAnimationTransaction() { + void clearLastRecentsAnimationTransaction(boolean forceRemoveOverlay) { + if (forceRemoveOverlay && mLastRecentsAnimationOverlay != null) { + getPendingTransaction().remove(mLastRecentsAnimationOverlay); + } mLastRecentsAnimationTransaction = null; mLastRecentsAnimationOverlay = null; // reset also the crop and transform introduced by mLastRecentsAnimationTransaction