From 81e981a15bd3535b1ef2dcc8304d0c328cbfa2ea Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Fri, 29 Apr 2016 16:38:35 +0300 Subject: [PATCH] Fixed pending position running on app start --- drape_frontend/my_position_controller.cpp | 18 ++++++++++++++++++ drape_frontend/my_position_controller.hpp | 2 ++ 2 files changed, 20 insertions(+) diff --git a/drape_frontend/my_position_controller.cpp b/drape_frontend/my_position_controller.cpp index 813f3d5217..259ff04dd9 100644 --- a/drape_frontend/my_position_controller.cpp +++ b/drape_frontend/my_position_controller.cpp @@ -26,6 +26,7 @@ double const kMaxPendingLocationTimeSec = 60.0; double const kMaxTimeInBackgroundSec = 60.0 * 60; double const kMaxNotFollowRoutingTimeSec = 10.0; double const kMaxUpdateLocationInvervalSec = 30.0; +double const kMaxWaitStartLocationSec = 5.0; int const kDoNotChangeZoom = -1; @@ -113,6 +114,8 @@ MyPositionController::MyPositionController(location::EMyPositionMode initMode, m_mode = location::NotFollowNoPosition; else if (timeInBackground >= kMaxTimeInBackgroundSec) m_mode = location::Follow; + + m_startLocationTimer.Reset(); } MyPositionController::~MyPositionController() @@ -379,6 +382,12 @@ void MyPositionController::SetModeListener(location::TMyPositionModeChanged cons m_modeChangeCallback(mode, m_isInRouting); } +bool MyPositionController::IsInStateWithPosition() const +{ + return m_mode == location::NotFollow || m_mode == location::Follow || + m_mode == location::FollowAndRotate; +} + void MyPositionController::Render(uint32_t renderMode, ScreenBase const & screen, ref_ptr mng, dp::UniformValuesStorage const & commonUniforms) @@ -389,6 +398,15 @@ void MyPositionController::Render(uint32_t renderMode, ScreenBase const & screen ChangeMode(location::NotFollowNoPosition); } + // We do not have assigned position but mode requires location. + // Go to Pending state if the time is up. + if (!m_isPositionAssigned && IsInStateWithPosition() && + m_startLocationTimer.ElapsedSeconds() >= kMaxWaitStartLocationSec) + { + m_pendingTimer.Reset(); + ChangeMode(location::PendingPosition); + } + if (IsInRouting() && m_mode == location::NotFollow && m_routingNotFollowTimer.ElapsedSeconds() >= kMaxNotFollowRoutingTimeSec) { diff --git a/drape_frontend/my_position_controller.hpp b/drape_frontend/my_position_controller.hpp index ff52b3f2b9..788f2616c7 100644 --- a/drape_frontend/my_position_controller.hpp +++ b/drape_frontend/my_position_controller.hpp @@ -103,6 +103,7 @@ private: void ChangeMode(location::EMyPositionMode newMode); void SetDirection(double bearing); + bool IsInStateWithPosition() const; bool IsVisible() const { return m_isVisible; } void SetIsVisible(bool isVisible) { m_isVisible = isVisible; } @@ -146,6 +147,7 @@ private: my::Timer m_pendingTimer; my::Timer m_routingNotFollowTimer; my::Timer m_updateLocationTimer; + my::Timer m_startLocationTimer; double m_lastLocationTimestamp; m2::RectD m_pixelRect;