• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _ANDROIDFW_KEYBOARD_H
18 #define _ANDROIDFW_KEYBOARD_H
19 
20 #include <androidfw/Input.h>
21 #include <androidfw/InputDevice.h>
22 #include <utils/Errors.h>
23 #include <utils/String8.h>
24 #include <utils/PropertyMap.h>
25 
26 namespace android {
27 
28 enum {
29     /* Device id of the built in keyboard. */
30     DEVICE_ID_BUILT_IN_KEYBOARD = 0,
31 
32     /* Device id of a generic virtual keyboard with a full layout that can be used
33      * to synthesize key events. */
34     DEVICE_ID_VIRTUAL_KEYBOARD = -1,
35 };
36 
37 class KeyLayoutMap;
38 class KeyCharacterMap;
39 
40 /**
41  * Loads the key layout map and key character map for a keyboard device.
42  */
43 class KeyMap {
44 public:
45     String8 keyLayoutFile;
46     sp<KeyLayoutMap> keyLayoutMap;
47 
48     String8 keyCharacterMapFile;
49     sp<KeyCharacterMap> keyCharacterMap;
50 
51     KeyMap();
52     ~KeyMap();
53 
54     status_t load(const InputDeviceIdentifier& deviceIdenfier,
55             const PropertyMap* deviceConfiguration);
56 
haveKeyLayout()57     inline bool haveKeyLayout() const {
58         return !keyLayoutFile.isEmpty();
59     }
60 
haveKeyCharacterMap()61     inline bool haveKeyCharacterMap() const {
62         return !keyCharacterMapFile.isEmpty();
63     }
64 
isComplete()65     inline bool isComplete() const {
66         return haveKeyLayout() && haveKeyCharacterMap();
67     }
68 
69 private:
70     bool probeKeyMap(const InputDeviceIdentifier& deviceIdentifier, const String8& name);
71     status_t loadKeyLayout(const InputDeviceIdentifier& deviceIdentifier, const String8& name);
72     status_t loadKeyCharacterMap(const InputDeviceIdentifier& deviceIdentifier,
73             const String8& name);
74     String8 getPath(const InputDeviceIdentifier& deviceIdentifier,
75             const String8& name, InputDeviceConfigurationFileType type);
76 };
77 
78 /**
79  * Returns true if the keyboard is eligible for use as a built-in keyboard.
80  */
81 extern bool isEligibleBuiltInKeyboard(const InputDeviceIdentifier& deviceIdentifier,
82         const PropertyMap* deviceConfiguration, const KeyMap* keyMap);
83 
84 /**
85  * Gets a key code by its short form label, eg. "HOME".
86  * Returns 0 if unknown.
87  */
88 extern int32_t getKeyCodeByLabel(const char* label);
89 
90 /**
91  * Gets a key flag by its short form label, eg. "WAKE".
92  * Returns 0 if unknown.
93  */
94 extern uint32_t getKeyFlagByLabel(const char* label);
95 
96 /**
97  * Gets a axis by its short form label, eg. "X".
98  * Returns -1 if unknown.
99  */
100 extern int32_t getAxisByLabel(const char* label);
101 
102 /**
103  * Gets a axis label by its id.
104  * Returns NULL if unknown.
105  */
106 extern const char* getAxisLabel(int32_t axisId);
107 
108 /**
109  * Updates a meta state field when a key is pressed or released.
110  */
111 extern int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState);
112 
113 /**
114  * Returns true if a key is a meta key like ALT or CAPS_LOCK.
115  */
116 extern bool isMetaKey(int32_t keyCode);
117 
118 } // namespace android
119 
120 #endif // _ANDROIDFW_KEYBOARD_H
121