| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2026 Sam Lantinga <slouken@libsdl.org>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- #include "SDL_internal.h"
- #ifdef SDL_VIDEO_DRIVER_ANDROID
- #include <android/log.h>
- #include "../../events/SDL_events_c.h"
- #include "SDL_androidkeyboard.h"
- #include "../../core/android/SDL_android.h"
- #define TYPE_CLASS_TEXT 0x00000001
- #define TYPE_CLASS_NUMBER 0x00000002
- #define TYPE_CLASS_PHONE 0x00000003
- #define TYPE_CLASS_DATETIME 0x00000004
- #define TYPE_DATETIME_VARIATION_NORMAL 0x00000000
- #define TYPE_DATETIME_VARIATION_DATE 0x00000010
- #define TYPE_DATETIME_VARIATION_TIME 0x00000020
- #define TYPE_NUMBER_VARIATION_NORMAL 0x00000000
- #define TYPE_NUMBER_VARIATION_PASSWORD 0x00000010
- #define TYPE_NUMBER_FLAG_SIGNED 0x00001000
- #define TYPE_NUMBER_FLAG_DECIMAL 0x00002000
- #define TYPE_TEXT_FLAG_CAP_CHARACTERS 0x00001000
- #define TYPE_TEXT_FLAG_CAP_WORDS 0x00002000
- #define TYPE_TEXT_FLAG_CAP_SENTENCES 0x00004000
- #define TYPE_TEXT_FLAG_AUTO_CORRECT 0x00008000
- #define TYPE_TEXT_FLAG_AUTO_COMPLETE 0x00010000
- #define TYPE_TEXT_FLAG_MULTI_LINE 0x00020000
- #define TYPE_TEXT_FLAG_IME_MULTI_LINE 0x00040000
- #define TYPE_TEXT_FLAG_NO_SUGGESTIONS 0x00080000
- #define TYPE_TEXT_VARIATION_NORMAL 0x00000000
- #define TYPE_TEXT_VARIATION_URI 0x00000010
- #define TYPE_TEXT_VARIATION_EMAIL_ADDRESS 0x00000020
- #define TYPE_TEXT_VARIATION_EMAIL_SUBJECT 0x00000030
- #define TYPE_TEXT_VARIATION_SHORT_MESSAGE 0x00000040
- #define TYPE_TEXT_VARIATION_LONG_MESSAGE 0x00000050
- #define TYPE_TEXT_VARIATION_PERSON_NAME 0x00000060
- #define TYPE_TEXT_VARIATION_POSTAL_ADDRESS 0x00000070
- #define TYPE_TEXT_VARIATION_PASSWORD 0x00000080
- #define TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 0x00000090
- #define TYPE_TEXT_VARIATION_WEB_EDIT_TEXT 0x000000a0
- #define TYPE_TEXT_VARIATION_FILTER 0x000000b0
- #define TYPE_TEXT_VARIATION_PHONETIC 0x000000c0
- #define TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS 0x000000d0
- #define TYPE_TEXT_VARIATION_WEB_PASSWORD 0x000000e0
- static SDL_Scancode Android_Keycodes[] = {
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_UNKNOWN
- SDL_SCANCODE_SOFTLEFT, // AKEYCODE_SOFT_LEFT
- SDL_SCANCODE_SOFTRIGHT, // AKEYCODE_SOFT_RIGHT
- SDL_SCANCODE_AC_HOME, // AKEYCODE_HOME
- SDL_SCANCODE_AC_BACK, // AKEYCODE_BACK
- SDL_SCANCODE_CALL, // AKEYCODE_CALL
- SDL_SCANCODE_ENDCALL, // AKEYCODE_ENDCALL
- SDL_SCANCODE_0, // AKEYCODE_0
- SDL_SCANCODE_1, // AKEYCODE_1
- SDL_SCANCODE_2, // AKEYCODE_2
- SDL_SCANCODE_3, // AKEYCODE_3
- SDL_SCANCODE_4, // AKEYCODE_4
- SDL_SCANCODE_5, // AKEYCODE_5
- SDL_SCANCODE_6, // AKEYCODE_6
- SDL_SCANCODE_7, // AKEYCODE_7
- SDL_SCANCODE_8, // AKEYCODE_8
- SDL_SCANCODE_9, // AKEYCODE_9
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STAR
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_POUND
- SDL_SCANCODE_UP, // AKEYCODE_DPAD_UP
- SDL_SCANCODE_DOWN, // AKEYCODE_DPAD_DOWN
- SDL_SCANCODE_LEFT, // AKEYCODE_DPAD_LEFT
- SDL_SCANCODE_RIGHT, // AKEYCODE_DPAD_RIGHT
- SDL_SCANCODE_RETURN, // AKEYCODE_DPAD_CENTER
- SDL_SCANCODE_VOLUMEUP, // AKEYCODE_VOLUME_UP
- SDL_SCANCODE_VOLUMEDOWN, // AKEYCODE_VOLUME_DOWN
- SDL_SCANCODE_POWER, // AKEYCODE_POWER
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_CAMERA
- SDL_SCANCODE_CLEAR, // AKEYCODE_CLEAR
- SDL_SCANCODE_A, // AKEYCODE_A
- SDL_SCANCODE_B, // AKEYCODE_B
- SDL_SCANCODE_C, // AKEYCODE_C
- SDL_SCANCODE_D, // AKEYCODE_D
- SDL_SCANCODE_E, // AKEYCODE_E
- SDL_SCANCODE_F, // AKEYCODE_F
- SDL_SCANCODE_G, // AKEYCODE_G
- SDL_SCANCODE_H, // AKEYCODE_H
- SDL_SCANCODE_I, // AKEYCODE_I
- SDL_SCANCODE_J, // AKEYCODE_J
- SDL_SCANCODE_K, // AKEYCODE_K
- SDL_SCANCODE_L, // AKEYCODE_L
- SDL_SCANCODE_M, // AKEYCODE_M
- SDL_SCANCODE_N, // AKEYCODE_N
- SDL_SCANCODE_O, // AKEYCODE_O
- SDL_SCANCODE_P, // AKEYCODE_P
- SDL_SCANCODE_Q, // AKEYCODE_Q
- SDL_SCANCODE_R, // AKEYCODE_R
- SDL_SCANCODE_S, // AKEYCODE_S
- SDL_SCANCODE_T, // AKEYCODE_T
- SDL_SCANCODE_U, // AKEYCODE_U
- SDL_SCANCODE_V, // AKEYCODE_V
- SDL_SCANCODE_W, // AKEYCODE_W
- SDL_SCANCODE_X, // AKEYCODE_X
- SDL_SCANCODE_Y, // AKEYCODE_Y
- SDL_SCANCODE_Z, // AKEYCODE_Z
- SDL_SCANCODE_COMMA, // AKEYCODE_COMMA
- SDL_SCANCODE_PERIOD, // AKEYCODE_PERIOD
- SDL_SCANCODE_LALT, // AKEYCODE_ALT_LEFT
- SDL_SCANCODE_RALT, // AKEYCODE_ALT_RIGHT
- SDL_SCANCODE_LSHIFT, // AKEYCODE_SHIFT_LEFT
- SDL_SCANCODE_RSHIFT, // AKEYCODE_SHIFT_RIGHT
- SDL_SCANCODE_TAB, // AKEYCODE_TAB
- SDL_SCANCODE_SPACE, // AKEYCODE_SPACE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_SYM
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_EXPLORER
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_ENVELOPE
- SDL_SCANCODE_RETURN, // AKEYCODE_ENTER
- SDL_SCANCODE_BACKSPACE, // AKEYCODE_DEL
- SDL_SCANCODE_GRAVE, // AKEYCODE_GRAVE
- SDL_SCANCODE_MINUS, // AKEYCODE_MINUS
- SDL_SCANCODE_EQUALS, // AKEYCODE_EQUALS
- SDL_SCANCODE_LEFTBRACKET, // AKEYCODE_LEFT_BRACKET
- SDL_SCANCODE_RIGHTBRACKET, // AKEYCODE_RIGHT_BRACKET
- SDL_SCANCODE_BACKSLASH, // AKEYCODE_BACKSLASH
- SDL_SCANCODE_SEMICOLON, // AKEYCODE_SEMICOLON
- SDL_SCANCODE_APOSTROPHE, // AKEYCODE_APOSTROPHE
- SDL_SCANCODE_SLASH, // AKEYCODE_SLASH
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_AT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_NUM
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_HEADSETHOOK
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_FOCUS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PLUS
- SDL_SCANCODE_MENU, // AKEYCODE_MENU
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_NOTIFICATION
- SDL_SCANCODE_AC_SEARCH, // AKEYCODE_SEARCH
- SDL_SCANCODE_MEDIA_PLAY_PAUSE, // AKEYCODE_MEDIA_PLAY_PAUSE
- SDL_SCANCODE_MEDIA_STOP, // AKEYCODE_MEDIA_STOP
- SDL_SCANCODE_MEDIA_NEXT_TRACK, // AKEYCODE_MEDIA_NEXT
- SDL_SCANCODE_MEDIA_PREVIOUS_TRACK, // AKEYCODE_MEDIA_PREVIOUS
- SDL_SCANCODE_MEDIA_REWIND, // AKEYCODE_MEDIA_REWIND
- SDL_SCANCODE_MEDIA_FAST_FORWARD, // AKEYCODE_MEDIA_FAST_FORWARD
- SDL_SCANCODE_MUTE, // AKEYCODE_MUTE
- SDL_SCANCODE_PAGEUP, // AKEYCODE_PAGE_UP
- SDL_SCANCODE_PAGEDOWN, // AKEYCODE_PAGE_DOWN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PICTSYMBOLS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_SWITCH_CHARSET
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_A
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_B
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_C
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_X
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_Y
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_Z
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_L1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_R1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_L2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_R2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_THUMBL
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_THUMBR
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_START
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_SELECT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_MODE
- SDL_SCANCODE_ESCAPE, // AKEYCODE_ESCAPE
- SDL_SCANCODE_DELETE, // AKEYCODE_FORWARD_DEL
- SDL_SCANCODE_LCTRL, // AKEYCODE_CTRL_LEFT
- SDL_SCANCODE_RCTRL, // AKEYCODE_CTRL_RIGHT
- SDL_SCANCODE_CAPSLOCK, // AKEYCODE_CAPS_LOCK
- SDL_SCANCODE_SCROLLLOCK, // AKEYCODE_SCROLL_LOCK
- SDL_SCANCODE_LGUI, // AKEYCODE_META_LEFT
- SDL_SCANCODE_RGUI, // AKEYCODE_META_RIGHT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_FUNCTION
- SDL_SCANCODE_PRINTSCREEN, // AKEYCODE_SYSRQ
- SDL_SCANCODE_PAUSE, // AKEYCODE_BREAK
- SDL_SCANCODE_HOME, // AKEYCODE_MOVE_HOME
- SDL_SCANCODE_END, // AKEYCODE_MOVE_END
- SDL_SCANCODE_INSERT, // AKEYCODE_INSERT
- SDL_SCANCODE_AC_FORWARD, // AKEYCODE_FORWARD
- SDL_SCANCODE_MEDIA_PLAY, // AKEYCODE_MEDIA_PLAY
- SDL_SCANCODE_MEDIA_PAUSE, // AKEYCODE_MEDIA_PAUSE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_CLOSE
- SDL_SCANCODE_MEDIA_EJECT, // AKEYCODE_MEDIA_EJECT
- SDL_SCANCODE_MEDIA_RECORD, // AKEYCODE_MEDIA_RECORD
- SDL_SCANCODE_F1, // AKEYCODE_F1
- SDL_SCANCODE_F2, // AKEYCODE_F2
- SDL_SCANCODE_F3, // AKEYCODE_F3
- SDL_SCANCODE_F4, // AKEYCODE_F4
- SDL_SCANCODE_F5, // AKEYCODE_F5
- SDL_SCANCODE_F6, // AKEYCODE_F6
- SDL_SCANCODE_F7, // AKEYCODE_F7
- SDL_SCANCODE_F8, // AKEYCODE_F8
- SDL_SCANCODE_F9, // AKEYCODE_F9
- SDL_SCANCODE_F10, // AKEYCODE_F10
- SDL_SCANCODE_F11, // AKEYCODE_F11
- SDL_SCANCODE_F12, // AKEYCODE_F12
- SDL_SCANCODE_NUMLOCKCLEAR, // AKEYCODE_NUM_LOCK
- SDL_SCANCODE_KP_0, // AKEYCODE_NUMPAD_0
- SDL_SCANCODE_KP_1, // AKEYCODE_NUMPAD_1
- SDL_SCANCODE_KP_2, // AKEYCODE_NUMPAD_2
- SDL_SCANCODE_KP_3, // AKEYCODE_NUMPAD_3
- SDL_SCANCODE_KP_4, // AKEYCODE_NUMPAD_4
- SDL_SCANCODE_KP_5, // AKEYCODE_NUMPAD_5
- SDL_SCANCODE_KP_6, // AKEYCODE_NUMPAD_6
- SDL_SCANCODE_KP_7, // AKEYCODE_NUMPAD_7
- SDL_SCANCODE_KP_8, // AKEYCODE_NUMPAD_8
- SDL_SCANCODE_KP_9, // AKEYCODE_NUMPAD_9
- SDL_SCANCODE_KP_DIVIDE, // AKEYCODE_NUMPAD_DIVIDE
- SDL_SCANCODE_KP_MULTIPLY, // AKEYCODE_NUMPAD_MULTIPLY
- SDL_SCANCODE_KP_MINUS, // AKEYCODE_NUMPAD_SUBTRACT
- SDL_SCANCODE_KP_PLUS, // AKEYCODE_NUMPAD_ADD
- SDL_SCANCODE_KP_PERIOD, // AKEYCODE_NUMPAD_DOT
- SDL_SCANCODE_KP_COMMA, // AKEYCODE_NUMPAD_COMMA
- SDL_SCANCODE_KP_ENTER, // AKEYCODE_NUMPAD_ENTER
- SDL_SCANCODE_KP_EQUALS, // AKEYCODE_NUMPAD_EQUALS
- SDL_SCANCODE_KP_LEFTPAREN, // AKEYCODE_NUMPAD_LEFT_PAREN
- SDL_SCANCODE_KP_RIGHTPAREN, // AKEYCODE_NUMPAD_RIGHT_PAREN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_VOLUME_MUTE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_INFO
- SDL_SCANCODE_CHANNEL_INCREMENT, // AKEYCODE_CHANNEL_UP
- SDL_SCANCODE_CHANNEL_INCREMENT, // AKEYCODE_CHANNEL_DOWN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_ZOOM_IN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_ZOOM_OUT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_WINDOW
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_GUIDE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_DVR
- SDL_SCANCODE_AC_BOOKMARKS, // AKEYCODE_BOOKMARK
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_CAPTIONS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_SETTINGS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_POWER
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STB_POWER
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STB_INPUT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_AVR_POWER
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_AVR_INPUT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_RED
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_GREEN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_YELLOW
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PROG_BLUE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_APP_SWITCH
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_3
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_4
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_5
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_6
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_7
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_8
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_9
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_10
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_11
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_12
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_13
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_14
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_15
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BUTTON_16
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_LANGUAGE_SWITCH
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MANNER_MODE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_3D_MODE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_CONTACTS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_CALENDAR
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MUSIC
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_CALCULATOR
- SDL_SCANCODE_LANG5, // AKEYCODE_ZENKAKU_HANKAKU
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_EISU
- SDL_SCANCODE_INTERNATIONAL5, // AKEYCODE_MUHENKAN
- SDL_SCANCODE_INTERNATIONAL4, // AKEYCODE_HENKAN
- SDL_SCANCODE_LANG3, // AKEYCODE_KATAKANA_HIRAGANA
- SDL_SCANCODE_INTERNATIONAL3, // AKEYCODE_YEN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_RO
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_KANA
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_ASSIST
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BRIGHTNESS_DOWN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_BRIGHTNESS_UP
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_AUDIO_TRACK
- SDL_SCANCODE_SLEEP, // AKEYCODE_SLEEP
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_WAKEUP
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_PAIRING
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_TOP_MENU
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_11
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_12
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_LAST_CHANNEL
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_DATA_SERVICE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_VOICE_ASSIST
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_RADIO_SERVICE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TELETEXT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_NUMBER_ENTRY
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TERRESTRIAL_ANALOG
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TERRESTRIAL_DIGITAL
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE_BS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE_CS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_SATELLITE_SERVICE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_NETWORK
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_ANTENNA_CABLE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_3
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_HDMI_4
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPOSITE_1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPOSITE_2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPONENT_1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_COMPONENT_2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_INPUT_VGA_1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_AUDIO_DESCRIPTION
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_ZOOM_MODE
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_CONTENTS_MENU
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_MEDIA_CONTEXT_MENU
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_TV_TIMER_PROGRAMMING
- SDL_SCANCODE_HELP, // AKEYCODE_HELP
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_PREVIOUS
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_NEXT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_IN
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_NAVIGATE_OUT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_PRIMARY
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_1
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_2
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_STEM_3
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_UP_LEFT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_DOWN_LEFT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_UP_RIGHT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_DPAD_DOWN_RIGHT
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_SKIP_FORWARD
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_SKIP_BACKWARD
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_STEP_FORWARD
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_MEDIA_STEP_BACKWARD
- SDL_SCANCODE_UNKNOWN, // AKEYCODE_SOFT_SLEEP
- SDL_SCANCODE_CUT, // AKEYCODE_CUT
- SDL_SCANCODE_COPY, // AKEYCODE_COPY
- SDL_SCANCODE_PASTE, // AKEYCODE_PASTE
- };
- static SDL_Scancode TranslateKeycode(int keycode)
- {
- SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
- if (keycode < SDL_arraysize(Android_Keycodes)) {
- scancode = Android_Keycodes[keycode];
- }
- if (scancode == SDL_SCANCODE_UNKNOWN) {
- __android_log_print(ANDROID_LOG_INFO, "SDL", "Unknown keycode %d", keycode);
- }
- return scancode;
- }
- void Android_OnKeyDown(int keycode)
- {
- SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, keycode, TranslateKeycode(keycode), true);
- }
- void Android_OnKeyUp(int keycode)
- {
- SDL_SendKeyboardKey(0, SDL_DEFAULT_KEYBOARD_ID, keycode, TranslateKeycode(keycode), false);
- }
- bool Android_HasScreenKeyboardSupport(SDL_VideoDevice *_this)
- {
- return true;
- }
- void Android_ShowScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window, SDL_PropertiesID props)
- {
- int input_type = 0;
- if (SDL_HasProperty(props, SDL_PROP_TEXTINPUT_ANDROID_INPUTTYPE_NUMBER)) {
- input_type = (int)SDL_GetNumberProperty(props, SDL_PROP_TEXTINPUT_ANDROID_INPUTTYPE_NUMBER, 0);
- } else {
- switch (SDL_GetTextInputType(props)) {
- default:
- case SDL_TEXTINPUT_TYPE_TEXT:
- input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_NORMAL);
- break;
- case SDL_TEXTINPUT_TYPE_TEXT_NAME:
- input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PERSON_NAME);
- break;
- case SDL_TEXTINPUT_TYPE_TEXT_EMAIL:
- input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
- break;
- case SDL_TEXTINPUT_TYPE_TEXT_USERNAME:
- input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_NORMAL);
- break;
- case SDL_TEXTINPUT_TYPE_TEXT_PASSWORD_HIDDEN:
- input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
- break;
- case SDL_TEXTINPUT_TYPE_TEXT_PASSWORD_VISIBLE:
- input_type = (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
- break;
- case SDL_TEXTINPUT_TYPE_NUMBER:
- input_type = (TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_NORMAL);
- break;
- case SDL_TEXTINPUT_TYPE_NUMBER_PASSWORD_HIDDEN:
- input_type = (TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_PASSWORD);
- break;
- case SDL_TEXTINPUT_TYPE_NUMBER_PASSWORD_VISIBLE:
- input_type = (TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_NORMAL);
- break;
- }
- switch (SDL_GetTextInputCapitalization(props)) {
- default:
- case SDL_CAPITALIZE_NONE:
- break;
- case SDL_CAPITALIZE_LETTERS:
- input_type |= TYPE_TEXT_FLAG_CAP_CHARACTERS;
- break;
- case SDL_CAPITALIZE_WORDS:
- input_type |= TYPE_TEXT_FLAG_CAP_WORDS;
- break;
- case SDL_CAPITALIZE_SENTENCES:
- input_type |= TYPE_TEXT_FLAG_CAP_SENTENCES;
- break;
- }
- if (SDL_GetTextInputAutocorrect(props)) {
- input_type |= (TYPE_TEXT_FLAG_AUTO_CORRECT | TYPE_TEXT_FLAG_AUTO_COMPLETE);
- }
- if (SDL_GetTextInputMultiline(props)) {
- input_type |= TYPE_TEXT_FLAG_MULTI_LINE;
- }
- }
- Android_JNI_ShowScreenKeyboard(input_type, &window->text_input_rect);
- }
- void Android_HideScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window)
- {
- Android_JNI_HideScreenKeyboard();
- }
- void Android_RestoreScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window)
- {
- if (_this->screen_keyboard_shown) {
- Android_ShowScreenKeyboard(_this, window, window->text_input_props);
- }
- }
- #endif // SDL_VIDEO_DRIVER_ANDROID
|