diff options
| author | Soheil Armin <soheil.armin@qt.io> | 2024-04-18 16:34:44 +0300 |
|---|---|---|
| committer | Soheil Armin <soheil.armin@qt.io> | 2024-05-22 15:53:50 +0300 |
| commit | 7d2e12243f7d418a9bf52673c393fc60ed1b4365 (patch) | |
| tree | eba56d17f06c654645c9fddca56bc35cc9172620 /src/quick/platform/android/qandroidquickviewembedding.cpp | |
| parent | e7d0395b47a110a4f35518b18b479535a1cf9ed1 (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.cpp | 40 |
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; } |
