diff options
| author | 2024-10-11 07:58:38 +0000 | |
|---|---|---|
| committer | 2024-10-11 07:58:38 +0000 | |
| commit | b16fb2340e4f1c8ba7ea133a2d122cb6fd54d806 (patch) | |
| tree | ca87de8791f4b35a55c32ca2b43b6f26b79ab4c7 | |
| parent | 67bdbd80a974fde73fc6040a7bb1f77c331e15d0 (diff) | |
| parent | b1bdd1c7ebe976cca8150ddf62701842f2595b85 (diff) | |
Merge "Remove redundant CREATE_VIRTUAL_DEVICE permission enforcement" into main
17 files changed, 109 insertions, 339 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 7781f881b86f..10206f245c8a 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -3489,41 +3489,41 @@ package android.companion.virtual { public static class VirtualDeviceManager.VirtualDevice implements java.lang.AutoCloseable { method public void addActivityListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.VirtualDeviceManager.ActivityListener); - method @FlaggedApi("android.companion.virtual.flags.dynamic_policy") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void addActivityPolicyExemption(@NonNull android.content.ComponentName); - method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void addActivityPolicyExemption(@NonNull android.companion.virtual.ActivityPolicyExemption); + method @FlaggedApi("android.companion.virtual.flags.dynamic_policy") public void addActivityPolicyExemption(@NonNull android.content.ComponentName); + method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public void addActivityPolicyExemption(@NonNull android.companion.virtual.ActivityPolicyExemption); method public void addSoundEffectListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.VirtualDeviceManager.SoundEffectListener); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); + method public void close(); method @NonNull public android.content.Context createContext(); - method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.companion.virtual.audio.VirtualAudioDevice createVirtualAudioDevice(@NonNull android.hardware.display.VirtualDisplay, @Nullable java.util.concurrent.Executor, @Nullable android.companion.virtual.audio.VirtualAudioDevice.AudioConfigurationChangeCallback); - method @FlaggedApi("android.companion.virtual.flags.virtual_camera") @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.companion.virtual.camera.VirtualCamera createVirtualCamera(@NonNull android.companion.virtual.camera.VirtualCameraConfig); - method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.display.VirtualDisplay createVirtualDisplay(@IntRange(from=1) int, @IntRange(from=1) int, @IntRange(from=1) int, @Nullable android.view.Surface, int, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.display.VirtualDisplay.Callback); - method @Nullable @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull android.hardware.display.VirtualDisplayConfig, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.display.VirtualDisplay.Callback); - method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualDpad createVirtualDpad(@NonNull android.hardware.input.VirtualDpadConfig); - method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualKeyboard createVirtualKeyboard(@NonNull android.hardware.input.VirtualKeyboardConfig); - method @Deprecated @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.input.VirtualMouseConfig); - method @Deprecated @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.VirtualNavigationTouchpad createVirtualNavigationTouchpad(@NonNull android.hardware.input.VirtualNavigationTouchpadConfig); - method @FlaggedApi("android.companion.virtualdevice.flags.virtual_rotary") @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualRotaryEncoder createVirtualRotaryEncoder(@NonNull android.hardware.input.VirtualRotaryEncoderConfig); - method @FlaggedApi("android.companion.virtual.flags.virtual_stylus") @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualStylus createVirtualStylus(@NonNull android.hardware.input.VirtualStylusConfig); - method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.input.VirtualTouchscreenConfig); - method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); + method @NonNull public android.companion.virtual.audio.VirtualAudioDevice createVirtualAudioDevice(@NonNull android.hardware.display.VirtualDisplay, @Nullable java.util.concurrent.Executor, @Nullable android.companion.virtual.audio.VirtualAudioDevice.AudioConfigurationChangeCallback); + method @FlaggedApi("android.companion.virtual.flags.virtual_camera") @NonNull public android.companion.virtual.camera.VirtualCamera createVirtualCamera(@NonNull android.companion.virtual.camera.VirtualCameraConfig); + method @Deprecated @Nullable public android.hardware.display.VirtualDisplay createVirtualDisplay(@IntRange(from=1) int, @IntRange(from=1) int, @IntRange(from=1) int, @Nullable android.view.Surface, int, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.display.VirtualDisplay.Callback); + method @Nullable public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull android.hardware.display.VirtualDisplayConfig, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.display.VirtualDisplay.Callback); + method @NonNull public android.hardware.input.VirtualDpad createVirtualDpad(@NonNull android.hardware.input.VirtualDpadConfig); + method @NonNull public android.hardware.input.VirtualKeyboard createVirtualKeyboard(@NonNull android.hardware.input.VirtualKeyboardConfig); + method @Deprecated @NonNull public android.hardware.input.VirtualKeyboard createVirtualKeyboard(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); + method @NonNull public android.hardware.input.VirtualMouse createVirtualMouse(@NonNull android.hardware.input.VirtualMouseConfig); + method @Deprecated @NonNull public android.hardware.input.VirtualMouse createVirtualMouse(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); + method @NonNull public android.hardware.input.VirtualNavigationTouchpad createVirtualNavigationTouchpad(@NonNull android.hardware.input.VirtualNavigationTouchpadConfig); + method @FlaggedApi("android.companion.virtualdevice.flags.virtual_rotary") @NonNull public android.hardware.input.VirtualRotaryEncoder createVirtualRotaryEncoder(@NonNull android.hardware.input.VirtualRotaryEncoderConfig); + method @FlaggedApi("android.companion.virtual.flags.virtual_stylus") @NonNull public android.hardware.input.VirtualStylus createVirtualStylus(@NonNull android.hardware.input.VirtualStylusConfig); + method @NonNull public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.input.VirtualTouchscreenConfig); + method @Deprecated @NonNull public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int); method public int getDeviceId(); method @FlaggedApi("android.companion.virtual.flags.vdm_public_apis") @Nullable public String getPersistentDeviceId(); - method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public java.util.List<android.companion.virtual.sensor.VirtualSensor> getVirtualSensorList(); - method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void goToSleep(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void launchPendingIntent(int, @NonNull android.app.PendingIntent, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void registerIntentInterceptor(@NonNull android.content.IntentFilter, @NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.VirtualDeviceManager.IntentInterceptorCallback); + method @NonNull public java.util.List<android.companion.virtual.sensor.VirtualSensor> getVirtualSensorList(); + method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public void goToSleep(); + method public void launchPendingIntent(int, @NonNull android.app.PendingIntent, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer); + method public void registerIntentInterceptor(@NonNull android.content.IntentFilter, @NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.VirtualDeviceManager.IntentInterceptorCallback); method public void removeActivityListener(@NonNull android.companion.virtual.VirtualDeviceManager.ActivityListener); - method @FlaggedApi("android.companion.virtual.flags.dynamic_policy") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void removeActivityPolicyExemption(@NonNull android.content.ComponentName); - method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void removeActivityPolicyExemption(@NonNull android.companion.virtual.ActivityPolicyExemption); + method @FlaggedApi("android.companion.virtual.flags.dynamic_policy") public void removeActivityPolicyExemption(@NonNull android.content.ComponentName); + method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public void removeActivityPolicyExemption(@NonNull android.companion.virtual.ActivityPolicyExemption); method public void removeSoundEffectListener(@NonNull android.companion.virtual.VirtualDeviceManager.SoundEffectListener); - method @FlaggedApi("android.companion.virtual.flags.dynamic_policy") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDevicePolicy(int, int); - method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDevicePolicy(int, int, int); - method @FlaggedApi("android.companion.virtual.flags.vdm_custom_ime") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDisplayImePolicy(int, int); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setShowPointerIcon(boolean); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void unregisterIntentInterceptor(@NonNull android.companion.virtual.VirtualDeviceManager.IntentInterceptorCallback); - method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void wakeUp(); + method @FlaggedApi("android.companion.virtual.flags.dynamic_policy") public void setDevicePolicy(int, int); + method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public void setDevicePolicy(int, int, int); + method @FlaggedApi("android.companion.virtual.flags.vdm_custom_ime") public void setDisplayImePolicy(int, int); + method public void setShowPointerIcon(boolean); + method public void unregisterIntentInterceptor(@NonNull android.companion.virtual.VirtualDeviceManager.IntentInterceptorCallback); + method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public void wakeUp(); } public final class VirtualDeviceParams implements android.os.Parcelable { @@ -3632,7 +3632,7 @@ package android.companion.virtual.audio { package android.companion.virtual.camera { @FlaggedApi("android.companion.virtual.flags.virtual_camera") public final class VirtualCamera implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); + method public void close(); method @NonNull public android.companion.virtual.camera.VirtualCameraConfig getConfig(); } @@ -3684,7 +3684,7 @@ package android.companion.virtual.sensor { method public int getDeviceId(); method @NonNull public String getName(); method public int getType(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendEvent(@NonNull android.companion.virtual.sensor.VirtualSensorEvent); + method public void sendEvent(@NonNull android.companion.virtual.sensor.VirtualSensorEvent); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.sensor.VirtualSensor> CREATOR; } @@ -5695,8 +5695,8 @@ package android.hardware.hdmi { package android.hardware.input { public class VirtualDpad implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendKeyEvent(@NonNull android.hardware.input.VirtualKeyEvent); + method public void close(); + method public void sendKeyEvent(@NonNull android.hardware.input.VirtualKeyEvent); } public final class VirtualDpadConfig extends android.hardware.input.VirtualInputDeviceConfig implements android.os.Parcelable { @@ -5747,8 +5747,8 @@ package android.hardware.input { } public class VirtualKeyboard implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendKeyEvent(@NonNull android.hardware.input.VirtualKeyEvent); + method public void close(); + method public void sendKeyEvent(@NonNull android.hardware.input.VirtualKeyEvent); } public final class VirtualKeyboardConfig extends android.hardware.input.VirtualInputDeviceConfig implements android.os.Parcelable { @@ -5769,11 +5769,11 @@ package android.hardware.input { } public class VirtualMouse implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.graphics.PointF getCursorPosition(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendButtonEvent(@NonNull android.hardware.input.VirtualMouseButtonEvent); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendRelativeEvent(@NonNull android.hardware.input.VirtualMouseRelativeEvent); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendScrollEvent(@NonNull android.hardware.input.VirtualMouseScrollEvent); + method public void close(); + method @NonNull public android.graphics.PointF getCursorPosition(); + method public void sendButtonEvent(@NonNull android.hardware.input.VirtualMouseButtonEvent); + method public void sendRelativeEvent(@NonNull android.hardware.input.VirtualMouseRelativeEvent); + method public void sendScrollEvent(@NonNull android.hardware.input.VirtualMouseScrollEvent); } public final class VirtualMouseButtonEvent implements android.os.Parcelable { @@ -5846,8 +5846,8 @@ package android.hardware.input { } public class VirtualNavigationTouchpad implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendTouchEvent(@NonNull android.hardware.input.VirtualTouchEvent); + method public void close(); + method public void sendTouchEvent(@NonNull android.hardware.input.VirtualTouchEvent); } public final class VirtualNavigationTouchpadConfig extends android.hardware.input.VirtualInputDeviceConfig implements android.os.Parcelable { @@ -5864,8 +5864,8 @@ package android.hardware.input { } @FlaggedApi("android.companion.virtualdevice.flags.virtual_rotary") public class VirtualRotaryEncoder implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendScrollEvent(@NonNull android.hardware.input.VirtualRotaryEncoderScrollEvent); + method public void close(); + method public void sendScrollEvent(@NonNull android.hardware.input.VirtualRotaryEncoderScrollEvent); } @FlaggedApi("android.companion.virtualdevice.flags.virtual_rotary") public final class VirtualRotaryEncoderConfig extends android.hardware.input.VirtualInputDeviceConfig implements android.os.Parcelable { @@ -5895,9 +5895,9 @@ package android.hardware.input { } @FlaggedApi("android.companion.virtual.flags.virtual_stylus") public class VirtualStylus implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendButtonEvent(@NonNull android.hardware.input.VirtualStylusButtonEvent); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendMotionEvent(@NonNull android.hardware.input.VirtualStylusMotionEvent); + method public void close(); + method public void sendButtonEvent(@NonNull android.hardware.input.VirtualStylusButtonEvent); + method public void sendMotionEvent(@NonNull android.hardware.input.VirtualStylusMotionEvent); } @FlaggedApi("android.companion.virtual.flags.virtual_stylus") public final class VirtualStylusButtonEvent implements android.os.Parcelable { @@ -6000,8 +6000,8 @@ package android.hardware.input { } public class VirtualTouchscreen implements java.io.Closeable { - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close(); - method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendTouchEvent(@NonNull android.hardware.input.VirtualTouchEvent); + method public void close(); + method public void sendTouchEvent(@NonNull android.hardware.input.VirtualTouchEvent); } public final class VirtualTouchscreenConfig extends android.hardware.input.VirtualInputDeviceConfig implements android.os.Parcelable { diff --git a/core/java/android/companion/virtual/IVirtualDevice.aidl b/core/java/android/companion/virtual/IVirtualDevice.aidl index 40debe809fb7..d3a1c25b74d5 100644 --- a/core/java/android/companion/virtual/IVirtualDevice.aidl +++ b/core/java/android/companion/virtual/IVirtualDevice.aidl @@ -98,191 +98,160 @@ interface IVirtualDevice { /* * Turns off all trusted non-mirror displays of the virtual device. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void goToSleep(); /** * Turns on all trusted non-mirror displays of the virtual device. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void wakeUp(); /** * Closes the virtual device and frees all associated resources. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void close(); /** * Specifies a policy for this virtual device. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void setDevicePolicy(int policyType, int devicePolicy); /** * Adds an exemption to the default activity launch policy. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void addActivityPolicyExemption(in ActivityPolicyExemption exemption); /** * Removes an exemption to the default activity launch policy. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void removeActivityPolicyExemption(in ActivityPolicyExemption exemption); /** * Specifies a policy for this virtual device on the given display. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void setDevicePolicyForDisplay(int displayId, int policyType, int devicePolicy); /** * Notifies that an audio session being started. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void onAudioSessionStarting(int displayId, IAudioRoutingCallback routingCallback, IAudioConfigChangedCallback configChangedCallback); /** * Notifies that an audio session has ended. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void onAudioSessionEnded(); /** * Creates a virtual display and registers it with the display framework. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") int createVirtualDisplay(in VirtualDisplayConfig virtualDisplayConfig, in IVirtualDisplayCallback callback); /** * Creates a new dpad and registers it with the input framework with the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualDpad(in VirtualDpadConfig config, IBinder token); /** * Creates a new keyboard and registers it with the input framework with the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualKeyboard(in VirtualKeyboardConfig config, IBinder token); /** * Creates a new mouse and registers it with the input framework with the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualMouse(in VirtualMouseConfig config, IBinder token); /** * Creates a new touchscreen and registers it with the input framework with the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualTouchscreen(in VirtualTouchscreenConfig config, IBinder token); /** * Creates a new navigation touchpad and registers it with the input framework with the given * token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualNavigationTouchpad(in VirtualNavigationTouchpadConfig config, IBinder token); /** * Creates a new stylus and registers it with the input framework with the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualStylus(in VirtualStylusConfig config, IBinder token); /** * Creates a new rotary encoder and registers it with the input framework with the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void createVirtualRotaryEncoder(in VirtualRotaryEncoderConfig config, IBinder token); /** * Removes the input device corresponding to the given token from the framework. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void unregisterInputDevice(IBinder token); /** * Returns the ID of the device corresponding to the given token, as registered with the input * framework. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") int getInputDeviceId(IBinder token); /** * Injects a key event to the virtual dpad corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendDpadKeyEvent(IBinder token, in VirtualKeyEvent event); /** * Injects a key event to the virtual keyboard corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendKeyEvent(IBinder token, in VirtualKeyEvent event); /** * Injects a button event to the virtual mouse corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendButtonEvent(IBinder token, in VirtualMouseButtonEvent event); /** * Injects a relative event to the virtual mouse corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendRelativeEvent(IBinder token, in VirtualMouseRelativeEvent event); /** * Injects a scroll event to the virtual mouse corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendScrollEvent(IBinder token, in VirtualMouseScrollEvent event); /** * Injects a touch event to the virtual touch input device corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendTouchEvent(IBinder token, in VirtualTouchEvent event); /** * Injects a motion event from the virtual stylus input device corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendStylusMotionEvent(IBinder token, in VirtualStylusMotionEvent event); /** * Injects a button event from the virtual stylus input device corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendStylusButtonEvent(IBinder token, in VirtualStylusButtonEvent event); /** * Injects a scroll event from the virtual rotary encoder corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendRotaryEncoderScrollEvent(IBinder token, in VirtualRotaryEncoderScrollEvent event); /** * Returns all virtual sensors created for this device. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") List<VirtualSensor> getVirtualSensorList(); /** * Sends an event to the virtual sensor corresponding to the given token. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") boolean sendSensorEvent(IBinder token, in VirtualSensorEvent event); /** * Launches a pending intent on the given display that is owned by this virtual device. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void launchPendingIntent(int displayId, in PendingIntent pendingIntent, in ResultReceiver resultReceiver); @@ -290,15 +259,12 @@ interface IVirtualDevice { * Returns the current cursor position of the mouse corresponding to the given token, in x and y * coordinates. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") PointF getCursorPosition(IBinder token); /** Sets whether to show or hide the cursor while this virtual device is active. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void setShowPointerIcon(boolean showPointerIcon); /** Sets an IME policy for the given display. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void setDisplayImePolicy(int displayId, int policy); /** @@ -306,33 +272,28 @@ interface IVirtualDevice { * when matching the provided IntentFilter and calls the callback with the intercepted * intent. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void registerIntentInterceptor(in IVirtualDeviceIntentInterceptor intentInterceptor, in IntentFilter filter); /** * Unregisters a previously registered intent interceptor. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void unregisterIntentInterceptor(in IVirtualDeviceIntentInterceptor intentInterceptor); /** * Creates a new virtual camera and registers it with the virtual camera service. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void registerVirtualCamera(in VirtualCameraConfig camera); /** * Destroys the virtual camera with given config and unregisters it from the virtual camera * service. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void unregisterVirtualCamera(in VirtualCameraConfig camera); /** * Returns the id of the virtual camera with given config. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") String getVirtualCameraId(in VirtualCameraConfig camera); /** @@ -342,7 +303,6 @@ interface IVirtualDevice { * This is needed for virtual devices that are created by the system, as the VirtualDeviceImpl * object is created before the returned VirtualDeviceInternal one. */ - @EnforcePermission("CREATE_VIRTUAL_DEVICE") void setListeners(in IVirtualDeviceActivityListener activityListener, in IVirtualDeviceSoundEffectListener soundEffectListener); } diff --git a/core/java/android/companion/virtual/VirtualDeviceInternal.java b/core/java/android/companion/virtual/VirtualDeviceInternal.java index 6708ccee1645..d63a4434d7d8 100644 --- a/core/java/android/companion/virtual/VirtualDeviceInternal.java +++ b/core/java/android/companion/virtual/VirtualDeviceInternal.java @@ -26,7 +26,6 @@ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS; 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; @@ -242,7 +241,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull List<VirtualSensor> getVirtualSensorList() { try { @@ -252,7 +250,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void goToSleep() { try { mVirtualDevice.goToSleep(); @@ -261,7 +258,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void wakeUp() { try { mVirtualDevice.wakeUp(); @@ -270,7 +266,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void launchPendingIntent( int displayId, @NonNull PendingIntent pendingIntent, @@ -292,7 +287,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @Nullable VirtualDisplay createVirtualDisplay( @NonNull VirtualDisplayConfig config, @@ -310,7 +304,6 @@ public class VirtualDeviceInternal { return displayManager.createVirtualDisplayWrapper(config, callbackWrapper, displayId); } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void close() { try { // This also takes care of unregistering all virtual sensors. @@ -324,7 +317,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void setDevicePolicy(@VirtualDeviceParams.DynamicPolicyType int policyType, @VirtualDeviceParams.DevicePolicy int devicePolicy) { switch (policyType) { @@ -344,7 +336,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void addActivityPolicyExemption(@NonNull ActivityPolicyExemption exemption) { try { mVirtualDevice.addActivityPolicyExemption(exemption); @@ -353,7 +344,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void removeActivityPolicyExemption(@NonNull ActivityPolicyExemption exemption) { try { mVirtualDevice.removeActivityPolicyExemption(exemption); @@ -362,7 +352,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void setDevicePolicyForDisplay(int displayId, @VirtualDeviceParams.DynamicDisplayPolicyType int policyType, @VirtualDeviceParams.DevicePolicy int devicePolicy) { @@ -382,7 +371,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualDpad createVirtualDpad(@NonNull VirtualDpadConfig config) { try { @@ -395,7 +383,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualKeyboard createVirtualKeyboard(@NonNull VirtualKeyboardConfig config) { try { @@ -408,7 +395,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualMouse createVirtualMouse(@NonNull VirtualMouseConfig config) { try { @@ -421,7 +407,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualTouchscreen createVirtualTouchscreen( @NonNull VirtualTouchscreenConfig config) { @@ -435,7 +420,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualStylus createVirtualStylus(@NonNull VirtualStylusConfig config) { try { @@ -448,7 +432,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualRotaryEncoder createVirtualRotaryEncoder(@NonNull VirtualRotaryEncoderConfig config) { try { @@ -461,7 +444,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualNavigationTouchpad createVirtualNavigationTouchpad( @NonNull VirtualNavigationTouchpadConfig config) { @@ -476,7 +458,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualAudioDevice createVirtualAudioDevice( @NonNull VirtualDisplay display, @@ -501,7 +482,6 @@ public class VirtualDeviceInternal { return mVirtualAudioDevice; } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull VirtualCamera createVirtualCamera(@NonNull VirtualCameraConfig config) { try { @@ -513,7 +493,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void setShowPointerIcon(boolean showPointerIcon) { try { mVirtualDevice.setShowPointerIcon(showPointerIcon); @@ -522,7 +501,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void setDisplayImePolicy(int displayId, @WindowManager.DisplayImePolicy int policy) { try { mVirtualDevice.setDisplayImePolicy(displayId, policy); @@ -564,7 +542,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void registerIntentInterceptor( @NonNull IntentFilter interceptorFilter, @CallbackExecutor @NonNull Executor executor, @@ -584,7 +561,6 @@ public class VirtualDeviceInternal { } } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void unregisterIntentInterceptor( @NonNull VirtualDeviceManager.IntentInterceptorCallback interceptorCallback) { Objects.requireNonNull(interceptorCallback); diff --git a/core/java/android/companion/virtual/VirtualDeviceManager.java b/core/java/android/companion/virtual/VirtualDeviceManager.java index 70211bfd77b1..6ea7834243a4 100644 --- a/core/java/android/companion/virtual/VirtualDeviceManager.java +++ b/core/java/android/companion/virtual/VirtualDeviceManager.java @@ -614,7 +614,6 @@ public final class VirtualDeviceManager { * * @return A list of all sensors for this device, or an empty list if no sensors exist. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public List<VirtualSensor> getVirtualSensorList() { return mVirtualDeviceInternal.getVirtualSensorList(); @@ -635,7 +634,6 @@ public final class VirtualDeviceManager { * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY */ @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void goToSleep() { mVirtualDeviceInternal.goToSleep(); } @@ -654,7 +652,6 @@ public final class VirtualDeviceManager { * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY */ @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void wakeUp() { mVirtualDeviceInternal.wakeUp(); } @@ -677,7 +674,6 @@ public final class VirtualDeviceManager { * on the virtual display, or one of the {@code LAUNCH_FAILED} status explaining why it * failed. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void launchPendingIntent( int displayId, @NonNull PendingIntent pendingIntent, @@ -718,7 +714,6 @@ public final class VirtualDeviceManager { * VirtualDisplay.Callback)} */ @Deprecated - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @Nullable public VirtualDisplay createVirtualDisplay( @IntRange(from = 1) int width, @@ -756,7 +751,6 @@ public final class VirtualDeviceManager { * * @see DisplayManager#createVirtualDisplay */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @Nullable public VirtualDisplay createVirtualDisplay( @NonNull VirtualDisplayConfig config, @@ -770,7 +764,6 @@ public final class VirtualDeviceManager { * Closes the virtual device, stopping and tearing down any virtual displays, associated * virtual audio device, and event injection that's currently in progress. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close() { mVirtualDeviceInternal.close(); } @@ -789,7 +782,6 @@ public final class VirtualDeviceManager { * @see VirtualDeviceParams#POLICY_TYPE_ACTIVITY */ @FlaggedApi(Flags.FLAG_DYNAMIC_POLICY) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDevicePolicy(@VirtualDeviceParams.DynamicPolicyType int policyType, @VirtualDeviceParams.DevicePolicy int devicePolicy) { mVirtualDeviceInternal.setDevicePolicy(policyType, devicePolicy); @@ -812,7 +804,6 @@ public final class VirtualDeviceManager { * @see #setDevicePolicy */ @FlaggedApi(Flags.FLAG_DYNAMIC_POLICY) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void addActivityPolicyExemption(@NonNull ComponentName componentName) { addActivityPolicyExemption(new ActivityPolicyExemption.Builder() .setComponentName(componentName) @@ -836,7 +827,6 @@ public final class VirtualDeviceManager { * @see #setDevicePolicy */ @FlaggedApi(Flags.FLAG_DYNAMIC_POLICY) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void removeActivityPolicyExemption(@NonNull ComponentName componentName) { removeActivityPolicyExemption(new ActivityPolicyExemption.Builder() .setComponentName(componentName) @@ -861,7 +851,6 @@ public final class VirtualDeviceManager { * @see #setDevicePolicy */ @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ACTIVITY_CONTROL_API) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void addActivityPolicyExemption(@NonNull ActivityPolicyExemption exemption) { mVirtualDeviceInternal.addActivityPolicyExemption(Objects.requireNonNull(exemption)); } @@ -877,7 +866,6 @@ public final class VirtualDeviceManager { * @see #setDevicePolicy */ @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ACTIVITY_CONTROL_API) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void removeActivityPolicyExemption(@NonNull ActivityPolicyExemption exemption) { mVirtualDeviceInternal.removeActivityPolicyExemption(Objects.requireNonNull(exemption)); } @@ -900,7 +888,6 @@ public final class VirtualDeviceManager { * @see VirtualDeviceParams#POLICY_TYPE_ACTIVITY */ @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ACTIVITY_CONTROL_API) - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDevicePolicy( @VirtualDeviceParams.DynamicDisplayPolicyType int policyType, @VirtualDeviceParams.DevicePolicy int devicePolicy, @@ -913,7 +900,6 @@ public final class VirtualDeviceManager { * * @param config the configurations of the virtual dpad. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualDpad createVirtualDpad(@NonNull VirtualDpadConfig config) { Objects.requireNonNull(config, "config must not be null"); @@ -925,7 +911,6 @@ public final class VirtualDeviceManager { * * @param config the configurations of the virtual keyboard. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualKeyboard createVirtualKeyboard(@NonNull VirtualKeyboardConfig config) { Objects.requireNonNull(config, "config must not be null"); @@ -943,7 +928,6 @@ public final class VirtualDeviceManager { * @deprecated Use {@link #createVirtualKeyboard(VirtualKeyboardConfig config)} instead */ @Deprecated - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualKeyboard createVirtualKeyboard(@NonNull VirtualDisplay display, @NonNull String inputDeviceName, int vendorId, int productId) { @@ -962,7 +946,6 @@ public final class VirtualDeviceManager { * * @param config the configurations of the virtual mouse. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualMouse createVirtualMouse(@NonNull VirtualMouseConfig config) { Objects.requireNonNull(config, "config must not be null"); @@ -980,7 +963,6 @@ public final class VirtualDeviceManager { * @deprecated Use {@link #createVirtualMouse(VirtualMouseConfig config)} instead */ @Deprecated - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualMouse createVirtualMouse(@NonNull VirtualDisplay display, @NonNull String inputDeviceName, int vendorId, int productId) { @@ -999,7 +981,6 @@ public final class VirtualDeviceManager { * * @param config the configurations of the virtual touchscreen. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualTouchscreen createVirtualTouchscreen( @NonNull VirtualTouchscreenConfig config) { @@ -1019,7 +1000,6 @@ public final class VirtualDeviceManager { * instead */ @Deprecated - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualTouchscreen createVirtualTouchscreen(@NonNull VirtualDisplay display, @NonNull String inputDeviceName, int vendorId, int productId) { @@ -1046,7 +1026,6 @@ public final class VirtualDeviceManager { * @param config the configurations of the virtual navigation touchpad. * @see android.view.InputDevice#SOURCE_TOUCH_NAVIGATION */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualNavigationTouchpad createVirtualNavigationTouchpad( @NonNull VirtualNavigationTouchpadConfig config) { @@ -1058,7 +1037,6 @@ public final class VirtualDeviceManager { * * @param config the touchscreen configurations for the virtual stylus. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull @FlaggedApi(Flags.FLAG_VIRTUAL_STYLUS) public VirtualStylus createVirtualStylus( @@ -1072,7 +1050,6 @@ public final class VirtualDeviceManager { * @param config the configuration for the virtual rotary encoder. * @see android.view.InputDevice#SOURCE_ROTARY_ENCODER */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_VIRTUAL_ROTARY) public VirtualRotaryEncoder createVirtualRotaryEncoder( @@ -1100,7 +1077,6 @@ public final class VirtualDeviceManager { * applications running on virtual display is changed. * @return A {@link VirtualAudioDevice} instance. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull public VirtualAudioDevice createVirtualAudioDevice( @NonNull VirtualDisplay display, @@ -1121,7 +1097,6 @@ public final class VirtualDeviceManager { * @throws UnsupportedOperationException if virtual camera isn't supported on this device. * @see VirtualDeviceParams#POLICY_TYPE_CAMERA */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @NonNull @FlaggedApi(Flags.FLAG_VIRTUAL_CAMERA) public VirtualCamera createVirtualCamera(@NonNull VirtualCameraConfig config) { @@ -1141,7 +1116,6 @@ public final class VirtualDeviceManager { * visibility is true. * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_TRUSTED */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setShowPointerIcon(boolean showPointerIcon) { mVirtualDeviceInternal.setShowPointerIcon(showPointerIcon); } @@ -1156,7 +1130,6 @@ public final class VirtualDeviceManager { * @throws SecurityException if the display is not owned by this device or is not * {@link DisplayManager#VIRTUAL_DISPLAY_FLAG_TRUSTED trusted} */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @FlaggedApi(Flags.FLAG_VDM_CUSTOM_IME) public void setDisplayImePolicy(int displayId, @WindowManager.DisplayImePolicy int policy) { if (Flags.vdmCustomIme()) { @@ -1220,7 +1193,6 @@ public final class VirtualDeviceManager { * is intercepted. * @see #unregisterIntentInterceptor(IntentInterceptorCallback) */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void registerIntentInterceptor( @NonNull IntentFilter interceptorFilter, @CallbackExecutor @NonNull Executor executor, @@ -1233,7 +1205,6 @@ public final class VirtualDeviceManager { * Unregisters the intent interceptor previously registered with * {@link #registerIntentInterceptor}. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void unregisterIntentInterceptor( @NonNull IntentInterceptorCallback interceptorCallback) { mVirtualDeviceInternal.unregisterIntentInterceptor(interceptorCallback); diff --git a/core/java/android/companion/virtual/camera/VirtualCamera.java b/core/java/android/companion/virtual/camera/VirtualCamera.java index f7275894961c..ece048d3a95b 100644 --- a/core/java/android/companion/virtual/camera/VirtualCamera.java +++ b/core/java/android/companion/virtual/camera/VirtualCamera.java @@ -17,7 +17,6 @@ package android.companion.virtual.camera; import android.annotation.FlaggedApi; -import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; @@ -94,7 +93,6 @@ public final class VirtualCamera implements Closeable { } @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close() { try { mVirtualDevice.unregisterVirtualCamera(mConfig); diff --git a/core/java/android/companion/virtual/sensor/VirtualSensor.java b/core/java/android/companion/virtual/sensor/VirtualSensor.java index 37e494bd8efe..934a1a8ffcbd 100644 --- a/core/java/android/companion/virtual/sensor/VirtualSensor.java +++ b/core/java/android/companion/virtual/sensor/VirtualSensor.java @@ -17,7 +17,6 @@ package android.companion.virtual.sensor; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; @@ -136,7 +135,6 @@ public final class VirtualSensor implements Parcelable { /** * Send a sensor event to the system. */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendEvent(@NonNull VirtualSensorEvent event) { try { mVirtualDevice.sendSensorEvent(mToken, event); diff --git a/core/java/android/hardware/input/VirtualDpad.java b/core/java/android/hardware/input/VirtualDpad.java index 5985c39034ea..5b08a0e70b44 100644 --- a/core/java/android/hardware/input/VirtualDpad.java +++ b/core/java/android/hardware/input/VirtualDpad.java @@ -17,7 +17,6 @@ package android.hardware.input; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.companion.virtual.IVirtualDevice; import android.os.IBinder; @@ -72,7 +71,6 @@ public class VirtualDpad extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendKeyEvent(@NonNull VirtualKeyEvent event) { try { if (!mSupportedKeyCodes.contains(event.getKeyCode())) { diff --git a/core/java/android/hardware/input/VirtualInputDevice.java b/core/java/android/hardware/input/VirtualInputDevice.java index affa4ed7e983..8e4e097ab803 100644 --- a/core/java/android/hardware/input/VirtualInputDevice.java +++ b/core/java/android/hardware/input/VirtualInputDevice.java @@ -16,7 +16,6 @@ package android.hardware.input; -import android.annotation.RequiresPermission; import android.companion.virtual.IVirtualDevice; import android.os.IBinder; import android.os.RemoteException; @@ -68,7 +67,6 @@ abstract class VirtualInputDevice implements Closeable { } @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close() { Log.d(TAG, "Closing virtual input device " + mConfig.getInputDeviceName()); try { diff --git a/core/java/android/hardware/input/VirtualKeyboard.java b/core/java/android/hardware/input/VirtualKeyboard.java index 6a7d19535ac9..9664004d4bb7 100644 --- a/core/java/android/hardware/input/VirtualKeyboard.java +++ b/core/java/android/hardware/input/VirtualKeyboard.java @@ -17,7 +17,6 @@ package android.hardware.input; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; @@ -31,8 +30,8 @@ import android.view.KeyEvent; * A virtual keyboard representing a key input mechanism on a remote device, such as a built-in * keyboard on a laptop, a software keyboard on a tablet, or a keypad on a TV remote control. * - * This registers an InputDevice that is interpreted like a physically-connected device and - * dispatches received events to it. + * <p>This registers an InputDevice that is interpreted like a physically-connected device and + * dispatches received events to it.</p> * * @hide */ @@ -52,7 +51,6 @@ public class VirtualKeyboard extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendKeyEvent(@NonNull VirtualKeyEvent event) { try { if (mUnsupportedKeyCode == event.getKeyCode()) { diff --git a/core/java/android/hardware/input/VirtualMouse.java b/core/java/android/hardware/input/VirtualMouse.java index fb0f70049273..f2d113c841dc 100644 --- a/core/java/android/hardware/input/VirtualMouse.java +++ b/core/java/android/hardware/input/VirtualMouse.java @@ -17,7 +17,6 @@ package android.hardware.input; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.companion.virtual.IVirtualDevice; import android.graphics.PointF; @@ -30,8 +29,8 @@ import android.view.MotionEvent; * A virtual mouse representing a relative input mechanism on a remote device, such as a mouse or * trackpad. * - * This registers an InputDevice that is interpreted like a physically-connected device and - * dispatches received events to it. + * <p>This registers an InputDevice that is interpreted like a physically-connected device and + * dispatches received events to it.</p> * * @hide */ @@ -50,7 +49,6 @@ public class VirtualMouse extends VirtualInputDevice { * @throws IllegalStateException if the display this mouse is associated with is not currently * targeted */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendButtonEvent(@NonNull VirtualMouseButtonEvent event) { try { if (!mVirtualDevice.sendButtonEvent(mToken, event)) { @@ -70,7 +68,6 @@ public class VirtualMouse extends VirtualInputDevice { * @throws IllegalStateException if the display this mouse is associated with is not currently * targeted */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendScrollEvent(@NonNull VirtualMouseScrollEvent event) { try { if (!mVirtualDevice.sendScrollEvent(mToken, event)) { @@ -89,7 +86,6 @@ public class VirtualMouse extends VirtualInputDevice { * @throws IllegalStateException if the display this mouse is associated with is not currently * targeted */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendRelativeEvent(@NonNull VirtualMouseRelativeEvent event) { try { if (!mVirtualDevice.sendRelativeEvent(mToken, event)) { @@ -108,7 +104,6 @@ public class VirtualMouse extends VirtualInputDevice { * @throws IllegalStateException if the display this mouse is associated with is not currently * targeted */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public @NonNull PointF getCursorPosition() { try { return mVirtualDevice.getCursorPosition(mToken); diff --git a/core/java/android/hardware/input/VirtualNavigationTouchpad.java b/core/java/android/hardware/input/VirtualNavigationTouchpad.java index 3dbb38568f68..94e2151160db 100644 --- a/core/java/android/hardware/input/VirtualNavigationTouchpad.java +++ b/core/java/android/hardware/input/VirtualNavigationTouchpad.java @@ -17,7 +17,6 @@ package android.hardware.input; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.companion.virtual.IVirtualDevice; import android.os.IBinder; @@ -51,7 +50,6 @@ public class VirtualNavigationTouchpad extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendTouchEvent(@NonNull VirtualTouchEvent event) { try { if (!mVirtualDevice.sendTouchEvent(mToken, event)) { diff --git a/core/java/android/hardware/input/VirtualRotaryEncoder.java b/core/java/android/hardware/input/VirtualRotaryEncoder.java index bc131df9d111..47c92c8e7cbd 100644 --- a/core/java/android/hardware/input/VirtualRotaryEncoder.java +++ b/core/java/android/hardware/input/VirtualRotaryEncoder.java @@ -18,7 +18,6 @@ package android.hardware.input; import android.annotation.FlaggedApi; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.companion.virtual.IVirtualDevice; import android.companion.virtualdevice.flags.Flags; @@ -48,7 +47,6 @@ public class VirtualRotaryEncoder extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendScrollEvent(@NonNull VirtualRotaryEncoderScrollEvent event) { try { if (!mVirtualDevice.sendRotaryEncoderScrollEvent(mToken, event)) { diff --git a/core/java/android/hardware/input/VirtualStylus.java b/core/java/android/hardware/input/VirtualStylus.java index c763f7406f3a..4b79bc482c7b 100644 --- a/core/java/android/hardware/input/VirtualStylus.java +++ b/core/java/android/hardware/input/VirtualStylus.java @@ -18,7 +18,6 @@ package android.hardware.input; import android.annotation.FlaggedApi; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.companion.virtual.IVirtualDevice; import android.companion.virtual.flags.Flags; @@ -30,8 +29,8 @@ import android.util.Log; * A virtual stylus which can be used to inject input into the framework that represents a stylus * on a remote device. * - * This registers an {@link android.view.InputDevice} that is interpreted like a - * physically-connected device and dispatches received events to it. + * <p>This registers an {@link android.view.InputDevice} that is interpreted like a + * physically-connected device and dispatches received events to it.</p> * * @hide */ @@ -49,7 +48,6 @@ public class VirtualStylus extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendMotionEvent(@NonNull VirtualStylusMotionEvent event) { try { if (!mVirtualDevice.sendStylusMotionEvent(mToken, event)) { @@ -66,7 +64,6 @@ public class VirtualStylus extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendButtonEvent(@NonNull VirtualStylusButtonEvent event) { try { if (!mVirtualDevice.sendStylusButtonEvent(mToken, event)) { diff --git a/core/java/android/hardware/input/VirtualTouchscreen.java b/core/java/android/hardware/input/VirtualTouchscreen.java index 2c800aadef37..d0537f05bb38 100644 --- a/core/java/android/hardware/input/VirtualTouchscreen.java +++ b/core/java/android/hardware/input/VirtualTouchscreen.java @@ -17,7 +17,6 @@ package android.hardware.input; import android.annotation.NonNull; -import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.companion.virtual.IVirtualDevice; import android.os.IBinder; @@ -27,8 +26,8 @@ import android.util.Log; /** * A virtual touchscreen representing a touch-based display input mechanism on a remote device. * - * This registers an InputDevice that is interpreted like a physically-connected device and - * dispatches received events to it. + * <p>This registers an InputDevice that is interpreted like a physically-connected device and + * dispatches received events to it.</p> * * @hide */ @@ -45,7 +44,6 @@ public class VirtualTouchscreen extends VirtualInputDevice { * * @param event the event to send */ - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void sendTouchEvent(@NonNull VirtualTouchEvent event) { try { if (!mVirtualDevice.sendTouchEvent(mToken, event)) { diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java index 2968ff3d0df6..3d67ed444ef2 100644 --- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java @@ -33,7 +33,6 @@ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CLIPBOAR import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS; import static android.companion.virtualdevice.flags.Flags.virtualCameraServiceDiscovery; -import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; @@ -98,7 +97,6 @@ import android.os.Build; import android.os.IBinder; import android.os.LocaleList; import android.os.Looper; -import android.os.PermissionEnforcer; import android.os.PowerManager; import android.os.RemoteException; import android.os.ResultReceiver; @@ -405,7 +403,6 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub VirtualDeviceParams params, DisplayManagerGlobal displayManager, VirtualCameraController virtualCameraController) { - super(PermissionEnforcer.fromContext(context)); mVirtualDeviceLog = virtualDeviceLog; mOwnerPackageName = attributionSource.getPackageName(); mAttributionSource = attributionSource; @@ -565,10 +562,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub * object is created before the returned VirtualDeviceInternal one. */ @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setListeners(@NonNull IVirtualDeviceActivityListener activityListener, @NonNull IVirtualDeviceSoundEffectListener soundEffectListener) { - super.setListeners_enforcePermission(); mActivityListener = Objects.requireNonNull(activityListener); mSoundEffectListener = Objects.requireNonNull(soundEffectListener); } @@ -615,9 +610,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void goToSleep() { - super.goToSleep_enforcePermission(); + checkCallerIsDeviceOwner(); synchronized (mVirtualDeviceLock) { mRequestedToBeAwake = false; } @@ -630,9 +624,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void wakeUp() { - super.wakeUp_enforcePermission(); + checkCallerIsDeviceOwner(); synchronized (mVirtualDeviceLock) { mRequestedToBeAwake = true; if (mLockdownActive) { @@ -650,16 +643,12 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void launchPendingIntent(int displayId, PendingIntent pendingIntent, ResultReceiver resultReceiver) { - super.launchPendingIntent_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(pendingIntent); synchronized (mVirtualDeviceLock) { - if (!mVirtualDisplays.contains(displayId)) { - throw new SecurityException("Display ID " + displayId - + " not found for this virtual device"); - } + checkDisplayOwnedByVirtualDeviceLocked(displayId); } if (pendingIntent.isActivity()) { try { @@ -691,9 +680,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void addActivityPolicyExemption(@NonNull ActivityPolicyExemption exemption) { - super.addActivityPolicyExemption_enforcePermission(); + checkCallerIsDeviceOwner(); final int displayId = exemption.getDisplayId(); if (exemption.getComponentName() == null || displayId != Display.INVALID_DISPLAY) { if (!android.companion.virtualdevice.flags.Flags.activityControlApi()) { @@ -729,9 +717,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void removeActivityPolicyExemption(@NonNull ActivityPolicyExemption exemption) { - super.removeActivityPolicyExemption_enforcePermission(); + checkCallerIsDeviceOwner(); final int displayId = exemption.getDisplayId(); if (exemption.getComponentName() == null || displayId != Display.INVALID_DISPLAY) { if (!android.companion.virtualdevice.flags.Flags.activityControlApi()) { @@ -782,9 +769,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void close() { - super.close_enforcePermission(); // Remove about-to-be-closed virtual device from the service before butchering it. if (!mService.removeVirtualDevice(mDeviceId)) { // Device is already closed. @@ -859,11 +844,10 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void onAudioSessionStarting(int displayId, @NonNull IAudioRoutingCallback routingCallback, @Nullable IAudioConfigChangedCallback configChangedCallback) { - super.onAudioSessionStarting_enforcePermission(); + checkCallerIsDeviceOwner(); synchronized (mVirtualDeviceLock) { checkDisplayOwnedByVirtualDeviceLocked(displayId); if (mVirtualAudioController == null) { @@ -877,9 +861,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void onAudioSessionEnded() { - super.onAudioSessionEnded_enforcePermission(); + checkCallerIsDeviceOwner(); synchronized (mVirtualDeviceLock) { if (mVirtualAudioController != null) { mVirtualAudioController.stopListening(); @@ -889,10 +872,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDevicePolicy(@VirtualDeviceParams.DynamicPolicyType int policyType, @VirtualDeviceParams.DevicePolicy int devicePolicy) { - super.setDevicePolicy_enforcePermission(); + checkCallerIsDeviceOwner(); if (!Flags.dynamicPolicy()) { return; } @@ -959,11 +941,10 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDevicePolicyForDisplay(int displayId, @VirtualDeviceParams.DynamicDisplayPolicyType int policyType, @VirtualDeviceParams.DevicePolicy int devicePolicy) { - super.setDevicePolicyForDisplay_enforcePermission(); + checkCallerIsDeviceOwner(); if (!android.companion.virtualdevice.flags.Flags.activityControlApi()) { return; } @@ -989,9 +970,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualDpad(VirtualDpadConfig config, @NonNull IBinder deviceToken) { - super.createVirtualDpad_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); final long ident = Binder.clearCallingIdentity(); @@ -1007,9 +987,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualKeyboard(VirtualKeyboardConfig config, @NonNull IBinder deviceToken) { - super.createVirtualKeyboard_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); final long ident = Binder.clearCallingIdentity(); @@ -1029,9 +1008,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualMouse(VirtualMouseConfig config, @NonNull IBinder deviceToken) { - super.createVirtualMouse_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); final long ident = Binder.clearCallingIdentity(); @@ -1046,10 +1024,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualTouchscreen(VirtualTouchscreenConfig config, @NonNull IBinder deviceToken) { - super.createVirtualTouchscreen_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); final long ident = Binder.clearCallingIdentity(); @@ -1065,10 +1042,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualNavigationTouchpad(VirtualNavigationTouchpadConfig config, @NonNull IBinder deviceToken) { - super.createVirtualNavigationTouchpad_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); final long ident = Binder.clearCallingIdentity(); @@ -1086,10 +1062,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualStylus(@NonNull VirtualStylusConfig config, @NonNull IBinder deviceToken) { - super.createVirtualStylus_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); Objects.requireNonNull(deviceToken); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); @@ -1106,10 +1081,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void createVirtualRotaryEncoder(@NonNull VirtualRotaryEncoderConfig config, @NonNull IBinder deviceToken) { - super.createVirtualRotaryEncoder_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(config); Objects.requireNonNull(deviceToken); checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId()); @@ -1126,9 +1100,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void unregisterInputDevice(IBinder token) { - super.unregisterInputDevice_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { mInputController.unregisterInputDevice(token); @@ -1138,9 +1111,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public int getInputDeviceId(IBinder token) { - super.getInputDeviceId_enforcePermission(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.getInputDeviceId(token); @@ -1151,9 +1122,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendDpadKeyEvent(IBinder token, VirtualKeyEvent event) { - super.sendDpadKeyEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendDpadKeyEvent(token, event); @@ -1163,9 +1133,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendKeyEvent(IBinder token, VirtualKeyEvent event) { - super.sendKeyEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendKeyEvent(token, event); @@ -1175,9 +1144,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendButtonEvent(IBinder token, VirtualMouseButtonEvent event) { - super.sendButtonEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendButtonEvent(token, event); @@ -1187,9 +1155,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendTouchEvent(IBinder token, VirtualTouchEvent event) { - super.sendTouchEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendTouchEvent(token, event); @@ -1199,9 +1166,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendRelativeEvent(IBinder token, VirtualMouseRelativeEvent event) { - super.sendRelativeEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendRelativeEvent(token, event); @@ -1211,9 +1177,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendScrollEvent(IBinder token, VirtualMouseScrollEvent event) { - super.sendScrollEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendScrollEvent(token, event); @@ -1223,9 +1188,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public PointF getCursorPosition(IBinder token) { - super.getCursorPosition_enforcePermission(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.getCursorPosition(token); @@ -1235,10 +1198,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendStylusMotionEvent(@NonNull IBinder token, @NonNull VirtualStylusMotionEvent event) { - super.sendStylusMotionEvent_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(token); Objects.requireNonNull(event); final long ident = Binder.clearCallingIdentity(); @@ -1250,10 +1212,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendStylusButtonEvent(@NonNull IBinder token, @NonNull VirtualStylusButtonEvent event) { - super.sendStylusButtonEvent_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(token); Objects.requireNonNull(event); final long ident = Binder.clearCallingIdentity(); @@ -1265,10 +1226,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendRotaryEncoderScrollEvent(@NonNull IBinder token, @NonNull VirtualRotaryEncoderScrollEvent event) { - super.sendRotaryEncoderScrollEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mInputController.sendRotaryEncoderScrollEvent(token, event); @@ -1278,9 +1238,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setShowPointerIcon(boolean showPointerIcon) { - super.setShowPointerIcon_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { synchronized (mVirtualDeviceLock) { @@ -1299,14 +1258,10 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setDisplayImePolicy(int displayId, @WindowManager.DisplayImePolicy int policy) { - super.setDisplayImePolicy_enforcePermission(); + checkCallerIsDeviceOwner(); synchronized (mVirtualDeviceLock) { - if (!mVirtualDisplays.contains(displayId)) { - throw new SecurityException("Display ID " + displayId - + " not found for this virtual device"); - } + checkDisplayOwnedByVirtualDeviceLocked(displayId); } final long ident = Binder.clearCallingIdentity(); try { @@ -1317,10 +1272,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @Nullable public List<VirtualSensor> getVirtualSensorList() { - super.getVirtualSensorList_enforcePermission(); + checkCallerIsDeviceOwner(); return mSensorController.getSensorList(); } @@ -1330,9 +1284,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public boolean sendSensorEvent(@NonNull IBinder token, @NonNull VirtualSensorEvent event) { - super.sendSensorEvent_enforcePermission(); + checkCallerIsDeviceOwner(); final long ident = Binder.clearCallingIdentity(); try { return mSensorController.sendSensorEvent(token, event); @@ -1342,10 +1295,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void registerIntentInterceptor(IVirtualDeviceIntentInterceptor intentInterceptor, IntentFilter filter) { - super.registerIntentInterceptor_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(intentInterceptor); Objects.requireNonNull(filter); synchronized (mVirtualDeviceLock) { @@ -1354,10 +1306,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void unregisterIntentInterceptor( @NonNull IVirtualDeviceIntentInterceptor intentInterceptor) { - super.unregisterIntentInterceptor_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(intentInterceptor); synchronized (mVirtualDeviceLock) { mIntentInterceptors.remove(intentInterceptor.asBinder()); @@ -1365,10 +1316,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void registerVirtualCamera(@NonNull VirtualCameraConfig cameraConfig) throws RemoteException { - super.registerVirtualCamera_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(cameraConfig); if (mVirtualCameraController == null) { throw new UnsupportedOperationException("Virtual camera controller is not available"); @@ -1377,10 +1327,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void unregisterVirtualCamera(@NonNull VirtualCameraConfig cameraConfig) throws RemoteException { - super.unregisterVirtualCamera_enforcePermission(); + checkCallerIsDeviceOwner(); Objects.requireNonNull(cameraConfig); if (mVirtualCameraController == null) { throw new UnsupportedOperationException("Virtual camera controller is not available"); @@ -1389,10 +1338,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public String getVirtualCameraId(@NonNull VirtualCameraConfig cameraConfig) throws RemoteException { - super.getVirtualCameraId_enforcePermission(); Objects.requireNonNull(cameraConfig); if (mVirtualCameraController == null) { throw new UnsupportedOperationException("Virtual camera controller is not available"); @@ -1515,10 +1462,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } @Override // Binder call - @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public int createVirtualDisplay(@NonNull VirtualDisplayConfig virtualDisplayConfig, @NonNull IVirtualDisplayCallback callback) { - super.createVirtualDisplay_enforcePermission(); + checkCallerIsDeviceOwner(); GenericWindowPolicyController gwpc; synchronized (mVirtualDeviceLock) { gwpc = createWindowPolicyControllerLocked(virtualDisplayConfig.getDisplayCategories()); @@ -1683,6 +1629,13 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub } } + private void checkCallerIsDeviceOwner() { + if (Binder.getCallingUid() != mOwnerUid) { + throw new SecurityException( + "Caller is not the owner of this virtual device"); + } + } + void goToSleepInternal(@PowerManager.GoToSleepReason int reason) { final long now = SystemClock.uptimeMillis(); synchronized (mVirtualDeviceLock) { diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java index 41b6a8533880..f87e3c338df7 100644 --- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java @@ -21,6 +21,7 @@ import static android.media.AudioManager.AUDIO_SESSION_ID_GENERATE; import static com.android.server.wm.ActivityInterceptorCallback.VIRTUAL_DEVICE_SERVICE_ORDERED_ID; +import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; @@ -122,7 +123,6 @@ public class VirtualDeviceManagerService extends SystemService { private final CompanionDeviceManager.OnAssociationsChangedListener mCdmAssociationListener = new CompanionDeviceManager.OnAssociationsChangedListener() { @Override - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void onAssociationsChanged(@NonNull List<AssociationInfo> associations) { syncVirtualDevicesToCdmAssociations(associations); } @@ -339,7 +339,6 @@ public class VirtualDeviceManagerService extends SystemService { return true; } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) private void syncVirtualDevicesToCdmAssociations(List<AssociationInfo> associations) { Set<VirtualDeviceImpl> virtualDevicesToRemove = new HashSet<>(); synchronized (mVirtualDeviceManagerLock) { @@ -382,7 +381,6 @@ public class VirtualDeviceManagerService extends SystemService { cdm.removeOnAssociationsChangedListener(mCdmAssociationListener); } - @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) void onCdmAssociationsChanged(List<AssociationInfo> associations) { ArrayMap<String, AssociationInfo> vdmAssociations = new ArrayMap<>(); for (int i = 0; i < associations.size(); ++i) { @@ -452,7 +450,7 @@ public class VirtualDeviceManagerService extends SystemService { } }; - @android.annotation.EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) + @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) @Override // Binder call public IVirtualDevice createVirtualDevice( IBinder token, diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java index e09933a55fb9..8a1bb009f2bb 100644 --- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java @@ -161,8 +161,8 @@ public class VirtualDeviceManagerServiceTest { private static final int DISPLAY_ID_1 = 2; private static final int DISPLAY_ID_2 = 3; private static final int NON_EXISTENT_DISPLAY_ID = 42; - private static final int DEVICE_OWNER_UID_1 = 50; - private static final int DEVICE_OWNER_UID_2 = 51; + private static final int DEVICE_OWNER_UID_1 = Process.myUid(); + private static final int DEVICE_OWNER_UID_2 = DEVICE_OWNER_UID_1 + 1; private static final int UID_1 = 0; private static final int UID_2 = 10; private static final int UID_3 = 10000; @@ -676,7 +676,7 @@ public class VirtualDeviceManagerServiceTest { @Test public void getDeviceIdsForUid_twoDevicesUidOnOne_returnsCorrectId() { VirtualDeviceImpl secondDevice = createVirtualDevice(VIRTUAL_DEVICE_ID_2, - DEVICE_OWNER_UID_2); + DEVICE_OWNER_UID_1); addVirtualDisplay(secondDevice, DISPLAY_ID_2); secondDevice.getDisplayWindowPolicyControllerForTest(DISPLAY_ID_2).onRunningAppsChanged( @@ -691,7 +691,7 @@ public class VirtualDeviceManagerServiceTest { public void getDeviceIdsForUid_twoDevicesUidOnBoth_returnsCorrectId() { addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); VirtualDeviceImpl secondDevice = createVirtualDevice(VIRTUAL_DEVICE_ID_2, - DEVICE_OWNER_UID_2); + DEVICE_OWNER_UID_1); addVirtualDisplay(secondDevice, DISPLAY_ID_2); @@ -729,7 +729,7 @@ public class VirtualDeviceManagerServiceTest { @Test public void getPreferredLocaleListForApp_appOnMultipleVD_localeOnFirstVDReturned() { VirtualDeviceImpl secondDevice = createVirtualDevice(VIRTUAL_DEVICE_ID_2, - DEVICE_OWNER_UID_2); + DEVICE_OWNER_UID_1); Binder secondBinder = new Binder("secondBinder"); VirtualKeyboardConfig firstKeyboardConfig = new VirtualKeyboardConfig.Builder() @@ -767,7 +767,7 @@ public class VirtualDeviceManagerServiceTest { assertThat(mCameraAccessController.getObserverCount()).isEqualTo(1); VirtualDeviceImpl secondDevice = - createVirtualDevice(VIRTUAL_DEVICE_ID_2, DEVICE_OWNER_UID_2); + createVirtualDevice(VIRTUAL_DEVICE_ID_2, DEVICE_OWNER_UID_1); assertThat(mCameraAccessController.getObserverCount()).isEqualTo(2); mDeviceImpl.close(); @@ -1130,70 +1130,6 @@ public class VirtualDeviceManagerServiceTest { } @Test - public void createVirtualDpad_noPermission_failsSecurityException() { - addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, - () -> mDeviceImpl.createVirtualDpad(DPAD_CONFIG, BINDER))); - } - - @Test - public void createVirtualKeyboard_noPermission_failsSecurityException() { - addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, - () -> mDeviceImpl.createVirtualKeyboard(KEYBOARD_CONFIG, BINDER))); - } - - @Test - public void createVirtualMouse_noPermission_failsSecurityException() { - addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, - () -> mDeviceImpl.createVirtualMouse(MOUSE_CONFIG, BINDER))); - } - - @Test - public void createVirtualTouchscreen_noPermission_failsSecurityException() { - addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, - () -> mDeviceImpl.createVirtualTouchscreen(TOUCHSCREEN_CONFIG, BINDER))); - } - - @Test - public void createVirtualNavigationTouchpad_noPermission_failsSecurityException() { - addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, - () -> mDeviceImpl.createVirtualNavigationTouchpad( - NAVIGATION_TOUCHPAD_CONFIG, - BINDER))); - } - - @Test - public void onAudioSessionStarting_noPermission_failsSecurityException() { - addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1); - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, - () -> mDeviceImpl.onAudioSessionStarting( - DISPLAY_ID_1, mRoutingCallback, mConfigChangedCallback))); - } - - @Test - public void onAudioSessionEnded_noPermission_failsSecurityException() { - // Shell doesn't have CREATE_VIRTUAL_DEVICE permission. - SystemUtil.runWithShellPermissionIdentity(() -> - assertThrows(SecurityException.class, () -> mDeviceImpl.onAudioSessionEnded())); - } - - @Test public void createVirtualDpad_hasDisplay_obtainFileDescriptor() { addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1, Display.FLAG_TRUSTED); mDeviceImpl.createVirtualDpad(DPAD_CONFIG, BINDER); |