SDL: Change controller sensor state on the main UI thread on Android (ecc33)

From ecc33ac29adff2738594dd8bfcd6b11f1028bfaa Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 12 May 2026 19:25:58 -0700
Subject: [PATCH] Change controller sensor state on the main UI thread on
 Android

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

(cherry picked from commit c362f1341f2e2e6abf34ae05d6068ad89bebd00d)
---
 .../main/java/org/libsdl/app/SDLControllerManager.java    | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java b/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java
index 31b07b0ac0cdb..2a0296eb0c03f 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java
@@ -91,7 +91,13 @@ static void joystickSetLED(int device_id, int red, int green, int blue) {
      * This method is called by SDL using JNI.
      */
     static void joystickSetSensorsEnabled(int device_id, boolean enabled) {
-        mJoystickHandler.setSensorsEnabled(device_id, enabled);
+        // Run this on the UI thread so we don't race with enableSensor() in SDLSurface.java
+        SDL.getContext().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mJoystickHandler.setSensorsEnabled(device_id, enabled);
+            }
+        });
     }
 
     /**