diff options
author | 2024-02-13 11:47:54 +0100 | |
---|---|---|
committer | 2024-06-25 15:45:56 +0000 | |
commit | dd438e2a4b541fbe88b85346b450a1106b799109 (patch) | |
tree | 04d120bd2374932baec1ea35d3f5613636796fbe /libs/input/VirtualInputDevice.cpp | |
parent | 8faf3d40232f7cef05bf588a2f5b175f687232c7 (diff) |
Virtual rotary encoder native support
- detect rotary encoder input devices if they have a single scroll
axis and nothing else
- make the rotary mapper display-aware as the virtual rotary is
constrained to a single virtual display, just like the other
virtual input devices
Fix: 320328752
Test: atest inputflinger_tests
Test: see CTS in topic
Flag: android.companion.virtualdevice.flags.virtual_rotary
Change-Id: I5581013d06708cbcc2c3ac8a622cd259aea8a9b4
Diffstat (limited to 'libs/input/VirtualInputDevice.cpp')
-rw-r--r-- | libs/input/VirtualInputDevice.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libs/input/VirtualInputDevice.cpp b/libs/input/VirtualInputDevice.cpp index eea06f1720..b73ee65504 100644 --- a/libs/input/VirtualInputDevice.cpp +++ b/libs/input/VirtualInputDevice.cpp @@ -509,4 +509,15 @@ bool VirtualStylus::handleStylusUp(uint16_t tool, std::chrono::nanoseconds event return true; } +// --- VirtualRotaryEncoder --- +VirtualRotaryEncoder::VirtualRotaryEncoder(unique_fd fd) : VirtualInputDevice(std::move(fd)) {} + +VirtualRotaryEncoder::~VirtualRotaryEncoder() {} + +bool VirtualRotaryEncoder::writeScrollEvent(float scrollAmount, + std::chrono::nanoseconds eventTime) { + return writeInputEvent(EV_REL, REL_WHEEL, static_cast<int32_t>(scrollAmount), eventTime) && + writeInputEvent(EV_SYN, SYN_REPORT, 0, eventTime); +} + } // namespace android |