diff options
| -rw-r--r-- | src/location/qgeopositioninfosource.cpp | 15 | ||||
| -rw-r--r-- | src/location/qgeosatelliteinfosource.cpp | 15 | ||||
| -rw-r--r-- | tests/auto/positionplugintest/tst_positionplugin.cpp | 9 |
3 files changed, 32 insertions, 7 deletions
diff --git a/src/location/qgeopositioninfosource.cpp b/src/location/qgeopositioninfosource.cpp index 73f254b0..0434af8e 100644 --- a/src/location/qgeopositioninfosource.cpp +++ b/src/location/qgeopositioninfosource.cpp @@ -322,12 +322,21 @@ QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sour /*! - Returns a list of available source plugins. Note that this list does not - include the default platform backend, if one is available. + Returns a list of available source plugins. This includes any default backend + plugin for the current platform. */ QStringList QGeoPositionInfoSource::availableSources() { - return QGeoPositionInfoSourcePrivate::plugins().keys(); + QStringList plugins; + QHash<QString, QJsonObject> meta = QGeoPositionInfoSourcePrivate::plugins(); + foreach (const QString &name, meta.keys()) { + if (meta.value(name).value(QStringLiteral("Position")).isBool() + && meta.value(name).value(QStringLiteral("Position")).toBool()) { + plugins << name; + } + } + + return plugins; } /*! diff --git a/src/location/qgeosatelliteinfosource.cpp b/src/location/qgeosatelliteinfosource.cpp index 3c1d5d32..2dbb1068 100644 --- a/src/location/qgeosatelliteinfosource.cpp +++ b/src/location/qgeosatelliteinfosource.cpp @@ -202,12 +202,21 @@ QGeoSatelliteInfoSource *QGeoSatelliteInfoSource::createSource(const QString &so } /*! - Returns a list of available source plugins. Note that this does not - include the default system backend, if one is available. + Returns a list of available source plugins, including the default system + backend if one is available. */ QStringList QGeoSatelliteInfoSource::availableSources() { - return QGeoPositionInfoSourcePrivate::plugins().keys(); + QStringList plugins; + QHash<QString, QJsonObject> meta = QGeoPositionInfoSourcePrivate::plugins(); + foreach (const QString &name, meta.keys()) { + if (meta.value(name).value(QStringLiteral("Satellite")).isBool() + && meta.value(name).value(QStringLiteral("Satellite")).toBool()) { + plugins << name; + } + } + + return plugins; } /*! diff --git a/tests/auto/positionplugintest/tst_positionplugin.cpp b/tests/auto/positionplugintest/tst_positionplugin.cpp index f4667e51..503e095f 100644 --- a/tests/auto/positionplugintest/tst_positionplugin.cpp +++ b/tests/auto/positionplugintest/tst_positionplugin.cpp @@ -71,7 +71,7 @@ void tst_PositionPlugin::initTestCase() void tst_PositionPlugin::availableSources() { QVERIFY(QGeoPositionInfoSource::availableSources().contains("test.source")); - QVERIFY(QGeoSatelliteInfoSource::availableSources().contains("test.source")); + QVERIFY(!QGeoSatelliteInfoSource::availableSources().contains("test.source")); } void tst_PositionPlugin::create() @@ -81,6 +81,13 @@ void tst_PositionPlugin::create() QVERIFY(src != 0); QVERIFY(src->minimumUpdateInterval() == 1000); + + src = QGeoPositionInfoSource::createSource("invalid source that will never exist", 0); + QVERIFY(src == 0); + + QGeoSatelliteInfoSource *ssrc = 0; + ssrc = QGeoSatelliteInfoSource::createSource("test.source", 0); + QVERIFY(ssrc == 0); } void tst_PositionPlugin::getUpdates() |
