summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qjnihelpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel/qjnihelpers.cpp')
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp35
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()) {