Merge "Small cleanups to VirtualDeviceParams recents API" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1d6c317f66
@@ -3247,7 +3247,6 @@ package android.companion.virtual {
|
||||
method @NonNull public java.util.Set<android.content.ComponentName> getBlockedCrossTaskNavigations();
|
||||
method public int getDefaultActivityPolicy();
|
||||
method public int getDefaultNavigationPolicy();
|
||||
method public int getDefaultRecentsPolicy();
|
||||
method public int getDevicePolicy(int);
|
||||
method public int getLockState();
|
||||
method @Nullable public String getName();
|
||||
@@ -3264,8 +3263,8 @@ package android.companion.virtual {
|
||||
field public static final int NAVIGATION_POLICY_DEFAULT_ALLOWED = 0; // 0x0
|
||||
field public static final int NAVIGATION_POLICY_DEFAULT_BLOCKED = 1; // 0x1
|
||||
field public static final int POLICY_TYPE_AUDIO = 1; // 0x1
|
||||
field public static final int POLICY_TYPE_RECENTS = 2; // 0x2
|
||||
field public static final int POLICY_TYPE_SENSORS = 0; // 0x0
|
||||
field public static final int RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS = 1; // 0x1
|
||||
}
|
||||
|
||||
public static final class VirtualDeviceParams.Builder {
|
||||
@@ -3278,7 +3277,6 @@ package android.companion.virtual {
|
||||
method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setAudioRecordingSessionId(int);
|
||||
method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedActivities(@NonNull java.util.Set<android.content.ComponentName>);
|
||||
method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedCrossTaskNavigations(@NonNull java.util.Set<android.content.ComponentName>);
|
||||
method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setDefaultRecentsPolicy(int);
|
||||
method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setDevicePolicy(int, int);
|
||||
method @NonNull @RequiresPermission(value=android.Manifest.permission.ADD_ALWAYS_UNLOCKED_DISPLAY, conditional=true) public android.companion.virtual.VirtualDeviceParams.Builder setLockState(int);
|
||||
method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setName(@NonNull String);
|
||||
|
||||
@@ -140,7 +140,8 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
* a given policy type.
|
||||
* @hide
|
||||
*/
|
||||
@IntDef(prefix = "POLICY_TYPE_", value = {POLICY_TYPE_SENSORS, POLICY_TYPE_AUDIO})
|
||||
@IntDef(prefix = "POLICY_TYPE_", value = {POLICY_TYPE_SENSORS, POLICY_TYPE_AUDIO,
|
||||
POLICY_TYPE_RECENTS})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
|
||||
public @interface PolicyType {}
|
||||
@@ -169,22 +170,21 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
* <li>{@link #DEVICE_POLICY_CUSTOM}: audio framework will assign device specific session
|
||||
* ids to players and recorders constructed within device context. The session ids are
|
||||
* used to re-route corresponding audio streams to VirtualAudioDevice.
|
||||
* <ul/>
|
||||
* </ul>
|
||||
*/
|
||||
public static final int POLICY_TYPE_AUDIO = 1;
|
||||
|
||||
/** @hide */
|
||||
@IntDef(flag = true, prefix = "RECENTS_POLICY_",
|
||||
value = {RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
|
||||
public @interface RecentsPolicy {}
|
||||
|
||||
/**
|
||||
* If set, activities launched on this virtual device are allowed to appear in the host device
|
||||
* of the recently launched activities list.
|
||||
* Tells the activity manager how to handle recents entries for activities run on this device.
|
||||
*
|
||||
* <ul>
|
||||
* <li>{@link #DEVICE_POLICY_DEFAULT}: Activities launched on VirtualDisplays owned by this
|
||||
* device will appear in the host device recents.
|
||||
* <li>{@link #DEVICE_POLICY_CUSTOM}: Activities launched on VirtualDisplays owned by this
|
||||
* * device will not appear in recents.
|
||||
* </ul>
|
||||
*/
|
||||
public static final int RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS = 1 << 0;
|
||||
public static final int POLICY_TYPE_RECENTS = 2;
|
||||
|
||||
private final int mLockState;
|
||||
@NonNull private final ArraySet<UserHandle> mUsersWithMatchingAccounts;
|
||||
@@ -201,8 +201,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
@NonNull private final SparseIntArray mDevicePolicies;
|
||||
@NonNull private final List<VirtualSensorConfig> mVirtualSensorConfigs;
|
||||
@Nullable private final IVirtualSensorCallback mVirtualSensorCallback;
|
||||
@RecentsPolicy
|
||||
private final int mDefaultRecentsPolicy;
|
||||
private final int mAudioPlaybackSessionId;
|
||||
private final int mAudioRecordingSessionId;
|
||||
|
||||
@@ -219,7 +217,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
@NonNull SparseIntArray devicePolicies,
|
||||
@NonNull List<VirtualSensorConfig> virtualSensorConfigs,
|
||||
@Nullable IVirtualSensorCallback virtualSensorCallback,
|
||||
@RecentsPolicy int defaultRecentsPolicy,
|
||||
int audioPlaybackSessionId,
|
||||
int audioRecordingSessionId) {
|
||||
mLockState = lockState;
|
||||
@@ -237,10 +234,8 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
mDevicePolicies = Objects.requireNonNull(devicePolicies);
|
||||
mVirtualSensorConfigs = Objects.requireNonNull(virtualSensorConfigs);
|
||||
mVirtualSensorCallback = virtualSensorCallback;
|
||||
mDefaultRecentsPolicy = defaultRecentsPolicy;
|
||||
mAudioPlaybackSessionId = audioPlaybackSessionId;
|
||||
mAudioRecordingSessionId = audioRecordingSessionId;
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -259,7 +254,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
parcel.readTypedList(mVirtualSensorConfigs, VirtualSensorConfig.CREATOR);
|
||||
mVirtualSensorCallback =
|
||||
IVirtualSensorCallback.Stub.asInterface(parcel.readStrongBinder());
|
||||
mDefaultRecentsPolicy = parcel.readInt();
|
||||
mAudioPlaybackSessionId = parcel.readInt();
|
||||
mAudioRecordingSessionId = parcel.readInt();
|
||||
}
|
||||
@@ -395,16 +389,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
return mVirtualSensorCallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the policy of how to handle activities in recents.
|
||||
*
|
||||
* @see RecentsPolicy
|
||||
*/
|
||||
@RecentsPolicy
|
||||
public int getDefaultRecentsPolicy() {
|
||||
return mDefaultRecentsPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns device-specific audio session id for playback.
|
||||
*
|
||||
@@ -443,7 +427,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
dest.writeTypedList(mVirtualSensorConfigs);
|
||||
dest.writeStrongBinder(
|
||||
mVirtualSensorCallback != null ? mVirtualSensorCallback.asBinder() : null);
|
||||
dest.writeInt(mDefaultRecentsPolicy);
|
||||
dest.writeInt(mAudioPlaybackSessionId);
|
||||
dest.writeInt(mAudioRecordingSessionId);
|
||||
}
|
||||
@@ -478,7 +461,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
&& Objects.equals(mBlockedActivities, that.mBlockedActivities)
|
||||
&& mDefaultActivityPolicy == that.mDefaultActivityPolicy
|
||||
&& Objects.equals(mName, that.mName)
|
||||
&& mDefaultRecentsPolicy == that.mDefaultRecentsPolicy
|
||||
&& mAudioPlaybackSessionId == that.mAudioPlaybackSessionId
|
||||
&& mAudioRecordingSessionId == that.mAudioRecordingSessionId;
|
||||
}
|
||||
@@ -489,7 +471,7 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
mLockState, mUsersWithMatchingAccounts, mAllowedCrossTaskNavigations,
|
||||
mBlockedCrossTaskNavigations, mDefaultNavigationPolicy, mAllowedActivities,
|
||||
mBlockedActivities, mDefaultActivityPolicy, mName, mDevicePolicies,
|
||||
mDefaultRecentsPolicy, mAudioPlaybackSessionId, mAudioRecordingSessionId);
|
||||
mAudioPlaybackSessionId, mAudioRecordingSessionId);
|
||||
for (int i = 0; i < mDevicePolicies.size(); i++) {
|
||||
hashCode = 31 * hashCode + mDevicePolicies.keyAt(i);
|
||||
hashCode = 31 * hashCode + mDevicePolicies.valueAt(i);
|
||||
@@ -511,7 +493,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
+ " mDefaultActivityPolicy=" + mDefaultActivityPolicy
|
||||
+ " mName=" + mName
|
||||
+ " mDevicePolicies=" + mDevicePolicies
|
||||
+ " mDefaultRecentsPolicy=" + mDefaultRecentsPolicy
|
||||
+ " mAudioPlaybackSessionId=" + mAudioPlaybackSessionId
|
||||
+ " mAudioRecordingSessionId=" + mAudioRecordingSessionId
|
||||
+ ")";
|
||||
@@ -548,7 +529,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
private boolean mDefaultActivityPolicyConfigured = false;
|
||||
@Nullable private String mName;
|
||||
@NonNull private SparseIntArray mDevicePolicies = new SparseIntArray();
|
||||
private int mDefaultRecentsPolicy;
|
||||
private int mAudioPlaybackSessionId = AUDIO_SESSION_ID_GENERATE;
|
||||
private int mAudioRecordingSessionId = AUDIO_SESSION_ID_GENERATE;
|
||||
|
||||
@@ -820,17 +800,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the policy to indicate how activities are handled in recents.
|
||||
*
|
||||
* @param defaultRecentsPolicy A policy specifying how to handle activities in recents.
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setDefaultRecentsPolicy(@RecentsPolicy int defaultRecentsPolicy) {
|
||||
mDefaultRecentsPolicy = defaultRecentsPolicy;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets audio playback session id specific for this virtual device.
|
||||
*
|
||||
@@ -933,7 +902,6 @@ public final class VirtualDeviceParams implements Parcelable {
|
||||
mDevicePolicies,
|
||||
mVirtualSensorConfigs,
|
||||
mVirtualSensorCallback,
|
||||
mDefaultRecentsPolicy,
|
||||
mAudioPlaybackSessionId,
|
||||
mAudioRecordingSessionId);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.android.server.companion.virtual;
|
||||
|
||||
import static android.companion.virtual.VirtualDeviceParams.RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS;
|
||||
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;
|
||||
@@ -29,7 +28,6 @@ import android.app.compat.CompatChanges;
|
||||
import android.companion.virtual.VirtualDeviceManager.ActivityListener;
|
||||
import android.companion.virtual.VirtualDeviceParams;
|
||||
import android.companion.virtual.VirtualDeviceParams.ActivityPolicy;
|
||||
import android.companion.virtual.VirtualDeviceParams.RecentsPolicy;
|
||||
import android.compat.annotation.ChangeId;
|
||||
import android.compat.annotation.EnabledSince;
|
||||
import android.content.ComponentName;
|
||||
@@ -137,8 +135,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
|
||||
new ArraySet<>();
|
||||
@Nullable private final SecureWindowCallback mSecureWindowCallback;
|
||||
@Nullable private final List<String> mDisplayCategories;
|
||||
@RecentsPolicy
|
||||
private final int mDefaultRecentsPolicy;
|
||||
|
||||
private final boolean mShowTasksInHostDeviceRecents;
|
||||
|
||||
/**
|
||||
* Creates a window policy controller that is generic to the different use cases of virtual
|
||||
@@ -166,7 +164,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
|
||||
* virtual display.
|
||||
* @param intentListenerCallback Callback that is called to intercept intents when matching
|
||||
* passed in filters.
|
||||
* @param defaultRecentsPolicy a policy to indicate how to handle activities in recents.
|
||||
* @param showTasksInHostDeviceRecents whether to show activities in recents on the host device.
|
||||
*/
|
||||
public GenericWindowPolicyController(int windowFlags, int systemWindowFlags,
|
||||
@NonNull ArraySet<UserHandle> allowedUsers,
|
||||
@@ -181,7 +179,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
|
||||
@NonNull SecureWindowCallback secureWindowCallback,
|
||||
@NonNull IntentListenerCallback intentListenerCallback,
|
||||
@NonNull List<String> displayCategories,
|
||||
@RecentsPolicy int defaultRecentsPolicy) {
|
||||
boolean showTasksInHostDeviceRecents) {
|
||||
super();
|
||||
mAllowedUsers = allowedUsers;
|
||||
mAllowedCrossTaskNavigations = new ArraySet<>(allowedCrossTaskNavigations);
|
||||
@@ -196,7 +194,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
|
||||
mSecureWindowCallback = secureWindowCallback;
|
||||
mIntentListenerCallback = intentListenerCallback;
|
||||
mDisplayCategories = displayCategories;
|
||||
mDefaultRecentsPolicy = defaultRecentsPolicy;
|
||||
mShowTasksInHostDeviceRecents = showTasksInHostDeviceRecents;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -337,7 +335,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
|
||||
|
||||
@Override
|
||||
public boolean canShowTasksInHostDeviceRecents() {
|
||||
return (mDefaultRecentsPolicy & RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS) != 0;
|
||||
return mShowTasksInHostDeviceRecents;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -846,7 +846,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
|
||||
this::onSecureWindowShown,
|
||||
this::shouldInterceptIntent,
|
||||
displayCategories,
|
||||
mParams.getDefaultRecentsPolicy());
|
||||
mParams.getDevicePolicy(
|
||||
VirtualDeviceParams.POLICY_TYPE_RECENTS)
|
||||
== VirtualDeviceParams.DEVICE_POLICY_DEFAULT);
|
||||
gwpc.registerRunningAppsChangedListener(/* listener= */ this);
|
||||
return gwpc;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.server.companion.virtual;
|
||||
|
||||
import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM;
|
||||
import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
|
||||
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;
|
||||
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_SENSORS;
|
||||
import static android.content.Context.DEVICE_ID_DEFAULT;
|
||||
import static android.content.Context.DEVICE_ID_INVALID;
|
||||
@@ -117,6 +118,7 @@ import com.android.server.sensors.SensorManagerInternal;
|
||||
|
||||
import com.google.android.collect.Sets;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
@@ -372,6 +374,11 @@ public class VirtualDeviceManagerServiceTest {
|
||||
mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
mDeviceImpl.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDeviceIdForDisplayId_invalidDisplayId_returnsDefault() {
|
||||
assertThat(mVdm.getDeviceIdForDisplayId(Display.INVALID_DISPLAY))
|
||||
@@ -444,12 +451,42 @@ public class VirtualDeviceManagerServiceTest {
|
||||
.setBlockedActivities(getBlockedActivities())
|
||||
.setDevicePolicy(POLICY_TYPE_SENSORS, DEVICE_POLICY_CUSTOM)
|
||||
.build();
|
||||
mDeviceImpl.close();
|
||||
mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);
|
||||
|
||||
assertThat(mVdm.getDevicePolicy(mDeviceImpl.getDeviceId(), POLICY_TYPE_SENSORS))
|
||||
.isEqualTo(DEVICE_POLICY_CUSTOM);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDevicePolicy_defaultRecentsPolicy_gwpcCanShowRecentsOnHostDevice() {
|
||||
VirtualDeviceParams params = new VirtualDeviceParams
|
||||
.Builder()
|
||||
.build();
|
||||
mDeviceImpl.close();
|
||||
mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);
|
||||
addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1);
|
||||
|
||||
GenericWindowPolicyController gwpc =
|
||||
mDeviceImpl.getDisplayWindowPolicyControllerForTest(DISPLAY_ID_1);
|
||||
assertThat(gwpc.canShowTasksInHostDeviceRecents()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDevicePolicy_customRecentsPolicy_gwpcCannotShowRecentsOnHostDevice() {
|
||||
VirtualDeviceParams params = new VirtualDeviceParams
|
||||
.Builder()
|
||||
.setDevicePolicy(POLICY_TYPE_RECENTS, DEVICE_POLICY_CUSTOM)
|
||||
.build();
|
||||
mDeviceImpl.close();
|
||||
mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);
|
||||
addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1);
|
||||
|
||||
GenericWindowPolicyController gwpc =
|
||||
mDeviceImpl.getDisplayWindowPolicyControllerForTest(DISPLAY_ID_1);
|
||||
assertThat(gwpc.canShowTasksInHostDeviceRecents()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDeviceOwnerUid_oneDevice_returnsCorrectId() {
|
||||
int ownerUid = mLocalService.getDeviceOwnerUid(mDeviceImpl.getDeviceId());
|
||||
@@ -501,6 +538,7 @@ public class VirtualDeviceManagerServiceTest {
|
||||
|
||||
doReturn(SENSOR_HANDLE).when(mSensorManagerInternalMock).createRuntimeSensor(
|
||||
anyInt(), anyInt(), anyString(), anyString(), anyInt(), any());
|
||||
mDeviceImpl.close();
|
||||
mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);
|
||||
|
||||
VirtualSensor sensor = mLocalService.getVirtualSensor(VIRTUAL_DEVICE_ID_1, SENSOR_HANDLE);
|
||||
|
||||
@@ -90,8 +90,7 @@ public class VirtualAudioControllerTest {
|
||||
/* secureWindowCallback= */ null,
|
||||
/* intentListenerCallback= */ null,
|
||||
/* displayCategories= */ new ArrayList<>(),
|
||||
/* recentsPolicy= */
|
||||
VirtualDeviceParams.RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS);
|
||||
/* showTasksInHostDeviceRecents= */ true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user