106 const QString prio = QStringLiteral(
"Priority");
107 if (p1.contains(prio) && !p2.contains(prio))
109 if (!p1.contains(prio) && p2.contains(prio))
111 if (p1.value(prio).isDouble() && !p2.value(prio).isDouble())
113 if (!p1.value(prio).isDouble() && p2.value(prio).isDouble())
115 return (p1.value(prio).toDouble() > p2.value(prio).toDouble());
125void QGeoPositionInfoSourcePrivate::loadPluginMetadata(QMultiHash<QString, QCborMap> &plugins)
127 QFactoryLoader *l = loader();
128 QList<QPluginParsedMetaData> meta = l->metaData();
129 for (qsizetype i = 0; i < meta.size(); ++i) {
130 QCborMap obj = meta.at(i).value(QtPluginMetaDataKeys::MetaData).toMap();
131 const QLatin1String testableKey(
"Testable");
132 if (!obj.value(testableKey).toBool(
true)) {
133 static bool inTest = qEnvironmentVariableIsSet(
"QT_QTESTLIB_RUNNING");
137 obj.insert(QLatin1String(
"index"),
static_cast<qint64>(i));
138 plugins.insert(obj.value(QStringLiteral(
"Provider")).toString(), obj);
276void QGeoPositionInfoSource::setPreferredPositioningMethods(PositioningMethods methods)
278 Q_D(QGeoPositionInfoSource);
279 d->methods.removeBindingUnlessInWrapper();
284 const auto prevMethods = d->methods.valueBypassingBindings();
286 if (supportedPositioningMethods() != QGeoPositionInfoSource::NoPositioningMethods) {
287 d->methods.setValueBypassingBindings(methods & supportedPositioningMethods());
288 if (d->methods.valueBypassingBindings() == 0) {
289 d->methods.setValueBypassingBindings(supportedPositioningMethods());
292 d->methods.setValueBypassingBindings(methods);
294 if (prevMethods != d->methods.valueBypassingBindings())
316QGeoPositionInfoSource *QGeoPositionInfoSourcePrivate::createSourceReal(
const QCborMap &meta,
const QVariantMap ¶meters, QObject *parent)
318 QGeoPositionInfoSource *s =
nullptr;
319 auto factory = QGeoPositionInfoSourcePrivate::loadFactory(meta);
321 s = factory->positionInfoSource(parent, parameters);
323 s->d_func()->sourceName = meta.value(QStringLiteral(
"Provider")).toString();
354QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(
const QVariantMap ¶meters, QObject *parent)
356 const QList<QCborMap> plugins = QGeoPositionInfoSourcePrivate::pluginsSorted();
357 for (
const QCborMap &obj : plugins) {
358 if (obj.value(QStringLiteral(
"Position")).isBool()
359 && obj.value(QStringLiteral(
"Position")).toBool()) {
360 QGeoPositionInfoSource *source = QGeoPositionInfoSourcePrivate::createSourceReal(obj, parameters, parent);
374QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(
const QString &sourceName, QObject *parent)
376 return createSource(sourceName, QVariantMap(), parent);
389QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(
const QString &sourceName,
const QVariantMap ¶meters, QObject *parent)
391 auto plugins = QGeoPositionInfoSourcePrivate::plugins();
392 if (plugins.contains(sourceName))
393 return QGeoPositionInfoSourcePrivate::createSourceReal(plugins.value(sourceName), parameters, parent);
401QStringList QGeoPositionInfoSource::availableSources()
404 const auto meta = QGeoPositionInfoSourcePrivate::plugins();
405 for (
auto it = meta.cbegin(), end = meta.cend(); it != end; ++it) {
406 if (it.value().value(QStringLiteral(
"Position")).isBool()
407 && it.value().value(QStringLiteral(
"Position")).toBool()) {
415QGeoPositionInfoSource::QGeoPositionInfoSource(QGeoPositionInfoSourcePrivate &dd, QObject *parent)
416 : QObject(dd, parent)
418 qRegisterMetaType<QGeoPositionInfo>();
419 Q_D(QGeoPositionInfoSource);
420 d->interval.setValueBypassingBindings(0);
421 d->methods.setValueBypassingBindings(NoPositioningMethods);
Q_GLOBAL_STATIC_WITH_ARGS(PermissionStatusHash, g_permissionStatusHash,({ { qMetaTypeId< QCameraPermission >(), Qt::PermissionStatus::Undetermined }, { qMetaTypeId< QMicrophonePermission >(), Qt::PermissionStatus::Undetermined }, { qMetaTypeId< QBluetoothPermission >(), Qt::PermissionStatus::Undetermined }, { qMetaTypeId< QContactsPermission >(), Qt::PermissionStatus::Undetermined }, { qMetaTypeId< QCalendarPermission >(), Qt::PermissionStatus::Undetermined }, { qMetaTypeId< QLocationPermission >(), Qt::PermissionStatus::Undetermined } }))