diff options
| author | 2023-04-20 14:28:17 +0000 | |
|---|---|---|
| committer | 2023-04-20 14:28:17 +0000 | |
| commit | 31fcf6490b96af1a39dabd7186eae565efd49b33 (patch) | |
| tree | ad0ca4160150bd4d7b663cef84fc5d37ae697a11 | |
| parent | 5fb1e0aa9789bb30ca4f8a1d2b4721e983cccb80 (diff) | |
| parent | 83bcfb4ef16947f1e9c8a07a97470793ae3477af (diff) | |
Merge "Pass virtual input event timestamps to JNI layer" into udc-dev
3 files changed, 84 insertions, 52 deletions
diff --git a/services/companion/java/com/android/server/companion/virtual/InputController.java b/services/companion/java/com/android/server/companion/virtual/InputController.java index 1a0588e999e2..307f7bfc1fd5 100644 --- a/services/companion/java/com/android/server/companion/virtual/InputController.java +++ b/services/companion/java/com/android/server/companion/virtual/InputController.java @@ -367,7 +367,7 @@ class InputController { "Could not send key event to input device for given token"); } return mNativeWrapper.writeDpadKeyEvent(inputDeviceDescriptor.getNativePointer(), - event.getKeyCode(), event.getAction()); + event.getKeyCode(), event.getAction(), event.getEventTimeNanos()); } } @@ -380,7 +380,7 @@ class InputController { "Could not send key event to input device for given token"); } return mNativeWrapper.writeKeyEvent(inputDeviceDescriptor.getNativePointer(), - event.getKeyCode(), event.getAction()); + event.getKeyCode(), event.getAction(), event.getEventTimeNanos()); } } @@ -398,7 +398,7 @@ class InputController { "Display id associated with this mouse is not currently targetable"); } return mNativeWrapper.writeButtonEvent(inputDeviceDescriptor.getNativePointer(), - event.getButtonCode(), event.getAction()); + event.getButtonCode(), event.getAction(), event.getEventTimeNanos()); } } @@ -412,7 +412,8 @@ class InputController { } return mNativeWrapper.writeTouchEvent(inputDeviceDescriptor.getNativePointer(), event.getPointerId(), event.getToolType(), event.getAction(), event.getX(), - event.getY(), event.getPressure(), event.getMajorAxisSize()); + event.getY(), event.getPressure(), event.getMajorAxisSize(), + event.getEventTimeNanos()); } } @@ -430,7 +431,7 @@ class InputController { "Display id associated with this mouse is not currently targetable"); } return mNativeWrapper.writeRelativeEvent(inputDeviceDescriptor.getNativePointer(), - event.getRelativeX(), event.getRelativeY()); + event.getRelativeX(), event.getRelativeY(), event.getEventTimeNanos()); } } @@ -448,7 +449,7 @@ class InputController { "Display id associated with this mouse is not currently targetable"); } return mNativeWrapper.writeScrollEvent(inputDeviceDescriptor.getNativePointer(), - event.getXAxisMovement(), event.getYAxisMovement()); + event.getXAxisMovement(), event.getYAxisMovement(), event.getEventTimeNanos()); } } @@ -514,15 +515,19 @@ class InputController { private static native long nativeOpenUinputTouchscreen(String deviceName, int vendorId, int productId, String phys, int height, int width); private static native void nativeCloseUinput(long ptr); - private static native boolean nativeWriteDpadKeyEvent(long ptr, int androidKeyCode, int action); - private static native boolean nativeWriteKeyEvent(long ptr, int androidKeyCode, int action); - private static native boolean nativeWriteButtonEvent(long ptr, int buttonCode, int action); + private static native boolean nativeWriteDpadKeyEvent(long ptr, int androidKeyCode, int action, + long eventTimeNanos); + private static native boolean nativeWriteKeyEvent(long ptr, int androidKeyCode, int action, + long eventTimeNanos); + private static native boolean nativeWriteButtonEvent(long ptr, int buttonCode, int action, + long eventTimeNanos); private static native boolean nativeWriteTouchEvent(long ptr, int pointerId, int toolType, - int action, float locationX, float locationY, float pressure, float majorAxisSize); + int action, float locationX, float locationY, float pressure, float majorAxisSize, + long eventTimeNanos); private static native boolean nativeWriteRelativeEvent(long ptr, float relativeX, - float relativeY); + float relativeY, long eventTimeNanos); private static native boolean nativeWriteScrollEvent(long ptr, float xAxisMovement, - float yAxisMovement); + float yAxisMovement, long eventTimeNanos); /** Wrapper around the static native methods for tests. */ @VisibleForTesting @@ -550,32 +555,37 @@ class InputController { nativeCloseUinput(ptr); } - public boolean writeDpadKeyEvent(long ptr, int androidKeyCode, int action) { - return nativeWriteDpadKeyEvent(ptr, androidKeyCode, action); + public boolean writeDpadKeyEvent(long ptr, int androidKeyCode, int action, + long eventTimeNanos) { + return nativeWriteDpadKeyEvent(ptr, androidKeyCode, action, eventTimeNanos); } - public boolean writeKeyEvent(long ptr, int androidKeyCode, int action) { - return nativeWriteKeyEvent(ptr, androidKeyCode, action); + public boolean writeKeyEvent(long ptr, int androidKeyCode, int action, + long eventTimeNanos) { + return nativeWriteKeyEvent(ptr, androidKeyCode, action, eventTimeNanos); } - public boolean writeButtonEvent(long ptr, int buttonCode, int action) { - return nativeWriteButtonEvent(ptr, buttonCode, action); + public boolean writeButtonEvent(long ptr, int buttonCode, int action, + long eventTimeNanos) { + return nativeWriteButtonEvent(ptr, buttonCode, action, eventTimeNanos); } public boolean writeTouchEvent(long ptr, int pointerId, int toolType, int action, - float locationX, float locationY, float pressure, float majorAxisSize) { + float locationX, float locationY, float pressure, float majorAxisSize, + long eventTimeNanos) { return nativeWriteTouchEvent(ptr, pointerId, toolType, action, locationX, locationY, - pressure, majorAxisSize); + pressure, majorAxisSize, eventTimeNanos); } - public boolean writeRelativeEvent(long ptr, float relativeX, float relativeY) { - return nativeWriteRelativeEvent(ptr, relativeX, relativeY); + public boolean writeRelativeEvent(long ptr, float relativeX, float relativeY, + long eventTimeNanos) { + return nativeWriteRelativeEvent(ptr, relativeX, relativeY, eventTimeNanos); } - public boolean writeScrollEvent(long ptr, float xAxisMovement, float yAxisMovement) { - return nativeWriteScrollEvent(ptr, xAxisMovement, - yAxisMovement); + public boolean writeScrollEvent(long ptr, float xAxisMovement, float yAxisMovement, + long eventTimeNanos) { + return nativeWriteScrollEvent(ptr, xAxisMovement, yAxisMovement, eventTimeNanos); } } diff --git a/services/core/jni/com_android_server_companion_virtual_InputController.cpp b/services/core/jni/com_android_server_companion_virtual_InputController.cpp index 4898d95b8e4b..ad098b757eae 100644 --- a/services/core/jni/com_android_server_companion_virtual_InputController.cpp +++ b/services/core/jni/com_android_server_companion_virtual_InputController.cpp @@ -233,44 +233,50 @@ static void nativeCloseUinput(JNIEnv* env, jobject thiz, jlong ptr) { // Native methods for VirtualDpad static bool nativeWriteDpadKeyEvent(JNIEnv* env, jobject thiz, jlong ptr, jint androidKeyCode, - jint action) { + jint action, jlong eventTimeNanos) { VirtualDpad* virtualDpad = reinterpret_cast<VirtualDpad*>(ptr); - return virtualDpad->writeDpadKeyEvent(androidKeyCode, action); + return virtualDpad->writeDpadKeyEvent(androidKeyCode, action, + std::chrono::nanoseconds(eventTimeNanos)); } // Native methods for VirtualKeyboard static bool nativeWriteKeyEvent(JNIEnv* env, jobject thiz, jlong ptr, jint androidKeyCode, - jint action) { + jint action, jlong eventTimeNanos) { VirtualKeyboard* virtualKeyboard = reinterpret_cast<VirtualKeyboard*>(ptr); - return virtualKeyboard->writeKeyEvent(androidKeyCode, action); + return virtualKeyboard->writeKeyEvent(androidKeyCode, action, + std::chrono::nanoseconds(eventTimeNanos)); } // Native methods for VirtualTouchscreen static bool nativeWriteTouchEvent(JNIEnv* env, jobject thiz, jlong ptr, jint pointerId, jint toolType, jint action, jfloat locationX, jfloat locationY, - jfloat pressure, jfloat majorAxisSize) { + jfloat pressure, jfloat majorAxisSize, jlong eventTimeNanos) { VirtualTouchscreen* virtualTouchscreen = reinterpret_cast<VirtualTouchscreen*>(ptr); return virtualTouchscreen->writeTouchEvent(pointerId, toolType, action, locationX, locationY, - pressure, majorAxisSize); + pressure, majorAxisSize, + std::chrono::nanoseconds(eventTimeNanos)); } // Native methods for VirtualMouse static bool nativeWriteButtonEvent(JNIEnv* env, jobject thiz, jlong ptr, jint buttonCode, - jint action) { + jint action, jlong eventTimeNanos) { VirtualMouse* virtualMouse = reinterpret_cast<VirtualMouse*>(ptr); - return virtualMouse->writeButtonEvent(buttonCode, action); + return virtualMouse->writeButtonEvent(buttonCode, action, + std::chrono::nanoseconds(eventTimeNanos)); } static bool nativeWriteRelativeEvent(JNIEnv* env, jobject thiz, jlong ptr, jfloat relativeX, - jfloat relativeY) { + jfloat relativeY, jlong eventTimeNanos) { VirtualMouse* virtualMouse = reinterpret_cast<VirtualMouse*>(ptr); - return virtualMouse->writeRelativeEvent(relativeX, relativeY); + return virtualMouse->writeRelativeEvent(relativeX, relativeY, + std::chrono::nanoseconds(eventTimeNanos)); } static bool nativeWriteScrollEvent(JNIEnv* env, jobject thiz, jlong ptr, jfloat xAxisMovement, - jfloat yAxisMovement) { + jfloat yAxisMovement, jlong eventTimeNanos) { VirtualMouse* virtualMouse = reinterpret_cast<VirtualMouse*>(ptr); - return virtualMouse->writeScrollEvent(xAxisMovement, yAxisMovement); + return virtualMouse->writeScrollEvent(xAxisMovement, yAxisMovement, + std::chrono::nanoseconds(eventTimeNanos)); } static JNINativeMethod methods[] = { @@ -283,12 +289,12 @@ static JNINativeMethod methods[] = { {"nativeOpenUinputTouchscreen", "(Ljava/lang/String;IILjava/lang/String;II)J", (void*)nativeOpenUinputTouchscreen}, {"nativeCloseUinput", "(J)V", (void*)nativeCloseUinput}, - {"nativeWriteDpadKeyEvent", "(JII)Z", (void*)nativeWriteDpadKeyEvent}, - {"nativeWriteKeyEvent", "(JII)Z", (void*)nativeWriteKeyEvent}, - {"nativeWriteButtonEvent", "(JII)Z", (void*)nativeWriteButtonEvent}, - {"nativeWriteTouchEvent", "(JIIIFFFF)Z", (void*)nativeWriteTouchEvent}, - {"nativeWriteRelativeEvent", "(JFF)Z", (void*)nativeWriteRelativeEvent}, - {"nativeWriteScrollEvent", "(JFF)Z", (void*)nativeWriteScrollEvent}, + {"nativeWriteDpadKeyEvent", "(JIIJ)Z", (void*)nativeWriteDpadKeyEvent}, + {"nativeWriteKeyEvent", "(JIIJ)Z", (void*)nativeWriteKeyEvent}, + {"nativeWriteButtonEvent", "(JIIJ)Z", (void*)nativeWriteButtonEvent}, + {"nativeWriteTouchEvent", "(JIIIFFFFJ)Z", (void*)nativeWriteTouchEvent}, + {"nativeWriteRelativeEvent", "(JFFJ)Z", (void*)nativeWriteRelativeEvent}, + {"nativeWriteScrollEvent", "(JFFJ)Z", (void*)nativeWriteScrollEvent}, }; int register_android_server_companion_virtual_InputController(JNIEnv* env) { 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 a4a3e363ab4d..c8c1d6f0f7ed 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 @@ -1160,6 +1160,7 @@ public class VirtualDeviceManagerServiceTest { final int fd = 1; final int keyCode = KeyEvent.KEYCODE_A; final int action = VirtualKeyEvent.ACTION_UP; + final long eventTimeNanos = 5000L; mInputController.addDeviceForTesting(BINDER, fd, InputController.InputDeviceDescriptor.TYPE_KEYBOARD, DISPLAY_ID_1, PHYS, DEVICE_NAME_1, INPUT_DEVICE_ID); @@ -1167,8 +1168,9 @@ public class VirtualDeviceManagerServiceTest { mDeviceImpl.sendKeyEvent(BINDER, new VirtualKeyEvent.Builder() .setKeyCode(keyCode) .setAction(action) + .setEventTimeNanos(eventTimeNanos) .build()); - verify(mNativeWrapperMock).writeKeyEvent(fd, keyCode, action); + verify(mNativeWrapperMock).writeKeyEvent(fd, keyCode, action, eventTimeNanos); } @Test @@ -1188,14 +1190,17 @@ public class VirtualDeviceManagerServiceTest { final int fd = 1; final int buttonCode = VirtualMouseButtonEvent.BUTTON_BACK; final int action = VirtualMouseButtonEvent.ACTION_BUTTON_PRESS; + final long eventTimeNanos = 5000L; mInputController.addDeviceForTesting(BINDER, fd, InputController.InputDeviceDescriptor.TYPE_MOUSE, DISPLAY_ID_1, PHYS, DEVICE_NAME_1, INPUT_DEVICE_ID); doReturn(DISPLAY_ID_1).when(mInputManagerInternalMock).getVirtualMousePointerDisplayId(); mDeviceImpl.sendButtonEvent(BINDER, new VirtualMouseButtonEvent.Builder() .setButtonCode(buttonCode) - .setAction(action).build()); - verify(mNativeWrapperMock).writeButtonEvent(fd, buttonCode, action); + .setAction(action) + .setEventTimeNanos(eventTimeNanos) + .build()); + verify(mNativeWrapperMock).writeButtonEvent(fd, buttonCode, action, eventTimeNanos); } @Test @@ -1229,13 +1234,17 @@ public class VirtualDeviceManagerServiceTest { final int fd = 1; final float x = -0.2f; final float y = 0.7f; + final long eventTimeNanos = 5000L; mInputController.addDeviceForTesting(BINDER, fd, InputController.InputDeviceDescriptor.TYPE_MOUSE, DISPLAY_ID_1, PHYS, DEVICE_NAME_1, INPUT_DEVICE_ID); doReturn(DISPLAY_ID_1).when(mInputManagerInternalMock).getVirtualMousePointerDisplayId(); mDeviceImpl.sendRelativeEvent(BINDER, new VirtualMouseRelativeEvent.Builder() - .setRelativeX(x).setRelativeY(y).build()); - verify(mNativeWrapperMock).writeRelativeEvent(fd, x, y); + .setRelativeX(x) + .setRelativeY(y) + .setEventTimeNanos(eventTimeNanos) + .build()); + verify(mNativeWrapperMock).writeRelativeEvent(fd, x, y, eventTimeNanos); } @Test @@ -1270,14 +1279,17 @@ public class VirtualDeviceManagerServiceTest { final int fd = 1; final float x = 0.5f; final float y = 1f; + final long eventTimeNanos = 5000L; mInputController.addDeviceForTesting(BINDER, fd, InputController.InputDeviceDescriptor.TYPE_MOUSE, DISPLAY_ID_1, PHYS, DEVICE_NAME_1, INPUT_DEVICE_ID); doReturn(DISPLAY_ID_1).when(mInputManagerInternalMock).getVirtualMousePointerDisplayId(); mDeviceImpl.sendScrollEvent(BINDER, new VirtualMouseScrollEvent.Builder() .setXAxisMovement(x) - .setYAxisMovement(y).build()); - verify(mNativeWrapperMock).writeScrollEvent(fd, x, y); + .setYAxisMovement(y) + .setEventTimeNanos(eventTimeNanos) + .build()); + verify(mNativeWrapperMock).writeScrollEvent(fd, x, y, eventTimeNanos); } @Test @@ -1318,6 +1330,7 @@ public class VirtualDeviceManagerServiceTest { final float x = 100.5f; final float y = 200.5f; final int action = VirtualTouchEvent.ACTION_UP; + final long eventTimeNanos = 5000L; mInputController.addDeviceForTesting(BINDER, fd, InputController.InputDeviceDescriptor.TYPE_TOUCHSCREEN, DISPLAY_ID_1, PHYS, DEVICE_NAME_1, INPUT_DEVICE_ID); @@ -1327,9 +1340,10 @@ public class VirtualDeviceManagerServiceTest { .setAction(action) .setPointerId(pointerId) .setToolType(toolType) + .setEventTimeNanos(eventTimeNanos) .build()); verify(mNativeWrapperMock).writeTouchEvent(fd, pointerId, toolType, action, x, y, Float.NaN, - Float.NaN); + Float.NaN, eventTimeNanos); } @Test @@ -1342,6 +1356,7 @@ public class VirtualDeviceManagerServiceTest { final int action = VirtualTouchEvent.ACTION_UP; final float pressure = 1.0f; final float majorAxisSize = 10.0f; + final long eventTimeNanos = 5000L; mInputController.addDeviceForTesting(BINDER, fd, InputController.InputDeviceDescriptor.TYPE_TOUCHSCREEN, DISPLAY_ID_1, PHYS, DEVICE_NAME_1, INPUT_DEVICE_ID); @@ -1353,9 +1368,10 @@ public class VirtualDeviceManagerServiceTest { .setToolType(toolType) .setPressure(pressure) .setMajorAxisSize(majorAxisSize) + .setEventTimeNanos(eventTimeNanos) .build()); verify(mNativeWrapperMock).writeTouchEvent(fd, pointerId, toolType, action, x, y, pressure, - majorAxisSize); + majorAxisSize, eventTimeNanos); } @Test |