summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@qt.io>2018-12-07 14:17:32 +0100
committerAlex Blasche <alexander.blasche@qt.io>2018-12-10 15:44:38 +0000
commitfaaa6521dc37fcf4d989f94b6d2a373974357629 (patch)
treeaaaedb43c456a7f26d24f409d981a637fef8ddd5
parentb4966afc91fa82315f0ae9b11f54f52f20183e9b (diff)
downloadqtlocation-faaa6521dc37fcf4d989f94b6d2a373974357629.tar.gz
Fix warnings in jnipositioning.cpp
Since Android uses a new NDK/compiler since 5.12 there were many more warnings which had serious implications. Examples are potentially flawed downcasts, nullptr warnings and old style casting operators. Change-Id: I53989fa9120c8b7e865d23255d1fcdf229e7f2f3 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
-rw-r--r--src/plugins/position/android/src/jnipositioning.cpp55
1 files changed, 28 insertions, 27 deletions
diff --git a/src/plugins/position/android/src/jnipositioning.cpp b/src/plugins/position/android/src/jnipositioning.cpp
index 9bef8d36..c333a9c6 100644
--- a/src/plugins/position/android/src/jnipositioning.cpp
+++ b/src/plugins/position/android/src/jnipositioning.cpp
@@ -51,8 +51,8 @@
#include "jnipositioning.h"
-static JavaVM *javaVM = 0;
-jclass positioningClass;
+static JavaVM *javaVM = nullptr;
+static jclass positioningClass;
static jmethodID providerListMethodId;
static jmethodID lastKnownPositionMethodId;
@@ -78,10 +78,10 @@ namespace AndroidPositioning {
AttachedJNIEnv()
{
attached = false;
- if (javaVM && javaVM->GetEnv((void**)&jniEnv, JNI_VERSION_1_6) < 0) {
- if (javaVM->AttachCurrentThread(&jniEnv, NULL) < 0) {
+ if (javaVM && javaVM->GetEnv(reinterpret_cast<void**>(&jniEnv), JNI_VERSION_1_6) < 0) {
+ if (javaVM->AttachCurrentThread(&jniEnv, nullptr) < 0) {
__android_log_print(ANDROID_LOG_ERROR, logTag, "AttachCurrentThread failed");
- jniEnv = 0;
+ jniEnv = nullptr;
return;
}
attached = true;
@@ -109,7 +109,7 @@ namespace AndroidPositioning {
QGeoPositionInfoSourceAndroid *src = qobject_cast<QGeoPositionInfoSourceAndroid *>(obj);
Q_ASSERT(src);
do {
- key = QRandomGenerator::global()->generate();
+ key = qAbs(int(QRandomGenerator::global()->generate()));
} while (idToPosSource()->contains(key));
idToPosSource()->insert(key, src);
@@ -117,7 +117,7 @@ namespace AndroidPositioning {
QGeoSatelliteInfoSourceAndroid *src = qobject_cast<QGeoSatelliteInfoSourceAndroid *>(obj);
Q_ASSERT(src);
do {
- key = QRandomGenerator::global()->generate();
+ key = qAbs(int(QRandomGenerator::global()->generate()));
} while (idToSatSource()->contains(key));
idToSatSource()->insert(key, src);
@@ -142,16 +142,15 @@ namespace AndroidPositioning {
QGeoPositionInfoSource::PositioningMethods availableProviders()
{
- QGeoPositionInfoSource::PositioningMethods ret =
- static_cast<QGeoPositionInfoSource::PositioningMethods>(0);
+ QGeoPositionInfoSource::PositioningMethods ret = QGeoPositionInfoSource::NoPositioningMethods;
AttachedJNIEnv env;
if (!env.jniEnv)
return ret;
jintArray jProviders = static_cast<jintArray>(env.jniEnv->CallStaticObjectMethod(
positioningClass, providerListMethodId));
- jint *providers = env.jniEnv->GetIntArrayElements(jProviders, 0);
- const uint size = env.jniEnv->GetArrayLength(jProviders);
- for (uint i = 0; i < size; i++) {
+ jint *providers = env.jniEnv->GetIntArrayElements(jProviders, nullptr);
+ const int size = env.jniEnv->GetArrayLength(jProviders);
+ for (int i = 0; i < size; i++) {
switch (providers[i]) {
case PROVIDER_GPS:
ret |= QGeoPositionInfoSource::SatellitePositioningMethods;
@@ -182,17 +181,17 @@ namespace AndroidPositioning {
const char *name,
const char *sig)
{
- jmethodID id = 0;
- int offset_name = qstrlen(name);
- int offset_signal = qstrlen(sig);
- QByteArray key(offset_name + offset_signal, Qt::Uninitialized);
+ jmethodID id = nullptr;
+ uint offset_name = qstrlen(name);
+ uint offset_signal = qstrlen(sig);
+ QByteArray key(int(offset_name + offset_signal), Qt::Uninitialized);
memcpy(key.data(), name, offset_name);
memcpy(key.data()+offset_name, sig, offset_signal);
QHash<QByteArray, jmethodID>::iterator it = cachedMethodID->find(key);
if (it == cachedMethodID->end()) {
id = env->GetMethodID(clazz, name, sig);
if (env->ExceptionCheck()) {
- id = 0;
+ id = nullptr;
#ifdef QT_DEBUG
env->ExceptionDescribe();
#endif // QT_DEBUG
@@ -241,16 +240,18 @@ namespace AndroidPositioning {
if (attributeExists) {
mid = getCachedMethodID(jniEnv, thisClass, "getAccuracy", "()F");
jfloat accuracy = jniEnv->CallFloatMethod(location, mid);
- info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, accuracy);
+ info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, qreal(accuracy));
}
+
+
//ground speed
mid = getCachedMethodID(jniEnv, thisClass, "hasSpeed", "()Z");
attributeExists = jniEnv->CallBooleanMethod(location, mid);
if (attributeExists) {
mid = getCachedMethodID(jniEnv, thisClass, "getSpeed", "()F");
jfloat speed = jniEnv->CallFloatMethod(location, mid);
- info.setAttribute(QGeoPositionInfo::GroundSpeed, speed);
+ info.setAttribute(QGeoPositionInfo::GroundSpeed, qreal(speed));
}
//bearing
@@ -259,7 +260,7 @@ namespace AndroidPositioning {
if (attributeExists) {
mid = getCachedMethodID(jniEnv, thisClass, "getBearing", "()F");
jfloat bearing = jniEnv->CallFloatMethod(location, mid);
- info.setAttribute(QGeoPositionInfo::Direction, bearing);
+ info.setAttribute(QGeoPositionInfo::Direction, qreal(bearing));
}
jniEnv->DeleteLocalRef(thisClass);
@@ -288,7 +289,7 @@ namespace AndroidPositioning {
//signal strength
jmethodID mid = getCachedMethodID(jniEnv, thisClass, "getSnr", "()F");
jfloat snr = jniEnv->CallFloatMethod(element, mid);
- info.setSignalStrength((int)snr);
+ info.setSignalStrength(int(snr));
//ignore any satellite with no signal whatsoever
if (qFuzzyIsNull(snr))
@@ -307,12 +308,12 @@ namespace AndroidPositioning {
//azimuth
mid = getCachedMethodID(jniEnv, thisClass, "getAzimuth", "()F");
jfloat azimuth = jniEnv->CallFloatMethod(element, mid);
- info.setAttribute(QGeoSatelliteInfo::Azimuth, azimuth);
+ info.setAttribute(QGeoSatelliteInfo::Azimuth, qreal(azimuth));
//elevation
mid = getCachedMethodID(jniEnv, thisClass, "getElevation", "()F");
jfloat elevation = jniEnv->CallFloatMethod(element, mid);
- info.setAttribute(QGeoSatelliteInfo::Elevation, elevation);
+ info.setAttribute(QGeoSatelliteInfo::Elevation, qreal(elevation));
//used in a fix
mid = getCachedMethodID(jniEnv, thisClass, "usedInFix", "()Z");
@@ -339,7 +340,7 @@ namespace AndroidPositioning {
jobject location = env.jniEnv->CallStaticObjectMethod(positioningClass,
lastKnownPositionMethodId,
fromSatellitePositioningMethodsOnly);
- if (location == 0)
+ if (location == nullptr)
return QGeoPositionInfo();
const QGeoPositionInfo info = positionInfoFromJavaLocation(env.jniEnv, location);
@@ -520,7 +521,7 @@ static void satelliteUpdated(JNIEnv *env, jobject /*thiz*/, jobjectArray satelli
QGeoSatelliteInfoSourceAndroid *source = AndroidPositioning::idToSatSource()->value(androidClassKey);
if (!source) {
- qFatal("satelliteUpdated: source == 0");
+ qWarning("satelliteUpdated: source == 0");
return;
}
@@ -587,8 +588,8 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/)
__android_log_print(ANDROID_LOG_INFO, logTag, "Positioning start");
UnionJNIEnvToVoid uenv;
- uenv.venv = NULL;
- javaVM = 0;
+ uenv.venv = nullptr;
+ javaVM = nullptr;
if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
__android_log_print(ANDROID_LOG_FATAL, logTag, "GetEnv failed");