From 01d2489c7346f9f94b090947134a69cb6b8602f1 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 17 Jul 2017 16:16:06 +0300 Subject: [PATCH] Fix #4002 --- .../quick_action_start_stop_navigation.xml | 65 +++ OsmAnd/res/values/strings.xml | 5 + .../dashboard/DashNavigationFragment.java | 3 +- .../notifications/NavigationNotification.java | 2 +- .../osmand/plus/quickaction/QuickAction.java | 4 + .../plus/quickaction/QuickActionFactory.java | 438 ++++++++++-------- .../plus/quickaction/QuickActionsWidget.java | 4 + .../actions/NavResumePauseAction.java | 77 +++ .../actions/NavStartStopAction.java | 91 ++++ .../osmand/plus/routing/RoutingHelper.java | 2 +- .../osmand/plus/views/MapControlsLayer.java | 6 +- 11 files changed, 491 insertions(+), 206 deletions(-) create mode 100644 OsmAnd/res/layout/quick_action_start_stop_navigation.xml create mode 100644 OsmAnd/src/net/osmand/plus/quickaction/actions/NavResumePauseAction.java create mode 100644 OsmAnd/src/net/osmand/plus/quickaction/actions/NavStartStopAction.java diff --git a/OsmAnd/res/layout/quick_action_start_stop_navigation.xml b/OsmAnd/res/layout/quick_action_start_stop_navigation.xml new file mode 100644 index 0000000000..d122d84d51 --- /dev/null +++ b/OsmAnd/res/layout/quick_action_start_stop_navigation.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 97f852d6e9..2e858e8342 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,11 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Resume/Pause Navigation + Press this button to pause the navigation, or to resume it if it was already paused. + Show Finish navigation dialog + Start/Finish Navigation + Press this button to start the navigation, or to stop it if it was already started. Store recorded tracks in monthly folders Store recorded tracks in sub-folders per recording month (like 2017-01). Reset diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java index 530d62163f..b988f9a3a0 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java @@ -1,7 +1,6 @@ package net.osmand.plus.dashboard; import android.content.DialogInterface; -import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; @@ -123,7 +122,7 @@ public class DashNavigationFragment extends DashBaseFragment { } else { routingHelper.setRoutePlanningMode(true); routingHelper.setFollowingMode(false); - routingHelper.setPauseNaviation(true); + routingHelper.setPauseNavigation(true); } updatePlayButton(routingHelper, map, play); map.getMapViewTrackingUtilities().switchToRoutePlanningMode(); diff --git a/OsmAnd/src/net/osmand/plus/notifications/NavigationNotification.java b/OsmAnd/src/net/osmand/plus/notifications/NavigationNotification.java index 6a438e6084..4e981d5822 100644 --- a/OsmAnd/src/net/osmand/plus/notifications/NavigationNotification.java +++ b/OsmAnd/src/net/osmand/plus/notifications/NavigationNotification.java @@ -64,7 +64,7 @@ public class NavigationNotification extends OsmandNotification { RoutingHelper routingHelper = app.getRoutingHelper(); routingHelper.setRoutePlanningMode(true); routingHelper.setFollowingMode(false); - routingHelper.setPauseNaviation(true); + routingHelper.setPauseNavigation(true); } }, new IntentFilter(OSMAND_PAUSE_NAVIGATION_SERVICE_ACTION)); diff --git a/OsmAnd/src/net/osmand/plus/quickaction/QuickAction.java b/OsmAnd/src/net/osmand/plus/quickaction/QuickAction.java index cbc794e94b..b7d5d87bf2 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/QuickAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/QuickAction.java @@ -80,6 +80,10 @@ public class QuickAction { return isActionEditable; } + public boolean isActionEnable(OsmandApplication app) { + return true; + } + public String getName(Context context) { return name == null || name.isEmpty() ? nameRes > 0 ? context.getString(nameRes) : "" : name; } diff --git a/OsmAnd/src/net/osmand/plus/quickaction/QuickActionFactory.java b/OsmAnd/src/net/osmand/plus/quickaction/QuickActionFactory.java index 9afd153cf2..cfdc8029e5 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/QuickActionFactory.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/QuickActionFactory.java @@ -28,6 +28,8 @@ import net.osmand.plus.quickaction.actions.NavAddDestinationAction; import net.osmand.plus.quickaction.actions.NavAddFirstIntermediateAction; import net.osmand.plus.quickaction.actions.NavAutoZoomMapAction; import net.osmand.plus.quickaction.actions.NavReplaceDestinationAction; +import net.osmand.plus.quickaction.actions.NavResumePauseAction; +import net.osmand.plus.quickaction.actions.NavStartStopAction; import net.osmand.plus.quickaction.actions.NavVoiceAction; import net.osmand.plus.quickaction.actions.NewAction; import net.osmand.plus.quickaction.actions.ShowHideFavoritesAction; @@ -119,6 +121,8 @@ public class QuickActionFactory { QuickAction addFirstIntermediate = new NavAddFirstIntermediateAction(); QuickAction replaceDestination = new NavReplaceDestinationAction(); QuickAction autoZoomMap = new NavAutoZoomMapAction(); + QuickAction startStopNavigation = new NavStartStopAction(); + QuickAction resumePauseNavigation = new NavResumePauseAction(); ArrayList navigationQuickActions = new ArrayList<>(); @@ -137,6 +141,12 @@ public class QuickActionFactory { if (!autoZoomMap.hasInstanceInList(active)) { navigationQuickActions.add(autoZoomMap); } + if (!startStopNavigation.hasInstanceInList(active)) { + navigationQuickActions.add(startStopNavigation); + } + if (!resumePauseNavigation.hasInstanceInList(active)) { + navigationQuickActions.add(resumePauseNavigation); + } if (navigationQuickActions.size() > 0) { quickActions.add(new QuickAction(0, R.string.quick_action_add_navigation)); @@ -150,74 +160,80 @@ public class QuickActionFactory { switch (type) { - case NewAction.TYPE: - return new NewAction(); + case NewAction.TYPE: + return new NewAction(); - case MarkerAction.TYPE: - return new MarkerAction(); + case MarkerAction.TYPE: + return new MarkerAction(); - case FavoriteAction.TYPE: - return new FavoriteAction(); + case FavoriteAction.TYPE: + return new FavoriteAction(); - case ShowHideFavoritesAction.TYPE: - return new ShowHideFavoritesAction(); + case ShowHideFavoritesAction.TYPE: + return new ShowHideFavoritesAction(); - case ShowHidePoiAction.TYPE: - return new ShowHidePoiAction(); + case ShowHidePoiAction.TYPE: + return new ShowHidePoiAction(); - case GPXAction.TYPE: - return new GPXAction(); + case GPXAction.TYPE: + return new GPXAction(); - case ParkingAction.TYPE: - return new ParkingAction(); + case ParkingAction.TYPE: + return new ParkingAction(); - case TakeAudioNoteAction.TYPE: - return new TakeAudioNoteAction(); + case TakeAudioNoteAction.TYPE: + return new TakeAudioNoteAction(); - case TakePhotoNoteAction.TYPE: - return new TakePhotoNoteAction(); + case TakePhotoNoteAction.TYPE: + return new TakePhotoNoteAction(); - case TakeVideoNoteAction.TYPE: - return new TakeVideoNoteAction(); + case TakeVideoNoteAction.TYPE: + return new TakeVideoNoteAction(); - case NavVoiceAction.TYPE: - return new NavVoiceAction(); + case NavVoiceAction.TYPE: + return new NavVoiceAction(); - case ShowHideOSMBugAction.TYPE: - return new ShowHideOSMBugAction(); + case ShowHideOSMBugAction.TYPE: + return new ShowHideOSMBugAction(); - case AddOSMBugAction.TYPE: - return new AddOSMBugAction(); + case AddOSMBugAction.TYPE: + return new AddOSMBugAction(); - case AddPOIAction.TYPE: - return new AddPOIAction(); + case AddPOIAction.TYPE: + return new AddPOIAction(); - case MapStyleAction.TYPE: - return new MapStyleAction(); + case MapStyleAction.TYPE: + return new MapStyleAction(); - case MapSourceAction.TYPE: - return new MapSourceAction(); + case MapSourceAction.TYPE: + return new MapSourceAction(); - case MapOverlayAction.TYPE: - return new MapOverlayAction(); + case MapOverlayAction.TYPE: + return new MapOverlayAction(); - case MapUnderlayAction.TYPE: - return new MapUnderlayAction(); + case MapUnderlayAction.TYPE: + return new MapUnderlayAction(); - case NavAddDestinationAction.TYPE: - return new NavAddDestinationAction(); + case NavAddDestinationAction.TYPE: + return new NavAddDestinationAction(); - case NavAddFirstIntermediateAction.TYPE: - return new NavAddFirstIntermediateAction(); + case NavAddFirstIntermediateAction.TYPE: + return new NavAddFirstIntermediateAction(); - case NavReplaceDestinationAction.TYPE: - return new NavReplaceDestinationAction(); + case NavReplaceDestinationAction.TYPE: + return new NavReplaceDestinationAction(); - case NavAutoZoomMapAction.TYPE: - return new NavAutoZoomMapAction(); + case NavAutoZoomMapAction.TYPE: + return new NavAutoZoomMapAction(); - default: - return new QuickAction(); + case NavStartStopAction.TYPE: + return new NavStartStopAction(); + + case NavResumePauseAction.TYPE: + return new NavResumePauseAction(); + + default: + return new QuickAction(); } } @@ -225,74 +241,80 @@ public class QuickActionFactory { switch (quickAction.type) { - case NewAction.TYPE: - return new NewAction(quickAction); + case NewAction.TYPE: + return new NewAction(quickAction); - case MarkerAction.TYPE: - return new MarkerAction(quickAction); + case MarkerAction.TYPE: + return new MarkerAction(quickAction); - case FavoriteAction.TYPE: - return new FavoriteAction(quickAction); + case FavoriteAction.TYPE: + return new FavoriteAction(quickAction); - case ShowHideFavoritesAction.TYPE: - return new ShowHideFavoritesAction(quickAction); + case ShowHideFavoritesAction.TYPE: + return new ShowHideFavoritesAction(quickAction); - case ShowHidePoiAction.TYPE: - return new ShowHidePoiAction(quickAction); + case ShowHidePoiAction.TYPE: + return new ShowHidePoiAction(quickAction); - case GPXAction.TYPE: - return new GPXAction(quickAction); + case GPXAction.TYPE: + return new GPXAction(quickAction); - case ParkingAction.TYPE: - return new ParkingAction(quickAction); + case ParkingAction.TYPE: + return new ParkingAction(quickAction); - case TakeAudioNoteAction.TYPE: - return new TakeAudioNoteAction(quickAction); + case TakeAudioNoteAction.TYPE: + return new TakeAudioNoteAction(quickAction); - case TakePhotoNoteAction.TYPE: - return new TakePhotoNoteAction(quickAction); + case TakePhotoNoteAction.TYPE: + return new TakePhotoNoteAction(quickAction); - case TakeVideoNoteAction.TYPE: - return new TakeVideoNoteAction(quickAction); + case TakeVideoNoteAction.TYPE: + return new TakeVideoNoteAction(quickAction); - case NavVoiceAction.TYPE: - return new NavVoiceAction(quickAction); + case NavVoiceAction.TYPE: + return new NavVoiceAction(quickAction); - case ShowHideOSMBugAction.TYPE: - return new ShowHideOSMBugAction(quickAction); + case ShowHideOSMBugAction.TYPE: + return new ShowHideOSMBugAction(quickAction); - case AddOSMBugAction.TYPE: - return new AddOSMBugAction(quickAction); + case AddOSMBugAction.TYPE: + return new AddOSMBugAction(quickAction); - case AddPOIAction.TYPE: - return new AddPOIAction(quickAction); + case AddPOIAction.TYPE: + return new AddPOIAction(quickAction); - case MapStyleAction.TYPE: - return new MapStyleAction(quickAction); + case MapStyleAction.TYPE: + return new MapStyleAction(quickAction); - case MapSourceAction.TYPE: - return new MapSourceAction(quickAction); + case MapSourceAction.TYPE: + return new MapSourceAction(quickAction); - case MapOverlayAction.TYPE: - return new MapOverlayAction(quickAction); + case MapOverlayAction.TYPE: + return new MapOverlayAction(quickAction); - case MapUnderlayAction.TYPE: - return new MapUnderlayAction(quickAction); + case MapUnderlayAction.TYPE: + return new MapUnderlayAction(quickAction); - case NavAddDestinationAction.TYPE: - return new NavAddDestinationAction(quickAction); + case NavAddDestinationAction.TYPE: + return new NavAddDestinationAction(quickAction); - case NavAddFirstIntermediateAction.TYPE: - return new NavAddFirstIntermediateAction(quickAction); + case NavAddFirstIntermediateAction.TYPE: + return new NavAddFirstIntermediateAction(quickAction); - case NavReplaceDestinationAction.TYPE: - return new NavReplaceDestinationAction(quickAction); + case NavReplaceDestinationAction.TYPE: + return new NavReplaceDestinationAction(quickAction); - case NavAutoZoomMapAction.TYPE: - return new NavAutoZoomMapAction(quickAction); + case NavAutoZoomMapAction.TYPE: + return new NavAutoZoomMapAction(quickAction); - default: - return quickAction; + case NavStartStopAction.TYPE: + return new NavStartStopAction(quickAction); + + case NavResumePauseAction.TYPE: + return new NavResumePauseAction(quickAction); + + default: + return quickAction; } } @@ -300,74 +322,80 @@ public class QuickActionFactory { switch (type) { - case NewAction.TYPE: - return R.drawable.ic_action_plus; + case NewAction.TYPE: + return R.drawable.ic_action_plus; - case MarkerAction.TYPE: - return R.drawable.ic_action_flag_dark; + case MarkerAction.TYPE: + return R.drawable.ic_action_flag_dark; - case FavoriteAction.TYPE: - return R.drawable.ic_action_fav_dark; + case FavoriteAction.TYPE: + return R.drawable.ic_action_fav_dark; - case ShowHideFavoritesAction.TYPE: - return R.drawable.ic_action_fav_dark; + case ShowHideFavoritesAction.TYPE: + return R.drawable.ic_action_fav_dark; - case ShowHidePoiAction.TYPE: - return R.drawable.ic_action_gabout_dark; + case ShowHidePoiAction.TYPE: + return R.drawable.ic_action_gabout_dark; - case GPXAction.TYPE: - return R.drawable.ic_action_flag_dark; + case GPXAction.TYPE: + return R.drawable.ic_action_flag_dark; - case ParkingAction.TYPE: - return R.drawable.ic_action_parking_dark; + case ParkingAction.TYPE: + return R.drawable.ic_action_parking_dark; - case TakeAudioNoteAction.TYPE: - return R.drawable.ic_action_micro_dark; + case TakeAudioNoteAction.TYPE: + return R.drawable.ic_action_micro_dark; - case TakePhotoNoteAction.TYPE: - return R.drawable.ic_action_photo_dark; + case TakePhotoNoteAction.TYPE: + return R.drawable.ic_action_photo_dark; - case TakeVideoNoteAction.TYPE: - return R.drawable.ic_action_video_dark; + case TakeVideoNoteAction.TYPE: + return R.drawable.ic_action_video_dark; - case NavVoiceAction.TYPE: - return R.drawable.ic_action_volume_up; + case NavVoiceAction.TYPE: + return R.drawable.ic_action_volume_up; - case ShowHideOSMBugAction.TYPE: - return R.drawable.ic_action_bug_dark; + case ShowHideOSMBugAction.TYPE: + return R.drawable.ic_action_bug_dark; - case AddOSMBugAction.TYPE: - return R.drawable.ic_action_bug_dark; + case AddOSMBugAction.TYPE: + return R.drawable.ic_action_bug_dark; - case AddPOIAction.TYPE: - return R.drawable.ic_action_gabout_dark; + case AddPOIAction.TYPE: + return R.drawable.ic_action_gabout_dark; - case MapStyleAction.TYPE: - return R.drawable.ic_map; + case MapStyleAction.TYPE: + return R.drawable.ic_map; - case MapSourceAction.TYPE: - return R.drawable.ic_world_globe_dark; + case MapSourceAction.TYPE: + return R.drawable.ic_world_globe_dark; - case MapOverlayAction.TYPE: - return R.drawable.ic_layer_top_dark; + case MapOverlayAction.TYPE: + return R.drawable.ic_layer_top_dark; - case MapUnderlayAction.TYPE: - return R.drawable.ic_layer_bottom_dark; + case MapUnderlayAction.TYPE: + return R.drawable.ic_layer_bottom_dark; - case NavAddDestinationAction.TYPE: - return R.drawable.ic_action_target; + case NavAddDestinationAction.TYPE: + return R.drawable.ic_action_target; - case NavAddFirstIntermediateAction.TYPE: - return R.drawable.ic_action_intermediate; + case NavAddFirstIntermediateAction.TYPE: + return R.drawable.ic_action_intermediate; - case NavReplaceDestinationAction.TYPE: - return R.drawable.ic_action_target; + case NavReplaceDestinationAction.TYPE: + return R.drawable.ic_action_target; - case NavAutoZoomMapAction.TYPE: - return R.drawable.ic_action_search_dark; + case NavAutoZoomMapAction.TYPE: + return R.drawable.ic_action_search_dark; - default: - return R.drawable.ic_action_plus; + case NavStartStopAction.TYPE: + return R.drawable.ic_action_start_navigation; + + case NavResumePauseAction.TYPE: + return R.drawable.ic_play_dark; + + default: + return R.drawable.ic_action_plus; } } @@ -375,74 +403,80 @@ public class QuickActionFactory { switch (type) { - case NewAction.TYPE: - return R.string.quick_action_new_action; + case NewAction.TYPE: + return R.string.quick_action_new_action; - case MarkerAction.TYPE: - return R.string.quick_action_add_marker; + case MarkerAction.TYPE: + return R.string.quick_action_add_marker; - case FavoriteAction.TYPE: - return R.string.quick_action_add_favorite; + case FavoriteAction.TYPE: + return R.string.quick_action_add_favorite; - case ShowHideFavoritesAction.TYPE: - return R.string.quick_action_showhide_favorites_title; + case ShowHideFavoritesAction.TYPE: + return R.string.quick_action_showhide_favorites_title; - case ShowHidePoiAction.TYPE: - return R.string.quick_action_showhide_poi_title; + case ShowHidePoiAction.TYPE: + return R.string.quick_action_showhide_poi_title; - case GPXAction.TYPE: - return R.string.quick_action_add_gpx; + case GPXAction.TYPE: + return R.string.quick_action_add_gpx; - case ParkingAction.TYPE: - return R.string.quick_action_add_parking; + case ParkingAction.TYPE: + return R.string.quick_action_add_parking; - case TakeAudioNoteAction.TYPE: - return R.string.quick_action_take_audio_note; + case TakeAudioNoteAction.TYPE: + return R.string.quick_action_take_audio_note; - case TakePhotoNoteAction.TYPE: - return R.string.quick_action_take_photo_note; + case TakePhotoNoteAction.TYPE: + return R.string.quick_action_take_photo_note; - case TakeVideoNoteAction.TYPE: - return R.string.quick_action_take_video_note; + case TakeVideoNoteAction.TYPE: + return R.string.quick_action_take_video_note; - case NavVoiceAction.TYPE: - return R.string.quick_action_navigation_voice; + case NavVoiceAction.TYPE: + return R.string.quick_action_navigation_voice; - case ShowHideOSMBugAction.TYPE: - return R.string.quick_action_showhide_osmbugs_title; + case ShowHideOSMBugAction.TYPE: + return R.string.quick_action_showhide_osmbugs_title; - case AddOSMBugAction.TYPE: - return R.string.quick_action_add_osm_bug; + case AddOSMBugAction.TYPE: + return R.string.quick_action_add_osm_bug; - case AddPOIAction.TYPE: - return R.string.quick_action_add_poi; + case AddPOIAction.TYPE: + return R.string.quick_action_add_poi; - case MapStyleAction.TYPE: - return R.string.quick_action_map_style; + case MapStyleAction.TYPE: + return R.string.quick_action_map_style; - case MapSourceAction.TYPE: - return R.string.quick_action_map_source; + case MapSourceAction.TYPE: + return R.string.quick_action_map_source; - case MapOverlayAction.TYPE: - return R.string.quick_action_map_overlay; + case MapOverlayAction.TYPE: + return R.string.quick_action_map_overlay; - case MapUnderlayAction.TYPE: - return R.string.quick_action_map_underlay; + case MapUnderlayAction.TYPE: + return R.string.quick_action_map_underlay; - case NavAddDestinationAction.TYPE: - return R.string.quick_action_add_destination; + case NavAddDestinationAction.TYPE: + return R.string.quick_action_add_destination; - case NavAddFirstIntermediateAction.TYPE: - return R.string.quick_action_add_first_intermediate; + case NavAddFirstIntermediateAction.TYPE: + return R.string.quick_action_add_first_intermediate; - case NavReplaceDestinationAction.TYPE: - return R.string.quick_action_replace_destination; + case NavReplaceDestinationAction.TYPE: + return R.string.quick_action_replace_destination; - case NavAutoZoomMapAction.TYPE: - return R.string.quick_action_auto_zoom; + case NavAutoZoomMapAction.TYPE: + return R.string.quick_action_auto_zoom; - default: - return R.string.quick_action_new_action; + case NavStartStopAction.TYPE: + return R.string.quick_action_start_stop_navigation; + + case NavResumePauseAction.TYPE: + return R.string.quick_action_resume_pause_navigation; + + default: + return R.string.quick_action_new_action; } } @@ -450,24 +484,26 @@ public class QuickActionFactory { switch (type) { - case NewAction.TYPE: - case MarkerAction.TYPE: - case ShowHideFavoritesAction.TYPE: - case ShowHidePoiAction.TYPE: - case ParkingAction.TYPE: - case TakeAudioNoteAction.TYPE: - case TakePhotoNoteAction.TYPE: - case TakeVideoNoteAction.TYPE: - case NavVoiceAction.TYPE: - case NavAddDestinationAction.TYPE: - case NavAddFirstIntermediateAction.TYPE: - case NavReplaceDestinationAction.TYPE: - case NavAutoZoomMapAction.TYPE: - case ShowHideOSMBugAction.TYPE: - return false; + case NewAction.TYPE: + case MarkerAction.TYPE: + case ShowHideFavoritesAction.TYPE: + case ShowHidePoiAction.TYPE: + case ParkingAction.TYPE: + case TakeAudioNoteAction.TYPE: + case TakePhotoNoteAction.TYPE: + case TakeVideoNoteAction.TYPE: + case NavVoiceAction.TYPE: + case NavAddDestinationAction.TYPE: + case NavAddFirstIntermediateAction.TYPE: + case NavReplaceDestinationAction.TYPE: + case NavAutoZoomMapAction.TYPE: + case ShowHideOSMBugAction.TYPE: + case NavStartStopAction.TYPE: + case NavResumePauseAction.TYPE: + return false; - default: - return true; + default: + return true; } } } diff --git a/OsmAnd/src/net/osmand/plus/quickaction/QuickActionsWidget.java b/OsmAnd/src/net/osmand/plus/quickaction/QuickActionsWidget.java index f72d0052a4..944d8d3c1f 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/QuickActionsWidget.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/QuickActionsWidget.java @@ -254,6 +254,10 @@ public class QuickActionsWidget extends LinearLayout { } }); } + if (!action.isActionEnable(application)) { + view.setEnabled(false); + view.setAlpha(0.5f); + } } if (land) { diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/NavResumePauseAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/NavResumePauseAction.java new file mode 100644 index 0000000000..40d485296a --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/NavResumePauseAction.java @@ -0,0 +1,77 @@ +package net.osmand.plus.quickaction.actions; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; +import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.quickaction.QuickAction; +import net.osmand.plus.routing.RoutingHelper; + +public class NavResumePauseAction extends QuickAction { + + public static final int TYPE = 26; + + public NavResumePauseAction() { + super(TYPE); + } + + public NavResumePauseAction(QuickAction quickAction) { + super(quickAction); + } + + @Override + public void execute(MapActivity activity) { + RoutingHelper routingHelper = activity.getRoutingHelper(); + if (routingHelper.isRoutePlanningMode()) { + routingHelper.setRoutePlanningMode(false); + routingHelper.setFollowingMode(true); + } else { + routingHelper.setRoutePlanningMode(true); + routingHelper.setFollowingMode(false); + routingHelper.setPauseNavigation(true); + } + activity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); + activity.refreshMap(); + } + + @Override + public void drawUI(ViewGroup parent, MapActivity activity) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.quick_action_with_text, parent, false); + + ((TextView) view.findViewById(R.id.text)).setText(R.string.quick_action_resume_pause_navigation_descr); + + parent.addView(view); + } + + @Override + public String getActionText(OsmandApplication application) { + RoutingHelper helper = application.getRoutingHelper(); + if (!helper.isRouteCalculated() || helper.isRoutePlanningMode()) { + return application.getString(R.string.continue_navigation); + } + return application.getString(R.string.pause_navigation); + } + + @Override + public int getIconRes(Context context) { + if (context instanceof MapActivity) { + RoutingHelper helper = ((MapActivity) context).getRoutingHelper(); + if (!helper.isRouteCalculated() || helper.isRoutePlanningMode()) { + return R.drawable.ic_play_dark; + } + return R.drawable.ic_pause; + } + return super.getIconRes(context); + } + + @Override + public boolean isActionEnable(OsmandApplication app) { + return app.getRoutingHelper().isRouteCalculated(); + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/NavStartStopAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/NavStartStopAction.java new file mode 100644 index 0000000000..d1edca5ca6 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/NavStartStopAction.java @@ -0,0 +1,91 @@ +package net.osmand.plus.quickaction.actions; + +import android.content.Context; +import android.support.v7.widget.SwitchCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; +import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.mapcontextmenu.other.DestinationReachedMenu; +import net.osmand.plus.quickaction.QuickAction; +import net.osmand.plus.routing.RoutingHelper; + +public class NavStartStopAction extends QuickAction { + + public static final int TYPE = 25; + private static final String KEY_DIALOG = "dialog"; + + public NavStartStopAction() { + super(TYPE); + } + + public NavStartStopAction(QuickAction quickAction) { + super(quickAction); + } + + @Override + public void execute(MapActivity activity) { + RoutingHelper helper = activity.getRoutingHelper(); + if (helper.isPauseNavigation() || helper.isFollowingMode()) { + if (Boolean.valueOf(getParams().get(KEY_DIALOG))) { + DestinationReachedMenu.show(activity); + } else { + activity.getMapLayers().getMapControlsLayer().stopNavigation(); + } + } else { + activity.getMapLayers().getMapControlsLayer().doRoute(false); + } + } + + @Override + public void drawUI(ViewGroup parent, MapActivity activity) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.quick_action_start_stop_navigation, parent, false); + + final SwitchCompat showDialogSwitch = (SwitchCompat) view.findViewById(R.id.show_dialog_switch); + + if (!getParams().isEmpty()) { + showDialogSwitch.setChecked(Boolean.valueOf(getParams().get(KEY_DIALOG))); + } + + view.findViewById(R.id.show_dialog_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showDialogSwitch.setChecked(!showDialogSwitch.isChecked()); + } + }); + + parent.addView(view); + } + + @Override + public boolean fillParams(View root, MapActivity activity) { + getParams().put(KEY_DIALOG, Boolean + .toString(((SwitchCompat) root.findViewById(R.id.show_dialog_switch)).isChecked())); + return true; + } + + @Override + public String getActionText(OsmandApplication application) { + RoutingHelper helper = application.getRoutingHelper(); + if (helper.isPauseNavigation() || helper.isFollowingMode()) { + return application.getString(R.string.cancel_navigation); + } + return application.getString(R.string.follow); + } + + @Override + public int getIconRes(Context context) { + if (context instanceof MapActivity) { + RoutingHelper helper = ((MapActivity) context).getRoutingHelper(); + if (helper.isPauseNavigation() || helper.isFollowingMode()) { + return R.drawable.ic_action_target; + } + return R.drawable.ic_action_start_navigation; + } + return super.getIconRes(context); + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index 4650b7be61..f1201150a7 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -119,7 +119,7 @@ public class RoutingHelper { return lastRouteCalcErrorShort; } - public void setPauseNaviation(boolean b) { + public void setPauseNavigation(boolean b) { this.isPauseNavigation = b; if (b) { if (app.getNavigationService() != null) { diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index bb45b710d3..25e8d787cc 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -350,7 +350,7 @@ public class MapControlsLayer extends OsmandMapLayer { } } - protected void clickRouteCancel() { + public void stopNavigation() { mapRouteInfoMenu.hide(); if (mapActivity.getRoutingHelper().isFollowingMode()) { mapActivity.getMapActions().stopNavigationActionConfirm(); @@ -359,6 +359,10 @@ public class MapControlsLayer extends OsmandMapLayer { } } + protected void clickRouteCancel() { + stopNavigation(); + } + protected void clickRouteGo() { if (app.getTargetPointsHelper().getPointToNavigate() != null) { mapRouteInfoMenu.hide();