diff options
| author | Iris Yang <irisykyang@google.com> | 2022-02-24 13:39:11 +0000 |
|---|---|---|
| committer | Iris Yang <irisykyang@google.com> | 2022-03-09 12:48:52 +0000 |
| commit | 6d709f6f95fc2e8eb958976e87ecc2c4fb4610b1 (patch) | |
| tree | 07238bf6a13d30c28083b652613bc5f8148f2816 /core/java/android/window/DisplayWindowPolicyController.java | |
| parent | e78a3443f2dd33878a10b92eeae30e00c5f11ea2 (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.java | 47 |
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 |
