From ee700d2eeb4508aa5356ddef11bf11964c5d9283 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 19 Oct 2018 09:24:36 +0200 Subject: Mapbox: Only include matching categories in the results If an entry in the results had no categories specified at all then it would end up including this in the results even if a specific category was requested to match against. Change-Id: I506b40b73ec07608bd2b2562d92065376fbb67c9 Reviewed-by: Paolo Angelelli --- src/plugins/geoservices/mapbox/qplacesearchreplymapbox.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/geoservices/mapbox/qplacesearchreplymapbox.cpp b/src/plugins/geoservices/mapbox/qplacesearchreplymapbox.cpp index a79af1cb..b2f2f043 100644 --- a/src/plugins/geoservices/mapbox/qplacesearchreplymapbox.cpp +++ b/src/plugins/geoservices/mapbox/qplacesearchreplymapbox.cpp @@ -188,19 +188,18 @@ void QPlaceSearchReplyMapbox::onReplyFinished() if (!categories.isEmpty()) { const QList placeCategories = placeResult.place().categories(); + bool categoryMatch = false; if (!placeCategories.isEmpty()) { - bool categoryMatch = false; for (const QPlaceCategory &placeCategory : placeCategories) { if (categories.contains(placeCategory)) { categoryMatch = true; break; } } - if (!categoryMatch) - continue; } + if (!categoryMatch) + continue; } - placeResult.setDistance(searchCenter.distanceTo(placeResult.place().location().coordinate())); results.append(placeResult); } -- cgit v1.2.1 From 27f08fe55608d14368d6cdeb915b7609a1b8b9f2 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 22 Nov 2018 10:34:55 +0100 Subject: winrt: Minor code cleanup - Use nullptr instead of 0 - Use recommended way of including Qt headers Change-Id: I170dbb5aa41a2dd4d10ff99c421da8a037cbe153 Reviewed-by: Alex Blasche --- src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | 9 +++++---- src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h | 4 ++-- .../position/winrt/qgeopositioninfosourcefactory_winrt.cpp | 6 +++--- src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 046d862e..b1c1410f 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -36,11 +36,12 @@ #include "qgeopositioninfosource_winrt_p.h" -#include -#include -#include +#include +#include +#include +#include #ifdef Q_OS_WINRT -#include +#include #endif #include diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h b/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h index 9f3a1c7f..5d291fce 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h @@ -51,7 +51,7 @@ #include "qgeopositioninfosource.h" #include "qgeopositioninfo.h" -#include +#include #include #include @@ -76,7 +76,7 @@ class QGeoPositionInfoSourceWinRT : public QGeoPositionInfoSource { Q_OBJECT public: - QGeoPositionInfoSourceWinRT(QObject *parent = 0); + QGeoPositionInfoSourceWinRT(QObject *parent = nullptr); ~QGeoPositionInfoSourceWinRT(); int init(); diff --git a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp index e58744a0..adb63f04 100644 --- a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp @@ -42,7 +42,7 @@ QGeoPositionInfoSource *QGeoPositionInfoSourceFactoryWinRT::positionInfoSource(Q QGeoPositionInfoSourceWinRT *src = new QGeoPositionInfoSourceWinRT(parent); if (src->init() < 0) { delete src; - src = 0; + src = nullptr; } return src; } @@ -50,11 +50,11 @@ QGeoPositionInfoSource *QGeoPositionInfoSourceFactoryWinRT::positionInfoSource(Q QGeoSatelliteInfoSource *QGeoPositionInfoSourceFactoryWinRT::satelliteInfoSource(QObject *parent) { Q_UNUSED(parent); - return 0; + return nullptr; } QGeoAreaMonitorSource *QGeoPositionInfoSourceFactoryWinRT::areaMonitor(QObject *parent) { Q_UNUSED(parent); - return 0; + return nullptr; } diff --git a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h index 46cd3853..d09ddb64 100644 --- a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h +++ b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h @@ -37,8 +37,8 @@ #ifndef QGEOPOSITIONINFOSOURCEFACTORY_WINRT_H #define QGEOPOSITIONINFOSOURCEFACTORY_WINRT_H -#include -#include +#include +#include QT_BEGIN_NAMESPACE -- cgit v1.2.1 From 536668aef188df181cc6986355db195579f44206 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 22 Nov 2018 10:46:52 +0100 Subject: winrt: Fix setting of verticalAccuracy Change-Id: I74ce6e9433eb7ad0f065ea5c554a8c11dd690604 Reviewed-by: Alex Blasche --- src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index b1c1410f..2ce06a8b 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -478,7 +478,7 @@ HRESULT QGeoPositionInfoSourceWinRT::onPositionChanged(IGeolocator *locator, IPo hr = coord->get_AltitudeAccuracy(&altAccuracy); if (SUCCEEDED(hr) && altAccuracy) { double value; - hr = alt->get_Value(&value); + hr = altAccuracy->get_Value(&value); currentInfo.setAttribute(QGeoPositionInfo::VerticalAccuracy, value); } -- cgit v1.2.1 From c83f4565687e4ab3de87248362305d833ca8eea1 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 22 Nov 2018 10:37:27 +0100 Subject: winrt: Replace deprecated functions get_Altitude and the like are marked deprecated and thus should not be used. Use proper replacement functions as advised in Microsoft's documentation. Change-Id: I2166611a3133cadf9fb110242f231d76ca517932 Reviewed-by: Joerg Bornemann --- .../winrt/qgeopositioninfosource_winrt.cpp | 51 +++++++++++++--------- 1 file changed, 31 insertions(+), 20 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 2ce06a8b..21e0fddd 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -436,38 +436,49 @@ HRESULT QGeoPositionInfoSourceWinRT::onPositionChanged(IGeolocator *locator, IPo Q_UNUSED(locator); HRESULT hr; - ComPtr pos; - hr = args->get_Position(&pos); + ComPtr position; + hr = args->get_Position(&position); RETURN_HR_IF_FAILED("Could not access position object."); QGeoPositionInfo currentInfo; ComPtr coord; - hr = pos->get_Coordinate(&coord); + hr = position->get_Coordinate(&coord); if (FAILED(hr)) qErrnoWarning(hr, "Could not access coordinate"); - DOUBLE lat; - hr = coord->get_Latitude(&lat); + ComPtr pointCoordinate; + hr = coord.As(&pointCoordinate); if (FAILED(hr)) - qErrnoWarning(hr, "Could not access latitude"); + qErrnoWarning(hr, "Could not cast coordinate."); - DOUBLE lon; - hr = coord->get_Longitude(&lon); + ComPtr point; + hr = pointCoordinate->get_Point(&point); if (FAILED(hr)) - qErrnoWarning(hr, "Could not access longitude"); - - // Depending on data source altitude can - // be identified or not - IReference *alt; - hr = coord->get_Altitude(&alt); - if (SUCCEEDED(hr) && alt) { - double altd; - hr = alt->get_Value(&altd); - currentInfo.setCoordinate(QGeoCoordinate(lat, lon, altd)); - } else { - currentInfo.setCoordinate(QGeoCoordinate(lat, lon)); + qErrnoWarning(hr, "Could not obtain coordinate's point."); + + BasicGeoposition pos; + hr = point->get_Position(&pos); + if (FAILED(hr)) + qErrnoWarning(hr, "Could not obtain point's position."); + + DOUBLE lat = pos.Latitude; + DOUBLE lon = pos.Longitude; + DOUBLE alt = pos.Altitude; + + bool altitudeAvailable = false; + ComPtr shape; + hr = point.As(&shape); + if (SUCCEEDED(hr) && shape) { + AltitudeReferenceSystem altitudeSystem; + hr = shape->get_AltitudeReferenceSystem(&altitudeSystem); + if (SUCCEEDED(hr) && altitudeSystem == AltitudeReferenceSystem_Geoid) + altitudeAvailable = true; } + if (altitudeAvailable) + currentInfo.setCoordinate(QGeoCoordinate(lat, lon, alt)); + else + currentInfo.setCoordinate(QGeoCoordinate(lat, lon)); DOUBLE accuracy; hr = coord->get_Accuracy(&accuracy); -- cgit v1.2.1 From 10e200d710254a30dc5e2d4eb2104f3f2b7f7f0c Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 22 Nov 2018 14:30:23 +0100 Subject: winrt: Make sure that Co(Un)Initialize is called If the QGeoPositionInfoSource is created in a command line app we cannot rely on CoInitialize having been called by the event dispatcher before. Fixes: QTBUG-71194 Change-Id: Id2a8fd22f7b4cf6e5c2629bf7dcd8319b585666e Reviewed-by: Alex Blasche Reviewed-by: Andy Shaw --- src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 21e0fddd..c41f63bc 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -91,6 +91,7 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent) : QGeoPositionInfoSource(parent) , d_ptr(new QGeoPositionInfoSourceWinRTPrivate) { + CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); Q_D(QGeoPositionInfoSourceWinRT); d->positionError = QGeoPositionInfoSource::NoError; d->updatesOngoing = false; @@ -98,6 +99,7 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent) QGeoPositionInfoSourceWinRT::~QGeoPositionInfoSourceWinRT() { + CoUninitialize(); } int QGeoPositionInfoSourceWinRT::init() -- cgit v1.2.1 From 98e28cfc3482cb5a8c8e7f6f288b0d29906ada05 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 22 Nov 2018 15:05:09 +0100 Subject: winrt: Fix namespaced builds Change-Id: Ic9df2c2870184eacc2d1400fc51354ee1da0c288 Reviewed-by: Alex Blasche --- src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp index adb63f04..79b6236b 100644 --- a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp @@ -37,6 +37,8 @@ #include "qgeopositioninfosourcefactory_winrt.h" #include "qgeopositioninfosource_winrt_p.h" +QT_BEGIN_NAMESPACE + QGeoPositionInfoSource *QGeoPositionInfoSourceFactoryWinRT::positionInfoSource(QObject *parent) { QGeoPositionInfoSourceWinRT *src = new QGeoPositionInfoSourceWinRT(parent); @@ -58,3 +60,5 @@ QGeoAreaMonitorSource *QGeoPositionInfoSourceFactoryWinRT::areaMonitor(QObject * Q_UNUSED(parent); return nullptr; } + +QT_END_NAMESPACE -- cgit v1.2.1 From 3cf061dc8da4d564de06efa6800749f3eacf47eb Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 23 Nov 2018 09:46:04 +0100 Subject: winrt: Add categorized logging Change-Id: I641690a87dab2527493c3c16ffb476e4121d9ecb Reviewed-by: Alex Blasche --- .../winrt/qgeopositioninfosource_winrt.cpp | 22 ++++++++++++++++++++++ .../winrt/qgeopositioninfosourcefactory_winrt.cpp | 11 ++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index c41f63bc..d995fd79 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -61,6 +61,8 @@ typedef ITypedEventHandler GeoLocatorSta typedef IAsyncOperationCompletedHandler PositionHandler; typedef IAsyncOperationCompletedHandler AccessHandler; +Q_DECLARE_LOGGING_CATEGORY(lcPositioningWinRT) + QT_BEGIN_NAMESPACE #ifndef Q_OS_WINRT @@ -91,6 +93,7 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent) : QGeoPositionInfoSource(parent) , d_ptr(new QGeoPositionInfoSourceWinRTPrivate) { + qCDebug(lcPositioningWinRT) << __FUNCTION__; CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); Q_D(QGeoPositionInfoSourceWinRT); d->positionError = QGeoPositionInfoSource::NoError; @@ -99,11 +102,13 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent) QGeoPositionInfoSourceWinRT::~QGeoPositionInfoSourceWinRT() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; CoUninitialize(); } int QGeoPositionInfoSourceWinRT::init() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); if (!requestAccess()) { qWarning ("Location access failed."); @@ -154,6 +159,7 @@ int QGeoPositionInfoSourceWinRT::init() QGeoPositionInfo QGeoPositionInfoSourceWinRT::lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(const QGeoPositionInfoSourceWinRT); Q_UNUSED(fromSatellitePositioningMethodsOnly) return d->lastPosition; @@ -170,6 +176,7 @@ QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSourceWinRT::supporte }); if (FAILED(hr)) return QGeoPositionInfoSource::NoPositioningMethods; + qCDebug(lcPositioningWinRT) << __FUNCTION__ << status; switch (status) { case PositionStatus::PositionStatus_NoData: @@ -183,6 +190,7 @@ QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSourceWinRT::supporte void QGeoPositionInfoSourceWinRT::setPreferredPositioningMethods(QGeoPositionInfoSource::PositioningMethods methods) { + qCDebug(lcPositioningWinRT) << __FUNCTION__ << methods; Q_D(QGeoPositionInfoSourceWinRT); PositioningMethods previousPreferredPositioningMethods = preferredPositioningMethods(); @@ -210,6 +218,7 @@ void QGeoPositionInfoSourceWinRT::setPreferredPositioningMethods(QGeoPositionInf void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) { + qCDebug(lcPositioningWinRT) << __FUNCTION__ << msec; Q_D(QGeoPositionInfoSourceWinRT); // Windows Phone 8.1 and Windows 10 do not support 0 interval #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) @@ -243,6 +252,7 @@ int QGeoPositionInfoSourceWinRT::minimumUpdateInterval() const void QGeoPositionInfoSourceWinRT::startUpdates() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); if (d->updatesOngoing) @@ -256,6 +266,7 @@ void QGeoPositionInfoSourceWinRT::startUpdates() void QGeoPositionInfoSourceWinRT::stopUpdates() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); stopHandler(); @@ -265,6 +276,7 @@ void QGeoPositionInfoSourceWinRT::stopUpdates() bool QGeoPositionInfoSourceWinRT::startHandler() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); // Check if already attached @@ -304,6 +316,7 @@ bool QGeoPositionInfoSourceWinRT::startHandler() void QGeoPositionInfoSourceWinRT::stopHandler() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); if (!d->positionToken.value) @@ -317,6 +330,7 @@ void QGeoPositionInfoSourceWinRT::stopHandler() void QGeoPositionInfoSourceWinRT::requestUpdate(int timeout) { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); if (timeout != 0 && timeout < minimumUpdateInterval()) { @@ -333,6 +347,7 @@ void QGeoPositionInfoSourceWinRT::requestUpdate(int timeout) void QGeoPositionInfoSourceWinRT::virtualPositionUpdate() { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_D(QGeoPositionInfoSourceWinRT); QMutexLocker locker(&d->mutex); @@ -370,6 +385,7 @@ void QGeoPositionInfoSourceWinRT::singleUpdateTimeOut() void QGeoPositionInfoSourceWinRT::updateSynchronized(QGeoPositionInfo currentInfo) { + qCDebug(lcPositioningWinRT) << __FUNCTION__ << currentInfo; Q_D(QGeoPositionInfoSourceWinRT); QMutexLocker locker(&d->mutex); @@ -391,11 +407,13 @@ void QGeoPositionInfoSourceWinRT::updateSynchronized(QGeoPositionInfo currentInf QGeoPositionInfoSource::Error QGeoPositionInfoSourceWinRT::error() const { Q_D(const QGeoPositionInfoSourceWinRT); + qCDebug(lcPositioningWinRT) << __FUNCTION__ << d->positionError; return d->positionError; } void QGeoPositionInfoSourceWinRT::setError(QGeoPositionInfoSource::Error positionError) { + qCDebug(lcPositioningWinRT) << __FUNCTION__ << positionError; Q_D(QGeoPositionInfoSourceWinRT); if (positionError == d->positionError) @@ -407,6 +425,7 @@ void QGeoPositionInfoSourceWinRT::setError(QGeoPositionInfoSource::Error positio bool QGeoPositionInfoSourceWinRT::checkNativeState() { Q_D(QGeoPositionInfoSourceWinRT); + qCDebug(lcPositioningWinRT) << __FUNCTION__; PositionStatus status; HRESULT hr = d->locator->get_LocationStatus(&status); @@ -435,6 +454,7 @@ bool QGeoPositionInfoSourceWinRT::checkNativeState() HRESULT QGeoPositionInfoSourceWinRT::onPositionChanged(IGeolocator *locator, IPositionChangedEventArgs *args) { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_UNUSED(locator); HRESULT hr; @@ -543,12 +563,14 @@ HRESULT QGeoPositionInfoSourceWinRT::onStatusChanged(IGeolocator*, IStatusChange { PositionStatus st; args->get_Status(&st); + qCDebug(lcPositioningWinRT) << __FUNCTION__ << st; return S_OK; } bool QGeoPositionInfoSourceWinRT::requestAccess() const { #ifdef Q_OS_WINRT + qCDebug(lcPositioningWinRT) << __FUNCTION__; static GeolocationAccessStatus accessStatus = GeolocationAccessStatus_Unspecified; static ComPtr statics; diff --git a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp index 79b6236b..b1ec6fb3 100644 --- a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp @@ -37,26 +37,35 @@ #include "qgeopositioninfosourcefactory_winrt.h" #include "qgeopositioninfosource_winrt_p.h" +#include + +Q_LOGGING_CATEGORY(lcPositioningWinRT, "qt.positioning.winrt") + QT_BEGIN_NAMESPACE QGeoPositionInfoSource *QGeoPositionInfoSourceFactoryWinRT::positionInfoSource(QObject *parent) { + qCDebug(lcPositioningWinRT) << __FUNCTION__; QGeoPositionInfoSourceWinRT *src = new QGeoPositionInfoSourceWinRT(parent); if (src->init() < 0) { + qCDebug(lcPositioningWinRT) << __FUNCTION__ << "Source initialization failed."; delete src; - src = nullptr; + return nullptr; } + qCDebug(lcPositioningWinRT) << __FUNCTION__ << "Created position info source."; return src; } QGeoSatelliteInfoSource *QGeoPositionInfoSourceFactoryWinRT::satelliteInfoSource(QObject *parent) { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_UNUSED(parent); return nullptr; } QGeoAreaMonitorSource *QGeoPositionInfoSourceFactoryWinRT::areaMonitor(QObject *parent) { + qCDebug(lcPositioningWinRT) << __FUNCTION__; Q_UNUSED(parent); return nullptr; } -- cgit v1.2.1 From 3c8b439d84a0ef646d49126f2cfdc59f1eccb883 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 23 Nov 2018 09:47:24 +0100 Subject: winrt: Add nativeStatus helper functions Gets rid of duplicated code. Change-Id: I4635b23c5ae431867299eeeafd4bd260f8ba156f Reviewed-by: Alex Blasche --- .../winrt/qgeopositioninfosource_winrt.cpp | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index d995fd79..8a72eb39 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -86,8 +86,24 @@ public: EventRegistrationToken positionToken; QMutex mutex; bool updatesOngoing; + + PositionStatus nativeStatus() const; }; +PositionStatus QGeoPositionInfoSourceWinRTPrivate::nativeStatus() const +{ + qCDebug(lcPositioningWinRT) << __FUNCTION__; + + PositionStatus status; + HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([this, &status]() { + return locator->get_LocationStatus(&status); + }); + if (FAILED(hr)) { + qErrnoWarning(hr, "Could not query status"); + return PositionStatus_NotAvailable; + } + return status; +} QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent) : QGeoPositionInfoSource(parent) @@ -169,13 +185,7 @@ QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSourceWinRT::supporte { Q_D(const QGeoPositionInfoSourceWinRT); - PositionStatus status; - HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d, &status]() { - HRESULT hr = d->locator->get_LocationStatus(&status); - return hr; - }); - if (FAILED(hr)) - return QGeoPositionInfoSource::NoPositioningMethods; + PositionStatus status = d->nativeStatus(); qCDebug(lcPositioningWinRT) << __FUNCTION__ << status; switch (status) { @@ -427,13 +437,7 @@ bool QGeoPositionInfoSourceWinRT::checkNativeState() Q_D(QGeoPositionInfoSourceWinRT); qCDebug(lcPositioningWinRT) << __FUNCTION__; - PositionStatus status; - HRESULT hr = d->locator->get_LocationStatus(&status); - if (FAILED(hr)) { - setError(QGeoPositionInfoSource::UnknownSourceError); - qErrnoWarning(hr, "Could not query status"); - return false; - } + PositionStatus status = d->nativeStatus(); bool result = false; switch (status) { -- cgit v1.2.1 From d16a2c0849ad7280893f3fe5259fd6fbd974ce72 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 23 Nov 2018 09:48:11 +0100 Subject: winrt: Small code cleanup Windows 8.1 is no longer supported Change-Id: I00d103057a63abbcbc3ad3baa8ef93b35e07e819 Reviewed-by: Alex Blasche --- src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 8a72eb39..1a2554b0 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -208,7 +208,7 @@ void QGeoPositionInfoSourceWinRT::setPreferredPositioningMethods(QGeoPositionInf if (previousPreferredPositioningMethods == preferredPositioningMethods()) return; - bool needsRestart = d->positionToken.value != 0; + const bool needsRestart = d->positionToken.value != 0; if (needsRestart) stopHandler(); @@ -230,11 +230,8 @@ void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) { qCDebug(lcPositioningWinRT) << __FUNCTION__ << msec; Q_D(QGeoPositionInfoSourceWinRT); - // Windows Phone 8.1 and Windows 10 do not support 0 interval -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) if (msec == 0) msec = minimumUpdateInterval(); -#endif // If msec is 0 we send updates as data becomes available, otherwise we force msec to be equal // to or larger than the minimum update interval. -- cgit v1.2.1 From 4f6e1d3d5542749e265c0d3ed0953ca66174ce49 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 23 Nov 2018 09:49:07 +0100 Subject: winrt: Check availability in requestAccess on desktop builds For some reason the native status is always Disabled for desktop builds (even though the location service is running). So with desktop builds we have to use requestAccess to gain information about the state of the location service. As the functionality is async the important parts of QWinRTFunctions are shadowed locally. Change-Id: I575ee0b161de734c29453a7a07350bc8d09720e8 Reviewed-by: Andre de la Rocha Reviewed-by: Miguel Costa Reviewed-by: Alex Blasche --- .../winrt/qgeopositioninfosource_winrt.cpp | 44 +++++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 1a2554b0..025a2c9c 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -73,7 +73,36 @@ HRESULT runOnXamlThread(const std::function &delegate, bool waitForR return delegate(); } } -#endif + +static inline HRESULT await(const ComPtr> &asyncOp, + GeolocationAccessStatus *result) +{ + ComPtr asyncInfo; + HRESULT hr = asyncOp.As(&asyncInfo); + if (FAILED(hr)) + return hr; + + AsyncStatus status; + while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == AsyncStatus::Started) + QThread::yieldCurrentThread(); + + if (FAILED(hr) || status != AsyncStatus::Completed) { + HRESULT ec; + hr = asyncInfo->get_ErrorCode(&ec); + if (FAILED(hr)) + return hr; + hr = asyncInfo->Close(); + if (FAILED(hr)) + return hr; + return ec; + } + + if (FAILED(hr)) + return hr; + + return asyncOp->GetResults(result); +} +#endif // !Q_OS_WINRT class QGeoPositionInfoSourceWinRTPrivate { public: @@ -92,6 +121,7 @@ public: PositionStatus QGeoPositionInfoSourceWinRTPrivate::nativeStatus() const { +#ifdef Q_OS_WINRT qCDebug(lcPositioningWinRT) << __FUNCTION__; PositionStatus status; @@ -103,8 +133,12 @@ PositionStatus QGeoPositionInfoSourceWinRTPrivate::nativeStatus() const return PositionStatus_NotAvailable; } return status; +#else + return PositionStatus_Ready; +#endif } + QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent) : QGeoPositionInfoSource(parent) , d_ptr(new QGeoPositionInfoSourceWinRTPrivate) @@ -570,7 +604,6 @@ HRESULT QGeoPositionInfoSourceWinRT::onStatusChanged(IGeolocator*, IStatusChange bool QGeoPositionInfoSourceWinRT::requestAccess() const { -#ifdef Q_OS_WINRT qCDebug(lcPositioningWinRT) << __FUNCTION__; static GeolocationAccessStatus accessStatus = GeolocationAccessStatus_Unspecified; static ComPtr statics; @@ -594,11 +627,12 @@ bool QGeoPositionInfoSourceWinRT::requestAccess() const Q_ASSERT_SUCCEEDED(hr); // We cannot wait inside the XamlThread as that would deadlock +#ifdef Q_OS_WINRT QWinRTFunctions::await(op, &accessStatus); +#else + await(op, &accessStatus); +#endif return accessStatus == GeolocationAccessStatus_Allowed; -#else // Q_OS_WINRT - return true; -#endif // Q_OS_WINRT } QT_END_NAMESPACE -- cgit v1.2.1 From 0b242a11b1193b74a2ab979c29e28553e47cc78e Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 26 Nov 2018 13:12:00 +0100 Subject: winrt: Remove unneeded status change callback We do not use the native callback's result but Windows' backend will complain if we try to set some of GeoLocator's properties while we are registered for status changes. By removing the callback registration we get rid of these warnings. Change-Id: Ic3829ee438c708fb4411ba94ba1202bb427e8815 Reviewed-by: Andre de la Rocha Reviewed-by: Miguel Costa --- .../position/winrt/qgeopositioninfosource_winrt.cpp | 14 -------------- .../position/winrt/qgeopositioninfosource_winrt_p.h | 4 ---- 2 files changed, 18 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 025a2c9c..9616b1d8 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -57,7 +57,6 @@ using namespace ABI::Windows::Foundation; using namespace ABI::Windows::Foundation::Collections; typedef ITypedEventHandler GeoLocatorPositionHandler; -typedef ITypedEventHandler GeoLocatorStatusHandler; typedef IAsyncOperationCompletedHandler PositionHandler; typedef IAsyncOperationCompletedHandler AccessHandler; @@ -169,11 +168,6 @@ int QGeoPositionInfoSourceWinRT::init() &d->locator); RETURN_HR_IF_FAILED("Could not initialize native location services."); - hr = d->locator->add_StatusChanged(Callback(this, - &QGeoPositionInfoSourceWinRT::onStatusChanged).Get(), - &d->statusToken); - RETURN_HR_IF_FAILED("Could not add status callback."); - hr = d->locator->put_ReportInterval(1000); RETURN_HR_IF_FAILED("Could not initialize report interval."); @@ -594,14 +588,6 @@ HRESULT QGeoPositionInfoSourceWinRT::onPositionChanged(IGeolocator *locator, IPo return S_OK; } -HRESULT QGeoPositionInfoSourceWinRT::onStatusChanged(IGeolocator*, IStatusChangedEventArgs *args) -{ - PositionStatus st; - args->get_Status(&st); - qCDebug(lcPositioningWinRT) << __FUNCTION__ << st; - return S_OK; -} - bool QGeoPositionInfoSourceWinRT::requestAccess() const { qCDebug(lcPositioningWinRT) << __FUNCTION__; diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h b/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h index 5d291fce..4319ccae 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h @@ -62,7 +62,6 @@ namespace ABI { namespace Geolocation{ struct IGeolocator; struct IPositionChangedEventArgs; - struct IStatusChangedEventArgs; } } } @@ -92,9 +91,6 @@ public: HRESULT onPositionChanged(ABI::Windows::Devices::Geolocation::IGeolocator *locator, ABI::Windows::Devices::Geolocation::IPositionChangedEventArgs *args); - HRESULT onStatusChanged(ABI::Windows::Devices::Geolocation::IGeolocator*, - ABI::Windows::Devices::Geolocation::IStatusChangedEventArgs *args); - bool requestAccess() const; Q_SIGNALS: void nativePositionUpdate(const QGeoPositionInfo); -- cgit v1.2.1 From 25493cbb07f8cbc6c6d12cfc575a71875be06692 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 26 Nov 2018 13:14:29 +0100 Subject: winrt: Restart location handler on setUpdateInterval if necessary Windows' backend will complain if we try to set the report interval while being subscribed to position changes so we have to remove this registration and redo it when the new interval is in effect. Change-Id: I5b3f23a7b6e530dd0a3f673e2b8ce6f5102b7eb1 Reviewed-by: Andre de la Rocha Reviewed-by: Miguel Costa Reviewed-by: Alex Blasche --- src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index 9616b1d8..fa537af7 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -266,6 +266,11 @@ void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) if (msec != 0 && msec < minimumUpdateInterval()) msec = minimumUpdateInterval(); + const bool needsRestart = d->positionToken.value != 0; + + if (needsRestart) + stopHandler(); + HRESULT hr = d->locator->put_ReportInterval(msec); if (FAILED(hr)) { setError(QGeoPositionInfoSource::UnknownSourceError); @@ -276,6 +281,9 @@ void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) d->periodicTimer.setInterval(qMax(msec, minimumUpdateInterval())); QGeoPositionInfoSource::setUpdateInterval(msec); + + if (needsRestart) + startHandler(); } int QGeoPositionInfoSourceWinRT::minimumUpdateInterval() const -- cgit v1.2.1 From 9307404d2dcb0b53d0dfcad6c28677cc2aba4a12 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 26 Nov 2018 15:04:05 +0100 Subject: winrt: Implement minimumUpdateInterval MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to MSDN GeoLocator's default ReportInterval is 1 second or as frequent as the hardware can support – whichever is shorter. By using that functionality we can support minimumUpdateInterval "properly". Change-Id: Id54197babeec04c8fc0a309930b192e36d9138f8 Reviewed-by: Miguel Costa --- .../winrt/qgeopositioninfosource_winrt.cpp | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp index fa537af7..139a6b3d 100644 --- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp +++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp @@ -114,6 +114,7 @@ public: EventRegistrationToken positionToken; QMutex mutex; bool updatesOngoing; + int minimumUpdateInterval; PositionStatus nativeStatus() const; }; @@ -168,8 +169,11 @@ int QGeoPositionInfoSourceWinRT::init() &d->locator); RETURN_HR_IF_FAILED("Could not initialize native location services."); - hr = d->locator->put_ReportInterval(1000); - RETURN_HR_IF_FAILED("Could not initialize report interval."); + UINT32 interval; + hr = d->locator->get_ReportInterval(&interval); + RETURN_HR_IF_FAILED("Could not retrieve report interval."); + d->minimumUpdateInterval = static_cast(interval); + setUpdateInterval(d->minimumUpdateInterval); return hr; }); @@ -189,7 +193,6 @@ int QGeoPositionInfoSourceWinRT::init() d->positionToken.value = 0; d->periodicTimer.setSingleShot(true); - d->periodicTimer.setInterval(minimumUpdateInterval()); connect(&d->periodicTimer, &QTimer::timeout, this, &QGeoPositionInfoSourceWinRT::virtualPositionUpdate); d->singleUpdateTimer.setSingleShot(true); @@ -258,11 +261,9 @@ void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) { qCDebug(lcPositioningWinRT) << __FUNCTION__ << msec; Q_D(QGeoPositionInfoSourceWinRT); - if (msec == 0) - msec = minimumUpdateInterval(); - - // If msec is 0 we send updates as data becomes available, otherwise we force msec to be equal - // to or larger than the minimum update interval. + // minimumUpdateInterval is initialized to the lowest possible update interval in init(). + // Passing 0 will cause an error on Windows 10. + // See https://docs.microsoft.com/en-us/uwp/api/windows.devices.geolocation.geolocator.reportinterval if (msec != 0 && msec < minimumUpdateInterval()) msec = minimumUpdateInterval(); @@ -271,7 +272,7 @@ void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) if (needsRestart) stopHandler(); - HRESULT hr = d->locator->put_ReportInterval(msec); + HRESULT hr = d->locator->put_ReportInterval(static_cast(msec)); if (FAILED(hr)) { setError(QGeoPositionInfoSource::UnknownSourceError); qErrnoWarning(hr, "Failed to set update interval"); @@ -288,9 +289,8 @@ void QGeoPositionInfoSourceWinRT::setUpdateInterval(int msec) int QGeoPositionInfoSourceWinRT::minimumUpdateInterval() const { - // We use one second to reduce potential timer events - // in case the platform itself stops reporting - return 1000; + Q_D(const QGeoPositionInfoSourceWinRT); + return d->minimumUpdateInterval; } void QGeoPositionInfoSourceWinRT::startUpdates() -- cgit v1.2.1 From 7bafbdc91f83165710ed74639b76b48b4494937a Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Mon, 3 Dec 2018 14:31:26 +0200 Subject: Fix compilation with gcc 4.8 GCC 4.8 doesn't like using QPointer in signal connections. Change-Id: I9504efb259712a65427ef1366ca562882085404e Reviewed-by: Simon Hausmann --- src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp index cd514d30..10484e3b 100644 --- a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp +++ b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp @@ -264,7 +264,7 @@ void QGeoPositionInfoSourceGeoclue2::createClient() setError(AccessError); delete m_client; } else { - connect(m_client, &OrgFreedesktopGeoClue2ClientInterface::LocationUpdated, + connect(m_client.data(), &OrgFreedesktopGeoClue2ClientInterface::LocationUpdated, this, &QGeoPositionInfoSourceGeoclue2::handleNewLocation); if (configureClient()) -- cgit v1.2.1 From cfb917948799cb177b3de7eced77f37d13b4e520 Mon Sep 17 00:00:00 2001 From: Samuel Gaist Date: Sun, 2 Dec 2018 14:30:39 +0100 Subject: Port Nokia geo service plugin to QRegularExpression This patch updates the Nokia geo service plugin code to use QRegularExpression in place of QRegExp which is to be considered deprecated. Change-Id: Idc7459351c6f1a1b12ba1528c426fced324039a1 Reviewed-by: Alex Blasche --- src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp b/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp index ab575463..5094b72e 100644 --- a/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp +++ b/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -690,13 +691,14 @@ QPlaceIcon QPlaceManagerEngineNokiaV2::icon(const QString &remotePath, QPlaceIcon icon; QVariantMap params; - QRegExp rx("(.*)(/icons/categories/.*)"); + QRegularExpression rx("(.*)(/icons/categories/.*)"); + QRegularExpressionMatch match = rx.match(remotePath); QString iconPrefix; QString nokiaIcon; - if (rx.indexIn(remotePath) != -1 && !rx.cap(1).isEmpty() && !rx.cap(2).isEmpty()) { - iconPrefix = rx.cap(1); - nokiaIcon = rx.cap(2); + if (match.hasMatch() && !match.capturedRef(1).isEmpty() && !match.capturedRef(2).isEmpty()) { + iconPrefix = match.captured(1); + nokiaIcon = match.captured(2); if (QFile::exists(m_localDataPath + nokiaIcon)) iconPrefix = QString::fromLatin1("file://") + m_localDataPath; -- cgit v1.2.1 From 74c390e10f6d2f72fc81eca291b84762ccfb344e Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Wed, 5 Dec 2018 13:28:06 +0100 Subject: Fix warning in Android position plugin qtlocation/src/plugins/position/android/src/qgeopositioninfosource_android.cpp:226: warning: implicit conversion loses integer precision: 'qint64' (aka 'long long') to 'const int' Change-Id: I64df529028aac88f1b6e05c72cfba0a9ed6c9a7f Reviewed-by: Paolo Angelelli --- src/plugins/position/android/src/qgeopositioninfosource_android.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/position/android/src/qgeopositioninfosource_android.cpp b/src/plugins/position/android/src/qgeopositioninfosource_android.cpp index 7b4706d8..76b7a388 100644 --- a/src/plugins/position/android/src/qgeopositioninfosource_android.cpp +++ b/src/plugins/position/android/src/qgeopositioninfosource_android.cpp @@ -223,7 +223,7 @@ void QGeoPositionInfoSourceAndroid::requestTimeout() const QGeoPositionInfo info = queuedSingleUpdates[i]; //anything newer by 20s is always better - const int timeDelta = best.timestamp().secsTo(info.timestamp()); + const qint64 timeDelta = best.timestamp().secsTo(info.timestamp()); if (abs(timeDelta) > 20) { if (timeDelta > 0) best = info; -- cgit v1.2.1 From 3d38d96c44d376a10cbe140f7b7c6866bd203471 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Wed, 5 Dec 2018 15:02:53 +0100 Subject: Fix horizontal accuracy comparison for competing position results Fixes: QTBUG-72291 Change-Id: Id2c2ce04e12f1470b08e93ec3512ab39b4054f7d Reviewed-by: Paolo Angelelli --- src/plugins/position/android/src/qgeopositioninfosource_android.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/position/android/src/qgeopositioninfosource_android.cpp b/src/plugins/position/android/src/qgeopositioninfosource_android.cpp index 76b7a388..59b8beab 100644 --- a/src/plugins/position/android/src/qgeopositioninfosource_android.cpp +++ b/src/plugins/position/android/src/qgeopositioninfosource_android.cpp @@ -232,7 +232,7 @@ void QGeoPositionInfoSourceAndroid::requestTimeout() //compare accuracy if (info.hasAttribute(QGeoPositionInfo::HorizontalAccuracy) && - info.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) + best.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) { best = info.attribute(QGeoPositionInfo::HorizontalAccuracy) < best.attribute(QGeoPositionInfo::HorizontalAccuracy) ? info : best; -- cgit v1.2.1