summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Iris Yang <irisykyang@google.com> 2022-03-21 05:28:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-03-21 05:28:44 +0000
commit26493a5cccd67fcd543cb6e87bfb89f6db26055b (patch)
tree021a076a152dd575abed1f969820ebba1bc2196b
parentf5e0219d52b623884382cbf1eb7118a74428f64a (diff)
parent2c2516afc79d34a1b91c5c250faea69ef712f52e (diff)
Merge "Check whether a display supported pip when an activity try to enter pip" into tm-dev
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java34
2 files changed, 31 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 67b846b1cb0b..4bef126ee2c8 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2915,9 +2915,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
*/
boolean supportsPictureInPicture() {
return mAtmService.mSupportsPictureInPicture && isActivityTypeStandardOrUndefined()
- && info.supportsPictureInPicture()
- && (mDisplayContent != null && mDisplayContent.mDwpcHelper.isWindowingModeSupported(
- WINDOWING_MODE_PINNED));
+ && info.supportsPictureInPicture();
}
/**
@@ -3015,6 +3013,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return false;
}
+ // Check to see if PiP is supported for the display this container is on.
+ if (mDisplayContent != null && !mDisplayContent.mDwpcHelper.isWindowingModeSupported(
+ WINDOWING_MODE_PINNED)) {
+ Slog.w(TAG, "Display " + mDisplayContent.getDisplayId()
+ + " doesn't support enter picture-in-picture mode. caller = " + caller);
+ return false;
+ }
+
boolean isCurrentAppLocked =
mAtmService.getLockTaskModeState() != LOCK_TASK_MODE_NONE;
final TaskDisplayArea taskDisplayArea = getDisplayArea();
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index f8e15041f8f4..f9d4dffd4643 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -16,6 +16,8 @@
package com.android.server.wm;
+import static android.app.AppOpsManager.MODE_ALLOWED;
+import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
@@ -110,6 +112,7 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.never;
import android.app.ActivityOptions;
+import android.app.AppOpsManager;
import android.app.ICompatCameraControlCallback;
import android.app.PictureInPictureParams;
import android.app.servertransaction.ActivityConfigurationChangeItem;
@@ -2184,17 +2187,11 @@ public class ActivityRecordTests extends WindowTestsBase {
@Test
public void testSupportsPictureInPicture() {
- final Task task = new TaskBuilder(mSupervisor)
- .setDisplay(mDisplayContent).build();
final ActivityRecord activity = new ActivityBuilder(mAtm)
- .setTask(task)
+ .setCreateTask(true)
.setResizeMode(ActivityInfo.RESIZE_MODE_UNRESIZEABLE)
.setActivityFlags(FLAG_SUPPORTS_PICTURE_IN_PICTURE)
.build();
- spyOn(mDisplayContent);
- spyOn(mDisplayContent.mDwpcHelper);
- doReturn(true).when(mDisplayContent.mDwpcHelper).isWindowingModeSupported(
- WINDOWING_MODE_PINNED);
// Device not supports PIP
mAtm.mSupportsPictureInPicture = false;
@@ -2207,15 +2204,28 @@ public class ActivityRecordTests extends WindowTestsBase {
// Activity not supports PIP
activity.info.flags &= ~FLAG_SUPPORTS_PICTURE_IN_PICTURE;
assertFalse(activity.supportsPictureInPicture());
+ }
- // Activity supports PIP
- activity.info.flags |= FLAG_SUPPORTS_PICTURE_IN_PICTURE;
- assertTrue(activity.supportsPictureInPicture());
+ @Test
+ public void testCheckEnterPictureInPictureState_displayNotSupportedPip() {
+ final Task task = new TaskBuilder(mSupervisor)
+ .setDisplay(mDisplayContent).build();
+ final ActivityRecord activity = new ActivityBuilder(mAtm)
+ .setTask(task)
+ .setResizeMode(ActivityInfo.RESIZE_MODE_UNRESIZEABLE)
+ .setActivityFlags(FLAG_SUPPORTS_PICTURE_IN_PICTURE)
+ .build();
+ mAtm.mSupportsPictureInPicture = true;
+ AppOpsManager appOpsManager = mAtm.getAppOpsManager();
+ doReturn(MODE_ALLOWED).when(appOpsManager).checkOpNoThrow(eq(OP_PICTURE_IN_PICTURE),
+ anyInt(), any());
+ doReturn(false).when(mAtm).shouldDisableNonVrUiLocked();
- // Display not supports PIP
+ spyOn(mDisplayContent.mDwpcHelper);
doReturn(false).when(mDisplayContent.mDwpcHelper).isWindowingModeSupported(
WINDOWING_MODE_PINNED);
- assertFalse(activity.supportsPictureInPicture());
+
+ assertFalse(activity.checkEnterPictureInPictureState("TEST", false /* beforeStopping */));
}
@Test