From 252be0e10e66fd4d92bd59b0cf4de02a8084f5ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20Str=C3=B8mme?= <christian.stromme@digia.com>
Date: Mon, 23 Sep 2013 16:13:42 +0200
Subject: [PATCH] Improve documentation.

Change-Id: Ia3999f853aa9b0ca1678f322419ddd200cae4b1a
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
---
 src/androidextras/androidextras.pro           |   2 +-
 .../src_androidextras_qjnienvironment.cpp     |  13 ++
 .../code/src_androidextras_qjniobject.cpp     |  13 ++
 .../doc/src/qtandroidextras-index.qdoc        |  20 ++-
 .../doc/src/qtandroidextras-module.qdoc       |  16 +-
 src/androidextras/jni/qjnienvironment.cpp     |  40 +++++
 src/androidextras/jni/qjniobject.cpp          | 158 ++++++++++--------
 7 files changed, 191 insertions(+), 71 deletions(-)

diff --git a/src/androidextras/androidextras.pro b/src/androidextras/androidextras.pro
index fa89194..f3caeea 100644
--- a/src/androidextras/androidextras.pro
+++ b/src/androidextras/androidextras.pro
@@ -1,6 +1,6 @@
 TARGET = QtAndroidExtras
 DEFINES += QT_NO_USING_NAMESPACE
-#QMAKE_DOCS = $$PWD/doc/qtandroidextras.qdocconf
+QMAKE_DOCS = $$PWD/doc/qtandroidextras.qdocconf
 QT -= gui
 QT += core-private
 load(qt_module)
diff --git a/src/androidextras/doc/snippets/code/src_androidextras_qjnienvironment.cpp b/src/androidextras/doc/snippets/code/src_androidextras_qjnienvironment.cpp
index e799420..bf1bd28 100644
--- a/src/androidextras/doc/snippets/code/src_androidextras_qjnienvironment.cpp
+++ b/src/androidextras/doc/snippets/code/src_androidextras_qjnienvironment.cpp
@@ -37,3 +37,16 @@
  ** $QT_END_LICENSE$
  **
  ****************************************************************************/
+
+//! [Create QJNIEnvironment]
+
+bool exceptionCheck()
+{
+    /*
+      The QJNIEnvironment attaches the current thread to the JavaVM on
+      creation and detach when it goes out of scope.
+     */
+    QJNIEnvironment qjniEnv;
+    return qjniEnv->ExceptionCheck();
+}
+//! [Create QJNIEnvironment]
diff --git a/src/androidextras/doc/snippets/code/src_androidextras_qjniobject.cpp b/src/androidextras/doc/snippets/code/src_androidextras_qjniobject.cpp
index 1ef86fe..8be1053 100644
--- a/src/androidextras/doc/snippets/code/src_androidextras_qjniobject.cpp
+++ b/src/androidextras/doc/snippets/code/src_androidextras_qjniobject.cpp
@@ -68,3 +68,16 @@ void function()
    // Ops! myJString is no longer valid.
 }
 //! [QJNIObject scope]
+
+//! [Check for exceptions]
+void function()
+{
+    QJNIObject myString = QJNIObject::fromString("Hello");
+    jchar c = myString.callMethod<jchar>("charAt", "(I)C", 1000);
+    QJNIEnvironment env;
+    if (env->ExceptionCheck()) {
+        // Handle exception here.
+        env->ExceptionClear();
+    }
+}
+//! [Check for exceptions]
diff --git a/src/androidextras/doc/src/qtandroidextras-index.qdoc b/src/androidextras/doc/src/qtandroidextras-index.qdoc
index 823e71e..cf7d3df 100644
--- a/src/androidextras/doc/src/qtandroidextras-index.qdoc
+++ b/src/androidextras/doc/src/qtandroidextras-index.qdoc
@@ -33,8 +33,24 @@
 
     \section1 Getting Started
 
