diff options
author | BogDan Vatra <bogdan@kdab.com> | 2017-07-04 14:13:29 +0300 |
---|---|---|
committer | BogDan Vatra <bogdan@kdab.com> | 2017-07-26 08:02:26 +0000 |
commit | 7c38ca387cf3e9aa6d7f47a00b296247da102147 (patch) | |
tree | ee4ab281c729f561c2e85c2b6d8a72de2fe581cc /src/androidextras/jni | |
parent | da807f68d37fb3159196627904a1554405df90f6 (diff) |
Say hello to low level Android Service & Binder implementations
These are the building blocks for higher level APIs such as Qt Remote
Objects.
[ChangeLog][Android] Added low level APIs for Android Service & Binder.
Change-Id: I320214d310a398541bbde985ecf67bf6101c0b67
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/androidextras/jni')
-rw-r--r-- | src/androidextras/jni/qandroidjnienvironment.cpp | 58 | ||||
-rw-r--r-- | src/androidextras/jni/qandroidjnienvironment.h | 17 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/androidextras/jni/qandroidjnienvironment.cpp b/src/androidextras/jni/qandroidjnienvironment.cpp index 0800906..08f0c71 100644 --- a/src/androidextras/jni/qandroidjnienvironment.cpp +++ b/src/androidextras/jni/qandroidjnienvironment.cpp @@ -108,4 +108,62 @@ QAndroidJniEnvironment::operator JNIEnv*() const return d->jniEnv; } +static void clearException(bool silent) +{ + QAndroidJniEnvironment env; + if (Q_UNLIKELY(env->ExceptionCheck())) { + if (!silent) + env->ExceptionDescribe(); + env->ExceptionClear(); + } +} + +/*! + \class QAndroidJniExceptionCleaner + \inmodule QtAndroidExtras + + The QAndroidJniExceptionCleaner is a convenience class useful to clean + the pending JNI exceptions from the current scope. + + \since 5.10 +*/ + +/*! + \enum QAndroidJniExceptionCleaner::OutputMode + + \value Silent the exceptions are cleaned silently + \value Verbose discribes the exceptions before cleaning them +*/ + +/*! + \fn QAndroidJniExceptionCleaner::QAndroidJniExceptionCleaner(OutputMode outputMode = OutputMode::Silent) + + Cleans any pending exceptions either silently or with descriptions, depending on the \a outputMode. + */ +QAndroidJniExceptionCleaner::QAndroidJniExceptionCleaner(QAndroidJniExceptionCleaner::OutputMode outputMode) + : m_outputMode(outputMode) +{ + clearException(outputMode == OutputMode::Silent); +} + +/*! + \fn QAndroidJniExceptionCleaner::~QAndroidJniExceptionCleaner() + + Clean any pending exceptions. + */ +QAndroidJniExceptionCleaner::~QAndroidJniExceptionCleaner() +{ + clearException(m_outputMode == OutputMode::Silent); +} + +/*! + \fn void QAndroidJniExceptionCleaner::clean() + + Manually cleans any pending exceptions + */ +void QAndroidJniExceptionCleaner::clean() +{ + clearException(m_outputMode == OutputMode::Silent); +} + QT_END_NAMESPACE diff --git a/src/androidextras/jni/qandroidjnienvironment.h b/src/androidextras/jni/qandroidjnienvironment.h index fcced40..654117b 100644 --- a/src/androidextras/jni/qandroidjnienvironment.h +++ b/src/androidextras/jni/qandroidjnienvironment.h @@ -63,6 +63,23 @@ private: QScopedPointer<QJNIEnvironmentPrivate> d; }; +class Q_ANDROIDEXTRAS_EXPORT QAndroidJniExceptionCleaner +{ +public: + enum class OutputMode { + Silent, + Verbose + }; + +public: + explicit QAndroidJniExceptionCleaner(OutputMode outputMode = OutputMode::Silent); + ~QAndroidJniExceptionCleaner(); + + void clean(); +private: + OutputMode m_outputMode; +}; + QT_END_NAMESPACE #endif // QANDROIDJNIENVIRONMENT_H |