diff options
| author | 2024-06-09 21:19:10 +0000 | |
|---|---|---|
| committer | 2024-06-09 21:19:10 +0000 | |
| commit | 73e5e3a4b1819fc21130b53d813c4772ab9d399e (patch) | |
| tree | 7ee867ff3cad2fc711066d728c9f74818f994a8a /include | |
| parent | 42097e26f6bbfde9aaf980d17298aae26c7a00f5 (diff) | |
| parent | aa8e0640e68c596ac71a1369803c90def78eb7eb (diff) | |
Snap for 11946224 from aa8e0640e68c596ac71a1369803c90def78eb7eb to 24Q3-release
Change-Id: I206638182727919a8d041f6de70e8b4fe1d5ba95
Diffstat (limited to 'include')
| -rw-r--r-- | include/android/input.h | 1 | ||||
| -rw-r--r-- | include/input/Input.h | 10 | ||||
| -rw-r--r-- | include/input/KeyboardClassifier.h | 53 |
3 files changed, 63 insertions, 1 deletions
diff --git a/include/android/input.h b/include/android/input.h index fec56f02f9..ee98d7aee9 100644 --- a/include/android/input.h +++ b/include/android/input.h @@ -1002,7 +1002,6 @@ enum { * Keyboard types. * * Refer to the documentation on android.view.InputDevice for more details. - * Note: When adding a new keyboard type here InputDeviceInfo::setKeyboardType needs to be updated. */ enum { /** none */ diff --git a/include/input/Input.h b/include/input/Input.h index 3ca9c19876..dee3e7dcd0 100644 --- a/include/input/Input.h +++ b/include/input/Input.h @@ -258,6 +258,16 @@ enum class KeyState { ftl_last = VIRTUAL, }; +/** + * The keyboard type. This should have 1:1 correspondence with the values of anonymous enum + * defined in input.h + */ +enum class KeyboardType { + NONE = AINPUT_KEYBOARD_TYPE_NONE, + NON_ALPHABETIC = AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC, + ALPHABETIC = AINPUT_KEYBOARD_TYPE_ALPHABETIC, +}; + bool isStylusToolType(ToolType toolType); struct PointerProperties; diff --git a/include/input/KeyboardClassifier.h b/include/input/KeyboardClassifier.h new file mode 100644 index 0000000000..457d474ee7 --- /dev/null +++ b/include/input/KeyboardClassifier.h @@ -0,0 +1,53 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <android-base/result.h> +#include <input/Input.h> +#include <input/InputDevice.h> + +#include "rust/cxx.h" + +namespace android { + +namespace input { +namespace keyboardClassifier { +struct KeyboardClassifier; +} +} // namespace input + +/* + * Keyboard classifier to classify keyboard into alphabetic and non-alphabetic keyboards + */ +class KeyboardClassifier { +public: + KeyboardClassifier(); + /** + * Get the type of keyboard that the classifier currently believes the device to be. + */ + KeyboardType getKeyboardType(DeviceId deviceId); + void notifyKeyboardChanged(DeviceId deviceId, const InputDeviceIdentifier& identifier, + uint32_t deviceClasses); + void processKey(DeviceId deviceId, int32_t evdevCode, uint32_t metaState); + +private: + std::optional<rust::Box<android::input::keyboardClassifier::KeyboardClassifier>> + mRustClassifier; + std::unordered_map<DeviceId, KeyboardType> mKeyboardTypeMap; +}; + +} // namespace android |