aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/platform/android/qandroidquickviewembedding.cpp
diff options
context:
space:
mode:
authorSoheil Armin <soheil.armin@qt.io>2024-05-13 01:44:22 +0300
committerSoheil Armin <soheil.armin@qt.io>2024-05-22 15:54:01 +0300
commit5b0284e8ee757536554ccd73e07c79028c754372 (patch)
treee845bf381cb4b6bc3a30d7ac2012a15482426a77 /src/quick/platform/android/qandroidquickviewembedding.cpp
parent9166e9ffb62a16ed94743a9080772e8f27ba0299 (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.cpp62
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,