summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java5
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java1
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp33
-rw-r--r--src/corelib/kernel/qjnihelpers_p.h11
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp8
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) \