Loading core/api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); core/java/android/companion/virtual/IVirtualDevice.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -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. */ Loading core/java/android/companion/virtual/VirtualDeviceManager.java +21 −0 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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. * Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +35 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading @@ -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) { Loading Loading @@ -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(); Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +8 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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. */ Loading Loading @@ -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) { Loading Loading
core/api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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);
core/java/android/companion/virtual/IVirtualDevice.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -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. */ Loading
core/java/android/companion/virtual/VirtualDeviceManager.java +21 −0 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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. * Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +35 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading @@ -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) { Loading Loading @@ -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(); Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +8 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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. */ Loading Loading @@ -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) { Loading