From 8c9f5fba0343433bca8285df1a80bb3a606ca2ef Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 26 Oct 2023 18:33:33 +0200 Subject: [PATCH] Android: don't rely on implicit cast of declared QtJniTypes to jobject The operator jobject() should be removed from declared QtJniTypes in qtbase, as it's dangerous. Prepare for that by calling object(), which returns the wrapped jobject as well, or isValid() where previously the implicit conversion to jobject also enabled implicit conversion to bool. Change-Id: I00cf6f1463dd5ab5cbaf03d9e77bfff3bced9b15 Reviewed-by: Ivan Solovev --- .../android/qandroidnativeinterface.cpp | 2 +- .../platforms/android/androidjnimain.cpp | 2 +- .../android/qandroidplatformdialoghelpers.cpp | 2 +- .../android/qandroidplatformintegration.cpp | 20 +++++++++---------- .../android/qandroidplatformscreen.cpp | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/corelib/platform/android/qandroidnativeinterface.cpp b/src/corelib/platform/android/qandroidnativeinterface.cpp index 5b967f22bf0..c779ef60de6 100644 --- a/src/corelib/platform/android/qandroidnativeinterface.cpp +++ b/src/corelib/platform/android/qandroidnativeinterface.cpp @@ -68,7 +68,7 @@ QtJniTypes::Context QNativeInterface::QAndroidApplication::context() */ bool QNativeInterface::QAndroidApplication::isActivityContext() { - return QtAndroidPrivate::activity(); + return QtAndroidPrivate::activity().isValid(); } /*! diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index d0e1c4b739f..6b906bfe8c3 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -484,7 +484,7 @@ static void waitForServiceSetup(JNIEnv *env, jclass /*clazz*/) Q_UNUSED(env); // The service must wait until the QCoreApplication starts otherwise onBind will be // called too early - if (QtAndroidPrivate::service()) + if (QtAndroidPrivate::service().isValid()) QtAndroidPrivate::waitForServiceSetup(); } diff --git a/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp b/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp index a2bfb277ace..ec2199b7279 100644 --- a/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp +++ b/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp @@ -19,7 +19,7 @@ static jclass g_messageDialogHelperClass = nullptr; QAndroidPlatformMessageDialogHelper::QAndroidPlatformMessageDialogHelper() : m_javaMessageDialog(g_messageDialogHelperClass, "(Landroid/app/Activity;)V", - static_cast(QtAndroidPrivate::activity())) + QtAndroidPrivate::activity().object()) { } diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index cc3711b7463..84ab311a11e 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -320,11 +320,11 @@ bool QAndroidPlatformIntegration::hasCapability(Capability cap) const switch (cap) { case ApplicationState: return true; case ThreadedPixmaps: return true; - case NativeWidgets: return QtAndroidPrivate::activity(); - case OpenGL: return QtAndroidPrivate::activity(); - case ForeignWindows: return QtAndroidPrivate::activity(); - case ThreadedOpenGL: return !needsBasicRenderloopWorkaround() && QtAndroidPrivate::activity(); - case RasterGLSurface: return QtAndroidPrivate::activity(); + case NativeWidgets: return QtAndroidPrivate::activity().isValid(); + case OpenGL: return QtAndroidPrivate::activity().isValid(); + case ForeignWindows: return QtAndroidPrivate::activity().isValid(); + case ThreadedOpenGL: return !needsBasicRenderloopWorkaround() && QtAndroidPrivate::activity().isValid(); + case RasterGLSurface: return QtAndroidPrivate::activity().isValid(); case TopStackedNativeChildWindows: return false; case MaximizeUsingFullscreenGeometry: return true; default: @@ -334,7 +334,7 @@ bool QAndroidPlatformIntegration::hasCapability(Capability cap) const QPlatformBackingStore *QAndroidPlatformIntegration::createPlatformBackingStore(QWindow *window) const { - if (!QtAndroidPrivate::activity()) + if (!QtAndroidPrivate::activity().isValid()) return nullptr; return new QAndroidPlatformBackingStore(window); @@ -342,7 +342,7 @@ QPlatformBackingStore *QAndroidPlatformIntegration::createPlatformBackingStore(Q QPlatformOpenGLContext *QAndroidPlatformIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const { - if (!QtAndroidPrivate::activity()) + if (!QtAndroidPrivate::activity().isValid()) return nullptr; QSurfaceFormat format(context->format()); format.setAlphaBufferSize(8); @@ -360,7 +360,7 @@ QOpenGLContext *QAndroidPlatformIntegration::createOpenGLContext(EGLContext cont QPlatformOffscreenSurface *QAndroidPlatformIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const { - if (!QtAndroidPrivate::activity()) + if (!QtAndroidPrivate::activity().isValid()) return nullptr; QSurfaceFormat format(surface->requestedFormat()); @@ -374,7 +374,7 @@ QPlatformOffscreenSurface *QAndroidPlatformIntegration::createPlatformOffscreenS QOffscreenSurface *QAndroidPlatformIntegration::createOffscreenSurface(ANativeWindow *nativeSurface) const { - if (!QtAndroidPrivate::activity() || !nativeSurface) + if (!QtAndroidPrivate::activity().isValid() || !nativeSurface) return nullptr; auto *surface = new QOffscreenSurface; @@ -385,7 +385,7 @@ QOffscreenSurface *QAndroidPlatformIntegration::createOffscreenSurface(ANativeWi QPlatformWindow *QAndroidPlatformIntegration::createPlatformWindow(QWindow *window) const { - if (!QtAndroidPrivate::activity()) + if (!QtAndroidPrivate::activity().isValid()) return nullptr; #if QT_CONFIG(vulkan) diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp index 3b497472ff2..b9e83907ba9 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.cpp +++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp @@ -368,7 +368,7 @@ int QAndroidPlatformScreen::rasterSurfaces() void QAndroidPlatformScreen::doRedraw(QImage* screenGrabImage) { PROFILE_SCOPE; - if (!QtAndroidPrivate::activity()) + if (!QtAndroidPrivate::activity().isValid()) return; if (m_dirtyRect.isEmpty())