diff options
| author | 2020-06-04 14:58:24 -0700 | |
|---|---|---|
| committer | 2020-06-04 15:02:44 -0700 | |
| commit | 2e9cf025d867d8e1fe7b977e0762715fe4d3dbaa (patch) | |
| tree | 5d6c0a007b34a63062cd088a2ecf8e21f9e5fa7c | |
| parent | 3bf4ec139bef8ea0a4a2d13a2d9e4c64bc82e9ca (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.java | 4 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java | 16 |
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<>(); |