Revision control
++ // Copyright (C) 2021 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ #include <QtPositioning/qgeopositioninfosource.h>
++ #include <QtPositioning/qgeopositioninfosourcefactory.h>
++ #include <QtPositioning/qgeosatelliteinfosource.h>
++ #include <QObject>
++ #include <QtPlugin>
++
++ QT_USE_NAMESPACE
++
++ // This is a dummy plugin that is created mostly to test some features of
++ // QDeclarativePositionSource. It does not provide any position updates.
++ // Use plugin from positionplugin subdirectory, if you need to simulate some
++ // positioning updates.
++
++ class DummyPluginSource : public QGeoPositionInfoSource
++ {
++ Q_OBJECT
++
++ public:
++ DummyPluginSource(const QVariantMap ¶meters, QObject *parent = 0);
++ ~DummyPluginSource();
++
++ void startUpdates() override;
++ void stopUpdates() override;
++ void requestUpdate(int timeout = 5000) override;
++
++ QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const override;
++ PositioningMethods supportedPositioningMethods() const override;
++
++ void setUpdateInterval(int msec) override;
++ int minimumUpdateInterval() const override;
++ Error error() const override;
++
++ private:
++ Error lastError = QGeoPositionInfoSource::NoError;
++ };
++
++ DummyPluginSource::DummyPluginSource(const QVariantMap ¶meters, QObject *parent)
++ : QGeoPositionInfoSource(parent)
++ {
++ Q_UNUSED(parameters)
++ }
++
++ QGeoPositionInfoSource::Error DummyPluginSource::error() const
++ {
++ return lastError;
++ }
++
++ void DummyPluginSource::setUpdateInterval(int msec)
++ {
++ if (msec < minimumUpdateInterval())
++ msec = minimumUpdateInterval();
++
++ QGeoPositionInfoSource::setUpdateInterval(msec);
++ }
++
++ int DummyPluginSource::minimumUpdateInterval() const
++ {
++ return 100;
++ }
++
++ QGeoPositionInfo
++ DummyPluginSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const
++ {
++ Q_UNUSED(fromSatellitePositioningMethodsOnly);
++ return QGeoPositionInfo();
++ }
++
++ QGeoPositionInfoSource::PositioningMethods DummyPluginSource::supportedPositioningMethods() const
++ {
++ return QGeoPositionInfoSource::NonSatellitePositioningMethods;
++ }
++
++ void DummyPluginSource::startUpdates()
++ {
++ lastError = QGeoPositionInfoSource::NoError;
++ }
++
++ void DummyPluginSource::stopUpdates() { }
++
++ void DummyPluginSource::requestUpdate(int timeout)
++ {
++ lastError = QGeoPositionInfoSource::NoError;
++ if (timeout < minimumUpdateInterval()) {
++ lastError = QGeoPositionInfoSource::UpdateTimeoutError;
++ emit QGeoPositionInfoSource::errorOccurred(lastError);
++ }
++ }
++
++ DummyPluginSource::~DummyPluginSource() { }
++
++ class DummySatelliteSourcePlugin : public QGeoSatelliteInfoSource
++ {
++ Q_OBJECT
++ public:
++ DummySatelliteSourcePlugin(const QVariantMap ¶meters, QObject *parent = 0);
++ ~DummySatelliteSourcePlugin();
++
++ int minimumUpdateInterval() const override;
++ Error error() const override;
++
++ public slots:
++ void startUpdates() override;
++ void stopUpdates() override;
++ void requestUpdate(int timeout = 0) override;
++
++ private:
++ Error lastError = QGeoSatelliteInfoSource::NoError;
++ };
++
++ DummySatelliteSourcePlugin::DummySatelliteSourcePlugin(const QVariantMap ¶meters,
++ QObject *parent)
++ : QGeoSatelliteInfoSource(parent)
++ {
++ Q_UNUSED(parameters)
++ }
++
++ DummySatelliteSourcePlugin::~DummySatelliteSourcePlugin()
++ {
++ }
++
++ int DummySatelliteSourcePlugin::minimumUpdateInterval() const
++ {
++ return 100;
++ }
++
++ QGeoSatelliteInfoSource::Error DummySatelliteSourcePlugin::error() const
++ {
++ return lastError;
++ }
++
++ void DummySatelliteSourcePlugin::startUpdates()
++ {
++ lastError = QGeoSatelliteInfoSource::NoError;
++ }
++
++ void DummySatelliteSourcePlugin::stopUpdates()
++ {
++ lastError = QGeoSatelliteInfoSource::NoError;
++ }
++
++ void DummySatelliteSourcePlugin::requestUpdate(int timeout)
++ {
++ lastError = QGeoSatelliteInfoSource::NoError;
++ if (timeout < minimumUpdateInterval()) {
++ lastError = QGeoSatelliteInfoSource::UpdateTimeoutError;
++ emit errorOccurred(lastError);
++ }
++ }
++
++
++ class DummyPluginForTestsFactory : public QObject, public QGeoPositionInfoSourceFactory
++ {
++ Q_OBJECT
++ Q_PLUGIN_METADATA(IID "org.qt-project.qt.position.sourcefactory/6.0" FILE "plugin.json")
++ Q_INTERFACES(QGeoPositionInfoSourceFactory)
++
++ public:
++ QGeoPositionInfoSource *positionInfoSource(QObject *parent,
++ const QVariantMap ¶meters) override;
++ QGeoSatelliteInfoSource *satelliteInfoSource(QObject *parent,
++ const QVariantMap ¶meters) override;
++ QGeoAreaMonitorSource *areaMonitor(QObject *parent, const QVariantMap ¶meters) override;
++ };
++
++ QGeoPositionInfoSource *
++ DummyPluginForTestsFactory::positionInfoSource(QObject *parent, const QVariantMap ¶meters)
++ {
++ return new DummyPluginSource(parameters, parent);
++ }
++
++ QGeoSatelliteInfoSource *
++ DummyPluginForTestsFactory::satelliteInfoSource(QObject *parent, const QVariantMap ¶meters)
++ {
++ return new DummySatelliteSourcePlugin(parameters, parent);
++ }
++
++ QGeoAreaMonitorSource *DummyPluginForTestsFactory::areaMonitor(QObject *parent,
++ const QVariantMap ¶meters)
++ {
++ Q_UNUSED(parent);
++ Q_UNUSED(parameters);
++ return nullptr;
++ }
++
++ #include "plugin.moc"