1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/events/keycodes/keyboard_code_conversion_android.h"
6
7 #include <android/keycodes.h>
8
9 namespace ui {
10
11 namespace {
12
13 // The Android NDK does not provide values for these yet:
14 enum {
15 AKEYCODE_ESCAPE = 111,
16 AKEYCODE_FORWARD_DEL = 112,
17 AKEYCODE_CTRL_LEFT = 113,
18 AKEYCODE_CTRL_RIGHT = 114,
19 AKEYCODE_CAPS_LOCK = 115,
20 AKEYCODE_SCROLL_LOCK = 116,
21 AKEYCODE_META_LEFT = 117,
22 AKEYCODE_META_RIGHT = 118,
23 AKEYCODE_BREAK = 121,
24 AKEYCODE_MOVE_HOME = 122,
25 AKEYCODE_MOVE_END = 123,
26 AKEYCODE_INSERT = 124,
27 AKEYCODE_MEDIA_PLAY = 126,
28 AKEYCODE_MEDIA_PAUSE = 127,
29 AKEYCODE_F1 = 131,
30 AKEYCODE_F2 = 132,
31 AKEYCODE_F3 = 133,
32 AKEYCODE_F4 = 134,
33 AKEYCODE_F5 = 135,
34 AKEYCODE_F6 = 136,
35 AKEYCODE_F7 = 137,
36 AKEYCODE_F8 = 138,
37 AKEYCODE_F9 = 139,
38 AKEYCODE_F10 = 140,
39 AKEYCODE_F11 = 141,
40 AKEYCODE_F12 = 142,
41 AKEYCODE_NUM_LOCK = 143,
42 AKEYCODE_NUMPAD_0 = 144,
43 AKEYCODE_NUMPAD_1 = 145,
44 AKEYCODE_NUMPAD_2 = 146,
45 AKEYCODE_NUMPAD_3 = 147,
46 AKEYCODE_NUMPAD_4 = 148,
47 AKEYCODE_NUMPAD_5 = 149,
48 AKEYCODE_NUMPAD_6 = 150,
49 AKEYCODE_NUMPAD_7 = 151,
50 AKEYCODE_NUMPAD_8 = 152,
51 AKEYCODE_NUMPAD_9 = 153,
52 AKEYCODE_NUMPAD_DIVIDE = 154,
53 AKEYCODE_NUMPAD_MULTIPLY = 155,
54 AKEYCODE_NUMPAD_SUBTRACT = 156,
55 AKEYCODE_NUMPAD_ADD = 157,
56 AKEYCODE_NUMPAD_DOT = 158,
57 AKEYCODE_VOLUME_MUTE = 164,
58 AKEYCODE_CHANNEL_UP = 166,
59 AKEYCODE_CHANNEL_DOWN = 167,
60 };
61
62 } // namespace
63
KeyboardCodeFromAndroidKeyCode(int keycode)64 KeyboardCode KeyboardCodeFromAndroidKeyCode(int keycode) {
65 // Does not provide all key codes, and does not handle all keys.
66 switch (keycode) {
67 case AKEYCODE_DEL:
68 return VKEY_BACK;
69 case AKEYCODE_TAB:
70 return VKEY_TAB;
71 case AKEYCODE_CLEAR:
72 return VKEY_CLEAR;
73 case AKEYCODE_DPAD_CENTER:
74 case AKEYCODE_ENTER:
75 return VKEY_RETURN;
76 case AKEYCODE_SHIFT_LEFT:
77 return VKEY_LSHIFT;
78 case AKEYCODE_SHIFT_RIGHT:
79 return VKEY_RSHIFT;
80 // Back will serve as escape, although we may not have access to it.
81 case AKEYCODE_BACK:
82 return VKEY_ESCAPE;
83 case AKEYCODE_SPACE:
84 return VKEY_SPACE;
85 case AKEYCODE_MOVE_HOME:
86 return VKEY_HOME;
87 case AKEYCODE_DPAD_LEFT:
88 return VKEY_LEFT;
89 case AKEYCODE_DPAD_UP:
90 return VKEY_UP;
91 case AKEYCODE_DPAD_RIGHT:
92 return VKEY_RIGHT;
93 case AKEYCODE_DPAD_DOWN:
94 return VKEY_DOWN;
95 case AKEYCODE_0:
96 return VKEY_0;
97 case AKEYCODE_1:
98 return VKEY_1;
99 case AKEYCODE_2:
100 return VKEY_2;
101 case AKEYCODE_3:
102 return VKEY_3;
103 case AKEYCODE_4:
104 return VKEY_4;
105 case AKEYCODE_5:
106 return VKEY_5;
107 case AKEYCODE_6:
108 return VKEY_6;
109 case AKEYCODE_7:
110 return VKEY_7;
111 case AKEYCODE_8:
112 return VKEY_8;
113 case AKEYCODE_9:
114 return VKEY_9;
115 case AKEYCODE_A:
116 return VKEY_A;
117 case AKEYCODE_B:
118 return VKEY_B;
119 case AKEYCODE_C:
120 return VKEY_C;
121 case AKEYCODE_D:
122 return VKEY_D;
123 case AKEYCODE_E:
124 return VKEY_E;
125 case AKEYCODE_F:
126 return VKEY_F;
127 case AKEYCODE_G:
128 return VKEY_G;
129 case AKEYCODE_H:
130 return VKEY_H;
131 case AKEYCODE_I:
132 return VKEY_I;
133 case AKEYCODE_J:
134 return VKEY_J;
135 case AKEYCODE_K:
136 return VKEY_K;
137 case AKEYCODE_L:
138 return VKEY_L;
139 case AKEYCODE_M:
140 return VKEY_M;
141 case AKEYCODE_N:
142 return VKEY_N;
143 case AKEYCODE_O:
144 return VKEY_O;
145 case AKEYCODE_P:
146 return VKEY_P;
147 case AKEYCODE_Q:
148 return VKEY_Q;
149 case AKEYCODE_R:
150 return VKEY_R;
151 case AKEYCODE_S:
152 return VKEY_S;
153 case AKEYCODE_T:
154 return VKEY_T;
155 case AKEYCODE_U:
156 return VKEY_U;
157 case AKEYCODE_V:
158 return VKEY_V;
159 case AKEYCODE_W:
160 return VKEY_W;
161 case AKEYCODE_X:
162 return VKEY_X;
163 case AKEYCODE_Y:
164 return VKEY_Y;
165 case AKEYCODE_Z:
166 return VKEY_Z;
167 case AKEYCODE_VOLUME_DOWN:
168 return VKEY_VOLUME_DOWN;
169 case AKEYCODE_VOLUME_UP:
170 return VKEY_VOLUME_UP;
171 case AKEYCODE_MEDIA_NEXT:
172 return VKEY_MEDIA_NEXT_TRACK;
173 case AKEYCODE_MEDIA_PREVIOUS:
174 return VKEY_MEDIA_PREV_TRACK;
175 case AKEYCODE_MEDIA_STOP:
176 return VKEY_MEDIA_STOP;
177 case AKEYCODE_MEDIA_PAUSE:
178 return VKEY_MEDIA_PLAY_PAUSE;
179 // Colon key.
180 case AKEYCODE_SEMICOLON:
181 return VKEY_OEM_1;
182 case AKEYCODE_COMMA:
183 return VKEY_OEM_COMMA;
184 case AKEYCODE_MINUS:
185 return VKEY_OEM_MINUS;
186 case AKEYCODE_EQUALS:
187 return VKEY_OEM_PLUS;
188 case AKEYCODE_PERIOD:
189 return VKEY_OEM_PERIOD;
190 case AKEYCODE_SLASH:
191 return VKEY_OEM_2;
192 case AKEYCODE_LEFT_BRACKET:
193 return VKEY_OEM_4;
194 case AKEYCODE_BACKSLASH:
195 return VKEY_OEM_5;
196 case AKEYCODE_RIGHT_BRACKET:
197 return VKEY_OEM_6;
198 case AKEYCODE_MUTE:
199 case AKEYCODE_VOLUME_MUTE:
200 return VKEY_VOLUME_MUTE;
201 case AKEYCODE_ESCAPE:
202 return VKEY_ESCAPE;
203 case AKEYCODE_MEDIA_PLAY:
204 case AKEYCODE_MEDIA_PLAY_PAUSE:
205 return VKEY_MEDIA_PLAY_PAUSE;
206 case AKEYCODE_MOVE_END:
207 return VKEY_END;
208 case AKEYCODE_ALT_LEFT:
209 return VKEY_LMENU;
210 case AKEYCODE_ALT_RIGHT:
211 return VKEY_RMENU;
212 case AKEYCODE_GRAVE:
213 return VKEY_OEM_3;
214 case AKEYCODE_APOSTROPHE:
215 return VKEY_OEM_3;
216 case AKEYCODE_MEDIA_REWIND:
217 return VKEY_OEM_103;
218 case AKEYCODE_MEDIA_FAST_FORWARD:
219 return VKEY_OEM_104;
220 case AKEYCODE_PAGE_UP:
221 return VKEY_PRIOR;
222 case AKEYCODE_PAGE_DOWN:
223 return VKEY_NEXT;
224 case AKEYCODE_FORWARD_DEL:
225 return VKEY_DELETE;
226 case AKEYCODE_CTRL_LEFT:
227 return VKEY_LCONTROL;
228 case AKEYCODE_CTRL_RIGHT:
229 return VKEY_RCONTROL;
230 case AKEYCODE_CAPS_LOCK:
231 return VKEY_CAPITAL;
232 case AKEYCODE_SCROLL_LOCK:
233 return VKEY_SCROLL;
234 case AKEYCODE_META_LEFT:
235 return VKEY_LWIN;
236 case AKEYCODE_META_RIGHT:
237 return VKEY_RWIN;
238 case AKEYCODE_BREAK:
239 return VKEY_PAUSE;
240 case AKEYCODE_INSERT:
241 return VKEY_INSERT;
242 case AKEYCODE_F1:
243 return VKEY_F1;
244 case AKEYCODE_F2:
245 return VKEY_F2;
246 case AKEYCODE_F3:
247 return VKEY_F3;
248 case AKEYCODE_F4:
249 return VKEY_F4;
250 case AKEYCODE_F5:
251 return VKEY_F5;
252 case AKEYCODE_F6:
253 return VKEY_F6;
254 case AKEYCODE_F7:
255 return VKEY_F7;
256 case AKEYCODE_F8:
257 return VKEY_F8;
258 case AKEYCODE_F9:
259 return VKEY_F9;
260 case AKEYCODE_F10:
261 return VKEY_F10;
262 case AKEYCODE_F11:
263 return VKEY_F11;
264 case AKEYCODE_F12:
265 return VKEY_F12;
266 case AKEYCODE_NUM_LOCK:
267 return VKEY_NUMLOCK;
268 case AKEYCODE_NUMPAD_0:
269 return VKEY_NUMPAD0;
270 case AKEYCODE_NUMPAD_1:
271 return VKEY_NUMPAD1;
272 case AKEYCODE_NUMPAD_2:
273 return VKEY_NUMPAD2;
274 case AKEYCODE_NUMPAD_3:
275 return VKEY_NUMPAD3;
276 case AKEYCODE_NUMPAD_4:
277 return VKEY_NUMPAD4;
278 case AKEYCODE_NUMPAD_5:
279 return VKEY_NUMPAD5;
280 case AKEYCODE_NUMPAD_6:
281 return VKEY_NUMPAD6;
282 case AKEYCODE_NUMPAD_7:
283 return VKEY_NUMPAD7;
284 case AKEYCODE_NUMPAD_8:
285 return VKEY_NUMPAD8;
286 case AKEYCODE_NUMPAD_9:
287 return VKEY_NUMPAD9;
288 case AKEYCODE_NUMPAD_DIVIDE:
289 return VKEY_DIVIDE;
290 case AKEYCODE_NUMPAD_MULTIPLY:
291 return VKEY_MULTIPLY;
292 case AKEYCODE_NUMPAD_SUBTRACT:
293 return VKEY_SUBTRACT;
294 case AKEYCODE_NUMPAD_ADD:
295 return VKEY_ADD;
296 case AKEYCODE_NUMPAD_DOT:
297 return VKEY_DECIMAL;
298 case AKEYCODE_CHANNEL_UP:
299 return VKEY_PRIOR;
300 case AKEYCODE_CHANNEL_DOWN:
301 return VKEY_NEXT;
302 default:
303 return VKEY_UNKNOWN;
304 }
305 }
306
307 } // namespace ui
308