diff --git a/android/res/drawable-hdpi/ic_opentable.png b/android/res/drawable-hdpi/ic_opentable.png
index fff32a337c..d3f2f7971d 100644
Binary files a/android/res/drawable-hdpi/ic_opentable.png and b/android/res/drawable-hdpi/ic_opentable.png differ
diff --git a/android/res/drawable-hdpi/ic_place_page_phone.png b/android/res/drawable-hdpi/ic_place_page_phone.png
new file mode 100644
index 0000000000..5342c8849d
Binary files /dev/null and b/android/res/drawable-hdpi/ic_place_page_phone.png differ
diff --git a/android/res/drawable-hdpi/ic_route_remove.png b/android/res/drawable-hdpi/ic_route_remove.png
new file mode 100644
index 0000000000..33bd5f957f
Binary files /dev/null and b/android/res/drawable-hdpi/ic_route_remove.png differ
diff --git a/android/res/drawable-hdpi/ic_route_via.png b/android/res/drawable-hdpi/ic_route_via.png
new file mode 100644
index 0000000000..322765336a
Binary files /dev/null and b/android/res/drawable-hdpi/ic_route_via.png differ
diff --git a/android/res/drawable-mdpi/ic_opentable.png b/android/res/drawable-mdpi/ic_opentable.png
index ae53c7be0c..10a78cfdd5 100644
Binary files a/android/res/drawable-mdpi/ic_opentable.png and b/android/res/drawable-mdpi/ic_opentable.png differ
diff --git a/android/res/drawable-mdpi/ic_place_page_phone.png b/android/res/drawable-mdpi/ic_place_page_phone.png
new file mode 100644
index 0000000000..19aaf77f54
Binary files /dev/null and b/android/res/drawable-mdpi/ic_place_page_phone.png differ
diff --git a/android/res/drawable-mdpi/ic_route_remove.png b/android/res/drawable-mdpi/ic_route_remove.png
new file mode 100644
index 0000000000..25d3b37525
Binary files /dev/null and b/android/res/drawable-mdpi/ic_route_remove.png differ
diff --git a/android/res/drawable-mdpi/ic_route_via.png b/android/res/drawable-mdpi/ic_route_via.png
new file mode 100644
index 0000000000..7d0aa0fd31
Binary files /dev/null and b/android/res/drawable-mdpi/ic_route_via.png differ
diff --git a/android/res/drawable-xhdpi/ic_opentable.png b/android/res/drawable-xhdpi/ic_opentable.png
index 1d7641a1ef..98463bacaf 100644
Binary files a/android/res/drawable-xhdpi/ic_opentable.png and b/android/res/drawable-xhdpi/ic_opentable.png differ
diff --git a/android/res/drawable-xhdpi/ic_place_page_phone.png b/android/res/drawable-xhdpi/ic_place_page_phone.png
new file mode 100644
index 0000000000..11a7f833fe
Binary files /dev/null and b/android/res/drawable-xhdpi/ic_place_page_phone.png differ
diff --git a/android/res/drawable-xhdpi/ic_route_remove.png b/android/res/drawable-xhdpi/ic_route_remove.png
new file mode 100644
index 0000000000..8f963f424c
Binary files /dev/null and b/android/res/drawable-xhdpi/ic_route_remove.png differ
diff --git a/android/res/drawable-xhdpi/ic_route_via.png b/android/res/drawable-xhdpi/ic_route_via.png
new file mode 100644
index 0000000000..b7851c18e1
Binary files /dev/null and b/android/res/drawable-xhdpi/ic_route_via.png differ
diff --git a/android/res/drawable-xxhdpi/ic_opentable.png b/android/res/drawable-xxhdpi/ic_opentable.png
index 2d8fbad633..25411cae08 100644
Binary files a/android/res/drawable-xxhdpi/ic_opentable.png and b/android/res/drawable-xxhdpi/ic_opentable.png differ
diff --git a/android/res/drawable-xxhdpi/ic_place_page_phone.png b/android/res/drawable-xxhdpi/ic_place_page_phone.png
new file mode 100644
index 0000000000..6a6fc89370
Binary files /dev/null and b/android/res/drawable-xxhdpi/ic_place_page_phone.png differ
diff --git a/android/res/drawable-xxhdpi/ic_route_remove.png b/android/res/drawable-xxhdpi/ic_route_remove.png
new file mode 100644
index 0000000000..d1c238d2ed
Binary files /dev/null and b/android/res/drawable-xxhdpi/ic_route_remove.png differ
diff --git a/android/res/drawable-xxhdpi/ic_route_via.png b/android/res/drawable-xxhdpi/ic_route_via.png
new file mode 100644
index 0000000000..c5259a6c93
Binary files /dev/null and b/android/res/drawable-xxhdpi/ic_route_via.png differ
diff --git a/android/res/drawable-xxxhdpi/ic_opentable.png b/android/res/drawable-xxxhdpi/ic_opentable.png
index 1b1de05206..26682a15f5 100644
Binary files a/android/res/drawable-xxxhdpi/ic_opentable.png and b/android/res/drawable-xxxhdpi/ic_opentable.png differ
diff --git a/android/res/drawable-xxxhdpi/ic_place_page_phone.png b/android/res/drawable-xxxhdpi/ic_place_page_phone.png
new file mode 100644
index 0000000000..9cd6c3e601
Binary files /dev/null and b/android/res/drawable-xxxhdpi/ic_place_page_phone.png differ
diff --git a/android/res/drawable-xxxhdpi/ic_route_remove.png b/android/res/drawable-xxxhdpi/ic_route_remove.png
new file mode 100644
index 0000000000..2f7ee06a32
Binary files /dev/null and b/android/res/drawable-xxxhdpi/ic_route_remove.png differ
diff --git a/android/res/drawable-xxxhdpi/ic_route_via.png b/android/res/drawable-xxxhdpi/ic_route_via.png
new file mode 100644
index 0000000000..e8316e978f
Binary files /dev/null and b/android/res/drawable-xxxhdpi/ic_route_via.png differ
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index 2c1c66d2dc..a6dbcfefaf 100644
--- a/android/res/values/strings.xml
+++ b/android/res/values/strings.xml
@@ -663,6 +663,8 @@
Route to
Navigation is available only from your current location.
Do you want us to plan a route from your current location?
+ Add stop
+ Remove stop
Next
Add Schedule
Delete Schedule
diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java
index c2577f48f4..19af8d699b 100644
--- a/android/src/com/mapswithme/maps/MwmActivity.java
+++ b/android/src/com/mapswithme/maps/MwmActivity.java
@@ -1866,6 +1866,18 @@ public class MwmActivity extends BaseMwmFragmentActivity
ThemeSwitcher.restart(isMapRendererActive());
}
+ @Override
+ public void onAddedStop()
+ {
+ closePlacePage();
+ }
+
+ @Override
+ public void onRemovedStop()
+ {
+ closePlacePage();
+ }
+
private void updateSearchBar()
{
if (!TextUtils.isEmpty(SearchEngine.getQuery()))
diff --git a/android/src/com/mapswithme/maps/bookmarks/data/MapObject.java b/android/src/com/mapswithme/maps/bookmarks/data/MapObject.java
index c89c8e2988..08dbc41c26 100644
--- a/android/src/com/mapswithme/maps/bookmarks/data/MapObject.java
+++ b/android/src/com/mapswithme/maps/bookmarks/data/MapObject.java
@@ -317,6 +317,28 @@ public class MapObject implements Parcelable
dest.writeTypedList(mBanners);
}
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ MapObject mapObject = (MapObject) o;
+
+ if (mMwmVersion != mapObject.mMwmVersion) return false;
+ if (mFeatureIndex != mapObject.mFeatureIndex) return false;
+ return mMwmName.equals(mapObject.mMwmName);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = mMwmName.hashCode();
+ result = 31 * result + (int) (mMwmVersion ^ (mMwmVersion >>> 32));
+ result = 31 * result + mFeatureIndex;
+ return result;
+ }
+
public static final Creator CREATOR = new Creator()
{
@Override
diff --git a/android/src/com/mapswithme/maps/routing/RoutePointInfo.java b/android/src/com/mapswithme/maps/routing/RoutePointInfo.java
index 96fa983332..2b7d5a47a6 100644
--- a/android/src/com/mapswithme/maps/routing/RoutePointInfo.java
+++ b/android/src/com/mapswithme/maps/routing/RoutePointInfo.java
@@ -10,9 +10,24 @@ import java.lang.annotation.RetentionPolicy;
public class RoutePointInfo implements Parcelable
{
- public static final int ROUTE_MARK_START = 0;
- public static final int ROUTE_MARK_INTERMEDIATE = 1;
- public static final int ROUTE_MARK_FINISH = 2;
+ public static final Creator CREATOR = new Creator()
+ {
+ @Override
+ public RoutePointInfo createFromParcel(Parcel in)
+ {
+ return new RoutePointInfo(in);
+ }
+
+ @Override
+ public RoutePointInfo[] newArray(int size)
+ {
+ return new RoutePointInfo[size];
+ }
+ };
+
+ static final int ROUTE_MARK_START = 0;
+ static final int ROUTE_MARK_INTERMEDIATE = 1;
+ static final int ROUTE_MARK_FINISH = 2;
@Retention(RetentionPolicy.SOURCE)
@IntDef({ ROUTE_MARK_START, ROUTE_MARK_INTERMEDIATE, ROUTE_MARK_FINISH })
@@ -35,20 +50,20 @@ public class RoutePointInfo implements Parcelable
this(in.readInt() /* mMarkType */, in.readInt() /* mIntermediateIndex */);
}
- public static final Creator CREATOR = new Creator()
+ boolean isIntermediatePoint()
{
- @Override
- public RoutePointInfo createFromParcel(Parcel in)
- {
- return new RoutePointInfo(in);
- }
+ return mMarkType == ROUTE_MARK_INTERMEDIATE;
+ }
- @Override
- public RoutePointInfo[] newArray(int size)
- {
- return new RoutePointInfo[size];
- }
- };
+ boolean isFinishPoint()
+ {
+ return mMarkType == ROUTE_MARK_FINISH;
+ }
+
+ boolean isStartPoint()
+ {
+ return mMarkType == ROUTE_MARK_START;
+ }
@Override
public int describeContents()
diff --git a/android/src/com/mapswithme/maps/routing/RoutingController.java b/android/src/com/mapswithme/maps/routing/RoutingController.java
index 0a3150bfd4..030361e153 100644
--- a/android/src/com/mapswithme/maps/routing/RoutingController.java
+++ b/android/src/com/mapswithme/maps/routing/RoutingController.java
@@ -73,6 +73,8 @@ public class RoutingController
void onUberError(@NonNull Uber.ErrorCode code);
void onNavigationCancelled();
void onNavigationStarted();
+ void onAddedStop();
+ void onRemovedStop();
/**
* @param progress progress to be displayed.
@@ -277,7 +279,10 @@ public class RoutingController
RoutePoint[] routePoints = Framework.nativeGetRoutePoints();
if (routePoints.length < 2)
+ {
+ setBuildState(BuildState.NONE);
return;
+ }
mLogger.d(TAG, "build");
mUberRequestHandled = false;
@@ -433,8 +438,47 @@ public class RoutingController
LocationHelper.INSTANCE.restart();
}
+ public void addStop(@NonNull MapObject mapObject)
+ {
+ RoutePointInfo info = new RoutePointInfo(RoutePointInfo.ROUTE_MARK_INTERMEDIATE, 0);
+ Framework.nativeAddRoutePoint(mapObject.getLat(), mapObject.getLon(),
+ MapObject.isOfType(MapObject.MY_POSITION, mapObject), info);
+ build();
+ if (mContainer != null)
+ mContainer.onAddedStop();
+ }
+
+ public void removeStop(@NonNull MapObject mapObject)
+ {
+ RoutePointInfo info = mapObject.getRoutePointInfo();
+ if (info == null)
+ throw new AssertionError("A stop point must have the route point info!");
+
+ Framework.nativeRemoveRoutePoint(info);
+ if (info.isFinishPoint())
+ mEndPoint = null;
+ if (info.isStartPoint())
+ mStartPoint = null;
+ build();
+ if (mContainer != null)
+ mContainer.onRemovedStop();
+ }
+
+ public boolean isStopPointAllowed()
+ {
+ return Framework.nativeCouldAddIntermediatePoint();
+ }
+
+ public boolean isRoutePoint(@NonNull MapObject mapObject)
+ {
+ return mapObject.getRoutePointInfo() != null;
+ }
+
private void suggestRebuildRoute()
{
+ if (mContainer == null)
+ return;
+
final AlertDialog.Builder builder = new AlertDialog.Builder(mContainer.getActivity())
.setMessage(R.string.p2p_reroute_from_current)
.setCancelable(false)
diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java
index 746956b5fd..982c651a62 100644
--- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java
+++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java
@@ -138,6 +138,36 @@ final class PlacePageButtons
}
},
+ ROUTE_ADD
+ {
+ @Override
+ int getTitle()
+ {
+ return R.string.p2p_add_stop;
+ }
+
+ @Override
+ int getIcon()
+ {
+ return R.drawable.ic_route_via;
+ }
+ },
+
+ ROUTE_REMOVE
+ {
+ @Override
+ int getTitle()
+ {
+ return R.string.p2p_remove_stop;
+ }
+
+ @Override
+ int getIcon()
+ {
+ return R.drawable.ic_route_remove;
+ }
+ },
+
SHARE
{
@Override
@@ -179,7 +209,7 @@ final class PlacePageButtons
@Override
int getIcon()
{
- return R.drawable.ic_phone;
+ return R.drawable.ic_place_page_phone;
}
};
@@ -212,10 +242,18 @@ final class PlacePageButtons
int from = res.indexOf(Item.ROUTE_FROM);
if (from > -1)
{
+ int addStop = res.indexOf(Item.ROUTE_ADD);
int to = res.indexOf(Item.ROUTE_TO);
- if (to > from && to >= MAX_BUTTONS)
+ if ((to > from && to >= MAX_BUTTONS) || (to > from && addStop >= MAX_BUTTONS))
Collections.swap(res, from, to);
+ if (addStop >= MAX_BUTTONS)
+ {
+ from = res.indexOf(Item.ROUTE_FROM);
+ if (addStop > from)
+ Collections.swap(res, from, addStop);
+ }
+
preserveRoutingButtons(res, Item.CALL);
preserveRoutingButtons(res, Item.BOOKING);
preserveRoutingButtons(res, Item.BOOKING_SEARCH);
@@ -235,8 +273,18 @@ final class PlacePageButtons
items.remove(pos);
items.add(MAX_BUTTONS, itemToShift);
int to = items.indexOf(Item.ROUTE_TO);
- items.remove(Item.ROUTE_FROM);
- items.add(to + 1, Item.ROUTE_FROM);
+ if (items.indexOf(Item.ROUTE_ADD) > -1)
+ {
+ items.remove(Item.ROUTE_ADD);
+ items.remove(Item.ROUTE_FROM);
+ items.add(to + 1, Item.ROUTE_ADD);
+ items.add(MAX_BUTTONS, Item.ROUTE_FROM);
+ }
+ else
+ {
+ items.remove(Item.ROUTE_FROM);
+ items.add(to + 1, Item.ROUTE_FROM);
+ }
}
}
diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java
index f9a2ec26a1..34babed468 100644
--- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java
+++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java
@@ -522,6 +522,16 @@ public class PlacePageView extends RelativeLayout
}
break;
+ case ROUTE_ADD:
+ if (mMapObject != null)
+ RoutingController.get().addStop(mMapObject);
+ break;
+
+ case ROUTE_REMOVE:
+ if (mMapObject != null)
+ RoutingController.get().removeStop(mMapObject);
+ break;
+
case BOOKING:
case OPENTABLE:
onSponsoredClick(true /* book */, false);
@@ -1388,6 +1398,12 @@ public class PlacePageView extends RelativeLayout
private void setButtons(@NonNull MapObject mapObject, boolean showBackButton, boolean showRoutingButton)
{
List buttons = new ArrayList<>();
+ if (RoutingController.get().isRoutePoint(mapObject))
+ {
+ buttons.add(PlacePageButtons.Item.ROUTE_REMOVE);
+ mButtons.setItems(buttons);
+ return;
+ }
if (showBackButton || ParsedMwmRequest.isPickPointMode())
buttons.add(PlacePageButtons.Item.BACK);
@@ -1421,6 +1437,8 @@ public class PlacePageView extends RelativeLayout
{
buttons.add(PlacePageButtons.Item.ROUTE_FROM);
buttons.add(PlacePageButtons.Item.ROUTE_TO);
+ if (RoutingController.get().isStopPointAllowed())
+ buttons.add(PlacePageButtons.Item.ROUTE_ADD);
}
buttons.add(PlacePageButtons.Item.SHARE);
diff --git a/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings
index be7d98a4bc..6206edd0fa 100644
--- a/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "هل ترغب في أن نرسم مسار لك من موقعك الحالي؟";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "التالي";
"editor_time_add" = "إضافة جدول";
diff --git a/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings
index 262855d0d1..16f0511957 100644
--- a/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Chcete, abychom naplánovali trasu z vašeho současného umístění?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Další";
"editor_time_add" = "Přidat rozvrh";
diff --git a/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings
index 6951f3f3a4..99d80f4409 100644
--- a/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Ønsker du, at vi planlægger en rute fra din nuværende placering?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Næste";
"editor_time_add" = "Tilføj tidsplan";
diff --git a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings
index 609712ffca..0e5512804c 100644
--- a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Soll eine Route von Ihrem aktuellen Standort aus berechnet werden?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Weiter";
"editor_time_add" = "Zeitplan hinzufügen";
diff --git a/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings
index 47f8bdd21e..c907268d9c 100644
--- a/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Θέλετε να σχεδιάσουμε μια διαδρομή από την τρέχουσα θέση σας;";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Επόμενη";
"editor_time_add" = "Προσθέσετε χρονοδιάγραμμα";
diff --git a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings
index 73c2995663..96b6434836 100644
--- a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Do you want us to plan a route from your current location?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Next";
"editor_time_add" = "Add Schedule";
diff --git a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings
index 4eb296e4f7..38c130064f 100644
--- a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Do you want us to plan a route from your current location?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Next";
"editor_time_add" = "Add Schedule";
diff --git a/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings
index 92c05c09b2..6d3f9de2de 100644
--- a/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "¿Quieres que planeemos un ruta desde tu ubicación actual?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Siguiente";
"editor_time_add" = "Añadir horario";
diff --git a/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings
index 5e5bfc37ac..819d0b8f2c 100644
--- a/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Haluatko valita vaihtoehtoisen reitin?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Seuraava";
"editor_time_add" = "Lisää aikataulu";
diff --git a/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings
index eedd689b8e..871a2519ef 100644
--- a/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Souhaitez-vous que nous planifiions un itinéraire à partir de votre emplacement actuel ?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Suivant";
"editor_time_add" = "Ajouter au planning";
diff --git a/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings
index c31dee67d9..d7f5a54657 100644
--- a/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Szeretne útvonaltervet készíttetni a jelenlegi pozíciójától?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Következő";
"editor_time_add" = "Időrend felvitele";
diff --git a/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings
index aa49e225e1..9837380e52 100644
--- a/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Apakah Anda ingin kami merencanakan sebuah rute dari lokasi Anda saat ini?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Berikut";
"editor_time_add" = "Tambah Jadwal";
diff --git a/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings
index 5dcd23a896..7b98ba870e 100644
--- a/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Vuoi che impostiamo il percorso dalla tua posizione corrente?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Avanti";
"editor_time_add" = "Aggiungi orari";
diff --git a/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings
index 54e4f19cd1..21357e4160 100644
--- a/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "現在位置からのルートを作成しますか?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "次へ";
"editor_time_add" = "スケジュール追加";
diff --git a/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings
index 657bb5ba6c..3701f3187d 100644
--- a/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "현재 위치에서 경로를 계획하시겠습니까?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "다음";
"editor_time_add" = "스케줄 추가";
diff --git a/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings
index 9b45fb71fe..5a2c5f5cfb 100644
--- a/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Vil du vi skal planlegge en rute fra din nåværende posisjon?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Neste";
"editor_time_add" = "Legg til tidsrom";
diff --git a/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings
index bb1ffb3de6..d4c9d47473 100644
--- a/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Wilt u dat wij een route plannen vanaf uw huidige locatie?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Volgende";
"editor_time_add" = "Schema toevoegen";
diff --git a/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings
index a68789cf6b..af6cce9e5c 100644
--- a/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Czy chcesz, byśmy zaplanowali trasę z Twojej bieżącej lokalizacji?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Dalej";
"editor_time_add" = "Dodaj harmonogram";
diff --git a/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings
index a7902c828c..f85654942d 100644
--- a/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Deseja planejar uma rota a partir da sua localização atual?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Próxima";
"editor_time_add" = "Adicionar Horário";
diff --git a/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings
index 5a1af98080..2d9797e781 100644
--- a/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Doriți să vă planificăm o rută având ca punct de pornire locația actuală?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Următoarea";
"editor_time_add" = "Adăugare planificare";
diff --git a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings
index 70173f5ac8..777b0874f6 100644
--- a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Хотите перестроить маршрут от вашего местоположения?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Далее";
"editor_time_add" = "Добавить расписание";
diff --git a/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings
index 5a27e6480b..ec1721591a 100644
--- a/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Doriți să vă planificăm o rută având ca punct de pornire locația actuală?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Nasledujúca";
"editor_time_add" = "Pridať rozvrh";
diff --git a/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings
index d8ecda3546..e634ada139 100644
--- a/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Vill du att vi planerar en färdväg från din nuvarande plats?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Nästa";
"editor_time_add" = "Lägg till schema";
diff --git a/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings
index 199acefd4b..728a9694f9 100644
--- a/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "คุณต้องการให้เราาวงแผนเส้นทางจากสถานที่ตั้งปัจจุบันของคุณหรือไม่?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "ถัดไป";
"editor_time_add" = "เพิ่มวัน";
diff --git a/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings
index c7924e5680..20686a6640 100644
--- a/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Mevcut konumunuzdan bir rota planlamamızı ister misiniz?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Sonraki";
"editor_time_add" = "Plan Ekle";
diff --git a/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings
index 53d53bfc64..88ca67b4f9 100644
--- a/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Хочете спланувати маршрут із поточного місцезнаходження?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Далі";
"editor_time_add" = "Додати розклад";
diff --git a/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings
index 77e146bb34..c80c6a34ae 100644
--- a/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "Bạn có muốn chúng tôi vạch đường từ vị trí hiện tại của bạn không?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "Tiếp theo";
"editor_time_add" = "Thêm lịch biểu";
diff --git a/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings
index dc6eb2d527..47069d1c69 100644
--- a/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "你是否想要规划当前位置的路线?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "下一页";
"editor_time_add" = "添加计划";
diff --git a/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings
index 9435f7c43a..d0fc269228 100644
--- a/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings
@@ -1053,6 +1053,10 @@
"p2p_reroute_from_current" = "你是否想要規劃目前位置的路線?";
+"p2p_add_stop" = "Add stop";
+
+"p2p_remove_stop" = "Remove stop";
+
"whats_new_next_button" = "下一頁";
"editor_time_add" = "新增排程";
diff --git a/strings.txt b/strings.txt
index 5aa9d785b0..9c5d4d9764 100644
--- a/strings.txt
+++ b/strings.txt
@@ -12527,6 +12527,14 @@
el = Θέλετε να σχεδιάσουμε μια διαδρομή από την τρέχουσα θέση σας;
sk = Doriți să vă planificăm o rută având ca punct de pornire locația actuală?
+ [p2p_add_stop]
+ tags = ios, android
+ en = Add stop
+
+ [p2p_remove_stop]
+ tags = ios, android
+ en = Remove stop
+
[whats_new_next_button]
tags = ios
en = Next