Add the ability to set SDL to handle Return as 'hide IME' on Android softkeyboard. (thanks Rachel!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
index a3642ac..1537240 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
@@ -1501,6 +1501,25 @@ class SDLInputConnection extends BaseInputConnection {
* and so we need to generate them ourselves in commitText. To avoid duplicates on the handful of keys
* that still do, we empty this out.
*/
+
+ /*
+ * Return DOES still generate a key event, however. So rather than using it as the 'click a button' key
+ * as we do with physical keyboards, let's just use it to hide the keyboard.
+ */
+
+ if (event.getKeyCode() == 66) {
+ String imeHide = SDLActivity.nativeGetHint("SDL_ANDROID_RETURN_HIDES_IME");
+ if ((imeHide != null) && imeHide.equals("1")) {
+ Context c = SDL.getContext();
+ if (c instanceof SDLActivity) {
+ SDLActivity activity = (SDLActivity)c;
+ activity.sendCommand(SDLActivity.COMMAND_TEXTEDIT_HIDE, null);
+ return true;
+ }
+ }
+ }
+
+
return super.sendKeyEvent(event);
}
diff --git a/include/SDL_hints.h b/include/SDL_hints.h
index 7184b3d..0213daf 100644
--- a/include/SDL_hints.h
+++ b/include/SDL_hints.h
@@ -720,6 +720,19 @@ extern "C" {
*/
#define SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH "SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH"
+ /**
+ * \brief A variable to control whether the return key on the soft keyboard should hide the
+ * soft keyboard on Android.
+ *
+ * The variable can be set to the following values:
+ * "0" - The return key will be handled as a key event. This is the behaviour of
+ * SDL <= 2.0.3. (default)
+ * "1" - The return key will hide the keyboard.
+ *
+ * The value of this hint is used at runtime, so it can be changed at any time.
+ */
+#define SDL_HINT_ANDROID_RETURN_HIDES_IME "SDL_ANDROID_RETURN_HIDES_IME"
+
/**
* \brief override the binding element for keyboard inputs for Emscripten builds
*