forked from organicmaps/organicmaps
Merge pull request #6211 from goblinr/MAPSME-4663-intent-api
[android] Added SHOW_ON_MAP and BUILD_ROUTE intent actions.
This commit is contained in:
commit
dcd247bec7
3 changed files with 198 additions and 1 deletions
|
@ -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"/>
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.location.Location;
|
|||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.CallSuper;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.text.TextUtils;
|
||||
|
@ -102,7 +103,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 +787,89 @@ 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;
|
||||
|
||||
double lat = getCoordinateFromIntent(intent, EXTRA_LAT);
|
||||
double lon = getCoordinateFromIntent(intent, EXTRA_LON);
|
||||
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;
|
||||
|
||||
double latTo = getCoordinateFromIntent(intent, EXTRA_LAT_TO);
|
||||
double lonTo = getCoordinateFromIntent(intent, EXTRA_LON_TO);
|
||||
boolean hasFrom = intent.hasExtra(EXTRA_LAT_FROM) && intent.hasExtra(EXTRA_LON_FROM);
|
||||
boolean hasRouter = intent.hasExtra(EXTRA_ROUTER);
|
||||
|
||||
if (hasFrom && hasRouter)
|
||||
{
|
||||
double latFrom = getCoordinateFromIntent(intent, EXTRA_LAT_FROM);
|
||||
double lonFrom = getCoordinateFromIntent(intent, EXTRA_LON_FROM);
|
||||
mMapTaskToForward = new MwmActivity.BuildRouteTask(latTo, lonTo, latFrom,lonFrom,
|
||||
intent.getStringExtra(EXTRA_ROUTER));
|
||||
}
|
||||
else if (hasFrom)
|
||||
{
|
||||
double latFrom = getCoordinateFromIntent(intent, EXTRA_LAT_FROM);
|
||||
double lonFrom = getCoordinateFromIntent(intent, EXTRA_LON_FROM);
|
||||
mMapTaskToForward = new MwmActivity.BuildRouteTask(latTo, lonTo, latFrom,lonFrom);
|
||||
}
|
||||
else
|
||||
{
|
||||
mMapTaskToForward = new MwmActivity.BuildRouteTask(latTo, lonTo);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static double getCoordinateFromIntent(@NonNull Intent intent, @NonNull String key)
|
||||
{
|
||||
double value = intent.getDoubleExtra(key, 0.0);
|
||||
if (Double.compare(value, 0.0) == 0)
|
||||
value = intent.getFloatExtra(key, 0.0f);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private static native int nativeGetBytesToDownload();
|
||||
private static native int nativeStartNextFileDownload(Listener listener);
|
||||
private static native void nativeCancelCurrentFile();
|
||||
|
|
|
@ -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,104 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
static class ShowPointTask implements MapTask
|
||||
{
|
||||
private final double mLat;
|
||||
private final double mLon;
|
||||
|
||||
ShowPointTask(double lat, double 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 double mLatTo;
|
||||
private final double mLonTo;
|
||||
@Nullable
|
||||
private final Double mLatFrom;
|
||||
@Nullable
|
||||
private final Double mLonFrom;
|
||||
@Nullable
|
||||
private final String mRouter;
|
||||
|
||||
@NonNull
|
||||
private static MapObject fromLatLon(double lat, double lon)
|
||||
{
|
||||
return new MapObject("", 0L, 0, MapObject.API_POINT, "",
|
||||
"", "", "", lat, lon, "", null,
|
||||
false, "", null);
|
||||
}
|
||||
|
||||
BuildRouteTask(double latTo, double lonTo)
|
||||
{
|
||||
this(latTo, lonTo, null, null, null);
|
||||
}
|
||||
|
||||
BuildRouteTask(double latTo, double lonTo, @Nullable Double latFrom, @Nullable Double lonFrom)
|
||||
{
|
||||
this(latTo, lonTo, latFrom, lonFrom, null);
|
||||
}
|
||||
|
||||
BuildRouteTask(double latTo, double lonTo, @Nullable Double latFrom, @Nullable Double 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue