SDL: Renamed ShowTextInput/HideTextInput to ShowScreenKeyboard/HideScreenKeyboard on Android (0e913)

From 0e913a22dbaec3a20e5f3cf249e17e72c09fd0ca Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 6 Jan 2024 08:11:22 -0800
Subject: [PATCH] Renamed ShowTextInput/HideTextInput to
 ShowScreenKeyboard/HideScreenKeyboard on Android

This better reflects the actual implementation and makes SDL_HINT_ENABLE_SCREEN_KEYBOARD work on Android.

Fixes https://github.com/libsdl-org/SDL/issues/8652

(cherry picked from commit 014a63b4b5b94ce50f329eddb345f5434654305b)
---
 src/core/android/SDL_android.c          |  4 ++--
 src/core/android/SDL_android.h          |  4 ++--
 src/video/android/SDL_androidevents.c   | 11 +++++++----
 src/video/android/SDL_androidkeyboard.c | 14 +++++++-------
 src/video/android/SDL_androidkeyboard.h |  5 ++---
 src/video/android/SDL_androidvideo.c    |  4 ++--
 6 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c
index f4b162d23c7e..60620d814e16 100644
--- a/src/core/android/SDL_android.c
+++ b/src/core/android/SDL_android.c
@@ -2208,7 +2208,7 @@ void Android_JNI_SuspendScreenSaver(SDL_bool suspend)
     Android_JNI_SendMessage(COMMAND_SET_KEEP_SCREEN_ON, (suspend == SDL_FALSE) ? 0 : 1);
 }
 
-void Android_JNI_ShowTextInput(SDL_Rect *inputRect)
+void Android_JNI_ShowScreenKeyboard(SDL_Rect *inputRect)
 {
     JNIEnv *env = Android_JNI_GetEnv();
     (*env)->CallStaticBooleanMethod(env, mActivityClass, midShowTextInput,
@@ -2218,7 +2218,7 @@ void Android_JNI_ShowTextInput(SDL_Rect *inputRect)
                                     inputRect->h);
 }
 
-void Android_JNI_HideTextInput(void)
+void Android_JNI_HideScreenKeyboard(void)
 {
     /* has to match Activity constant */
     const int COMMAND_TEXTEDIT_HIDE = 3;
diff --git a/src/core/android/SDL_android.h b/src/core/android/SDL_android.h
index 3ff13d630267..20d1fc521b25 100644
--- a/src/core/android/SDL_android.h
+++ b/src/core/android/SDL_android.h
@@ -43,8 +43,8 @@ extern void Android_JNI_MinizeWindow(void);
 extern SDL_bool Android_JNI_ShouldMinimizeOnFocusLoss(void);
 
 extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]);
-extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect);
-extern void Android_JNI_HideTextInput(void);
+extern void Android_JNI_ShowScreenKeyboard(SDL_Rect *inputRect);
+extern void Android_JNI_HideScreenKeyboard(void);
 extern SDL_bool Android_JNI_IsScreenKeyboardShown(void);
 extern ANativeWindow *Android_JNI_GetNativeWindow(void);
 
diff --git a/src/video/android/SDL_androidevents.c b/src/video/android/SDL_androidevents.c
index 274ac83df3d8..cbb3b02eab85 100644
--- a/src/video/android/SDL_androidevents.c
+++ b/src/video/android/SDL_androidevents.c
@@ -24,6 +24,7 @@
 
 #include "SDL_androidevents.h"
 #include "SDL_events.h"
+#include "SDL_hints.h"
 #include "SDL_androidkeyboard.h"
 #include "SDL_androidwindow.h"
 #include "../SDL_sysvideo.h"
@@ -149,8 +150,9 @@ void Android_PumpEvents_Blocking(_THIS)
 #endif
 
             /* Make sure SW Keyboard is restored when an app becomes foreground */
