diff options
author | BogDan Vatra <bogdan@kdab.com> | 2017-04-11 13:17:21 +0300 |
---|---|---|
committer | BogDan Vatra <bogdan@kdab.com> | 2017-06-07 13:01:40 +0000 |
commit | e8ea1edd89729d4caeffa70dd8cf76a686294987 (patch) | |
tree | 7d6b1d71d7112984cbbd256ca85a7063535d949c /src/corelib/kernel/qjnihelpers_p.h | |
parent | d31deab6328d30ac31e87d6ac35ad81db37f5ae5 (diff) |
Android: Fix deadlock when calling requestPermission
The hang happend when using QtAndroidPrivate::requestPermissions before
the QApplication::exec. Android UI calls "sendRequestPermissionsResult"
which was blocking until the event is delivered, but the qt main loop is
blocked and waits for the main surface to be created by the Android UI
thread which is already blocked.
With this patch sendRequestPermissionsResult won't block for the result
to be delivered.
Change-Id: I48ada65fe9ea63471ab46d8a9d839ba1b91d17b3
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Diffstat (limited to 'src/corelib/kernel/qjnihelpers_p.h')
-rw-r--r-- | src/corelib/kernel/qjnihelpers_p.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h index 62f9358513..d88e4fc19e 100644 --- a/src/corelib/kernel/qjnihelpers_p.h +++ b/src/corelib/kernel/qjnihelpers_p.h @@ -52,8 +52,10 @@ // #include <jni.h> -#include <QtCore/private/qglobal_p.h> #include <functional> +#include <QtCore/private/qglobal_p.h> +#include <QHash> +#include <QMetaType> QT_BEGIN_NAMESPACE @@ -117,7 +119,7 @@ namespace QtAndroidPrivate Q_CORE_EXPORT void runOnAndroidThreadSync(const Runnable &runnable, JNIEnv *env, int timeoutMs = INT_MAX); Q_CORE_EXPORT void runOnUiThread(QRunnable *runnable, JNIEnv *env); Q_CORE_EXPORT void requestPermissions(JNIEnv *env, const QStringList &permissions, const PermissionsResultFunc &callbackFunc, bool directCall = false); - Q_CORE_EXPORT QHash<QString, PermissionsResult> requestPermissionsSync(JNIEnv *env, const QStringList &permissions, int timeoutMs = INT_MAX); + Q_CORE_EXPORT PermissionsHash requestPermissionsSync(JNIEnv *env, const QStringList &permissions, int timeoutMs = INT_MAX); Q_CORE_EXPORT PermissionsResult checkPermission(const QString &permission); Q_CORE_EXPORT bool shouldShowRequestPermissionRationale(const QString &permission); @@ -145,4 +147,6 @@ namespace QtAndroidPrivate QT_END_NAMESPACE +Q_DECLARE_METATYPE(QtAndroidPrivate::PermissionsHash) + #endif // QJNIHELPERS_H |