From 23c34f415c17146f928e5a3b88320709342dc438 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Thu, 6 May 2021 13:07:54 +0300 Subject: Android: use new public jni apis Replace use of QJNIObjectPrivate with QJniObject. Get context() and sdkVersion() from QNativeInterface::QAndroidApplication. Fixes: QTBUG-92550 Change-Id: I625b2269ef253e1a1f76f82edebac236de184c2c Reviewed-by: Alex Blasche --- src/plugins/sensors/android/sensormanager.cpp | 32 +++++++++++++++++---------- src/plugins/sensors/android/sensormanager.h | 17 +++++++------- 2 files changed, 28 insertions(+), 21 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/sensors/android/sensormanager.cpp b/src/plugins/sensors/android/sensormanager.cpp index f60ed961..f48f920b 100644 --- a/src/plugins/sensors/android/sensormanager.cpp +++ b/src/plugins/sensors/android/sensormanager.cpp @@ -1,5 +1,6 @@ /**************************************************************************** ** +** Copyright (C) 2021 The Qt Company Ltd. ** Copyright (C) 2019 BogDan Vatra ** Contact: https://www.qt.io/licensing/ ** @@ -37,12 +38,18 @@ ** ****************************************************************************/ #include "sensormanager.h" +#include + #include SensorManager::SensorManager() { - auto sensorService = QJNIObjectPrivate::getStaticObjectField("android.content.Context", "SENSOR_SERVICE", "Ljava/lang/String;"); - m_sensorManager = QJNIObjectPrivate{QtAndroidPrivate::context()}.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;", sensorService.object()); + auto sensorService = QJniObject::getStaticObjectField("android.content.Context", + "SENSOR_SERVICE", "Ljava/lang/String;"); + QJniObject context = QNativeInterface::QAndroidApplication::context(); + m_sensorManager = context.callObjectMethod("getSystemService", + "(Ljava/lang/String;)Ljava/lang/Object;", + sensorService.object()); setObjectName("QtSensorsLooperThread"); start(); m_waitForStart.acquire(); @@ -54,9 +61,10 @@ SensorManager::~SensorManager() wait(); } -QJNIObjectPrivate SensorManager::javaSensor(const ASensor *sensor) const +QJniObject SensorManager::javaSensor(const ASensor *sensor) const { - return m_sensorManager.callObjectMethod("getDefaultSensor", "(I)Landroid/hardware/Sensor;", ASensor_getType(sensor)); + return m_sensorManager.callObjectMethod("getDefaultSensor", "(I)Landroid/hardware/Sensor;", + ASensor_getType(sensor)); } QSharedPointer &SensorManager::instance() @@ -72,19 +80,18 @@ ALooper *SensorManager::looper() const static inline ASensorManager* androidManager() { + QJniObject context = QNativeInterface::QAndroidApplication::context(); + auto packageName = context.callObjectMethod("getPackageName", "()Ljava/lang/String;") + .toString().toUtf8(); #if __ANDROID_API__ >= 26 - return ASensorManager_getInstanceForPackage(QJNIObjectPrivate{QtAndroidPrivate::context()} - .callObjectMethod("getPackageName", "()Ljava/lang/String;") - .toString().toUtf8().constData()); + return ASensorManager_getInstanceForPackage(packageName.constData()); #else - if (QtAndroidPrivate::androidSdkVersion() >= 26) { + if (QNativeInterface::QAndroidApplication::sdkVersion() >= 26) { using GetInstanceForPackage = ASensorManager *(*)(const char *); auto handler = dlopen("libandroid.so", RTLD_NOW); auto function = GetInstanceForPackage(dlsym(handler, "ASensorManager_getInstanceForPackage")); if (function) { - auto res = function(QJNIObjectPrivate{QtAndroidPrivate::context()} - .callObjectMethod("getPackageName", "()Ljava/lang/String;") - .toString().toUtf8().constData()); + auto res = function(packageName.constData()); dlclose(handler); return res; } @@ -101,7 +108,8 @@ ASensorManager *SensorManager::manager() const QString SensorManager::description(const ASensor *sensor) const { - return QString::fromUtf8(ASensor_getName(sensor)) + " " + ASensor_getVendor(sensor) + " v" + QString::number(javaSensor(sensor).callMethod("getVersion")); + return QString::fromUtf8(ASensor_getName(sensor)) + " " + ASensor_getVendor(sensor) + + " v" + QString::number(javaSensor(sensor).callMethod("getVersion")); } double SensorManager::getMaximumRange(const ASensor *sensor) const diff --git a/src/plugins/sensors/android/sensormanager.h b/src/plugins/sensors/android/sensormanager.h index dc7ffe1f..dd15e04f 100644 --- a/src/plugins/sensors/android/sensormanager.h +++ b/src/plugins/sensors/android/sensormanager.h @@ -1,5 +1,6 @@ /**************************************************************************** ** +** Copyright (C) 2021 The Qt Company Ltd. ** Copyright (C) 2019 BogDan Vatra ** Contact: https://www.qt.io/licensing/ ** @@ -40,13 +41,11 @@ #ifndef SENSORMANAGER_H #define SENSORMANAGER_H -#include -#include -#include -#include - -#include -#include +#include +#include +#include +#include +#include #include @@ -58,7 +57,7 @@ public: ALooper *looper() const; ASensorManager *manager() const; - QJNIObjectPrivate javaSensor(const ASensor *sensor) const; + QJniObject javaSensor(const ASensor *sensor) const; QString description(const ASensor *sensor) const; double getMaximumRange(const ASensor *sensor) const; @@ -71,7 +70,7 @@ private: QAtomicInt m_quit{0}; ALooper *m_looper = nullptr; QSemaphore m_waitForStart; - QJNIObjectPrivate m_sensorManager; + QJniObject m_sensorManager; }; #endif // SENSORMANAGER_H -- cgit v1.2.3