Compare commits

...

3 Commits

Author SHA1 Message Date
Dirk Hohndel
0eb246f921 mobile: replace locationProvider with calls to GpsLocation::instance()
This makes it more obvious what we are doing. And won't make any difference
from a performance perspective.

Also converted the last call to connect using the old syntax to the new syntax.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-01-01 15:06:58 -08:00
Dirk Hohndel
cb9a337965 mobile: turn GpsLocation into a regular singleton construct
Simply move the initialization of the logging function into its own method and
call that in the QMLManager constructor.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-01-01 12:55:47 -08:00
Dirk Hohndel
257698aff4 mobile: don't connect to applicationStateChanged signal early
We don't want to connect to this until all parts of the QMLManager object are set up.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-01-01 12:55:37 -08:00
4 changed files with 28 additions and 35 deletions

View File

@ -15,17 +15,12 @@
#include <QApplication>
#include <QTimer>
GpsLocation *GpsLocation::m_Instance = NULL;
GpsLocation::GpsLocation(void (*showMsgCB)(const char *), QObject *parent) :
QObject(parent),
GpsLocation::GpsLocation() :
m_GpsSource(0),
showMessageCB(0),
waitingForPosition(false),
haveSource(UNKNOWN)
{
Q_ASSERT_X(m_Instance == NULL, "GpsLocation", "GpsLocation recreated");
m_Instance = this;
showMessageCB = showMsgCB;
// create a QSettings object that's separate from the main application settings
geoSettings = new QSettings(QSettings::NativeFormat, QSettings::UserScope,
QStringLiteral("org.subsurfacedivelog"), QStringLiteral("subsurfacelocation"), this);
@ -39,19 +34,17 @@ GpsLocation::GpsLocation(void (*showMsgCB)(const char *), QObject *parent) :
GpsLocation *GpsLocation::instance()
{
Q_ASSERT(m_Instance != NULL);
return m_Instance;
}
bool GpsLocation::hasInstance()
{
return m_Instance != NULL;
static GpsLocation self;
return &self;
}
GpsLocation::~GpsLocation()
{
m_Instance = NULL;
}
void GpsLocation::setLogCallBack(void (*showMsgCB)(const char *))
{
showMessageCB = showMsgCB;
}
void GpsLocation::setGpsTimeThreshold(int seconds)

View File

@ -29,14 +29,14 @@ struct DiveAndLocation {
class GpsLocation : public QObject {
Q_OBJECT
public:
GpsLocation(void (*showMsgCB)(const char *msg), QObject *parent);
GpsLocation();
~GpsLocation();
static GpsLocation *instance();
static bool hasInstance();
std::vector<DiveAndLocation> getLocations();
int getGpsNum() const;
bool hasLocationsSource();
QString currentPosition();
void setLogCallBack(void (*showMsgCB)(const char *msg));
QMap<qint64, gpsTracker> currentGPSInfo() const;
@ -49,7 +49,6 @@ private:
QNetworkReply *reply;
QString userAgent;
void (*showMessageCB)(const char *msg);
static GpsLocation *m_Instance;
bool waitingForPosition;
QMap<qint64, gpsTracker> m_trackers;
QList<gpsTracker> m_deletedTrackers;

View File

@ -209,7 +209,6 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
m_instance = this;
m_lastDevicePixelRatio = qApp->devicePixelRatio();
timer.start();
connect(qobject_cast<QApplication *>(QApplication::instance()), &QApplication::applicationStateChanged, this, &QMLManager::applicationStateChanged);
// make upload signals available in QML
// Remark: signal - signal connect
@ -290,11 +289,11 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
connect(&btDiscovery->localBtDevice, &QBluetoothLocalDevice::hostModeStateChanged,
this, &QMLManager::btHostModeChange);
}
// create location manager service
locationProvider = new GpsLocation(&appendTextToLogStandalone, this);
// add log call back to the location manager service singleton
GpsLocation::instance()->setLogCallBack(&appendTextToLogStandalone);
progress_callback = &progressCallback;
connect(locationProvider, SIGNAL(haveSourceChanged()), this, SLOT(hasLocationSourceChanged()));
setLocationServiceAvailable(locationProvider->hasLocationsSource());
connect(GpsLocation::instance(), &GpsLocation::haveSourceChanged, this, &QMLManager::hasLocationSourceChanged);
setLocationServiceAvailable(GpsLocation::instance()->hasLocationsSource());
set_git_update_cb(&gitProgressCB);
// present dive site lists sorted by name
@ -324,6 +323,9 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
connect(Command::getUndoStack(), &QUndoStack::undoTextChanged, this, &QMLManager::undoTextChanged);
connect(Command::getUndoStack(), &QUndoStack::redoTextChanged, this, &QMLManager::redoTextChanged);
// now that everything is setup, connect the application changed signal
connect(qobject_cast<QApplication *>(QApplication::instance()), &QApplication::applicationStateChanged, this, &QMLManager::applicationStateChanged);
// we start out with clean data
updateHaveLocalChanges(false);
}
@ -1611,25 +1613,25 @@ int QMLManager::addDive()
QString QMLManager::getCurrentPosition()
{
static bool hasLocationSource = false;
if (locationProvider->hasLocationsSource() != hasLocationSource) {
if (GpsLocation::instance()->hasLocationsSource() != hasLocationSource) {
hasLocationSource = !hasLocationSource;
setLocationServiceAvailable(hasLocationSource);
}
if (!hasLocationSource)
return tr("Unknown GPS location");
QString positionResponse = locationProvider->currentPosition();
QString positionResponse = GpsLocation::instance()->currentPosition();
if (positionResponse == GPS_CURRENT_POS)
connect(locationProvider, &GpsLocation::acquiredPosition, this, &QMLManager::waitingForPositionChanged, Qt::UniqueConnection);
connect(GpsLocation::instance(), &GpsLocation::acquiredPosition, this, &QMLManager::waitingForPositionChanged, Qt::UniqueConnection);
else
disconnect(locationProvider, &GpsLocation::acquiredPosition, this, &QMLManager::waitingForPositionChanged);
disconnect(GpsLocation::instance(), &GpsLocation::acquiredPosition, this, &QMLManager::waitingForPositionChanged);
return positionResponse;
}
void QMLManager::applyGpsData()
{
appendTextToLog("Applying GPS fiexs");
std::vector<DiveAndLocation> fixes = locationProvider->getLocations();
std::vector<DiveAndLocation> fixes = GpsLocation::instance()->getLocations();
Command::applyGPSFixes(fixes);
appendTextToLog(QString("Attached %1 GPS fixes").arg(fixes.size()));
if (fixes.size())
@ -1644,19 +1646,19 @@ void QMLManager::populateGpsData()
void QMLManager::clearGpsData()
{
locationProvider->clearGpsData();
GpsLocation::instance()->clearGpsData();
populateGpsData();
}
void QMLManager::deleteGpsFix(quint64 when)
{
locationProvider->deleteGpsFix(when);
GpsLocation::instance()->deleteGpsFix(when);
populateGpsData();
}
QString QMLManager::logText() const
{
QString logText = m_logText + QString("\nNumer of GPS fixes: %1").arg(locationProvider->getGpsNum());
QString logText = m_logText + QString("\nNumer of GPS fixes: %1").arg(GpsLocation::instance()->getGpsNum());
return logText;
}
@ -1674,7 +1676,7 @@ void QMLManager::appendTextToLog(const QString &newText)
void QMLManager::setLocationServiceEnabled(bool locationServiceEnabled)
{
m_locationServiceEnabled = locationServiceEnabled;
locationProvider->serviceEnable(m_locationServiceEnabled);
GpsLocation::instance()->serviceEnable(m_locationServiceEnabled);
emit locationServiceEnabledChanged();
}
@ -1687,7 +1689,7 @@ void QMLManager::setLocationServiceAvailable(bool locationServiceAvailable)
void QMLManager::hasLocationSourceChanged()
{
setLocationServiceAvailable(locationProvider->hasLocationsSource());
setLocationServiceAvailable(GpsLocation::instance()->hasLocationsSource());
}
void QMLManager::setVerboseEnabled(bool verboseMode)

View File

@ -254,7 +254,6 @@ private:
bool m_verboseEnabled;
bool m_diveListProcessing;
bool m_initialized;
GpsLocation *locationProvider;
bool m_loadFromCloud;
static QMLManager *m_instance;
QString m_notificationText;