summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@qt.io>2018-12-19 15:59:46 +0100
committerAlex Blasche <alexander.blasche@qt.io>2019-01-04 12:32:43 +0000
commit3c3be256cc1658b0d02047b158228fd55d04e2a0 (patch)
treeca0256b18b7ccb42f465dc8f6c230d1afdf724a2
parent00db28fe2905c6f9b10da65cc777962c373333a6 (diff)
downloadqtlocation-3c3be256cc1658b0d02047b158228fd55d04e2a0.tar.gz
Ensure QGeoPositionInfoSource::supportedPositioningMethodsChanged() on Android
This signal was added in Qt 5.12 but never emitted on Android. Due to implementation issues this signal is emitted for each provider change (e.g. twice if network and gps provider were disabled when the entire location service is disabled) Task-number: QTBUG-66427 Change-Id: I820b3187bfd8b8ab4facb053e2019e4f5c9736d0 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r--src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java5
-rw-r--r--src/plugins/position/android/src/jnipositioning.cpp15
-rw-r--r--src/plugins/position/android/src/qgeopositioninfosource_android.cpp5
-rw-r--r--src/plugins/position/android/src/qgeopositioninfosource_android_p.h1
4 files changed, 23 insertions, 3 deletions
diff --git a/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java b/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java
index 1a53512d..d819e627 100644
--- a/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java
+++ b/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java
@@ -521,10 +521,9 @@ public class QtPositioning implements LocationListener
}
}
-
-
public static native void positionUpdated(Location update, int androidClassKey, boolean isSingleUpdate);
public static native void locationProvidersDisabled(int androidClassKey);
+ public static native void locationProvidersChanged(int androidClassKey);
public static native void satelliteUpdated(GpsSatellite[] update, int androidClassKey, boolean isSingleUpdate);
@Override
@@ -578,11 +577,13 @@ public class QtPositioning implements LocationListener
@Override
public void onProviderEnabled(String provider) {
Log.d(TAG, "Enabled provider: " + provider);
+ locationProvidersChanged(nativeClassReference);
}
@Override
public void onProviderDisabled(String provider) {
Log.d(TAG, "Disabled provider: " + provider);
+ locationProvidersChanged(nativeClassReference);
if (!expectedProvidersAvailable(expectedProviders))
locationProvidersDisabled(nativeClassReference);
}
diff --git a/src/plugins/position/android/src/jnipositioning.cpp b/src/plugins/position/android/src/jnipositioning.cpp
index 7d138ce4..0f358b42 100644
--- a/src/plugins/position/android/src/jnipositioning.cpp
+++ b/src/plugins/position/android/src/jnipositioning.cpp
@@ -528,6 +528,18 @@ static void locationProvidersDisabled(JNIEnv *env, jobject /*thiz*/, jint androi
QMetaObject::invokeMethod(source, "locationProviderDisabled", Qt::AutoConnection);
}
+static void locationProvidersChanged(JNIEnv *env, jobject /*thiz*/, jint androidClassKey)
+{
+ Q_UNUSED(env);
+ QObject *source = AndroidPositioning::idToPosSource()->value(androidClassKey);
+ if (!source) {
+ qWarning("locationProvidersChanged: source == 0");
+ return;
+ }
+
+ QMetaObject::invokeMethod(source, "locationProvidersChanged", Qt::AutoConnection);
+}
+
static void satelliteUpdated(JNIEnv *env, jobject /*thiz*/, jobjectArray satellites, jint androidClassKey, jboolean isSingleUpdate)
{
QList<QGeoSatelliteInfo> inUse;
@@ -564,7 +576,8 @@ if (!VAR) { \
static JNINativeMethod methods[] = {
{"positionUpdated", "(Landroid/location/Location;IZ)V", (void *)positionUpdated},
{"locationProvidersDisabled", "(I)V", (void *) locationProvidersDisabled},
- {"satelliteUpdated", "([Landroid/location/GpsSatellite;IZ)V", (void *)satelliteUpdated}
+ {"satelliteUpdated", "([Landroid/location/GpsSatellite;IZ)V", (void *)satelliteUpdated},
+ {"locationProvidersChanged", "(I)V", (void *) locationProvidersChanged}
};
static bool registerNatives(JNIEnv *env)
diff --git a/src/plugins/position/android/src/qgeopositioninfosource_android.cpp b/src/plugins/position/android/src/qgeopositioninfosource_android.cpp
index 59b8beab..38778ec4 100644
--- a/src/plugins/position/android/src/qgeopositioninfosource_android.cpp
+++ b/src/plugins/position/android/src/qgeopositioninfosource_android.cpp
@@ -206,6 +206,11 @@ void QGeoPositionInfoSourceAndroid::locationProviderDisabled()
setError(QGeoPositionInfoSource::ClosedError);
}
+void QGeoPositionInfoSourceAndroid::locationProvidersChanged()
+{
+ emit supportedPositioningMethodsChanged();
+}
+
void QGeoPositionInfoSourceAndroid::requestTimeout()
{
AndroidPositioning::stopUpdates(androidClassKeyForSingleRequest);
diff --git a/src/plugins/position/android/src/qgeopositioninfosource_android_p.h b/src/plugins/position/android/src/qgeopositioninfosource_android_p.h
index dbb27f83..61e107b1 100644
--- a/src/plugins/position/android/src/qgeopositioninfosource_android_p.h
+++ b/src/plugins/position/android/src/qgeopositioninfosource_android_p.h
@@ -79,6 +79,7 @@ public Q_SLOTS:
void processSinglePositionUpdate(const QGeoPositionInfo& pInfo);
void locationProviderDisabled();
+ void locationProvidersChanged();
private Q_SLOTS:
void requestTimeout();