From e474718f2cdcc14e18ebcd1ebf7cf3f256fdfb5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Fran=C4=8De=C5=A1kin?= Date: Mon, 7 Jan 2019 15:27:43 +0100 Subject: [PATCH] Make Android Joystick init behave in the same was as for SDL --- src/Joystick/JoystickAndroid.cc | 6 +++--- src/Joystick/JoystickAndroid.h | 6 ++++-- src/Joystick/JoystickManager.cc | 7 +++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Joystick/JoystickAndroid.cc b/src/Joystick/JoystickAndroid.cc index 7ec59a4778..bc9f22b677 100644 --- a/src/Joystick/JoystickAndroid.cc +++ b/src/Joystick/JoystickAndroid.cc @@ -76,8 +76,6 @@ QMap JoystickAndroid::discover(MultiVehicleManager* _multiVe bool joystickFound = false; static QMap ret; - _initStatic(); //it's enough to run it once, should be in a static constructor - QMutexLocker lock(&m_mutex); QAndroidJniEnvironment env; @@ -194,7 +192,7 @@ uint8_t JoystickAndroid::_getHat(int hat,int i) { } //helper method -void JoystickAndroid::_initStatic() { +bool JoystickAndroid::init() { //this gets list of all possible buttons - this is needed to check how many buttons our gamepad supports //instead of the whole logic below we could have just a simple array of hardcoded int values as these 'should' not change @@ -229,5 +227,7 @@ void JoystickAndroid::_initStatic() { ACTION_DOWN = QAndroidJniObject::getStaticField("android/view/KeyEvent", "ACTION_DOWN"); ACTION_UP = QAndroidJniObject::getStaticField("android/view/KeyEvent", "ACTION_UP"); + + return true; } diff --git a/src/Joystick/JoystickAndroid.h b/src/Joystick/JoystickAndroid.h index b50c7f9198..78defedf51 100644 --- a/src/Joystick/JoystickAndroid.h +++ b/src/Joystick/JoystickAndroid.h @@ -16,9 +16,12 @@ class JoystickAndroid : public Joystick, public QtAndroidPrivate::GenericMotionE { public: JoystickAndroid(const QString& name, int axisCount, int buttonCount, int id, MultiVehicleManager* multiVehicleManager); + ~JoystickAndroid(); - static QMap discover(MultiVehicleManager* _multiVehicleManager); + static bool init(); + + static QMap discover(MultiVehicleManager* _multiVehicleManager); private: bool handleKeyEvent(jobject event); @@ -37,7 +40,6 @@ private: bool *btnValue; int *axisValue; - static void _initStatic(); static int * _androidBtnList; //list of all possible android buttons static int _androidBtnListCount; diff --git a/src/Joystick/JoystickManager.cc b/src/Joystick/JoystickManager.cc index 001418e52e..f546609fba 100644 --- a/src/Joystick/JoystickManager.cc +++ b/src/Joystick/JoystickManager.cc @@ -60,8 +60,11 @@ void JoystickManager::init() { _joystickCheckTimer.start(250); } #elif defined(__android__) - _setActiveJoystickFromSettings(); - //TODO: Investigate Android events for Joystick hot plugging & run _joystickCheckTimer if possible + if (JoystickAndroid::init()) { + _setActiveJoystickFromSettings(); + connect(&_joystickCheckTimer, &QTimer::timeout, this, &JoystickManager::_updateAvailableJoysticks); + _joystickCheckTimer.start(250); + } #endif } -- GitLab