diff options
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java | 5 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 1 | ||||
-rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 33 | ||||
-rw-r--r-- | src/corelib/kernel/qjnihelpers_p.h | 11 | ||||
-rw-r--r-- | src/plugins/platforms/android/androidjnimain.cpp | 8 |
5 files changed, 57 insertions, 1 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 8e93b5b1f2..b6ba3e07ea 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -883,6 +883,11 @@ public class QtActivityDelegate } } + public void onNewIntent(Intent data) + { + QtNative.onNewIntent(data); + } + public void onActivityResult(int requestCode, int resultCode, Intent data) { try { diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 0e0072d234..0c7cd49100 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -628,6 +628,7 @@ public class QtNative // activity methods public static native void onActivityResult(int requestCode, int resultCode, Intent data); + public static native void onNewIntent(Intent data); public static native void onAndroidUiThread(long id); } 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 diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index ab653860f3..18d3ebb456 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -648,6 +648,11 @@ static void onActivityResult(JNIEnv */*env*/, jclass /*cls*/, QtAndroidPrivate::handleActivityResult(requestCode, resultCode, data); } +static void onNewIntent(JNIEnv *env, jclass /*cls*/, jobject data) +{ + QtAndroidPrivate::handleNewIntent(env, data); +} + static JNINativeMethod methods[] = { {"startQtAndroidPlugin", "()Z", (void *)startQtAndroidPlugin}, {"startQtApplication", "(Ljava/lang/String;Ljava/lang/String;)V", (void *)startQtApplication}, @@ -658,7 +663,8 @@ static JNINativeMethod methods[] = { {"updateWindow", "()V", (void *)updateWindow}, {"updateApplicationState", "(I)V", (void *)updateApplicationState}, {"handleOrientationChanged", "(II)V", (void *)handleOrientationChanged}, - {"onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult} + {"onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult}, + {"onNewIntent", "(Landroid/content/Intent;)V", (void *)onNewIntent} }; #define FIND_AND_CHECK_CLASS(CLASS_NAME) \ |