From d62b40c34ede1cbc4542e63b71b1b5197c661b15 Mon Sep 17 00:00:00 2001 From: Soheil Armin Date: Fri, 8 Dec 2023 14:27:09 +0200 Subject: Android: Add user-defined QML import paths to QtQuickView Add a way to pass a list of QML import paths to createQuickView so that it can add additional user-define QML import paths to the QQmlEngine of the QQuickView. Pick-to: 6.7 Change-Id: I49d5c2ee7fde86def54754d31e718d79975bcc2e Reviewed-by: Assam Boudjelthia --- .../platform/android/qandroidquickviewembedding.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/quick/platform/android/qandroidquickviewembedding.cpp') diff --git a/src/quick/platform/android/qandroidquickviewembedding.cpp b/src/quick/platform/android/qandroidquickviewembedding.cpp index 70f8cba4d6..ed7829f1f3 100644 --- a/src/quick/platform/android/qandroidquickviewembedding.cpp +++ b/src/quick/platform/android/qandroidquickviewembedding.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -26,23 +27,36 @@ Q_DECLARE_JNI_CLASS(Class, "java/lang/Class"); namespace QtAndroidQuickViewEmbedding { void createQuickView(JNIEnv*, jobject nativeWindow, jstring qmlUri, jint width, jint height, - jlong parentWindowReference) + jlong parentWindowReference, QtJniTypes::StringArray qmlImportPaths) { static_assert (sizeof(jlong) >= sizeof(void*), "Insufficient size of Java type to hold the c++ pointer"); const QUrl qmlUrl(QJniObject(qmlUri).toString()); + + QStringList importPaths; + if (qmlImportPaths.isValid()) { + QJniArray importPathsArray(qmlImportPaths); + importPaths.reserve(importPathsArray.size()); + for (int i = 0; i < importPathsArray.size(); ++i) + importPaths << importPathsArray.at(i).toString(); + } + QMetaObject::invokeMethod(qApp, [qtViewObject = QJniObject(nativeWindow), parentWindowReference, width, height, - qmlUrl] { + qmlUrl, + importPaths] { QWindow *parentWindow = reinterpret_cast(parentWindowReference); - QQuickView* view = new QQuickView(parentWindow); + QQuickView *view = new QQuickView(parentWindow); + QQmlEngine *engine = view->engine(); new SignalHelper(view); view->setSource(qmlUrl); view->setColor(QColor(Qt::transparent)); view->setWidth(width); view->setHeight(height); + for (const QString &path : importPaths) + engine->addImportPath(path); const QtJniTypes::QtWindow window = reinterpret_cast(view->winId()); qtViewObject.callMethod("addQtWindow", window, -- cgit v1.2.3