aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/platform/android/qandroidquickviewembedding.cpp
diff options
context:
space:
mode:
authorSoheil Armin <soheil.armin@qt.io>2024-04-18 16:34:44 +0300
committerSoheil Armin <soheil.armin@qt.io>2024-05-22 15:53:50 +0300
commit7d2e12243f7d418a9bf52673c393fc60ed1b4365 (patch)
treeeba56d17f06c654645c9fddca56bc35cc9172620 /src/quick/platform/android/qandroidquickviewembedding.cpp
parente7d0395b47a110a4f35518b18b479535a1cf9ed1 (diff)
Android: Improve error handling and logging of QtQuickView
We obtain pointers to the QQuickView and its root object in various functions of QtQuickView interals. The warning messages used to be scattered in these functions. 1- A functions has been added to get both QQuickView and root object instances in a tuple. 2- An static local message string has been added to be reused when outputting warnings 3- Retouched a few warning messages for consistency. Task-number: QTBUG-124522 Change-Id: I471ce390553e005380df360811ce15bff45c55ed 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.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/quick/platform/android/qandroidquickviewembedding.cpp b/src/quick/platform/android/qandroidquickviewembedding.cpp
index 8b25ff0deb..dbe6c69767 100644
--- a/src/quick/platform/android/qandroidquickviewembedding.cpp
+++ b/src/quick/platform/android/qandroidquickviewembedding.cpp
@@ -28,6 +28,8 @@ Q_DECLARE_JNI_CLASS(Class, "java/lang/Class");
namespace QtAndroidQuickViewEmbedding
{
+ constexpr const char *uninitializedViewMessage = "because QtQuickView is not loaded or ready yet.";
+
void createQuickView(JNIEnv*, jobject nativeWindow, jstring qmlUri, jint width, jint height,
jlong parentWindowReference, QtJniTypes::StringArray qmlImportPaths)
{
@@ -73,15 +75,23 @@ namespace QtAndroidQuickViewEmbedding
});
}
+ std::pair<QQuickView *, QQuickItem *> getViewAndRootObject(jlong windowReference)
+ {
+ QQuickView *view = reinterpret_cast<QQuickView *>(windowReference);
+ QQuickItem *rootObject = Q_LIKELY(view) ? view->rootObject() : nullptr;
+ return std::make_pair(view, rootObject);
+ }
+
void setRootObjectProperty(JNIEnv *env, jobject object, jlong windowReference,
jstring propertyName, jobject value)
{
Q_UNUSED(env);
Q_UNUSED(object);
- QQuickItem *rootObject = reinterpret_cast<QQuickView *>(windowReference)->rootObject();
+ auto [_, rootObject] = getViewAndRootObject(windowReference);
if (!rootObject) {
- qWarning() << "QtQuickView instance does not own a root object.";
+ qWarning("Cannot set property %s %s", qPrintable(QJniObject(propertyName).toString()),
+ uninitializedViewMessage);
return;
}
@@ -118,20 +128,16 @@ namespace QtAndroidQuickViewEmbedding
Q_ASSERT(env);
const QString property = QJniObject(propertyName).toString();
- QQuickView *view = reinterpret_cast<QQuickView *>(windowReference);
- QQuickItem *rootObject = view->rootObject();
+ auto [_, rootObject] = getViewAndRootObject(windowReference);
if (!rootObject) {
- qWarning("Cannot read property %s as the QtQuickView instance (%s)"
- "does not own a root object.",
- qPrintable(property),
- qPrintable(view->source().toString()));
+ qWarning("Cannot get property %s %s", qPrintable(property), uninitializedViewMessage);
return nullptr;
}
const QMetaObject *rootMetaObject = rootObject->metaObject();
int propertyIndex = rootMetaObject->indexOfProperty(property.toUtf8().constData());
if (propertyIndex < 0) {
- qWarning("Cannot read property %s as it does not exist in the root QML object.",
+ qWarning("Cannot get property %s as it does not exist in the root QML object.",
qPrintable(property));
return nullptr;
}
@@ -181,14 +187,10 @@ namespace QtAndroidQuickViewEmbedding
{ "java/lang/Boolean", QMetaType::Type::Bool }
};
- QQuickView *view = reinterpret_cast<QQuickView *>(windowReference);
- if (!view) {
- qWarning() << "QtQuickView is not loaded or ready yet.";
- return -1;
- }
- QQuickItem *rootObject = view->rootObject();
+ auto [view, rootObject] = getViewAndRootObject(windowReference);
if (!rootObject) {
- qWarning() << "QtQuickView instance does not own a root object.";
+ qWarning("Cannot connect to signal %s %s",
+ qPrintable(QJniObject(signalName).toString()), uninitializedViewMessage);
return -1;
}
@@ -287,10 +289,10 @@ namespace QtAndroidQuickViewEmbedding
bool removeRootObjectSignalListener(JNIEnv *, jobject, jlong windowReference,
jint signalListenerId)
{
- QQuickView *view = reinterpret_cast<QQuickView *>(windowReference);
- QQuickItem *rootObject = view->rootObject();
+ auto [view, rootObject] = getViewAndRootObject(windowReference);
if (!rootObject) {
- qWarning() << "QtQuickView instance does not own a root object.";
+ qWarning("Cannot disconnect the signal connection with id: %i %s", signalListenerId,
+ uninitializedViewMessage);
return false;
}