diff options
Diffstat (limited to 'src/corelib/kernel/qjnihelpers.cpp')
-rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 74eb6f5b27..311ebaa092 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -40,6 +40,8 @@ ****************************************************************************/ #include "qjnihelpers_p.h" +#include "qmutex.h" +#include "qlist.h" QT_BEGIN_NAMESPACE @@ -48,6 +50,39 @@ static jobject g_jActivity = Q_NULLPTR; static jobject g_jClassLoader = Q_NULLPTR; static jint g_androidSdkVersion = 0; +namespace { + class ActivityResultListeners + { + public: + QMutex mutex; + QList<QtAndroidPrivate::ActivityResultListener *> listeners; + }; +} + +Q_GLOBAL_STATIC(ActivityResultListeners, g_activityResultListeners) + +void QtAndroidPrivate::registerActivityResultListener(ActivityResultListener *listener) +{ + QMutexLocker locker(&g_activityResultListeners()->mutex); + g_activityResultListeners()->listeners.append(listener); +} + +void QtAndroidPrivate::unregisterActivityResultListener(ActivityResultListener *listener) +{ + QMutexLocker locker(&g_activityResultListeners()->mutex); + g_activityResultListeners()->listeners.removeAll(listener); +} + +void QtAndroidPrivate::handleActivityResult(jint requestCode, jint resultCode, jobject data) +{ + QMutexLocker locker(&g_activityResultListeners()->mutex); + const QList<QtAndroidPrivate::ActivityResultListener *> &listeners = g_activityResultListeners()->listeners; + for (int i=0; i<listeners.size(); ++i) { + if (listeners.at(i)->handleActivityResult(requestCode, resultCode, data)) + break; + } +} + static inline bool exceptionCheck(JNIEnv *env) { if (env->ExceptionCheck()) { |