Loading core/java/android/companion/virtual/IVirtualDeviceManager.aidl +6 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,12 @@ interface IVirtualDeviceManager { in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener, in IVirtualDeviceSoundEffectListener soundEffectListener); @EnforcePermission("COMPUTER_CONTROL_ACCESS") IVirtualDevice createLocalVirtualDevice( in IBinder token, in AttributionSource attributionSource, in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener, in IVirtualDeviceSoundEffectListener soundEffectListener); /** * Returns the details of all available virtual devices. */ Loading core/java/android/companion/virtual/VirtualDeviceInternal.java +17 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,11 @@ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_BLOCKED_ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CLIPBOARD; import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.UserIdInt; import android.app.PendingIntent; import android.companion.virtual.audio.VirtualAudioDevice; Loading Loading @@ -199,6 +201,7 @@ public class VirtualDeviceInternal { @Nullable private VirtualAudioDevice mVirtualAudioDevice; @RequiresPermission(Manifest.permission.CREATE_VIRTUAL_DEVICE) VirtualDeviceInternal( IVirtualDeviceManager service, Context context, Loading @@ -214,6 +217,20 @@ public class VirtualDeviceInternal { mSoundEffectListener); } @RequiresPermission(Manifest.permission.COMPUTER_CONTROL_ACCESS) VirtualDeviceInternal( IVirtualDeviceManager service, Context context, VirtualDeviceParams params) throws RemoteException { mContext = context.getApplicationContext(); mVirtualDevice = service.createLocalVirtualDevice( new Binder(), mContext.getAttributionSource(), params, mActivityListenerBinder, mSoundEffectListener); } VirtualDeviceInternal(Context context, IVirtualDevice virtualDevice) { mContext = context.getApplicationContext(); mVirtualDevice = virtualDevice; Loading core/java/android/companion/virtual/VirtualDeviceManager.java +23 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,20 @@ public final class VirtualDeviceManager { } } /** * @hide */ @RequiresPermission(android.Manifest.permission.COMPUTER_CONTROL_ACCESS) @NonNull public VirtualDevice createVirtualDevice(@NonNull VirtualDeviceParams params) { Objects.requireNonNull(params, "params must not be null"); try { return new VirtualDevice(mService, mContext, params); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Returns the details of all available virtual devices. * Loading Loading @@ -573,6 +587,15 @@ public final class VirtualDeviceManager { new VirtualDeviceInternal(service, context, associationId, params); } @RequiresPermission(Manifest.permission.COMPUTER_CONTROL_ACCESS) private VirtualDevice( IVirtualDeviceManager service, Context context, VirtualDeviceParams params) throws RemoteException { mVirtualDeviceInternal = new VirtualDeviceInternal(service, context, params); } /** @hide */ public VirtualDevice(Context context, IVirtualDevice virtualDevice) { mVirtualDeviceInternal = new VirtualDeviceInternal(context, virtualDevice); Loading core/java/android/companion/virtual/flags/flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -180,3 +180,10 @@ flag { description: "Do not duplicate frames if no input is received and the capture request is not PREVIEW" bug: "383779587" } flag { name: "computer_control_access" namespace: "virtual_devices" description: "Enable VDM access for computer control" bug: "410570802" } No newline at end of file core/res/AndroidManifest.xml +7 −0 Original line number Diff line number Diff line Loading @@ -8538,6 +8538,13 @@ <permission android:name="android.permission.CREATE_VIRTUAL_DEVICE" android:protectionLevel="internal|role" /> <!-- Allows an application access to computer control features. @hide --> <permission android:name="android.permission.COMPUTER_CONTROL_ACCESS" android:protectionLevel="internal|knownSigner" android:knownCerts="@array/config_computerControlAccessKnownSigners" android:featureFlag="android.companion.virtualdevice.flags.computer_control_access"/> <!-- @SystemApi Must be required by a safety source to send an update using the {@link android.safetycenter.SafetyCenterManager}. <p>Protection level: internal|privileged Loading Loading
core/java/android/companion/virtual/IVirtualDeviceManager.aidl +6 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,12 @@ interface IVirtualDeviceManager { in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener, in IVirtualDeviceSoundEffectListener soundEffectListener); @EnforcePermission("COMPUTER_CONTROL_ACCESS") IVirtualDevice createLocalVirtualDevice( in IBinder token, in AttributionSource attributionSource, in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener, in IVirtualDeviceSoundEffectListener soundEffectListener); /** * Returns the details of all available virtual devices. */ Loading
core/java/android/companion/virtual/VirtualDeviceInternal.java +17 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,11 @@ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_BLOCKED_ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CLIPBOARD; import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.UserIdInt; import android.app.PendingIntent; import android.companion.virtual.audio.VirtualAudioDevice; Loading Loading @@ -199,6 +201,7 @@ public class VirtualDeviceInternal { @Nullable private VirtualAudioDevice mVirtualAudioDevice; @RequiresPermission(Manifest.permission.CREATE_VIRTUAL_DEVICE) VirtualDeviceInternal( IVirtualDeviceManager service, Context context, Loading @@ -214,6 +217,20 @@ public class VirtualDeviceInternal { mSoundEffectListener); } @RequiresPermission(Manifest.permission.COMPUTER_CONTROL_ACCESS) VirtualDeviceInternal( IVirtualDeviceManager service, Context context, VirtualDeviceParams params) throws RemoteException { mContext = context.getApplicationContext(); mVirtualDevice = service.createLocalVirtualDevice( new Binder(), mContext.getAttributionSource(), params, mActivityListenerBinder, mSoundEffectListener); } VirtualDeviceInternal(Context context, IVirtualDevice virtualDevice) { mContext = context.getApplicationContext(); mVirtualDevice = virtualDevice; Loading
core/java/android/companion/virtual/VirtualDeviceManager.java +23 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,20 @@ public final class VirtualDeviceManager { } } /** * @hide */ @RequiresPermission(android.Manifest.permission.COMPUTER_CONTROL_ACCESS) @NonNull public VirtualDevice createVirtualDevice(@NonNull VirtualDeviceParams params) { Objects.requireNonNull(params, "params must not be null"); try { return new VirtualDevice(mService, mContext, params); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Returns the details of all available virtual devices. * Loading Loading @@ -573,6 +587,15 @@ public final class VirtualDeviceManager { new VirtualDeviceInternal(service, context, associationId, params); } @RequiresPermission(Manifest.permission.COMPUTER_CONTROL_ACCESS) private VirtualDevice( IVirtualDeviceManager service, Context context, VirtualDeviceParams params) throws RemoteException { mVirtualDeviceInternal = new VirtualDeviceInternal(service, context, params); } /** @hide */ public VirtualDevice(Context context, IVirtualDevice virtualDevice) { mVirtualDeviceInternal = new VirtualDeviceInternal(context, virtualDevice); Loading
core/java/android/companion/virtual/flags/flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -180,3 +180,10 @@ flag { description: "Do not duplicate frames if no input is received and the capture request is not PREVIEW" bug: "383779587" } flag { name: "computer_control_access" namespace: "virtual_devices" description: "Enable VDM access for computer control" bug: "410570802" } No newline at end of file
core/res/AndroidManifest.xml +7 −0 Original line number Diff line number Diff line Loading @@ -8538,6 +8538,13 @@ <permission android:name="android.permission.CREATE_VIRTUAL_DEVICE" android:protectionLevel="internal|role" /> <!-- Allows an application access to computer control features. @hide --> <permission android:name="android.permission.COMPUTER_CONTROL_ACCESS" android:protectionLevel="internal|knownSigner" android:knownCerts="@array/config_computerControlAccessKnownSigners" android:featureFlag="android.companion.virtualdevice.flags.computer_control_access"/> <!-- @SystemApi Must be required by a safety source to send an update using the {@link android.safetycenter.SafetyCenterManager}. <p>Protection level: internal|privileged Loading