From faaa6521dc37fcf4d989f94b6d2a373974357629 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Fri, 7 Dec 2018 14:17:32 +0100 Subject: 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 --- .../position/android/src/jnipositioning.cpp | 55 +++++++++++----------- 1 file 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(&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(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(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(0); + QGeoPositionInfoSource::PositioningMethods ret = QGeoPositionInfoSource::NoPositioningMethods; AttachedJNIEnv env; if (!env.jniEnv) return ret; jintArray jProviders = static_cast(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::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"); -- cgit v1.2.1