15912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 25912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Copyright (C) 2008 The Android Open Source Project 35912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 45912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 55912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * you may not use this file except in compliance with the License. 65912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * You may obtain a copy of the License at 75912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 85912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 95912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Unless required by applicable law or agreed to in writing, software 115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * See the License for the specific language governing permissions and 145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * limitations under the License. 155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#ifndef _LIBINPUT_KEY_CHARACTER_MAP_H 185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#define _LIBINPUT_KEY_CHARACTER_MAP_H 195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <stdint.h> 215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#if HAVE_ANDROID_OS 235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <binder/IBinder.h> 245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#endif 255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/Input.h> 275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Errors.h> 285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/KeyedVector.h> 295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Tokenizer.h> 305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/String8.h> 315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Unicode.h> 325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/RefBase.h> 335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownnamespace android { 355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/** 375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Describes a mapping from Android key codes to characters. 385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Also specifies other functions of the keyboard such as the keyboard type 395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * and key modifier semantics. 405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * This object is immutable after it has been loaded. 425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass KeyCharacterMap : public RefBase { 445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownpublic: 455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown enum KeyboardType { 465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_UNKNOWN = 0, 475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_NUMERIC = 1, 485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_PREDICTIVE = 2, 495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_ALPHA = 3, 505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_FULL = 4, 515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_SPECIAL_FUNCTION = 5, 525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KEYBOARD_TYPE_OVERLAY = 6, 535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown enum Format { 565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Base keyboard layout, may contain device-specific options, such as "type" declaration. 575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown FORMAT_BASE = 0, 585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Overlay keyboard layout, more restrictive, may be published by applications, 595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // cannot override device-specific options. 605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown FORMAT_OVERLAY = 1, 615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Either base or overlay layout ok. 625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown FORMAT_ANY = 2, 635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Substitute key code and meta state for fallback action. 665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown struct FallbackAction { 675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t keyCode; 685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t metaState; 695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Loads a key character map from a file. */ 725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static status_t load(const String8& filename, Format format, sp<KeyCharacterMap>* outMap); 735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Loads a key character map from its string contents. */ 755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static status_t loadContents(const String8& filename, 765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const char* contents, Format format, sp<KeyCharacterMap>* outMap); 775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Combines a base key character map and an overlay. */ 795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static sp<KeyCharacterMap> combine(const sp<KeyCharacterMap>& base, 805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const sp<KeyCharacterMap>& overlay); 815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Returns an empty key character map. */ 835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static sp<KeyCharacterMap> empty(); 845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets the keyboard type. */ 865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t getKeyboardType() const; 875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets the primary character for this key as in the label physically printed on it. 895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns 0 if none (eg. for non-printing keys). */ 905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t getDisplayLabel(int32_t keyCode) const; 915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets the Unicode character for the number or symbol generated by the key 935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * when the keyboard is used as a dialing pad. 945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns 0 if no number or symbol is generated. 955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t getNumber(int32_t keyCode) const; 975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets the Unicode character generated by the key and meta key modifiers. 995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns 0 if no character is generated. 1005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 1015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t getCharacter(int32_t keyCode, int32_t metaState) const; 1025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets the fallback action to use by default if the application does not 1045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * handle the specified key. 1055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns true if an action was available, false if none. 1065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 1075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool getFallbackAction(int32_t keyCode, int32_t metaState, 1085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown FallbackAction* outFallbackAction) const; 1095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets the first matching Unicode character that can be generated by the key, 1115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * preferring the one with the specified meta key modifiers. 1125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns 0 if no matching character is generated. 1135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 1145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t getMatch(int32_t keyCode, const char16_t* chars, 1155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown size_t numChars, int32_t metaState) const; 1165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Gets a sequence of key events that could plausibly generate the specified 1185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * character sequence. Returns false if some of the characters cannot be generated. 1195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 1205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool getEvents(int32_t deviceId, const char16_t* chars, size_t numChars, 1215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Vector<KeyEvent>& outEvents) const; 1225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Maps a scan code and usage code to a key code, in case this key map overrides 1245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * the mapping in some way. */ 1255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t mapKey(int32_t scanCode, int32_t usageCode, int32_t* outKeyCode) const; 1265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#if HAVE_ANDROID_OS 1285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Reads a key map from a parcel. */ 1295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static sp<KeyCharacterMap> readFromParcel(Parcel* parcel); 1305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Writes a key map to a parcel. */ 1325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void writeToParcel(Parcel* parcel) const; 1335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#endif 1345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprotected: 1365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown virtual ~KeyCharacterMap(); 1375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprivate: 1395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown struct Behavior { 1405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Behavior(); 1415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Behavior(const Behavior& other); 1425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The next behavior in the list, or NULL if none. */ 1445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Behavior* next; 1455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The meta key modifiers for this behavior. */ 1475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t metaState; 1485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The character to insert. */ 1505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t character; 1515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The fallback keycode if the key is not handled. */ 1535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t fallbackKeyCode; 1545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 1555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown struct Key { 1575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Key(); 1585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Key(const Key& other); 1595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ~Key(); 1605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The single character label printed on the key, or 0 if none. */ 1625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t label; 1635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The number or symbol character generated by the key, or 0 if none. */ 1655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown char16_t number; 1665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* The list of key behaviors sorted from most specific to least specific 1685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * meta key binding. */ 1695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Behavior* firstBehavior; 1705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 1715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown class Parser { 1735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown enum State { 1745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown STATE_TOP = 0, 1755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown STATE_KEY = 1, 1765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 1775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown enum { 1795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PROPERTY_LABEL = 1, 1805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PROPERTY_NUMBER = 2, 1815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PROPERTY_META = 3, 1825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 1835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown struct Property { 1855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline Property(int32_t property = 0, int32_t metaState = 0) : 1865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown property(property), metaState(metaState) { } 1875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t property; 1895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t metaState; 1905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 1915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyCharacterMap* mMap; 1935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Tokenizer* mTokenizer; 1945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Format mFormat; 1955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown State mState; 1965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t mKeyCode; 1975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown public: 1995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Parser(KeyCharacterMap* map, Tokenizer* tokenizer, Format format); 2005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ~Parser(); 2015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parse(); 2025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown private: 2045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseType(); 2055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseMap(); 2065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseMapKey(); 2075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseKey(); 2085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseKeyProperty(); 2095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t finishKey(Key* key); 2105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseModifier(const String8& token, int32_t* outMetaState); 2115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parseCharacterLiteral(char16_t* outCharacter); 2125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 2135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static sp<KeyCharacterMap> sEmpty; 2155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyedVector<int32_t, Key*> mKeys; 2175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int mType; 2185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyedVector<int32_t, int32_t> mKeysByScanCode; 2205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyedVector<int32_t, int32_t> mKeysByUsageCode; 2215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyCharacterMap(); 2235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyCharacterMap(const KeyCharacterMap& other); 2245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool getKey(int32_t keyCode, const Key** outKey) const; 2265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool getKeyBehavior(int32_t keyCode, int32_t metaState, 2275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const Key** outKey, const Behavior** outBehavior) const; 2285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static bool matchesMetaState(int32_t eventMetaState, int32_t behaviorMetaState); 2295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool findKey(char16_t ch, int32_t* outKeyCode, int32_t* outMetaState) const; 2315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static status_t load(Tokenizer* tokenizer, Format format, sp<KeyCharacterMap>* outMap); 2335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static void addKey(Vector<KeyEvent>& outEvents, 2355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t deviceId, int32_t keyCode, int32_t metaState, bool down, nsecs_t time); 2365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static void addMetaKeys(Vector<KeyEvent>& outEvents, 2375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t deviceId, int32_t metaState, bool down, nsecs_t time, 2385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t* currentMetaState); 2395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static bool addSingleEphemeralMetaKey(Vector<KeyEvent>& outEvents, 2405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t deviceId, int32_t metaState, bool down, nsecs_t time, 2415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t keyCode, int32_t keyMetaState, 2425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t* currentMetaState); 2435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static void addDoubleEphemeralMetaKey(Vector<KeyEvent>& outEvents, 2445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t deviceId, int32_t metaState, bool down, nsecs_t time, 2455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t leftKeyCode, int32_t leftKeyMetaState, 2465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t rightKeyCode, int32_t rightKeyMetaState, 2475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t eitherKeyMetaState, 2485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t* currentMetaState); 2495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static void addLockedMetaKey(Vector<KeyEvent>& outEvents, 2505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t deviceId, int32_t metaState, nsecs_t time, 2515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t keyCode, int32_t keyMetaState, 2525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t* currentMetaState); 2535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 2545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} // namespace android 2565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#endif // _LIBINPUT_KEY_CHARACTER_MAP_H 258