From 5a079a2d114f96d4847d1ee305d5b7c16eeec50e Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 27 Dec 2025 12:03:39 -0800 Subject: Initial commit --- .../src/video/android/SDL_androidkeyboard.c | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 contrib/SDL-3.2.8/src/video/android/SDL_androidkeyboard.c (limited to 'contrib/SDL-3.2.8/src/video/android/SDL_androidkeyboard.c') diff --git a/contrib/SDL-3.2.8/src/video/android/SDL_androidkeyboard.c b/contrib/SDL-3.2.8/src/video/android/SDL_androidkeyboard.c new file mode 100644 index 0000000..03af7c6 --- /dev/null +++ b/contrib/SDL-3.2.8/src/video/android/SDL_androidkeyboard.c @@ -0,0 +1,468 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + 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 + +#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_SELECT, // 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 bool SDL_screen_keyboard_shown; + +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); + SDL_screen_keyboard_shown = true; +} + +void Android_HideScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window) +{ + Android_JNI_HideScreenKeyboard(); + SDL_screen_keyboard_shown = false; +} + +void Android_RestoreScreenKeyboardOnResume(SDL_VideoDevice *_this, SDL_Window *window) +{ + if (SDL_screen_keyboard_shown) { + Android_ShowScreenKeyboard(_this, window, window->text_input_props); + } +} + +bool Android_IsScreenKeyboardShown(SDL_VideoDevice *_this, SDL_Window *window) +{ + return Android_JNI_IsScreenKeyboardShown(); +} + +#endif // SDL_VIDEO_DRIVER_ANDROID -- cgit v1.2.3