diff options
| author | 2010-10-27 22:18:43 -0700 | |
|---|---|---|
| committer | 2010-10-27 22:18:43 -0700 | |
| commit | 4c766ccea57ebc82ce08d66bc7c5e2ee871e88ea (patch) | |
| tree | 97d36737fb84cde659f27727f752cf18a18740b9 /libs/ui/InputDispatcher.cpp | |
| parent | 84915907cc535e0c3e29c6e13ec39f1f95facc6f (diff) | |
| parent | a3690d4fec21a6bcc0f3d6f1cabd84514568f7a3 (diff) | |
resolved conflicts for merge of df3cccf3 to master
Change-Id: I425496a9fc4e9cbc50ad6938e9dccb14827d9558
Diffstat (limited to 'libs/ui/InputDispatcher.cpp')
| -rw-r--r-- | libs/ui/InputDispatcher.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/libs/ui/InputDispatcher.cpp b/libs/ui/InputDispatcher.cpp index 4c86ebe0f5..b936c4d470 100644 --- a/libs/ui/InputDispatcher.cpp +++ b/libs/ui/InputDispatcher.cpp @@ -1305,6 +1305,9 @@ Failed: } Unresponsive: + // Reset temporary touch state to ensure we release unnecessary references to input channels. + mTempTouchState.reset(); + nsecs_t timeSpentWaitingForApplication = getTimeSpentWaitingForApplicationLocked(currentTime); updateDispatchStatisticsLocked(currentTime, entry, injectionResult, timeSpentWaitingForApplication); @@ -2589,10 +2592,14 @@ void InputDispatcher::setInputDispatchMode(bool enabled, bool frozen) { AutoMutex _l(mLock); if (mDispatchEnabled != enabled || mDispatchFrozen != frozen) { - if (mDispatchFrozen && ! frozen) { + if (mDispatchFrozen && !frozen) { resetANRTimeoutsLocked(); } + if (mDispatchEnabled && !enabled) { + resetAndDropEverythingLocked("dispatcher is being disabled"); + } + mDispatchEnabled = enabled; mDispatchFrozen = frozen; changed = true; @@ -2687,6 +2694,21 @@ bool InputDispatcher::transferTouchFocus(const sp<InputChannel>& fromChannel, return true; } +void InputDispatcher::resetAndDropEverythingLocked(const char* reason) { +#if DEBUG_FOCUS + LOGD("Resetting and dropping all events (%s).", reason); +#endif + + synthesizeCancelationEventsForAllConnectionsLocked(InputState::CANCEL_ALL_EVENTS, reason); + + resetKeyRepeatLocked(); + releasePendingEventLocked(); + drainInboundQueueLocked(); + resetTargetsLocked(); + + mTouchState.reset(); +} + void InputDispatcher::logDispatchStateLocked() { String8 dump; dumpDispatchStateLocked(dump); |