-            if (SDL_IsTextInputActive()) {
-                Android_StartTextInput(_this); /* Only showTextInput */
+            if (SDL_IsTextInputActive() &&
+                SDL_GetHintBoolean(SDL_HINT_ENABLE_SCREEN_KEYBOARD, SDL_TRUE)) {
+                Android_ShowScreenKeyboard(_this, Android_Window); /* Only showTextInput */
             }
         }
     } else {
@@ -233,8 +235,9 @@ void Android_PumpEvents_NonBlocking(_THIS)
 #endif
 
             /* Make sure SW Keyboard is restored when an app becomes foreground */
-            if (SDL_IsTextInputActive()) {
-                Android_StartTextInput(_this); /* Only showTextInput */
+            if (SDL_IsTextInputActive() &&
+                SDL_GetHintBoolean(SDL_HINT_ENABLE_SCREEN_KEYBOARD, SDL_TRUE)) {
+                Android_ShowScreenKeyboard(_this, Android_Window); /* Only showTextInput */
             }
         }
     } else {
diff --git a/src/video/android/SDL_androidkeyboard.c b/src/video/android/SDL_androidkeyboard.c
index 1de89ce05bee..13b056334df8 100644
--- a/src/video/android/SDL_androidkeyboard.c
+++ b/src/video/android/SDL_androidkeyboard.c
@@ -341,20 +341,20 @@ SDL_bool Android_HasScreenKeyboardSupport(_THIS)
     return SDL_TRUE;
 }
 
-SDL_bool Android_IsScreenKeyboardShown(_THIS, SDL_Window *window)
+void Android_ShowScreenKeyboard(_THIS, SDL_Window *window)
 {
-    return Android_JNI_IsScreenKeyboardShown();
+    SDL_VideoData *videodata = _this->driverdata;
+    Android_JNI_ShowScreenKeyboard(&videodata->textRect);
 }
 
-void Android_StartTextInput(_THIS)
+void Android_HideScreenKeyboard(_THIS, SDL_Window *window)
 {
-    SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
-    Android_JNI_ShowTextInput(&videodata->textRect);
+    Android_JNI_HideScreenKeyboard();
 }
 
-void Android_StopTextInput(_THIS)
+SDL_bool Android_IsScreenKeyboardShown(_THIS, SDL_Window *window)
 {
-    Android_JNI_HideTextInput();
+    return Android_JNI_IsScreenKeyboardShown();
 }
 
 void Android_SetTextInputRect(_THIS, const SDL_Rect *rect)
diff --git a/src/video/android/SDL_androidkeyboard.h b/src/video/android/SDL_androidkeyboard.h
index aa9d9a08feda..1124b4a9e452 100644
--- a/src/video/android/SDL_androidkeyboard.h
+++ b/src/video/android/SDL_androidkeyboard.h
@@ -26,10 +26,9 @@ extern int Android_OnKeyDown(int keycode);
 extern int Android_OnKeyUp(int keycode);
 
 extern SDL_bool Android_HasScreenKeyboardSupport(_THIS);
+extern void Android_ShowScreenKeyboard(_THIS, SDL_Window *window);
+extern void Android_HideScreenKeyboard(_THIS, SDL_Window *window);
 extern SDL_bool Android_IsScreenKeyboardShown(_THIS, SDL_Window *window);
-
-extern void Android_StartTextInput(_THIS);
-extern void Android_StopTextInput(_THIS);
 extern void Android_SetTextInputRect(_THIS, const SDL_Rect *rect);
 
 /* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c
index bb6696eb487b..d4b257242929 100644
--- a/src/video/android/SDL_androidvideo.c
+++ b/src/video/android/SDL_androidvideo.c
@@ -148,12 +148,12 @@ static SDL_VideoDevice *Android_CreateDevice(void)
     device->SuspendScreenSaver = Android_SuspendScreenSaver;
 
     /* Text input */
-    device->StartTextInput = Android_StartTextInput;
-    device->StopTextInput = Android_StopTextInput;
     device->SetTextInputRect = Android_SetTextInputRect;
 
     /* Screen keyboard */
     device->HasScreenKeyboardSupport = Android_HasScreenKeyboardSupport;
+    device->ShowScreenKeyboard = Android_ShowScreenKeyboard;
+    device->HideScreenKeyboard = Android_HideScreenKeyboard;
     device->IsScreenKeyboardShown = Android_IsScreenKeyboardShown;
 
     /* Clipboard */