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