diff options
| author | JosJuice <josjuice@gmail.com> | 2022-03-06 20:27:25 +0100 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2023-03-03 22:28:23 +0100 |
| commit | 104ea098921846e01eb58ebfa00822b14da46cda (patch) | |
| tree | 11f82b21f94f17731fefcfce6ac27ac4bfbf0d7f /Source/Core/InputCommon | |
| parent | d6af294a2370b1827508cdf1819ad7cedbb39f7b (diff) | |
ControllerInterface/Android: Implement hotplug
Diffstat (limited to 'Source/Core/InputCommon')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/Android/Android.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp index 5a16ef56d0..e5baa4e43e 100644 --- a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp +++ b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp @@ -58,6 +58,10 @@ jclass s_motion_event_class; jmethodID s_motion_event_get_axis_value; jmethodID s_motion_event_get_source; +jclass s_controller_interface_class; +jmethodID s_controller_interface_register_input_device_listener; +jmethodID s_controller_interface_unregister_input_device_listener; + jintArray s_keycodes_array; using Clock = std::chrono::steady_clock; @@ -635,20 +639,36 @@ void Init() s_motion_event_get_axis_value = env->GetMethodID(s_motion_event_class, "getAxisValue", "(I)F"); s_motion_event_get_source = env->GetMethodID(s_motion_event_class, "getSource", "()I"); + const jclass controller_interface_class = + env->FindClass("org/dolphinemu/dolphinemu/features/input/model/ControllerInterface"); + s_controller_interface_class = + reinterpret_cast<jclass>(env->NewGlobalRef(controller_interface_class)); + s_controller_interface_register_input_device_listener = + env->GetStaticMethodID(s_controller_interface_class, "registerInputDeviceListener", "()V"); + s_controller_interface_unregister_input_device_listener = + env->GetStaticMethodID(s_controller_interface_class, "unregisterInputDeviceListener", "()V"); + jintArray keycodes_array = CreateKeyCodesArray(env); s_keycodes_array = reinterpret_cast<jintArray>(env->NewGlobalRef(keycodes_array)); env->DeleteLocalRef(keycodes_array); + + env->CallStaticVoidMethod(s_controller_interface_class, + s_controller_interface_register_input_device_listener); } void Shutdown() { JNIEnv* env = IDCache::GetEnvForThread(); + env->CallStaticVoidMethod(s_controller_interface_class, + s_controller_interface_unregister_input_device_listener); + env->DeleteGlobalRef(s_input_device_class); env->DeleteGlobalRef(s_motion_range_class); env->DeleteGlobalRef(s_input_event_class); env->DeleteGlobalRef(s_key_event_class); env->DeleteGlobalRef(s_motion_event_class); + env->DeleteGlobalRef(s_controller_interface_class); env->DeleteGlobalRef(s_keycodes_array); } @@ -785,4 +805,11 @@ Java_org_dolphinemu_dolphinemu_features_input_model_ControllerInterface_dispatch return last_polled >= Clock::now() - ACTIVE_INPUT_TIMEOUT; } + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_ControllerInterface_refreshDevices(JNIEnv* env, + jclass) +{ + g_controller_interface.RefreshDevices(); +} } |
