summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp33
-rw-r--r--src/corelib/kernel/qjnihelpers_p.h11
2 files changed, 44 insertions, 0 deletions
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp
index d3bbce305a..2ba2645f2c 100644
--- a/src/corelib/kernel/qjnihelpers.cpp
+++ b/src/corelib/kernel/qjnihelpers.cpp
@@ -89,6 +89,39 @@ void QtAndroidPrivate::handleActivityResult(jint requestCode, jint resultCode, j
}
}
+namespace {
+ class NewIntentListeners
+ {
+ public:
+ QMutex mutex;
+ QList<QtAndroidPrivate::NewIntentListener *> listeners;
+ };
+}
+
+Q_GLOBAL_STATIC(NewIntentListeners, g_newIntentListeners)
+
+void QtAndroidPrivate::registerNewIntentListener(NewIntentListener *listener)
+{
+ QMutexLocker locker(&g_newIntentListeners()->mutex);
+ g_newIntentListeners()->listeners.append(listener);
+}
+
+void QtAndroidPrivate::unregisterNewIntentListener(NewIntentListener *listener)
+{
+ QMutexLocker locker(&g_newIntentListeners()->mutex);
+ g_newIntentListeners()->listeners.removeAll(listener);
+}
+
+void QtAndroidPrivate::handleNewIntent(JNIEnv *env, jobject intent)
+{
+ QMutexLocker locker(&g_newIntentListeners()->mutex);
+ const QList<QtAndroidPrivate::NewIntentListener *> &listeners = g_newIntentListeners()->listeners;
+ for (int i=0; i<listeners.size(); ++i) {
+ if (listeners.at(i)->handleNewIntent(env, intent))
+ break;
+ }
+}
+
static inline bool exceptionCheck(JNIEnv *env)
{
if (env->ExceptionCheck()) {
diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h
index 6456dce4c4..70783e4bb6 100644
--- a/src/corelib/kernel/qjnihelpers_p.h
+++ b/src/corelib/kernel/qjnihelpers_p.h
@@ -61,6 +61,13 @@ namespace QtAndroidPrivate
virtual bool handleActivityResult(jint requestCode, jint resultCode, jobject data) = 0;
};
+ class Q_CORE_EXPORT NewIntentListener
+ {
+ public:
+ virtual ~NewIntentListener() {}
+ virtual bool handleNewIntent(JNIEnv *env, jobject intent) = 0;
+ };
+
Q_CORE_EXPORT jobject activity();
Q_CORE_EXPORT JavaVM *javaVM();
Q_CORE_EXPORT jint initJNI(JavaVM *vm, JNIEnv *env);
@@ -71,6 +78,10 @@ namespace QtAndroidPrivate
Q_CORE_EXPORT void handleActivityResult(jint requestCode, jint resultCode, jobject data);
Q_CORE_EXPORT void registerActivityResultListener(ActivityResultListener *listener);
Q_CORE_EXPORT void unregisterActivityResultListener(ActivityResultListener *listener);
+
+ Q_CORE_EXPORT void handleNewIntent(JNIEnv *env, jobject intent);
+ Q_CORE_EXPORT void registerNewIntentListener(NewIntentListener *listener);
+ Q_CORE_EXPORT void unregisterNewIntentListener(NewIntentListener *listener);
}
QT_END_NAMESPACE