Atlas - SDL_androidkeyboard.c
Home / ext / SDL / src / video / android Lines: 1 | Size: 22607 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)][FILE BEGIN]1/* 2 Simple DirectMedia Layer 3 Copyright (C) 1997-2025 Sam Lantinga <[email protected]> 4 5 This software is provided 'as-is', without any express or implied 6 warranty. In no event will the authors be held liable for any damages 7 arising from the use of this software. 8 9 Permission is granted to anyone to use this software for any purpose, 10 including commercial applications, and to alter it and redistribute it 11 freely, subject to the following restrictions: 12 13 1. The origin of this software must not be misrepresented; you must not 14 claim that you wrote the original software. If you use this software 15 in a product, an acknowledgment in the product documentation would be 16 appreciated but is not required. 17 2. Altered source versions must be plainly marked as such, and must not be 18 misrepresented as being the original software. 19 3. This notice may not be removed or altered from any source distribution. 20*/ 21#include "SDL_internal.h" 22 23#ifdef SDL_VIDEO_DRIVER_ANDROID 24 25#include <android/log.h> 26 27#include "../../events/SDL_events_c.h" 28 29#include "SDL_androidkeyboard.h" 30 31#include "../../core/android/SDL_android.h" 32 33#define TYPE_CLASS_TEXT 0x00000001 34#define TYPE_CLASS_NUMBER 0x00000002 35#define TYPE_CLASS_PHONE 0x00000003 36#define TYPE_CLASS_DATETIME 0x00000004 37 38#define TYPE_DATETIME_VARIATION_NORMAL 0x00000000 39#define TYPE_DATETIME_VARIATION_DATE 0x00000010 40#define TYPE_DATETIME_VARIATION_TIME 0x00000020 41 42#define TYPE_NUMBER_VARIATION_NORMAL 0x00000000 43#define TYPE_NUMBER_VARIATION_PASSWORD 0x00000010 44#define TYPE_NUMBER_FLAG_SIGNED 0x00001000 45#define TYPE_NUMBER_FLAG_DECIMAL 0x00002000 46 47#define TYPE_TEXT_FLAG_CAP_CHARACTERS 0x00001000 48#define TYPE_TEXT_FLAG_CAP_WORDS 0x00002000 49#define TYPE_TEXT_FLAG_CAP_SENTENCES 0x00004000 50#define TYPE_TEXT_FLAG_AUTO_CORRECT 0x00008000 51#define TYPE_TEXT_FLAG_AUTO_COMPLETE 0x00010000 52#define TYPE_TEXT_FLAG_MULTI_LINE 0x00020000 53#define TYPE_TEXT_FLAG_IME_MULTI_LINE 0x00040000 54#define TYPE_TEXT_FLAG_NO_SUGGESTIONS 0x00080000 55 56#define TYPE_TEXT_VARIATION_NORMAL 0x00000000 57#define TYPE_TEXT_VARIATION_URI 0x00000010 58#define TYPE_TEXT_VARIATION_EMAIL_ADDRESS 0x00000020 59#define TYPE_TEXT_VARIATION_EMAIL_SUBJECT 0x00000030 60#define TYPE_TEXT_VARIATION_SHORT_MESSAGE 0x00000040 61#define TYPE_TEXT_VARIATION_LONG_MESSAGE 0x00000050 62#define TYPE_TEXT_VARIATION_PERSON_NAME 0x00000060 63#define TYPE_TEXT_VARIATION_POSTAL_ADDRESS 0x00000070 64#define TYPE_TEXT_VARIATION_PASSWORD 0x00000080 65#define TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 0x00000090 66#define TYPE_TEXT_VARIATION_WEB_EDIT_TEXT 0x000000a0 67#define TYPE_TEXT_VARIATION_FILTER 0x000000b0 68#define TYPE_TEXT_VARIATION_PHONETIC 0x000000c0 69#define TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS 0x000000d0 70#define TYPE_TEXT_VARIATION_WEB_PASSWORD 0x000000e0 71 72 73static SDL_Scancode Android_Keycodes[] = { 74 SDL_SCANCODE_UNKNOWN, // AKEYCODE_UNKNOWN 75 SDL_SCANCODE_SOFTLEFT, // AKEYCODE_SOFT_LEFT 76 SDL_SCANCODE_SOFTRIGHT, // AKEYCODE_SOFT_RIGHT 77 SDL_SCANCODE_AC_HOME, // AKEYCODE_HOME 78 SDL_SCANCODE_AC_BACK, // AKEYCODE_BACK 79 SDL_SCANCODE_CALL, // AKEYCODE_CALL 80 SDL_SCANCODE_ENDCALL, // AKEYCODE_ENDCALL 81 SDL_SCANCODE_0, // AKEYCODE_0 82 SDL_SCANCODE_1, // AKEYCODE_1 83 SDL_SCANCODE_2, // AKEYCODE_2 84 SDL_SCANCODE_3, // AKEYCODE_3 85 SDL_SCANCODE_4, // AKEYCODE_4 86 SDL_SCANCODE_5, // AKEYCODE_5 87 SDL_SCANCODE_6, // AKEYCODE_6 88 SDL_SCANCODE_7, // AKEYCODE_7 89 SDL_SCANCODE_8, // AKEYCODE_8 90 SDL_SCANCODE_9, // AKEYCODE_9 91 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STAR 92 SDL_SCANCODE_UNKNOWN, // AKEYCODE_POUND 93 SDL_SCANCODE_UP, // AKEYCODE_DPAD_UP 94 SDL_SCANCODE_DOWN, // AKEYCODE_DPAD_DOWN 95 SDL_SCANCODE_LEFT, // AKEYCODE_DPAD_LEFT 96 SDL_SCANCODE_RIGHT, // AKEYCODE_DPAD_RIGHT 97 SDL_SCANCODE_SELECT, // AKEYCODE_DPAD_CENTER 98 SDL_SCANCODE_VOLUMEUP, // AKEYCODE_VOLUME_UP 99 SDL_SCANCODE_VOLUMEDOWN, // AKEYCODE_VOLUME_DOWN 100 SDL_SCANCODE_POWER, // AKEYCODE_POWER 101 SDL_SCANCODE_UNKNOWN, // AKEYCODE_CAMERA 102 SDL_SCANCODE_CLEAR, // AKEYCODE_CLEAR 103 SDL_SCANCODE_A, // AKEYCODE_A 104 SDL_SCANCODE_B, // AKEYCODE_B 105 SDL_SCANCODE_C, // AKEYCODE_C 106 SDL_SCANCODE_D, // AKEYCODE_D 107 SDL_SCANCODE_E, // AKEYCODE_E 108 SDL_SCANCODE_F, // AKEYCODE_F 109 SDL_SCANCODE_G, // AKEYCODE_G 110 SDL_SCANCODE_H, // AKEYCODE_H 111 SDL_SCANCODE_I, // AKEYCODE_I 112 SDL_SCANCODE_J, // AKEYCODE_J 113 SDL_SCANCODE_K, // AKEYCODE_K 114 SDL_SCANCODE_L, // AKEYCODE_L 115 SDL_SCANCODE_M, // AKEYCODE_M 116 SDL_SCANCODE_N, // AKEYCODE_N 117 SDL_SCANCODE_O, // AKEYCODE_O 118 SDL_SCANCODE_P, // AKEYCODE_P 119 SDL_SCANCODE_Q, // AKEYCODE_Q 120 SDL_SCANCODE_R, // AKEYCODE_R 121 SDL_SCANCODE_S, // AKEYCODE_S 122 SDL_SCANCODE_T, // AKEYCODE_T 123 SDL_SCANCODE_U, // AKEYCODE_U 124 SDL_SCANCODE_V, // AKEYCODE_V 125 SDL_SCANCODE_W, // AKEYCODE_W 126 SDL_SCANCODE_X, // AKEYCODE_X 127 SDL_SCANCODE_Y, // AKEYCODE_Y 128 SDL_SCANCODE_Z, // AKEYCODE_Z 129 SDL_SCANCODE_COMMA, // AKEYCODE_COMMA 130 SDL_SCANCODE_PERIOD, // AKEYCODE_PERIOD 131 SDL_SCANCODE_LALT, // AKEYCODE_ALT_LEFT 132 SDL_SCANCODE_RALT, // AKEYCODE_ALT_RIGHT 133 SDL_SCANCODE_LSHIFT, // AKEYCODE_SHIFT_LEFT 134 SDL_SCANCODE_RSHIFT, // AKEYCODE_SHIFT_RIGHT 135 SDL_SCANCODE_TAB, // AKEYCODE_TAB 136 SDL_SCANCODE_SPACE, // AKEYCODE_SPACE 137 SDL_SCANCODE_UNKNOWN, // AKEYCODE_SYM 138 SDL_SCANCODE_UNKNOWN, // AKEYCODE_EXPLORER 139 SDL_SCANCODE_UNKNOWN, // AKEYCODE_ENVELOPE 140 SDL_SCANCODE_RETURN, // AKEYCODE_ENTER 141 SDL_SCANCODE_BACKSPACE, // AKEYCODE_DEL 142 SDL_SCANCODE_GRAVE, // AKEYCODE_GRAVE 143 SDL_SCANCODE_MINUS, // AKEYCODE_MINUS 144 SDL_SCANCODE_EQUALS, // AKEYCODE_EQUALS 145 SDL_SCANCODE_LEFTBRACKET, // AKEYCODE_LEFT_BRACKET 146 SDL_SCANCODE_RIGHTBRACKET, // AKEYCODE_RIGHT_BRACKET 147 SDL_SCANCODE_BACKSLASH, // AKEYCODE_BACKSLASH 148 SDL_SCANCODE_SEMICOLON, // AKEYCODE_SEMICOLON 149 SDL_SCANCODE_APOSTROPHE, // AKEYCODE_APOSTROPHE 150 SDL_SCANCODE_SLASH, // AKEYCODE_SLASH 151 SDL_SCANCODE_UNKNOWN, // AKEYCODE_AT 152 SDL_SCANCODE_UNKNOWN, // AKEYCODE_NUM 153 SDL_SCANCODE_UNKNOWN, // AKEYCODE_HEADSETHOOK 154 SDL_SCANCODE_UNKNOWN, // AKEYCODE_FOCUS 155 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PLUS 156 SDL_SCANCODE_MENU, // AKEYCODE_MENU 157 SDL_SCANCODE_UNKNOWN, // AKEYCODE_NOTIFICATION 158 SDL_SCANCODE_AC_SEARCH, // AKEYCODE_SEARCH 159 SDL_SCANCODE_MEDIA_PLAY_PAUSE, // AKEYCODE_MEDIA_PLAY_PAUSE 160 SDL_SCANCODE_MEDIA_STOP, // AKEYCODE_MEDIA_STOP 161 SDL_SCANCODE_MEDIA_NEXT_TRACK, // AKEYCODE_MEDIA_NEXT 162 SDL_SCANCODE_MEDIA_PREVIOUS_TRACK, // AKEYCODE_MEDIA_PREVIOUS 163 SDL_SCANCODE_MEDIA_REWIND, // AKEYCODE_MEDIA_REWIND 164 SDL_SCANCODE_MEDIA_FAST_FORWARD, // AKEYCODE_MEDIA_FAST_FORWARD 165 SDL_SCANCODE_MUTE, // AKEYCODE_MUTE 166 SDL_SCANCODE_PAGEUP, // AKEYCODE_PAGE_UP 167 SDL_SCANCODE_PAGEDOWN, // AKEYCODE_PAGE_DOWN 168 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PICTSYMBOLS 169 SDL_SCANCODE_UNKNOWN, // AKEYCODE_SWITCH_CHARSET 170 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_A 171 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_B 172 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_C 173 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_X 174 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_Y 175 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_Z 176 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_L1 177 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_R1 178 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_L2 179 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_R2 180 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_THUMBL 181 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_THUMBR 182 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_START 183 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_SELECT 184 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_MODE 185 SDL_SCANCODE_ESCAPE, // AKEYCODE_ESCAPE 186 SDL_SCANCODE_DELETE, // AKEYCODE_FORWARD_DEL 187 SDL_SCANCODE_LCTRL, // AKEYCODE_CTRL_LEFT 188 SDL_SCANCODE_RCTRL, // AKEYCODE_CTRL_RIGHT 189 SDL_SCANCODE_CAPSLOCK, // AKEYCODE_CAPS_LOCK 190 SDL_SCANCODE_SCROLLLOCK, // AKEYCODE_SCROLL_LOCK 191 SDL_SCANCODE_LGUI, // AKEYCODE_META_LEFT 192 SDL_SCANCODE_RGUI, // AKEYCODE_META_RIGHT 193 SDL_SCANCODE_UNKNOWN, // AKEYCODE_FUNCTION 194 SDL_SCANCODE_PRINTSCREEN, // AKEYCODE_SYSRQ 195 SDL_SCANCODE_PAUSE, // AKEYCODE_BREAK 196 SDL_SCANCODE_HOME, // AKEYCODE_MOVE_HOME 197 SDL_SCANCODE_END, // AKEYCODE_MOVE_END 198 SDL_SCANCODE_INSERT, // AKEYCODE_INSERT 199 SDL_SCANCODE_AC_FORWARD, // AKEYCODE_FORWARD 200 SDL_SCANCODE_MEDIA_PLAY, // AKEYCODE_MEDIA_PLAY 201 SDL_SCANCODE_MEDIA_PAUSE, // AKEYCODE_MEDIA_PAUSE 202 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_CLOSE 203 SDL_SCANCODE_MEDIA_EJECT, // AKEYCODE_MEDIA_EJECT 204 SDL_SCANCODE_MEDIA_RECORD, // AKEYCODE_MEDIA_RECORD 205 SDL_SCANCODE_F1, // AKEYCODE_F1 206 SDL_SCANCODE_F2, // AKEYCODE_F2 207 SDL_SCANCODE_F3, // AKEYCODE_F3 208 SDL_SCANCODE_F4, // AKEYCODE_F4 209 SDL_SCANCODE_F5, // AKEYCODE_F5 210 SDL_SCANCODE_F6, // AKEYCODE_F6 211 SDL_SCANCODE_F7, // AKEYCODE_F7 212 SDL_SCANCODE_F8, // AKEYCODE_F8 213 SDL_SCANCODE_F9, // AKEYCODE_F9 214 SDL_SCANCODE_F10, // AKEYCODE_F10 215 SDL_SCANCODE_F11, // AKEYCODE_F11 216 SDL_SCANCODE_F12, // AKEYCODE_F12 217 SDL_SCANCODE_NUMLOCKCLEAR, // AKEYCODE_NUM_LOCK 218 SDL_SCANCODE_KP_0, // AKEYCODE_NUMPAD_0 219 SDL_SCANCODE_KP_1, // AKEYCODE_NUMPAD_1 220 SDL_SCANCODE_KP_2, // AKEYCODE_NUMPAD_2 221 SDL_SCANCODE_KP_3, // AKEYCODE_NUMPAD_3 222 SDL_SCANCODE_KP_4, // AKEYCODE_NUMPAD_4 223 SDL_SCANCODE_KP_5, // AKEYCODE_NUMPAD_5 224 SDL_SCANCODE_KP_6, // AKEYCODE_NUMPAD_6 225 SDL_SCANCODE_KP_7, // AKEYCODE_NUMPAD_7 226 SDL_SCANCODE_KP_8, // AKEYCODE_NUMPAD_8 227 SDL_SCANCODE_KP_9, // AKEYCODE_NUMPAD_9 228 SDL_SCANCODE_KP_DIVIDE, // AKEYCODE_NUMPAD_DIVIDE 229 SDL_SCANCODE_KP_MULTIPLY, // AKEYCODE_NUMPAD_MULTIPLY 230 SDL_SCANCODE_KP_MINUS, // AKEYCODE_NUMPAD_SUBTRACT 231 SDL_SCANCODE_KP_PLUS, // AKEYCODE_NUMPAD_ADD 232 SDL_SCANCODE_KP_PERIOD, // AKEYCODE_NUMPAD_DOT 233 SDL_SCANCODE_KP_COMMA, // AKEYCODE_NUMPAD_COMMA 234 SDL_SCANCODE_KP_ENTER, // AKEYCODE_NUMPAD_ENTER 235 SDL_SCANCODE_KP_EQUALS, // AKEYCODE_NUMPAD_EQUALS 236 SDL_SCANCODE_KP_LEFTPAREN, // AKEYCODE_NUMPAD_LEFT_PAREN 237 SDL_SCANCODE_KP_RIGHTPAREN, // AKEYCODE_NUMPAD_RIGHT_PAREN 238 SDL_SCANCODE_UNKNOWN, // AKEYCODE_VOLUME_MUTE 239 SDL_SCANCODE_UNKNOWN, // AKEYCODE_INFO 240 SDL_SCANCODE_CHANNEL_INCREMENT, // AKEYCODE_CHANNEL_UP 241 SDL_SCANCODE_CHANNEL_INCREMENT, // AKEYCODE_CHANNEL_DOWN 242 SDL_SCANCODE_UNKNOWN, // AKEYCODE_ZOOM_IN 243 SDL_SCANCODE_UNKNOWN, // AKEYCODE_ZOOM_OUT 244 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV 245 SDL_SCANCODE_UNKNOWN, // AKEYCODE_WINDOW 246 SDL_SCANCODE_UNKNOWN, // AKEYCODE_GUIDE 247 SDL_SCANCODE_UNKNOWN, // AKEYCODE_DVR 248 SDL_SCANCODE_AC_BOOKMARKS, // AKEYCODE_BOOKMARK 249 SDL_SCANCODE_UNKNOWN, // AKEYCODE_CAPTIONS 250 SDL_SCANCODE_UNKNOWN, // AKEYCODE_SETTINGS 251 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_POWER 252 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT 253 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STB_POWER 254 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STB_INPUT 255 SDL_SCANCODE_UNKNOWN, // AKEYCODE_AVR_POWER 256 SDL_SCANCODE_UNKNOWN, // AKEYCODE_AVR_INPUT 257 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_RED 258 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_GREEN 259 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_YELLOW 260 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_BLUE 261 SDL_SCANCODE_UNKNOWN, // AKEYCODE_APP_SWITCH 262 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_1 263 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_2 264 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_3 265 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_4 266 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_5 267 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_6 268 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_7 269 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_8 270 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_9 271 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_10 272 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_11 273 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_12 274 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_13 275 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_14 276 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_15 277 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_16 278 SDL_SCANCODE_UNKNOWN, // AKEYCODE_LANGUAGE_SWITCH 279 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MANNER_MODE 280 SDL_SCANCODE_UNKNOWN, // AKEYCODE_3D_MODE 281 SDL_SCANCODE_UNKNOWN, // AKEYCODE_CONTACTS 282 SDL_SCANCODE_UNKNOWN, // AKEYCODE_CALENDAR 283 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MUSIC 284 SDL_SCANCODE_UNKNOWN, // AKEYCODE_CALCULATOR 285 SDL_SCANCODE_LANG5, // AKEYCODE_ZENKAKU_HANKAKU 286 SDL_SCANCODE_UNKNOWN, // AKEYCODE_EISU 287 SDL_SCANCODE_INTERNATIONAL5, // AKEYCODE_MUHENKAN 288 SDL_SCANCODE_INTERNATIONAL4, // AKEYCODE_HENKAN 289 SDL_SCANCODE_LANG3, // AKEYCODE_KATAKANA_HIRAGANA 290 SDL_SCANCODE_INTERNATIONAL3, // AKEYCODE_YEN 291 SDL_SCANCODE_UNKNOWN, // AKEYCODE_RO 292 SDL_SCANCODE_UNKNOWN, // AKEYCODE_KANA 293 SDL_SCANCODE_UNKNOWN, // AKEYCODE_ASSIST 294 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BRIGHTNESS_DOWN 295 SDL_SCANCODE_UNKNOWN, // AKEYCODE_BRIGHTNESS_UP 296 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_AUDIO_TRACK 297 SDL_SCANCODE_SLEEP, // AKEYCODE_SLEEP 298 SDL_SCANCODE_UNKNOWN, // AKEYCODE_WAKEUP 299 SDL_SCANCODE_UNKNOWN, // AKEYCODE_PAIRING 300 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_TOP_MENU 301 SDL_SCANCODE_UNKNOWN, // AKEYCODE_11 302 SDL_SCANCODE_UNKNOWN, // AKEYCODE_12 303 SDL_SCANCODE_UNKNOWN, // AKEYCODE_LAST_CHANNEL 304 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_DATA_SERVICE 305 SDL_SCANCODE_UNKNOWN, // AKEYCODE_VOICE_ASSIST 306 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_RADIO_SERVICE 307 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TELETEXT 308 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_NUMBER_ENTRY 309 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TERRESTRIAL_ANALOG 310 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TERRESTRIAL_DIGITAL 311 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE 312 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE_BS 313 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE_CS 314 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE_SERVICE 315 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_NETWORK 316 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_ANTENNA_CABLE 317 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_1 318 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_2 319 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_3 320 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_4 321 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPOSITE_1 322 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPOSITE_2 323 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPONENT_1 324 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPONENT_2 325 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_VGA_1 326 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_AUDIO_DESCRIPTION 327 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP 328 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN 329 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_ZOOM_MODE 330 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_CONTENTS_MENU 331 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_MEDIA_CONTEXT_MENU 332 SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TIMER_PROGRAMMING 333 SDL_SCANCODE_HELP, // AKEYCODE_HELP 334 SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_PREVIOUS 335 SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_NEXT 336 SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_IN 337 SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_OUT 338 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_PRIMARY 339 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_1 340 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_2 341 SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_3 342 SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_UP_LEFT 343 SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_DOWN_LEFT 344 SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_UP_RIGHT 345 SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_DOWN_RIGHT 346 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_SKIP_FORWARD 347 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_SKIP_BACKWARD 348 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_STEP_FORWARD 349 SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_STEP_BACKWARD 350 SDL_SCANCODE_UNKNOWN, // AKEYCODE_SOFT_SLEEP 351 SDL_SCANCODE_CUT, // AKEYCODE_CUT 352 SDL_SCANCODE_COPY, // AKEYCODE_COPY 353 SDL_SCANCODE_PASTE, // AKEYCODE_PASTE 354}; 355 356static SDL_Scancode TranslateKeycode(int keycode) 357{ 358 SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; 359 360 if (keycode < SDL_arraysize(Android_Keycodes)) { 361 scancode = Android_Keycodes[keycode]; 362 } 363 if (scancode == SDL_SCANCODE_UNKNOWN) { 364 __android_log_print(ANDROID_LOG_INFO, "SDL", "Unknown keycode %d", keycode); 365 } 366 return scancode; 367} 368 369void Android_OnKeyDown(int keycode) 370{ 371 SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, keycode, TranslateKeycode(keycode), true); 372} 373 374void Android_OnKeyUp(int keycode) 375{ 376 SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, keycode, TranslateKeycode(keycode), false); 377} 378 379bool Android_HasScreenKeyboardSupport(SDL_VideoDevice *_this) 380{ 381 return true; 382} 383 384void Android_ShowScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window, SDL_PropertiesID props) 385{ 386 int input_type = 0; 387 if (SDL_HasProperty(props, SDL_PROP_TEXTINPUT_ANDROID_INPUTTYPE_NUMBER)) { 388 input_type = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTINPUT_ANDROID_INPUTTYPE_NUMBER, 0); 389 } else { 390 switch (SDL_GetTextInputType(props)) { 391 default: 392 case SDL_TEXTINPUT_TYPE_TEXT: 393 input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_NORMAL); 394 break; 395 case SDL_TEXTINPUT_TYPE_TEXT_NAME: 396 input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PERSON_NAME); 397 break; 398 case SDL_TEXTINPUT_TYPE_TEXT_EMAIL: 399 input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS); 400 break; 401 case SDL_TEXTINPUT_TYPE_TEXT_USERNAME: 402 input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_NORMAL); 403 break; 404 case SDL_TEXTINPUT_TYPE_TEXT_PASSWORD_HIDDEN: 405 input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD); 406 break; 407 case SDL_TEXTINPUT_TYPE_TEXT_PASSWORD_VISIBLE: 408 input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 409 break; 410 case SDL_TEXTINPUT_TYPE_NUMBER: 411 input_type = (TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_NORMAL); 412 break; 413 case SDL_TEXTINPUT_TYPE_NUMBER_PASSWORD_HIDDEN: 414 input_type = (TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_PASSWORD); 415 break; 416 case SDL_TEXTINPUT_TYPE_NUMBER_PASSWORD_VISIBLE: 417 input_type = (TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_NORMAL); 418 break; 419 } 420 421 switch (SDL_GetTextInputCapitalization(props)) { 422 default: 423 case SDL_CAPITALIZE_NONE: 424 break; 425 case SDL_CAPITALIZE_LETTERS: 426 input_type |= TYPE_TEXT_FLAG_CAP_CHARACTERS; 427 break; 428 case SDL_CAPITALIZE_WORDS: 429 input_type |= TYPE_TEXT_FLAG_CAP_WORDS; 430 break; 431 case SDL_CAPITALIZE_SENTENCES: 432 input_type |= TYPE_TEXT_FLAG_CAP_SENTENCES; 433 break; 434 } 435 436 if (SDL_GetTextInputAutocorrect(props)) { 437 input_type |= (TYPE_TEXT_FLAG_AUTO_CORRECT | TYPE_TEXT_FLAG_AUTO_COMPLETE); 438 } 439 440 if (SDL_GetTextInputMultiline(props)) { 441 input_type |= TYPE_TEXT_FLAG_MULTI_LINE; 442 } 443 } 444 Android_JNI_ShowScreenKeyboard(input_type, &window->text_input_rect); 445} 446 447void Android_HideScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window) 448{ 449 Android_JNI_HideScreenKeyboard(); 450} 451 452void Android_RestoreScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window) 453{ 454 if (_this->screen_keyboard_shown) { 455 Android_ShowScreenKeyboard(_this, window, window->text_input_props); 456 } 457} 458 459#endif // SDL_VIDEO_DRIVER_ANDROID 460[FILE END](C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.