From 1b68590c77affd7a1ff57bc739fe74cbeebd2c28 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Wed, 7 Jun 2017 14:41:07 +0400 Subject: [PATCH] [android] Added SHOW_ON_MAP and BUILD_ROUTE intent actions. --- android/AndroidManifest.xml | 10 ++ .../maps/DownloadResourcesActivity.java | 78 +++++++++++++- .../src/com/mapswithme/maps/MwmActivity.java | 102 ++++++++++++++++++ 3 files changed, 189 insertions(+), 1 deletion(-) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 1b0e3972c0..6e16c326a1 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -154,6 +154,16 @@ + + + + + + + + + + diff --git a/android/src/com/mapswithme/maps/DownloadResourcesActivity.java b/android/src/com/mapswithme/maps/DownloadResourcesActivity.java index cfa9ab7784..c9bf7a30b9 100644 --- a/android/src/com/mapswithme/maps/DownloadResourcesActivity.java +++ b/android/src/com/mapswithme/maps/DownloadResourcesActivity.java @@ -102,7 +102,9 @@ public class DownloadResourcesActivity extends BaseMwmFragmentActivity new GoogleMapsIntentProcessor(), new LeadUrlIntentProcessor(), new OpenCountryTaskProcessor(), - new KmzKmlProcessor() + new KmzKmlProcessor(), + new ShowOnMapProcessor(), + new BuildRouteProcessor() }; private final LocationListener mLocationListener = new LocationListener.Simple() @@ -784,6 +786,80 @@ public class DownloadResourcesActivity extends BaseMwmFragmentActivity } } + private class ShowOnMapProcessor implements IntentProcessor + { + private static final String ACTION_SHOW_ON_MAP = "com.mapswithme.maps.pro.action.SHOW_ON_MAP"; + private static final String EXTRA_LAT = "lat"; + private static final String EXTRA_LON = "lon"; + + @Override + public boolean isSupported(Intent intent) + { + return ACTION_SHOW_ON_MAP.equals(intent.getAction()); + } + + @Override + public boolean process(Intent intent) + { + if (!intent.hasExtra(EXTRA_LAT) || !intent.hasExtra(EXTRA_LON)) + return false; + + float lat = intent.getFloatExtra(EXTRA_LAT, 0.0f); + float lon = intent.getFloatExtra(EXTRA_LON, 0.0f); + mMapTaskToForward = new MwmActivity.ShowPointTask(lat, lon); + + return true; + } + } + + private class BuildRouteProcessor implements IntentProcessor + { + private static final String ACTION_BUILD_ROUTE = "com.mapswithme.maps.pro.action.BUILD_ROUTE"; + private static final String EXTRA_LAT_TO = "lat_to"; + private static final String EXTRA_LON_TO = "lon_to"; + private static final String EXTRA_LAT_FROM = "lat_from"; + private static final String EXTRA_LON_FROM = "lon_from"; + private static final String EXTRA_ROUTER = "router"; + + @Override + public boolean isSupported(Intent intent) + { + return ACTION_BUILD_ROUTE.equals(intent.getAction()); + } + + @Override + public boolean process(Intent intent) + { + if (!intent.hasExtra(EXTRA_LAT_TO) || !intent.hasExtra(EXTRA_LON_TO)) + return false; + + float latTo = intent.getFloatExtra(EXTRA_LAT_TO, 0.0f); + float lonTo = intent.getFloatExtra(EXTRA_LON_TO, 0.0f); + boolean hasFrom = intent.hasExtra(EXTRA_LAT_FROM) && intent.hasExtra(EXTRA_LON_FROM); + boolean hasRouter = intent.hasExtra(EXTRA_ROUTER); + + if (hasFrom && hasRouter) + { + mMapTaskToForward = new MwmActivity.BuildRouteTask(latTo, lonTo, + intent.getFloatExtra(EXTRA_LAT_FROM, 0.0f), + intent.getFloatExtra(EXTRA_LON_FROM, 0.0f), + intent.getStringExtra(EXTRA_ROUTER)); + } + else if (hasFrom) + { + mMapTaskToForward = new MwmActivity.BuildRouteTask(latTo, lonTo, + intent.getFloatExtra(EXTRA_LAT_FROM, 0.0f), + intent.getFloatExtra(EXTRA_LON_FROM, 0.0f)); + } + else + { + mMapTaskToForward = new MwmActivity.BuildRouteTask(latTo, lonTo); + } + + return true; + } + } + private static native int nativeGetBytesToDownload(); private static native int nativeStartNextFileDownload(Listener listener); private static native void nativeCancelCurrentFile(); diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 3689fedc74..1ecd7a7686 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -102,6 +102,7 @@ import com.mapswithme.util.statistics.AlohaHelper; import com.mapswithme.util.statistics.Statistics; import java.io.Serializable; +import java.util.Locale; import java.util.Stack; public class MwmActivity extends BaseMwmFragmentActivity @@ -2031,4 +2032,105 @@ public class MwmActivity extends BaseMwmFragmentActivity return true; } } + + static class ShowPointTask implements MapTask + { + private final float mLat; + private final float mLon; + + ShowPointTask(float lat, float lon) + { + mLat = lat; + mLon = lon; + } + + @Override + public boolean run(MwmActivity target) + { + MapFragment.nativeShowMapForUrl(String.format(Locale.US, + "mapsme://map?ll=%f,%f", mLat, mLon)); + return true; + } + } + + static class BuildRouteTask implements MapTask + { + private final float mLatTo; + private final float mLonTo; + @Nullable + private final Float mLatFrom; + @Nullable + private final Float mLonFrom; + @Nullable + private final String mRouter; + + BuildRouteTask(float latTo, float lonTo) + { + this(latTo, lonTo, null, null, null); + } + + BuildRouteTask(float latTo, float lonTo, @Nullable Float latFrom, @Nullable Float lonFrom) + { + this(latTo, lonTo, latFrom, lonFrom, null); + } + + BuildRouteTask(float latTo, float lonTo, @Nullable Float latFrom, @Nullable Float lonFrom, + @Nullable String router) + { + mLatTo = latTo; + mLonTo = lonTo; + mLatFrom = latFrom; + mLonFrom = lonFrom; + mRouter = router; + } + + @Override + public boolean run(MwmActivity target) + { + @Framework.RouterType int routerType = -1; + if (!TextUtils.isEmpty(mRouter)) + { + switch (mRouter) + { + case "vehicle": + routerType = Framework.ROUTER_TYPE_VEHICLE; + break; + case "pedestrian": + routerType = Framework.ROUTER_TYPE_PEDESTRIAN; + break; + case "bicycle": + routerType = Framework.ROUTER_TYPE_BICYCLE; + break; + case "taxi": + routerType = Framework.ROUTER_TYPE_TAXI; + break; + } + + } + + if (mLatFrom != null && mLonFrom != null && routerType >= 0) + { + RoutingController.get().prepare(fromLatLon(mLatFrom, mLonFrom), + fromLatLon(mLatTo, mLonTo), routerType); + } + else if (mLatFrom != null && mLonFrom != null) + { + RoutingController.get().prepare(fromLatLon(mLatFrom, mLonFrom), + fromLatLon(mLatTo, mLonTo)); + } + else + { + RoutingController.get().prepare(fromLatLon(mLatTo, mLonTo)); + } + return true; + } + + @NonNull + private MapObject fromLatLon(float lat, float lon) + { + return new MapObject("", 0L, 0, MapObject.API_POINT, "", + "", "", "", lat, lon, "", null, + false, "", null); + } + } }