diff options
| author | Soheil Armin <soheil.armin@qt.io> | 2024-05-13 01:44:22 +0300 |
|---|---|---|
| committer | Soheil Armin <soheil.armin@qt.io> | 2024-05-22 15:54:01 +0300 |
| commit | 5b0284e8ee757536554ccd73e07c79028c754372 (patch) | |
| tree | e845bf381cb4b6bc3a30d7ac2012a15482426a77 /src/quick/platform/android/qandroidquickviewembedding.cpp | |
| parent | 9166e9ffb62a16ed94743a9080772e8f27ba0299 (diff) | |
Android: Move Java types and conversion functions to their own header
Task-number: QTBUG-125291
Change-Id: Ia675c97c296fa1aad1a06b4c4de23b2f803ede7f
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/quick/platform/android/qandroidquickviewembedding.cpp')
| -rw-r--r-- | src/quick/platform/android/qandroidquickviewembedding.cpp | 62 |
1 files changed, 14 insertions, 48 deletions
diff --git a/src/quick/platform/android/qandroidquickviewembedding.cpp b/src/quick/platform/android/qandroidquickviewembedding.cpp index 925120bc09..6308fc02f0 100644 --- a/src/quick/platform/android/qandroidquickviewembedding.cpp +++ b/src/quick/platform/android/qandroidquickviewembedding.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include <QtQuick/private/qandroidquickviewembedding_p.h> +#include <QtQuick/private/qandroidtypes_p.h> +#include <QtQuick/private/qandroidtypeconverter_p.h> #include <QtQuick/private/qandroidviewsignalmanager_p.h> #include <QtCore/qcoreapplication.h> @@ -19,14 +21,6 @@ Q_DECLARE_JNI_CLASS(QtQuickView, "org/qtproject/qt/android/QtQuickView"); Q_DECLARE_JNI_CLASS(QtWindow, "org/qtproject/qt/android/QtWindow"); Q_DECLARE_JNI_CLASS(View, "android/view/View"); -Q_DECLARE_JNI_CLASS(Void, "java/lang/Void"); -Q_DECLARE_JNI_CLASS(Integer, "java/lang/Integer"); -Q_DECLARE_JNI_CLASS(Double, "java/lang/Double"); -Q_DECLARE_JNI_CLASS(Float, "java/lang/Float"); -Q_DECLARE_JNI_CLASS(Boolean, "java/lang/Boolean"); -Q_DECLARE_JNI_CLASS(String, "java/lang/String"); -Q_DECLARE_JNI_CLASS(Class, "java/lang/Class"); - namespace QtAndroidQuickViewEmbedding { constexpr const char *uninitializedViewMessage = "because QtQuickView is not loaded or ready yet."; @@ -105,20 +99,14 @@ namespace QtAndroidQuickViewEmbedding QMetaProperty metaProperty = rootMetaObject->property(propertyIndex); const QJniObject propertyValue(value); - const QByteArray valueClassname = propertyValue.className(); - - if (valueClassname == QtJniTypes::Traits<QtJniTypes::String>::className()) - metaProperty.write(rootObject, propertyValue.toString()); - else if (valueClassname == QtJniTypes::Traits<QtJniTypes::Integer>::className()) - metaProperty.write(rootObject, propertyValue.callMethod<jint>("intValue")); - else if (valueClassname == QtJniTypes::Traits<QtJniTypes::Double>::className()) - metaProperty.write(rootObject, propertyValue.callMethod<jdouble>("doubleValue")); - else if (valueClassname == QtJniTypes::Traits<QtJniTypes::Float>::className()) - metaProperty.write(rootObject, propertyValue.callMethod<jfloat>("floatValue")); - else if (valueClassname == QtJniTypes::Traits<QtJniTypes::Boolean>::className()) - metaProperty.write(rootObject, propertyValue.callMethod<jboolean>("booleanValue")); - else - qWarning("Setting the property type of %s is not supported.", valueClassname.data()); + const QVariant variantToWrite = QAndroidTypeConverter::toQVariant(propertyValue); + + if (!variantToWrite.isValid()) { + qWarning("Setting the property type of %s is not supported.", + qPrintable(propertyValue.className())); + } else { + metaProperty.write(rootObject, variantToWrite); + } } jobject getRootObjectProperty(JNIEnv *env, jobject object, jlong windowReference, @@ -143,35 +131,13 @@ namespace QtAndroidQuickViewEmbedding } QMetaProperty metaProperty = rootMetaObject->property(propertyIndex); - QVariant propertyValue = metaProperty.read(rootObject); - const int propertyTypeId = propertyValue.typeId(); - - switch (propertyTypeId) { - case QMetaType::Type::Int: - return env->NewLocalRef( - QJniObject::construct<QtJniTypes::Integer>(get<int>(std::move(propertyValue))) - .object()); - case QMetaType::Type::Double: - return env->NewLocalRef( - QJniObject::construct<QtJniTypes::Double>(get<double>(std::move(propertyValue))) - .object()); - case QMetaType::Type::Float: - return env->NewLocalRef( - QJniObject::construct<QtJniTypes::Float>(get<float>(std::move(propertyValue))) - .object()); - case QMetaType::Type::Bool: - return env->NewLocalRef( - QJniObject::construct<QtJniTypes::Boolean>(get<bool>(std::move(propertyValue))) - .object()); - case QMetaType::Type::QString: - return env->NewLocalRef( - QJniObject::fromString(get<QString>(std::move(propertyValue))).object()); - default: + const QVariant propertyValue = metaProperty.read(rootObject); + jobject jObject = QAndroidTypeConverter::toJavaObject(propertyValue, env); + if (!jObject) { qWarning("Property %s cannot be converted to a supported Java data type.", qPrintable(property)); } - - return nullptr; + return jObject; } int addRootObjectSignalListener(JNIEnv *env, jobject, jlong windowReference, jstring signalName, |
