SDL_androidkeyboard.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. /*
  2. Simple DirectMedia Layer
  3. Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
  4. This software is provided 'as-is', without any express or implied
  5. warranty. In no event will the authors be held liable for any damages
  6. arising from the use of this software.
  7. Permission is granted to anyone to use this software for any purpose,
  8. including commercial applications, and to alter it and redistribute it
  9. freely, subject to the following restrictions:
  10. 1. The origin of this software must not be misrepresented; you must not
  11. claim that you wrote the original software. If you use this software
  12. in a product, an acknowledgment in the product documentation would be
  13. appreciated but is not required.
  14. 2. Altered source versions must be plainly marked as such, and must not be
  15. misrepresented as being the original software.
  16. 3. This notice may not be removed or altered from any source distribution.
  17. */
  18. #include "SDL_internal.h"
  19. #ifdef SDL_VIDEO_DRIVER_ANDROID
  20. #include <android/log.h>
  21. #include "../../events/SDL_events_c.h"
  22. #include "SDL_androidkeyboard.h"
  23. #include "../../core/android/SDL_android.h"
  24. static SDL_Scancode Android_Keycodes[] = {
  25. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_UNKNOWN */
  26. SDL_SCANCODE_SOFTLEFT, /* AKEYCODE_SOFT_LEFT */
  27. SDL_SCANCODE_SOFTRIGHT, /* AKEYCODE_SOFT_RIGHT */
  28. SDL_SCANCODE_AC_HOME, /* AKEYCODE_HOME */
  29. SDL_SCANCODE_AC_BACK, /* AKEYCODE_BACK */
  30. SDL_SCANCODE_CALL, /* AKEYCODE_CALL */
  31. SDL_SCANCODE_ENDCALL, /* AKEYCODE_ENDCALL */
  32. SDL_SCANCODE_0, /* AKEYCODE_0 */
  33. SDL_SCANCODE_1, /* AKEYCODE_1 */
  34. SDL_SCANCODE_2, /* AKEYCODE_2 */
  35. SDL_SCANCODE_3, /* AKEYCODE_3 */
  36. SDL_SCANCODE_4, /* AKEYCODE_4 */
  37. SDL_SCANCODE_5, /* AKEYCODE_5 */
  38. SDL_SCANCODE_6, /* AKEYCODE_6 */
  39. SDL_SCANCODE_7, /* AKEYCODE_7 */
  40. SDL_SCANCODE_8, /* AKEYCODE_8 */
  41. SDL_SCANCODE_9, /* AKEYCODE_9 */
  42. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STAR */
  43. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_POUND */
  44. SDL_SCANCODE_UP, /* AKEYCODE_DPAD_UP */
  45. SDL_SCANCODE_DOWN, /* AKEYCODE_DPAD_DOWN */
  46. SDL_SCANCODE_LEFT, /* AKEYCODE_DPAD_LEFT */
  47. SDL_SCANCODE_RIGHT, /* AKEYCODE_DPAD_RIGHT */
  48. SDL_SCANCODE_SELECT, /* AKEYCODE_DPAD_CENTER */
  49. SDL_SCANCODE_VOLUMEUP, /* AKEYCODE_VOLUME_UP */
  50. SDL_SCANCODE_VOLUMEDOWN, /* AKEYCODE_VOLUME_DOWN */
  51. SDL_SCANCODE_POWER, /* AKEYCODE_POWER */
  52. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CAMERA */
  53. SDL_SCANCODE_CLEAR, /* AKEYCODE_CLEAR */
  54. SDL_SCANCODE_A, /* AKEYCODE_A */
  55. SDL_SCANCODE_B, /* AKEYCODE_B */
  56. SDL_SCANCODE_C, /* AKEYCODE_C */
  57. SDL_SCANCODE_D, /* AKEYCODE_D */
  58. SDL_SCANCODE_E, /* AKEYCODE_E */
  59. SDL_SCANCODE_F, /* AKEYCODE_F */
  60. SDL_SCANCODE_G, /* AKEYCODE_G */
  61. SDL_SCANCODE_H, /* AKEYCODE_H */
  62. SDL_SCANCODE_I, /* AKEYCODE_I */
  63. SDL_SCANCODE_J, /* AKEYCODE_J */
  64. SDL_SCANCODE_K, /* AKEYCODE_K */
  65. SDL_SCANCODE_L, /* AKEYCODE_L */
  66. SDL_SCANCODE_M, /* AKEYCODE_M */
  67. SDL_SCANCODE_N, /* AKEYCODE_N */
  68. SDL_SCANCODE_O, /* AKEYCODE_O */
  69. SDL_SCANCODE_P, /* AKEYCODE_P */
  70. SDL_SCANCODE_Q, /* AKEYCODE_Q */
  71. SDL_SCANCODE_R, /* AKEYCODE_R */
  72. SDL_SCANCODE_S, /* AKEYCODE_S */
  73. SDL_SCANCODE_T, /* AKEYCODE_T */
  74. SDL_SCANCODE_U, /* AKEYCODE_U */
  75. SDL_SCANCODE_V, /* AKEYCODE_V */
  76. SDL_SCANCODE_W, /* AKEYCODE_W */
  77. SDL_SCANCODE_X, /* AKEYCODE_X */
  78. SDL_SCANCODE_Y, /* AKEYCODE_Y */
  79. SDL_SCANCODE_Z, /* AKEYCODE_Z */
  80. SDL_SCANCODE_COMMA, /* AKEYCODE_COMMA */
  81. SDL_SCANCODE_PERIOD, /* AKEYCODE_PERIOD */
  82. SDL_SCANCODE_LALT, /* AKEYCODE_ALT_LEFT */
  83. SDL_SCANCODE_RALT, /* AKEYCODE_ALT_RIGHT */
  84. SDL_SCANCODE_LSHIFT, /* AKEYCODE_SHIFT_LEFT */
  85. SDL_SCANCODE_RSHIFT, /* AKEYCODE_SHIFT_RIGHT */
  86. SDL_SCANCODE_TAB, /* AKEYCODE_TAB */
  87. SDL_SCANCODE_SPACE, /* AKEYCODE_SPACE */
  88. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SYM */
  89. SDL_SCANCODE_WWW, /* AKEYCODE_EXPLORER */
  90. SDL_SCANCODE_MAIL, /* AKEYCODE_ENVELOPE */
  91. SDL_SCANCODE_RETURN, /* AKEYCODE_ENTER */
  92. SDL_SCANCODE_BACKSPACE, /* AKEYCODE_DEL */
  93. SDL_SCANCODE_GRAVE, /* AKEYCODE_GRAVE */
  94. SDL_SCANCODE_MINUS, /* AKEYCODE_MINUS */
  95. SDL_SCANCODE_EQUALS, /* AKEYCODE_EQUALS */
  96. SDL_SCANCODE_LEFTBRACKET, /* AKEYCODE_LEFT_BRACKET */
  97. SDL_SCANCODE_RIGHTBRACKET, /* AKEYCODE_RIGHT_BRACKET */
  98. SDL_SCANCODE_BACKSLASH, /* AKEYCODE_BACKSLASH */
  99. SDL_SCANCODE_SEMICOLON, /* AKEYCODE_SEMICOLON */
  100. SDL_SCANCODE_APOSTROPHE, /* AKEYCODE_APOSTROPHE */
  101. SDL_SCANCODE_SLASH, /* AKEYCODE_SLASH */
  102. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_AT */
  103. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NUM */
  104. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_HEADSETHOOK */
  105. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_FOCUS */
  106. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PLUS */
  107. SDL_SCANCODE_MENU, /* AKEYCODE_MENU */
  108. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NOTIFICATION */
  109. SDL_SCANCODE_AC_SEARCH, /* AKEYCODE_SEARCH */
  110. SDL_SCANCODE_AUDIOPLAY, /* AKEYCODE_MEDIA_PLAY_PAUSE */
  111. SDL_SCANCODE_AUDIOSTOP, /* AKEYCODE_MEDIA_STOP */
  112. SDL_SCANCODE_AUDIONEXT, /* AKEYCODE_MEDIA_NEXT */
  113. SDL_SCANCODE_AUDIOPREV, /* AKEYCODE_MEDIA_PREVIOUS */
  114. SDL_SCANCODE_AUDIOREWIND, /* AKEYCODE_MEDIA_REWIND */
  115. SDL_SCANCODE_AUDIOFASTFORWARD, /* AKEYCODE_MEDIA_FAST_FORWARD */
  116. SDL_SCANCODE_MUTE, /* AKEYCODE_MUTE */
  117. SDL_SCANCODE_PAGEUP, /* AKEYCODE_PAGE_UP */
  118. SDL_SCANCODE_PAGEDOWN, /* AKEYCODE_PAGE_DOWN */
  119. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PICTSYMBOLS */
  120. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SWITCH_CHARSET */
  121. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_A */
  122. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_B */
  123. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_C */
  124. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_X */
  125. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_Y */
  126. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_Z */
  127. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_L1 */
  128. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_R1 */
  129. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_L2 */
  130. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_R2 */
  131. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_THUMBL */
  132. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_THUMBR */
  133. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_START */
  134. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_SELECT */
  135. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_MODE */
  136. SDL_SCANCODE_ESCAPE, /* AKEYCODE_ESCAPE */
  137. SDL_SCANCODE_DELETE, /* AKEYCODE_FORWARD_DEL */
  138. SDL_SCANCODE_LCTRL, /* AKEYCODE_CTRL_LEFT */
  139. SDL_SCANCODE_RCTRL, /* AKEYCODE_CTRL_RIGHT */
  140. SDL_SCANCODE_CAPSLOCK, /* AKEYCODE_CAPS_LOCK */
  141. SDL_SCANCODE_SCROLLLOCK, /* AKEYCODE_SCROLL_LOCK */
  142. SDL_SCANCODE_LGUI, /* AKEYCODE_META_LEFT */
  143. SDL_SCANCODE_RGUI, /* AKEYCODE_META_RIGHT */
  144. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_FUNCTION */
  145. SDL_SCANCODE_PRINTSCREEN, /* AKEYCODE_SYSRQ */
  146. SDL_SCANCODE_PAUSE, /* AKEYCODE_BREAK */
  147. SDL_SCANCODE_HOME, /* AKEYCODE_MOVE_HOME */
  148. SDL_SCANCODE_END, /* AKEYCODE_MOVE_END */
  149. SDL_SCANCODE_INSERT, /* AKEYCODE_INSERT */
  150. SDL_SCANCODE_AC_FORWARD, /* AKEYCODE_FORWARD */
  151. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_PLAY */
  152. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_PAUSE */
  153. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_CLOSE */
  154. SDL_SCANCODE_EJECT, /* AKEYCODE_MEDIA_EJECT */
  155. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_RECORD */
  156. SDL_SCANCODE_F1, /* AKEYCODE_F1 */
  157. SDL_SCANCODE_F2, /* AKEYCODE_F2 */
  158. SDL_SCANCODE_F3, /* AKEYCODE_F3 */
  159. SDL_SCANCODE_F4, /* AKEYCODE_F4 */
  160. SDL_SCANCODE_F5, /* AKEYCODE_F5 */
  161. SDL_SCANCODE_F6, /* AKEYCODE_F6 */
  162. SDL_SCANCODE_F7, /* AKEYCODE_F7 */
  163. SDL_SCANCODE_F8, /* AKEYCODE_F8 */
  164. SDL_SCANCODE_F9, /* AKEYCODE_F9 */
  165. SDL_SCANCODE_F10, /* AKEYCODE_F10 */
  166. SDL_SCANCODE_F11, /* AKEYCODE_F11 */
  167. SDL_SCANCODE_F12, /* AKEYCODE_F12 */
  168. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NUM_LOCK */
  169. SDL_SCANCODE_KP_0, /* AKEYCODE_NUMPAD_0 */
  170. SDL_SCANCODE_KP_1, /* AKEYCODE_NUMPAD_1 */
  171. SDL_SCANCODE_KP_2, /* AKEYCODE_NUMPAD_2 */
  172. SDL_SCANCODE_KP_3, /* AKEYCODE_NUMPAD_3 */
  173. SDL_SCANCODE_KP_4, /* AKEYCODE_NUMPAD_4 */
  174. SDL_SCANCODE_KP_5, /* AKEYCODE_NUMPAD_5 */
  175. SDL_SCANCODE_KP_6, /* AKEYCODE_NUMPAD_6 */
  176. SDL_SCANCODE_KP_7, /* AKEYCODE_NUMPAD_7 */
  177. SDL_SCANCODE_KP_8, /* AKEYCODE_NUMPAD_8 */
  178. SDL_SCANCODE_KP_9, /* AKEYCODE_NUMPAD_9 */
  179. SDL_SCANCODE_KP_DIVIDE, /* AKEYCODE_NUMPAD_DIVIDE */
  180. SDL_SCANCODE_KP_MULTIPLY, /* AKEYCODE_NUMPAD_MULTIPLY */
  181. SDL_SCANCODE_KP_MINUS, /* AKEYCODE_NUMPAD_SUBTRACT */
  182. SDL_SCANCODE_KP_PLUS, /* AKEYCODE_NUMPAD_ADD */
  183. SDL_SCANCODE_KP_PERIOD, /* AKEYCODE_NUMPAD_DOT */
  184. SDL_SCANCODE_KP_COMMA, /* AKEYCODE_NUMPAD_COMMA */
  185. SDL_SCANCODE_KP_ENTER, /* AKEYCODE_NUMPAD_ENTER */
  186. SDL_SCANCODE_KP_EQUALS, /* AKEYCODE_NUMPAD_EQUALS */
  187. SDL_SCANCODE_KP_LEFTPAREN, /* AKEYCODE_NUMPAD_LEFT_PAREN */
  188. SDL_SCANCODE_KP_RIGHTPAREN, /* AKEYCODE_NUMPAD_RIGHT_PAREN */
  189. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_VOLUME_MUTE */
  190. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_INFO */
  191. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CHANNEL_UP */
  192. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CHANNEL_DOWN */
  193. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ZOOM_IN */
  194. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ZOOM_OUT */
  195. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV */
  196. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_WINDOW */
  197. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_GUIDE */
  198. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_DVR */
  199. SDL_SCANCODE_AC_BOOKMARKS, /* AKEYCODE_BOOKMARK */
  200. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CAPTIONS */
  201. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SETTINGS */
  202. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_POWER */
  203. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT */
  204. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STB_POWER */
  205. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STB_INPUT */
  206. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_AVR_POWER */
  207. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_AVR_INPUT */
  208. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_RED */
  209. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_GREEN */
  210. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_YELLOW */
  211. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_BLUE */
  212. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_APP_SWITCH */
  213. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_1 */
  214. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_2 */
  215. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_3 */
  216. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_4 */
  217. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_5 */
  218. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_6 */
  219. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_7 */
  220. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_8 */
  221. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_9 */
  222. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_10 */
  223. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_11 */
  224. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_12 */
  225. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_13 */
  226. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_14 */
  227. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_15 */
  228. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_16 */
  229. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_LANGUAGE_SWITCH */
  230. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MANNER_MODE */
  231. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_3D_MODE */
  232. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CONTACTS */
  233. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CALENDAR */
  234. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MUSIC */
  235. SDL_SCANCODE_CALCULATOR, /* AKEYCODE_CALCULATOR */
  236. SDL_SCANCODE_LANG5, /* AKEYCODE_ZENKAKU_HANKAKU */
  237. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_EISU */
  238. SDL_SCANCODE_INTERNATIONAL5, /* AKEYCODE_MUHENKAN */
  239. SDL_SCANCODE_INTERNATIONAL4, /* AKEYCODE_HENKAN */
  240. SDL_SCANCODE_LANG3, /* AKEYCODE_KATAKANA_HIRAGANA */
  241. SDL_SCANCODE_INTERNATIONAL3, /* AKEYCODE_YEN */
  242. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_RO */
  243. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_KANA */
  244. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ASSIST */
  245. SDL_SCANCODE_BRIGHTNESSDOWN, /* AKEYCODE_BRIGHTNESS_DOWN */
  246. SDL_SCANCODE_BRIGHTNESSUP, /* AKEYCODE_BRIGHTNESS_UP */
  247. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_AUDIO_TRACK */
  248. SDL_SCANCODE_SLEEP, /* AKEYCODE_SLEEP */
  249. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_WAKEUP */
  250. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PAIRING */
  251. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_TOP_MENU */
  252. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_11 */
  253. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_12 */
  254. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_LAST_CHANNEL */
  255. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_DATA_SERVICE */
  256. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_VOICE_ASSIST */
  257. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_RADIO_SERVICE */
  258. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TELETEXT */
  259. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_NUMBER_ENTRY */
  260. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TERRESTRIAL_ANALOG */
  261. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TERRESTRIAL_DIGITAL */
  262. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE */
  263. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_BS */
  264. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_CS */
  265. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_SERVICE */
  266. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_NETWORK */
  267. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_ANTENNA_CABLE */
  268. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_1 */
  269. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_2 */
  270. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_3 */
  271. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_4 */
  272. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPOSITE_1 */
  273. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPOSITE_2 */
  274. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPONENT_1 */
  275. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPONENT_2 */
  276. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_VGA_1 */
  277. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION */
  278. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP */
  279. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN */
  280. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_ZOOM_MODE */
  281. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_CONTENTS_MENU */
  282. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_MEDIA_CONTEXT_MENU */
  283. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TIMER_PROGRAMMING */
  284. SDL_SCANCODE_HELP, /* AKEYCODE_HELP */
  285. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_PREVIOUS */
  286. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_NEXT */
  287. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_IN */
  288. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_OUT */
  289. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STEM_PRIMARY */
  290. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STEM_1 */
  291. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STEM_2 */
  292. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STEM_3 */
  293. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_DPAD_UP_LEFT */
  294. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_DPAD_DOWN_LEFT */
  295. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_DPAD_UP_RIGHT */
  296. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_DPAD_DOWN_RIGHT */
  297. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_SKIP_FORWARD */
  298. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_SKIP_BACKWARD */
  299. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_STEP_FORWARD */
  300. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_STEP_BACKWARD */
  301. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SOFT_SLEEP */
  302. SDL_SCANCODE_CUT, /* AKEYCODE_CUT */
  303. SDL_SCANCODE_COPY, /* AKEYCODE_COPY */
  304. SDL_SCANCODE_PASTE, /* AKEYCODE_PASTE */
  305. };
  306. static SDL_bool SDL_screen_keyboard_shown;
  307. static SDL_Scancode TranslateKeycode(int keycode)
  308. {
  309. SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
  310. if (keycode < SDL_arraysize(Android_Keycodes)) {
  311. scancode = Android_Keycodes[keycode];
  312. }
  313. if (scancode == SDL_SCANCODE_UNKNOWN) {
  314. __android_log_print(ANDROID_LOG_INFO, "SDL", "Unknown keycode %d", keycode);
  315. }
  316. return scancode;
  317. }
  318. int Android_OnKeyDown(int keycode)
  319. {
  320. return SDL_SendKeyboardKey(0, 0, SDL_PRESSED, TranslateKeycode(keycode));
  321. }
  322. int Android_OnKeyUp(int keycode)
  323. {
  324. return SDL_SendKeyboardKey(0, 0, SDL_RELEASED, TranslateKeycode(keycode));
  325. }
  326. SDL_bool Android_HasScreenKeyboardSupport(SDL_VideoDevice *_this)
  327. {
  328. return SDL_TRUE;
  329. }
  330. void Android_ShowScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window)
  331. {
  332. SDL_VideoData *videodata = _this->driverdata;
  333. Android_JNI_ShowScreenKeyboard(&videodata->textRect);
  334. SDL_screen_keyboard_shown = SDL_TRUE;
  335. }
  336. void Android_HideScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window)
  337. {
  338. Android_JNI_HideScreenKeyboard();
  339. SDL_screen_keyboard_shown = SDL_FALSE;
  340. }
  341. void Android_RestoreScreenKeyboardOnResume(SDL_VideoDevice *_this, SDL_Window *window)
  342. {
  343. if (SDL_screen_keyboard_shown) {
  344. Android_ShowScreenKeyboard(_this, window);
  345. }
  346. }
  347. SDL_bool Android_IsScreenKeyboardShown(SDL_VideoDevice *_this, SDL_Window *window)
  348. {
  349. return Android_JNI_IsScreenKeyboardShown();
  350. }
  351. int Android_SetTextInputRect(SDL_VideoDevice *_this, const SDL_Rect *rect)
  352. {
  353. SDL_VideoData *videodata = _this->driverdata;
  354. videodata->textRect = *rect;
  355. return 0;
  356. }
  357. #endif /* SDL_VIDEO_DRIVER_ANDROID */