diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-01-10 21:37:50 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-01-10 21:37:51 +0100 |
commit | d73f9d59e352b096af242ebe69c645def30f5672 (patch) | |
tree | 3619a2b57a6b9750e77ae257d7ef25ef87a3d5aa /src/plugins/position | |
parent | c134f72060607be6caa622200c8930211a6e7e91 (diff) | |
parent | 1688c44d223145abfdca19a7b31faecbafb0d315 (diff) | |
download | qtlocation-d73f9d59e352b096af242ebe69c645def30f5672.tar.gz |
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts:
.qmake.conf
Change-Id: I0724ca9ffbb8099f698b090a4fdd993fad2c2302
Diffstat (limited to 'src/plugins/position')
5 files changed, 27 insertions, 6 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 1ea0c071..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 @@ -114,7 +114,7 @@ public class QtPositioning implements LocationListener Log.w(TAG, "No locationManager available in QtPositioning"); return new int[0]; } - List<String> providers = locationManager.getAllProviders(); + List<String> providers = locationManager.getProviders(true); int retList[] = new int[providers.size()]; for (int i = 0; i < providers.size(); i++) { if (providers.get(i).equals(LocationManager.GPS_PROVIDER)) { @@ -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(); diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 139a6b3d..b55d2ba3 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -179,7 +179,6 @@ int QGeoPositionInfoSourceWinRT::init() }); if (FAILED(hr)) { setError(QGeoPositionInfoSource::UnknownSourceError); - qErrnoWarning(hr, "Could not register status changed callback"); return -1; } @@ -342,15 +341,17 @@ bool QGeoPositionInfoSourceWinRT::startHandler() // registered. That could have helped in the single update case ComPtr<IAsyncOperation<Geoposition*>> op; hr = d->locator->GetGeopositionAsync(&op); + RETURN_HR_IF_FAILED("Could not start position operation"); hr = d->locator->add_PositionChanged(Callback<GeoLocatorPositionHandler>(this, &QGeoPositionInfoSourceWinRT::onPositionChanged).Get(), &d->positionToken); + RETURN_HR_IF_FAILED("Could not add position handler"); + return hr; }); if (FAILED(hr)) { setError(QGeoPositionInfoSource::UnknownSourceError); - qErrnoWarning(hr, "Could not add position handler"); return false; } |