[android] Added SHOW_ON_MAP and BUILD_ROUTE intent actions.

This commit is contained in:
Roman Romanov 2017-06-07 14:41:07 +04:00
parent 03c9b3db7e
commit 1b68590c77
3 changed files with 189 additions and 1 deletions

View file

@ -154,6 +154,16 @@
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="com.mapswithme.maps.pro.action.SHOW_ON_MAP"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="com.mapswithme.maps.pro.action.BUILD_ROUTE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>

View file

@ -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();

View file

@ -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);
}
}
}