summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Komsiyski <vladokom@google.com> 2024-10-11 07:58:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-10-11 07:58:38 +0000
commitb16fb2340e4f1c8ba7ea133a2d122cb6fd54d806 (patch)
treeca87de8791f4b35a55c32ca2b43b6f26b79ab4c7
parent67bdbd80a974fde73fc6040a7bb1f77c331e15d0 (diff)
parentb1bdd1c7ebe976cca8150ddf62701842f2595b85 (diff)
Merge "Remove redundant CREATE_VIRTUAL_DEVICE permission enforcement" into main
-rw-r--r--core/api/system-current.txt98
-rw-r--r--core/java/android/companion/virtual/IVirtualDevice.aidl40
-rw-r--r--core/java/android/companion/virtual/VirtualDeviceInternal.java24
-rw-r--r--core/java/android/companion/virtual/VirtualDeviceManager.java29
-rw-r--r--core/java/android/companion/virtual/camera/VirtualCamera.java2
-rw-r--r--core/java/android/companion/virtual/sensor/VirtualSensor.java2
-rw-r--r--core/java/android/hardware/input/VirtualDpad.java2
-rw-r--r--core/java/android/hardware/input/VirtualInputDevice.java2
-rw-r--r--core/java/android/hardware/input/VirtualKeyboard.java6
-rw-r--r--core/java/android/hardware/input/VirtualMouse.java9
-rw-r--r--core/java/android/hardware/input/VirtualNavigationTouchpad.java2
-rw-r--r--core/java/android/hardware/input/VirtualRotaryEncoder.java2
-rw-r--r--core/java/android/hardware/input/VirtualStylus.java7
-rw-r--r--core/java/android/hardware/input/VirtualTouchscreen.java6
-rw-r--r--services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java135
-rw-r--r--services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java76
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);