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())
311QGeoPositionInfoSource *QGeoPositionInfoSourcePrivate::createSourceReal(
const QCborMap &meta,
const QVariantMap ¶meters, QObject *parent)
313 QGeoPositionInfoSource *s =
nullptr;
314 auto factory = QGeoPositionInfoSourcePrivate::loadFactory(meta);
316 s = factory->positionInfoSource(parent, parameters);
318 s->d_func()->sourceName = meta.value(QStringLiteral(
"Provider")).toString();
349QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(
const QVariantMap ¶meters, QObject *parent)
351 const QList<QCborMap> plugins = QGeoPositionInfoSourcePrivate::pluginsSorted();
352 for (
const QCborMap &obj : plugins) {
353 if (obj.value(QStringLiteral(
"Position")).isBool()
354 && obj.value(QStringLiteral(
"Position")).toBool()) {
355 QGeoPositionInfoSource *source = QGeoPositionInfoSourcePrivate::createSourceReal(obj, parameters, parent);
369QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(
const QString &sourceName, QObject *parent)
371 return createSource(sourceName, QVariantMap(), parent);
384QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(
const QString &sourceName,
const QVariantMap ¶meters, QObject *parent)
386 auto plugins = QGeoPositionInfoSourcePrivate::plugins();
387 if (plugins.contains(sourceName))
388 return QGeoPositionInfoSourcePrivate::createSourceReal(plugins.value(sourceName), parameters, parent);
396QStringList QGeoPositionInfoSource::availableSources()
399 const auto meta = QGeoPositionInfoSourcePrivate::plugins();
400 for (
auto it = meta.cbegin(), end = meta.cend(); it != end; ++it) {
401 if (it.value().value(QStringLiteral(
"Position")).isBool()
402 && it.value().value(QStringLiteral(
"Position")).toBool()) {
410QGeoPositionInfoSource::QGeoPositionInfoSource(QGeoPositionInfoSourcePrivate &dd, QObject *parent)
411 : QObject(dd, parent)
413 qRegisterMetaType<QGeoPositionInfo>();
414 Q_D(QGeoPositionInfoSource);
415 d->interval.setValueBypassingBindings(0);
416 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 } }))