aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-11-21 16:12:18 +0100
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-11-21 16:12:18 +0100
commit1b8225028d3e18ed912f41944e7a60679e3a5142 (patch)
tree498fcc2052a0b29714082f698dc2efbfdf134778
parentddea472c69083c7ddee07d4512b70fe58a27ad23 (diff)
parentefabc3f1c4cff9158924d4c3721470d82ea89ec9 (diff)
Merge remote-tracking branch 'origin/5.4' into dev
-rw-r--r--examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc54
-rw-r--r--src/androidextras/jni/qandroidjniobject.cpp74
2 files changed, 92 insertions, 36 deletions
diff --git a/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc b/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc
index d499e62..991abbe 100644
--- a/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc
+++ b/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc
@@ -35,11 +35,65 @@
This example demonstrates how to add a custom Java class to an Android application, and
how to call into this using the JNI convenience APIs in the Qt Android Extras module.
+ The application UI is created by using Qt Quick.
Click on either of the smiley faces to put a notification in the status area of the Android
device.
\include examples-run.qdocinc
+ \section1 Calling Java Methods from C++ Code
+
+ We define a custom Java class called \c NotificationClient in the
+ NotificationClient.java file:
+
+ \quotefromfile notification/android-sources/src/org/qtproject/example/notification/NotificationClient.java
+ \skipto org.qtproject.example.notification
+ \printuntil /^\}/
+
+ In the NotificationClient C++ class header file, notificationclient.h, we
+ declare a simple C++ API to display notifications on an Android device. It
+ consists of a single string property, \c notification, and a slot,
+ \c updateAndroidNotification(), that calls the Java code:
+
+ \quotefromfile notification/notificationclient.h
+ \skipto Q_PROPERTY
+ \printuntil )
+ \dots
+ \skipto private slots
+ \printuntil updateAndroidNotification()
+
+ A NotificationClient object is exposed to the QML in the main source file,
+ main.cpp:
+
+ \quotefromfile notification/main.cpp
+ \skipto QQuickView view;
+ \printuntil notificationClient);
+
+ In the NotificationClient C++ class source file, notificationclient.cpp, we
+ import the QtAndroidJniObject class to be able to use its functions:
+
+ \quotefromfile notification/notificationclient.cpp
+ \skipto QAndroidJniObject
+ \printuntil >
+
+ We connect the \c notificationChanged() signal to the
+ \c updateAndroidNotification() slot to update the notification text when the
+ \c notification property changes:
+
+ \printuntil }
+
+ The \c NotificationClient::updateAndroidNotification() function calls the
+ Java method. We construct a Java string from the \c notification string
+ property:
+
+ \skipto updateAndroidNotification()
+ \printuntil fromString
+
+ And pass the string object as a parameter to the Java \c notify() method.
+ Note that we must supply the signature ourselves:
+
+ \printuntil }
+
\sa {Qt for Android}, {Qt Android Extras}
*/
diff --git a/src/androidextras/jni/qandroidjniobject.cpp b/src/androidextras/jni/qandroidjniobject.cpp
index 69ceeb3..21c2c73 100644
--- a/src/androidextras/jni/qandroidjniobject.cpp
+++ b/src/androidextras/jni/qandroidjniobject.cpp
@@ -286,7 +286,7 @@ QT_BEGIN_NAMESPACE
and arguments.
\code
- jclass myClass = ...;
+ jclass myClazz = ...;
QAndroidJniObject::QAndroidJniObject(myClazz, "(I)V", 3);
\endcode
*/
@@ -339,7 +339,7 @@ QT_BEGIN_NAMESPACE
\code
...
QAndroidJniObject myJavaString1 = ...;
- QAndroidJniObject myJavaString2 = myJavaString.callObjectMethod<jstring>("toString");
+ QAndroidJniObject myJavaString2 = myJavaString1.callObjectMethod<jstring>("toString");
...
\endcode
*/
@@ -447,8 +447,8 @@ QT_BEGIN_NAMESPACE
Retrieves the value of the field \a fieldName.
\code
- QAndroidJniObject volumeControll = ...;
- jint fieldValue = obj.getField<jint>("MAX_VOLUME");
+ QAndroidJniObject volumeControl = ...;
+ jint fieldValue = volumeControl.getField<jint>("MAX_VOLUME");
\endcode
*/
@@ -716,16 +716,18 @@ QT_BEGIN_NAMESPACE
QAndroidJniObject::QAndroidJniObject(const char *className, const char *sig, ...)
{
va_list args;
+ QJNIObjectPrivate::QVaListPrivate vargs = { args };
va_start(args, sig);
- d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(className, sig, args));
+ d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(className, sig, vargs));
va_end(args);
}
QAndroidJniObject::QAndroidJniObject(jclass clazz, const char *sig, ...)
{
va_list args;
+ QJNIObjectPrivate::QVaListPrivate vargs = { args };
va_start(args, sig);
- d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(clazz, sig, args));
+ d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(clazz, sig, vargs));
va_end(args);
}
@@ -757,7 +759,7 @@ void QAndroidJniObject::callMethod<void>(const char *methodName, const char *sig
{
va_list args;
va_start(args, sig);
- d->callMethod<void>(methodName, sig, args);
+ d->callMethodV<void>(methodName, sig, args);
va_end(args);
}
@@ -766,7 +768,7 @@ jboolean QAndroidJniObject::callMethod<jboolean>(const char *methodName, const c
{
va_list args;
va_start(args, sig);
- jboolean res = d->callMethod<jboolean>(methodName, sig, args);
+ jboolean res = d->callMethodV<jboolean>(methodName, sig, args);
va_end(args);
return res;
}
@@ -776,7 +778,7 @@ jbyte QAndroidJniObject::callMethod<jbyte>(const char *methodName, const char *s
{
va_list args;
va_start(args, sig);
- jbyte res = d->callMethod<jbyte>(methodName, sig, args);
+ jbyte res = d->callMethodV<jbyte>(methodName, sig, args);
va_end(args);
return res;
}
@@ -786,7 +788,7 @@ jchar QAndroidJniObject::callMethod<jchar>(const char *methodName, const char *s
{
va_list args;
va_start(args, sig);
- jchar res = d->callMethod<jchar>(methodName, sig, args);
+ jchar res = d->callMethodV<jchar>(methodName, sig, args);
va_end(args);
return res;
}
@@ -796,7 +798,7 @@ jshort QAndroidJniObject::callMethod<jshort>(const char *methodName, const char
{
va_list args;
va_start(args, sig);
- jshort res = d->callMethod<jshort>(methodName, sig, args);
+ jshort res = d->callMethodV<jshort>(methodName, sig, args);
va_end(args);
return res;
}
@@ -806,7 +808,7 @@ jint QAndroidJniObject::callMethod<jint>(const char *methodName, const char *sig
{
va_list args;
va_start(args, sig);
- jint res = d->callMethod<jint>(methodName, sig, args);
+ jint res = d->callMethodV<jint>(methodName, sig, args);
va_end(args);
return res;
}
@@ -816,7 +818,7 @@ jlong QAndroidJniObject::callMethod<jlong>(const char *methodName, const char *s
{
va_list args;
va_start(args, sig);
- jlong res = d->callMethod<jlong>(methodName, sig, args);
+ jlong res = d->callMethodV<jlong>(methodName, sig, args);
va_end(args);
return res;
}
@@ -826,7 +828,7 @@ jfloat QAndroidJniObject::callMethod<jfloat>(const char *methodName, const char
{
va_list args;
va_start(args, sig);
- jfloat res = d->callMethod<jfloat>(methodName, sig, args);
+ jfloat res = d->callMethodV<jfloat>(methodName, sig, args);
va_end(args);
return res;
}
@@ -836,7 +838,7 @@ jdouble QAndroidJniObject::callMethod<jdouble>(const char *methodName, const cha
{
va_list args;
va_start(args, sig);
- jdouble res = d->callMethod<jdouble>(methodName, sig, args);
+ jdouble res = d->callMethodV<jdouble>(methodName, sig, args);
va_end(args);
return res;
}
@@ -847,7 +849,7 @@ QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName,
{
va_list args;
va_start(args, sig);
- QJNIObjectPrivate res = d->callObjectMethod(methodName, sig, args);
+ QJNIObjectPrivate res = d->callObjectMethodV(methodName, sig, args);
va_end(args);
return res;
}
@@ -962,7 +964,7 @@ void QAndroidJniObject::callStaticMethod<void>(const char *className,
{
va_list args;
va_start(args, sig);
- QJNIObjectPrivate::callStaticMethod<void>(className, methodName, sig, args);
+ QJNIObjectPrivate::callStaticMethodV<void>(className, methodName, sig, args);
va_end(args);
}
@@ -974,7 +976,7 @@ void QAndroidJniObject::callStaticMethod<void>(jclass clazz,
{
va_list args;
va_start(args, sig);
- QJNIObjectPrivate::callStaticMethod<void>(clazz, methodName, sig, args);
+ QJNIObjectPrivate::callStaticMethodV<void>(clazz, methodName, sig, args);
va_end(args);
}
@@ -986,7 +988,7 @@ jboolean QAndroidJniObject::callStaticMethod<jboolean>(const char *className,
{
va_list args;
va_start(args, sig);
- jboolean res = QJNIObjectPrivate::callStaticMethod<jboolean>(className, methodName, sig, args);
+ jboolean res = QJNIObjectPrivate::callStaticMethodV<jboolean>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -999,7 +1001,7 @@ jboolean QAndroidJniObject::callStaticMethod<jboolean>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jboolean res = QJNIObjectPrivate::callStaticMethod<jboolean>(clazz, methodName, sig, args);
+ jboolean res = QJNIObjectPrivate::callStaticMethodV<jboolean>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1012,7 +1014,7 @@ jbyte QAndroidJniObject::callStaticMethod<jbyte>(const char *className,
{
va_list args;
va_start(args, sig);
- jbyte res = QJNIObjectPrivate::callStaticMethod<jbyte>(className, methodName, sig, args);
+ jbyte res = QJNIObjectPrivate::callStaticMethodV<jbyte>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1025,7 +1027,7 @@ jbyte QAndroidJniObject::callStaticMethod<jbyte>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jbyte res = QJNIObjectPrivate::callStaticMethod<jbyte>(clazz, methodName, sig, args);
+ jbyte res = QJNIObjectPrivate::callStaticMethodV<jbyte>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1038,7 +1040,7 @@ jchar QAndroidJniObject::callStaticMethod<jchar>(const char *className,
{
va_list args;
va_start(args, sig);
- jchar res = QJNIObjectPrivate::callStaticMethod<jchar>(className, methodName, sig, args);
+ jchar res = QJNIObjectPrivate::callStaticMethodV<jchar>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1051,7 +1053,7 @@ jchar QAndroidJniObject::callStaticMethod<jchar>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jchar res = QJNIObjectPrivate::callStaticMethod<jchar>(clazz, methodName, sig, args);
+ jchar res = QJNIObjectPrivate::callStaticMethodV<jchar>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1065,7 +1067,7 @@ jshort QAndroidJniObject::callStaticMethod<jshort>(const char *className,
{
va_list args;
va_start(args, sig);
- jshort res = QJNIObjectPrivate::callStaticMethod<jshort>(className, methodName, sig, args);
+ jshort res = QJNIObjectPrivate::callStaticMethodV<jshort>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1078,7 +1080,7 @@ jshort QAndroidJniObject::callStaticMethod<jshort>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jshort res = QJNIObjectPrivate::callStaticMethod<jshort>(clazz, methodName, sig, args);
+ jshort res = QJNIObjectPrivate::callStaticMethodV<jshort>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1091,7 +1093,7 @@ jint QAndroidJniObject::callStaticMethod<jint>(const char *className,
{
va_list args;
va_start(args, sig);
- jint res = QJNIObjectPrivate::callStaticMethod<jint>(className, methodName, sig, args);
+ jint res = QJNIObjectPrivate::callStaticMethodV<jint>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1104,7 +1106,7 @@ jint QAndroidJniObject::callStaticMethod<jint>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jint res = QJNIObjectPrivate::callStaticMethod<jint>(clazz, methodName, sig, args);
+ jint res = QJNIObjectPrivate::callStaticMethodV<jint>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1117,7 +1119,7 @@ jlong QAndroidJniObject::callStaticMethod<jlong>(const char *className,
{
va_list args;
va_start(args, sig);
- jlong res = QJNIObjectPrivate::callStaticMethod<jlong>(className, methodName, sig, args);
+ jlong res = QJNIObjectPrivate::callStaticMethodV<jlong>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1130,7 +1132,7 @@ jlong QAndroidJniObject::callStaticMethod<jlong>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jlong res = QJNIObjectPrivate::callStaticMethod<jlong>(clazz, methodName, sig, args);
+ jlong res = QJNIObjectPrivate::callStaticMethodV<jlong>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1143,7 +1145,7 @@ jfloat QAndroidJniObject::callStaticMethod<jfloat>(const char *className,
{
va_list args;
va_start(args, sig);
- jfloat res = QJNIObjectPrivate::callStaticMethod<jfloat>(className, methodName, sig, args);
+ jfloat res = QJNIObjectPrivate::callStaticMethodV<jfloat>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1156,7 +1158,7 @@ jfloat QAndroidJniObject::callStaticMethod<jfloat>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jfloat res = QJNIObjectPrivate::callStaticMethod<jfloat>(clazz, methodName, sig, args);
+ jfloat res = QJNIObjectPrivate::callStaticMethodV<jfloat>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1169,7 +1171,7 @@ jdouble QAndroidJniObject::callStaticMethod<jdouble>(const char *className,
{
va_list args;
va_start(args, sig);
- jdouble res = QJNIObjectPrivate::callStaticMethod<jdouble>(className, methodName, sig, args);
+ jdouble res = QJNIObjectPrivate::callStaticMethodV<jdouble>(className, methodName, sig, args);
va_end(args);
return res;
}
@@ -1182,7 +1184,7 @@ jdouble QAndroidJniObject::callStaticMethod<jdouble>(jclass clazz,
{
va_list args;
va_start(args, sig);
- jdouble res = QJNIObjectPrivate::callStaticMethod<jdouble>(clazz, methodName, sig, args);
+ jdouble res = QJNIObjectPrivate::callStaticMethodV<jdouble>(clazz, methodName, sig, args);
va_end(args);
return res;
}
@@ -1194,7 +1196,7 @@ QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *classNam
{
va_list args;
va_start(args, sig);
- QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethod(className,
+ QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethodV(className,
methodName,
sig,
args);
@@ -1209,7 +1211,7 @@ QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass clazz,
{
va_list args;
va_start(args, sig);
- QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethod(clazz, methodName, sig, args);
+ QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethodV(clazz, methodName, sig, args);
va_end(args);
return res;
}