diff options
author | 2022-12-29 12:07:56 +0000 | |
---|---|---|
committer | 2023-01-12 23:18:40 +0000 | |
commit | 23e8ae9cf2793b83e220adec4cf6dec35e090e53 (patch) | |
tree | 7fab247ee09974faf18ed0fea15ba7a91fc3e18c | |
parent | 4079d69adeb0c9a55e8b2651775470a8dc2ab0bb (diff) |
Clear applied layout overlay if new layout overlay is null.
Need to allow resetting of key character map by setting overlay
map to null. This is required when moving from a IME setting
that has a KCM to another IME setting that has none.
Test: atest KeyboardLayoutChangeTest
Bug: 20805588
Change-Id: I62dc65970b61628486aff698a8ab8ccb31c109d6
-rw-r--r-- | include/input/KeyCharacterMap.h | 3 | ||||
-rw-r--r-- | libs/input/KeyCharacterMap.cpp | 7 | ||||
-rw-r--r-- | services/inputflinger/reader/EventHub.cpp | 7 |
3 files changed, 16 insertions, 1 deletions
diff --git a/include/input/KeyCharacterMap.h b/include/input/KeyCharacterMap.h index 867a08955c..b5e6f65e48 100644 --- a/include/input/KeyCharacterMap.h +++ b/include/input/KeyCharacterMap.h @@ -87,6 +87,9 @@ public: /* Combines this key character map with the provided overlay. */ void combine(const KeyCharacterMap& overlay); + /* Clears already applied layout overlay */ + void clearLayoutOverlay(); + /* Gets the keyboard type. */ KeyboardType getKeyboardType() const; diff --git a/libs/input/KeyCharacterMap.cpp b/libs/input/KeyCharacterMap.cpp index fa5c41f657..6bfac40932 100644 --- a/libs/input/KeyCharacterMap.cpp +++ b/libs/input/KeyCharacterMap.cpp @@ -255,6 +255,13 @@ void KeyCharacterMap::combine(const KeyCharacterMap& overlay) { mLayoutOverlayApplied = true; } +void KeyCharacterMap::clearLayoutOverlay() { + if (mLayoutOverlayApplied) { + reloadBaseFromFile(); + mLayoutOverlayApplied = false; + } +} + KeyCharacterMap::KeyboardType KeyCharacterMap::getKeyboardType() const { return mType; } diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp index b214750443..43b67cae8b 100644 --- a/services/inputflinger/reader/EventHub.cpp +++ b/services/inputflinger/reader/EventHub.cpp @@ -1416,12 +1416,17 @@ const std::shared_ptr<KeyCharacterMap> EventHub::getKeyCharacterMap(int32_t devi return nullptr; } +// If provided map is null, it will reset key character map to default KCM. bool EventHub::setKeyboardLayoutOverlay(int32_t deviceId, std::shared_ptr<KeyCharacterMap> map) { std::scoped_lock _l(mLock); Device* device = getDeviceLocked(deviceId); - if (device == nullptr || map == nullptr || device->keyMap.keyCharacterMap == nullptr) { + if (device == nullptr || device->keyMap.keyCharacterMap == nullptr) { return false; } + if (map == nullptr) { + device->keyMap.keyCharacterMap->clearLayoutOverlay(); + return true; + } device->keyMap.keyCharacterMap->combine(*map); return true; } |