-    \list
+    To include the definitions of the module's classes, use the
+    following directive:
 
-    \endlist
+    \code
+    #include <QtAndroidExtras>
+    \endcode
+
+    To link against the module, add this line to your \l qmake \c
+    .pro file:
+
+    \code
+    QT += androidextras
+    \endcode
 
+    \section1 API Reference
+
+    Links to the API reference materials:
+    \list
+    \li \l{Qt Android Extras C++ Classes}{C++ Classes}
+    \endlist
 */
diff --git a/src/androidextras/doc/src/qtandroidextras-module.qdoc b/src/androidextras/doc/src/qtandroidextras-module.qdoc
index f62484e..badb8a7 100644
--- a/src/androidextras/doc/src/qtandroidextras-module.qdoc
+++ b/src/androidextras/doc/src/qtandroidextras-module.qdoc
@@ -28,10 +28,22 @@
 /*!
     \module QtAndroidExtras
     \title Qt Android Extras C++ Classes
-    \brief The Qt Android Extras module contains functionality to additional functionality to aid development on Android.
+    \brief The Qt Android Extras module contains additional functionality for development on Android.
 
     \ingroup modules
     \qtvariable androidextras
 
-    The Qt Android Extras module adds...
+    To include the definitions of the module's classes, use the
+    following directive:
+
+    \code
+    #include <QtAndroidExtras>
+    \endcode
+
+    To link against the module, add this line to your \l qmake \c
+    .pro file:
+
+    \code
+    QT += androidextras
+    \endcode
 */
diff --git a/src/androidextras/jni/qjnienvironment.cpp b/src/androidextras/jni/qjnienvironment.cpp
index f21d763..e27e5ce 100644
--- a/src/androidextras/jni/qjnienvironment.cpp
+++ b/src/androidextras/jni/qjnienvironment.cpp
@@ -46,6 +46,46 @@
 
 QT_BEGIN_NAMESPACE
 
