summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author jorgegil@google.com <jorgegil@google.com> 2020-06-04 14:58:24 -0700
committer jorgegil@google.com <jorgegil@google.com> 2020-06-04 15:02:44 -0700
commit2e9cf025d867d8e1fe7b977e0762715fe4d3dbaa (patch)
tree5d6c0a007b34a63062cd088a2ecf8e21f9e5fa7c
parent3bf4ec139bef8ea0a4a2d13a2d9e4c64bc82e9ca (diff)
Check that activity is not in PIP mode already
This change verifies that the requested activity to PIP is not already in PIP mode before scheduling a transaction with an EnterPipRequestedItem. Bug: 156365025 Test: atest WmTests:ActivityTaskManagerServiceTests Change-Id: I37019368b00440bdd24cb3ee5f4bfaf667464f8a
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java4
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java16
2 files changed, 18 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 5f591b54b067..7c935d0ea546 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -4873,6 +4873,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
return;
}
+ if (isInPictureInPictureMode(activity)) {
+ throw new IllegalStateException("Activity is already in PIP mode");
+ }
+
final boolean canEnterPictureInPicture = activity.checkEnterPictureInPictureState(
"requestPictureInPictureMode", /* beforeStopping */ false);
if (!canEnterPictureInPicture) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
index bd616a3a96f3..64b5eca1beb8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
@@ -17,7 +17,6 @@
package com.android.server.wm;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
@@ -111,7 +110,7 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase {
final ActivityStack stack = new StackBuilder(mRootWindowContainer).build();
final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
ClientLifecycleManager lifecycleManager = mService.getLifecycleManager();
- doNothing().when(lifecycleManager).scheduleTransaction(any());
+ doReturn(false).when(activity).inPinnedWindowingMode();
doReturn(false).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean());
mService.requestPictureInPictureMode(activity.token);
@@ -120,6 +119,19 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase {
verify(lifecycleManager, times(0)).scheduleTransaction(any());
}
+ @Test(expected = IllegalStateException.class)
+ public void testOnPictureInPictureRequested_alreadyInPIPMode() throws RemoteException {
+ final ActivityStack stack = new StackBuilder(mRootWindowContainer).build();
+ final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
+ ClientLifecycleManager lifecycleManager = mService.getLifecycleManager();
+ doReturn(true).when(activity).inPinnedWindowingMode();
+
+ mService.requestPictureInPictureMode(activity.token);
+
+ // Check that no transactions with enter pip requests are made.
+ verify(lifecycleManager, times(0)).scheduleTransaction(any());
+ }
+
@Test
public void testDisplayWindowListener() {
final ArrayList<Integer> added = new ArrayList<>();