From 18f500fe5f10ff75d66b77aff4144d61e27de6fc Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Thu, 23 Nov 2023 08:06:34 -0600 Subject: [PATCH] Position manager updates for tracking --- scwx-qt/source/scwx/qt/main/main_window.cpp | 15 +++-------- .../scwx/qt/manager/position_manager.cpp | 25 ++++++++++++++++--- .../scwx/qt/manager/position_manager.hpp | 6 ++++- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index e480aeea..3f4765b4 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -35,7 +35,6 @@ #include #include -#include #include #include #include @@ -63,7 +62,6 @@ class MainWindowImpl : public QObject public: explicit MainWindowImpl(MainWindow* mainWindow) : - uuid_ {boost::uuids::random_generator()()}, mainWindow_ {mainWindow}, settings_ {}, activeMap_ {nullptr}, @@ -124,7 +122,7 @@ public: if (settings::GeneralSettings::Instance().track_location().GetValue()) { - positionManager_->TrackLocation(uuid_, true); + positionManager_->TrackLocation(true); } } ~MainWindowImpl() { threadPool_.join(); } @@ -155,8 +153,6 @@ public: boost::asio::thread_pool threadPool_ {1u}; - boost::uuids::uuid uuid_; - MainWindow* mainWindow_; QMapLibreGL::Settings settings_; map::MapProvider mapProvider_; @@ -872,13 +868,8 @@ void MainWindowImpl::ConnectOtherSignals() settings::GeneralSettings::Instance().track_location().StageValue( trackingEnabled); - for (std::size_t i = 0; i < maps_.size(); ++i) - { - // maps_[i]->SetTrackLocation(trackingEnabled); - } - - // Turn on location tracking (location manager) - positionManager_->TrackLocation(uuid_, trackingEnabled); + // Turn on location tracking + positionManager_->TrackLocation(trackingEnabled); }); connect(level2ProductsWidget_, &ui::Level2ProductsWidget::RadarProductSelected, diff --git a/scwx-qt/source/scwx/qt/manager/position_manager.cpp b/scwx-qt/source/scwx/qt/manager/position_manager.cpp index 15f3bd09..23357444 100644 --- a/scwx-qt/source/scwx/qt/manager/position_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/position_manager.cpp @@ -4,6 +4,7 @@ #include +#include #include namespace scwx @@ -19,7 +20,8 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_); class PositionManager::Impl { public: - explicit Impl(PositionManager* self) : self_ {self} + explicit Impl(PositionManager* self) : + self_ {self}, trackingUuid_ {boost::uuids::random_generator()()} { // TODO: macOS requires permission geoPositionInfoSource_ = @@ -55,6 +57,9 @@ public: PositionManager* self_; + boost::uuids::uuid trackingUuid_; + bool trackingEnabled_ {false}; + std::set uuids_ {}; QGeoPositionInfoSource* geoPositionInfoSource_ {}; @@ -69,15 +74,20 @@ QGeoPositionInfo PositionManager::position() const return p->position_; } -void PositionManager::TrackLocation(boost::uuids::uuid uuid, - bool trackingEnabled) +bool PositionManager::IsLocationTracked() +{ + return p->trackingEnabled_; +} + +void PositionManager::EnablePositionUpdates(boost::uuids::uuid uuid, + bool enabled) { if (p->geoPositionInfoSource_ == nullptr) { return; } - if (trackingEnabled) + if (enabled) { if (p->uuids_.empty()) { @@ -97,6 +107,13 @@ void PositionManager::TrackLocation(boost::uuids::uuid uuid, } } +void PositionManager::TrackLocation(bool trackingEnabled) +{ + p->trackingEnabled_ = trackingEnabled; + EnablePositionUpdates(p->trackingUuid_, trackingEnabled); + Q_EMIT LocationTrackingChanged(trackingEnabled); +} + std::shared_ptr PositionManager::Instance() { static std::weak_ptr positionManagerReference_ {}; diff --git a/scwx-qt/source/scwx/qt/manager/position_manager.hpp b/scwx-qt/source/scwx/qt/manager/position_manager.hpp index 815b76c9..367114c5 100644 --- a/scwx-qt/source/scwx/qt/manager/position_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/position_manager.hpp @@ -25,11 +25,15 @@ public: QGeoPositionInfo position() const; - void TrackLocation(boost::uuids::uuid uuid, bool trackingEnabled); + bool IsLocationTracked(); + + void EnablePositionUpdates(boost::uuids::uuid uuid, bool enabled); + void TrackLocation(bool trackingEnabled); static std::shared_ptr Instance(); signals: + void LocationTrackingChanged(bool trackingEnabled); void PositionUpdated(const QGeoPositionInfo& info); private: