diff --git a/src/Joystick/JoystickAndroid.cc b/src/Joystick/JoystickAndroid.cc index 7ec59a47783cecf419c80876d6aa5f3f664bf7e0..bc9f22b6773ecd01d253c245468dc8f184fc1cf8 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 b50c7f919825977a539ecfc05bbc8df1bd2243bd..78defedf51fc568d22a0cf084c1374e5d6ba9fdf 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 001418e52edd3a2fc750e3ee4ef4333fb2315e22..f546609fbaa06aba378017eb061b4cf99b4171c7 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 }