summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/Android/Android.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Android/Android.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
index 72d7239f9a..476aaa5537 100644
--- a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
@@ -442,6 +442,25 @@ std::shared_ptr<ciface::Core::Device> FindDevice(jint device_id)
return device;
}
+void RegisterDevicesChangedCallbackIfNeeded(JNIEnv* env, jclass controller_interface_class)
+{
+ static bool registered = false;
+ if (registered)
+ return;
+ registered = true;
+
+ const jclass global_controller_interface_class =
+ reinterpret_cast<jclass>(env->NewGlobalRef(controller_interface_class));
+ const jmethodID controller_interface_on_devices_changed =
+ env->GetStaticMethodID(global_controller_interface_class, "onDevicesChanged", "()V");
+
+ g_controller_interface.RegisterDevicesChangedCallback(
+ [global_controller_interface_class, controller_interface_on_devices_changed] {
+ IDCache::GetEnvForThread()->CallStaticVoidMethod(global_controller_interface_class,
+ controller_interface_on_devices_changed);
+ });
+}
+
} // namespace
namespace ciface::Android
@@ -903,6 +922,8 @@ InputBackend::InputBackend(ControllerInterface* controller_interface)
env->CallStaticVoidMethod(s_controller_interface_class,
s_controller_interface_register_input_device_listener);
+
+ RegisterDevicesChangedCallbackIfNeeded(env, s_controller_interface_class);
}
InputBackend::~InputBackend()