Maelstrom: Fixed keyboard being hidden while being shown on Android

From e844a98803b197feed7cf66faad69b748c544215 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 25 Apr 2026 17:14:12 -0700
Subject: [PATCH] Fixed keyboard being hidden while being shown on Android

---
 .../src/main/java/org/libsdl/app/SDLActivity.java   |  8 ++++----
 .../src/main/java/org/libsdl/app/SDLSurface.java    | 13 +++++++++++--
 external/SDL                                        |  2 +-
 3 files changed, 16 insertions(+), 7 deletions(-)

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 1c7ca013..2c18889e 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
@@ -570,7 +570,7 @@ protected void onStart() {
     public static int getNaturalOrientation() {
         int result = SDL_ORIENTATION_UNKNOWN;
 
-        Activity activity = (Activity)getContext();
+        Activity activity = getContext();
         if (activity != null) {
             Configuration config = activity.getResources().getConfiguration();
             Display display = activity.getWindowManager().getDefaultDisplay();
@@ -590,7 +590,7 @@ public static int getNaturalOrientation() {
     public static int getCurrentRotation() {
         int result = 0;
 
-        Activity activity = (Activity)getContext();
+        Activity activity = getContext();
         if (activity != null) {
             Display display = activity.getWindowManager().getDefaultDisplay();
             switch (display.getRotation()) {
@@ -1292,7 +1292,7 @@ public static boolean isVRHeadset() {
     public static double getDiagonal()
     {
         DisplayMetrics metrics = new DisplayMetrics();
-        Activity activity = (Activity)getContext();
+        Activity activity = getContext();
         if (activity == null) {
             return 0.0;
         }
@@ -1940,7 +1940,7 @@ public static void requestPermission(String permission, int requestCode) {
             return;
         }
 
-        Activity activity = (Activity)getContext();
+        Activity activity = getContext();
         if (activity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
             activity.requestPermissions(new String[]{permission}, requestCode);
         } else {
diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLSurface.java b/android-project/app/src/main/java/org/libsdl/app/SDLSurface.java
index 42eceb50..dedc00b7 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLSurface.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLSurface.java
@@ -45,6 +45,9 @@ public class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
     // Is SurfaceView ready for rendering
     protected boolean mIsSurfaceReady;
 
+    // Is on-screen keyboard visible
+    protected boolean mKeyboardVisible;
+
     // Pinch events
     private final ScaleGestureDetector scaleGestureDetector;
 
@@ -210,9 +213,15 @@ public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
             SDLActivity.onNativeInsetsChanged(combined.left, combined.right, combined.top, combined.bottom);
 
             if (insets.isVisible(WindowInsets.Type.ime())) {
-                SDLActivity.onNativeScreenKeyboardShown();
+                if (!mKeyboardVisible) {
+                    mKeyboardVisible = true;
+                    SDLActivity.onNativeScreenKeyboardShown();
+                }
             } else {
-                SDLActivity.onNativeScreenKeyboardHidden();
+                if (mKeyboardVisible) {
+                    mKeyboardVisible = false;
+                    SDLActivity.onNativeScreenKeyboardHidden();
+                }
             }
         }
 
diff --git a/external/SDL b/external/SDL
index 61ba96db..ee2bebba 160000
--- a/external/SDL
+++ b/external/SDL
@@ -1 +1 @@
-Subproject commit 61ba96db363b264f507ed00a7850c3174aa32ce9
+Subproject commit ee2bebbace0e3605dee846db19f4359654dbd97f