From 0ecdb3f90bf21f5bd3dac5955c6ce3d595d4af81 Mon Sep 17 00:00:00 2001 From: Alexander Marchuk Date: Fri, 29 Apr 2016 14:00:33 +0300 Subject: [PATCH] [location][android] fix: Manual start of location updates. --- .../com/mapswithme/maps/LocationState.java | 4 +- .../src/com/mapswithme/maps/MwmActivity.java | 41 ++++++++++++++----- .../maps/location/LocationHelper.java | 2 +- drape_frontend/my_position_controller.cpp | 4 +- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/android/src/com/mapswithme/maps/LocationState.java b/android/src/com/mapswithme/maps/LocationState.java index fc5b533d72..533d95e0a6 100644 --- a/android/src/com/mapswithme/maps/LocationState.java +++ b/android/src/com/mapswithme/maps/LocationState.java @@ -22,8 +22,8 @@ public enum LocationState /** * Checks if location state on the map is active (so its not turned off or pending). */ - public static boolean isTurnedOn() + public boolean isTurnedOn() { - return INSTANCE.getLocationStateMode() > NOT_FOLLOW_NO_POSITION; + return getLocationStateMode() > NOT_FOLLOW_NO_POSITION; } } diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index d7a0891aa0..79f590cdc9 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -150,6 +150,9 @@ public class MwmActivity extends BaseMwmFragmentActivity private FloatingSearchToolbarController mSearchController; private LastCompassData mLastCompassData; + private static boolean sColdStart = true; + private static boolean sLocationStopped; + public interface LeftAnimationTrackListener { void onTrackStarted(boolean collapsed); @@ -828,6 +831,9 @@ public class MwmActivity extends BaseMwmFragmentActivity mLocationPredictor.myPositionModeChanged(newMode); mMainMenu.getMyPositionButton().update(newMode); + if (newMode != LocationState.NOT_FOLLOW_NO_POSITION) + sLocationStopped = false; + switch (newMode) { case LocationState.PENDING_POSITION: @@ -835,12 +841,23 @@ public class MwmActivity extends BaseMwmFragmentActivity break; case LocationState.NOT_FOLLOW_NO_POSITION: + if (sColdStart) + { + LocationState.INSTANCE.switchToNextMode(); + break; + } + pauseLocation(); + if (sLocationStopped) + break; + + sLocationStopped = true; + if (mMapFragment != null && mMapFragment.isFirstStart()) { mMapFragment.clearFirstStart(); - return; + break; } String message = String.format("%s\n\n%s", getString(R.string.current_location_unknown_message), @@ -862,6 +879,8 @@ public class MwmActivity extends BaseMwmFragmentActivity LocationHelper.INSTANCE.restart(); break; } + + sColdStart = false; } @Override @@ -929,15 +948,17 @@ public class MwmActivity extends BaseMwmFragmentActivity mFirstStart = FirstStartFragment.showOn(this); if (mFirstStart) { - addTask(new MwmActivity.MapTask() - { - @Override - public boolean run(MwmActivity target) + if (LocationState.INSTANCE.isTurnedOn()) + addTask(new MwmActivity.MapTask() { - LocationState.INSTANCE.switchToNextMode(); - return false; - } - }); + @Override + public boolean run(MwmActivity target) + { + if (LocationState.INSTANCE.isTurnedOn()) + LocationState.INSTANCE.switchToNextMode(); + return false; + } + }); } if (!mFirstStart && !SinglePageNewsFragment.showOn(this)) { @@ -1015,7 +1036,7 @@ public class MwmActivity extends BaseMwmFragmentActivity int newMode = LocationState.INSTANCE.getLocationStateMode(); mMainMenu.getMyPositionButton().update(newMode); - if (newMode != LocationState.NOT_FOLLOW_NO_POSITION) + if (LocationState.INSTANCE.isTurnedOn()) resumeLocation(); } diff --git a/android/src/com/mapswithme/maps/location/LocationHelper.java b/android/src/com/mapswithme/maps/location/LocationHelper.java index 2755327ec0..fca83bb081 100644 --- a/android/src/com/mapswithme/maps/location/LocationHelper.java +++ b/android/src/com/mapswithme/maps/location/LocationHelper.java @@ -171,7 +171,7 @@ public enum LocationHelper implements SensorEventListener @Nullable public MapObject getMyPosition() { - if (!LocationState.isTurnedOn()) + if (!LocationState.INSTANCE.isTurnedOn()) { mMyPosition = null; return null; diff --git a/drape_frontend/my_position_controller.cpp b/drape_frontend/my_position_controller.cpp index d48f0d5f82..813f3d5217 100644 --- a/drape_frontend/my_position_controller.cpp +++ b/drape_frontend/my_position_controller.cpp @@ -111,7 +111,7 @@ MyPositionController::MyPositionController(location::EMyPositionMode initMode, { if (isFirstLaunch) m_mode = location::NotFollowNoPosition; - else if (m_mode == location::NotFollowNoPosition || timeInBackground >= kMaxTimeInBackgroundSec) + else if (timeInBackground >= kMaxTimeInBackgroundSec) m_mode = location::Follow; } @@ -374,8 +374,6 @@ void MyPositionController::SetModeListener(location::TMyPositionModeChanged cons location::EMyPositionMode mode = m_mode; if (m_isFirstLaunch) mode = location::NotFollowNoPosition; - else if (!m_isPositionAssigned) - mode = location::PendingPosition; if (m_modeChangeCallback != nullptr) m_modeChangeCallback(mode, m_isInRouting);