Send cancelation events to monitors when injection fails.
Bug: 20649729 Change-Id: I46cd14ac1f040d404c0b1581b38fa07a944e5fb9
This commit is contained in:
parent
3a98172289
commit
fa13dcf39f
@ -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);
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user