Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
9113c6aae0
10 changed files with 370 additions and 21 deletions
|
@ -139,6 +139,14 @@
|
||||||
<data android:scheme="google.navigation" />
|
<data android:scheme="google.navigation" />
|
||||||
<data android:scheme="osmand.navigation" />
|
<data android:scheme="osmand.navigation" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
|
<!-- osmand api -->
|
||||||
|
<intent-filter>
|
||||||
|
<data android:scheme="osmand.api" />
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<receiver android:name="net.osmand.plus.audionotes.MediaRemoteControlReceiver">
|
<receiver android:name="net.osmand.plus.audionotes.MediaRemoteControlReceiver">
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
|
@ -15,11 +14,14 @@ import android.util.TypedValue;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
||||||
|
@ -151,4 +153,24 @@ public class AndroidUtils {
|
||||||
public static boolean isValidEmail(CharSequence target) {
|
public static boolean isValidEmail(CharSequence target) {
|
||||||
return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
|
return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFileAsString(File file) {
|
||||||
|
try {
|
||||||
|
FileInputStream fin = new FileInputStream(file);
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(fin, "UTF-8"));
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
sb.append("\n");
|
||||||
|
}
|
||||||
|
sb.append(line);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
fin.close();
|
||||||
|
return sb.toString();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,8 +302,8 @@ public class MapMarkersHelper {
|
||||||
pointDescription.setName(PointDescription.getSearchAddressStr(ctx));
|
pointDescription.setName(PointDescription.getSearchAddressStr(ctx));
|
||||||
}
|
}
|
||||||
if (colorIndex == -1) {
|
if (colorIndex == -1) {
|
||||||
if (mapMarkers.size() > 0) {
|
if (sortedMapMarkers.size() > 0) {
|
||||||
colorIndex = (mapMarkers.get(0).colorIndex + 1) % MAP_MARKERS_COLORS_COUNT;
|
colorIndex = (sortedMapMarkers.get(0).colorIndex + 1) % MAP_MARKERS_COLORS_COUNT;
|
||||||
} else {
|
} else {
|
||||||
colorIndex = 0;
|
colorIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,7 @@ import net.osmand.plus.download.DownloadActivity;
|
||||||
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
|
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
|
||||||
import net.osmand.plus.download.ui.DataStoragePlaceDialogFragment;
|
import net.osmand.plus.download.ui.DataStoragePlaceDialogFragment;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
|
import net.osmand.plus.helpers.ExternalApiHelper;
|
||||||
import net.osmand.plus.helpers.GpxImportHelper;
|
import net.osmand.plus.helpers.GpxImportHelper;
|
||||||
import net.osmand.plus.helpers.WakeLockHelper;
|
import net.osmand.plus.helpers.WakeLockHelper;
|
||||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||||
|
@ -557,6 +558,13 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents,
|
||||||
setIntent(null);
|
setIntent(null);
|
||||||
} else if ("google.navigation".equals(scheme) || "osmand.navigation".equals(scheme)) {
|
} else if ("google.navigation".equals(scheme) || "osmand.navigation".equals(scheme)) {
|
||||||
parseNavigationIntent(data);
|
parseNavigationIntent(data);
|
||||||
|
} else if ("osmand.api".equals(scheme)) {
|
||||||
|
ExternalApiHelper apiHelper = new ExternalApiHelper(this);
|
||||||
|
Intent result = apiHelper.processApiRequest(intent);
|
||||||
|
setResult(apiHelper.getResultCode(), result);
|
||||||
|
if (apiHelper.needFinish()) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -687,7 +695,7 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents,
|
||||||
|
|
||||||
getMyApplication().getTargetPointsHelper().navigateToPoint(new LatLon(lat, lon), false,
|
getMyApplication().getTargetPointsHelper().navigateToPoint(new LatLon(lat, lon), false,
|
||||||
-1);
|
-1);
|
||||||
getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, false);
|
getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, false, true);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
AccessibleToast.makeText(this,
|
AccessibleToast.makeText(this,
|
||||||
getString(R.string.navigation_intent_invalid, schemeSpecificPart),
|
getString(R.string.navigation_intent_invalid, schemeSpecificPart),
|
||||||
|
@ -712,7 +720,7 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents,
|
||||||
Location loc = new Location("map");
|
Location loc = new Location("map");
|
||||||
loc.setLatitude(mapView.getLatitude());
|
loc.setLatitude(mapView.getLatitude());
|
||||||
loc.setLongitude(mapView.getLongitude());
|
loc.setLongitude(mapView.getLongitude());
|
||||||
getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true);
|
getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true, true);
|
||||||
if (dashboardOnMap.isVisible()) {
|
if (dashboardOnMap.isVisible()) {
|
||||||
dashboardOnMap.hideDashboard();
|
dashboardOnMap.hideDashboard();
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,7 +370,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
|
bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
enterRoutePlanningModeGivenGpx(gpxFiles.get(0), from, fromName, useIntermediatePointsByDefault);
|
enterRoutePlanningModeGivenGpx(gpxFiles.get(0), from, fromName, useIntermediatePointsByDefault, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -392,7 +392,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
bld.setAdapter(adapter, new DialogInterface.OnClickListener() {
|
bld.setAdapter(adapter, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
enterRoutePlanningModeGivenGpx(gpxFiles.get(i), from, fromName, useIntermediatePointsByDefault);
|
enterRoutePlanningModeGivenGpx(gpxFiles.get(i), from, fromName, useIntermediatePointsByDefault, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -400,16 +400,17 @@ public class MapActivityActions implements DialogProvider {
|
||||||
bld.setNegativeButton(R.string.shared_string_no, new DialogInterface.OnClickListener() {
|
bld.setNegativeButton(R.string.shared_string_no, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
enterRoutePlanningModeGivenGpx(null, from, fromName, useIntermediatePointsByDefault);
|
enterRoutePlanningModeGivenGpx(null, from, fromName, useIntermediatePointsByDefault, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
bld.show();
|
bld.show();
|
||||||
} else {
|
} else {
|
||||||
enterRoutePlanningModeGivenGpx(null, from, fromName, useIntermediatePointsByDefault);
|
enterRoutePlanningModeGivenGpx(null, from, fromName, useIntermediatePointsByDefault, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enterRoutePlanningModeGivenGpx(GPXFile gpxFile, LatLon from, PointDescription fromName, boolean useIntermediatePointsByDefault) {
|
public void enterRoutePlanningModeGivenGpx(GPXFile gpxFile, LatLon from, PointDescription fromName,
|
||||||
|
boolean useIntermediatePointsByDefault, boolean showDialog) {
|
||||||
settings.USE_INTERMEDIATE_POINTS_NAVIGATION.set(useIntermediatePointsByDefault);
|
settings.USE_INTERMEDIATE_POINTS_NAVIGATION.set(useIntermediatePointsByDefault);
|
||||||
OsmandApplication app = mapActivity.getMyApplication();
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
TargetPointsHelper targets = app.getTargetPointsHelper();
|
TargetPointsHelper targets = app.getTargetPointsHelper();
|
||||||
|
@ -431,7 +432,9 @@ public class MapActivityActions implements DialogProvider {
|
||||||
|
|
||||||
mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode();
|
mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode();
|
||||||
mapActivity.getMapView().refreshMap(true);
|
mapActivity.getMapView().refreshMap(true);
|
||||||
|
if (showDialog) {
|
||||||
mapActivity.getMapLayers().getMapControlsLayer().showDialog();
|
mapActivity.getMapLayers().getMapControlsLayer().showDialog();
|
||||||
|
}
|
||||||
if (targets.hasTooLongDistanceToNavigate()) {
|
if (targets.hasTooLongDistanceToNavigate()) {
|
||||||
app.showToastMessage(R.string.route_is_too_long);
|
app.showToastMessage(R.string.route_is_too_long);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1223,8 +1223,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
||||||
|| visibleType == DashboardType.LIST_MENU
|
|| visibleType == DashboardType.LIST_MENU
|
||||||
|| visibleType == DashboardType.ROUTE_PREFERENCES
|
|| visibleType == DashboardType.ROUTE_PREFERENCES
|
||||||
|| visibleType == DashboardType.CONFIGURE_SCREEN
|
|| visibleType == DashboardType.CONFIGURE_SCREEN
|
||||||
|| visibleType == DashboardType.MAP_MARKERS
|
|| (visibleType == DashboardType.MAP_MARKERS && mapMarkerDialogHelper.hasActiveMarkers())
|
||||||
|| visibleType == DashboardType.MAP_MARKERS_SELECTION;
|
|| (visibleType == DashboardType.MAP_MARKERS_SELECTION && mapMarkerDialogHelper.hasActiveMarkers());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isBackButtonVisible() {
|
private boolean isBackButtonVisible() {
|
||||||
|
|
|
@ -53,6 +53,29 @@ public class ColorDialogs {
|
||||||
0xb48e2512
|
0xb48e2512
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static String[] paletteColorTags = new String[] {
|
||||||
|
"red",
|
||||||
|
"orange",
|
||||||
|
"yellow",
|
||||||
|
"lightgreen",
|
||||||
|
"green",
|
||||||
|
"lightblue",
|
||||||
|
"blue",
|
||||||
|
"purple",
|
||||||
|
"pink",
|
||||||
|
"brown"
|
||||||
|
};
|
||||||
|
|
||||||
|
public static int getColorByTag(String tag) {
|
||||||
|
String t = tag.toLowerCase();
|
||||||
|
for (int i = 0; i < paletteColorTags.length; i++) {
|
||||||
|
String colorTag = paletteColorTags[i];
|
||||||
|
if (colorTag.equals(t)) {
|
||||||
|
return pallette[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
public static void setupColorSpinner(Context ctx, int selectedColor, final Spinner colorSpinner,
|
public static void setupColorSpinner(Context ctx, int selectedColor, final Spinner colorSpinner,
|
||||||
final TIntArrayList colors) {
|
final TIntArrayList colors) {
|
||||||
|
|
281
OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java
Normal file
281
OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java
Normal file
|
@ -0,0 +1,281 @@
|
||||||
|
package net.osmand.plus.helpers;
|
||||||
|
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
|
||||||
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.data.FavouritePoint;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.data.PointDescription;
|
||||||
|
import net.osmand.plus.FavouritesDbHelper;
|
||||||
|
import net.osmand.plus.GPXUtilities;
|
||||||
|
import net.osmand.plus.GPXUtilities.GPXFile;
|
||||||
|
import net.osmand.plus.MapMarkersHelper;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||||
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class ExternalApiHelper {
|
||||||
|
|
||||||
|
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(ExternalApiHelper.class);
|
||||||
|
|
||||||
|
private static final String API_CMD_SHOW_GPX = "show_gpx";
|
||||||
|
private static final String API_CMD_NAVIGATE_GPX = "navigate_gpx";
|
||||||
|
|
||||||
|
private static final String API_CMD_CALC_ROUTE = "calc_route";
|
||||||
|
private static final String API_CMD_REC_AV_NOTE = "rec_av_note";
|
||||||
|
private static final String API_CMD_GET_INFO = "get_info";
|
||||||
|
|
||||||
|
private static final String API_CMD_ADD_FAVORITE = "add_favorite";
|
||||||
|
private static final String API_CMD_ADD_MAP_MARKER = "add_map_marker";
|
||||||
|
|
||||||
|
private static final String API_CMD_START_GPX_REC = "start_gpx_rec";
|
||||||
|
private static final String API_CMD_STOP_GPX_REC = "stop_gpx_rec";
|
||||||
|
|
||||||
|
private static final String API_CMD_SUBSCRIBE_VOICE_NOTIFICATIONS = "subscribe_voice_notifications";
|
||||||
|
|
||||||
|
private static final String PARAM_NAME = "name";
|
||||||
|
private static final String PARAM_DESC = "desc";
|
||||||
|
private static final String PARAM_CATEGORY = "category";
|
||||||
|
private static final String PARAM_LAT = "lat";
|
||||||
|
private static final String PARAM_LON = "lon";
|
||||||
|
private static final String PARAM_COLOR = "color";
|
||||||
|
private static final String PARAM_VISIBLE = "visible";
|
||||||
|
|
||||||
|
private static final String PARAM_PATH = "path";
|
||||||
|
private static final String PARAM_DATA = "data";
|
||||||
|
|
||||||
|
|
||||||
|
private static final int RESULT_CODE_OK = 0;
|
||||||
|
private static final int RESULT_CODE_ERROR_UNKNOWN = -1;
|
||||||
|
private static final int RESULT_CODE_ERROR_GPX_PLUGIN_INACTIVE = 10;
|
||||||
|
private static final int RESULT_CODE_ERROR_GPX_NOT_FOUND = 20;
|
||||||
|
|
||||||
|
private MapActivity mapActivity;
|
||||||
|
private int resultCode;
|
||||||
|
private boolean finish;
|
||||||
|
|
||||||
|
public int getResultCode() {
|
||||||
|
return resultCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean needFinish() {
|
||||||
|
return finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExternalApiHelper(MapActivity mapActivity) {
|
||||||
|
this.mapActivity = mapActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Intent processApiRequest(Intent intent) {
|
||||||
|
|
||||||
|
Intent result = new Intent();
|
||||||
|
OsmandApplication app = (OsmandApplication) mapActivity.getApplication();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
/*
|
||||||
|
+ 1. Intent to show GPX file / start navigation with GPX
|
||||||
|
2. Intent to calculate route between points (passing profile mode) and immediately start navigation
|
||||||
|
3. Intent to request audio/video recording
|
||||||
|
4. Intent (with result?) Current location, ETA, distance to go, time to go on the route
|
||||||
|
+ 5. Intent to add Favorites / Markers
|
||||||
|
+ 6. Intent to start/stop recording GPX
|
||||||
|
Service:
|
||||||
|
8. Subscribe to voice notifications
|
||||||
|
|
||||||
|
|
||||||
|
// test marker
|
||||||
|
Uri uri = Uri.parse("osmand.api://add_map_marker?lat=45.610677&lon=34.368430&name=Marker");
|
||||||
|
|
||||||
|
// test favorite
|
||||||
|
Uri uri = Uri.parse("osmand.api://add_favorite?lat=45.610677&lon=34.368430&name=Favorite&desc=Description&category=test2&color=red&visible=true");
|
||||||
|
|
||||||
|
// test start gpx recording
|
||||||
|
Uri uri = Uri.parse("osmand.api://start_gpx_rec");
|
||||||
|
|
||||||
|
// test stop gpx recording
|
||||||
|
Uri uri = Uri.parse("osmand.api://stop_gpx_rec");
|
||||||
|
|
||||||
|
// test show gpx (path)
|
||||||
|
File gpx = new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), "xxx.gpx");
|
||||||
|
Uri uri = Uri.parse("osmand.api://show_gpx?path=" + URLEncoder.encode(gpx.getAbsolutePath(), "UTF-8"));
|
||||||
|
Uri uri = Uri.parse("osmand.api://navigate_gpx?path=" + URLEncoder.encode(gpx.getAbsolutePath(), "UTF-8"));
|
||||||
|
|
||||||
|
// test show gpx (data)
|
||||||
|
Uri uri = Uri.parse("osmand.api://show_gpx");
|
||||||
|
Uri uri = Uri.parse("osmand.api://navigate_gpx");
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
|
||||||
|
intent.putExtra("data", AndroidUtils.getFileAsString(
|
||||||
|
new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), "xxx.gpx")));
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
Uri uri = intent.getData();
|
||||||
|
String cmd = uri.getHost().toLowerCase();
|
||||||
|
if (API_CMD_SHOW_GPX.equals(cmd) || API_CMD_NAVIGATE_GPX.equals(cmd)) {
|
||||||
|
boolean navigate = API_CMD_NAVIGATE_GPX.equals(cmd);
|
||||||
|
String path = uri.getQueryParameter(PARAM_PATH);
|
||||||
|
GPXFile gpx = null;
|
||||||
|
if (path != null) {
|
||||||
|
File f = new File(path);
|
||||||
|
if (f.exists()) {
|
||||||
|
gpx = GPXUtilities.loadGPXFile(mapActivity, f);
|
||||||
|
}
|
||||||
|
} else if (intent.getStringExtra(PARAM_DATA) != null) {
|
||||||
|
String gpxStr = intent.getStringExtra(PARAM_DATA);
|
||||||
|
if (!Algorithms.isEmpty(gpxStr)) {
|
||||||
|
gpx = GPXUtilities.loadGPXFile(mapActivity, new ByteArrayInputStream(gpxStr.getBytes()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultCode = RESULT_CODE_ERROR_GPX_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gpx != null) {
|
||||||
|
if (navigate) {
|
||||||
|
final RoutingHelper routingHelper = app.getRoutingHelper();
|
||||||
|
if (routingHelper.isFollowingMode()) {
|
||||||
|
final GPXFile gpxFile = gpx;
|
||||||
|
AlertDialog dlg = mapActivity.getMapActions().stopNavigationActionConfirm();
|
||||||
|
dlg.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDismiss(DialogInterface dialog) {
|
||||||
|
if (!routingHelper.isFollowingMode()) {
|
||||||
|
startNavigation(gpxFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
startNavigation(gpx);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
app.getSelectedGpxHelper().setGpxFileToDisplay(gpx);
|
||||||
|
}
|
||||||
|
resultCode = RESULT_CODE_OK;
|
||||||
|
} else {
|
||||||
|
resultCode = RESULT_CODE_ERROR_GPX_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (API_CMD_CALC_ROUTE.equals(cmd)) {
|
||||||
|
|
||||||
|
} else if (API_CMD_REC_AV_NOTE.equals(cmd)) {
|
||||||
|
|
||||||
|
} else if (API_CMD_GET_INFO.equals(cmd)) {
|
||||||
|
|
||||||
|
finish = true;
|
||||||
|
resultCode = RESULT_CODE_OK;
|
||||||
|
|
||||||
|
} else if (API_CMD_ADD_FAVORITE.equals(cmd)) {
|
||||||
|
String name = uri.getQueryParameter(PARAM_NAME);
|
||||||
|
String desc = uri.getQueryParameter(PARAM_DESC);
|
||||||
|
String category = uri.getQueryParameter(PARAM_CATEGORY);
|
||||||
|
double lat = Double.parseDouble(uri.getQueryParameter(PARAM_LAT));
|
||||||
|
double lon = Double.parseDouble(uri.getQueryParameter(PARAM_LON));
|
||||||
|
String colorTag = uri.getQueryParameter(PARAM_COLOR);
|
||||||
|
String visibleStr = uri.getQueryParameter(PARAM_VISIBLE);
|
||||||
|
|
||||||
|
if (name == null) {
|
||||||
|
name = "";
|
||||||
|
}
|
||||||
|
if (desc == null) {
|
||||||
|
desc = "";
|
||||||
|
}
|
||||||
|
if (category == null) {
|
||||||
|
category = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
int color = 0;
|
||||||
|
if (!Algorithms.isEmpty(colorTag)) {
|
||||||
|
color = ColorDialogs.getColorByTag(colorTag);
|
||||||
|
if (color == 0) {
|
||||||
|
LOG.error("Wrong color tag: " + colorTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean visible = true;
|
||||||
|
if (!Algorithms.isEmpty(visibleStr)) {
|
||||||
|
visible = Boolean.parseBoolean(visibleStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
FavouritePoint fav = new FavouritePoint(lat, lon, name, category);
|
||||||
|
fav.setDescription(desc);
|
||||||
|
fav.setColor(color);
|
||||||
|
fav.setVisible(visible);
|
||||||
|
|
||||||
|
FavouritesDbHelper helper = app.getFavorites();
|
||||||
|
helper.addFavourite(fav);
|
||||||
|
|
||||||
|
resultCode = RESULT_CODE_OK;
|
||||||
|
|
||||||
|
} else if (API_CMD_ADD_MAP_MARKER.equals(cmd)) {
|
||||||
|
double lat = Double.parseDouble(uri.getQueryParameter(PARAM_LAT));
|
||||||
|
double lon = Double.parseDouble(uri.getQueryParameter(PARAM_LON));
|
||||||
|
String name = uri.getQueryParameter(PARAM_NAME);
|
||||||
|
|
||||||
|
PointDescription pd = new PointDescription(
|
||||||
|
PointDescription.POINT_TYPE_MAP_MARKER, name != null ? name : "");
|
||||||
|
|
||||||
|
MapMarkersHelper markersHelper = app.getMapMarkersHelper();
|
||||||
|
markersHelper.addMapMarker(new LatLon(lat, lon), pd);
|
||||||
|
|
||||||
|
resultCode = RESULT_CODE_OK;
|
||||||
|
|
||||||
|
} else if (API_CMD_START_GPX_REC.equals(cmd)) {
|
||||||
|
OsmandMonitoringPlugin plugin = OsmandPlugin.getPlugin(OsmandMonitoringPlugin.class);
|
||||||
|
if (plugin == null) {
|
||||||
|
resultCode = RESULT_CODE_ERROR_GPX_PLUGIN_INACTIVE;
|
||||||
|
} else {
|
||||||
|
plugin.startGPXMonitoring(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
resultCode = RESULT_CODE_OK;
|
||||||
|
|
||||||
|
} else if (API_CMD_STOP_GPX_REC.equals(cmd)) {
|
||||||
|
OsmandMonitoringPlugin plugin = OsmandPlugin.getPlugin(OsmandMonitoringPlugin.class);
|
||||||
|
if (plugin == null) {
|
||||||
|
resultCode = RESULT_CODE_ERROR_GPX_PLUGIN_INACTIVE;
|
||||||
|
} else {
|
||||||
|
plugin.stopRecording();
|
||||||
|
}
|
||||||
|
|
||||||
|
resultCode = RESULT_CODE_OK;
|
||||||
|
|
||||||
|
} else if (API_CMD_SUBSCRIBE_VOICE_NOTIFICATIONS.equals(cmd)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error processApiRequest:", e);
|
||||||
|
resultCode = RESULT_CODE_ERROR_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startNavigation(GPXFile gpx) {
|
||||||
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
|
RoutingHelper routingHelper = app.getRoutingHelper();
|
||||||
|
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(gpx, null, null, false, false);
|
||||||
|
if (!app.getTargetPointsHelper().checkPointToNavigateShort()) {
|
||||||
|
mapActivity.getMapLayers().getMapControlsLayer().getMapRouteInfoMenu().show();
|
||||||
|
} else {
|
||||||
|
app.getSettings().APPLICATION_MODE.set(routingHelper.getAppMode());
|
||||||
|
mapActivity.getMapViewTrackingUtilities().backToLocationImpl();
|
||||||
|
app.getSettings().FOLLOW_THE_ROUTE.set(true);
|
||||||
|
routingHelper.setFollowingMode(true);
|
||||||
|
routingHelper.setRoutePlanningMode(false);
|
||||||
|
mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode();
|
||||||
|
app.getRoutingHelper().notifyIfRouteIsCalculated();
|
||||||
|
routingHelper.setCurrentLocation(app.getLocationProvider().getLastKnownLocation(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -99,6 +99,10 @@ public class MapMarkerDialogHelper {
|
||||||
return selectionMode;
|
return selectionMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasActiveMarkers() {
|
||||||
|
return markersHelper.getActiveMapMarkers().size() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSelectionMode(boolean selectionMode) {
|
public void setSelectionMode(boolean selectionMode) {
|
||||||
this.selectionMode = selectionMode;
|
this.selectionMode = selectionMode;
|
||||||
}
|
}
|
||||||
|
@ -341,7 +345,7 @@ public class MapMarkerDialogHelper {
|
||||||
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
|
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
|
||||||
MenuItem item;
|
MenuItem item;
|
||||||
item = optionsMenu.getMenu().add(R.string.shared_string_clear)
|
item = optionsMenu.getMenu().add(R.string.shared_string_clear)
|
||||||
.setIcon(iconsCache.getContentIcon(R.drawable.ic_action_delete_dark, !nightMode));
|
.setIcon(iconsCache.getContentIcon(R.drawable.ic_action_delete_dark));
|
||||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
@ -369,7 +373,7 @@ public class MapMarkerDialogHelper {
|
||||||
|
|
||||||
if (!sorted) {
|
if (!sorted) {
|
||||||
item = optionsMenu.getMenu().add(R.string.shared_string_reverse_order).setIcon(
|
item = optionsMenu.getMenu().add(R.string.shared_string_reverse_order).setIcon(
|
||||||
iconsCache.getContentIcon(R.drawable.ic_action_undo_dark, !nightMode));
|
iconsCache.getContentIcon(R.drawable.ic_action_undo_dark));
|
||||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
@ -385,7 +389,7 @@ public class MapMarkerDialogHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
item = optionsMenu.getMenu().add(R.string.shared_string_save_as_gpx).setIcon(
|
item = optionsMenu.getMenu().add(R.string.shared_string_save_as_gpx).setIcon(
|
||||||
iconsCache.getContentIcon(R.drawable.ic_action_save, !nightMode));
|
iconsCache.getContentIcon(R.drawable.ic_action_save));
|
||||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
|
|
@ -472,7 +472,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
||||||
latLon.getLongitude(), getPointDescriptionForTarget());
|
latLon.getLongitude(), getPointDescriptionForTarget());
|
||||||
} else if (targets.getIntermediatePoints().isEmpty()) {
|
} else if (targets.getIntermediatePoints().isEmpty()) {
|
||||||
targets.navigateToPoint(latLon, true, -1, getPointDescriptionForTarget());
|
targets.navigateToPoint(latLon, true, -1, getPointDescriptionForTarget());
|
||||||
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true);
|
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true, true);
|
||||||
close();
|
close();
|
||||||
} else {
|
} else {
|
||||||
Builder bld = new AlertDialog.Builder(mapActivity);
|
Builder bld = new AlertDialog.Builder(mapActivity);
|
||||||
|
@ -494,11 +494,11 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
||||||
if (defaultVls[0] == 0) {
|
if (defaultVls[0] == 0) {
|
||||||
targets.removeAllWayPoints(false, true);
|
targets.removeAllWayPoints(false, true);
|
||||||
targets.navigateToPoint(latLon, true, -1, getPointDescriptionForTarget());
|
targets.navigateToPoint(latLon, true, -1, getPointDescriptionForTarget());
|
||||||
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true);
|
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true, true);
|
||||||
close();
|
close();
|
||||||
} else {
|
} else {
|
||||||
targets.navigateToPoint(latLon, true, -1, getPointDescriptionForTarget());
|
targets.navigateToPoint(latLon, true, -1, getPointDescriptionForTarget());
|
||||||
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true);
|
mapActivity.getMapActions().enterRoutePlanningModeGivenGpx(null, null, null, true, true);
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue