summaryrefslogtreecommitdiff
path: root/core/java/android/window/DisplayWindowPolicyController.java
diff options
context:
space:
mode:
authorIris Yang <irisykyang@google.com>2022-02-24 13:39:11 +0000
committerIris Yang <irisykyang@google.com>2022-03-09 12:48:52 +0000
commit6d709f6f95fc2e8eb958976e87ecc2c4fb4610b1 (patch)
tree07238bf6a13d30c28083b652613bc5f8148f2816 /core/java/android/window/DisplayWindowPolicyController.java
parente78a3443f2dd33878a10b92eeae30e00c5f11ea2 (diff)
Add API to indicate supported windowing modes on the virtual displays
1. Add new API in DWPC to get windowing features of the virtual display. 2. In ActivityRecord, consume the value of the allowed windowing modes of virtual display. Bug: 180435098 Test: atest WmTests:ActivityRecordTests#testSupportsPictureInPicture && atest WmTests:DisplayWindowPolicyControllerHelperTests Change-Id: I39a6cd9417f266f7fdef72cc054263c3ca4c5650
Diffstat (limited to 'core/java/android/window/DisplayWindowPolicyController.java')
-rw-r--r--core/java/android/window/DisplayWindowPolicyController.java47
1 files changed, 45 insertions, 2 deletions
diff --git a/core/java/android/window/DisplayWindowPolicyController.java b/core/java/android/window/DisplayWindowPolicyController.java
index 3359a41369d7..1270d87e3a04 100644
--- a/core/java/android/window/DisplayWindowPolicyController.java
+++ b/core/java/android/window/DisplayWindowPolicyController.java
@@ -17,12 +17,14 @@
package android.window;
import android.annotation.NonNull;
+import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.util.ArraySet;
import java.io.PrintWriter;
import java.util.List;
+import java.util.Set;
/**
* Abstract class to control the policies of the windows that can be displayed on the virtual
@@ -46,6 +48,22 @@ public abstract class DisplayWindowPolicyController {
private int mSystemWindowFlags;
/**
+ * The set of windowing mode that are supported in this display.
+ * @see android.app.WindowConfiguration.WindowingMode
+ */
+ private final Set<Integer> mSupportedWindowingModes = new ArraySet<>();
+
+ /**
+ * A controller to control the policies of the windows that can be displayed on the virtual
+ * display.
+ */
+ public DisplayWindowPolicyController() {
+ synchronized (mSupportedWindowingModes) {
+ mSupportedWindowingModes.add(WindowConfiguration.WINDOWING_MODE_FULLSCREEN);
+ }
+ }
+
+ /**
* Returns {@code true} if the given window flags contain the flags that we're interested in.
*/
public final boolean isInterestedWindowFlags(int windowFlags, int systemWindowFlags) {
@@ -62,9 +80,34 @@ public abstract class DisplayWindowPolicyController {
}
/**
- * Returns {@code true} if the given activities can be displayed on this virtual display.
+ * Returns {@code true} if the given windowing mode is supported in this display.
+ */
+ public final boolean isWindowingModeSupported(
+ @WindowConfiguration.WindowingMode int windowingMode) {
+ synchronized (mSupportedWindowingModes) {
+ return mSupportedWindowingModes.contains(windowingMode);
+ }
+ }
+
+ /**
+ * Sets the windowing modes are supported in this display.
+ *
+ * @param supportedWindowingModes The set of
+ * {@link android.app.WindowConfiguration.WindowingMode}.
+ */
+ public final void setSupportedWindowingModes(Set<Integer> supportedWindowingModes) {
+ synchronized (mSupportedWindowingModes) {
+ mSupportedWindowingModes.clear();
+ mSupportedWindowingModes.addAll(supportedWindowingModes);
+ }
+ }
+
+ /**
+ * Returns {@code true} if the given activities can be displayed on this virtual display and
+ * the windowing mode is supported.
*/
- public abstract boolean canContainActivities(@NonNull List<ActivityInfo> activities);
+ public abstract boolean canContainActivities(@NonNull List<ActivityInfo> activities,
+ @WindowConfiguration.WindowingMode int windowingMode);
/**
* Called when an Activity window is layouted with the new changes where contains the