summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qjnihelpers.cpp
diff options
context:
space:
mode:
authorPeter Rustler <peter.rustler@basyskom.com>2015-02-10 13:31:24 +0100
committerPeter Rustler <peter.rustler@basyskom.com>2015-03-17 09:09:46 +0000
commit88e448a90b9aa7dbbfb0737c1c6330cc3433c67e (patch)
treee67d1348f9117e136d32df37188ed1e8eade72a0 /src/corelib/kernel/qjnihelpers.cpp
parent3d8c86881c7c57f646819e825c7c48f2b27bbfcc (diff)
Added new private API for Android and onPause/onResume
On Android the foreground activity can get onPause/onResume calls. In Nfc code in android we need to know if we are paused or resumed. And we need to make sure to call disableForegroundDispatch inside the onPause call and in the main Ui thread. The current implementiton of applicationStateChanged was not sufficient to acomplish that. This patch adds a way to receive those onPause/onResume calls in Qt with proper timing. Change-Id: I3a8cec093fc02ec42cc8677dfe2d0d4f8a227f8b Reviewed-by: BogDan Vatra <bogdan@kde.org>
Diffstat (limited to 'src/corelib/kernel/qjnihelpers.cpp')
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp
index dad2d5dc1e..f77fc4220c 100644
--- a/src/corelib/kernel/qjnihelpers.cpp
+++ b/src/corelib/kernel/qjnihelpers.cpp
@@ -122,6 +122,45 @@ void QtAndroidPrivate::handleNewIntent(JNIEnv *env, jobject intent)
}
}
+namespace {
+ class ResumePauseListeners
+ {
+ public:
+ QMutex mutex;
+ QList<QtAndroidPrivate::ResumePauseListener *> listeners;
+ };
+}
+
+Q_GLOBAL_STATIC(ResumePauseListeners, g_resumePauseListeners)
+
+void QtAndroidPrivate::registerResumePauseListener(ResumePauseListener *listener)
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ g_resumePauseListeners()->listeners.append(listener);
+}
+
+void QtAndroidPrivate::unregisterResumePauseListener(ResumePauseListener *listener)
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ g_resumePauseListeners()->listeners.removeAll(listener);
+}
+
+void QtAndroidPrivate::handlePause()
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ const QList<QtAndroidPrivate::ResumePauseListener *> &listeners = g_resumePauseListeners()->listeners;
+ for (int i=0; i<listeners.size(); ++i)
+ listeners.at(i)->handlePause();
+}
+
+void QtAndroidPrivate::handleResume()
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ const QList<QtAndroidPrivate::ResumePauseListener *> &listeners = g_resumePauseListeners()->listeners;
+ for (int i=0; i<listeners.size(); ++i)
+ listeners.at(i)->handleResume();
+}
+
static inline bool exceptionCheck(JNIEnv *env)
{
if (env->ExceptionCheck()) {