+/*!
+    \class QJNIEnvironment
+    \inmodule QtAndroidExtras
+    \brief The QJNIEnvironment provides access to the JNI Environment.
+    \since 5.2
+*/
+
+/*!
+    \fn QJNIEnvironment::QJNIEnvironment()
+
+    Constructs a new QJNIEnvironment object and attach the current thread to the Java VM.
+
+    \snippet code/src_androidextras_qjnienvironment.cpp Create QJNIEnvironment
+*/
+
+/*!
+    \fn QJNIEnvironment::~QJNIEnvironment()
+
+    Detaches the current thread from the Java VM and destroys the QJNIEnvironment object.
+*/
+
+/*!
+    \fn JavaVM *QJNIEnvironment::javaVM()
+
+    Returns the Java VM interface.
+*/
+
+/*!
+    \fn JNIEnv *QJNIEnvironment::operator->()
+
+    Provides access to the QJNIEnvironment's JNIEnv pointer.
+*/
+
+/*!
+    \fn QJNIEnvironment::operator JNIEnv *() const
+
+    Returns the the JNI Environment pointer.
+ */
+
+
 QJNIEnvironment::QJNIEnvironment()
     : d(new QJNIEnvironmentPrivate)
 {
diff --git a/src/androidextras/jni/qjniobject.cpp b/src/androidextras/jni/qjniobject.cpp
index e5dc6e5..8922de9 100644
--- a/src/androidextras/jni/qjniobject.cpp
+++ b/src/androidextras/jni/qjniobject.cpp
@@ -48,12 +48,14 @@ QT_BEGIN_NAMESPACE
 /*!
     \class QJNIObject
     \inmodule QtAndroidExtras
-    \brief The QJNIObject ...
+    \brief The QJNIObject is a C++ wrapper around a Java class.
     \since 5.2
 
-    \section1 Stub
+    QJNIObject provides APIs to call Java methods
 
-    Supported JNI object types:
+    \section1 JNI types
+
+    Object types:
     \list
     \li jobject
     \li jclass
@@ -70,7 +72,7 @@ QT_BEGIN_NAMESPACE
     \li jdoubleArray
     \endlist
 
-    Supported JNI Primitive types:
+    Primitive types:
     \list
     \li jboolean
     \li jbyte
@@ -82,21 +84,28 @@ QT_BEGIN_NAMESPACE
     \li jdouble
     \endlist
 
-    About function types: ...
+    \section1 General Notes:
 
-    - Class name strings needs to be the fully-qualified class name, e.g., "java/lang/String".
+    - Class name strings needs to be the fully-qualified class name, for example: "java/lang/String".
     - Method signatures are written as "(Arguments)ReturnType"
     - All object types are returned as a QJNIObject.
 
-    More information about JNI can be found in the java doc [url]
+    \section1 Handling Java exception:
+
+    When calling Java functions that might throw an exception, it is important that you handle and
+    clear out the exception before continuing.
+
+    \snippet code/src_androidextras_qjniobject.cpp Check for exceptions
 
+    For more information about JNI see: \l http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
 */
 
 /*!
     \fn QJNIObject::QJNIObject()
 
-    \code
-    \endcode
+    Constructs an invalid QJNIObject.
+
+    \sa isValid()
 */
 
 /*!
@@ -143,10 +152,12 @@ QT_BEGIN_NAMESPACE
 /*!
     \fn QJNIObject::QJNIObject(jclass clazz, const char *signature, ...)
 
-    Constructs a new QJNIObject from \a clazz by calling the non-default
-    constructor with \a signature and arguments.
+    Constructs a new QJNIObject from \a clazz by calling the constructor with \a signature
+    and arguments.
 
     \code
+    jclass myClass = ...;
+    QJNIObject::QJNIObject(myClazz, "(I)V", 3);
     \endcode
 */
 
@@ -167,20 +178,25 @@ QT_BEGIN_NAMESPACE
 */
 
 /*!
-    \fn T QJNIObject::callMethod(const char *methodName) const
+    \fn T QJNIObject::callMethod(const char *methodName, const char *signature, ...) const
 
-    Calls the Java object method \a methodName and returns the value.
+    Calls the method \a methodName with \a signature and returns the value.
 
     \code
     QJNIObject myJavaString = ...;
-    jint size = myJavaString.callMethod<jint>("length");
+    jint index = myJavaString.callMethod<jint>("indexOf", "(I)I", 0x0051);
     \endcode
+
 */
 
 /*!
-    \fn T QJNIObject::callMethod(const char *methodName, const char *signature, ...) const
+    \fn T QJNIObject::callMethod(const char *methodName) const
+
+    Calls the method \a methodName and returs the value.
 
     \code
+    QJNIObject myJavaString = ...;
+    jint size = myJavaString.callMethod<jint>("length");
     \endcode
 */
 
@@ -210,28 +226,38 @@ QT_BEGIN_NAMESPACE
 */
 
 /*!
-    \fn T QJNIObject::callStaticMethod(const char *className, const char *methodName)
+    \fn T QJNIObject::callStaticMethod(jclass clazz, const char *methodName)
+
+    Calls the static method \a methodName on \a clazz and returns the value T.
 
     \code
+    ...
+    jclass javaMathClass = ...; // ("java/lang/Math")
+    jdouble randNr = QJNIObject::callStaticMethod<jdouble>(javaMathClass, "random");
+    ...
     \endcode
 */
 
 /*!
-    \fn T QJNIObject::callStaticMethod(const char *className, const char *methodName, const char *sig, ...)
+    \fn T QJNIObject::callStaticMethod(const char *className, const char *methodName)
+
+    Calls the static method \a methodName on class \a className and returns the value.
 
     \code
+    jint value = QJNIObject::callStaticMethod<jint>("MyClass", "staticMethod");
     \endcode
 */
 
 /*!
-    \fn T QJNIObject::callStaticMethod(jclass clazz, const char *methodName)
+    \fn T QJNIObject::callStaticMethod(const char *className, const char *methodName, const char *signature, ...)
 
-    Calls the static method \a methodName on \a clazz and returns the value T.
+    Calls the static method with \a methodName with \a signature on class \a className with optional arguments.
 
     \code
     ...
-    jclass javaMathClass = ...; // ("java/lang/Math")
-    jdouble randNr = QJNIObject::callStaticMethod<jdouble>(javaMathClass, "random");
+    jint a = 2;
+    jint b = 4;
+    jint max = QJNIObject::callStaticMethod<jint>("java/lang/Math", "max", "(II)I", a, b);
     ...
     \endcode
 */
@@ -255,105 +281,101 @@ QT_BEGIN_NAMESPACE
 /*!
     \fn QJNIObject QJNIObject::callStaticObjectMethod(const char *className, const char *methodName)
 
+    Calls the static method with \a methodName on the class \a className.
+
     \code
+    QJNIObject string = QJNIObject::callStaticObjectMethod<jstring>("CustomClass", "getClassName");
     \endcode
 */
 
 /*!
-    \fn QJNIObject QJNIObject::callStaticObjectMethod(const char *className, const char *methodName, const char *sig, ...)
+    \fn QJNIObject QJNIObject::callStaticObjectMethod(const char *className, const char *methodName, const char *signature, ...)
+
+    Calls the static method with \a methodName and \a signature on the class \a className.
 
     \code
+    QJNIObject thread = QJNIObject::callStaticObjectMethod("java/lang/Thread", "currentThread", "()Ljava/lang/Thread;");
+    QJNIObject string = QJNIObject::callStaticObjectMethod("java/lang/String", "valueOf", "(I)Ljava/lang/String;", 10);
     \endcode
 */
 
 /*!
     \fn QJNIObject QJNIObject::callStaticObjectMethod(jclass clazz, const char *methodName)
 
-    Calls the static \e object method \a methodName on \a clazz.
-    \code
-    \endcode
+    Calls the static method with \a methodName on \a clazz.
+
 */
 
 /*!
     \fn QJNIObject QJNIObject::callStaticObjectMethod(jclass clazz, const char *methodName, const char *signature, ...)
 
-    \code
-    \endcode
+    Calls the static method with \a methodName and \a signature on class \a clazz.
 */
 
 /*!
     \fn T QJNIObject::getField(const char *fieldName) const
 
-    \code
-    \endcode
-*/
-
-/*!
-    \fn T QJNIObject::getField(const char *fieldName, const char *sig) const
+    Retrieves the value of the field \a fieldName.
 
     \code
+    QJNIObject volumeControll = ...;
+    jint fieldValue = obj.getField<jint>("MAX_VOLUME");
     \endcode
 */
 
 /*!
     \fn QJNIObject QJNIObject::getObjectField(const char *fieldName) const
 
-    \code
-    \endcode
+    Retrieves the object of field \a fieldName.
 */
 
 /*!
     \fn QJNIObject QJNIObject::getObjectField(const char *fieldName, const char *signature) const
 
-    \code
-    \endcode
+    Retrieves the object from the field with \a signature and \a fieldName.
 */
 
 /*!
     \fn T QJNIObject::getStaticField(const char *className, const char *fieldName)
 
-    \code
-    \endcode
+    Retrieves the value from the static field \a fieldName on the class \a className.
 */
 
 /*!
     \fn T QJNIObject::getStaticField(jclass clazz, const char *fieldName)
 
-    \code
-    \endcode
+    Retrieves the value from the static field \a fieldName on \a clazz.
 */
 
 /*!
     \fn QJNIObject QJNIObject::getStaticObjectField(const char *className, const char *fieldName)
 
-    \code
-    \endcode
+    Retrieves the object from the field \a fieldName on the class \a className.
 */
 
 /*!
     \fn QJNIObject QJNIObject::getStaticObjectField(const char *className, const char *fieldName, const char *signature)
 
-    \code
-    \endcode
+    Retrieves the object from the field with \a signature and \a fieldName on class \a className.
 */
 
 /*!
     \fn QJNIObject QJNIObject::getStaticObjectField(jclass clazz, const char *fieldName)
 
-    \code
-    \endcode
+    Retrieves the object from the field \a fieldName on \a clazz.
 */
 
 /*!
     \fn QJNIObject QJNIObject::getStaticObjectField(jclass clazz, const char *fieldName, const char *signature)
 
-    \code
-    \endcode
+    Retrieves the object from the field with \a signature and \a fieldName on \a clazz.
 */
 
 /*!
     \fn void QJNIObject::setField(const char *fieldName, T value)
 
+    Sets the value of \a fieldName to \a value.
+
     \code
     ...
     QJNIObject obj;
@@ -367,36 +389,37 @@ QT_BEGIN_NAMESPACE
 /*!
     \fn void QJNIObject::setField(const char *fieldName, const char *signature, T value)
 
+    Sets the value of \a fieldName with \a signature to \a value.
+
     \code
+    QJNIObject stringArray = ...;
+    QJNIObject obj = ...;
+    obj.setField<jobjectArray>("KEY_VALUES", "([Ljava/lang/String;)V", stringArray.object<jobjectArray>())
     \endcode
 */
 
 /*!
     \fn void QJNIObject::setStaticField(const char *className, const char *fieldName, T value)
 
-    \code
-    \endcode
+    Sets the value of the static field \a fieldName in class \a className to \a value.
 */
 
 /*!
-    \fn void QJNIObject::setStaticField(const char *className, const char *fieldName, const char *sig, T value);
+    \fn void QJNIObject::setStaticField(const char *className, const char *fieldName, const char *signature, T value);
 
-    \code
-    \endcode
+    Sets the static field with \a fieldName and \a signature to \a value on class \a className.
 */
 
 /*!
     \fn void QJNIObject::setStaticField(jclass clazz, const char *fieldName, T value)
 
-    \code
-    \endcode
+    Sets the static field \a fieldName of the class \a clazz to \a value.
 */
 
 /*!
-    \fn void QJNIObject::setStaticField(jclass clazz, const char *fieldName, const char *sig, T value);
+    \fn void QJNIObject::setStaticField(jclass clazz, const char *fieldName, const char *signature, T value);
 
-    \code
-    \endcode
+    Sets the static field with \a fieldName and \a signature to \a value on class \a clazz.
 */
 
 /*!
@@ -448,26 +471,27 @@ QT_BEGIN_NAMESPACE
     \fn QJNIObject &QJNIObject::operator=(T object)
 
     Replace the current object with \a object. The old Java object will be released.
-
-    \code
-    \endcode
 */
 
 /*!
     \fn QString QJNIObject::toString() const
 
-    Returns a QString with the data returned from calling the toString() function on a java object.
-    If the QJNIObject is wrapped around a Java String, calling this is a convenient way to convert
-    a Java string to a QString.
+    Returns a QString with a string representation of the java object.
+    Calling this function on a Java String object is a convenient way of getting the actuall string
+    data.
 
     \code
+    QJNIObject string = ...; //  "Hello Java"
+    QString qstring = string.toString(); // "Hello Java"
     \endcode
+
+    \sa fromString()
 */
 
 /*!
     \fn QJNIObject QJNIObject::fromString(const QString &string)
 
-    Creates a Java string from the QString \a string and returns a QJNIObject wrapping that string.
+    Creates a Java string from the QString \a string and returns a QJNIObject holding that string.
 
     \code
     ...
@@ -475,6 +499,8 @@ QT_BEGIN_NAMESPACE
     QJNIObject myJavaString = QJNIObject::fromString(myQString);
     ...
     \endcode
+
+    \sa toString()
 */
 
 /*!
-- 
GitLab