Ensuring that isPictureInPictureMode() mirrors dispatched mode.
- When transitioning out of picture-in-picture, we schedule
onPictureInPictureModeChanged() when the animation starts, so the check
in isInPictureInPicture() should match this as well.
Bug: 36845078
Test: Updated android.server.cts.ActivityManagerPinnedStackTests to also
whenever PipActivity PiP mode changes, that it matches the activity
state as well.
Change-Id: I31d7a3307b01b818e867f86a4553a363c7f11307
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index d99601c..099894c 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -411,6 +411,7 @@
import com.android.server.pm.Installer.InstallerException;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.vr.VrManagerInternal;
+import com.android.server.wm.PinnedStackWindowController;
import com.android.server.wm.WindowManagerService;
import org.xmlpull.v1.XmlPullParser;
@@ -7818,10 +7819,15 @@
try {
synchronized(this) {
final ActivityStack stack = ActivityRecord.getStackLocked(token);
- if (stack == null) {
+ if (stack == null || stack.mStackId != PINNED_STACK_ID) {
return false;
}
- return stack.mStackId == PINNED_STACK_ID;
+
+ // If we are animating to fullscreen then we have already dispatched the PIP mode
+ // changed, so we should reflect that check here as well.
+ final PinnedStackWindowController windowController =
+ ((PinnedActivityStack) stack).getWindowContainerController();
+ return !windowController.isAnimatingBoundsToFullscreen();
}
} finally {
Binder.restoreCallingIdentity(origId);