diff options
-rw-r--r-- | include/input/KeyLayoutMap.h | 1 | ||||
-rw-r--r-- | libs/input/KeyLayoutMap.cpp | 10 | ||||
-rw-r--r-- | services/inputflinger/reader/EventHub.cpp | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/include/input/KeyLayoutMap.h b/include/input/KeyLayoutMap.h index e203d190a6..8c3c74af20 100644 --- a/include/input/KeyLayoutMap.h +++ b/include/input/KeyLayoutMap.h @@ -72,6 +72,7 @@ public: int32_t* outKeyCode, uint32_t* outFlags) const; std::vector<int32_t> findScanCodesForKey(int32_t keyCode) const; std::optional<int32_t> findScanCodeForLed(int32_t ledCode) const; + std::vector<int32_t> findUsageCodesForKey(int32_t keyCode) const; std::optional<int32_t> findUsageCodeForLed(int32_t ledCode) const; std::optional<AxisInfo> mapAxis(int32_t scanCode) const; diff --git a/libs/input/KeyLayoutMap.cpp b/libs/input/KeyLayoutMap.cpp index a2649f6f11..a194513953 100644 --- a/libs/input/KeyLayoutMap.cpp +++ b/libs/input/KeyLayoutMap.cpp @@ -247,6 +247,16 @@ std::vector<int32_t> KeyLayoutMap::findScanCodesForKey(int32_t keyCode) const { return scanCodes; } +std::vector<int32_t> KeyLayoutMap::findUsageCodesForKey(int32_t keyCode) const { + std::vector<int32_t> usageCodes; + for (const auto& [usageCode, key] : mKeysByUsageCode) { + if (keyCode == key.keyCode) { + usageCodes.push_back(usageCode); + } + } + return usageCodes; +} + std::optional<AxisInfo> KeyLayoutMap::mapAxis(int32_t scanCode) const { auto it = mAxes.find(scanCode); if (it == mAxes.end()) { diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp index ee8dde1d32..0eb4ad25ee 100644 --- a/services/inputflinger/reader/EventHub.cpp +++ b/services/inputflinger/reader/EventHub.cpp @@ -634,6 +634,11 @@ bool EventHub::Device::hasKeycodeLocked(int keycode) const { } } + std::vector<int32_t> usageCodes = keyMap.keyLayoutMap->findUsageCodesForKey(keycode); + if (usageCodes.size() > 0 && mscBitmask.test(MSC_SCAN)) { + return true; + } + return false; } |