Android: remove pollInputDevice() in favor of InputDeviceListener (#15659)

This commit is contained in:
Sylvain Becker
2026-06-04 05:38:04 +02:00
committed by GitHub
parent 42fc082b5e
commit fc3a96e47a
7 changed files with 85 additions and 87 deletions

View File

@@ -407,10 +407,10 @@ static jmethodID midAudioSetThreadPriority;
static jclass mControllerManagerClass;
// method signatures
static jmethodID midPollInputDevices;
static jmethodID midDetectDevices;
static jmethodID midJoystickSetLED;
static jmethodID midJoystickSetSensorsEnabled;
static jmethodID midPollHapticDevices;
static jmethodID midDetectHapticDevices;
static jmethodID midHapticRun;
static jmethodID midHapticRumble;
static jmethodID midHapticStop;
@@ -752,14 +752,14 @@ JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI)(JNIEnv *env
mControllerManagerClass = (jclass)((*env)->NewGlobalRef(env, cls));
midPollInputDevices = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"pollInputDevices", "()V");
midDetectDevices = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"detectDevices", "()V");
midJoystickSetLED = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"joystickSetLED", "(IIII)V");
midJoystickSetSensorsEnabled = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"joystickSetSensorsEnabled", "(IZ)V");
midPollHapticDevices = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"pollHapticDevices", "()V");
midDetectHapticDevices = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"detectHapticDevices", "()V");
midHapticRun = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"hapticRun", "(IFI)V");
midHapticRumble = (*env)->GetStaticMethodID(env, mControllerManagerClass,
@@ -767,7 +767,7 @@ JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI)(JNIEnv *env
midHapticStop = (*env)->GetStaticMethodID(env, mControllerManagerClass,
"hapticStop", "(I)V");
if (!midPollInputDevices || !midJoystickSetLED || !midJoystickSetSensorsEnabled || !midPollHapticDevices || !midHapticRun || !midHapticRumble || !midHapticStop) {
if (!midDetectDevices || !midJoystickSetLED || !midJoystickSetSensorsEnabled || !midDetectHapticDevices || !midHapticRun || !midHapticRumble || !midHapticStop) {
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLControllerManager.java?");
}
@@ -2639,10 +2639,10 @@ void Android_JNI_InitTouch(void)
(*env)->CallStaticVoidMethod(env, mActivityClass, midInitTouch);
}
void Android_JNI_PollInputDevices(void)
void Android_JNI_DetectDevices(void)
{
JNIEnv *env = Android_JNI_GetEnv();
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midPollInputDevices);
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midDetectDevices);
}
void Android_JNI_JoystickSetLED(int device_id, int red, int green, int blue)
@@ -2657,10 +2657,10 @@ void Android_JNI_JoystickSetSensorsEnabled(int device_id, bool enabled)
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midJoystickSetSensorsEnabled, device_id, (enabled == 1));
}
void Android_JNI_PollHapticDevices(void)
void Android_JNI_DetectHapticDevices(void)
{
JNIEnv *env = Android_JNI_GetEnv();
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midPollHapticDevices);
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midDetectHapticDevices);
}
void Android_JNI_HapticRun(int device_id, float intensity, int length)

View File

@@ -102,12 +102,12 @@ bool Android_JNI_HasClipboardText(void);
int Android_JNI_GetPowerInfo(int *plugged, int *charged, int *battery, int *seconds, int *percent);
// Joystick support
void Android_JNI_PollInputDevices(void);
void Android_JNI_DetectDevices(void);
void Android_JNI_JoystickSetLED(int device_id, int red, int green, int blue);
void Android_JNI_JoystickSetSensorsEnabled(int device_id, bool enabled);
// Haptic support
void Android_JNI_PollHapticDevices(void);
void Android_JNI_DetectHapticDevices(void);
void Android_JNI_HapticRun(int device_id, float intensity, int length);
void Android_JNI_HapticRumble(int device_id, float low_frequency_intensity, float high_frequency_intensity, int length);
void Android_JNI_HapticStop(int device_id);

View File

@@ -41,8 +41,7 @@ static int numhaptics = 0;
bool SDL_SYS_HapticInit(void)
{
Android_JNI_PollHapticDevices();
Android_JNI_DetectHapticDevices();
return true;
}

View File

@@ -535,11 +535,9 @@ done:
SDL_UnlockJoysticks();
}
static void ANDROID_JoystickDetect(void);
static bool ANDROID_JoystickInit(void)
{
ANDROID_JoystickDetect();
Android_JNI_DetectDevices();
return true;
}
@@ -550,16 +548,9 @@ static int ANDROID_JoystickGetCount(void)
static void ANDROID_JoystickDetect(void)
{
/* Support for device connect/disconnect is API >= 16 only,
* so we poll every three seconds
/* Support for device connect/disconnect is implemented using InputDeviceListener
* Ref: http://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
*/
static Uint64 timeout = 0;
Uint64 now = SDL_GetTicks();
if (!timeout || now >= timeout) {
timeout = now + 3000;
Android_JNI_PollInputDevices();
}
}
static bool ANDROID_JoystickIsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version, const char *name)
@@ -596,16 +587,6 @@ static SDL_joylist_item *JoystickByDeviceId(int device_id)
item = item->next;
}
// Joystick not found, try adding it
ANDROID_JoystickDetect();
while (item) {
if (item->device_id == device_id) {
return item;
}
item = item->next;
}
return NULL;
}