ControllerInterface/Android: Use InputEvent.getDeviceId

Instead of InputEvent.getDevice followed by InputDevice.getId.
Should hopefully fix https://bugs.dolphin-emu.org/issues/13237,
while also being simpler.
This commit is contained in:
JosJuice 2023-05-07 18:40:28 +02:00
parent ddce941bf1
commit 24a697514e
1 changed files with 4 additions and 11 deletions

View File

@ -37,7 +37,6 @@ jclass s_input_device_class;
jmethodID s_input_device_get_device_ids; jmethodID s_input_device_get_device_ids;
jmethodID s_input_device_get_device; jmethodID s_input_device_get_device;
jmethodID s_input_device_get_controller_number; jmethodID s_input_device_get_controller_number;
jmethodID s_input_device_get_id;
jmethodID s_input_device_get_motion_ranges; jmethodID s_input_device_get_motion_ranges;
jmethodID s_input_device_get_name; jmethodID s_input_device_get_name;
jmethodID s_input_device_get_sources; jmethodID s_input_device_get_sources;
@ -50,7 +49,7 @@ jmethodID s_motion_range_get_min;
jmethodID s_motion_range_get_source; jmethodID s_motion_range_get_source;
jclass s_input_event_class; jclass s_input_event_class;
jmethodID s_input_event_get_device; jmethodID s_input_event_get_device_id;
jclass s_key_event_class; jclass s_key_event_class;
jmethodID s_key_event_get_action; jmethodID s_key_event_get_action;
@ -798,7 +797,6 @@ void Init()
env->GetStaticMethodID(s_input_device_class, "getDevice", "(I)Landroid/view/InputDevice;"); env->GetStaticMethodID(s_input_device_class, "getDevice", "(I)Landroid/view/InputDevice;");
s_input_device_get_controller_number = s_input_device_get_controller_number =
env->GetMethodID(s_input_device_class, "getControllerNumber", "()I"); env->GetMethodID(s_input_device_class, "getControllerNumber", "()I");
s_input_device_get_id = env->GetMethodID(s_input_device_class, "getId", "()I");
s_input_device_get_motion_ranges = s_input_device_get_motion_ranges =
env->GetMethodID(s_input_device_class, "getMotionRanges", "()Ljava/util/List;"); env->GetMethodID(s_input_device_class, "getMotionRanges", "()Ljava/util/List;");
s_input_device_get_name = s_input_device_get_name =
@ -817,8 +815,7 @@ void Init()
const jclass input_event_class = env->FindClass("android/view/InputEvent"); const jclass input_event_class = env->FindClass("android/view/InputEvent");
s_input_event_class = reinterpret_cast<jclass>(env->NewGlobalRef(input_event_class)); s_input_event_class = reinterpret_cast<jclass>(env->NewGlobalRef(input_event_class));
s_input_event_get_device = s_input_event_get_device_id = env->GetMethodID(s_input_event_class, "getDeviceId", "()I");
env->GetMethodID(s_input_event_class, "getDevice", "()Landroid/view/InputDevice;");
const jclass key_event_class = env->FindClass("android/view/KeyEvent"); const jclass key_event_class = env->FindClass("android/view/KeyEvent");
s_key_event_class = reinterpret_cast<jclass>(env->NewGlobalRef(key_event_class)); s_key_event_class = reinterpret_cast<jclass>(env->NewGlobalRef(key_event_class));
@ -990,9 +987,7 @@ Java_org_dolphinemu_dolphinemu_features_input_model_ControllerInterface_dispatch
return JNI_FALSE; return JNI_FALSE;
} }
const jobject input_device = env->CallObjectMethod(key_event, s_input_event_get_device); const jint device_id = env->CallIntMethod(key_event, s_input_event_get_device_id);
const jint device_id = env->CallIntMethod(input_device, s_input_device_get_id);
env->DeleteLocalRef(input_device);
const std::shared_ptr<ciface::Core::Device> device = FindDevice(device_id); const std::shared_ptr<ciface::Core::Device> device = FindDevice(device_id);
if (!device) if (!device)
return JNI_FALSE; return JNI_FALSE;
@ -1022,9 +1017,7 @@ JNIEXPORT jboolean JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_ControllerInterface_dispatchGenericMotionEvent( Java_org_dolphinemu_dolphinemu_features_input_model_ControllerInterface_dispatchGenericMotionEvent(
JNIEnv* env, jclass, jobject motion_event) JNIEnv* env, jclass, jobject motion_event)
{ {
const jobject input_device = env->CallObjectMethod(motion_event, s_input_event_get_device); const jint device_id = env->CallIntMethod(motion_event, s_input_event_get_device_id);
const jint device_id = env->CallIntMethod(input_device, s_input_device_get_id);
env->DeleteLocalRef(input_device);
const std::shared_ptr<ciface::Core::Device> device = FindDevice(device_id); const std::shared_ptr<ciface::Core::Device> device = FindDevice(device_id);
if (!device) if (!device)
return JNI_FALSE; return JNI_FALSE;