diff options
Diffstat (limited to 'src/corelib/kernel')
| -rw-r--r-- | src/corelib/kernel/qcoreapplication_platform.h | 21 | ||||
| -rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 3 | ||||
| -rw-r--r-- | src/corelib/kernel/qjnihelpers_p.h | 2 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcoreapplication_platform.h b/src/corelib/kernel/qcoreapplication_platform.h index 6830e4d3ab8..c65010faeee 100644 --- a/src/corelib/kernel/qcoreapplication_platform.h +++ b/src/corelib/kernel/qcoreapplication_platform.h @@ -44,6 +44,11 @@ #include <QtCore/qnativeinterface.h> #include <QtCore/qcoreapplication.h> +#if QT_CONFIG(future) && !defined(QT_NO_QOBJECT) +#include <QtCore/qfuture.h> +#include <QtCore/qvariant.h> +#endif + #if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) class _jobject; typedef _jobject* jobject; @@ -61,6 +66,22 @@ struct Q_CORE_EXPORT QAndroidApplication static bool isActivityContext(); static int sdkVersion(); static void hideSplashScreen(int duration = 0); + +#if QT_CONFIG(future) && !defined(QT_NO_QOBJECT) + static QFuture<QVariant> runOnAndroidMainThread(const std::function<QVariant()> &runnable, + const QDeadlineTimer + &timeout = QDeadlineTimer(-1)); + + template <class T> + std::enable_if_t<std::is_invocable_v<T> && std::is_same_v<std::invoke_result_t<T>, void>, + QFuture<void>> static runOnAndroidMainThread(const T &runnable, + const QDeadlineTimer + &timeout = QDeadlineTimer(-1)) + { + std::function<QVariant()> func = [&](){ runnable(); return QVariant(); }; + return static_cast<QFuture<void>>(runOnAndroidMainThread(func, timeout)); + } +#endif }; #endif } diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index edb07b47cf4..46143d4c2c3 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -358,6 +358,9 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) if (!registerPermissionNatives()) return JNI_ERR; + if (!registerNativeInterfaceNatives()) + return JNI_ERR; + g_runPendingCppRunnablesMethodID = env->GetStaticMethodID(jQtNative, "runPendingCppRunnablesOnAndroidThread", "()V"); diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h index 90dbcd1cd82..07f5ff8e8a3 100644 --- a/src/corelib/kernel/qjnihelpers_p.h +++ b/src/corelib/kernel/qjnihelpers_p.h @@ -128,7 +128,9 @@ namespace QtAndroidPrivate 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); + bool registerPermissionNatives(); + bool registerNativeInterfaceNatives(); Q_CORE_EXPORT void handleActivityResult(jint requestCode, jint resultCode, jobject data); Q_CORE_EXPORT void registerActivityResultListener(ActivityResultListener *listener); |
