diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-01-14 12:38:04 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-01-27 17:23:04 +0200 |
commit | 4e60681c879a54cf5b34862a30e27c492ed36363 (patch) | |
tree | 01c7d46ae34a6596fa235eea915846b66e7e8670 /src/plugins | |
parent | 407ce5c0afd905b38a7d82980a76ed834fc971eb (diff) |
Make QJniObject and QJniEnvironment public API
As part of Qt 6 restructring for the extras modules, this change exposes
the Jni APIs which are very important for Android platform. This patch
adds the APIs QJniObject, QJniEnvironment, QJniExceptionCleaner based
from private QtCore and QtAndroidExtras.
The Jni interface is cross-platform which justifies the name, but
currently, this API is used mainly for Android, and the naming comes
generic without Android keyword to avoid any future limitation on
supporting other platforms.
[ChangeLog][QtCore] Add new QJniObject, QJniEnvironment and
QJniExceptionCleaner APIs.
Task-number: QTBUG-89482
Fixes: QTBUG-89633
Change-Id: I4382dd53a225375759b9d042f6035a4a9810572b
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Diffstat (limited to 'src/plugins')
23 files changed, 303 insertions, 280 deletions
diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp index 749ce136b6..149bc1139d 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.cpp +++ b/src/plugins/platforms/android/androidcontentfileengine.cpp @@ -39,7 +39,8 @@ #include "androidcontentfileengine.h" -#include <private/qjni_p.h> +#include <QtCore/QJniEnvironment> +#include <QtCore/QJniObject> #include <private/qjnihelpers_p.h> #include <QDebug> @@ -65,12 +66,12 @@ bool AndroidContentFileEngine::open(QIODevice::OpenMode openMode) openModeStr += QLatin1Char('a'); } - const auto fd = QJNIObjectPrivate::callStaticMethod<jint>("org/qtproject/qt/android/QtNative", + const auto fd = QJniObject::callStaticMethod<jint>("org/qtproject/qt/android/QtNative", "openFdForContentUrl", "(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)I", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(fileName(DefaultName)).object(), - QJNIObjectPrivate::fromString(openModeStr).object()); + QJniObject::fromString(fileName(DefaultName)).object(), + QJniObject::fromString(openModeStr).object()); if (fd < 0) { return false; @@ -81,10 +82,10 @@ bool AndroidContentFileEngine::open(QIODevice::OpenMode openMode) qint64 AndroidContentFileEngine::size() const { - const jlong size = QJNIObjectPrivate::callStaticMethod<jlong>( + const jlong size = QJniObject::callStaticMethod<jlong>( "org/qtproject/qt/android/QtNative", "getSize", "(Landroid/content/Context;Ljava/lang/String;)J", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(fileName(DefaultName)).object()); + QJniObject::fromString(fileName(DefaultName)).object()); return (qint64)size; } @@ -92,25 +93,25 @@ AndroidContentFileEngine::FileFlags AndroidContentFileEngine::fileFlags(FileFlag { FileFlags commonFlags(ReadOwnerPerm|ReadUserPerm|ReadGroupPerm|ReadOtherPerm|ExistsFlag); FileFlags flags; - const bool isDir = QJNIObjectPrivate::callStaticMethod<jboolean>( + const bool isDir = QJniObject::callStaticMethod<jboolean>( "org/qtproject/qt/android/QtNative", "checkIfDir", "(Landroid/content/Context;Ljava/lang/String;)Z", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(fileName(DefaultName)).object()); + QJniObject::fromString(fileName(DefaultName)).object()); // If it is a directory then we know it exists so there is no reason to explicitly check - const bool exists = isDir ? true : QJNIObjectPrivate::callStaticMethod<jboolean>( + const bool exists = isDir ? true : QJniObject::callStaticMethod<jboolean>( "org/qtproject/qt/android/QtNative", "checkFileExists", "(Landroid/content/Context;Ljava/lang/String;)Z", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(fileName(DefaultName)).object()); + QJniObject::fromString(fileName(DefaultName)).object()); if (!exists && !isDir) return flags; if (isDir) { flags = DirectoryType | commonFlags; } else { flags = FileType | commonFlags; - const bool writable = QJNIObjectPrivate::callStaticMethod<jboolean>( + const bool writable = QJniObject::callStaticMethod<jboolean>( "org/qtproject/qt/android/QtNative", "checkIfWritable", "(Landroid/content/Context;Ljava/lang/String;)Z", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(fileName(DefaultName)).object()); + QJniObject::fromString(fileName(DefaultName)).object()); if (writable) flags |= WriteOwnerPerm|WriteUserPerm|WriteGroupPerm|WriteOtherPerm; } @@ -182,22 +183,22 @@ bool AndroidContentFileEngineIterator::hasNext() const if (m_index == -1) { if (path().isEmpty()) return false; - const bool isDir = QJNIObjectPrivate::callStaticMethod<jboolean>( + const bool isDir = QJniObject::callStaticMethod<jboolean>( "org/qtproject/qt/android/QtNative", "checkIfDir", "(Landroid/content/Context;Ljava/lang/String;)Z", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(path()).object()); + QJniObject::fromString(path()).object()); if (isDir) { - QJNIObjectPrivate objArray = QJNIObjectPrivate::callStaticObjectMethod("org/qtproject/qt/android/QtNative", + QJniObject objArray = QJniObject::callStaticObjectMethod("org/qtproject/qt/android/QtNative", "listContentsFromTreeUri", "(Landroid/content/Context;Ljava/lang/String;)[Ljava/lang/String;", QtAndroidPrivate::context(), - QJNIObjectPrivate::fromString(path()).object()); + QJniObject::fromString(path()).object()); if (objArray.isValid()) { - QJNIEnvironmentPrivate env; + QJniEnvironment env; const jsize length = env->GetArrayLength(static_cast<jarray>(objArray.object())); for (int i = 0; i != length; ++i) { - m_entries << QJNIObjectPrivate(env->GetObjectArrayElement( + m_entries << QJniObject(env->GetObjectArrayElement( static_cast<jobjectArray>(objArray.object()), i)).toString(); } } diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp index a4e88d84d4..62460f5e6d 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.cpp +++ b/src/plugins/platforms/android/androidjniaccessibility.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -48,11 +48,9 @@ #include "QtGui/qaccessible.h" #include <QtCore/qmath.h> #include <QtCore/private/qjnihelpers_p.h> -#include <QtCore/private/qjni_p.h> +#include <QtCore/QJniObject> #include <QtGui/private/qhighdpiscaling_p.h> -#include "qdebug.h" - static const char m_qtTag[] = "Qt A11Y"; static const char m_classErrorMsg[] = "Can't find class \"%s\""; @@ -77,8 +75,8 @@ namespace QtAndroidAccessibility void initialize() { - QJNIObjectPrivate::callStaticMethod<void>(QtAndroid::applicationClass(), - "initializeAccessibility"); + QJniObject::callStaticMethod<void>(QtAndroid::applicationClass(), + "initializeAccessibility"); } bool isActive() diff --git a/src/plugins/platforms/android/androidjniclipboard.cpp b/src/plugins/platforms/android/androidjniclipboard.cpp index c20ac456b1..597a56eb1a 100644 --- a/src/plugins/platforms/android/androidjniclipboard.cpp +++ b/src/plugins/platforms/android/androidjniclipboard.cpp @@ -39,7 +39,8 @@ #include "androidjniclipboard.h" #include <QtCore/QUrl> -#include <QtCore/private/qjni_p.h> +#include <QtCore/QJniObject> +#include <QtCore/QJniEnvironment> QT_BEGIN_NAMESPACE @@ -55,9 +56,9 @@ namespace QtAndroidClipboard void setClipboardManager(QAndroidPlatformClipboard *manager) { m_manager = manager; - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "registerClipboardManager"); + QJniObject::callStaticMethod<void>(applicationClass(), "registerClipboardManager"); jclass appClass = QtAndroid::applicationClass(); - QJNIEnvironmentPrivate env; + QJniEnvironment env; if (env->RegisterNatives(appClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) { __android_log_print(ANDROID_LOG_FATAL,"Qt", "RegisterNatives failed"); return; @@ -65,29 +66,30 @@ namespace QtAndroidClipboard } void clearClipboardData() { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "clearClipData"); + QJniObject::callStaticMethod<void>(applicationClass(), "clearClipData"); } void setClipboardMimeData(QMimeData *data) { clearClipboardData(); if (data->hasText()) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), - "setClipboardText", "(Ljava/lang/String;)V", - QJNIObjectPrivate::fromString(data->text()).object()); + QJniObject::callStaticMethod<void>(applicationClass(), + "setClipboardText", "(Ljava/lang/String;)V", + QJniObject::fromString(data->text()).object()); } if (data->hasHtml()) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), - "setClipboardHtml", - "(Ljava/lang/String;Ljava/lang/String;)V", - QJNIObjectPrivate::fromString(data->text()).object(), - QJNIObjectPrivate::fromString(data->html()).object()); + QJniObject::callStaticMethod<void>(applicationClass(), + "setClipboardHtml", + "(Ljava/lang/String;Ljava/lang/String;)V", + QJniObject::fromString(data->text()).object(), + QJniObject::fromString(data->html()).object()); } if (data->hasUrls()) { QList<QUrl> urls = data->urls(); for (const auto &u : qAsConst(urls)) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "setClipboardUri", - "(Ljava/lang/String;)V", - QJNIObjectPrivate::fromString(u.toEncoded()).object()); + QJniObject::callStaticMethod<void>(applicationClass(), + "setClipboardUri", + "(Ljava/lang/String;)V", + QJniObject::fromString(u.toEncoded()).object()); } } } @@ -95,28 +97,28 @@ namespace QtAndroidClipboard QMimeData *getClipboardMimeData() { QMimeData *data = new QMimeData; - if (QJNIObjectPrivate::callStaticMethod<jboolean>(applicationClass(), "hasClipboardText")) { - data->setText(QJNIObjectPrivate::callStaticObjectMethod(applicationClass(), - "getClipboardText", - "()Ljava/lang/String;").toString()); + if (QJniObject::callStaticMethod<jboolean>(applicationClass(), "hasClipboardText")) { + data->setText(QJniObject::callStaticObjectMethod(applicationClass(), + "getClipboardText", + "()Ljava/lang/String;").toString()); } - if (QJNIObjectPrivate::callStaticMethod<jboolean>(applicationClass(), "hasClipboardHtml")) { - data->setHtml(QJNIObjectPrivate::callStaticObjectMethod(applicationClass(), - "getClipboardHtml", - "()Ljava/lang/String;").toString()); + if (QJniObject::callStaticMethod<jboolean>(applicationClass(), "hasClipboardHtml")) { + data->setHtml(QJniObject::callStaticObjectMethod(applicationClass(), + "getClipboardHtml", + "()Ljava/lang/String;").toString()); } - if (QJNIObjectPrivate::callStaticMethod<jboolean>(applicationClass(), "hasClipboardUri")) { - QJNIObjectPrivate uris = QJNIObjectPrivate::callStaticObjectMethod(applicationClass(), - "getClipboardUris", - "()[Ljava/lang/String;"); + if (QJniObject::callStaticMethod<jboolean>(applicationClass(), "hasClipboardUri")) { + QJniObject uris = QJniObject::callStaticObjectMethod(applicationClass(), + "getClipboardUris", + "()[Ljava/lang/String;"); if (uris.isValid()) { QList<QUrl> urls; - QJNIEnvironmentPrivate env; + QJniEnvironment env; jobjectArray juris = static_cast<jobjectArray>(uris.object()); const jint nUris = env->GetArrayLength(juris); urls.reserve(static_cast<int>(nUris)); for (int i = 0; i < nUris; ++i) - urls << QUrl(QJNIObjectPrivate(env->GetObjectArrayElement(juris, i)).toString()); + urls << QUrl(QJniObject(env->GetObjectArrayElement(juris, i)).toString()); data->setUrls(urls); } } diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 5e4d271fcc..a72682dd23 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -49,7 +49,6 @@ #include <QPointer> #include <QGuiApplication> -#include <QDebug> #include <QtMath> QT_BEGIN_NAMESPACE @@ -71,27 +70,26 @@ namespace QtAndroidInput #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL qDebug() << ">>> UPDATESELECTION" << selStart << selEnd << candidatesStart << candidatesEnd; #endif - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), - "updateSelection", - "(IIII)V", - selStart, - selEnd, - candidatesStart, - candidatesEnd); + QJniObject::callStaticMethod<void>(applicationClass(), + "updateSelection", + "(IIII)V", + selStart, + selEnd, + candidatesStart, + candidatesEnd); } void showSoftwareKeyboard(int left, int top, int width, int height, int inputHints, int enterKeyType) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), - "showSoftwareKeyboard", - "(IIIIII)V", - left, - top, - width, - height, - inputHints, - enterKeyType - ); + QJniObject::callStaticMethod<void>(applicationClass(), + "showSoftwareKeyboard", + "(IIIIII)V", + left, + top, + width, + height, + inputHints, + enterKeyType); #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL qDebug() << "@@@ SHOWSOFTWAREKEYBOARD" << left << top << width << height << inputHints << enterKeyType; #endif @@ -99,7 +97,7 @@ namespace QtAndroidInput void resetSoftwareKeyboard() { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "resetSoftwareKeyboard"); + QJniObject::callStaticMethod<void>(applicationClass(), "resetSoftwareKeyboard"); #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL qDebug("@@@ RESETSOFTWAREKEYBOARD"); #endif @@ -107,7 +105,7 @@ namespace QtAndroidInput void hideSoftwareKeyboard() { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "hideSoftwareKeyboard"); + QJniObject::callStaticMethod<void>(applicationClass(), "hideSoftwareKeyboard"); #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL qDebug("@@@ HIDESOFTWAREKEYBOARD"); #endif @@ -125,10 +123,10 @@ namespace QtAndroidInput void updateHandles(int mode, QPoint editMenuPos, uint32_t editButtons, QPoint cursor, QPoint anchor, bool rtl) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "updateHandles", "(IIIIIIIIZ)V", - mode, editMenuPos.x(), editMenuPos.y(), editButtons, - cursor.x(), cursor.y(), - anchor.x(), anchor.y(), rtl); + QJniObject::callStaticMethod<void>(applicationClass(), "updateHandles", "(IIIIIIIIZ)V", + mode, editMenuPos.x(), editMenuPos.y(), editButtons, + cursor.x(), cursor.y(), + anchor.x(), anchor.y(), rtl); } static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 559cdc6e57..bdd7f492ac 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org> -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -40,30 +40,30 @@ #include <dlfcn.h> #include <pthread.h> -#include <semaphore.h> #include <qplugin.h> -#include <qdebug.h> +#include <semaphore.h> -#include "androidjnimain.h" +#include "androidcontentfileengine.h" +#include "androiddeadlockprotector.h" #include "androidjniaccessibility.h" -#include "androidjniinput.h" #include "androidjniclipboard.h" +#include "androidjniinput.h" +#include "androidjnimain.h" #include "androidjnimenu.h" -#include "androidcontentfileengine.h" -#include "androiddeadlockprotector.h" +#include "qandroidassetsfileenginehandler.h" +#include "qandroideventdispatcher.h" #include "qandroidplatformdialoghelpers.h" #include "qandroidplatformintegration.h" -#include "qandroidassetsfileenginehandler.h" -#include <android/bitmap.h> -#include <android/asset_manager_jni.h> -#include "qandroideventdispatcher.h" #include <android/api-level.h> +#include <android/asset_manager_jni.h> +#include <android/bitmap.h> +#include <QtCore/private/qjnihelpers_p.h> +#include <QtCore/qjnienvironment.h> +#include <QtCore/qjniobject.h> #include <QtCore/qresource.h> #include <QtCore/qthread.h> -#include <QtCore/private/qjnihelpers_p.h> -#include <QtCore/private/qjni_p.h> #include <QtGui/private/qguiapplication_p.h> #include <QtGui/private/qhighdpiscaling_p.h> @@ -205,22 +205,22 @@ namespace QtAndroid void setSystemUiVisibility(SystemUiVisibility uiVisibility) { - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "setSystemUiVisibility", "(I)V", jint(uiVisibility)); + QJniObject::callStaticMethod<void>(m_applicationClass, "setSystemUiVisibility", "(I)V", jint(uiVisibility)); } void notifyAccessibilityLocationChange() { - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "notifyAccessibilityLocationChange"); + QJniObject::callStaticMethod<void>(m_applicationClass, "notifyAccessibilityLocationChange"); } void notifyObjectHide(uint accessibilityObjectId) { - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "notifyObjectHide","(I)V", accessibilityObjectId); + QJniObject::callStaticMethod<void>(m_applicationClass, "notifyObjectHide","(I)V", accessibilityObjectId); } void notifyObjectFocus(uint accessibilityObjectId) { - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "notifyObjectFocus","(I)V", accessibilityObjectId); + QJniObject::callStaticMethod<void>(m_applicationClass, "notifyObjectFocus","(I)V", accessibilityObjectId); } jobject createBitmap(QImage img, JNIEnv *env) @@ -311,15 +311,15 @@ namespace QtAndroid QString deviceName() { - QString manufacturer = QJNIObjectPrivate::getStaticObjectField("android/os/Build", "MANUFACTURER", "Ljava/lang/String;").toString(); - QString model = QJNIObjectPrivate::getStaticObjectField("android/os/Build", "MODEL", "Ljava/lang/String;").toString(); + QString manufacturer = QJniObject::getStaticObjectField("android/os/Build", "MANUFACTURER", "Ljava/lang/String;").toString(); + QString model = QJniObject::getStaticObjectField("android/os/Build", "MODEL", "Ljava/lang/String;").toString(); return manufacturer + QLatin1Char(' ') + model; } int createSurface(AndroidSurfaceClient *client, const QRect &geometry, bool onTop, int imageDepth) { - QJNIEnvironmentPrivate env; + QJniEnvironment env; if (!env) return -1; @@ -355,26 +355,26 @@ namespace QtAndroid if (!geometry.isNull()) geometry.getRect(&x, &y, &w, &h); - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, - "insertNativeView", - "(ILandroid/view/View;IIII)V", - surfaceId, - view, - x, - y, - qMax(w, 1), - qMax(h, 1)); + QJniObject::callStaticMethod<void>(m_applicationClass, + "insertNativeView", + "(ILandroid/view/View;IIII)V", + surfaceId, + view, + x, + y, + qMax(w, 1), + qMax(h, 1)); return surfaceId; } void setViewVisibility(jobject view, bool visible) { - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, - "setViewVisibility", - "(Landroid/view/View;Z)V", - view, - visible); + QJniObject::callStaticMethod<void>(m_applicationClass, + "setViewVisibility", + "(Landroid/view/View;Z)V", + view, + visible); } void setSurfaceGeometry(int surfaceId, const QRect &geometry) @@ -382,7 +382,7 @@ namespace QtAndroid if (surfaceId == -1) return; - QJNIEnvironmentPrivate env; + QJniEnvironment env; if (!env) return; jint x = 0, y = 0, w = -1, h = -1; @@ -393,9 +393,9 @@ namespace QtAndroid h = geometry.height(); } env->CallStaticVoidMethod(m_applicationClass, - m_setSurfaceGeometryMethodID, - surfaceId, - x, y, w, h); + m_setSurfaceGeometryMethodID, + surfaceId, + x, y, w, h); } @@ -411,11 +411,11 @@ namespace QtAndroid m_surfaces.erase(it); } - QJNIEnvironmentPrivate env; + QJniEnvironment env; if (env) env->CallStaticVoidMethod(m_applicationClass, - m_destroySurfaceMethodID, - surfaceId); + m_destroySurfaceMethodID, + surfaceId); } void bringChildToFront(int surfaceId) @@ -423,10 +423,10 @@ namespace QtAndroid if (surfaceId == -1) return; - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, - "bringChildToFront", - "(I)V", - surfaceId); + QJniObject::callStaticMethod<void>(m_applicationClass, + "bringChildToFront", + "(I)V", + surfaceId); } void bringChildToBack(int surfaceId) @@ -434,10 +434,10 @@ namespace QtAndroid if (surfaceId == -1) return; - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, - "bringChildToBack", - "(I)V", - surfaceId); + QJniObject::callStaticMethod<void>(m_applicationClass, + "bringChildToBack", + "(I)V", + surfaceId); } bool blockEventLoopsWhenSuspended() @@ -550,7 +550,7 @@ static jboolean startQtApplication(JNIEnv */*env*/, jclass /*clazz*/) if (m_applicationClass) { qWarning("exit app 0"); - QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "quitApp", "()V"); + QJniObject::callStaticMethod<void>(m_applicationClass, "quitApp", "()V"); } sem_post(&m_terminateSemaphore); diff --git a/src/plugins/platforms/android/androidjnimenu.cpp b/src/plugins/platforms/android/androidjnimenu.cpp index fe5de1f882..9b49140335 100644 --- a/src/plugins/platforms/android/androidjnimenu.cpp +++ b/src/plugins/platforms/android/androidjnimenu.cpp @@ -37,10 +37,10 @@ ** ****************************************************************************/ -#include "androidjnimenu.h" #include "androidjnimain.h" -#include "qandroidplatformmenubar.h" +#include "androidjnimenu.h" #include "qandroidplatformmenu.h" +#include "qandroidplatformmenubar.h" #include "qandroidplatformmenuitem.h" #include <QMutex> @@ -50,7 +50,7 @@ #include <QSet> #include <QWindow> #include <QtCore/private/qjnihelpers_p.h> -#include <QtCore/private/qjni_p.h> +#include <QtCore/QJniObject> QT_BEGIN_NAMESPACE @@ -82,12 +82,12 @@ namespace QtAndroidMenu void resetMenuBar() { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "resetOptionsMenu"); + QJniObject::callStaticMethod<void>(applicationClass(), "resetOptionsMenu"); } void openOptionsMenu() { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "openOptionsMenu"); + QJniObject::callStaticMethod<void>(applicationClass(), "openOptionsMenu"); } void showContextMenu(QAndroidPlatformMenu *menu, const QRect &anchorRect, JNIEnv *env) @@ -104,13 +104,14 @@ namespace QtAndroidMenu { QMutexLocker lock(&visibleMenuMutex); if (visibleMenu == menu) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "closeContextMenu"); + QJniObject::callStaticMethod<void>(applicationClass(), "closeContextMenu"); pendingContextMenus.clear(); } else { pendingContextMenus.removeOne(menu); } } + // FIXME void syncMenu(QAndroidPlatformMenu */*menu*/) { // QMutexLocker lock(&visibleMenuMutex); diff --git a/src/plugins/platforms/android/extract.cpp b/src/plugins/platforms/android/extract.cpp index c68dae31e9..bac3c3709e 100644 --- a/src/plugins/platforms/android/extract.cpp +++ b/src/plugins/platforms/android/extract.cpp @@ -39,10 +39,12 @@ -#include <jni.h> +#include <QtCore/QJniEnvironment> + +#include <alloca.h> #include <android/log.h> #include <extract.h> -#include <alloca.h> +#include <jni.h> #include <stdlib.h> #define LOG_TAG "extractSyleInfo" @@ -133,12 +135,15 @@ Java_org_qtproject_qt_android_ExtractStyle_extractChunkInfo20(JNIEnv *env, jobje env->GetByteArrayRegion(chunkObj, 0, chunkSize, reinterpret_cast<jbyte*>(storage)); - if (!env->ExceptionCheck()) - return Java_org_qtproject_qt_android_ExtractStyle_extractNativeChunkInfo20(env, obj, - long(storage)); - else - env->ExceptionClear(); - return 0; + if (QJniEnvironment::exceptionCheckAndClear(env)) + return 0; + + jintArray res = Java_org_qtproject_qt_android_ExtractStyle_extractNativeChunkInfo20(env, obj, + long(storage)); + if (QJniEnvironment::exceptionCheckAndClear(env)) + res = nullptr; + + return res; } static inline void fill9patchOffsets(Res_png_9patch20* patch) { diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index 6edddf4a66..2dbb1044f0 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -37,13 +37,15 @@ ** ****************************************************************************/ -#include "qandroidassetsfileenginehandler.h" #include "androidjnimain.h" +#include "qandroidassetsfileenginehandler.h" + #include <optional> #include <QCoreApplication> #include <QList> -#include <QtCore/private/qjni_p.h> +#include <QtCore/QJniEnvironment> +#include <QtCore/QJniObject> QT_BEGIN_NAMESPACE @@ -139,16 +141,16 @@ public: FolderIterator(const QString &path) : m_path(path) { - QJNIObjectPrivate files = QJNIObjectPrivate::callStaticObjectMethod(QtAndroid::applicationClass(), + QJniObject files = QJniObject::callStaticObjectMethod(QtAndroid::applicationClass(), "listAssetContent", "(Landroid/content/res/AssetManager;Ljava/lang/String;)[Ljava/lang/String;", - QtAndroid::assets(), QJNIObjectPrivate::fromString(path).object()); + QtAndroid::assets(), QJniObject::fromString(path).object()); if (files.isValid()) { - QJNIEnvironmentPrivate env; + QJniEnvironment env; jobjectArray jFiles = static_cast<jobjectArray>(files.object()); const jint nFiles = env->GetArrayLength(jFiles); for (int i = 0; i < nFiles; ++i) { - AssetItem item{QJNIObjectPrivate::fromLocalRef(env->GetObjectArrayElement(jFiles, i)).toString()}; + AssetItem item{QJniObject::fromLocalRef(env->GetObjectArrayElement(jFiles, i)).toString()}; insert(std::upper_bound(begin(), end(), item, [](const auto &a, const auto &b){ return a.name < b.name; }), item); diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index e39f17a26f..06947c9c32 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -41,26 +41,24 @@ #include <android/log.h> -#include "qandroidinputcontext.h" -#include "androidjnimain.h" +#include "androiddeadlockprotector.h" #include "androidjniinput.h" +#include "androidjnimain.h" #include "qandroideventdispatcher.h" -#include "androiddeadlockprotector.h" +#include "qandroidinputcontext.h" #include "qandroidplatformintegration.h" -#include <QDebug> + +#include <QTextBoundaryFinder> +#include <QTextCharFormat> +#include <QtCore/QJniEnvironment> +#include <QtCore/QJniObject> +#include <private/qhighdpiscaling_p.h> #include <qevent.h> #include <qguiapplication.h> +#include <qinputmethod.h> #include <qsharedpointer.h> #include <qthread.h> -#include <qinputmethod.h> #include <qwindow.h> -#include <QtCore/private/qjni_p.h> -#include <private/qhighdpiscaling_p.h> - -#include <QTextCharFormat> -#include <QTextBoundaryFinder> - -#include <QDebug> QT_BEGIN_NAMESPACE @@ -434,7 +432,8 @@ QAndroidInputContext::QAndroidInputContext() , m_batchEditNestingLevel(0) , m_focusObject(0) { - jclass clazz = QJNIEnvironmentPrivate::findClass(QtNativeInputConnectionClassName); + QJniEnvironment env; + jclass clazz = env.findClass(QtNativeInputConnectionClassName); if (Q_UNLIKELY(!clazz)) { qCritical() << "Native registration unable to find class '" << QtNativeInputConnectionClassName @@ -442,7 +441,6 @@ QAndroidInputContext::QAndroidInputContext() return; } - QJNIEnvironmentPrivate env; if (Q_UNLIKELY(env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])) < 0)) { qCritical() << "RegisterNatives failed for '" << QtNativeInputConnectionClassName @@ -450,7 +448,7 @@ QAndroidInputContext::QAndroidInputContext() return; } - clazz = QJNIEnvironmentPrivate::findClass(QtExtractedTextClassName); + clazz = env.findClass(QtExtractedTextClassName); if (Q_UNLIKELY(!clazz)) { qCritical() << "Native registration unable to find class '" << QtExtractedTextClassName diff --git a/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp b/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp index 9ce63dceec..334dd31d9a 100644 --- a/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp +++ b/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp @@ -90,19 +90,19 @@ bool QAndroidPlatformMessageDialogHelper::show(Qt::WindowFlags windowFlags QString str = htmlText(opt->windowTitle()); if (!str.isEmpty()) - m_javaMessageDialog.callMethod<void>("setTile", "(Ljava/lang/String;)V", QJNIObjectPrivate::fromString(str).object()); + m_javaMessageDialog.callMethod<void>("setTile", "(Ljava/lang/String;)V", QJniObject::fromString(str).object()); str = htmlText(opt->text()); if (!str.isEmpty()) - m_javaMessageDialog.callMethod<void>("setText", "(Ljava/lang/String;)V", QJNIObjectPrivate::fromString(str).object()); + m_javaMessageDialog.callMethod<void>("setText", "(Ljava/lang/String;)V", QJniObject::fromString(str).object()); str = htmlText(opt->informativeText()); if (!str.isEmpty()) - m_javaMessageDialog.callMethod<void>("setInformativeText", "(Ljava/lang/String;)V", QJNIObjectPrivate::fromString(str).object()); + m_javaMessageDialog.callMethod<void>("setInformativeText", "(Ljava/lang/String;)V", QJniObject::fromString(str).object()); str = htmlText(opt->detailedText()); if (!str.isEmpty()) - m_javaMessageDialog.callMethod<void>("setDetailedText", "(Ljava/lang/String;)V", QJNIObjectPrivate::fromString(str).object()); + m_javaMessageDialog.callMethod<void>("setDetailedText", "(Ljava/lang/String;)V", QJniObject::fromString(str).object()); const int * currentLayout = buttonLayout(Qt::Horizontal, AndroidLayout); while (*currentLayout != QPlatformDialogHelper::EOL) { @@ -123,7 +123,7 @@ void QAndroidPlatformMessageDialogHelper::addButtons(QSharedPointer<QMessageDial QString label = b.label; label.remove(QChar('&')); m_javaMessageDialog.callMethod<void>("addButton", "(ILjava/lang/String;)V", b.id, - QJNIObjectPrivate::fromString(label).object()); + QJniObject::fromString(label).object()); } } @@ -131,7 +131,7 @@ void QAndroidPlatformMessageDialogHelper::addButtons(QSharedPointer<QMessageDial StandardButton b = static_cast<StandardButton>(i); if (buttonRole(b) == role && (opt->standardButtons() & i)) { const QString text = QGuiApplicationPrivate::platformTheme()->standardButtonText(b); - m_javaMessageDialog.callMethod<void>("addButton", "(ILjava/lang/String;)V", i, QJNIObjectPrivate::fromString(text).object()); + m_javaMessageDialog.callMethod<void>("addButton", "(ILjava/lang/String;)V", i, QJniObject::fromString(text).object()); } } } @@ -183,7 +183,8 @@ static JNINativeMethod methods[] = { bool registerNatives(JNIEnv *env) { - jclass clazz = QJNIEnvironmentPrivate::findClass(QtMessageHandlerHelperClassName, env); + QJniEnvironment qenv; + jclass clazz = qenv.findClass(QtMessageHandlerHelperClassName); if (!clazz) { __android_log_print(ANDROID_LOG_FATAL, QtAndroid::qtTagText(), QtAndroid::classErrorMsgFmt() , QtMessageHandlerHelperClassName); diff --git a/src/plugins/platforms/android/qandroidplatformdialoghelpers.h b/src/plugins/platforms/android/qandroidplatformdialoghelpers.h index 694b4c7580..1953b842d5 100644 --- a/src/plugins/platforms/android/qandroidplatformdialoghelpers.h +++ b/src/plugins/platforms/android/qandroidplatformdialoghelpers.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 BogDan Vatra <bogdan@kde.org> +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -39,10 +40,13 @@ #ifndef QANDROIDPLATFORMDIALOGHELPERS_H #define QANDROIDPLATFORMDIALOGHELPERS_H + #include <jni.h> -#include <qpa/qplatformdialoghelper.h> + #include <QEventLoop> -#include <private/qjni_p.h> +#include <QtCore/QJniEnvironment> +#include <QtCore/QJniObject> +#include <qpa/qplatformdialoghelper.h> QT_BEGIN_NAMESPACE @@ -68,7 +72,7 @@ private: private: int m_buttonId; QEventLoop m_loop; - QJNIObjectPrivate m_javaMessageDialog; + QJniObject m_javaMessageDialog; bool m_shown; }; diff --git a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp index acfa4542a1..0b539d1af3 100644 --- a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp +++ b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2019 Klaralvdalens Datakonsult AB (KDAB) +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -40,10 +41,10 @@ #include "qandroidplatformfiledialoghelper.h" #include <androidjnimain.h> -#include <jni.h> +#include <QtCore/QJniObject> -#include <QMimeType> #include <QMimeDatabase> +#include <QMimeType> #include <QRegularExpression> QT_BEGIN_NAMESPACE @@ -71,9 +72,9 @@ bool QAndroidPlatformFileDialogHelper::handleActivityResult(jint requestCode, ji return true; } - const QJNIObjectPrivate intent = QJNIObjectPrivate::fromLocalRef(data); + const QJniObject intent = QJniObject::fromLocalRef(data); - const QJNIObjectPrivate uri = intent.callObjectMethod("getData", "()Landroid/net/Uri;"); + const QJniObject uri = intent.callObjectMethod("getData", "()Landroid/net/Uri;"); if (uri.isValid()) { takePersistableUriPermission(uri); m_selectedFile.append(QUrl(uri.toString())); @@ -83,15 +84,15 @@ bool QAndroidPlatformFileDialogHelper::handleActivityResult(jint requestCode, ji return true; } - const QJNIObjectPrivate uriClipData = + const QJniObject uriClipData = intent.callObjectMethod("getClipData", "()Landroid/content/ClipData;"); if (uriClipData.isValid()) { const int size = uriClipData.callMethod<jint>("getItemCount"); for (int i = 0; i < size; ++i) { - QJNIObjectPrivate item = uriClipData.callObjectMethod( + QJniObject item = uriClipData.callObjectMethod( "getItemAt", "(I)Landroid/content/ClipData$Item;", i); - QJNIObjectPrivate itemUri = item.callObjectMethod("getUri", "()Landroid/net/Uri;"); + QJniObject itemUri = item.callObjectMethod("getUri", "()Landroid/net/Uri;"); takePersistableUriPermission(itemUri); m_selectedFile.append(itemUri.toString()); } @@ -102,17 +103,17 @@ bool QAndroidPlatformFileDialogHelper::handleActivityResult(jint requestCode, ji return true; } -void QAndroidPlatformFileDialogHelper::takePersistableUriPermission(const QJNIObjectPrivate &uri) +void QAndroidPlatformFileDialogHelper::takePersistableUriPermission(const QJniObject &uri) { - int modeFlags = QJNIObjectPrivate::getStaticField<jint>( + int modeFlags = QJniObject::getStaticField<jint>( JniIntentClass, "FLAG_GRANT_READ_URI_PERMISSION"); if (options()->acceptMode() == QFileDialogOptions::AcceptSave) { - modeFlags |= QJNIObjectPrivate::getStaticField<jint>( + modeFlags |= QJniObject::getStaticField<jint>( JniIntentClass, "FLAG_GRANT_WRITE_URI_PERMISSION"); } - QJNIObjectPrivate contentResolver = m_activity.callObjectMethod( + QJniObject contentResolver = m_activity.callObjectMethod( "getContentResolver", "()Landroid/content/ContentResolver;"); contentResolver.callMethod<void>("takePersistableUriPermission", "(Landroid/net/Uri;I)V", uri.object(), modeFlags); @@ -120,16 +121,16 @@ void QAndroidPlatformFileDialogHelper::takePersistableUriPermission(const QJNIOb void QAndroidPlatformFileDialogHelper::setIntentTitle(const QString &title) { - const QJNIObjectPrivate extraTitle = QJNIObjectPrivate::getStaticObjectField( + const QJniObject extraTitle = QJniObject::getStaticObjectField( JniIntentClass, "EXTRA_TITLE", "Ljava/lang/String;"); m_intent.callObjectMethod("putExtra", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;", - extraTitle.object(), QJNIObjectPrivate::fromString(title).object()); + extraTitle.object(), QJniObject::fromString(title).object()); } void QAndroidPlatformFileDialogHelper::setOpenableCategory() { - const QJNIObjectPrivate CATEGORY_OPENABLE = QJNIObjectPrivate::getStaticObjectField( + const QJniObject CATEGORY_OPENABLE = QJniObject::getStaticObjectField( JniIntentClass, "CATEGORY_OPENABLE", "Ljava/lang/String;"); m_intent.callObjectMethod("addCategory", "(Ljava/lang/String;)Landroid/content/Intent;", CATEGORY_OPENABLE.object()); @@ -137,7 +138,7 @@ void QAndroidPlatformFileDialogHelper::setOpenableCategory() void QAndroidPlatformFileDialogHelper::setAllowMultipleSelections(bool allowMultiple) { - const QJNIObjectPrivate allowMultipleSelections = QJNIObjectPrivate::getStaticObjectField( + const QJniObject allowMultipleSelections = QJniObject::getStaticObjectField( JniIntentClass, "EXTRA_ALLOW_MULTIPLE", "Ljava/lang/String;"); m_intent.callObjectMethod("putExtra", "(Ljava/lang/String;Z)Landroid/content/Intent;", allowMultipleSelections.object(), allowMultiple); @@ -169,17 +170,17 @@ void QAndroidPlatformFileDialogHelper::setMimeTypes() QString type = !mimeTypes.isEmpty() ? mimeTypes.at(0) : QLatin1String("*/*"); m_intent.callObjectMethod("setType", "(Ljava/lang/String;)Landroid/content/Intent;", - QJNIObjectPrivate::fromString(type).object()); + QJniObject::fromString(type).object()); if (!mimeTypes.isEmpty()) { - const QJNIObjectPrivate extraMimeType = QJNIObjectPrivate::getStaticObjectField( + const QJniObject extraMimeType = QJniObject::getStaticObjectField( JniIntentClass, "EXTRA_MIME_TYPES", "Ljava/lang/String;"); - QJNIObjectPrivate mimeTypesArray = QJNIObjectPrivate::callStaticObjectMethod( + QJniObject mimeTypesArray = QJniObject::callStaticObjectMethod( "org/qtproject/qt/android/QtNative", "getStringArray", "(Ljava/lang/String;)[Ljava/lang/String;", - QJNIObjectPrivate::fromString(mimeTypes.join(",")).object()); + QJniObject::fromString(mimeTypes.join(",")).object()); m_intent.callObjectMethod( "putExtra", "(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;", @@ -187,11 +188,11 @@ void QAndroidPlatformFileDialogHelper::setMimeTypes() } } -QJNIObjectPrivate QAndroidPlatformFileDialogHelper::getFileDialogIntent(const QString &intentType) +QJniObject QAndroidPlatformFileDialogHelper::getFileDialogIntent(const QString &intentType) { - const QJNIObjectPrivate ACTION_OPEN_DOCUMENT = QJNIObjectPrivate::getStaticObjectField( + const QJniObject ACTION_OPEN_DOCUMENT = QJniObject::getStaticObjectField( JniIntentClass, intentType.toLatin1(), "Ljava/lang/String;"); - return QJNIObjectPrivate(JniIntentClass, "(Ljava/lang/String;)V", + return QJniObject(JniIntentClass, "(Ljava/lang/String;)V", ACTION_OPEN_DOCUMENT.object()); } diff --git a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h index a7f9aaa358..2d3cb49a96 100644 --- a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h +++ b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2019 Klaralvdalens Datakonsult AB (KDAB) +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -41,11 +42,11 @@ #define QANDROIDPLATFORMFILEDIALOGHELPER_H #include <jni.h> + #include <QEventLoop> -#include <qpa/qplatformdialoghelper.h> +#include <QtCore/QJniObject> #include <QtCore/private/qjnihelpers_p.h> -#include <private/qjni_p.h> -#include <QEventLoop> +#include <qpa/qplatformdialoghelper.h> QT_BEGIN_NAMESPACE @@ -73,8 +74,8 @@ public: bool handleActivityResult(jint requestCode, jint resultCode, jobject data) override; private: - QJNIObjectPrivate getFileDialogIntent(const QString &intentType); - void takePersistableUriPermission(const QJNIObjectPrivate &uri); + QJniObject getFileDialogIntent(const QString &intentType); + void takePersistableUriPermission(const QJniObject &uri); void setIntentTitle(const QString &title); void setOpenableCategory(); void setAllowMultipleSelections(bool allowMultiple); @@ -82,8 +83,8 @@ private: QEventLoop m_eventLoop; QList<QUrl> m_selectedFile; - QJNIObjectPrivate m_intent; - const QJNIObjectPrivate m_activity; + QJniObject m_intent; + const QJniObject m_activity; }; } diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.h b/src/plugins/platforms/android/qandroidplatformforeignwindow.h index af1eee5499..8e45395838 100644 --- a/src/plugins/platforms/android/qandroidplatformforeignwindow.h +++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -42,7 +42,8 @@ #include "androidsurfaceclient.h" #include "qandroidplatformwindow.h" -#include <QtCore/private/qjni_p.h> + +#include <QtCore/QJniObject> QT_BEGIN_NAMESPACE @@ -61,7 +62,7 @@ public: private: int m_surfaceId; - QJNIObjectPrivate m_view; + QJniObject m_view; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 8048bd6cff..1468343831 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org> +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -39,35 +40,34 @@ #include "qandroidplatformintegration.h" -#include <QtCore/private/qjni_p.h> -#include <QtGui/private/qguiapplication_p.h> -#include <QGuiApplication> -#include <QOpenGLContext> -#include <QOffscreenSurface> -#include <QtGui/private/qoffscreensurface_p.h> -#include <QThread> - -#include <QtGui/private/qeglpbuffer_p.h> -#include <qpa/qwindowsysteminterface.h> -#include <qpa/qplatformwindow.h> -#include <qpa/qplatformoffscreensurface.h> - -#include "androidjnimain.h" #include "androidjniaccessibility.h" +#include "androidjnimain.h" #include "qabstracteventdispatcher.h" #include "qandroideventdispatcher.h" -#include "qandroidplatformbackingstore.h" #include "qandroidplatformaccessibility.h" +#include "qandroidplatformbackingstore.h" #include "qandroidplatformclipboard.h" -#include "qandroidplatformforeignwindow.h" #include "qandroidplatformfontdatabase.h" +#include "qandroidplatformforeignwindow.h" +#include "qandroidplatformoffscreensurface.h" #include "qandroidplatformopenglcontext.h" #include "qandroidplatformopenglwindow.h" #include "qandroidplatformscreen.h" #include "qandroidplatformservices.h" #include "qandroidplatformtheme.h" #include "qandroidsystemlocale.h" -#include "qandroidplatformoffscreensurface.h" + +#include <QGuiApplication> +#include <QOffscreenSurface> +#include <QOpenGLContext> +#include <QThread> +#include <QtCore/QJniObject> +#include <QtGui/private/qeglpbuffer_p.h> +#include <QtGui/private/qguiapplication_p.h> +#include <QtGui/private/qoffscreensurface_p.h> +#include <qpa/qplatformoffscreensurface.h> +#include <qpa/qplatformwindow.h> +#include <qpa/qwindowsysteminterface.h> #include <jni.h> @@ -200,17 +200,17 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶ m_accessibility = new QAndroidPlatformAccessibility(); #endif // QT_NO_ACCESSIBILITY - QJNIObjectPrivate javaActivity(QtAndroid::activity()); + QJniObject javaActivity(QtAndroid::activity()); if (!javaActivity.isValid()) javaActivity = QtAndroid::service(); if (javaActivity.isValid()) { - QJNIObjectPrivate resources = javaActivity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); - QJNIObjectPrivate configuration = resources.callObjectMethod("getConfiguration", "()Landroid/content/res/Configuration;"); + QJniObject resources = javaActivity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); + QJniObject configuration = resources.callObjectMethod("getConfiguration", "()Landroid/content/res/Configuration;"); int touchScreen = configuration.getField<jint>("touchscreen"); - if (touchScreen == QJNIObjectPrivate::getStaticField<jint>("android/content/res/Configuration", "TOUCHSCREEN_FINGER") - || touchScreen == QJNIObjectPrivate::getStaticField<jint>("android/content/res/Configuration", "TOUCHSCREEN_STYLUS")) + if (touchScreen == QJniObject::getStaticField<jint>("android/content/res/Configuration", "TOUCHSCREEN_FINGER") + || touchScreen == QJniObject::getStaticField<jint>("android/content/res/Configuration", "TOUCHSCREEN_STYLUS")) { m_touchDevice = new QPointingDevice; m_touchDevice->setType(QInputDevice::DeviceType::TouchScreen); @@ -219,16 +219,16 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶ | QPointingDevice::Capability::Pressure | QPointingDevice::Capability::NormalizedPosition); - QJNIObjectPrivate pm = javaActivity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;"); + QJniObject pm = javaActivity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;"); Q_ASSERT(pm.isValid()); if (pm.callMethod<jboolean>("hasSystemFeature","(Ljava/lang/String;)Z", - QJNIObjectPrivate::getStaticObjectField("android/content/pm/PackageManager", "FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND", "Ljava/lang/String;").object())) { + QJniObject::getStaticObjectField("android/content/pm/PackageManager", "FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND", "Ljava/lang/String;").object())) { m_touchDevice->setMaximumTouchPoints(10); } else if (pm.callMethod<jboolean>("hasSystemFeature","(Ljava/lang/String;)Z", - QJNIObjectPrivate::getStaticObjectField("android/content/pm/PackageManager", "FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT", "Ljava/lang/String;").object())) { + QJniObject::getStaticObjectField("android/content/pm/PackageManager", "FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT", "Ljava/lang/String;").object())) { m_touchDevice->setMaximumTouchPoints(4); } else if (pm.callMethod<jboolean>("hasSystemFeature","(Ljava/lang/String;)Z", - QJNIObjectPrivate::getStaticObjectField("android/content/pm/PackageManager", "FEATURE_TOUCHSCREEN_MULTITOUCH", "Ljava/lang/String;").object())) { + QJniObject::getStaticObjectField("android/content/pm/PackageManager", "FEATURE_TOUCHSCREEN_MULTITOUCH", "Ljava/lang/String;").object())) { m_touchDevice->setMaximumTouchPoints(2); } QWindowSystemInterface::registerInputDevice(m_touchDevice); @@ -236,11 +236,14 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶ auto contentResolver = javaActivity.callObjectMethod("getContentResolver", "()Landroid/content/ContentResolver;"); Q_ASSERT(contentResolver.isValid()); - QJNIObjectPrivate txtShowPassValue = QJNIObjectPrivate::callStaticObjectMethod("android/provider/Settings$System", - "getString", - "(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;", - contentResolver.object(), - QJNIObjectPrivate::getStaticObjectField("android/provider/Settings$System", "TEXT_SHOW_PASSWORD", "Ljava/lang/String;").object()); + QJniObject txtShowPassValue = QJniObject::callStaticObjectMethod( + "android/provider/Settings$System", + "getString", + "(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;", + contentResolver.object(), + QJniObject::getStaticObjectField("android/provider/Settings$System", + "TEXT_SHOW_PASSWORD", + "Ljava/lang/String;").object()); if (txtShowPassValue.isValid()) { bool ok = false; const int txtShowPass = txtShowPassValue.toString().toInt(&ok); diff --git a/src/plugins/platforms/android/qandroidplatformmenu.cpp b/src/plugins/platforms/android/qandroidplatformmenu.cpp index 3431997a53..1ac836faf2 100644 --- a/src/plugins/platforms/android/qandroidplatformmenu.cpp +++ b/src/plugins/platforms/android/qandroidplatformmenu.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org> +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -37,10 +38,12 @@ ** ****************************************************************************/ +#include "androidjnimenu.h" #include "qandroidplatformmenu.h" #include "qandroidplatformmenuitem.h" -#include "androidjnimenu.h" -#include <QtCore/private/qjni_p.h> + +#include <QtCore/qjnienvironment.h> +#include <QtCore/qjniobject.h> QT_BEGIN_NAMESPACE @@ -152,7 +155,7 @@ void QAndroidPlatformMenu::showPopup(const QWindow *parentWindow, const QRect &t Q_UNUSED(parentWindow); Q_UNUSED(item); setVisible(true); - QtAndroidMenu::showContextMenu(this, targetRect, QJNIEnvironmentPrivate()); + QtAndroidMenu::showContextMenu(this, targetRect, QJniEnvironment()); } QPlatformMenuItem *QAndroidPlatformMenu::menuItemForTag(quintptr tag) const diff --git a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp index 333fc2a25f..f69e9e389f 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp @@ -40,20 +40,20 @@ #include "qandroidplatformopenglwindow.h" -#include "qandroidplatformscreen.h" +#include "androiddeadlockprotector.h" #include "androidjnimain.h" #include "qandroideventdispatcher.h" -#include "androiddeadlockprotector.h" +#include "qandroidplatformscreen.h" #include <QSurfaceFormat> #include <QtGui/private/qwindow_p.h> #include <QtGui/qguiapplication.h> -#include <qpa/qwindowsysteminterface.h> -#include <qpa/qplatformscreen.h> #include <QtGui/private/qeglconvenience_p.h> #include <android/native_window.h> #include <android/native_window_jni.h> +#include <qpa/qplatformscreen.h> +#include <qpa/qwindowsysteminterface.h> QT_BEGIN_NAMESPACE @@ -175,9 +175,9 @@ void QAndroidPlatformOpenGLWindow::applicationStateChanged(Qt::ApplicationState void QAndroidPlatformOpenGLWindow::createEgl(EGLConfig config) { clearEgl(); - QJNIEnvironmentPrivate env; + QJniEnvironment env; m_nativeWindow = ANativeWindow_fromSurface(env, m_androidSurfaceObject.object()); - m_androidSurfaceObject = QJNIObjectPrivate(); + m_androidSurfaceObject = QJniObject(); m_eglSurface = eglCreateWindowSurface(m_eglDisplay, config, m_nativeWindow, NULL); m_format = q_glFormatFromConfig(m_eglDisplay, config, window()->requestedFormat()); if (Q_UNLIKELY(m_eglSurface == EGL_NO_SURFACE)) { diff --git a/src/plugins/platforms/android/qandroidplatformopenglwindow.h b/src/plugins/platforms/android/qandroidplatformopenglwindow.h index d3072f766d..b8f1a5f9fc 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglwindow.h +++ b/src/plugins/platforms/android/qandroidplatformopenglwindow.h @@ -41,13 +41,15 @@ #ifndef QANDROIDPLATFORMOPENGLWINDOW_H #define QANDROIDPLATFORMOPENGLWINDOW_H -#include <EGL/egl.h> -#include <QWaitCondition> -#include <QtCore/private/qjni_p.h> - #include "androidsurfaceclient.h" #include "qandroidplatformwindow.h" +#include <QWaitCondition> +#include <QtCore/qjnienvironment.h> +#include <QtCore/qjniobject.h> + +#include <EGL/egl.h> + QT_BEGIN_NAMESPACE class QAndroidPlatformOpenGLWindow : public QAndroidPlatformWindow, public AndroidSurfaceClient @@ -77,7 +79,7 @@ private: EGLNativeWindowType m_nativeWindow = nullptr; int m_nativeSurfaceId = -1; - QJNIObjectPrivate m_androidSurfaceObject; + QJniObject m_androidSurfaceObject; QWaitCondition m_surfaceWaitCondition; QSurfaceFormat m_format; QRect m_oldGeometry; diff --git a/src/plugins/platforms/android/qandroidplatformscreen.h b/src/plugins/platforms/android/qandroidplatformscreen.h index 5dc158e351..4cdb0351bd 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.h +++ b/src/plugins/platforms/android/qandroidplatformscreen.h @@ -41,14 +41,14 @@ #ifndef QANDROIDPLATFORMSCREEN_H #define QANDROIDPLATFORMSCREEN_H -#include <qpa/qplatformscreen.h> +#include "androidsurfaceclient.h" + #include <QList> #include <QPainter> #include <QTimer> #include <QWaitCondition> -#include <QtCore/private/qjni_p.h> - -#include "androidsurfaceclient.h" +#include <QtCore/QJniObject> +#include <qpa/qplatformscreen.h> #include <android/native_window.h> diff --git a/src/plugins/platforms/android/qandroidplatformservices.cpp b/src/plugins/platforms/android/qandroidplatformservices.cpp index c095613ce7..b5f829d3d3 100644 --- a/src/plugins/platforms/android/qandroidplatformservices.cpp +++ b/src/plugins/platforms/android/qandroidplatformservices.cpp @@ -38,11 +38,12 @@ ****************************************************************************/ #include "qandroidplatformservices.h" -#include <QUrl> -#include <QFile> + #include <QDebug> +#include <QFile> #include <QMimeDatabase> -#include <QtCore/private/qjni_p.h> +#include <QUrl> +#include <QtCore/QJniObject> #include <private/qjnihelpers_p.h> QT_BEGIN_NAMESPACE @@ -66,9 +67,9 @@ bool QAndroidPlatformServices::openUrl(const QUrl &theUrl) mime = mimeDb.mimeTypeForUrl(url).name(); } - QJNIObjectPrivate urlString = QJNIObjectPrivate::fromString(url.toString()); - QJNIObjectPrivate mimeString = QJNIObjectPrivate::fromString(mime); - return QJNIObjectPrivate::callStaticMethod<jboolean>( + QJniObject urlString = QJniObject::fromString(url.toString()); + QJniObject mimeString = QJniObject::fromString(mime); + return QJniObject::callStaticMethod<jboolean>( QtAndroid::applicationClass(), "openURL", "(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Z", QtAndroidPrivate::context(), urlString.object(), mimeString.object()); diff --git a/src/plugins/platforms/android/qandroidplatformvulkanwindow.cpp b/src/plugins/platforms/android/qandroidplatformvulkanwindow.cpp index 6a1a51b272..8f2a37626a 100644 --- a/src/plugins/platforms/android/qandroidplatformvulkanwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformvulkanwindow.cpp @@ -37,15 +37,15 @@ ** ****************************************************************************/ -#include "qandroidplatformvulkanwindow.h" -#include "qandroidplatformscreen.h" +#include "androiddeadlockprotector.h" #include "androidjnimain.h" #include "qandroideventdispatcher.h" -#include "androiddeadlockprotector.h" +#include "qandroidplatformscreen.h" +#include "qandroidplatformvulkanwindow.h" #include <QSurfaceFormat> -#include <qpa/qwindowsysteminterface.h> #include <qpa/qplatformscreen.h> +#include <qpa/qwindowsysteminterface.h> #include <android/native_window.h> #include <android/native_window_jni.h> @@ -172,7 +172,7 @@ VkSurfaceKHR *QAndroidPlatformVulkanWindow::vkSurface() if (m_nativeSurfaceId == -1 || !m_androidSurfaceObject.isValid()) return &m_vkSurface; - QJNIEnvironmentPrivate env; + QJniEnvironment env; m_nativeWindow = ANativeWindow_fromSurface(env, m_androidSurfaceObject.object()); VkAndroidSurfaceCreateInfoKHR surfaceInfo; diff --git a/src/plugins/platforms/android/qandroidplatformvulkanwindow.h b/src/plugins/platforms/android/qandroidplatformvulkanwindow.h index 19eca98720..bc11f468d6 100644 --- a/src/plugins/platforms/android/qandroidplatformvulkanwindow.h +++ b/src/plugins/platforms/android/qandroidplatformvulkanwindow.h @@ -46,13 +46,13 @@ #define VK_USE_PLATFORM_ANDROID_KHR -#include <QWaitCondition> -#include <QtCore/private/qjni_p.h> - #include "androidsurfaceclient.h" +#include "qandroidplatformvulkaninstance.h" #include "qandroidplatformwindow.h" -#include "qandroidplatformvulkaninstance.h" +#include <QWaitCondition> +#include <QtCore/QJniEnvironment> +#include <QtCore/QJniObject> QT_BEGIN_NAMESPACE @@ -77,7 +77,7 @@ private: int m_nativeSurfaceId; ANativeWindow *m_nativeWindow; - QJNIObjectPrivate m_androidSurfaceObject; + QJniObject m_androidSurfaceObject; QWaitCondition m_surfaceWaitCondition; QSurfaceFormat m_format; QRect m_oldGeometry; diff --git a/src/plugins/platforms/android/qandroidsystemlocale.cpp b/src/plugins/platforms/android/qandroidsystemlocale.cpp index bb6aa0dda1..45387b53c7 100644 --- a/src/plugins/platforms/android/qandroidsystemlocale.cpp +++ b/src/plugins/platforms/android/qandroidsystemlocale.cpp @@ -37,14 +37,15 @@ ** ****************************************************************************/ -#include "qandroidsystemlocale.h" #include "androidjnimain.h" -#include <QtCore/private/qjni_p.h> -#include <QtCore/private/qjnihelpers_p.h> +#include "qandroidsystemlocale.h" #include "qdatetime.h" #include "qstringlist.h" #include "qvariant.h" +#include <QtCore/private/qjnihelpers_p.h> +#include <QtCore/QJniObject> + QT_BEGIN_NAMESPACE QAndroidSystemLocale::QAndroidSystemLocale() : m_locale(QLocale::C) @@ -55,17 +56,17 @@ void QAndroidSystemLocale::getLocaleFromJava() const { QWriteLocker locker(&m_lock); - QJNIObjectPrivate javaLocaleObject; - QJNIObjectPrivate javaActivity(QtAndroid::activity()); + QJniObject javaLocaleObject; + QJniObject javaActivity(QtAndroid::activity()); if (!javaActivity.isValid()) javaActivity = QtAndroid::service(); if (javaActivity.isValid()) { - QJNIObjectPrivate resources = javaActivity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); - QJNIObjectPrivate configuration = resources.callObjectMethod("getConfiguration", "()Landroid/content/res/Configuration;"); + QJniObject resources = javaActivity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); + QJniObject configuration = resources.callObjectMethod("getConfiguration", "()Landroid/content/res/Configuration;"); javaLocaleObject = configuration.getObjectField("locale", "Ljava/util/Locale;"); } else { - javaLocaleObject = QJNIObjectPrivate::callStaticObjectMethod("java/util/Locale", "getDefault", "()Ljava/util/Locale;"); + javaLocaleObject = QJniObject::callStaticObjectMethod("java/util/Locale", "getDefault", "()Ljava/util/Locale;"); } QString languageCode = javaLocaleObject.callObjectMethod("getLanguage", "()Ljava/lang/String;").toString(); @@ -165,9 +166,9 @@ QVariant QAndroidSystemLocale::query(QueryType type, QVariant in) const Q_ASSERT_X(false, Q_FUNC_INFO, "This can't happen."); case UILanguages: { if (QtAndroidPrivate::androidSdkVersion() >= 24) { - QJNIObjectPrivate localeListObject = - QJNIObjectPrivate::callStaticObjectMethod("android/os/LocaleList", "getDefault", - "()Landroid/os/LocaleList;"); + QJniObject localeListObject = + QJniObject::callStaticObjectMethod("android/os/LocaleList", "getDefault", + "()Landroid/os/LocaleList;"); if (localeListObject.isValid()) { QString lang = localeListObject.callObjectMethod("toLanguageTags", "()Ljava/lang/String;").toString(); |