diff options
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 33 | ||||
-rw-r--r-- | src/corelib/kernel/qjnihelpers_p.h | 11 |
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 |