summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qcoreapplication_platform.h21
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp3
-rw-r--r--src/corelib/kernel/qjnihelpers_p.h2
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);