From 02e71939151e0ea46fe11be6cbbe08e3c756e74f Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 10 Mar 2017 10:08:17 -0800 Subject: [PATCH] Prevent updating the PiP when it is being dismissed. Bug: 35588768 Test: android.server.cts.ActivityManagerPinnedStackTests Test: #testPreventSetAspectRatioWhileExpanding Change-Id: I2bcfdaad97c552cccef253370a6231253c956d22 --- .../core/java/com/android/server/am/ActivityManagerService.java | 9 +++++++-- .../core/java/com/android/server/am/PinnedActivityStack.java | 4 ++++ .../java/com/android/server/wm/PinnedStackWindowController.java | 7 +++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index fef7b513b7bc..135942f3a0d8 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -7808,9 +7808,14 @@ public class ActivityManagerService extends IActivityManager.Stub r.pictureInPictureArgs.copyOnlySet(args); if (r.getStack().getStackId() == PINNED_STACK_ID) { // If the activity is already in picture-in-picture, update the pinned stack now + // if it is not already expanding to fullscreen. Otherwise, the arguments will + // be used the next time the activity enters PiP final PinnedActivityStack stack = r.getStack(); - stack.setPictureInPictureAspectRatio(r.pictureInPictureArgs.getAspectRatio()); - stack.setPictureInPictureActions(r.pictureInPictureArgs.getActions()); + if (!stack.isBoundsAnimatingToFullscreen()) { + stack.setPictureInPictureAspectRatio( + r.pictureInPictureArgs.getAspectRatio()); + stack.setPictureInPictureActions(r.pictureInPictureArgs.getActions()); + } } logPictureInPictureArgs(args); } diff --git a/services/core/java/com/android/server/am/PinnedActivityStack.java b/services/core/java/com/android/server/am/PinnedActivityStack.java index aa7ab15b7749..1708fe503b64 100644 --- a/services/core/java/com/android/server/am/PinnedActivityStack.java +++ b/services/core/java/com/android/server/am/PinnedActivityStack.java @@ -52,4 +52,8 @@ class PinnedActivityStack extends ActivityStack { void setPictureInPictureActions(List actions) { getWindowContainerController().setPictureInPictureActions(actions); } + + boolean isBoundsAnimatingToFullscreen() { + return getWindowContainerController().isBoundsAnimatingToFullscreen(); + } } diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowController.java b/services/core/java/com/android/server/wm/PinnedStackWindowController.java index 71f88de724fb..6a0e353ea385 100644 --- a/services/core/java/com/android/server/wm/PinnedStackWindowController.java +++ b/services/core/java/com/android/server/wm/PinnedStackWindowController.java @@ -109,6 +109,13 @@ public class PinnedStackWindowController extends StackWindowController { } /** + * @return whether the bounds are currently animating to fullscreen. + */ + public boolean isBoundsAnimatingToFullscreen() { + return mContainer.isBoundsAnimatingToFullscreen(); + } + + /** * Checks the {@param bounds} and retirms non-null fullscreen bounds for the pinned stack * animation if necessary. */ -- 2.11.0