InputCommon: Add Android InputBackend class.
This commit is contained in:
parent
8583b6751a
commit
a9a9fdd9e9
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "InputCommon/ControllerInterface/ControllerInterface.h"
|
#include "InputCommon/ControllerInterface/ControllerInterface.h"
|
||||||
|
|
||||||
|
#include "InputCommon/ControllerInterface/InputBackend.h"
|
||||||
#include "jni/AndroidCommon/AndroidCommon.h"
|
#include "jni/AndroidCommon/AndroidCommon.h"
|
||||||
#include "jni/AndroidCommon/IDCache.h"
|
#include "jni/AndroidCommon/IDCache.h"
|
||||||
#include "jni/Input/CoreDevice.h"
|
#include "jni/Input/CoreDevice.h"
|
||||||
|
@ -444,6 +445,23 @@ std::shared_ptr<ciface::Core::Device> FindDevice(jint device_id)
|
||||||
|
|
||||||
namespace ciface::Android
|
namespace ciface::Android
|
||||||
{
|
{
|
||||||
|
class InputBackend final : public ciface::InputBackend
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using ciface::InputBackend::InputBackend;
|
||||||
|
~InputBackend();
|
||||||
|
void PopulateDevices() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void AddDevice(JNIEnv* env, int device_id);
|
||||||
|
void AddSensorDevice(JNIEnv* env);
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<ciface::InputBackend> CreateInputBackend(ControllerInterface* controller_interface)
|
||||||
|
{
|
||||||
|
return std::make_unique<InputBackend>(controller_interface);
|
||||||
|
}
|
||||||
|
|
||||||
class AndroidInput : public Core::Device::Input
|
class AndroidInput : public Core::Device::Input
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -885,7 +903,7 @@ void Init()
|
||||||
s_controller_interface_register_input_device_listener);
|
s_controller_interface_register_input_device_listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shutdown()
|
InputBackend::~InputBackend()
|
||||||
{
|
{
|
||||||
JNIEnv* env = IDCache::GetEnvForThread();
|
JNIEnv* env = IDCache::GetEnvForThread();
|
||||||
|
|
||||||
|
@ -903,7 +921,7 @@ void Shutdown()
|
||||||
env->DeleteGlobalRef(s_keycodes_array);
|
env->DeleteGlobalRef(s_keycodes_array);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AddDevice(JNIEnv* env, int device_id)
|
void InputBackend::AddDevice(JNIEnv* env, int device_id)
|
||||||
{
|
{
|
||||||
jobject input_device =
|
jobject input_device =
|
||||||
env->CallStaticObjectMethod(s_input_device_class, s_input_device_get_device, device_id);
|
env->CallStaticObjectMethod(s_input_device_class, s_input_device_get_device, device_id);
|
||||||
|
@ -921,7 +939,7 @@ static void AddDevice(JNIEnv* env, int device_id)
|
||||||
if (device->Inputs().empty() && device->Outputs().empty())
|
if (device->Inputs().empty() && device->Outputs().empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_controller_interface.AddDevice(device);
|
GetControllerInterface().AddDevice(device);
|
||||||
|
|
||||||
Core::DeviceQualifier qualifier;
|
Core::DeviceQualifier qualifier;
|
||||||
qualifier.FromDevice(device.get());
|
qualifier.FromDevice(device.get());
|
||||||
|
@ -936,7 +954,7 @@ static void AddDevice(JNIEnv* env, int device_id)
|
||||||
env->DeleteLocalRef(j_qualifier);
|
env->DeleteLocalRef(j_qualifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AddSensorDevice(JNIEnv* env)
|
void InputBackend::AddSensorDevice(JNIEnv* env)
|
||||||
{
|
{
|
||||||
// Device sensors (accelerometer, etc.) aren't associated with any Android InputDevice.
|
// Device sensors (accelerometer, etc.) aren't associated with any Android InputDevice.
|
||||||
// Create an otherwise empty Dolphin input device so that they have somewhere to live.
|
// Create an otherwise empty Dolphin input device so that they have somewhere to live.
|
||||||
|
@ -946,7 +964,7 @@ static void AddSensorDevice(JNIEnv* env)
|
||||||
if (device->Inputs().empty() && device->Outputs().empty())
|
if (device->Inputs().empty() && device->Outputs().empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_controller_interface.AddDevice(device);
|
GetControllerInterface().AddDevice(device);
|
||||||
|
|
||||||
Core::DeviceQualifier qualifier;
|
Core::DeviceQualifier qualifier;
|
||||||
qualifier.FromDevice(device.get());
|
qualifier.FromDevice(device.get());
|
||||||
|
@ -959,7 +977,7 @@ static void AddSensorDevice(JNIEnv* env)
|
||||||
env->DeleteLocalRef(j_qualifier);
|
env->DeleteLocalRef(j_qualifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PopulateDevices()
|
void InputBackend::PopulateDevices()
|
||||||
{
|
{
|
||||||
INFO_LOG_FMT(CONTROLLERINTERFACE, "Android populating devices");
|
INFO_LOG_FMT(CONTROLLERINTERFACE, "Android populating devices");
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,10 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "InputCommon/ControllerInterface/InputBackend.h"
|
||||||
|
|
||||||
namespace ciface::Android
|
namespace ciface::Android
|
||||||
{
|
{
|
||||||
void Init();
|
std::unique_ptr<ciface::InputBackend> CreateInputBackend(ControllerInterface* controller_interface);
|
||||||
void Shutdown();
|
|
||||||
|
|
||||||
void PopulateDevices();
|
|
||||||
|
|
||||||
} // namespace ciface::Android
|
} // namespace ciface::Android
|
||||||
|
|
|
@ -71,7 +71,7 @@ void ControllerInterface::Initialize(const WindowSystemInfo& wsi)
|
||||||
m_input_backends.emplace_back(ciface::SDL::CreateInputBackend(this));
|
m_input_backends.emplace_back(ciface::SDL::CreateInputBackend(this));
|
||||||
#endif
|
#endif
|
||||||
#ifdef CIFACE_USE_ANDROID
|
#ifdef CIFACE_USE_ANDROID
|
||||||
ciface::Android::Init();
|
m_input_backends.emplace_back(ciface::Android::CreateInputBackend(this));
|
||||||
#endif
|
#endif
|
||||||
#ifdef CIFACE_USE_EVDEV
|
#ifdef CIFACE_USE_EVDEV
|
||||||
m_input_backends.emplace_back(ciface::evdev::CreateInputBackend(this));
|
m_input_backends.emplace_back(ciface::evdev::CreateInputBackend(this));
|
||||||
|
@ -157,10 +157,6 @@ void ControllerInterface::RefreshDevices(RefreshReason reason)
|
||||||
// do it async, to not risk the emulated controllers default config loading not finding a default
|
// do it async, to not risk the emulated controllers default config loading not finding a default
|
||||||
// device.
|
// device.
|
||||||
|
|
||||||
#ifdef CIFACE_USE_ANDROID
|
|
||||||
ciface::Android::PopulateDevices();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (auto& backend : m_input_backends)
|
for (auto& backend : m_input_backends)
|
||||||
backend->PopulateDevices();
|
backend->PopulateDevices();
|
||||||
|
|
||||||
|
@ -199,10 +195,6 @@ void ControllerInterface::Shutdown()
|
||||||
// Update control references so shared_ptr<Device>s are freed up BEFORE we shutdown the backends.
|
// Update control references so shared_ptr<Device>s are freed up BEFORE we shutdown the backends.
|
||||||
ClearDevices();
|
ClearDevices();
|
||||||
|
|
||||||
#ifdef CIFACE_USE_ANDROID
|
|
||||||
ciface::Android::Shutdown();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Empty the container of input backends to deconstruct and deinitialize them.
|
// Empty the container of input backends to deconstruct and deinitialize them.
|
||||||
m_input_backends.clear();
|
m_input_backends.clear();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue