Skip to content

Commit

Permalink
Add support for ShadowVirtualDeviceManager for Android V.
Browse files Browse the repository at this point in the history
VirtualDeviceManager needs an associatedDisplayId and InputDeviceName
and a new function getPersistentDeviceId. The persistentDeviceId
is simply "companion:" + the association id.

PiperOrigin-RevId: 632199613
  • Loading branch information
JuliaSullivanGoogle authored and Copybara-Service committed May 9, 2024
1 parent 281bd52 commit 6cabe9d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 6 deletions.
Expand Up @@ -206,7 +206,11 @@ public void testCreateVirtualMouse() {
new VirtualMouseRelativeEvent.Builder().setRelativeX(0.1f).setRelativeY(0.1f).build();

VirtualMouse virtualMouse =
virtualDevice.createVirtualMouse(new VirtualMouseConfig.Builder().build());
virtualDevice.createVirtualMouse(
new VirtualMouseConfig.Builder()
.setAssociatedDisplayId(0)
.setInputDeviceName("mouse")
.build());
virtualMouse.sendButtonEvent(buttonDownEvent);
virtualMouse.sendButtonEvent(buttonUpEvent);
virtualMouse.sendScrollEvent(scrollEvent);
Expand Down Expand Up @@ -236,7 +240,10 @@ public void testCreateVirtualTouchscreen() {

VirtualTouchscreen virtualTouchscreen =
virtualDevice.createVirtualTouchscreen(
new VirtualTouchscreenConfig.Builder(DISPLAY_WIDTH, DISPLAY_HEIGHT).build());
new VirtualTouchscreenConfig.Builder(DISPLAY_WIDTH, DISPLAY_HEIGHT)
.setAssociatedDisplayId(0)
.setInputDeviceName("touchscreen")
.build());
virtualTouchscreen.sendTouchEvent(virtualTouchEvent);

assertThat(virtualTouchscreen).isNotNull();
Expand All @@ -258,7 +265,11 @@ public void testCreateVirtualKeyboard() {
.build();

VirtualKeyboard virtualKeyboard =
virtualDevice.createVirtualKeyboard(new VirtualKeyboardConfig.Builder().build());
virtualDevice.createVirtualKeyboard(
new VirtualKeyboardConfig.Builder()
.setAssociatedDisplayId(0)
.setInputDeviceName("keyboard")
.build());
virtualKeyboard.sendKeyEvent(keyEvent1);
virtualKeyboard.sendKeyEvent(keyEvent2);

Expand All @@ -273,12 +284,23 @@ public void testCloseVirtualInputDevices() {
virtualDeviceManager.createVirtualDevice(
0, new VirtualDeviceParams.Builder().setName("foo").build());
VirtualKeyboard virtualKeyboard =
virtualDevice.createVirtualKeyboard(new VirtualKeyboardConfig.Builder().build());
virtualDevice.createVirtualKeyboard(
new VirtualKeyboardConfig.Builder()
.setAssociatedDisplayId(0)
.setInputDeviceName("keyboard")
.build());
VirtualTouchscreen virtualTouchscreen =
virtualDevice.createVirtualTouchscreen(
new VirtualTouchscreenConfig.Builder(DISPLAY_WIDTH, DISPLAY_HEIGHT).build());
new VirtualTouchscreenConfig.Builder(DISPLAY_WIDTH, DISPLAY_HEIGHT)
.setAssociatedDisplayId(1)
.setInputDeviceName("touchscreen")
.build());
VirtualMouse virtualMouse =
virtualDevice.createVirtualMouse(new VirtualMouseConfig.Builder().build());
virtualDevice.createVirtualMouse(
new VirtualMouseConfig.Builder()
.setAssociatedDisplayId(2)
.setInputDeviceName("mouse")
.build());

virtualKeyboard.close();
virtualTouchscreen.close();
Expand Down
Expand Up @@ -4,6 +4,7 @@
import static org.robolectric.util.reflector.Reflector.reflector;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.PendingIntent;
import android.companion.virtual.IVirtualDevice;
import android.companion.virtual.IVirtualDeviceManager;
Expand Down Expand Up @@ -42,6 +43,7 @@
import org.robolectric.util.reflector.Constructor;
import org.robolectric.util.reflector.ForType;
import org.robolectric.versioning.AndroidVersions.U;
import org.robolectric.versioning.AndroidVersions.V;

/** Shadow for VirtualDeviceManager. */
@Implements(
Expand Down Expand Up @@ -134,6 +136,7 @@ public static class ShadowVirtualDevice {
@RealObject VirtualDeviceManager.VirtualDevice realVirtualDevice;
private VirtualDeviceParams params;
private int deviceId;
private String persistentDeviceId;
private PendingIntent pendingIntent;
private Integer pendingIntentResultCode = LAUNCH_SUCCESS;
private final AtomicBoolean isClosed = new AtomicBoolean(false);
Expand All @@ -153,13 +156,20 @@ protected void __constructor__(
ClassParameter.from(VirtualDeviceParams.class, params));
this.params = params;
this.deviceId = nextDeviceId.getAndIncrement();
this.persistentDeviceId = "companion:" + associationId;
}

@Implementation
protected int getDeviceId() {
return deviceId;
}

@Implementation(minSdk = V.SDK_INT)
@Nullable
protected String getPersistentDeviceId() {
return persistentDeviceId;
}

/** Prevents a NPE when calling .close() on a VirtualDevice in unit tests. */
@Implementation
protected void close() {
Expand Down

0 comments on commit 6cabe9d

Please sign in to comment.