diff --git a/OsmAnd/res/drawable/first_splash_screen_free.xml b/OsmAnd/res/drawable/first_splash_screen_free.xml
index b3d6f99388..aec9198e4d 100644
--- a/OsmAnd/res/drawable/first_splash_screen_free.xml
+++ b/OsmAnd/res/drawable/first_splash_screen_free.xml
@@ -2,9 +2,9 @@
- -
+
-
\ No newline at end of file
diff --git a/OsmAnd/res/drawable/first_splash_screen_free_dev.xml b/OsmAnd/res/drawable/first_splash_screen_free_dev.xml
index b3d6f99388..aec9198e4d 100644
--- a/OsmAnd/res/drawable/first_splash_screen_free_dev.xml
+++ b/OsmAnd/res/drawable/first_splash_screen_free_dev.xml
@@ -2,9 +2,9 @@
- -
+
-
\ No newline at end of file
diff --git a/OsmAnd/res/drawable/first_splash_screen_plus.xml b/OsmAnd/res/drawable/first_splash_screen_plus.xml
index 1dc65ed611..278da90a36 100644
--- a/OsmAnd/res/drawable/first_splash_screen_plus.xml
+++ b/OsmAnd/res/drawable/first_splash_screen_plus.xml
@@ -2,9 +2,9 @@
- -
+
-
\ No newline at end of file
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-b+hsb/strings.xml b/OsmAnd/res/values-b+hsb/strings.xml
index 0c2e62def8..62fa29ee7e 100644
--- a/OsmAnd/res/values-b+hsb/strings.xml
+++ b/OsmAnd/res/values-b+hsb/strings.xml
@@ -276,8 +276,8 @@
Mjenje detailow
Awtorizacija njewuspěšna
Po mjenje sortować
- "Přerězna spěšnosć: %1$s "
- "Maksimalna spěšnosć: %1$s "
+ Přerězna spěšnosć: %1$s
+ Maksimalna spěšnosć: %1$s
Přerězna wysokosć: %1$s
Přizjewić
Wužiwar
@@ -381,7 +381,7 @@
Dróhowe mjena (TTS)
Błyskače
Wobchadne warnowanja
- "Karta: "
+ Karta:
šěr %1$.3f, doł %2$.3f
Cil
do:
@@ -603,7 +603,7 @@
Tuchwilne srjedźišćo karty
Wuchadźišćo:
We wokolinje pytać
- "Mjeno dataje: "
+ Mjeno dataje:
Dataja ze samsnym mjenom hižo eksistuje.
Doma
Přećeljo
diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml
index 743fbf734a..6087b878eb 100644
--- a/OsmAnd/res/values-be-rBY/strings.xml
+++ b/OsmAnd/res/values-be-rBY/strings.xml
@@ -1,4 +1,5 @@
-Piešachodnyja pierachody
+
+Piešachodnyja pierachody
Styl aŭtadaroh
Pa zmoŭčańnі
Aranžavy
@@ -2749,4 +2750,14 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd
Adliehlasć = Min./Maks.
Min./Maks.
-
\ No newline at end of file
+ \\022 Dadatak Mapillary z vuličnymi vyjavami
+\n
+\n • Vidžet-liniejka dlia vymiarenniaŭ dystancyj
+\n
+\n • Razdzielienyja GPX-intervaly z padrabiaznaj infarmacyjaj ab vašym treku
+\n
+\n • Inšyja paliapšenni i vypraŭlienni chibaŭ
+\n
+\n
+ Paŭprazrysty ružovy
+
diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml
index 3f0441b2f9..26585219ca 100644
--- a/OsmAnd/res/values-be/strings.xml
+++ b/OsmAnd/res/values-be/strings.xml
@@ -1,4 +1,5 @@
-Без аўтаматычнага маштабаваньня
+
+Без аўтаматычнага маштабаваньня
Буйней
Для сярэдняга маштаба
Драбней
@@ -238,10 +239,10 @@
Вы ўжо абралі пункт прызначэньня:
Пункты прызначэньня
Прамежкавы пункт прызначэньня %1$s занадта далёка ад бліжэйшай дарогі.
- Вы дасягнулі прамежкавага пункта прызначэньня
+ Вы дасягнулі прамежкавага пункта
Дадаць прамежкавым пунктам прызначэньня
Прамежкавы пункт прызначэньня
- Канцавы пункт занадта далёка ад найбліжэйшай дарогі.
+ Канцавы пункт занадта далёка ад бліжэйшай дарогі.
Дадаць тэг
Пашыраны рэжым…
Паркоўка
@@ -380,7 +381,7 @@
Прапарцыйнай памяці %4$s МБ (Абмежаваньне Android %5$s МБ, Dalvik %6$s МБ).
Усяго фізічнай памяці
- Пачатковы пункт занадта далёка ад найбліжэйшай дарогі.
+ Пачатковы пункт занадта далёка ад бліжэйшай дарогі.
Агульныя месцы
Забраць машыну са стаянкі
Папярэджаньне
@@ -2798,4 +2799,14 @@
Адлегласць = Мін./Макс.
Мін./Макс.
-
\ No newline at end of file
+ Паўпразрысты ружовы
+ \\022 Дадатак Mapillary з вулічнымі выявамі
+\n
+\n • Віджэт-лінейка для вымярэнняў дыстанцый
+\n
+\n • Раздзеленыя GPX-інтэрвалы з падрабязнай інфармацыяй аб вашым трэку
+\n
+\n • Іншыя паляпшэнні і выпраўленні хібаў
+\n
+\n
+
diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml
index c7a7b5faed..d1de323a8c 100644
--- a/OsmAnd/res/values-uk/strings.xml
+++ b/OsmAnd/res/values-uk/strings.xml
@@ -1,4 +1,5 @@
-
+
+
Швидко
Круговий рух : %1$d з’їзд
@@ -2933,4 +2934,14 @@
Макс./мін.
Мін/макс
-
\ No newline at end of file
+ \\022 Втулок Mapillary з вуличними зображеннями
+\n
+\n • Віджет-лінійка для вимірювання дистанцій
+\n
+\n • Розділені GPX-інтервали з докладною інформацією про Ваш трек
+\n
+\n • Інші поліпшення й виправлення помилок
+\n
+\n
+ Напівпрозорий рожевий
+
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/SecondSplashScreenFragment.java b/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java
index e71254190a..76b01d9d78 100644
--- a/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java
+++ b/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java
@@ -6,12 +6,14 @@ import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
+import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.MapActivity;
@@ -20,7 +22,14 @@ import net.osmand.plus.helpers.AndroidUiHelper;
public class SecondSplashScreenFragment extends Fragment {
public static final String TAG = "SecondSplashScreenFragment";
public static boolean SHOW = true;
- private static final int SECOND_SPLASH_TIME_OUT = 2000;
+ private static final int SECOND_SPLASH_TIME_OUT = 5000;
+ private boolean started = false;
+ private FragmentActivity activity;
+ private OsmandApplication app;
+
+ public OsmandApplication getMyApplication() {
+ return ((OsmandApplication) activity.getApplication());
+ }
private boolean hasNavBar() {
int id = getResources().getIdentifier("config_showNavigationBar", "bool", "android");
@@ -68,24 +77,26 @@ public class SecondSplashScreenFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- RelativeLayout view = new RelativeLayout(getActivity());
+ activity = getActivity();
+ app = getMyApplication();
+
+ RelativeLayout view = new RelativeLayout(activity);
+ view.setOnClickListener(null);
view.setBackgroundColor(getResources().getColor(R.color.map_background_color_light));
ImageView logo = new ImageView(getContext());
- if (Version.isFreeVersion(((MapActivity) getActivity()).getMyApplication())) {
+ if (Version.isFreeVersion(app)) {
logo.setImageDrawable(getResources().getDrawable(R.drawable.ic_logo_splash_osmand));
- } else if ((Version.isPaidVersion(((MapActivity) getActivity()).getMyApplication())) ||
- (Version.isDeveloperVersion(((MapActivity) getActivity()).getMyApplication()))) {
+ } else if (Version.isPaidVersion(app) || Version.isDeveloperVersion(app)) {
logo.setImageDrawable(getResources().getDrawable(R.drawable.ic_logo_splash_osmand_plus));
}
RelativeLayout.LayoutParams logoLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
logoLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
logoLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
- ImageView text = new ImageView(getActivity());
- if (Version.isFreeVersion(((MapActivity) getActivity()).getMyApplication())) {
+ ImageView text = new ImageView(activity);
+ if (Version.isFreeVersion(app)) {
text.setImageDrawable(getResources().getDrawable(R.drawable.image_text_osmand));
- } else if ((Version.isPaidVersion(((MapActivity) getActivity()).getMyApplication())) ||
- (Version.isDeveloperVersion(((MapActivity) getActivity()).getMyApplication()))) {
+ } else if (Version.isPaidVersion(app) || Version.isDeveloperVersion(app)) {
text.setImageDrawable(getResources().getDrawable(R.drawable.image_text_osmand_plus));
}
RelativeLayout.LayoutParams textLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
@@ -100,10 +111,10 @@ public class SecondSplashScreenFragment extends Fragment {
int textPaddingLeft = 0;
int textPaddingRight = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N_MR1) {
- if (AndroidUiHelper.getScreenOrientation(getActivity()) == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
+ if (AndroidUiHelper.getScreenOrientation(activity) == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
logoPaddingLeft = getNavigationBarWidth();
textPaddingLeft = getNavigationBarWidth();
- } else if (AndroidUiHelper.getScreenOrientation(getActivity()) == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) {
+ } else if (AndroidUiHelper.getScreenOrientation(activity) == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) {
logoPaddingRight = getNavigationBarWidth();
textPaddingRight = getNavigationBarWidth();
}
@@ -123,32 +134,36 @@ public class SecondSplashScreenFragment extends Fragment {
return view;
}
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- new Handler().postDelayed(new Runnable() {
-
- @Override
- public void run() {
- getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
- if (((MapActivity)getActivity()).getMyApplication().getSettings().MAP_SCREEN_ORIENTATION.get() != getActivity().getRequestedOrientation()) {
- getActivity().setRequestedOrientation(((MapActivity)getActivity()).getMyApplication().getSettings().MAP_SCREEN_ORIENTATION.get());
- // can't return from this method we are not sure if activity will be recreated or not
- }
- getActivity().getSupportFragmentManager().beginTransaction().remove(SecondSplashScreenFragment.this).commitAllowingStateLoss();
- }
- }, SECOND_SPLASH_TIME_OUT);
- }
-
@Override
public void onResume() {
super.onResume();
- ((MapActivity)getActivity()).disableDrawer();
+ if (activity instanceof MapActivity) {
+ ((MapActivity) activity).disableDrawer();
+ }
+ if (!started) {
+ started = true;
+ new Handler().postDelayed(new Runnable() {
+
+ @Override
+ public void run() {
+ if (activity instanceof MapActivity) {
+ activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+ if (app.getSettings().MAP_SCREEN_ORIENTATION.get() != activity.getRequestedOrientation()) {
+ activity.setRequestedOrientation(app.getSettings().MAP_SCREEN_ORIENTATION.get());
+ // can't return from this method we are not sure if activity will be recreated or not
+ }
+ }
+ activity.getSupportFragmentManager().beginTransaction().remove(SecondSplashScreenFragment.this).commitAllowingStateLoss();
+ }
+ }, SECOND_SPLASH_TIME_OUT);
+ }
}
@Override
public void onPause() {
super.onPause();
- ((MapActivity)getActivity()).enableDrawer();
+ if (activity instanceof MapActivity) {
+ ((MapActivity) activity).enableDrawer();
+ }
}
}
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();