Add a unique ID to a virtual device.
This will be used in a later CL to allow virtual displays to be associated with their virtual device. Bug: 205343547 Test: atest VirtualDeviceManagerServiceTest Change-Id: Ibbf5a8c834d5d7a7bac4816a0ea151adad4e7ea7
This commit is contained in:
committed by
Vladimir Komsiyski
parent
c65a42f8ad
commit
7b67b35997
@@ -2789,6 +2789,8 @@ package android.companion.virtual {
|
||||
|
||||
public final class VirtualDeviceManager {
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.companion.virtual.VirtualDeviceManager.VirtualDevice createVirtualDevice(int, @NonNull android.companion.virtual.VirtualDeviceParams);
|
||||
field public static final int DEFAULT_DEVICE_ID = 0; // 0x0
|
||||
field public static final int INVALID_DEVICE_ID = -1; // 0xffffffff
|
||||
field public static final int LAUNCH_FAILURE_NO_ACTIVITY = 2; // 0x2
|
||||
field public static final int LAUNCH_FAILURE_PENDING_INTENT_CANCELED = 1; // 0x1
|
||||
field public static final int LAUNCH_SUCCESS = 0; // 0x0
|
||||
@@ -2808,6 +2810,7 @@ package android.companion.virtual {
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualKeyboard createVirtualKeyboard(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualMouse createVirtualMouse(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int);
|
||||
method public int getDeviceId();
|
||||
method public void launchPendingIntent(int, @NonNull android.app.PendingIntent, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer);
|
||||
method public void removeActivityListener(@NonNull android.companion.virtual.VirtualDeviceManager.ActivityListener);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setShowPointerIcon(boolean);
|
||||
|
||||
@@ -42,6 +42,11 @@ interface IVirtualDevice {
|
||||
*/
|
||||
int getAssociationId();
|
||||
|
||||
/**
|
||||
* Returns the unique device ID for this virtual device.
|
||||
*/
|
||||
int getDeviceId();
|
||||
|
||||
/**
|
||||
* Closes the virtual device and frees all associated resources.
|
||||
*/
|
||||
|
||||
@@ -78,6 +78,16 @@ public final class VirtualDeviceManager {
|
||||
| DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH
|
||||
| DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_DISPLAY_GROUP;
|
||||
|
||||
/**
|
||||
* The default device ID, which is the ID of the primary (non-virtual) device.
|
||||
*/
|
||||
public static final int DEFAULT_DEVICE_ID = 0;
|
||||
|
||||
/**
|
||||
* Invalid device ID.
|
||||
*/
|
||||
public static final int INVALID_DEVICE_ID = -1;
|
||||
|
||||
/** @hide */
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(
|
||||
@@ -203,6 +213,17 @@ public final class VirtualDeviceManager {
|
||||
mActivityListenerBinder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the unique ID of this virtual device.
|
||||
*/
|
||||
public int getDeviceId() {
|
||||
try {
|
||||
return mVirtualDevice.getDeviceId();
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches a given pending intent on the give display ID.
|
||||
*
|
||||
|
||||
@@ -95,6 +95,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
|
||||
private final AssociationInfo mAssociationInfo;
|
||||
private final PendingTrampolineCallback mPendingTrampolineCallback;
|
||||
private final int mOwnerUid;
|
||||
private final int mDeviceId;
|
||||
private final InputController mInputController;
|
||||
private VirtualAudioController mVirtualAudioController;
|
||||
@VisibleForTesting
|
||||
@@ -140,19 +141,40 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
|
||||
private final SparseArray<GenericWindowPolicyController> mWindowPolicyControllers =
|
||||
new SparseArray<>();
|
||||
|
||||
VirtualDeviceImpl(Context context, AssociationInfo associationInfo,
|
||||
IBinder token, int ownerUid, OnDeviceCloseListener listener,
|
||||
VirtualDeviceImpl(
|
||||
Context context,
|
||||
AssociationInfo associationInfo,
|
||||
IBinder token,
|
||||
int ownerUid,
|
||||
int deviceId,
|
||||
OnDeviceCloseListener listener,
|
||||
PendingTrampolineCallback pendingTrampolineCallback,
|
||||
IVirtualDeviceActivityListener activityListener,
|
||||
Consumer<ArraySet<Integer>> runningAppsChangedCallback,
|
||||
VirtualDeviceParams params) {
|
||||
this(context, associationInfo, token, ownerUid, /* inputController= */ null, listener,
|
||||
pendingTrampolineCallback, activityListener, runningAppsChangedCallback, params);
|
||||
this(
|
||||
context,
|
||||
associationInfo,
|
||||
token,
|
||||
ownerUid,
|
||||
deviceId,
|
||||
/* inputController= */ null,
|
||||
listener,
|
||||
pendingTrampolineCallback,
|
||||
activityListener,
|
||||
runningAppsChangedCallback,
|
||||
params);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
VirtualDeviceImpl(Context context, AssociationInfo associationInfo, IBinder token,
|
||||
int ownerUid, InputController inputController, OnDeviceCloseListener listener,
|
||||
VirtualDeviceImpl(
|
||||
Context context,
|
||||
AssociationInfo associationInfo,
|
||||
IBinder token,
|
||||
int ownerUid,
|
||||
int deviceId,
|
||||
InputController inputController,
|
||||
OnDeviceCloseListener listener,
|
||||
PendingTrampolineCallback pendingTrampolineCallback,
|
||||
IVirtualDeviceActivityListener activityListener,
|
||||
Consumer<ArraySet<Integer>> runningAppsChangedCallback,
|
||||
@@ -164,6 +186,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
|
||||
mActivityListener = activityListener;
|
||||
mRunningAppsChangedCallback = runningAppsChangedCallback;
|
||||
mOwnerUid = ownerUid;
|
||||
mDeviceId = deviceId;
|
||||
mAppToken = token;
|
||||
mParams = params;
|
||||
if (inputController == null) {
|
||||
@@ -199,6 +222,12 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
|
||||
return mAssociationInfo.getDisplayName();
|
||||
}
|
||||
|
||||
/** Returns the unique device ID of this device. */
|
||||
@Override // Binder call
|
||||
public int getDeviceId() {
|
||||
return mDeviceId;
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
public int getAssociationId() {
|
||||
return mAssociationInfo.getId();
|
||||
|
||||
@@ -60,12 +60,12 @@ import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
|
||||
@SuppressLint("LongLogTag")
|
||||
public class VirtualDeviceManagerService extends SystemService {
|
||||
|
||||
private static final boolean DEBUG = false;
|
||||
private static final String TAG = "VirtualDeviceManagerService";
|
||||
|
||||
private final Object mVirtualDeviceManagerLock = new Object();
|
||||
@@ -73,6 +73,10 @@ public class VirtualDeviceManagerService extends SystemService {
|
||||
private final VirtualDeviceManagerInternal mLocalService;
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
private final PendingTrampolineMap mPendingTrampolines = new PendingTrampolineMap(mHandler);
|
||||
|
||||
private static AtomicInteger sNextUniqueIndex = new AtomicInteger(
|
||||
VirtualDeviceManager.DEFAULT_DEVICE_ID + 1);
|
||||
|
||||
/**
|
||||
* Mapping from user IDs to CameraAccessControllers.
|
||||
*/
|
||||
@@ -260,8 +264,10 @@ public class VirtualDeviceManagerService extends SystemService {
|
||||
final int userId = UserHandle.getUserId(callingUid);
|
||||
final CameraAccessController cameraAccessController =
|
||||
mCameraAccessControllers.get(userId);
|
||||
final int uniqueId = sNextUniqueIndex.getAndIncrement();
|
||||
|
||||
VirtualDeviceImpl virtualDevice = new VirtualDeviceImpl(getContext(),
|
||||
associationInfo, token, callingUid,
|
||||
associationInfo, token, callingUid, uniqueId,
|
||||
new VirtualDeviceImpl.OnDeviceCloseListener() {
|
||||
@Override
|
||||
public void onClose(int associationId) {
|
||||
|
||||
@@ -236,10 +236,9 @@ public class VirtualDeviceManagerServiceTest {
|
||||
.setBlockedActivities(getBlockedActivities())
|
||||
.build();
|
||||
mDeviceImpl = new VirtualDeviceImpl(mContext,
|
||||
mAssociationInfo, new Binder(), /* uid */ 0, mInputController,
|
||||
(int associationId) -> {
|
||||
}, mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback,
|
||||
params);
|
||||
mAssociationInfo, new Binder(), /* ownerUid */ 0, /* uniqueId */ 1,
|
||||
mInputController, (int associationId) -> {}, mPendingTrampolineCallback,
|
||||
mActivityListener, mRunningAppsChangedCallback, params);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user