summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-02-01 03:07:35 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-02-01 03:07:35 +0100
commitfc8ca2cccd684e69131907151b2beb678afdff1d (patch)
tree94c736850ca8c58249fbf6a347e8919d4940decb
parent4ee08b0770dc018e390051a35092264f0b1a789a (diff)
parent594ec018648060340bfbd96477cfd743d7133a56 (diff)
downloadqtlocation-fc8ca2cccd684e69131907151b2beb678afdff1d.tar.gz
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: Iae2b08cdf4f64d69bedeabf4633fd34b44a02ad0
-rw-r--r--dist/changes-5.14.120
-rw-r--r--src/plugins/position/android/src/jnipositioning.cpp60
-rw-r--r--src/plugins/position/android/src/jnipositioning.h2
-rw-r--r--src/positioning/positioning.pro4
4 files changed, 57 insertions, 29 deletions
diff --git a/dist/changes-5.14.1 b/dist/changes-5.14.1
new file mode 100644
index 00000000..d0086381
--- /dev/null
+++ b/dist/changes-5.14.1
@@ -0,0 +1,20 @@
+Qt 5.14.1 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.14.0.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.14 series is binary compatible with the 5.13.x series.
+Applications compiled for 5.13 will continue to run with 5.14.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+ - This release contains only minor code improvements.
diff --git a/src/plugins/position/android/src/jnipositioning.cpp b/src/plugins/position/android/src/jnipositioning.cpp
index 4812e307..05b25d98 100644
--- a/src/plugins/position/android/src/jnipositioning.cpp
+++ b/src/plugins/position/android/src/jnipositioning.cpp
@@ -44,7 +44,6 @@
#include <QtGlobal>
#include <QtCore/private/qjnihelpers_p.h>
#include <android/log.h>
-#include <jni.h>
#include <QGeoPositionInfo>
#include "qgeopositioninfosource_android_p.h"
#include "qgeosatelliteinfosource_android_p.h"
@@ -351,6 +350,9 @@ namespace AndroidPositioning {
if (!env.jniEnv)
return QGeoPositionInfo();
+ if (!requestionPositioningPermissions(env.jniEnv))
+ return {};
+
jobject location = env.jniEnv->CallStaticObjectMethod(positioningClass,
lastKnownPositionMethodId,
fromSatellitePositioningMethodsOnly);
@@ -383,19 +385,8 @@ namespace AndroidPositioning {
QGeoPositionInfoSourceAndroid *source = AndroidPositioning::idToPosSource()->value(androidClassKey);
if (source) {
- // Android v23+ requires runtime permission check and requests
- QString permission(QLatin1String("android.permission.ACCESS_FINE_LOCATION"));
-
- if (QtAndroidPrivate::checkPermission(permission) == QtAndroidPrivate::PermissionsResult::Denied) {
- const QHash<QString, QtAndroidPrivate::PermissionsResult> results =
- QtAndroidPrivate::requestPermissionsSync(env.jniEnv, QStringList() << permission);
- if (!results.contains(permission)
- || results[permission] == QtAndroidPrivate::PermissionsResult::Denied)
- {
- qWarning() << "Position retrieval not possible due to missing permission (ACCESS_FINE_LOCATION)";
- return QGeoPositionInfoSource::AccessError;
- }
- }
+ if (!requestionPositioningPermissions(env.jniEnv))
+ return QGeoPositionInfoSource::AccessError;
int errorCode = env.jniEnv->CallStaticIntMethod(positioningClass, startUpdatesMethodId,
androidClassKey,
@@ -434,19 +425,8 @@ namespace AndroidPositioning {
QGeoPositionInfoSourceAndroid *source = AndroidPositioning::idToPosSource()->value(androidClassKey);
if (source) {
- // Android v23+ requires runtime permission check and requests
- QString permission(QLatin1String("android.permission.ACCESS_FINE_LOCATION"));
-
- if (QtAndroidPrivate::checkPermission(permission) == QtAndroidPrivate::PermissionsResult::Denied) {
- const QHash<QString, QtAndroidPrivate::PermissionsResult> results =
- QtAndroidPrivate::requestPermissionsSync(env.jniEnv, QStringList() << permission);
- if (!results.contains(permission)
- || results[permission] == QtAndroidPrivate::PermissionsResult::Denied)
- {
- qWarning() << "Position update not possible due to missing permission (ACCESS_FINE_LOCATION)";
- return QGeoPositionInfoSource::AccessError;
- }
- }
+ if (!requestionPositioningPermissions(env.jniEnv))
+ return QGeoPositionInfoSource::AccessError;
int errorCode = env.jniEnv->CallStaticIntMethod(positioningClass, requestUpdateMethodId,
androidClassKey,
@@ -473,6 +453,9 @@ namespace AndroidPositioning {
QGeoSatelliteInfoSourceAndroid *source = AndroidPositioning::idToSatSource()->value(androidClassKey);
if (source) {
+ if (!requestionPositioningPermissions(env.jniEnv))
+ return QGeoSatelliteInfoSource::AccessError;
+
int interval = source->updateInterval();
if (isSingleRequest)
interval = requestTimeout;
@@ -492,8 +475,29 @@ namespace AndroidPositioning {
}
return QGeoSatelliteInfoSource::UnknownSourceError;
}
-}
+ bool requestionPositioningPermissions(JNIEnv *env)
+ {
+ using namespace QtAndroidPrivate;
+
+ if (androidSdkVersion() < 23)
+ return true;
+
+ // Android v23+ requires runtime permission check and requests
+ QString permission(QLatin1String("android.permission.ACCESS_FINE_LOCATION"));
+
+ if (checkPermission(permission) == PermissionsResult::Denied) {
+ const QHash<QString, PermissionsResult> results =
+ requestPermissionsSync(env, QStringList() << permission);
+ if (!results.contains(permission) || results[permission] == PermissionsResult::Denied) {
+ qWarning() << "Position data not available due to missing permission " << permission;
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
static void positionUpdated(JNIEnv *env, jobject /*thiz*/, jobject location, jint androidClassKey, jboolean isSingleUpdate)
{
diff --git a/src/plugins/position/android/src/jnipositioning.h b/src/plugins/position/android/src/jnipositioning.h
index 0de6a5aa..0c051b8c 100644
--- a/src/plugins/position/android/src/jnipositioning.h
+++ b/src/plugins/position/android/src/jnipositioning.h
@@ -40,6 +40,7 @@
#ifndef JNIPOSITIONING_H
#define JNIPOSITIONING_H
+#include <jni.h>
#include <QGeoPositionInfoSource>
#include <QGeoSatelliteInfoSource>
@@ -58,6 +59,7 @@ namespace AndroidPositioning
QGeoSatelliteInfoSource::Error startSatelliteUpdates(int androidClassKey,
bool isSingleRequest,
int updateRequestTimeout);
+ bool requestionPositioningPermissions(JNIEnv *env);
}
#endif // JNIPOSITIONING_H
diff --git a/src/positioning/positioning.pro b/src/positioning/positioning.pro
index 06e2d531..65350909 100644
--- a/src/positioning/positioning.pro
+++ b/src/positioning/positioning.pro
@@ -11,8 +11,10 @@ OTHER_FILES += configure.json doc/src/*.qdoc doc/src/plugins/*.qdoc # show .qd
ANDROID_BUNDLED_JAR_DEPENDENCIES = \
jar/QtPositioning.jar:org.qtproject.qt5.android.positioning.QtPositioning
-ANDROID_PERMISSIONS = \
+ANDROID_PERMISSIONS += \
android.permission.ACCESS_FINE_LOCATION
+ANDROID_FEATURES += \
+ android.hardware.location.gps
ANDROID_LIB_DEPENDENCIES = \
plugins/position/libplugins_position_qtposition_android.so
MODULE_WINRT_CAPABILITIES_DEVICE += \