107 const QString prio = QStringLiteral(
"Priority");
108 if (p1.contains(prio) && !p2.contains(prio))
110 if (!p1.contains(prio) && p2.contains(prio))
112 if (p1.value(prio).isDouble() && !p2.value(prio).isDouble())
114 if (!p1.value(prio).isDouble() && p2.value(prio).isDouble())
116 return (p1.value(prio).toDouble() > p2.value(prio).toDouble());
126void QGeoPositionInfoSourcePrivate::loadPluginMetadata(QMultiHash<QString, QCborMap> &plugins)
128 QFactoryLoader *l = loader();
129 QList<QPluginParsedMetaData> meta = l->metaData();
130 for (qsizetype i = 0; i < meta.size(); ++i) {
131 QCborMap obj = meta.at(i).value(QtPluginMetaDataKeys::MetaData).toMap();
132 const QLatin1String testableKey(
"Testable");
133 if (!obj.value(testableKey).toBool(
true)) {
134 static bool inTest = qEnvironmentVariableIsSet(
"QT_QTESTLIB_RUNNING");
138 obj.insert(QLatin1String(
"index"),
static_cast<qint64>(i));
139 plugins.insert(obj.value(QStringLiteral(
"Provider")).toString(), obj);
277void QGeoPositionInfoSource::setPreferredPositioningMethods(PositioningMethods methods)
279 Q_D(QGeoPositionInfoSource);
280 d->methods.removeBindingUnlessInWrapper();
285 const auto prevMethods = d->methods.valueBypassingBindings();
287 if (supportedPositioningMethods() != QGeoPositionInfoSource::NoPositioningMethods) {
288 d->methods.setValueBypassingBindings(methods & supportedPositioningMethods());
289 if (d->methods.valueBypassingBindings() == 0) {
290 d->methods.setValueBypassingBindings(supportedPositioningMethods());
293 d->methods.setValueBypassingBindings(methods);
295 if (prevMethods != d->methods.valueBypassingBindings())
317QGeoPositionInfoSource *QGeoPositionInfoSourcePrivate::createSourceReal(
const QCborMap &meta,
const QVariantMap ¶meters, QObject *parent)
319 QGeoPositionInfoSource *s =
nullptr;
320 auto factory = QGeoPositionInfoSourcePrivate::loadFactory(meta);
322 s = factory->positionInfoSource(parent, parameters);
324 s->d_func()->sourceName = meta.value(QStringLiteral(
"Provider")).toString();
355QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(
const QVariantMap ¶meters, QObject *parent)
357 const QList<QCborMap> plugins = QGeoPositionInfoSourcePrivate::pluginsSorted();
358 for (
const QCborMap &obj : plugins) {
359 if (obj.value(QStringLiteral(
"Position")).isBool()
360 && obj.value(QStringLiteral(
"Position")).toBool()) {
361 QGeoPositionInfoSource *source = QGeoPositionInfoSourcePrivate::createSourceReal(obj, parameters, parent);
375QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(
const QString &sourceName, QObject *parent)
377 return createSource(sourceName, QVariantMap(), parent);
390QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(
const QString &sourceName,
const QVariantMap ¶meters, QObject *parent)
392 auto plugins = QGeoPositionInfoSourcePrivate::plugins();
393 if (plugins.contains(sourceName))
394 return QGeoPositionInfoSourcePrivate::createSourceReal(plugins.value(sourceName), parameters, parent);
402QStringList QGeoPositionInfoSource::availableSources()
405 const auto meta = QGeoPositionInfoSourcePrivate::plugins();
406 for (
auto it = meta.cbegin(), end = meta.cend(); it != end; ++it) {
407 if (it.value().value(QStringLiteral(
"Position")).isBool()
408 && it.value().value(QStringLiteral(
"Position")).toBool()) {
416QGeoPositionInfoSource::QGeoPositionInfoSource(QGeoPositionInfoSourcePrivate &dd, QObject *parent)
417 : QObject(dd, parent)
419 qRegisterMetaType<QGeoPositionInfo>();
420 Q_D(QGeoPositionInfoSource);
421 d->interval.setValueBypassingBindings(0);
422 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 } }))