Loading core/java/android/window/DisplayWindowPolicyController.java +5 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,11 @@ public abstract class DisplayWindowPolicyController { public abstract boolean keepActivityOnWindowFlagsChanged( ActivityInfo activityInfo, int windowFlags, int systemWindowFlags); /** * Returns {@code true} if the tasks which is on this virtual display can be showed on Recents. */ public abstract boolean canShowTasksInRecents(); /** * This is called when the top activity of the display is changed. */ Loading services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +20 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.companion.virtual; import static android.companion.AssociationRequest.DEVICE_PROFILE_APP_STREAMING; import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION; import static android.content.pm.ActivityInfo.FLAG_CAN_DISPLAY_ON_REMOTE_DEVICES; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; Loading @@ -24,6 +26,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.app.compat.CompatChanges; import android.companion.AssociationRequest; import android.companion.virtual.VirtualDeviceManager.ActivityListener; import android.companion.virtual.VirtualDeviceParams; import android.companion.virtual.VirtualDeviceParams.ActivityPolicy; Loading Loading @@ -95,6 +98,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController private final Handler mHandler = new Handler(Looper.getMainLooper()); private final ArraySet<RunningAppsChangedListener> mRunningAppsChangedListener = new ArraySet<>(); private final @AssociationRequest.DeviceProfile String mDeviceProfile; /** * Creates a window policy controller that is generic to the different use cases of virtual Loading @@ -119,6 +123,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController * is not populated in this callback and is always {@link Display#INVALID_DISPLAY}. * @param activityBlockedCallback Callback that is called when an activity is blocked from * launching. * @param deviceProfile The {@link AssociationRequest.DeviceProfile} of this virtual device. */ public GenericWindowPolicyController(int windowFlags, int systemWindowFlags, @NonNull ArraySet<UserHandle> allowedUsers, Loading @@ -128,7 +133,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController @NonNull Set<ComponentName> blockedActivities, @ActivityPolicy int defaultActivityPolicy, @NonNull ActivityListener activityListener, @NonNull Consumer<ActivityInfo> activityBlockedCallback) { @NonNull Consumer<ActivityInfo> activityBlockedCallback, @AssociationRequest.DeviceProfile String deviceProfile) { super(); mAllowedUsers = allowedUsers; mAllowedCrossTaskNavigations = new ArraySet<>(allowedCrossTaskNavigations); Loading @@ -139,6 +145,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController mActivityBlockedCallback = activityBlockedCallback; setInterestedWindowFlags(windowFlags, systemWindowFlags); mActivityListener = activityListener; mDeviceProfile = deviceProfile; } /** Register a listener for running applications changes. */ Loading Loading @@ -248,6 +255,18 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController }); } @Override public boolean canShowTasksInRecents() { // TODO(b/234075973) : Remove this once proper API is ready. switch (mDeviceProfile) { case DEVICE_PROFILE_AUTOMOTIVE_PROJECTION: return false; case DEVICE_PROFILE_APP_STREAMING: default: return true; } } /** * Returns true if an app with the given UID has an activity running on the virtual display for * this controller. Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -557,7 +557,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub mParams.getBlockedActivities(), mParams.getDefaultActivityPolicy(), createListenerAdapter(displayId), activityInfo -> onActivityBlocked(displayId, activityInfo)); activityInfo -> onActivityBlocked(displayId, activityInfo), mAssociationInfo.getDeviceProfile()); gwpc.registerRunningAppsChangedListener(/* listener= */ this); mWindowPolicyControllers.put(displayId, gwpc); return gwpc; Loading services/core/java/com/android/server/wm/DisplayContent.java +11 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.window.DisplayWindowPolicyController; import android.window.IDisplayAreaOrganizer; import android.window.TransitionRequestInfo; Loading Loading @@ -1959,6 +1960,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mDisplayRotation.updateRotationUnchecked(false /* forceUpdate */); } /** * @see DisplayWindowPolicyController#canShowTasksInRecents() */ boolean canShowTasksInRecents() { if (mDwpcHelper == null) { return true; } return mDwpcHelper.canShowTasksInRecents(); } /** * Applies the rotation transaction. This must be called after {@link #updateRotationUnchecked} * (if it returned {@code true}) to actually finish the rotation. Loading services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java +10 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,16 @@ class DisplayWindowPolicyControllerHelper { return mDisplayWindowPolicyController.isWindowingModeSupported(windowingMode); } /** * @see DisplayWindowPolicyController#canShowTasksInRecents() */ public final boolean canShowTasksInRecents() { if (mDisplayWindowPolicyController == null) { return true; } return mDisplayWindowPolicyController.canShowTasksInRecents(); } void dump(String prefix, PrintWriter pw) { if (mDisplayWindowPolicyController != null) { pw.println(); Loading Loading
core/java/android/window/DisplayWindowPolicyController.java +5 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,11 @@ public abstract class DisplayWindowPolicyController { public abstract boolean keepActivityOnWindowFlagsChanged( ActivityInfo activityInfo, int windowFlags, int systemWindowFlags); /** * Returns {@code true} if the tasks which is on this virtual display can be showed on Recents. */ public abstract boolean canShowTasksInRecents(); /** * This is called when the top activity of the display is changed. */ Loading
services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java +20 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.companion.virtual; import static android.companion.AssociationRequest.DEVICE_PROFILE_APP_STREAMING; import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION; import static android.content.pm.ActivityInfo.FLAG_CAN_DISPLAY_ON_REMOTE_DEVICES; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; Loading @@ -24,6 +26,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.app.compat.CompatChanges; import android.companion.AssociationRequest; import android.companion.virtual.VirtualDeviceManager.ActivityListener; import android.companion.virtual.VirtualDeviceParams; import android.companion.virtual.VirtualDeviceParams.ActivityPolicy; Loading Loading @@ -95,6 +98,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController private final Handler mHandler = new Handler(Looper.getMainLooper()); private final ArraySet<RunningAppsChangedListener> mRunningAppsChangedListener = new ArraySet<>(); private final @AssociationRequest.DeviceProfile String mDeviceProfile; /** * Creates a window policy controller that is generic to the different use cases of virtual Loading @@ -119,6 +123,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController * is not populated in this callback and is always {@link Display#INVALID_DISPLAY}. * @param activityBlockedCallback Callback that is called when an activity is blocked from * launching. * @param deviceProfile The {@link AssociationRequest.DeviceProfile} of this virtual device. */ public GenericWindowPolicyController(int windowFlags, int systemWindowFlags, @NonNull ArraySet<UserHandle> allowedUsers, Loading @@ -128,7 +133,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController @NonNull Set<ComponentName> blockedActivities, @ActivityPolicy int defaultActivityPolicy, @NonNull ActivityListener activityListener, @NonNull Consumer<ActivityInfo> activityBlockedCallback) { @NonNull Consumer<ActivityInfo> activityBlockedCallback, @AssociationRequest.DeviceProfile String deviceProfile) { super(); mAllowedUsers = allowedUsers; mAllowedCrossTaskNavigations = new ArraySet<>(allowedCrossTaskNavigations); Loading @@ -139,6 +145,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController mActivityBlockedCallback = activityBlockedCallback; setInterestedWindowFlags(windowFlags, systemWindowFlags); mActivityListener = activityListener; mDeviceProfile = deviceProfile; } /** Register a listener for running applications changes. */ Loading Loading @@ -248,6 +255,18 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController }); } @Override public boolean canShowTasksInRecents() { // TODO(b/234075973) : Remove this once proper API is ready. switch (mDeviceProfile) { case DEVICE_PROFILE_AUTOMOTIVE_PROJECTION: return false; case DEVICE_PROFILE_APP_STREAMING: default: return true; } } /** * Returns true if an app with the given UID has an activity running on the virtual display for * this controller. Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -557,7 +557,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub mParams.getBlockedActivities(), mParams.getDefaultActivityPolicy(), createListenerAdapter(displayId), activityInfo -> onActivityBlocked(displayId, activityInfo)); activityInfo -> onActivityBlocked(displayId, activityInfo), mAssociationInfo.getDeviceProfile()); gwpc.registerRunningAppsChangedListener(/* listener= */ this); mWindowPolicyControllers.put(displayId, gwpc); return gwpc; Loading
services/core/java/com/android/server/wm/DisplayContent.java +11 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.window.DisplayWindowPolicyController; import android.window.IDisplayAreaOrganizer; import android.window.TransitionRequestInfo; Loading Loading @@ -1959,6 +1960,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mDisplayRotation.updateRotationUnchecked(false /* forceUpdate */); } /** * @see DisplayWindowPolicyController#canShowTasksInRecents() */ boolean canShowTasksInRecents() { if (mDwpcHelper == null) { return true; } return mDwpcHelper.canShowTasksInRecents(); } /** * Applies the rotation transaction. This must be called after {@link #updateRotationUnchecked} * (if it returned {@code true}) to actually finish the rotation. Loading
services/core/java/com/android/server/wm/DisplayWindowPolicyControllerHelper.java +10 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,16 @@ class DisplayWindowPolicyControllerHelper { return mDisplayWindowPolicyController.isWindowingModeSupported(windowingMode); } /** * @see DisplayWindowPolicyController#canShowTasksInRecents() */ public final boolean canShowTasksInRecents() { if (mDisplayWindowPolicyController == null) { return true; } return mDisplayWindowPolicyController.canShowTasksInRecents(); } void dump(String prefix, PrintWriter pw) { if (mDisplayWindowPolicyController != null) { pw.println(); Loading