summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/location/qgeopositioninfosource.cpp15
-rw-r--r--src/location/qgeosatelliteinfosource.cpp15
-rw-r--r--tests/auto/positionplugintest/tst_positionplugin.cpp9
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()