diff options
| author | 2011-11-15 13:52:47 -0800 | |
|---|---|---|
| committer | 2011-11-15 13:52:47 -0800 | |
| commit | 78137d77991f129b349b258474ef8b5133b300d9 (patch) | |
| tree | 440a35c0a1d0756a10b2288bb45962446791c8d1 | |
| parent | 43d9e2485355bc8fb68addd65a8817504f659d06 (diff) | |
| parent | fbca596721ea19daa2972639095898ce62100490 (diff) | |
Merge "Modify getState to prefer AKEY_STATE_DOWN and AKEY_STATE_UP over AKEY_STATE_UNKNOWN."
| -rw-r--r-- | services/input/InputReader.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp index 88c19a417f8a..9a73527db9d3 100644 --- a/services/input/InputReader.cpp +++ b/services/input/InputReader.cpp @@ -644,9 +644,13 @@ int32_t InputReader::getStateLocked(int32_t deviceId, uint32_t sourceMask, int32 for (size_t i = 0; i < numDevices; i++) { InputDevice* device = mDevices.valueAt(i); if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) { - result = (device->*getStateFunc)(sourceMask, code); - if (result >= AKEY_STATE_DOWN) { - return result; + // If any device reports AKEY_STATE_DOWN or AKEY_STATE_VIRTUAL, return that + // value. Otherwise, return AKEY_STATE_UP as long as one device reports it. + int32_t currentResult = (device->*getStateFunc)(sourceMask, code); + if (currentResult >= AKEY_STATE_DOWN) { + return currentResult; + } else if (currentResult == AKEY_STATE_UP) { + result = currentResult; } } } @@ -1000,9 +1004,13 @@ int32_t InputDevice::getState(uint32_t sourceMask, int32_t code, GetStateFunc ge for (size_t i = 0; i < numMappers; i++) { InputMapper* mapper = mMappers[i]; if (sourcesMatchMask(mapper->getSources(), sourceMask)) { - result = (mapper->*getStateFunc)(sourceMask, code); - if (result >= AKEY_STATE_DOWN) { - return result; + // If any mapper reports AKEY_STATE_DOWN or AKEY_STATE_VIRTUAL, return that + // value. Otherwise, return AKEY_STATE_UP as long as one mapper reports it. + int32_t currentResult = (mapper->*getStateFunc)(sourceMask, code); + if (currentResult >= AKEY_STATE_DOWN) { + return currentResult; + } else if (currentResult == AKEY_STATE_UP) { + result = currentResult; } } } |