summaryrefslogtreecommitdiffstats
path: root/services/inputflinger
diff options
context:
space:
mode:
authorMichael Wright <michaelwr@google.com>2015-06-12 13:25:11 +0100
committerMichael Wright <michaelwr@google.com>2015-06-12 13:25:11 +0100
commitfa13dcf39f09534ab8e95aec6f15a61a7f500b4c (patch)
tree346297a1c9594ecea11a6171b68766e291f4c90e /services/inputflinger
parent3a9817228928a8db68c34afe547c9ba18169af5b (diff)
downloadframeworks_native-fa13dcf39f09534ab8e95aec6f15a61a7f500b4c.zip
frameworks_native-fa13dcf39f09534ab8e95aec6f15a61a7f500b4c.tar.gz
frameworks_native-fa13dcf39f09534ab8e95aec6f15a61a7f500b4c.tar.bz2
Send cancelation events to monitors when injection fails.
Bug: 20649729 Change-Id: I46cd14ac1f040d404c0b1581b38fa07a944e5fb9
Diffstat (limited to 'services/inputflinger')
-rw-r--r--services/inputflinger/InputDispatcher.cpp16
-rw-r--r--services/inputflinger/InputDispatcher.h1
2 files changed, 16 insertions, 1 deletions
diff --git a/services/inputflinger/InputDispatcher.cpp b/services/inputflinger/InputDispatcher.cpp
index ffaa7e7..0fba1bf 100644
--- a/services/inputflinger/InputDispatcher.cpp
+++ b/services/inputflinger/InputDispatcher.cpp
@@ -859,6 +859,13 @@ bool InputDispatcher::dispatchMotionLocked(
setInjectionResultLocked(entry, injectionResult);
if (injectionResult != INPUT_EVENT_INJECTION_SUCCEEDED) {
+ if (injectionResult != INPUT_EVENT_INJECTION_PERMISSION_DENIED) {
+ CancelationOptions::Mode mode(isPointerEvent ?
+ CancelationOptions::CANCEL_POINTER_EVENTS :
+ CancelationOptions::CANCEL_NON_POINTER_EVENTS);
+ CancelationOptions options(mode, "input event injection failed");
+ synthesizeCancelationEventsForMonitorsLocked(options);
+ }
return true;
}
@@ -886,7 +893,7 @@ void InputDispatcher::logOutboundMotionDetailsLocked(const char* prefix, const M
"edgeFlags=0x%x, xPrecision=%f, yPrecision=%f, downTime=%lld",
prefix,
entry->eventTime, entry->deviceId, entry->source, entry->policyFlags,
- entry->action, entry->actionButton entry->flags,
+ entry->action, entry->actionButton, entry->flags,
entry->metaState, entry->buttonState,
entry->edgeFlags, entry->xPrecision, entry->yPrecision,
entry->downTime);
@@ -2167,6 +2174,13 @@ void InputDispatcher::synthesizeCancelationEventsForAllConnectionsLocked(
}
}
+void InputDispatcher::synthesizeCancelationEventsForMonitorsLocked(
+ const CancelationOptions& options) {
+ for (size_t i = 0; i < mMonitoringChannels.size(); i++) {
+ synthesizeCancelationEventsForInputChannelLocked(mMonitoringChannels[i], options);
+ }
+}
+
void InputDispatcher::synthesizeCancelationEventsForInputChannelLocked(
const sp<InputChannel>& channel, const CancelationOptions& options) {
ssize_t index = getConnectionIndexLocked(channel);
diff --git a/services/inputflinger/InputDispatcher.h b/services/inputflinger/InputDispatcher.h
index 80eed56..98355c6 100644
--- a/services/inputflinger/InputDispatcher.h
+++ b/services/inputflinger/InputDispatcher.h
@@ -1076,6 +1076,7 @@ private:
void synthesizeCancelationEventsForAllConnectionsLocked(
const CancelationOptions& options);
+ void synthesizeCancelationEventsForMonitorsLocked(const CancelationOptions& options);
void synthesizeCancelationEventsForInputChannelLocked(const sp<InputChannel>& channel,
const CancelationOptions& options);
void synthesizeCancelationEventsForConnectionLocked(const sp<Connection>& connection,