KeyCharacterMap.h revision 6ec6f79e1ac1714e3b837796e99f07ff88f66601
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#ifndef _ANDROIDFW_KEY_CHARACTER_MAP_H 18b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#define _ANDROIDFW_KEY_CHARACTER_MAP_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#if HAVE_ANDROID_OS 239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include <binder/IBinder.h> 249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#endif 259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 26b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/Input.h> 276b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include <utils/Errors.h> 286b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include <utils/KeyedVector.h> 296b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include <utils/Tokenizer.h> 306b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include <utils/String8.h> 316b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown#include <utils/Unicode.h> 329f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include <utils/RefBase.h> 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 346b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brownnamespace android { 356b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 366b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown/** 376b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Describes a mapping from Android key codes to characters. 386b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Also specifies other functions of the keyboard such as the keyboard type 396b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * and key modifier semantics. 409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * This object is immutable after it has been loaded. 426b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownclass KeyCharacterMap : public RefBase { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 456b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown enum KeyboardType { 466b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KEYBOARD_TYPE_UNKNOWN = 0, 476b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KEYBOARD_TYPE_NUMERIC = 1, 486b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KEYBOARD_TYPE_PREDICTIVE = 2, 496b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KEYBOARD_TYPE_ALPHA = 3, 506b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KEYBOARD_TYPE_FULL = 4, 516b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KEYBOARD_TYPE_SPECIAL_FUNCTION = 5, 526ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown KEYBOARD_TYPE_OVERLAY = 6, 536ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown }; 546ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown 556ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown enum Format { 566ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown // Base keyboard layout, may contain device-specific options, such as "type" declaration. 576ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown FORMAT_BASE = 0, 586ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown // Overlay keyboard layout, more restrictive, may be published by applications, 596ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown // cannot override device-specific options. 606ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown FORMAT_OVERLAY = 1, 616ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown // Either base or overlay layout ok. 626ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown FORMAT_ANY = 2, 636b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown }; 646b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 6549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown // Substitute key code and meta state for fallback action. 6649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown struct FallbackAction { 6749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown int32_t keyCode; 6849ed71db425c5054e3ad9526496a7e116c89556bJeff Brown int32_t metaState; 6949ed71db425c5054e3ad9526496a7e116c89556bJeff Brown }; 7049ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /* Loads a key character map from a file. */ 726ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown static status_t load(const String8& filename, Format format, sp<KeyCharacterMap>* outMap); 736ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown 746ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown /* Loads a key character map from its string contents. */ 756ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown static status_t loadContents(const String8& filename, 766ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown const char* contents, Format format, sp<KeyCharacterMap>* outMap); 776ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown 786ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown /* Combines a base key character map and an overlay. */ 796ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown static sp<KeyCharacterMap> combine(const sp<KeyCharacterMap>& base, 806ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown const sp<KeyCharacterMap>& overlay); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /* Returns an empty key character map. */ 839f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown static sp<KeyCharacterMap> empty(); 846b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 856b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* Gets the keyboard type. */ 866b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t getKeyboardType() const; 876b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 886b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* Gets the primary character for this key as in the label physically printed on it. 896b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns 0 if none (eg. for non-printing keys). */ 906b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t getDisplayLabel(int32_t keyCode) const; 916b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 926b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* Gets the Unicode character for the number or symbol generated by the key 936b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when the keyboard is used as a dialing pad. 946b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns 0 if no number or symbol is generated. 956b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 966b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t getNumber(int32_t keyCode) const; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 986b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* Gets the Unicode character generated by the key and meta key modifiers. 996b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns 0 if no character is generated. 1006b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 1016b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t getCharacter(int32_t keyCode, int32_t metaState) const; 1026b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 10349ed71db425c5054e3ad9526496a7e116c89556bJeff Brown /* Gets the fallback action to use by default if the application does not 10449ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * handle the specified key. 10549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Returns true if an action was available, false if none. 10649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown */ 10749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown bool getFallbackAction(int32_t keyCode, int32_t metaState, 10849ed71db425c5054e3ad9526496a7e116c89556bJeff Brown FallbackAction* outFallbackAction) const; 10949ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 1106b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* Gets the first matching Unicode character that can be generated by the key, 1116b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * preferring the one with the specified meta key modifiers. 1126b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns 0 if no matching character is generated. 1136b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 1146b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t getMatch(int32_t keyCode, const char16_t* chars, 1156b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown size_t numChars, int32_t metaState) const; 1166b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1176b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* Gets a sequence of key events that could plausibly generate the specified 1186b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * character sequence. Returns false if some of the characters cannot be generated. 1196b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 1206b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown bool getEvents(int32_t deviceId, const char16_t* chars, size_t numChars, 1216b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Vector<KeyEvent>& outEvents) const; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#if HAVE_ANDROID_OS 1249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /* Reads a key map from a parcel. */ 1259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown static sp<KeyCharacterMap> readFromParcel(Parcel* parcel); 1269f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1279f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /* Writes a key map to a parcel. */ 1289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown void writeToParcel(Parcel* parcel) const; 1299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#endif 1309f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1319f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownprotected: 1329f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown virtual ~KeyCharacterMap(); 1339f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 1356b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown struct Behavior { 1366b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Behavior(); 1376ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown Behavior(const Behavior& other); 1386b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1396b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The next behavior in the list, or NULL if none. */ 1406b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Behavior* next; 1416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1426b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The meta key modifiers for this behavior. */ 1436b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t metaState; 1446b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1456b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The character to insert. */ 1466b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t character; 1476b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1486b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The fallback keycode if the key is not handled. */ 1496b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t fallbackKeyCode; 1506b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown }; 1516b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1526b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown struct Key { 1536b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Key(); 1546ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown Key(const Key& other); 1556b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown ~Key(); 1566b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1576b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The single character label printed on the key, or 0 if none. */ 1586b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t label; 1596b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1606b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The number or symbol character generated by the key, or 0 if none. */ 1616b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown char16_t number; 1626b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1636b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /* The list of key behaviors sorted from most specific to least specific 1646b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * meta key binding. */ 1656b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Behavior* firstBehavior; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1686b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown class Parser { 1696b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown enum State { 1706b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown STATE_TOP = 0, 1716b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown STATE_KEY = 1, 1726b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown }; 1736b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1746b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown enum { 1756b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown PROPERTY_LABEL = 1, 1766b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown PROPERTY_NUMBER = 2, 1776b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown PROPERTY_META = 3, 1786b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown }; 1796b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1806b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown struct Property { 1816b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown inline Property(int32_t property = 0, int32_t metaState = 0) : 1826b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown property(property), metaState(metaState) { } 1836b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1846b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t property; 1856b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t metaState; 1866b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown }; 1876b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1886b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KeyCharacterMap* mMap; 1896b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown Tokenizer* mTokenizer; 1906ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown Format mFormat; 1916b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown State mState; 1926b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t mKeyCode; 1936b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1946b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public: 1956ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown Parser(KeyCharacterMap* map, Tokenizer* tokenizer, Format format); 1966b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown ~Parser(); 1976b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown status_t parse(); 1986b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 1996b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown private: 2006b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown status_t parseType(); 2016b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown status_t parseKey(); 2026b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown status_t parseKeyProperty(); 2036b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown status_t parseModifier(const String8& token, int32_t* outMetaState); 2046b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown status_t parseCharacterLiteral(char16_t* outCharacter); 2056b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown }; 2066b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 2079f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown static sp<KeyCharacterMap> sEmpty; 2089f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 2096b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown KeyedVector<int32_t, Key*> mKeys; 2106b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int mType; 2116b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyCharacterMap(); 2136ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown KeyCharacterMap(const KeyCharacterMap& other); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown bool getKey(int32_t keyCode, const Key** outKey) const; 21649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown bool getKeyBehavior(int32_t keyCode, int32_t metaState, 21749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown const Key** outKey, const Behavior** outBehavior) const; 21849ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 2196b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown bool findKey(char16_t ch, int32_t* outKeyCode, int32_t* outMetaState) const; 2206b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 2216ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown static status_t load(Tokenizer* tokenizer, Format format, sp<KeyCharacterMap>* outMap); 2226ec6f79e1ac1714e3b837796e99f07ff88f66601Jeff Brown 2236b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown static void addKey(Vector<KeyEvent>& outEvents, 2246b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t deviceId, int32_t keyCode, int32_t metaState, bool down, nsecs_t time); 2256b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown static void addMetaKeys(Vector<KeyEvent>& outEvents, 2266b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t deviceId, int32_t metaState, bool down, nsecs_t time, 2276b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t* currentMetaState); 2286b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown static bool addSingleEphemeralMetaKey(Vector<KeyEvent>& outEvents, 2296b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t deviceId, int32_t metaState, bool down, nsecs_t time, 2306b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t keyCode, int32_t keyMetaState, 2316b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t* currentMetaState); 2326b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown static void addDoubleEphemeralMetaKey(Vector<KeyEvent>& outEvents, 2336b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t deviceId, int32_t metaState, bool down, nsecs_t time, 2346b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t leftKeyCode, int32_t leftKeyMetaState, 2356b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t rightKeyCode, int32_t rightKeyMetaState, 2366b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t eitherKeyMetaState, 2376b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t* currentMetaState); 2386b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown static void addLockedMetaKey(Vector<KeyEvent>& outEvents, 2396b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t deviceId, int32_t metaState, nsecs_t time, 2406b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t keyCode, int32_t keyMetaState, 2416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown int32_t* currentMetaState); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2446b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown} // namespace android 2456b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 246b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#endif // _ANDROIDFW_KEY_CHARACTER_MAP_H 247