1 /* 2 * Copyright (C) 2018 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 package com.android.car.keventreader; 17 18 import android.os.Parcel; 19 import android.os.Parcelable; 20 21 import java.util.HashMap; 22 import java.util.Map; 23 import java.util.Objects; 24 25 public final class KeypressEvent implements Parcelable { 26 private static final Map<Integer, String> KEYCODE_NAME_MAP = new HashMap<Integer, String>(); 27 static { 28 KEYCODE_NAME_MAP.put(0, "RESERVED"); 29 KEYCODE_NAME_MAP.put(1, "ESC"); 30 KEYCODE_NAME_MAP.put(2, "1"); 31 KEYCODE_NAME_MAP.put(3, "2"); 32 KEYCODE_NAME_MAP.put(4, "3"); 33 KEYCODE_NAME_MAP.put(5, "4"); 34 KEYCODE_NAME_MAP.put(6, "5"); 35 KEYCODE_NAME_MAP.put(7, "6"); 36 KEYCODE_NAME_MAP.put(8, "7"); 37 KEYCODE_NAME_MAP.put(9, "8"); 38 KEYCODE_NAME_MAP.put(10, "9"); 39 KEYCODE_NAME_MAP.put(11, "0"); 40 KEYCODE_NAME_MAP.put(12, "MINUS"); 41 KEYCODE_NAME_MAP.put(13, "EQUAL"); 42 KEYCODE_NAME_MAP.put(14, "BACKSPACE"); 43 KEYCODE_NAME_MAP.put(15, "TAB"); 44 KEYCODE_NAME_MAP.put(16, "Q"); 45 KEYCODE_NAME_MAP.put(17, "W"); 46 KEYCODE_NAME_MAP.put(18, "E"); 47 KEYCODE_NAME_MAP.put(19, "R"); 48 KEYCODE_NAME_MAP.put(20, "T"); 49 KEYCODE_NAME_MAP.put(21, "Y"); 50 KEYCODE_NAME_MAP.put(22, "U"); 51 KEYCODE_NAME_MAP.put(23, "I"); 52 KEYCODE_NAME_MAP.put(24, "O"); 53 KEYCODE_NAME_MAP.put(25, "P"); 54 KEYCODE_NAME_MAP.put(26, "LEFTBRACE"); 55 KEYCODE_NAME_MAP.put(27, "RIGHTBRACE"); 56 KEYCODE_NAME_MAP.put(28, "ENTER"); 57 KEYCODE_NAME_MAP.put(29, "LEFTCTRL"); 58 KEYCODE_NAME_MAP.put(30, "A"); 59 KEYCODE_NAME_MAP.put(31, "S"); 60 KEYCODE_NAME_MAP.put(32, "D"); 61 KEYCODE_NAME_MAP.put(33, "F"); 62 KEYCODE_NAME_MAP.put(34, "G"); 63 KEYCODE_NAME_MAP.put(35, "H"); 64 KEYCODE_NAME_MAP.put(36, "J"); 65 KEYCODE_NAME_MAP.put(37, "K"); 66 KEYCODE_NAME_MAP.put(38, "L"); 67 KEYCODE_NAME_MAP.put(39, "SEMICOLON"); 68 KEYCODE_NAME_MAP.put(40, "APOSTROPHE"); 69 KEYCODE_NAME_MAP.put(41, "GRAVE"); 70 KEYCODE_NAME_MAP.put(42, "LEFTSHIFT"); 71 KEYCODE_NAME_MAP.put(43, "BACKSLASH"); 72 KEYCODE_NAME_MAP.put(44, "Z"); 73 KEYCODE_NAME_MAP.put(45, "X"); 74 KEYCODE_NAME_MAP.put(46, "C"); 75 KEYCODE_NAME_MAP.put(47, "V"); 76 KEYCODE_NAME_MAP.put(48, "B"); 77 KEYCODE_NAME_MAP.put(49, "N"); 78 KEYCODE_NAME_MAP.put(50, "M"); 79 KEYCODE_NAME_MAP.put(51, "COMMA"); 80 KEYCODE_NAME_MAP.put(52, "DOT"); 81 KEYCODE_NAME_MAP.put(53, "SLASH"); 82 KEYCODE_NAME_MAP.put(54, "RIGHTSHIFT"); 83 KEYCODE_NAME_MAP.put(55, "KPASTERISK"); 84 KEYCODE_NAME_MAP.put(56, "LEFTALT"); 85 KEYCODE_NAME_MAP.put(57, "SPACE"); 86 KEYCODE_NAME_MAP.put(58, "CAPSLOCK"); 87 KEYCODE_NAME_MAP.put(59, "F1"); 88 KEYCODE_NAME_MAP.put(60, "F2"); 89 KEYCODE_NAME_MAP.put(61, "F3"); 90 KEYCODE_NAME_MAP.put(62, "F4"); 91 KEYCODE_NAME_MAP.put(63, "F5"); 92 KEYCODE_NAME_MAP.put(64, "F6"); 93 KEYCODE_NAME_MAP.put(65, "F7"); 94 KEYCODE_NAME_MAP.put(66, "F8"); 95 KEYCODE_NAME_MAP.put(67, "F9"); 96 KEYCODE_NAME_MAP.put(68, "F10"); 97 KEYCODE_NAME_MAP.put(69, "NUMLOCK"); 98 KEYCODE_NAME_MAP.put(70, "SCROLLLOCK"); 99 KEYCODE_NAME_MAP.put(71, "KP7"); 100 KEYCODE_NAME_MAP.put(72, "KP8"); 101 KEYCODE_NAME_MAP.put(73, "KP9"); 102 KEYCODE_NAME_MAP.put(74, "KPMINUS"); 103 KEYCODE_NAME_MAP.put(75, "KP4"); 104 KEYCODE_NAME_MAP.put(76, "KP5"); 105 KEYCODE_NAME_MAP.put(77, "KP6"); 106 KEYCODE_NAME_MAP.put(78, "KPPLUS"); 107 KEYCODE_NAME_MAP.put(79, "KP1"); 108 KEYCODE_NAME_MAP.put(80, "KP2"); 109 KEYCODE_NAME_MAP.put(81, "KP3"); 110 KEYCODE_NAME_MAP.put(82, "KP0"); 111 KEYCODE_NAME_MAP.put(83, "KPDOT"); 112 KEYCODE_NAME_MAP.put(85, "ZENKAKUHANKAKU"); 113 KEYCODE_NAME_MAP.put(86, "102ND"); 114 KEYCODE_NAME_MAP.put(87, "F11"); 115 KEYCODE_NAME_MAP.put(88, "F12"); 116 KEYCODE_NAME_MAP.put(89, "RO"); 117 KEYCODE_NAME_MAP.put(90, "KATAKANA"); 118 KEYCODE_NAME_MAP.put(91, "HIRAGANA"); 119 KEYCODE_NAME_MAP.put(92, "HENKAN"); 120 KEYCODE_NAME_MAP.put(93, "KATAKANAHIRAGANA"); 121 KEYCODE_NAME_MAP.put(94, "MUHENKAN"); 122 KEYCODE_NAME_MAP.put(95, "KPJPCOMMA"); 123 KEYCODE_NAME_MAP.put(96, "KPENTER"); 124 KEYCODE_NAME_MAP.put(97, "RIGHTCTRL"); 125 KEYCODE_NAME_MAP.put(98, "KPSLASH"); 126 KEYCODE_NAME_MAP.put(99, "SYSRQ"); 127 KEYCODE_NAME_MAP.put(100, "RIGHTALT"); 128 KEYCODE_NAME_MAP.put(101, "LINEFEED"); 129 KEYCODE_NAME_MAP.put(102, "HOME"); 130 KEYCODE_NAME_MAP.put(103, "UP"); 131 KEYCODE_NAME_MAP.put(104, "PAGEUP"); 132 KEYCODE_NAME_MAP.put(105, "LEFT"); 133 KEYCODE_NAME_MAP.put(106, "RIGHT"); 134 KEYCODE_NAME_MAP.put(107, "END"); 135 KEYCODE_NAME_MAP.put(108, "DOWN"); 136 KEYCODE_NAME_MAP.put(109, "PAGEDOWN"); 137 KEYCODE_NAME_MAP.put(110, "INSERT"); 138 KEYCODE_NAME_MAP.put(111, "DELETE"); 139 KEYCODE_NAME_MAP.put(112, "MACRO"); 140 KEYCODE_NAME_MAP.put(113, "MUTE"); 141 KEYCODE_NAME_MAP.put(114, "VOLUMEDOWN"); 142 KEYCODE_NAME_MAP.put(115, "VOLUMEUP"); 143 KEYCODE_NAME_MAP.put(116, "POWER"); 144 KEYCODE_NAME_MAP.put(117, "KPEQUAL"); 145 KEYCODE_NAME_MAP.put(118, "KPPLUSMINUS"); 146 KEYCODE_NAME_MAP.put(119, "PAUSE"); 147 KEYCODE_NAME_MAP.put(120, "SCALE"); 148 KEYCODE_NAME_MAP.put(121, "KPCOMMA"); 149 KEYCODE_NAME_MAP.put(122, "HANGEUL"); 150 KEYCODE_NAME_MAP.put(123, "HANJA"); 151 KEYCODE_NAME_MAP.put(124, "YEN"); 152 KEYCODE_NAME_MAP.put(125, "LEFTMETA"); 153 KEYCODE_NAME_MAP.put(126, "RIGHTMETA"); 154 KEYCODE_NAME_MAP.put(127, "COMPOSE"); 155 KEYCODE_NAME_MAP.put(128, "STOP"); 156 KEYCODE_NAME_MAP.put(129, "AGAIN"); 157 KEYCODE_NAME_MAP.put(130, "PROPS"); 158 KEYCODE_NAME_MAP.put(131, "UNDO"); 159 KEYCODE_NAME_MAP.put(132, "FRONT"); 160 KEYCODE_NAME_MAP.put(133, "COPY"); 161 KEYCODE_NAME_MAP.put(134, "OPEN"); 162 KEYCODE_NAME_MAP.put(135, "PASTE"); 163 KEYCODE_NAME_MAP.put(136, "FIND"); 164 KEYCODE_NAME_MAP.put(137, "CUT"); 165 KEYCODE_NAME_MAP.put(138, "HELP"); 166 KEYCODE_NAME_MAP.put(139, "MENU"); 167 KEYCODE_NAME_MAP.put(140, "CALC"); 168 KEYCODE_NAME_MAP.put(141, "SETUP"); 169 KEYCODE_NAME_MAP.put(142, "SLEEP"); 170 KEYCODE_NAME_MAP.put(143, "WAKEUP"); 171 KEYCODE_NAME_MAP.put(144, "FILE"); 172 KEYCODE_NAME_MAP.put(145, "SENDFILE"); 173 KEYCODE_NAME_MAP.put(146, "DELETEFILE"); 174 KEYCODE_NAME_MAP.put(147, "XFER"); 175 KEYCODE_NAME_MAP.put(148, "PROG1"); 176 KEYCODE_NAME_MAP.put(149, "PROG2"); 177 KEYCODE_NAME_MAP.put(150, "WWW"); 178 KEYCODE_NAME_MAP.put(151, "MSDOS"); 179 KEYCODE_NAME_MAP.put(152, "SCREENLOCK"); 180 KEYCODE_NAME_MAP.put(153, "ROTATE_DISPLAY"); 181 KEYCODE_NAME_MAP.put(154, "CYCLEWINDOWS"); 182 KEYCODE_NAME_MAP.put(155, "MAIL"); 183 KEYCODE_NAME_MAP.put(156, "BOOKMARKS"); 184 KEYCODE_NAME_MAP.put(157, "COMPUTER"); 185 KEYCODE_NAME_MAP.put(158, "BACK"); 186 KEYCODE_NAME_MAP.put(159, "FORWARD"); 187 KEYCODE_NAME_MAP.put(160, "CLOSECD"); 188 KEYCODE_NAME_MAP.put(161, "EJECTCD"); 189 KEYCODE_NAME_MAP.put(162, "EJECTCLOSECD"); 190 KEYCODE_NAME_MAP.put(163, "NEXTSONG"); 191 KEYCODE_NAME_MAP.put(164, "PLAYPAUSE"); 192 KEYCODE_NAME_MAP.put(165, "PREVIOUSSONG"); 193 KEYCODE_NAME_MAP.put(166, "STOPCD"); 194 KEYCODE_NAME_MAP.put(167, "RECORD"); 195 KEYCODE_NAME_MAP.put(168, "REWIND"); 196 KEYCODE_NAME_MAP.put(169, "PHONE"); 197 KEYCODE_NAME_MAP.put(170, "ISO"); 198 KEYCODE_NAME_MAP.put(171, "CONFIG"); 199 KEYCODE_NAME_MAP.put(172, "HOMEPAGE"); 200 KEYCODE_NAME_MAP.put(173, "REFRESH"); 201 KEYCODE_NAME_MAP.put(174, "EXIT"); 202 KEYCODE_NAME_MAP.put(175, "MOVE"); 203 KEYCODE_NAME_MAP.put(176, "EDIT"); 204 KEYCODE_NAME_MAP.put(177, "SCROLLUP"); 205 KEYCODE_NAME_MAP.put(178, "SCROLLDOWN"); 206 KEYCODE_NAME_MAP.put(179, "KPLEFTPAREN"); 207 KEYCODE_NAME_MAP.put(180, "KPRIGHTPAREN"); 208 KEYCODE_NAME_MAP.put(181, "NEW"); 209 KEYCODE_NAME_MAP.put(182, "REDO"); 210 KEYCODE_NAME_MAP.put(183, "F13"); 211 KEYCODE_NAME_MAP.put(184, "F14"); 212 KEYCODE_NAME_MAP.put(185, "F15"); 213 KEYCODE_NAME_MAP.put(186, "F16"); 214 KEYCODE_NAME_MAP.put(187, "F17"); 215 KEYCODE_NAME_MAP.put(188, "F18"); 216 KEYCODE_NAME_MAP.put(189, "F19"); 217 KEYCODE_NAME_MAP.put(190, "F20"); 218 KEYCODE_NAME_MAP.put(191, "F21"); 219 KEYCODE_NAME_MAP.put(192, "F22"); 220 KEYCODE_NAME_MAP.put(193, "F23"); 221 KEYCODE_NAME_MAP.put(194, "F24"); 222 KEYCODE_NAME_MAP.put(200, "PLAYCD"); 223 KEYCODE_NAME_MAP.put(201, "PAUSECD"); 224 KEYCODE_NAME_MAP.put(202, "PROG3"); 225 KEYCODE_NAME_MAP.put(203, "PROG4"); 226 KEYCODE_NAME_MAP.put(204, "DASHBOARD"); 227 KEYCODE_NAME_MAP.put(205, "SUSPEND"); 228 KEYCODE_NAME_MAP.put(206, "CLOSE"); 229 KEYCODE_NAME_MAP.put(207, "PLAY"); 230 KEYCODE_NAME_MAP.put(208, "FASTFORWARD"); 231 KEYCODE_NAME_MAP.put(209, "BASSBOOST"); 232 KEYCODE_NAME_MAP.put(210, "PRINT"); 233 KEYCODE_NAME_MAP.put(211, "HP"); 234 KEYCODE_NAME_MAP.put(212, "CAMERA"); 235 KEYCODE_NAME_MAP.put(213, "SOUND"); 236 KEYCODE_NAME_MAP.put(214, "QUESTION"); 237 KEYCODE_NAME_MAP.put(215, "EMAIL"); 238 KEYCODE_NAME_MAP.put(216, "CHAT"); 239 KEYCODE_NAME_MAP.put(217, "SEARCH"); 240 KEYCODE_NAME_MAP.put(218, "CONNECT"); 241 KEYCODE_NAME_MAP.put(219, "FINANCE"); 242 KEYCODE_NAME_MAP.put(220, "SPORT"); 243 KEYCODE_NAME_MAP.put(221, "SHOP"); 244 KEYCODE_NAME_MAP.put(222, "ALTERASE"); 245 KEYCODE_NAME_MAP.put(223, "CANCEL"); 246 KEYCODE_NAME_MAP.put(224, "BRIGHTNESSDOWN"); 247 KEYCODE_NAME_MAP.put(225, "BRIGHTNESSUP"); 248 KEYCODE_NAME_MAP.put(226, "MEDIA"); 249 KEYCODE_NAME_MAP.put(227, "SWITCHVIDEOMODE"); 250 KEYCODE_NAME_MAP.put(228, "KBDILLUMTOGGLE"); 251 KEYCODE_NAME_MAP.put(229, "KBDILLUMDOWN"); 252 KEYCODE_NAME_MAP.put(230, "KBDILLUMUP"); 253 KEYCODE_NAME_MAP.put(231, "SEND"); 254 KEYCODE_NAME_MAP.put(232, "REPLY"); 255 KEYCODE_NAME_MAP.put(233, "FORWARDMAIL"); 256 KEYCODE_NAME_MAP.put(234, "SAVE"); 257 KEYCODE_NAME_MAP.put(235, "DOCUMENTS"); 258 KEYCODE_NAME_MAP.put(236, "BATTERY"); 259 KEYCODE_NAME_MAP.put(237, "BLUETOOTH"); 260 KEYCODE_NAME_MAP.put(238, "WLAN"); 261 KEYCODE_NAME_MAP.put(239, "UWB"); 262 KEYCODE_NAME_MAP.put(240, "UNKNOWN"); 263 KEYCODE_NAME_MAP.put(241, "VIDEO_NEXT"); 264 KEYCODE_NAME_MAP.put(242, "VIDEO_PREV"); 265 KEYCODE_NAME_MAP.put(243, "BRIGHTNESS_CYCLE"); 266 KEYCODE_NAME_MAP.put(244, "BRIGHTNESS_AUTO"); 267 KEYCODE_NAME_MAP.put(245, "DISPLAY_OFF"); 268 KEYCODE_NAME_MAP.put(246, "WWAN"); 269 KEYCODE_NAME_MAP.put(247, "RFKILL"); 270 KEYCODE_NAME_MAP.put(248, "MICMUTE"); 271 KEYCODE_NAME_MAP.put(0x160, "OK"); 272 KEYCODE_NAME_MAP.put(0x161, "SELECT"); 273 KEYCODE_NAME_MAP.put(0x162, "GOTO"); 274 KEYCODE_NAME_MAP.put(0x163, "CLEAR"); 275 KEYCODE_NAME_MAP.put(0x164, "POWER2"); 276 KEYCODE_NAME_MAP.put(0x165, "OPTION"); 277 KEYCODE_NAME_MAP.put(0x166, "INFO"); 278 KEYCODE_NAME_MAP.put(0x167, "TIME"); 279 KEYCODE_NAME_MAP.put(0x168, "VENDOR"); 280 KEYCODE_NAME_MAP.put(0x169, "ARCHIVE"); 281 KEYCODE_NAME_MAP.put(0x16a, "PROGRAM"); 282 KEYCODE_NAME_MAP.put(0x16b, "CHANNEL"); 283 KEYCODE_NAME_MAP.put(0x16c, "FAVORITES"); 284 KEYCODE_NAME_MAP.put(0x16d, "EPG"); 285 KEYCODE_NAME_MAP.put(0x16e, "PVR"); 286 KEYCODE_NAME_MAP.put(0x16f, "MHP"); 287 KEYCODE_NAME_MAP.put(0x170, "LANGUAGE"); 288 KEYCODE_NAME_MAP.put(0x171, "TITLE"); 289 KEYCODE_NAME_MAP.put(0x172, "SUBTITLE"); 290 KEYCODE_NAME_MAP.put(0x173, "ANGLE"); 291 KEYCODE_NAME_MAP.put(0x174, "ZOOM"); 292 KEYCODE_NAME_MAP.put(0x175, "MODE"); 293 KEYCODE_NAME_MAP.put(0x176, "KEYBOARD"); 294 KEYCODE_NAME_MAP.put(0x177, "SCREEN"); 295 KEYCODE_NAME_MAP.put(0x178, "PC"); 296 KEYCODE_NAME_MAP.put(0x179, "TV"); 297 KEYCODE_NAME_MAP.put(0x17a, "TV2"); 298 KEYCODE_NAME_MAP.put(0x17b, "VCR"); 299 KEYCODE_NAME_MAP.put(0x17c, "VCR2"); 300 KEYCODE_NAME_MAP.put(0x17d, "SAT"); 301 KEYCODE_NAME_MAP.put(0x17e, "SAT2"); 302 KEYCODE_NAME_MAP.put(0x17f, "CD"); 303 KEYCODE_NAME_MAP.put(0x180, "TAPE"); 304 KEYCODE_NAME_MAP.put(0x181, "RADIO"); 305 KEYCODE_NAME_MAP.put(0x182, "TUNER"); 306 KEYCODE_NAME_MAP.put(0x183, "PLAYER"); 307 KEYCODE_NAME_MAP.put(0x184, "TEXT"); 308 KEYCODE_NAME_MAP.put(0x185, "DVD"); 309 KEYCODE_NAME_MAP.put(0x186, "AUX"); 310 KEYCODE_NAME_MAP.put(0x187, "MP3"); 311 KEYCODE_NAME_MAP.put(0x188, "AUDIO"); 312 KEYCODE_NAME_MAP.put(0x189, "VIDEO"); 313 KEYCODE_NAME_MAP.put(0x18a, "DIRECTORY"); 314 KEYCODE_NAME_MAP.put(0x18b, "LIST"); 315 KEYCODE_NAME_MAP.put(0x18c, "MEMO"); 316 KEYCODE_NAME_MAP.put(0x18d, "CALENDAR"); 317 KEYCODE_NAME_MAP.put(0x18e, "RED"); 318 KEYCODE_NAME_MAP.put(0x18f, "GREEN"); 319 KEYCODE_NAME_MAP.put(0x190, "YELLOW"); 320 KEYCODE_NAME_MAP.put(0x191, "BLUE"); 321 KEYCODE_NAME_MAP.put(0x192, "CHANNELUP"); 322 KEYCODE_NAME_MAP.put(0x193, "CHANNELDOWN"); 323 KEYCODE_NAME_MAP.put(0x194, "FIRST"); 324 KEYCODE_NAME_MAP.put(0x195, "LAST"); 325 KEYCODE_NAME_MAP.put(0x196, "AB"); 326 KEYCODE_NAME_MAP.put(0x197, "NEXT"); 327 KEYCODE_NAME_MAP.put(0x198, "RESTART"); 328 KEYCODE_NAME_MAP.put(0x199, "SLOW"); 329 KEYCODE_NAME_MAP.put(0x19a, "SHUFFLE"); 330 KEYCODE_NAME_MAP.put(0x19b, "BREAK"); 331 KEYCODE_NAME_MAP.put(0x19c, "PREVIOUS"); 332 KEYCODE_NAME_MAP.put(0x19d, "DIGITS"); 333 KEYCODE_NAME_MAP.put(0x19e, "TEEN"); 334 KEYCODE_NAME_MAP.put(0x19f, "TWEN"); 335 KEYCODE_NAME_MAP.put(0x1a0, "VIDEOPHONE"); 336 KEYCODE_NAME_MAP.put(0x1a1, "GAMES"); 337 KEYCODE_NAME_MAP.put(0x1a2, "ZOOMIN"); 338 KEYCODE_NAME_MAP.put(0x1a3, "ZOOMOUT"); 339 KEYCODE_NAME_MAP.put(0x1a4, "ZOOMRESET"); 340 KEYCODE_NAME_MAP.put(0x1a5, "WORDPROCESSOR"); 341 KEYCODE_NAME_MAP.put(0x1a6, "EDITOR"); 342 KEYCODE_NAME_MAP.put(0x1a7, "SPREADSHEET"); 343 KEYCODE_NAME_MAP.put(0x1a8, "GRAPHICSEDITOR"); 344 KEYCODE_NAME_MAP.put(0x1a9, "PRESENTATION"); 345 KEYCODE_NAME_MAP.put(0x1aa, "DATABASE"); 346 KEYCODE_NAME_MAP.put(0x1ab, "NEWS"); 347 KEYCODE_NAME_MAP.put(0x1ac, "VOICEMAIL"); 348 KEYCODE_NAME_MAP.put(0x1ad, "ADDRESSBOOK"); 349 KEYCODE_NAME_MAP.put(0x1ae, "MESSENGER"); 350 KEYCODE_NAME_MAP.put(0x1af, "DISPLAYTOGGLE"); 351 KEYCODE_NAME_MAP.put(0x1b0, "SPELLCHECK"); 352 KEYCODE_NAME_MAP.put(0x1b1, "LOGOFF"); 353 KEYCODE_NAME_MAP.put(0x1b2, "DOLLAR"); 354 KEYCODE_NAME_MAP.put(0x1b3, "EURO"); 355 KEYCODE_NAME_MAP.put(0x1b4, "FRAMEBACK"); 356 KEYCODE_NAME_MAP.put(0x1b5, "FRAMEFORWARD"); 357 KEYCODE_NAME_MAP.put(0x1b6, "CONTEXT_MENU"); 358 KEYCODE_NAME_MAP.put(0x1b7, "MEDIA_REPEAT"); 359 KEYCODE_NAME_MAP.put(0x1b8, "10CHANNELSUP"); 360 KEYCODE_NAME_MAP.put(0x1b9, "10CHANNELSDOWN"); 361 KEYCODE_NAME_MAP.put(0x1ba, "IMAGES"); 362 KEYCODE_NAME_MAP.put(0x1c0, "DEL_EOL"); 363 KEYCODE_NAME_MAP.put(0x1c1, "DEL_EOS"); 364 KEYCODE_NAME_MAP.put(0x1c2, "INS_LINE"); 365 KEYCODE_NAME_MAP.put(0x1c3, "DEL_LINE"); 366 KEYCODE_NAME_MAP.put(0x1d0, "FN"); 367 KEYCODE_NAME_MAP.put(0x1d1, "FN_ESC"); 368 KEYCODE_NAME_MAP.put(0x1d2, "FN_F1"); 369 KEYCODE_NAME_MAP.put(0x1d3, "FN_F2"); 370 KEYCODE_NAME_MAP.put(0x1d4, "FN_F3"); 371 KEYCODE_NAME_MAP.put(0x1d5, "FN_F4"); 372 KEYCODE_NAME_MAP.put(0x1d6, "FN_F5"); 373 KEYCODE_NAME_MAP.put(0x1d7, "FN_F6"); 374 KEYCODE_NAME_MAP.put(0x1d8, "FN_F7"); 375 KEYCODE_NAME_MAP.put(0x1d9, "FN_F8"); 376 KEYCODE_NAME_MAP.put(0x1da, "FN_F9"); 377 KEYCODE_NAME_MAP.put(0x1db, "FN_F10"); 378 KEYCODE_NAME_MAP.put(0x1dc, "FN_F11"); 379 KEYCODE_NAME_MAP.put(0x1dd, "FN_F12"); 380 KEYCODE_NAME_MAP.put(0x1de, "FN_1"); 381 KEYCODE_NAME_MAP.put(0x1df, "FN_2"); 382 KEYCODE_NAME_MAP.put(0x1e0, "FN_D"); 383 KEYCODE_NAME_MAP.put(0x1e1, "FN_E"); 384 KEYCODE_NAME_MAP.put(0x1e2, "FN_F"); 385 KEYCODE_NAME_MAP.put(0x1e3, "FN_S"); 386 KEYCODE_NAME_MAP.put(0x1e4, "FN_B"); 387 KEYCODE_NAME_MAP.put(0x1f1, "BRL_DOT1"); 388 KEYCODE_NAME_MAP.put(0x1f2, "BRL_DOT2"); 389 KEYCODE_NAME_MAP.put(0x1f3, "BRL_DOT3"); 390 KEYCODE_NAME_MAP.put(0x1f4, "BRL_DOT4"); 391 KEYCODE_NAME_MAP.put(0x1f5, "BRL_DOT5"); 392 KEYCODE_NAME_MAP.put(0x1f6, "BRL_DOT6"); 393 KEYCODE_NAME_MAP.put(0x1f7, "BRL_DOT7"); 394 KEYCODE_NAME_MAP.put(0x1f8, "BRL_DOT8"); 395 KEYCODE_NAME_MAP.put(0x1f9, "BRL_DOT9"); 396 KEYCODE_NAME_MAP.put(0x1fa, "BRL_DOT10"); 397 KEYCODE_NAME_MAP.put(0x200, "NUMERIC_0"); 398 KEYCODE_NAME_MAP.put(0x201, "NUMERIC_1"); 399 KEYCODE_NAME_MAP.put(0x202, "NUMERIC_2"); 400 KEYCODE_NAME_MAP.put(0x203, "NUMERIC_3"); 401 KEYCODE_NAME_MAP.put(0x204, "NUMERIC_4"); 402 KEYCODE_NAME_MAP.put(0x205, "NUMERIC_5"); 403 KEYCODE_NAME_MAP.put(0x206, "NUMERIC_6"); 404 KEYCODE_NAME_MAP.put(0x207, "NUMERIC_7"); 405 KEYCODE_NAME_MAP.put(0x208, "NUMERIC_8"); 406 KEYCODE_NAME_MAP.put(0x209, "NUMERIC_9"); 407 KEYCODE_NAME_MAP.put(0x20a, "NUMERIC_STAR"); 408 KEYCODE_NAME_MAP.put(0x20b, "NUMERIC_POUND"); 409 KEYCODE_NAME_MAP.put(0x20c, "NUMERIC_A"); 410 KEYCODE_NAME_MAP.put(0x20d, "NUMERIC_B"); 411 KEYCODE_NAME_MAP.put(0x20e, "NUMERIC_C"); 412 KEYCODE_NAME_MAP.put(0x20f, "NUMERIC_D"); 413 KEYCODE_NAME_MAP.put(0x210, "CAMERA_FOCUS"); 414 KEYCODE_NAME_MAP.put(0x211, "WPS_BUTTON"); 415 KEYCODE_NAME_MAP.put(0x212, "TOUCHPAD_TOGGLE"); 416 KEYCODE_NAME_MAP.put(0x213, "TOUCHPAD_ON"); 417 KEYCODE_NAME_MAP.put(0x214, "TOUCHPAD_OFF"); 418 KEYCODE_NAME_MAP.put(0x215, "CAMERA_ZOOMIN"); 419 KEYCODE_NAME_MAP.put(0x216, "CAMERA_ZOOMOUT"); 420 KEYCODE_NAME_MAP.put(0x217, "CAMERA_UP"); 421 KEYCODE_NAME_MAP.put(0x218, "CAMERA_DOWN"); 422 KEYCODE_NAME_MAP.put(0x219, "CAMERA_LEFT"); 423 KEYCODE_NAME_MAP.put(0x21a, "CAMERA_RIGHT"); 424 KEYCODE_NAME_MAP.put(0x21b, "ATTENDANT_ON"); 425 KEYCODE_NAME_MAP.put(0x21c, "ATTENDANT_OFF"); 426 KEYCODE_NAME_MAP.put(0x21d, "ATTENDANT_TOGGLE"); 427 KEYCODE_NAME_MAP.put(0x21e, "LIGHTS_TOGGLE"); 428 KEYCODE_NAME_MAP.put(0x230, "ALS_TOGGLE"); 429 KEYCODE_NAME_MAP.put(0x240, "BUTTONCONFIG"); 430 KEYCODE_NAME_MAP.put(0x241, "TASKMANAGER"); 431 KEYCODE_NAME_MAP.put(0x242, "JOURNAL"); 432 KEYCODE_NAME_MAP.put(0x243, "CONTROLPANEL"); 433 KEYCODE_NAME_MAP.put(0x244, "APPSELECT"); 434 KEYCODE_NAME_MAP.put(0x245, "SCREENSAVER"); 435 KEYCODE_NAME_MAP.put(0x246, "VOICECOMMAND"); 436 KEYCODE_NAME_MAP.put(0x247, "ASSISTANT"); 437 KEYCODE_NAME_MAP.put(0x250, "BRIGHTNESS_MIN"); 438 KEYCODE_NAME_MAP.put(0x251, "BRIGHTNESS_MAX"); 439 KEYCODE_NAME_MAP.put(0x260, "KBDINPUTASSIST_PREV"); 440 KEYCODE_NAME_MAP.put(0x261, "KBDINPUTASSIST_NEXT"); 441 KEYCODE_NAME_MAP.put(0x262, "KBDINPUTASSIST_PREVGROUP"); 442 KEYCODE_NAME_MAP.put(0x263, "KBDINPUTASSIST_NEXTGROUP"); 443 KEYCODE_NAME_MAP.put(0x264, "KBDINPUTASSIST_ACCEPT"); 444 KEYCODE_NAME_MAP.put(0x265, "KBDINPUTASSIST_CANCEL"); 445 KEYCODE_NAME_MAP.put(0x266, "RIGHT_UP"); 446 KEYCODE_NAME_MAP.put(0x267, "RIGHT_DOWN"); 447 KEYCODE_NAME_MAP.put(0x268, "LEFT_UP"); 448 KEYCODE_NAME_MAP.put(0x269, "LEFT_DOWN"); 449 KEYCODE_NAME_MAP.put(0x26a, "ROOT_MENU"); 450 KEYCODE_NAME_MAP.put(0x26b, "MEDIA_TOP_MENU"); 451 KEYCODE_NAME_MAP.put(0x26c, "NUMERIC_11"); 452 KEYCODE_NAME_MAP.put(0x26d, "NUMERIC_12"); 453 KEYCODE_NAME_MAP.put(0x26e, "AUDIO_DESC"); 454 KEYCODE_NAME_MAP.put(0x26f, "3D_MODE"); 455 KEYCODE_NAME_MAP.put(0x270, "NEXT_FAVORITE"); 456 KEYCODE_NAME_MAP.put(0x271, "STOP_RECORD"); 457 KEYCODE_NAME_MAP.put(0x272, "PAUSE_RECORD"); 458 KEYCODE_NAME_MAP.put(0x273, "VOD"); 459 KEYCODE_NAME_MAP.put(0x274, "UNMUTE"); 460 KEYCODE_NAME_MAP.put(0x275, "FASTREVERSE"); 461 KEYCODE_NAME_MAP.put(0x276, "SLOWREVERSE"); 462 KEYCODE_NAME_MAP.put(0x277, "DATA"); 463 KEYCODE_NAME_MAP.put(0x278, "ONSCREEN_KEYBOARD"); 464 KEYCODE_NAME_MAP.put(113, "MIN_INTERESTING"); 465 KEYCODE_NAME_MAP.put(0x2ff, "MAX"); 466 KEYCODE_NAME_MAP.put(0x100, "MISC"); 467 KEYCODE_NAME_MAP.put(0x100, "0"); 468 KEYCODE_NAME_MAP.put(0x101, "1"); 469 KEYCODE_NAME_MAP.put(0x102, "2"); 470 KEYCODE_NAME_MAP.put(0x103, "3"); 471 KEYCODE_NAME_MAP.put(0x104, "4"); 472 KEYCODE_NAME_MAP.put(0x105, "5"); 473 KEYCODE_NAME_MAP.put(0x106, "6"); 474 KEYCODE_NAME_MAP.put(0x107, "7"); 475 KEYCODE_NAME_MAP.put(0x108, "8"); 476 KEYCODE_NAME_MAP.put(0x109, "9"); 477 KEYCODE_NAME_MAP.put(0x110, "MOUSE"); 478 KEYCODE_NAME_MAP.put(0x110, "LEFT"); 479 KEYCODE_NAME_MAP.put(0x111, "RIGHT"); 480 KEYCODE_NAME_MAP.put(0x112, "MIDDLE"); 481 KEYCODE_NAME_MAP.put(0x113, "SIDE"); 482 KEYCODE_NAME_MAP.put(0x114, "EXTRA"); 483 KEYCODE_NAME_MAP.put(0x115, "FORWARD"); 484 KEYCODE_NAME_MAP.put(0x116, "BACK"); 485 KEYCODE_NAME_MAP.put(0x117, "TASK"); 486 KEYCODE_NAME_MAP.put(0x120, "JOYSTICK"); 487 KEYCODE_NAME_MAP.put(0x120, "TRIGGER"); 488 KEYCODE_NAME_MAP.put(0x121, "THUMB"); 489 KEYCODE_NAME_MAP.put(0x122, "THUMB2"); 490 KEYCODE_NAME_MAP.put(0x123, "TOP"); 491 KEYCODE_NAME_MAP.put(0x124, "TOP2"); 492 KEYCODE_NAME_MAP.put(0x125, "PINKIE"); 493 KEYCODE_NAME_MAP.put(0x126, "BASE"); 494 KEYCODE_NAME_MAP.put(0x127, "BASE2"); 495 KEYCODE_NAME_MAP.put(0x128, "BASE3"); 496 KEYCODE_NAME_MAP.put(0x129, "BASE4"); 497 KEYCODE_NAME_MAP.put(0x12a, "BASE5"); 498 KEYCODE_NAME_MAP.put(0x12b, "BASE6"); 499 KEYCODE_NAME_MAP.put(0x12f, "DEAD"); 500 KEYCODE_NAME_MAP.put(0x130, "GAMEPAD"); 501 KEYCODE_NAME_MAP.put(0x130, "SOUTH"); 502 KEYCODE_NAME_MAP.put(0x131, "EAST"); 503 KEYCODE_NAME_MAP.put(0x132, "C"); 504 KEYCODE_NAME_MAP.put(0x133, "NORTH"); 505 KEYCODE_NAME_MAP.put(0x134, "WEST"); 506 KEYCODE_NAME_MAP.put(0x135, "Z"); 507 KEYCODE_NAME_MAP.put(0x136, "TL"); 508 KEYCODE_NAME_MAP.put(0x137, "TR"); 509 KEYCODE_NAME_MAP.put(0x138, "TL2"); 510 KEYCODE_NAME_MAP.put(0x139, "TR2"); 511 KEYCODE_NAME_MAP.put(0x13a, "SELECT"); 512 KEYCODE_NAME_MAP.put(0x13b, "START"); 513 KEYCODE_NAME_MAP.put(0x13c, "MODE"); 514 KEYCODE_NAME_MAP.put(0x13d, "THUMBL"); 515 KEYCODE_NAME_MAP.put(0x13e, "THUMBR"); 516 KEYCODE_NAME_MAP.put(0x140, "DIGI"); 517 KEYCODE_NAME_MAP.put(0x140, "TOOL_PEN"); 518 KEYCODE_NAME_MAP.put(0x141, "TOOL_RUBBER"); 519 KEYCODE_NAME_MAP.put(0x142, "TOOL_BRUSH"); 520 KEYCODE_NAME_MAP.put(0x143, "TOOL_PENCIL"); 521 KEYCODE_NAME_MAP.put(0x144, "TOOL_AIRBRUSH"); 522 KEYCODE_NAME_MAP.put(0x145, "TOOL_FINGER"); 523 KEYCODE_NAME_MAP.put(0x146, "TOOL_MOUSE"); 524 KEYCODE_NAME_MAP.put(0x147, "TOOL_LENS"); 525 KEYCODE_NAME_MAP.put(0x148, "TOOL_QUINTTAP"); 526 KEYCODE_NAME_MAP.put(0x149, "STYLUS3"); 527 KEYCODE_NAME_MAP.put(0x14a, "TOUCH"); 528 KEYCODE_NAME_MAP.put(0x14b, "STYLUS"); 529 KEYCODE_NAME_MAP.put(0x14c, "STYLUS2"); 530 KEYCODE_NAME_MAP.put(0x14d, "TOOL_DOUBLETAP"); 531 KEYCODE_NAME_MAP.put(0x14e, "TOOL_TRIPLETAP"); 532 KEYCODE_NAME_MAP.put(0x14f, "TOOL_QUADTAP"); 533 KEYCODE_NAME_MAP.put(0x150, "WHEEL"); 534 KEYCODE_NAME_MAP.put(0x150, "GEAR_DOWN"); 535 KEYCODE_NAME_MAP.put(0x151, "GEAR_UP"); 536 KEYCODE_NAME_MAP.put(0x220, "DPAD_UP"); 537 KEYCODE_NAME_MAP.put(0x221, "DPAD_DOWN"); 538 KEYCODE_NAME_MAP.put(0x222, "DPAD_LEFT"); 539 KEYCODE_NAME_MAP.put(0x223, "DPAD_RIGHT"); 540 KEYCODE_NAME_MAP.put(0x2c0, "TRIGGER_HAPPY"); 541 KEYCODE_NAME_MAP.put(0x2c0, "TRIGGER_HAPPY1"); 542 KEYCODE_NAME_MAP.put(0x2c1, "TRIGGER_HAPPY2"); 543 KEYCODE_NAME_MAP.put(0x2c2, "TRIGGER_HAPPY3"); 544 KEYCODE_NAME_MAP.put(0x2c3, "TRIGGER_HAPPY4"); 545 KEYCODE_NAME_MAP.put(0x2c4, "TRIGGER_HAPPY5"); 546 KEYCODE_NAME_MAP.put(0x2c5, "TRIGGER_HAPPY6"); 547 KEYCODE_NAME_MAP.put(0x2c6, "TRIGGER_HAPPY7"); 548 KEYCODE_NAME_MAP.put(0x2c7, "TRIGGER_HAPPY8"); 549 KEYCODE_NAME_MAP.put(0x2c8, "TRIGGER_HAPPY9"); 550 KEYCODE_NAME_MAP.put(0x2c9, "TRIGGER_HAPPY10"); 551 KEYCODE_NAME_MAP.put(0x2ca, "TRIGGER_HAPPY11"); 552 KEYCODE_NAME_MAP.put(0x2cb, "TRIGGER_HAPPY12"); 553 KEYCODE_NAME_MAP.put(0x2cc, "TRIGGER_HAPPY13"); 554 KEYCODE_NAME_MAP.put(0x2cd, "TRIGGER_HAPPY14"); 555 KEYCODE_NAME_MAP.put(0x2ce, "TRIGGER_HAPPY15"); 556 KEYCODE_NAME_MAP.put(0x2cf, "TRIGGER_HAPPY16"); 557 KEYCODE_NAME_MAP.put(0x2d0, "TRIGGER_HAPPY17"); 558 KEYCODE_NAME_MAP.put(0x2d1, "TRIGGER_HAPPY18"); 559 KEYCODE_NAME_MAP.put(0x2d2, "TRIGGER_HAPPY19"); 560 KEYCODE_NAME_MAP.put(0x2d3, "TRIGGER_HAPPY20"); 561 KEYCODE_NAME_MAP.put(0x2d4, "TRIGGER_HAPPY21"); 562 KEYCODE_NAME_MAP.put(0x2d5, "TRIGGER_HAPPY22"); 563 KEYCODE_NAME_MAP.put(0x2d6, "TRIGGER_HAPPY23"); 564 KEYCODE_NAME_MAP.put(0x2d7, "TRIGGER_HAPPY24"); 565 KEYCODE_NAME_MAP.put(0x2d8, "TRIGGER_HAPPY25"); 566 KEYCODE_NAME_MAP.put(0x2d9, "TRIGGER_HAPPY26"); 567 KEYCODE_NAME_MAP.put(0x2da, "TRIGGER_HAPPY27"); 568 KEYCODE_NAME_MAP.put(0x2db, "TRIGGER_HAPPY28"); 569 KEYCODE_NAME_MAP.put(0x2dc, "TRIGGER_HAPPY29"); 570 KEYCODE_NAME_MAP.put(0x2dd, "TRIGGER_HAPPY30"); 571 KEYCODE_NAME_MAP.put(0x2de, "TRIGGER_HAPPY31"); 572 KEYCODE_NAME_MAP.put(0x2df, "TRIGGER_HAPPY32"); 573 KEYCODE_NAME_MAP.put(0x2e0, "TRIGGER_HAPPY33"); 574 KEYCODE_NAME_MAP.put(0x2e1, "TRIGGER_HAPPY34"); 575 KEYCODE_NAME_MAP.put(0x2e2, "TRIGGER_HAPPY35"); 576 KEYCODE_NAME_MAP.put(0x2e3, "TRIGGER_HAPPY36"); 577 KEYCODE_NAME_MAP.put(0x2e4, "TRIGGER_HAPPY37"); 578 KEYCODE_NAME_MAP.put(0x2e5, "TRIGGER_HAPPY38"); 579 KEYCODE_NAME_MAP.put(0x2e6, "TRIGGER_HAPPY39"); 580 KEYCODE_NAME_MAP.put(0x2e7, "TRIGGER_HAPPY40"); 581 } 582 583 public final String source; 584 public final int keycode; 585 public final boolean isKeydown; 586 587 public static final Parcelable.Creator<KeypressEvent> CREATOR = 588 new Parcelable.Creator<KeypressEvent>() { 589 public KeypressEvent createFromParcel(Parcel in) { 590 return new KeypressEvent(in); 591 } 592 593 public KeypressEvent[] newArray(int size) { 594 return new KeypressEvent[size]; 595 } 596 }; 597 KeypressEvent(Parcel in)598 public KeypressEvent(Parcel in) { 599 source = in.readString(); 600 keycode = in.readInt(); 601 isKeydown = (in.readInt() != 0); 602 } 603 604 @Override describeContents()605 public int describeContents() { 606 return 0; 607 } 608 609 @Override writeToParcel(Parcel dest, int flags)610 public void writeToParcel(Parcel dest, int flags) { 611 dest.writeString(source); 612 dest.writeInt(keycode); 613 dest.writeInt(isKeydown ? 1 : 0); 614 } 615 616 @Override equals(Object o)617 public boolean equals(Object o) { 618 if (o instanceof KeypressEvent) { 619 KeypressEvent other = (KeypressEvent)o; 620 return other.source.equals(source) && 621 other.keycode == keycode && 622 other.isKeydown == isKeydown; 623 } 624 return false; 625 } 626 627 @Override hashCode()628 public int hashCode() { 629 return Objects.hash(source, keycode, isKeydown); 630 } 631 632 @Override toString()633 public String toString() { 634 return"Event{source = " + source + ", keycode = " + keycode + 635 ", isKeydown = " + isKeydown + "}"; 636 } 637 keycodeToString()638 public String keycodeToString() { 639 return keycodeToString(keycode); 640 } 641 642 /** 643 * Translates a key code from keventreader into a string. 644 * @param keycode Key code from a keventreader KeypressEvent. 645 * @return String String label corresponding to keycode, if available. If not, String with 646 * hexidecimal representation of keycode. 647 */ keycodeToString(int keycode)648 public static String keycodeToString(int keycode) { 649 String ret = KEYCODE_NAME_MAP.get(keycode); 650 return ret != null ? ret : "0x" + Integer.toHexString(keycode); 651 } 652 } 653