diff --git a/android/res/drawable/ic_my_location.xml b/android/res/drawable/ic_my_location.xml new file mode 100644 index 0000000000..3bb45c9a66 --- /dev/null +++ b/android/res/drawable/ic_my_location.xml @@ -0,0 +1,4 @@ + + + diff --git a/android/res/layout/fragment_routing.xml b/android/res/layout/fragment_routing.xml index 7de5276355..390573b2de 100644 --- a/android/res/layout/fragment_routing.xml +++ b/android/res/layout/fragment_routing.xml @@ -18,6 +18,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content"/> + + + + diff --git a/android/res/layout/routing_action_panel.xml b/android/res/layout/routing_action_panel.xml new file mode 100644 index 0000000000..adecd15015 --- /dev/null +++ b/android/res/layout/routing_action_panel.xml @@ -0,0 +1,54 @@ + + + + + + + + diff --git a/android/res/values/dimens.xml b/android/res/values/dimens.xml index ba530841e0..9599661c0f 100644 --- a/android/res/values/dimens.xml +++ b/android/res/values/dimens.xml @@ -152,6 +152,9 @@ 40dp 232dp + + 14dp + 100dp 150dp diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index a6dbcfefaf..b746857216 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -1140,4 +1140,7 @@ If a street or an object doesn\'t have a name in your language, it will be spelt using the Latin alphabet. Learn more Exit + Add start point to plan a route. + Add finish to plan a route. + Use diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 19af8d699b..f3e7e731ce 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -56,7 +56,6 @@ import com.mapswithme.maps.editor.ReportFragment; import com.mapswithme.maps.location.CompassData; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.routing.NavigationController; -import com.mapswithme.maps.routing.RoutePointInfo; import com.mapswithme.maps.routing.RoutingController; import com.mapswithme.maps.routing.RoutingPlanController; import com.mapswithme.maps.routing.RoutingPlanFragment; @@ -1596,14 +1595,7 @@ public class MwmActivity extends BaseMwmFragmentActivity if (controller.isBuilt() || controller.isUberRequestHandled()) { - showLineFrame(true, new Runnable() - { - @Override - public void run() - { - adjustRuler(0, 0); - } - }); + showLineFrame(); if (completion != null) completion.run(); @@ -1612,6 +1604,9 @@ public class MwmActivity extends BaseMwmFragmentActivity if (controller.isPlanning() || controller.isBuilding() || controller.isErrorEncountered()) { + if (showAddStartOrFinishFrame(controller, true)) + return; + showLineFrame(false, new Runnable() { @Override @@ -1627,6 +1622,75 @@ public class MwmActivity extends BaseMwmFragmentActivity return; } + hideRoutingActionFrame(); + showLineFrame(); + + if (completion != null) + completion.run(); + } + + private boolean showAddStartOrFinishFrame(@NonNull RoutingController controller, + boolean showFrame) + { + if (!controller.hasStartPoint()) + { + showAddStartFrame(); + if (showFrame) + showLineFrame(); + return true; + } + if (!controller.hasEndPoint()) + { + showAddFinishFrame(); + if (showFrame) + showLineFrame(); + return true; + } + + return false; + } + + private void showAddStartFrame() + { + if (!mIsFragmentContainer) + { + mRoutingPlanInplaceController.showAddStartFrame(); + return; + } + + RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class); + if (fragment != null) + fragment.showAddStartFrame(); + } + + private void showAddFinishFrame() + { + if (!mIsFragmentContainer) + { + mRoutingPlanInplaceController.showAddFinishFrame(); + return; + } + + RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class); + if (fragment != null) + fragment.showAddFinishFrame(); + } + + private void hideRoutingActionFrame() + { + if (!mIsFragmentContainer) + { + mRoutingPlanInplaceController.hideActionFrame(); + return; + } + + RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class); + if (fragment != null) + fragment.hideActionFrame(); + } + + private void showLineFrame() + { showLineFrame(true, new Runnable() { @Override @@ -1635,9 +1699,6 @@ public class MwmActivity extends BaseMwmFragmentActivity adjustRuler(0, 0); } }); - - if (completion != null) - completion.run(); } private void showLineFrame(boolean show, @Nullable Runnable completion) @@ -1674,6 +1735,7 @@ public class MwmActivity extends BaseMwmFragmentActivity if (mIsFragmentContainer) { replaceFragment(RoutingPlanFragment.class, null, completionListener); + showAddStartOrFinishFrame(RoutingController.get(), false); adjustTraffic(UiUtils.dimen(R.dimen.panel_width), UiUtils.getStatusBarHeight(getApplicationContext())); } else diff --git a/android/src/com/mapswithme/maps/routing/RoutingBottomMenuController.java b/android/src/com/mapswithme/maps/routing/RoutingBottomMenuController.java new file mode 100644 index 0000000000..0ae1f17a9d --- /dev/null +++ b/android/src/com/mapswithme/maps/routing/RoutingBottomMenuController.java @@ -0,0 +1,347 @@ +package com.mapswithme.maps.routing; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.location.Location; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.support.v4.content.ContextCompat; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import com.mapswithme.maps.Framework; +import com.mapswithme.maps.MwmActivity; +import com.mapswithme.maps.R; +import com.mapswithme.maps.bookmarks.data.MapObject; +import com.mapswithme.maps.location.LocationHelper; +import com.mapswithme.maps.uber.UberAdapter; +import com.mapswithme.maps.uber.UberInfo; +import com.mapswithme.maps.uber.UberLinks; +import com.mapswithme.maps.widget.DotPager; +import com.mapswithme.util.Graphics; +import com.mapswithme.util.UiUtils; +import com.mapswithme.util.Utils; +import com.mapswithme.util.statistics.AlohaHelper; +import com.mapswithme.util.statistics.Statistics; + +import java.util.List; +import java.util.Locale; + +final class RoutingBottomMenuController implements View.OnClickListener +{ + private static final String STATE_ALTITUDE_CHART_SHOWN = "altitude_chart_shown"; + private static final String STATE_TAXI_INFO = "taxi_info"; + + @NonNull + private final Activity mContext; + @NonNull + private final View mAltitudeChartFrame; + @NonNull + private final View mUberFrame; + @NonNull + private final TextView mError; + @NonNull + private final Button mStart; + @NonNull + private final ImageView mAltitudeChart; + @NonNull + private final TextView mAltitudeDifference; + @NonNull + private final View mNumbersFrame; + @NonNull + private final View mActionFrame; + @NonNull + private final TextView mActionMessage; + @NonNull + private final View mActionButton; + @NonNull + private final ImageView mActionIcon; + + @Nullable + private UberInfo mUberInfo; + @Nullable + private UberInfo.Product mUberProduct; + + @NonNull + static RoutingBottomMenuController newInstance(@NonNull Activity activity, @NonNull View frame) + { + View altitudeChartFrame = getViewById(activity, frame, R.id.altitude_chart_panel); + View uberFrame = getViewById(activity, frame, R.id.uber_panel); + TextView error = (TextView) getViewById(activity, frame, R.id.error); + Button start = (Button) getViewById(activity, frame, R.id.start); + ImageView altitudeChart = (ImageView) getViewById(activity, frame, R.id.altitude_chart); + TextView altitudeDifference = (TextView) getViewById(activity, frame, R.id.altitude_difference); + View numbersFrame = getViewById(activity, frame, R.id.numbers); + View actionFrame = getViewById(activity, frame, R.id.routing_action_frame); + + return new RoutingBottomMenuController(activity, altitudeChartFrame, + uberFrame, error, start, + altitudeChart, + altitudeDifference, + numbersFrame, actionFrame); + } + + @NonNull + private static View getViewById(@NonNull Activity activity, @NonNull View frame, + @IdRes int resourceId) + { + View view = frame.findViewById(resourceId); + return view == null ? activity.findViewById(resourceId) : view; + } + + private RoutingBottomMenuController(@NonNull Activity context, + @NonNull View altitudeChartFrame, + @NonNull View uberFrame, + @NonNull TextView error, + @NonNull Button start, + @NonNull ImageView altitudeChart, + @NonNull TextView altitudeDifference, + @NonNull View numbersFrame, + @NonNull View actionFrame) + { + mContext = context; + mAltitudeChartFrame = altitudeChartFrame; + mUberFrame = uberFrame; + mError = error; + mStart = start; + mAltitudeChart = altitudeChart; + mAltitudeDifference = altitudeDifference; + mNumbersFrame = numbersFrame; + mActionFrame = actionFrame; + mActionMessage = (TextView) actionFrame.findViewById(R.id.tv__message); + mActionButton = actionFrame.findViewById(R.id.btn__my_position_use); + mActionIcon = (ImageView) mActionButton.findViewById(R.id.iv__icon); + mActionButton.setOnClickListener(this); + mActionFrame.setOnTouchListener(new View.OnTouchListener() + { + @Override + public boolean onTouch(View v, MotionEvent event) + { + return !(UiUtils.isVisible(mActionButton) && UiUtils.isViewTouched(event, mActionButton)); + } + }); + UiUtils.hide(mAltitudeChartFrame, mUberFrame, mActionFrame); + } + + void showAltitudeChartAndRoutingDetails() + { + UiUtils.hide(mError, mUberFrame, mActionFrame); + + showRouteAltitudeChart(); + showRoutingDetails(); + UiUtils.show(mAltitudeChartFrame); + } + + void hideAltitudeChartAndRoutingDetails() + { + if (UiUtils.isHidden(mAltitudeChartFrame)) + return; + + UiUtils.hide(mAltitudeChartFrame); + } + + void showUberInfo(@NonNull UberInfo info) + { + UiUtils.hide(mError, mAltitudeChartFrame); + + final List products = info.getProducts(); + mUberInfo = info; + mUberProduct = products.get(0); + final PagerAdapter adapter = new UberAdapter(mContext, products); + DotPager pager = new DotPager.Builder(mContext, (ViewPager) mUberFrame.findViewById(R.id.pager), + adapter) + .setIndicatorContainer((ViewGroup) mUberFrame.findViewById(R.id.indicator)) + .setPageChangedListener(new DotPager.OnPageChangedListener() + { + @Override + public void onPageChanged(int position) + { + mUberProduct = products.get(position); + } + }).build(); + pager.show(); + + setStartButton(); + UiUtils.show(mUberFrame); + } + + void showAddStartFrame() + { + UiUtils.show(mActionFrame, mActionButton); + mActionMessage.setText(R.string.routing_add_start_point); + Drawable icon = ContextCompat.getDrawable(mContext, R.drawable.ic_my_location); + int colorAccent = ContextCompat.getColor(mContext, + UiUtils.getStyledResourceId(mContext, R.attr.colorAccent)); + mActionIcon.setImageDrawable(Graphics.tint(icon, colorAccent)); + } + + void showAddFinishFrame() + { + UiUtils.show(mActionFrame); + mActionMessage.setText(R.string.routing_add_finish_point); + UiUtils.hide(mActionButton); + } + + void hideActionFrame() + { + UiUtils.hide(mActionFrame); + } + + void setStartButton() + { + if (RoutingController.get().isTaxiRouterType()) + { + final boolean isUberInstalled = Utils.isUberInstalled(mContext); + mStart.setText(isUberInstalled ? R.string.taxi_order : R.string.install_app); + mStart.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + if (mUberProduct != null) + { + UberLinks links = RoutingController.get().getUberLink(mUberProduct.getProductId()); + if (links != null) + { + Utils.launchUber(mContext, links); + trackUberStatistics(isUberInstalled); + } + } + } + }); + } else + { + mStart.setText(mContext.getText(R.string.p2p_start)); + mStart.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + ((MwmActivity)mContext).closeMenu(Statistics.EventName.ROUTING_START, AlohaHelper.ROUTING_START, new Runnable() + { + @Override + public void run() + { + RoutingController.get().start(); + } + }); + } + }); + } + + UiUtils.updateAccentButton(mStart); + showStartButton(true); + } + + void showError(@StringRes int message) + { + UiUtils.hide(mUberFrame, mAltitudeChartFrame); + mError.setText(message); + mError.setVisibility(View.VISIBLE); + showStartButton(false); + } + + void showStartButton(boolean show) + { + UiUtils.showIf(show, mStart); + } + + void saveRoutingPanelState(@NonNull Bundle outState) + { + outState.putBoolean(STATE_ALTITUDE_CHART_SHOWN, UiUtils.isVisible(mAltitudeChartFrame)); + outState.putParcelable(STATE_TAXI_INFO, mUberInfo); + } + + void restoreRoutingPanelState(@NonNull Bundle state) + { + if (state.getBoolean(STATE_ALTITUDE_CHART_SHOWN)) + showAltitudeChartAndRoutingDetails(); + + UberInfo info = state.getParcelable(STATE_TAXI_INFO); + if (info != null) + showUberInfo(info); + } + + private void showRouteAltitudeChart() + { + if (RoutingController.get().isVehicleRouterType()) + { + UiUtils.hide(mAltitudeChart, mAltitudeDifference); + return; + } + + int chartWidth = UiUtils.dimen(mContext, R.dimen.altitude_chart_image_width); + int chartHeight = UiUtils.dimen(mContext, R.dimen.altitude_chart_image_height); + Framework.RouteAltitudeLimits limits = new Framework.RouteAltitudeLimits(); + Bitmap bm = Framework.generateRouteAltitudeChart(chartWidth, chartHeight, limits); + if (bm != null) + { + mAltitudeChart.setImageBitmap(bm); + UiUtils.show(mAltitudeChart); + String meter = mAltitudeDifference.getResources().getString(R.string.meter); + String foot = mAltitudeDifference.getResources().getString(R.string.foot); + mAltitudeDifference.setText(String.format(Locale.getDefault(), "%d %s", + limits.maxRouteAltitude - limits.minRouteAltitude, + limits.isMetricUnits ? meter : foot)); + Drawable icon = ContextCompat.getDrawable(mContext, + R.drawable.ic_altitude_difference); + int colorAccent = ContextCompat.getColor(mContext, + UiUtils.getStyledResourceId(mContext, R.attr.colorAccent)); + mAltitudeDifference.setCompoundDrawablesWithIntrinsicBounds(Graphics.tint(icon, colorAccent), + null, null, null); + UiUtils.show(mAltitudeDifference); + } + } + + private void showRoutingDetails() + { + final RoutingInfo rinfo = RoutingController.get().getCachedRoutingInfo(); + if (rinfo == null) + { + UiUtils.hide(mNumbersFrame); + return; + } + + TextView numbersTime = (TextView) mNumbersFrame.findViewById(R.id.time); + TextView numbersDistance = (TextView) mNumbersFrame.findViewById(R.id.distance); + TextView numbersArrival = (TextView) mNumbersFrame.findViewById(R.id.arrival); + numbersTime.setText(RoutingController.formatRoutingTime(mContext, rinfo.totalTimeInSeconds, + R.dimen.text_size_routing_number)); + numbersDistance.setText(rinfo.distToTarget + " " + rinfo.targetUnits); + + if (numbersArrival != null) + { + String arrivalTime = RoutingController.formatArrivalTime(rinfo.totalTimeInSeconds); + numbersArrival.setText(arrivalTime); + } + } + + private static void trackUberStatistics(boolean isUberInstalled) + { + MapObject from = RoutingController.get().getStartPoint(); + MapObject to = RoutingController.get().getEndPoint(); + Location location = LocationHelper.INSTANCE.getLastKnownLocation(); + Statistics.INSTANCE.trackUber(from, to, location, isUberInstalled); + } + + @Override + public void onClick(View v) + { + switch (v.getId()) + { + case R.id.btn__my_position_use: + RoutingController.get().setStartPoint(LocationHelper.INSTANCE.getMyPosition()); + break; + } + } +} diff --git a/android/src/com/mapswithme/maps/routing/RoutingController.java b/android/src/com/mapswithme/maps/routing/RoutingController.java index 547947baa7..3dba3c21ee 100644 --- a/android/src/com/mapswithme/maps/routing/RoutingController.java +++ b/android/src/com/mapswithme/maps/routing/RoutingController.java @@ -641,6 +641,16 @@ public class RoutingController return mEndPoint; } + public boolean hasStartPoint() + { + return mStartPoint != null; + } + + public boolean hasEndPoint() + { + return mEndPoint != null; + } + @Nullable RoutingInfo getCachedRoutingInfo() { @@ -803,6 +813,8 @@ public class RoutingController setPointsInternal(); checkAndBuildRoute(); + if (mContainer != null) + mContainer.updateMenu(); } public void setRouterType(@Framework.RouterType int router) diff --git a/android/src/com/mapswithme/maps/routing/RoutingPlanController.java b/android/src/com/mapswithme/maps/routing/RoutingPlanController.java index 395fa3f66d..6f745e5b2c 100644 --- a/android/src/com/mapswithme/maps/routing/RoutingPlanController.java +++ b/android/src/com/mapswithme/maps/routing/RoutingPlanController.java @@ -3,58 +3,36 @@ package com.mapswithme.maps.routing; import android.animation.Animator; import android.animation.ValueAnimator; import android.app.Activity; -import android.graphics.Bitmap; import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.location.Location; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; -import android.support.v4.content.ContextCompat; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; -import android.widget.TextView; import com.mapswithme.maps.Framework; -import com.mapswithme.maps.MwmActivity; import com.mapswithme.maps.MwmApplication; import com.mapswithme.maps.R; -import com.mapswithme.maps.bookmarks.data.MapObject; -import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.uber.Uber; -import com.mapswithme.maps.uber.UberAdapter; import com.mapswithme.maps.uber.UberInfo; -import com.mapswithme.maps.uber.UberLinks; -import com.mapswithme.maps.widget.DotPager; import com.mapswithme.maps.widget.RotateDrawable; import com.mapswithme.maps.widget.RoutingToolbarButton; import com.mapswithme.maps.widget.ToolbarController; import com.mapswithme.maps.widget.WheelProgressView; -import com.mapswithme.util.Graphics; import com.mapswithme.util.UiUtils; -import com.mapswithme.util.Utils; import com.mapswithme.util.statistics.AlohaHelper; import com.mapswithme.util.statistics.Statistics; -import java.util.List; -import java.util.Locale; - public class RoutingPlanController extends ToolbarController implements SlotFrame.SlotClickListener { static final int ANIM_TOGGLE = MwmApplication.get().getResources().getInteger(R.integer.anim_slots_toggle); - private static final String STATE_ALTITUDE_CHART_SHOWN = "altitude_chart_shown"; - private static final String STATE_TAXI_INFO = "taxi_info"; - protected final View mFrame; private final ImageView mToggle; @@ -65,18 +43,13 @@ public class RoutingPlanController extends ToolbarController implements SlotFram private final WheelProgressView mProgressBicycle; private final WheelProgressView mProgressTaxi; - private final View mAltitudeChartFrame; - private final View mUberFrame; + @NonNull + private final RoutingBottomMenuController mRoutingBottomMenuController; private final RotateDrawable mToggleImage = new RotateDrawable(R.drawable.ic_down); int mFrameHeight; private int mToolbarHeight; private boolean mOpen; - @Nullable - private UberInfo mUberInfo; - - @Nullable - private UberInfo.Product mUberProduct; @Nullable private OnToggleListener mToggleListener; @@ -178,11 +151,7 @@ public class RoutingPlanController extends ToolbarController implements SlotFram mProgressBicycle = (WheelProgressView) progressFrame.findViewById(R.id.progress_bicycle); mProgressTaxi = (WheelProgressView) progressFrame.findViewById(R.id.progress_taxi); - mAltitudeChartFrame = getViewById(R.id.altitude_chart_panel); - UiUtils.hide(mAltitudeChartFrame); - - mUberFrame = getViewById(R.id.uber_panel); - UiUtils.hide(mUberFrame); + mRoutingBottomMenuController = RoutingBottomMenuController.newInstance(mActivity, mFrame); mToggle.setImageDrawable(mToggleImage); mToggle.setOnClickListener(new View.OnClickListener() @@ -258,58 +227,15 @@ public class RoutingPlanController extends ToolbarController implements SlotFram if (!ready) { - hideAltitudeChartAndRoutingDetails(); + mRoutingBottomMenuController.hideAltitudeChartAndRoutingDetails(); return; } if (!isTaxiRouterType()) - setStartButton(); - showAltitudeChartAndRoutingDetails(); - } - - private void showAltitudeChartAndRoutingDetails() - { - if (isTaxiRouterType()) - return; - - UiUtils.hide(getViewById(R.id.error)); - UiUtils.hide(mUberFrame); - - showRouteAltitudeChart(); - showRoutingDetails(); - UiUtils.show(mAltitudeChartFrame); - } - - private void showRoutingDetails() - { - final View numbersFrame = mAltitudeChartFrame.findViewById(R.id.numbers); - final RoutingInfo rinfo = RoutingController.get().getCachedRoutingInfo(); - if (rinfo == null) { - UiUtils.hide(numbersFrame); - return; + mRoutingBottomMenuController.setStartButton(); + mRoutingBottomMenuController.showAltitudeChartAndRoutingDetails(); } - - TextView numbersTime = (TextView) numbersFrame.findViewById(R.id.time); - TextView numbersDistance = (TextView) numbersFrame.findViewById(R.id.distance); - TextView numbersArrival = (TextView) numbersFrame.findViewById(R.id.arrival); - numbersTime.setText(RoutingController.formatRoutingTime(mFrame.getContext(), rinfo.totalTimeInSeconds, - R.dimen.text_size_routing_number)); - numbersDistance.setText(rinfo.distToTarget + " " + rinfo.targetUnits); - - if (numbersArrival != null) - { - String arrivalTime = RoutingController.formatArrivalTime(rinfo.totalTimeInSeconds); - numbersArrival.setText(arrivalTime); - } - } - - private void hideAltitudeChartAndRoutingDetails() - { - if (UiUtils.isHidden(mAltitudeChartFrame)) - return; - - UiUtils.hide(mAltitudeChartFrame); } public void updateBuildProgress(int progress, @Framework.RouterType int router) @@ -433,11 +359,6 @@ public class RoutingPlanController extends ToolbarController implements SlotFram } } - private boolean isVehicleRouterType() - { - return RoutingController.get().isVehicleRouterType(); - } - private boolean isTaxiRouterType() { return RoutingController.get().isTaxiRouterType(); @@ -454,68 +375,9 @@ public class RoutingPlanController extends ToolbarController implements SlotFram return mOpen; } - public void showRouteAltitudeChart() - { - ImageView altitudeChart = (ImageView) mFrame.findViewById(R.id.altitude_chart); - TextView altitudeDifference = (TextView) mAltitudeChartFrame.findViewById(R.id.altitude_difference); - showRouteAltitudeChartInternal(altitudeChart, altitudeDifference); - } - - void showRouteAltitudeChartInternal(@NonNull ImageView altitudeChart, - @NonNull TextView altitudeDifference) - { - if (isVehicleRouterType()) - { - UiUtils.hide(altitudeChart); - UiUtils.hide(altitudeDifference); - return; - } - - int chartWidth = UiUtils.dimen(mActivity, R.dimen.altitude_chart_image_width); - int chartHeight = UiUtils.dimen(mActivity, R.dimen.altitude_chart_image_height); - Framework.RouteAltitudeLimits limits = new Framework.RouteAltitudeLimits(); - Bitmap bm = Framework.generateRouteAltitudeChart(chartWidth, chartHeight, limits); - if (bm != null) - { - altitudeChart.setImageBitmap(bm); - UiUtils.show(altitudeChart); - String meter = altitudeDifference.getResources().getString(R.string.meter); - String foot = altitudeDifference.getResources().getString(R.string.foot); - altitudeDifference.setText(String.format(Locale.getDefault(), "%d %s", - limits.maxRouteAltitude - limits.minRouteAltitude, - limits.isMetricUnits ? meter : foot)); - Drawable icon = ContextCompat.getDrawable(altitudeDifference.getContext(), - R.drawable.ic_altitude_difference); - int colorAccent = ContextCompat.getColor(altitudeDifference.getContext(), - UiUtils.getStyledResourceId(altitudeDifference.getContext(), R.attr.colorAccent)); - altitudeDifference.setCompoundDrawablesWithIntrinsicBounds(Graphics.tint(icon,colorAccent), - null, null, null); - UiUtils.show(altitudeDifference); - } - } - public void showUberInfo(@NonNull UberInfo info) { - UiUtils.hide(getViewById(R.id.error), mAltitudeChartFrame); - - final List products = info.getProducts(); - mUberInfo = info; - mUberProduct = products.get(0); - final PagerAdapter adapter = new UberAdapter(mActivity, products); - DotPager pager = new DotPager.Builder(mActivity, (ViewPager) mUberFrame.findViewById(R.id.pager), adapter) - .setIndicatorContainer((ViewGroup) mUberFrame.findViewById(R.id.indicator)) - .setPageChangedListener(new DotPager.OnPageChangedListener() - { - @Override - public void onPageChanged(int position) - { - mUberProduct = products.get(position); - } - }).build(); - pager.show(); - - setStartButton(); - UiUtils.show(mUberFrame); + mRoutingBottomMenuController.showUberInfo(info); } public void showUberError(@NonNull Uber.ErrorCode code) @@ -544,100 +406,22 @@ public class RoutingPlanController extends ToolbarController implements SlotFram private void showError(@StringRes int message) { - UiUtils.hide(mUberFrame, mAltitudeChartFrame); - TextView error = (TextView) getViewById(R.id.error); - error.setText(message); - error.setVisibility(View.VISIBLE); - showStartButton(false); + mRoutingBottomMenuController.showError(message); } void showStartButton(boolean show) { - if (show) - UiUtils.show(getViewById(R.id.start)); - else - UiUtils.hide(getViewById(R.id.start)); - } - - @NonNull - private View getViewById(@IdRes int resourceId) - { - View view = mFrame.findViewById(resourceId); - if (view == null) - view = mActivity.findViewById(resourceId); - return view; + mRoutingBottomMenuController.showStartButton(show); } void saveRoutingPanelState(@NonNull Bundle outState) { - outState.putBoolean(STATE_ALTITUDE_CHART_SHOWN, UiUtils.isVisible(mAltitudeChartFrame)); - outState.putParcelable(STATE_TAXI_INFO, mUberInfo); + mRoutingBottomMenuController.saveRoutingPanelState(outState); } void restoreRoutingPanelState(@NonNull Bundle state) { - if (state.getBoolean(STATE_ALTITUDE_CHART_SHOWN)) - showRouteAltitudeChart(); - - UberInfo info = state.getParcelable(STATE_TAXI_INFO); - if (info != null) - showUberInfo(info); - } - - private void setStartButton() - { - Button start = (Button) getViewById(R.id.start); - - if (isTaxiRouterType()) - { - final boolean isUberInstalled = Utils.isUberInstalled(mActivity); - start.setText(isUberInstalled ? R.string.taxi_order : R.string.install_app); - start.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - if (mUberProduct != null) - { - UberLinks links = RoutingController.get().getUberLink(mUberProduct.getProductId()); - if (links != null) - { - Utils.launchUber(mActivity, links); - trackUberStatistics(isUberInstalled); - } - } - } - }); - } else - { - start.setText(mActivity.getText(R.string.p2p_start)); - start.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - ((MwmActivity)mActivity).closeMenu(Statistics.EventName.ROUTING_START, AlohaHelper.ROUTING_START, new Runnable() - { - @Override - public void run() - { - RoutingController.get().start(); - } - }); - } - }); - } - - UiUtils.updateAccentButton(start); - showStartButton(true); - } - - private static void trackUberStatistics(boolean isUberInstalled) - { - MapObject from = RoutingController.get().getStartPoint(); - MapObject to = RoutingController.get().getEndPoint(); - Location location = LocationHelper.INSTANCE.getLastKnownLocation(); - Statistics.INSTANCE.trackUber(from, to, location, isUberInstalled); + mRoutingBottomMenuController.restoreRoutingPanelState(state); } public int getHeight() @@ -649,4 +433,19 @@ public class RoutingPlanController extends ToolbarController implements SlotFram { mToggleListener = listener; } + + public void showAddStartFrame() + { + mRoutingBottomMenuController.showAddStartFrame(); + } + + public void showAddFinishFrame() + { + mRoutingBottomMenuController.showAddFinishFrame(); + } + + public void hideActionFrame() + { + mRoutingBottomMenuController.hideActionFrame(); + } } diff --git a/android/src/com/mapswithme/maps/routing/RoutingPlanFragment.java b/android/src/com/mapswithme/maps/routing/RoutingPlanFragment.java index 7ef06fef5b..cc40a6de85 100644 --- a/android/src/com/mapswithme/maps/routing/RoutingPlanFragment.java +++ b/android/src/com/mapswithme/maps/routing/RoutingPlanFragment.java @@ -77,4 +77,19 @@ public class RoutingPlanFragment extends BaseMwmFragment { mPlanController.saveRoutingPanelState(outState); } + + public void showAddStartFrame() + { + mPlanController.showAddStartFrame(); + } + + public void showAddFinishFrame() + { + mPlanController.showAddFinishFrame(); + } + + public void hideActionFrame() + { + mPlanController.hideActionFrame(); + } } diff --git a/android/src/com/mapswithme/maps/routing/RoutingPlanInplaceController.java b/android/src/com/mapswithme/maps/routing/RoutingPlanInplaceController.java index 6d63834e87..b53da103bf 100644 --- a/android/src/com/mapswithme/maps/routing/RoutingPlanInplaceController.java +++ b/android/src/com/mapswithme/maps/routing/RoutingPlanInplaceController.java @@ -5,8 +5,6 @@ import android.animation.ValueAnimator; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.widget.ImageView; -import android.widget.TextView; import com.mapswithme.maps.MwmActivity; import com.mapswithme.maps.R; @@ -71,14 +69,6 @@ public class RoutingPlanInplaceController extends RoutingPlanController restoreRoutingPanelState(state); } - @Override - public void showRouteAltitudeChart() - { - ImageView altitudeChart = (ImageView) mActivity.findViewById(R.id.altitude_chart); - TextView altitudeDifference = (TextView) mActivity.findViewById(R.id.altitude_difference); - showRouteAltitudeChartInternal(altitudeChart, altitudeDifference); - } - private void animateFrame(final boolean show, final @Nullable Runnable completion) { if (!checkFrameHeight()) diff --git a/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings index 6206edd0fa..97bef97754 100644 --- a/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings index 16f0511957..55c23b7cab 100644 --- a/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings index 99d80f4409..5608dccc7f 100644 --- a/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings index 0e5512804c..0b7ed2ee49 100644 --- a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings index c907268d9c..4bd2b7a605 100644 --- a/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings index 96b6434836..66774df201 100644 --- a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings index 38c130064f..cb45874ff1 100644 --- a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings index 6d3f9de2de..87fd0d9ce1 100644 --- a/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings index 819d0b8f2c..a47a854a9d 100644 --- a/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings index 871a2519ef..ad34c11052 100644 --- a/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings index d7f5a54657..9508e95aa9 100644 --- a/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings index 9837380e52..6fbdc68900 100644 --- a/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings index 7b98ba870e..7283be78db 100644 --- a/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings index 21357e4160..56b6bb95a5 100644 --- a/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings index 3701f3187d..06b9c3e4e4 100644 --- a/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings index 5a2c5f5cfb..6089924425 100644 --- a/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings index d4c9d47473..96382d0ccd 100644 --- a/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings index af6cce9e5c..96db5ce69e 100644 --- a/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings index f85654942d..7568428689 100644 --- a/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings index 2d9797e781..b5fbc714be 100644 --- a/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings index 777b0874f6..7aa6b87ab2 100644 --- a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Узнать больше"; "exit" = "Выход"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings index ec1721591a..3d5b07ced9 100644 --- a/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings index e634ada139..f32d1a2135 100644 --- a/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings index 728a9694f9..3488e4b3bb 100644 --- a/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings index 20686a6640..1d1b019c43 100644 --- a/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings index 88ca67b4f9..7678b3de05 100644 --- a/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings index c80c6a34ae..49181b1f4f 100644 --- a/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings index 47069d1c69..a601fd2bb0 100644 --- a/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings index d0fc269228..e9d2444dd6 100644 --- a/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings @@ -1936,3 +1936,9 @@ "learn_more" = "Learn more"; "exit" = "Exit"; + +"routing_add_start_point" = "Add start point to plan a route."; + +"routing_add_finish_point" = "Add finish to plan a route."; + +"use" = "Use"; diff --git a/strings.txt b/strings.txt index 9c5d4d9764..e07f7d53a2 100644 --- a/strings.txt +++ b/strings.txt @@ -24569,3 +24569,12 @@ [exit] en = Exit ru = Выход + + [routing_add_start_point] + en = Add start point to plan a route. + + [routing_add_finish_point] + en = Add finish to plan a route. + + [use] + en = Use