Dispatch cancel event to the correct target display
When screen recording is enabled, a virtual screen will be generated,
and the cancel event will be incorrectly sent to the virtual screen.
The coordinates of the cancel event are the wrong logical coordinates
after being transformed by the transform of the windows of the virtual
screen.
Bug: 301020008
Test: atest inputflinger_tests
Change-Id: Icf1301e5174ac61eeedda326545f2b68ef7b8af0
Merged-In: Icf1301e5174ac61eeedda326545f2b68ef7b8af0
diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp
index 5c524d3..66052e4 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.cpp
+++ b/services/inputflinger/dispatcher/InputDispatcher.cpp
@@ -3924,8 +3924,13 @@
<< connection->getInputChannelName().c_str() << reason << LOG_ID_EVENTS;
InputTarget target;
- sp<WindowInfoHandle> windowHandle =
- getWindowHandleLocked(connection->inputChannel->getConnectionToken());
+ sp<WindowInfoHandle> windowHandle;
+ if (options.displayId) {
+ windowHandle = getWindowHandleLocked(connection->inputChannel->getConnectionToken(),
+ options.displayId.value());
+ } else {
+ windowHandle = getWindowHandleLocked(connection->inputChannel->getConnectionToken());
+ }
if (windowHandle != nullptr) {
const WindowInfo* windowInfo = windowHandle->getInfo();
target.setDefaultPointerTransform(windowInfo->transform);