Loading core/java/android/window/DisplayWindowPolicyController.java +45 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -45,6 +47,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. */ Loading @@ -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 Loading services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.app.compat.CompatChanges; import android.companion.virtual.VirtualDeviceManager.ActivityListener; import android.companion.virtual.VirtualDeviceParams; Loading Loading @@ -119,6 +120,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController @ActivityPolicy int defaultActivityPolicy, @NonNull ActivityListener activityListener, @NonNull Consumer<ActivityInfo> activityBlockedCallback) { super(); mAllowedUsers = allowedUsers; mAllowedActivities = new ArraySet<>(allowedActivities); mBlockedActivities = new ArraySet<>(blockedActivities); Loading @@ -134,7 +136,11 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController } @Override public boolean canContainActivities(@NonNull List<ActivityInfo> activities) { public boolean canContainActivities(@NonNull List<ActivityInfo> activities, @WindowConfiguration.WindowingMode int windowingMode) { if (!isWindowingModeSupported(windowingMode)) { return false; } // Can't display all the activities if any of them don't want to be displayed. final int activityCount = activities.size(); for (int i = 0; i < activityCount; i++) { Loading services/core/java/com/android/server/wm/ActivityRecord.java +3 −1 Original line number Diff line number Diff line Loading @@ -2914,7 +2914,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A */ boolean supportsPictureInPicture() { return mAtmService.mSupportsPictureInPicture && isActivityTypeStandardOrUndefined() && info.supportsPictureInPicture(); && info.supportsPictureInPicture() && (mDisplayContent != null && mDisplayContent.mDwpcHelper.isWindowingModeSupported( WINDOWING_MODE_PINNED)); } /** Loading services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +2 −1 Original line number Diff line number Diff line Loading @@ -402,7 +402,8 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { activities.add(r.info); }); } if (!displayContent.mDwpcHelper.canContainActivities(activities)) { if (!displayContent.mDwpcHelper.canContainActivities(activities, displayContent.getWindowingMode())) { return false; } } Loading services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java +16 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.content.pm.ActivityInfo; import android.os.UserHandle; import android.util.ArraySet; Loading Loading @@ -63,13 +64,14 @@ class DisplayWindowPolicyControllerHelper { } /** * @see DisplayWindowPolicyController#canContainActivities(List) * @see DisplayWindowPolicyController#canContainActivities(List, int) */ public boolean canContainActivities(@NonNull List<ActivityInfo> activities) { public boolean canContainActivities(@NonNull List<ActivityInfo> activities, @WindowConfiguration.WindowingMode int windowingMode) { if (mDisplayWindowPolicyController == null) { return true; } return mDisplayWindowPolicyController.canContainActivities(activities); return mDisplayWindowPolicyController.canContainActivities(activities, windowingMode); } /** Loading Loading @@ -126,6 +128,17 @@ class DisplayWindowPolicyControllerHelper { } } /** * @see DisplayWindowPolicyController#isWindowingModeSupported(int) */ public final boolean isWindowingModeSupported( @WindowConfiguration.WindowingMode int windowingMode) { if (mDisplayWindowPolicyController == null) { return true; } return mDisplayWindowPolicyController.isWindowingModeSupported(windowingMode); } void dump(String prefix, PrintWriter pw) { if (mDisplayWindowPolicyController != null) { pw.println(); Loading Loading
core/java/android/window/DisplayWindowPolicyController.java +45 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -45,6 +47,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. */ Loading @@ -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 Loading
services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.app.compat.CompatChanges; import android.companion.virtual.VirtualDeviceManager.ActivityListener; import android.companion.virtual.VirtualDeviceParams; Loading Loading @@ -119,6 +120,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController @ActivityPolicy int defaultActivityPolicy, @NonNull ActivityListener activityListener, @NonNull Consumer<ActivityInfo> activityBlockedCallback) { super(); mAllowedUsers = allowedUsers; mAllowedActivities = new ArraySet<>(allowedActivities); mBlockedActivities = new ArraySet<>(blockedActivities); Loading @@ -134,7 +136,11 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController } @Override public boolean canContainActivities(@NonNull List<ActivityInfo> activities) { public boolean canContainActivities(@NonNull List<ActivityInfo> activities, @WindowConfiguration.WindowingMode int windowingMode) { if (!isWindowingModeSupported(windowingMode)) { return false; } // Can't display all the activities if any of them don't want to be displayed. final int activityCount = activities.size(); for (int i = 0; i < activityCount; i++) { Loading
services/core/java/com/android/server/wm/ActivityRecord.java +3 −1 Original line number Diff line number Diff line Loading @@ -2914,7 +2914,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A */ boolean supportsPictureInPicture() { return mAtmService.mSupportsPictureInPicture && isActivityTypeStandardOrUndefined() && info.supportsPictureInPicture(); && info.supportsPictureInPicture() && (mDisplayContent != null && mDisplayContent.mDwpcHelper.isWindowingModeSupported( WINDOWING_MODE_PINNED)); } /** Loading
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +2 −1 Original line number Diff line number Diff line Loading @@ -402,7 +402,8 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { activities.add(r.info); }); } if (!displayContent.mDwpcHelper.canContainActivities(activities)) { if (!displayContent.mDwpcHelper.canContainActivities(activities, displayContent.getWindowingMode())) { return false; } } Loading
services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java +16 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.content.pm.ActivityInfo; import android.os.UserHandle; import android.util.ArraySet; Loading Loading @@ -63,13 +64,14 @@ class DisplayWindowPolicyControllerHelper { } /** * @see DisplayWindowPolicyController#canContainActivities(List) * @see DisplayWindowPolicyController#canContainActivities(List, int) */ public boolean canContainActivities(@NonNull List<ActivityInfo> activities) { public boolean canContainActivities(@NonNull List<ActivityInfo> activities, @WindowConfiguration.WindowingMode int windowingMode) { if (mDisplayWindowPolicyController == null) { return true; } return mDisplayWindowPolicyController.canContainActivities(activities); return mDisplayWindowPolicyController.canContainActivities(activities, windowingMode); } /** Loading Loading @@ -126,6 +128,17 @@ class DisplayWindowPolicyControllerHelper { } } /** * @see DisplayWindowPolicyController#isWindowingModeSupported(int) */ public final boolean isWindowingModeSupported( @WindowConfiguration.WindowingMode int windowingMode) { if (mDisplayWindowPolicyController == null) { return true; } return mDisplayWindowPolicyController.isWindowingModeSupported(windowingMode); } void dump(String prefix, PrintWriter pw) { if (mDisplayWindowPolicyController != null) { pw.println(); Loading