diff --git a/OsmAnd/res/layout/bottom_sheet_item_with_descr_radio_and_icon_btn.xml b/OsmAnd/res/layout/bottom_sheet_item_with_descr_radio_and_icon_btn.xml
index d81614fbb1..c4dc6d4265 100644
--- a/OsmAnd/res/layout/bottom_sheet_item_with_descr_radio_and_icon_btn.xml
+++ b/OsmAnd/res/layout/bottom_sheet_item_with_descr_radio_and_icon_btn.xml
@@ -14,10 +14,11 @@
android:orientation="horizontal">
+ app:srcCompat="@drawable/ic_action_settings" />
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
index 3ed8053ca4..c526ddec2a 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
@@ -63,8 +63,8 @@ import net.osmand.plus.measurementtool.MeasurementToolFragment;
import net.osmand.plus.measurementtool.StartPlanRouteBottomSheet;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.osmedit.dialogs.DismissRouteBottomSheetFragment;
+import net.osmand.plus.profiles.ProfileDataObject;
import net.osmand.plus.profiles.ProfileDataUtils;
-import net.osmand.plus.profiles.RoutingProfileDataObject;
import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu;
import net.osmand.plus.routepreparationmenu.WaypointsFragment;
import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder;
@@ -737,7 +737,7 @@ public class MapActivityActions implements DialogProvider {
String modeDescription;
- Map profilesObjects = ProfileDataUtils.getRoutingProfiles(app);
+ Map profilesObjects = ProfileDataUtils.getRoutingProfiles(app);
for (final ApplicationMode appMode : activeModes) {
if (appMode.isCustomProfile()) {
modeDescription = getProfileDescription(app, appMode, profilesObjects, getString(R.string.profile_type_user_string));
@@ -1046,7 +1046,7 @@ public class MapActivityActions implements DialogProvider {
//switch profile button
ApplicationMode currentMode = app.getSettings().APPLICATION_MODE.get();
String modeDescription;
- Map profilesObjects = ProfileDataUtils.getRoutingProfiles(app);
+ Map profilesObjects = ProfileDataUtils.getRoutingProfiles(app);
if (currentMode.isCustomProfile()) {
modeDescription = getProfileDescription(app, currentMode, profilesObjects, getString(R.string.profile_type_user_string));
} else {
@@ -1087,12 +1087,12 @@ public class MapActivityActions implements DialogProvider {
}
private String getProfileDescription(OsmandApplication app, ApplicationMode mode,
- Map profilesObjects, String defaultDescription) {
+ Map profilesObjects, String defaultDescription) {
String description = defaultDescription;
String routingProfileKey = mode.getRoutingProfile();
if (!Algorithms.isEmpty(routingProfileKey)) {
- RoutingProfileDataObject profileDataObject = profilesObjects.get(routingProfileKey);
+ ProfileDataObject profileDataObject = profilesObjects.get(routingProfileKey);
if (profileDataObject != null) {
description = String.format(app.getString(R.string.profile_type_descr_string),
Algorithms.capitalizeFirstLetterAndLowercase(profileDataObject.getName()));
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngine.java b/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngine.java
index 10ba169cb1..cf078f8b87 100644
--- a/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngine.java
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngine.java
@@ -4,40 +4,51 @@ import android.content.Context;
import androidx.annotation.NonNull;
+import net.osmand.data.LatLon;
import net.osmand.plus.R;
+import net.osmand.plus.onlinerouting.type.EngineType;
import net.osmand.util.Algorithms;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class OnlineRoutingEngine {
public final static String ONLINE_ROUTING_ENGINE_PREFIX = "online_routing_engine_";
- public enum EngineParameterType {
- CUSTOM_SERVER_URL,
+ public enum EngineParameter {
CUSTOM_NAME,
+ CUSTOM_URL,
API_KEY
}
private String stringKey;
- private ServerType serverType;
+ private EngineType type;
+ private String customUrl;
private String vehicleKey;
private Map params = new HashMap<>();
+ private OnlineRoutingEngine() {};
+
public OnlineRoutingEngine(@NonNull String stringKey,
- @NonNull ServerType serverType,
+ @NonNull EngineType type,
@NonNull String vehicleKey,
Map params) {
- this(stringKey, serverType, vehicleKey);
+ this(stringKey, type, vehicleKey);
this.params = params;
}
public OnlineRoutingEngine(@NonNull String stringKey,
- @NonNull ServerType serverType,
+ @NonNull EngineType type,
@NonNull String vehicleKey) {
+ this(type, vehicleKey);
this.stringKey = stringKey;
- this.serverType = serverType;
+ }
+
+ private OnlineRoutingEngine(@NonNull EngineType type,
+ @NonNull String vehicleKey) {
+ this.type = type;
this.vehicleKey = vehicleKey;
}
@@ -45,8 +56,15 @@ public class OnlineRoutingEngine {
return stringKey;
}
- public ServerType getServerType() {
- return serverType;
+ public EngineType getType() {
+ return type;
+ }
+
+ public String getBaseUrl() {
+ if (Algorithms.isEmpty(customUrl)) {
+ return type.getStandardUrl();
+ }
+ return customUrl;
}
public String getVehicleKey() {
@@ -57,25 +75,16 @@ public class OnlineRoutingEngine {
return params;
}
- public String getBaseUrl() {
- String customServerUrl = getParameter(EngineParameterType.CUSTOM_SERVER_URL);
- if (!Algorithms.isEmpty(customServerUrl)) {
- return customServerUrl;
- } else {
- return serverType.getBaseUrl();
- }
+ public String getParameter(EngineParameter paramKey) {
+ return params.get(paramKey.name());
}
- public String getParameter(EngineParameterType paramType) {
- return params.get(paramType.name());
- }
-
- public void putParameter(EngineParameterType paramType, String paramValue) {
- params.put(paramType.name(), paramValue);
+ public void putParameter(EngineParameter paramKey, String paramValue) {
+ params.put(paramKey.name(), paramValue);
}
public String getName(@NonNull Context ctx) {
- String customName = getParameter(EngineParameterType.CUSTOM_NAME);
+ String customName = getParameter(EngineParameter.CUSTOM_NAME);
if (customName != null) {
return customName;
} else {
@@ -83,21 +92,30 @@ public class OnlineRoutingEngine {
}
}
+ public String createFullUrl(@NonNull List path) {
+ return type.createFullUrl(this, path);
+ }
+
private String getStandardName(@NonNull Context ctx) {
- return getStandardName(ctx, serverType, vehicleKey);
+ return getStandardName(ctx, type, vehicleKey);
}
public static String getStandardName(@NonNull Context ctx,
- @NonNull ServerType serverType,
+ @NonNull EngineType type,
@NonNull String vehicleKey) {
String vehicleTitle = VehicleType.toHumanString(ctx, vehicleKey);
String pattern = ctx.getString(R.string.ltr_or_rtl_combine_via_dash);
- return String.format(pattern, serverType.getTitle(), vehicleTitle);
+ return String.format(pattern, type.getTitle(), vehicleTitle);
}
- public static OnlineRoutingEngine createNewEngine(@NonNull ServerType serverType,
+ public static OnlineRoutingEngine createNewEngine(@NonNull EngineType type,
@NonNull String vehicleKey) {
- return new OnlineRoutingEngine(generateKey(), serverType, vehicleKey);
+ return new OnlineRoutingEngine(generateKey(), type, vehicleKey);
+ }
+
+ public static OnlineRoutingEngine createTmpEngine(@NonNull EngineType type,
+ @NonNull String vehicleKey) {
+ return new OnlineRoutingEngine(type, vehicleKey);
}
private static String generateKey() {
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngineFragment.java b/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngineFragment.java
index 18b24a8762..9414b20a0e 100644
--- a/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngineFragment.java
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingEngineFragment.java
@@ -30,7 +30,10 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionItem;
import net.osmand.plus.onlinerouting.OnlineRoutingCard.OnTextChangedListener;
-import net.osmand.plus.onlinerouting.OnlineRoutingEngine.EngineParameterType;
+import net.osmand.plus.onlinerouting.OnlineRoutingEngine.EngineParameter;
+import net.osmand.plus.onlinerouting.type.EngineType;
+import net.osmand.plus.onlinerouting.type.GraphhoperEngine;
+import net.osmand.plus.onlinerouting.type.OsrmEngine;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.util.Algorithms;
@@ -62,7 +65,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
private View view;
private ViewGroup segmentsContainer;
private OnlineRoutingCard nameCard;
- private OnlineRoutingCard serverCard;
+ private OnlineRoutingCard typeCard;
private OnlineRoutingCard vehicleCard;
private OnlineRoutingCard apiKeyCard;
private OnlineRoutingCard exampleCard;
@@ -143,7 +146,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
setupToolbar((Toolbar) view.findViewById(R.id.toolbar));
setupNameCard();
- setupServerCard();
+ setupTypeCard();
setupVehicleCard();
setupApiKeyCard();
setupExampleCard();
@@ -152,7 +155,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
setupButtons();
- updateCardViews(nameCard, serverCard, vehicleCard, exampleCard);
+ updateCardViews(nameCard, typeCard, vehicleCard, exampleCard);
return view;
}
@@ -174,38 +177,39 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
segmentsContainer.addView(nameCard.getView());
}
- private void setupServerCard() {
- serverCard = new OnlineRoutingCard(mapActivity, isNightMode());
- serverCard.build(mapActivity);
- serverCard.setHeaderTitle(getString(R.string.shared_string_type));
+ private void setupTypeCard() {
+ typeCard = new OnlineRoutingCard(mapActivity, isNightMode());
+ typeCard.build(mapActivity);
+ typeCard.setHeaderTitle(getString(R.string.shared_string_type));
List serverItems = new ArrayList<>();
- for (ServerType server : ServerType.values()) {
+ for (EngineType server : EngineType.values()) {
serverItems.add(new HorizontalSelectionItem(server.getTitle(), server));
}
- serverCard.setSelectionMenu(serverItems, engine.serverType.getTitle(),
+ typeCard.setSelectionMenu(serverItems, engine.type.getTitle(),
new CallbackWithObject() {
@Override
public boolean processResult(HorizontalSelectionItem result) {
- ServerType server = (ServerType) result.getObject();
- if (engine.serverType != server) {
- engine.serverType = server;
- updateCardViews(nameCard, serverCard, exampleCard);
+ EngineType type = (EngineType) result.getObject();
+ if (!Algorithms.objectEquals(engine.type.getStringKey(), type.getStringKey())) {
+ engine.type = type;
+ updateCardViews(nameCard, typeCard, exampleCard);
return true;
}
return false;
}
});
- serverCard.setOnTextChangedListener(new OnTextChangedListener() {
+ typeCard.setOnTextChangedListener(new OnTextChangedListener() {
@Override
public void onTextChanged(boolean editedByUser, String text) {
if (editedByUser) {
engine.customServerUrl = text;
+ updateCardViews(exampleCard);
}
}
});
- serverCard.setFieldBoxLabelText(getString(R.string.shared_string_server_url));
- serverCard.showDivider();
- segmentsContainer.addView(serverCard.getView());
+ typeCard.setFieldBoxLabelText(getString(R.string.shared_string_server_url));
+ typeCard.showDivider();
+ segmentsContainer.addView(typeCard.getView());
}
private void setupVehicleCard() {
@@ -342,22 +346,28 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
for (BaseCard card : cardsToUpdate) {
if (nameCard.equals(card)) {
if (Algorithms.isEmpty(engine.customName)) {
- String name = OnlineRoutingEngine.getStandardName(app, engine.serverType, engine.getVehicleKey());
+ String name;
+ if (Algorithms.isEmpty(engine.getVehicleKey())) {
+ name = engine.type.getTitle();
+ } else {
+ name = OnlineRoutingEngine.getStandardName(app, engine.type, engine.getVehicleKey());
+ }
nameCard.setEditedText(name);
}
- } else if (serverCard.equals(card)) {
- serverCard.setHeaderSubtitle(engine.serverType.getTitle());
- serverCard.setEditedText(engine.getBaseUrl());
- if (engine.serverType == ServerType.GRAPHHOPER) {
+ } else if (typeCard.equals(card)) {
+ typeCard.setHeaderSubtitle(engine.type.getTitle());
+ typeCard.setEditedText(engine.getBaseUrl());
+ if (engine.type instanceof GraphhoperEngine) {
apiKeyCard.show();
} else {
apiKeyCard.hide();
}
} else if (vehicleCard.equals(card)) {
- vehicleCard.setHeaderSubtitle(engine.vehicleType.getTitle(app));
- if (engine.vehicleType == VehicleType.CUSTOM) {
+ VehicleType vt = VehicleType.getVehicleByKey(engine.getVehicleKey());
+ vehicleCard.setHeaderSubtitle(vt.getTitle(app));
+ if (vt == VehicleType.CUSTOM) {
vehicleCard.showFieldBox();
vehicleCard.setEditedText(engine.getVehicleKey());
} else {
@@ -400,15 +410,15 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
private void saveChanges() {
OnlineRoutingEngine engineToSave;
if (isEditingMode()) {
- engineToSave = new OnlineRoutingEngine(editedEngineKey, engine.serverType, engine.getVehicleKey());
+ engineToSave = new OnlineRoutingEngine(editedEngineKey, engine.type, engine.getVehicleKey());
} else {
- engineToSave = OnlineRoutingEngine.createNewEngine(engine.serverType, engine.getVehicleKey());
+ engineToSave = OnlineRoutingEngine.createNewEngine(engine.type, engine.getVehicleKey());
}
- engineToSave.putParameter(EngineParameterType.CUSTOM_SERVER_URL, engine.customServerUrl);
- engineToSave.putParameter(EngineParameterType.CUSTOM_NAME, engine.customName);
- if (engine.serverType == ServerType.GRAPHHOPER) {
- engineToSave.putParameter(EngineParameterType.API_KEY, engine.apiKey);
+ engineToSave.putParameter(EngineParameter.CUSTOM_NAME, engine.customName);
+ engineToSave.putParameter(EngineParameter.CUSTOM_URL, engine.customServerUrl);
+ if (engine.type instanceof GraphhoperEngine) {
+ engineToSave.putParameter(EngineParameter.API_KEY, engine.apiKey);
}
helper.saveEngine(engineToSave);
@@ -419,30 +429,18 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
}
private String getTestUrl() {
- String baseUrl = engine.serverType.getBaseUrl();
- String vehicle = engine.getVehicleKey();
-
- LatLon startPoint = selectedLocation.getCityCenterLatLon();
- LatLon endPoint = selectedLocation.getCityAirportLatLon();
-
- if (engine.serverType == ServerType.GRAPHHOPER) {
- return baseUrl + "?" + "point=" + startPoint.getLatitude()
- + "," + startPoint.getLongitude()
- + "&" + "point=" + endPoint.getLatitude()
- + "," + endPoint.getLongitude()
- + "&" + "vehicle=" + vehicle
- + (!Algorithms.isEmpty(engine.apiKey) ? ("&" + "key=" + engine.apiKey) : "");
- } else {
- return baseUrl + vehicle + "/" + startPoint.getLatitude()
- + "," + startPoint.getLongitude()
- + ";" + endPoint.getLatitude()
- + "," + endPoint.getLongitude()
- + "?" + "geometries=geojson";
- }
+ List path = new ArrayList<>();
+ path.add(selectedLocation.getCityCenterLatLon());
+ path.add(selectedLocation.getCityAirportLatLon());
+ OnlineRoutingEngine tmpEngine =
+ OnlineRoutingEngine.createTmpEngine(engine.type, engine.getVehicleKey());
+ tmpEngine.putParameter(EngineParameter.CUSTOM_URL, engine.customServerUrl);
+ tmpEngine.putParameter(EngineParameter.API_KEY, engine.apiKey);
+ return tmpEngine.createFullUrl(path);
}
private void testEngineWork() {
- final ServerType server = engine.serverType;
+ final EngineType type = engine.type;
final ExampleLocation location = selectedLocation;
AndroidNetworkUtils.sendRequestAsync(app, exampleCard.getEditedText(), null,
null, false, false, new OnRequestResultListener() {
@@ -453,9 +451,9 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
try {
JSONObject obj = new JSONObject(response);
- if (server == ServerType.GRAPHHOPER) {
+ if (type instanceof GraphhoperEngine) {
resultOk = obj.has("paths");
- } else if (server == ServerType.OSRM) {
+ } else if (type instanceof OsrmEngine) {
resultOk = obj.has("routes");
}
} catch (JSONException e) {
@@ -494,7 +492,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
private void saveState(Bundle outState) {
outState.putString(ENGINE_NAME_KEY, engine.customName);
- outState.putString(ENGINE_SERVER_KEY, engine.serverType.name());
+ outState.putString(ENGINE_SERVER_KEY, engine.type.getStringKey());
outState.putString(ENGINE_SERVER_URL_KEY, engine.customServerUrl);
outState.putString(ENGINE_VEHICLE_TYPE_KEY, engine.vehicleType.name());
outState.putString(ENGINE_CUSTOM_VEHICLE_KEY, engine.customVehicleKey);
@@ -508,7 +506,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
private void restoreState(Bundle savedState) {
engine.customName = savedState.getString(ENGINE_NAME_KEY);
- engine.serverType = ServerType.valueOf(savedState.getString(ENGINE_SERVER_KEY));
+ engine.type = EngineType.valueOf(savedState.getString(ENGINE_SERVER_KEY));
engine.customServerUrl = savedState.getString(ENGINE_SERVER_URL_KEY);
engine.vehicleType = VehicleType.valueOf(savedState.getString(ENGINE_VEHICLE_TYPE_KEY));
engine.customVehicleKey = savedState.getString(ENGINE_CUSTOM_VEHICLE_KEY);
@@ -519,16 +517,15 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
}
private void initState() {
- engine.serverType = ServerType.values()[0];
+ engine.type = EngineType.values()[0];
engine.vehicleType = VehicleType.values()[0];
selectedLocation = ExampleLocation.values()[0];
if (isEditingMode()) {
OnlineRoutingEngine editedEngine = helper.getEngineByKey(editedEngineKey);
if (editedEngine != null) {
- engine.customName = editedEngine.getParameter(EngineParameterType.CUSTOM_NAME);
- engine.serverType = editedEngine.getServerType();
- engine.customServerUrl = editedEngine.getParameter(EngineParameterType.CUSTOM_SERVER_URL);
+ engine.customName = editedEngine.getParameter(EngineParameter.CUSTOM_NAME);
+ engine.type = editedEngine.getType();
String vehicleKey = editedEngine.getVehicleKey();
if (vehicleKey != null) {
VehicleType vehicleType = VehicleType.getVehicleByKey(vehicleKey);
@@ -537,7 +534,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
}
engine.vehicleType = vehicleType;
}
- engine.apiKey = editedEngine.getParameter(EngineParameterType.API_KEY);
+ engine.apiKey = editedEngine.getParameter(EngineParameter.API_KEY);
}
}
}
@@ -583,7 +580,7 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
private static class OnlineRoutingEngineObject {
private String customName;
- private ServerType serverType;
+ private EngineType type;
private String customServerUrl;
private VehicleType vehicleType;
private String customVehicleKey;
@@ -596,15 +593,18 @@ public class OnlineRoutingEngineFragment extends BaseOsmAndFragment {
return vehicleType.getKey();
}
- public String getBaseUrl() {
- return customServerUrl != null ? customServerUrl : serverType.getBaseUrl();
- }
-
public String getName(Context ctx) {
if (customName != null) {
return customName;
}
- return OnlineRoutingEngine.getStandardName(ctx, serverType, getVehicleKey());
+ return OnlineRoutingEngine.getStandardName(ctx, type, getVehicleKey());
+ }
+
+ public String getBaseUrl() {
+ if (Algorithms.isEmpty(customServerUrl)) {
+ return type.getStandardUrl();
+ }
+ return customServerUrl;
}
}
}
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingHelper.java b/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingHelper.java
index 8a9e42bd54..df91950174 100644
--- a/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingHelper.java
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/OnlineRoutingHelper.java
@@ -6,7 +6,11 @@ import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import net.osmand.PlatformUtil;
+import net.osmand.data.LatLon;
+import net.osmand.osm.io.NetworkUtils;
import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.Version;
+import net.osmand.plus.onlinerouting.type.EngineType;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.util.Algorithms;
@@ -15,9 +19,14 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
import java.lang.reflect.Type;
+import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -27,8 +36,7 @@ public class OnlineRoutingHelper {
private OsmandApplication app;
private OsmandSettings settings;
- private List cachedEngines;
- private Map cachedEnginesMap;
+ private Map cachedEngines;
public OnlineRoutingHelper(OsmandApplication app) {
this.app = app;
@@ -38,23 +46,39 @@ public class OnlineRoutingHelper {
@NonNull
public List getEngines() {
- return cachedEngines;
+ return new ArrayList<>(cachedEngines.values());
}
public OnlineRoutingEngine getEngineByKey(String stringKey) {
- return cachedEnginesMap.get(stringKey);
+ return cachedEngines.get(stringKey);
+ }
+
+ public List calculateRouteOnline(@NonNull OnlineRoutingEngine engine,
+ @NonNull List path) throws IOException, JSONException {
+ String fullUrl = engine.createFullUrl(path);
+ String content = makeRequest(fullUrl);
+ return engine.getType().parseResponse(content);
+ }
+
+ private String makeRequest(String url) throws IOException {
+ URLConnection connection = NetworkUtils.getHttpURLConnection(url);
+ connection.setRequestProperty("User-Agent", Version.getFullVersion(app));
+ StringBuilder content = new StringBuilder();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ String s;
+ while ((s = reader.readLine()) != null) {
+ content.append(s);
+ }
+ try {
+ reader.close();
+ } catch (IOException ignored) {
+ }
+ return content.toString();
}
public void saveEngine(@NonNull OnlineRoutingEngine engine) {
String stringKey = engine.getStringKey();
- OnlineRoutingEngine existedEngine = cachedEnginesMap.get(stringKey);
- if (existedEngine != null) {
- int index = cachedEngines.indexOf(existedEngine);
- cachedEngines.set(index, engine);
- } else {
- cachedEngines.add(engine);
- }
- cachedEnginesMap.put(stringKey, engine);
+ cachedEngines.put(stringKey, engine);
saveToSettings();
}
@@ -67,19 +91,18 @@ public class OnlineRoutingHelper {
public void deleteEngine(@NonNull OnlineRoutingEngine engine) {
String stringKey = engine.getStringKey();
- if (cachedEnginesMap.containsKey(stringKey)) {
- OnlineRoutingEngine existedEngine = cachedEnginesMap.remove(stringKey);
- cachedEngines.remove(existedEngine);
+ if (cachedEngines.containsKey(stringKey)) {
+ cachedEngines.remove(stringKey);
saveToSettings();
}
}
private void loadFromSettings() {
- cachedEngines = readFromSettings();
- cachedEnginesMap = new HashMap<>();
- for (OnlineRoutingEngine engine : cachedEngines) {
- cachedEnginesMap.put(engine.getStringKey(), engine);
+ Map cachedEngines = new LinkedHashMap<>();
+ for (OnlineRoutingEngine engine : readFromSettings()) {
+ cachedEngines.put(engine.getStringKey(), engine);
}
+ this.cachedEngines = cachedEngines;
}
@NonNull
@@ -100,7 +123,7 @@ public class OnlineRoutingHelper {
private void saveToSettings() {
if (!Algorithms.isEmpty(cachedEngines)) {
JSONObject json = new JSONObject();
- if (writeToJson(json, cachedEngines)) {
+ if (writeToJson(json, getEngines())) {
settings.ONLINE_ROUTING_ENGINES.set(json.toString());
}
} else {
@@ -121,10 +144,10 @@ public class OnlineRoutingHelper {
JSONObject object = itemsJson.getJSONObject(i);
String key = object.getString("key");
String vehicleKey = object.getString("vehicle");
- ServerType serverType = ServerType.valueOf(object.getString("serverType"));
+ EngineType engineType = EngineType.valueOf(object.getString("type"));
String paramsString = object.getString("params");
HashMap params = gson.fromJson(paramsString, type);
- engines.add(new OnlineRoutingEngine(key, serverType, vehicleKey, params));
+ engines.add(new OnlineRoutingEngine(key, engineType, vehicleKey, params));
}
} catch (JSONException e) {
LOG.debug("Error when reading engines from JSON: " + e.toString());
@@ -140,7 +163,7 @@ public class OnlineRoutingHelper {
for (OnlineRoutingEngine engine : engines) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("key", engine.getStringKey());
- jsonObject.put("serverType", engine.getServerType().name());
+ jsonObject.put("type", engine.getType().getStringKey());
jsonObject.put("vehicle", engine.getVehicleKey());
jsonObject.put("params", gson.toJson(engine.getParams(), type));
jsonArray.put(jsonObject);
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/ServerType.java b/OsmAnd/src/net/osmand/plus/onlinerouting/ServerType.java
deleted file mode 100644
index 7eb30798d5..0000000000
--- a/OsmAnd/src/net/osmand/plus/onlinerouting/ServerType.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.osmand.plus.onlinerouting;
-
-public enum ServerType {
- GRAPHHOPER("Graphhoper", "https://graphhopper.com/api/1/route"),
- OSRM("OSRM", "https://zlzk.biz/route/v1/");
-
- ServerType(String title, String baseUrl) {
- this.title = title;
- this.baseUrl = baseUrl;
- }
-
- private String title;
- private String baseUrl;
-
- public String getTitle() {
- return title;
- }
-
- public String getBaseUrl() {
- return baseUrl;
- }
-}
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/type/EngineType.java b/OsmAnd/src/net/osmand/plus/onlinerouting/type/EngineType.java
new file mode 100644
index 0000000000..bf8eaac493
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/type/EngineType.java
@@ -0,0 +1,55 @@
+package net.osmand.plus.onlinerouting.type;
+
+import androidx.annotation.NonNull;
+
+import net.osmand.data.LatLon;
+import net.osmand.plus.onlinerouting.OnlineRoutingEngine;
+import net.osmand.util.Algorithms;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+public abstract class EngineType {
+
+ public abstract String getStringKey();
+
+ public abstract String getTitle();
+
+ public abstract String getStandardUrl();
+
+ public String createFullUrl(OnlineRoutingEngine engine, List path) {
+ StringBuilder sb = new StringBuilder(engine.getBaseUrl());
+ createFullUrl(sb, engine, path);
+ return sb.toString();
+ }
+
+ protected abstract void createFullUrl(StringBuilder sb,
+ OnlineRoutingEngine engine,
+ List path);
+
+ public List parseResponse(@NonNull String content) throws JSONException {
+ return parseResponse(new JSONObject(content), content);
+ }
+
+ protected abstract List parseResponse(JSONObject obj, @NonNull String content) throws JSONException;
+
+ public static EngineType[] values() {
+ EngineType[] types = new EngineType[] {
+ new GraphhoperEngine(),
+ new OsrmEngine()
+ };
+ return types;
+ }
+
+ public static EngineType valueOf(String key) {
+ EngineType[] values = values();
+ for (EngineType type : values) {
+ if (Algorithms.objectEquals(type.getStringKey(), key)) {
+ return type;
+ }
+ }
+ return values[0];
+ }
+}
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/type/GraphhoperEngine.java b/OsmAnd/src/net/osmand/plus/onlinerouting/type/GraphhoperEngine.java
new file mode 100644
index 0000000000..ea9288e564
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/type/GraphhoperEngine.java
@@ -0,0 +1,60 @@
+package net.osmand.plus.onlinerouting.type;
+
+import androidx.annotation.NonNull;
+
+import net.osmand.data.LatLon;
+import net.osmand.plus.onlinerouting.OnlineRoutingEngine;
+import net.osmand.plus.onlinerouting.OnlineRoutingEngine.EngineParameter;
+import net.osmand.util.Algorithms;
+import net.osmand.util.GeoPolylineParserUtil;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+public class GraphhoperEngine extends EngineType {
+
+ @Override
+ public String getStringKey() {
+ return "graphhoper";
+ }
+
+ @Override
+ public String getTitle() {
+ return "Graphhoper";
+ }
+
+ @Override
+ public String getStandardUrl() {
+ return "https://graphhopper.com/api/1/route";
+ }
+
+ @Override
+ protected void createFullUrl(StringBuilder sb,
+ OnlineRoutingEngine engine,
+ List path) {
+ sb.append("?");
+ for (LatLon point : path) {
+ sb.append("point=")
+ .append(point.getLatitude())
+ .append(',')
+ .append(point.getLongitude())
+ .append('&');
+ }
+ sb.append("vehicle=").append(engine.getVehicleKey());
+
+ String apiKey = engine.getParameter(EngineParameter.API_KEY);
+ if (!Algorithms.isEmpty(apiKey)) {
+ sb.append('&').append("key=").append(apiKey);
+ }
+ }
+
+ @Override
+ protected List parseResponse(JSONObject obj, @NonNull String content) throws JSONException {
+ return GeoPolylineParserUtil.parse(
+ obj.getJSONArray("routes").getJSONObject(0).getString("geometry"),
+ GeoPolylineParserUtil.PRECISION_5);
+ }
+
+}
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/type/OsrmEngine.java b/OsmAnd/src/net/osmand/plus/onlinerouting/type/OsrmEngine.java
new file mode 100644
index 0000000000..003425809d
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/type/OsrmEngine.java
@@ -0,0 +1,52 @@
+package net.osmand.plus.onlinerouting.type;
+
+import androidx.annotation.NonNull;
+
+import net.osmand.data.LatLon;
+import net.osmand.plus.onlinerouting.OnlineRoutingEngine;
+import net.osmand.util.GeoPolylineParserUtil;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+public class OsrmEngine extends EngineType {
+
+ @Override
+ public String getStringKey() {
+ return "osrm";
+ }
+
+ @Override
+ public String getTitle() {
+ return "OSRM";
+ }
+
+ @Override
+ public String getStandardUrl() {
+ return "https://router.project-osrm.org/route/v1/";
+ }
+
+ @Override
+ protected void createFullUrl(StringBuilder sb,
+ OnlineRoutingEngine engine,
+ List path) {
+ sb.append(engine.getVehicleKey()).append('/');
+ for (int i = 0; i < path.size(); i++) {
+ LatLon point = path.get(i);
+ sb.append(point.getLongitude()).append(',').append(point.getLatitude());
+ if (i < path.size() - 1) {
+ sb.append(';');
+ }
+ }
+ }
+
+ @Override
+ protected List parseResponse(@NonNull JSONObject obj, @NonNull String content) throws JSONException {
+ return GeoPolylineParserUtil.parse(
+ obj.getJSONArray("routes").getJSONObject(0).getString("geometry"),
+ GeoPolylineParserUtil.PRECISION_5);
+ }
+
+}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java
index f769f69bdb..28967ba2f3 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java
@@ -22,6 +22,7 @@ import java.util.Map;
public class ProfileDataUtils {
public static final String OSMAND_NAVIGATION = "osmand_navigation";
+ public static final String ONLINE_NAVIGATION = "online_navigation";
public static List getDataObjects(OsmandApplication app,
List appModes) {
@@ -48,9 +49,9 @@ public class ProfileDataUtils {
return description;
}
- public static List getSortedRoutingProfiles(OsmandApplication app) {
- List result = new ArrayList<>();
- Map> routingProfilesByFileNames = getRoutingProfilesByFileNames(app);
+ public static List getSortedRoutingProfiles(OsmandApplication app) {
+ List result = new ArrayList<>();
+ Map> routingProfilesByFileNames = getRoutingProfilesByFileNames(app);
List fileNames = new ArrayList<>(routingProfilesByFileNames.keySet());
Collections.sort(fileNames, new Comparator() {
@Override
@@ -59,7 +60,7 @@ public class ProfileDataUtils {
}
});
for (String fileName : fileNames) {
- List routingProfilesFromFile = routingProfilesByFileNames.get(fileName);
+ List routingProfilesFromFile = routingProfilesByFileNames.get(fileName);
if (routingProfilesFromFile != null) {
Collections.sort(routingProfilesFromFile);
result.addAll(routingProfilesFromFile);
@@ -77,14 +78,20 @@ public class ProfileDataUtils {
return objects;
}
- public static Map> getRoutingProfilesByFileNames(OsmandApplication app) {
- Map> result = new HashMap<>();
- for (final RoutingProfileDataObject profile : getRoutingProfiles(app).values()) {
- String fileName = profile.getFileName() != null ? profile.getFileName() : OSMAND_NAVIGATION;
+ public static Map> getRoutingProfilesByFileNames(OsmandApplication app) {
+ Map> result = new HashMap<>();
+ for (final ProfileDataObject profile : getRoutingProfiles(app).values()) {
+ String fileName = null;
+ if (profile instanceof RoutingProfileDataObject) {
+ fileName = ((RoutingProfileDataObject) profile).getFileName();
+ } else if (profile instanceof OnlineRoutingEngineDataObject) {
+ fileName = ONLINE_NAVIGATION;
+ }
+ fileName = fileName != null ? fileName : OSMAND_NAVIGATION;
if (result.containsKey(fileName)) {
result.get(fileName).add(profile);
} else {
- result.put(fileName, new ArrayList() {
+ result.put(fileName, new ArrayList() {
{ add(profile); }
});
}
@@ -92,8 +99,8 @@ public class ProfileDataUtils {
return result;
}
- public static Map getRoutingProfiles(OsmandApplication context) {
- Map profilesObjects = new HashMap<>();
+ public static Map getRoutingProfiles(OsmandApplication context) {
+ Map profilesObjects = new HashMap<>();
profilesObjects.put(RoutingProfilesResources.STRAIGHT_LINE_MODE.name(), new RoutingProfileDataObject(
RoutingProfilesResources.STRAIGHT_LINE_MODE.name(),
context.getString(RoutingProfilesResources.STRAIGHT_LINE_MODE.getStringRes()),
@@ -119,11 +126,14 @@ public class ProfileDataUtils {
for (RoutingConfiguration.Builder builder : context.getAllRoutingConfigs()) {
collectRoutingProfilesFromConfig(context, builder, profilesObjects, disabledRouterNames);
}
+ for (OnlineRoutingEngineDataObject onlineEngine : getOnlineRoutingProfiles(context)) {
+ profilesObjects.put(onlineEngine.getStringKey(), onlineEngine);
+ }
return profilesObjects;
}
private static void collectRoutingProfilesFromConfig(OsmandApplication app, RoutingConfiguration.Builder builder,
- Map profilesObjects, List disabledRouterNames) {
+ Map profilesObjects, List disabledRouterNames) {
for (Map.Entry entry : builder.getAllRouters().entrySet()) {
String routerKey = entry.getKey();
GeneralRouter router = entry.getValue();
diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java
index df2bd8b879..98ca4771cc 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java
@@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
@@ -58,7 +59,7 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
public final static String PROFILE_KEY_ARG = "profile_key_arg";
public final static String USE_LAST_PROFILE_ARG = "use_last_profile_arg";
- public final static String IS_PROFILE_IMPORTED_ARG = "is_profile_imported_arg";
+ public final static String PROFILES_LIST_UPDATED_ARG = "is_profiles_list_updated";
private DialogMode dialogMode;
private final List profiles = new ArrayList<>();
@@ -130,7 +131,7 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
}
Bundle args = new Bundle();
args.putString(PROFILE_KEY_ARG, item.getName());
- args.putBoolean(IS_PROFILE_IMPORTED_ARG, true);
+ args.putBoolean(PROFILES_LIST_UPDATED_ARG, true);
listener.onSelectedType(args);
dismiss();
break;
@@ -234,9 +235,10 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
int iconDefaultColorResId = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light;
+ final boolean onlineRoutingProfile = profile instanceof OnlineRoutingEngineDataObject;
View itemView = UiUtilities.getInflater(getContext(), nightMode).inflate(
- profile instanceof OnlineRoutingEngineDataObject ?
+ onlineRoutingProfile ?
R.layout.bottom_sheet_item_with_descr_radio_and_icon_btn :
R.layout.bottom_sheet_item_with_descr_and_radio_btn, null);
TextView tvTitle = itemView.findViewById(R.id.title);
@@ -262,28 +264,52 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
UiUtilities.setupCompoundButton(compoundButton, nightMode, UiUtilities.CompoundButtonType.GLOBAL);
bottomDivider.setVisibility(showBottomDivider ? View.VISIBLE : View.INVISIBLE);
- items.add(new BaseBottomSheetItem.Builder()
- .setCustomView(itemView)
- .setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- Bundle args = new Bundle();
- args.putString(PROFILE_KEY_ARG, profile.getStringKey());
- Fragment target = getTargetFragment();
- if (target instanceof OnSelectProfileCallback) {
- if (profile instanceof OnlineRoutingEngineDataObject) {
- if (getActivity() != null) {
- OnlineRoutingEngineFragment.showInstance(getActivity(), getAppMode(), profile.getStringKey());
- }
- dismiss();
- } else {
- ((OnSelectProfileCallback) target).onProfileSelected(args);
- }
- }
- dismiss();
+ BaseBottomSheetItem.Builder builder =
+ new BaseBottomSheetItem.Builder().setCustomView(itemView);
+
+ OnClickListener listener = new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Bundle args = new Bundle();
+ args.putString(PROFILE_KEY_ARG, profile.getStringKey());
+ args.putBoolean(PROFILES_LIST_UPDATED_ARG, onlineRoutingProfile);
+ Fragment target = getTargetFragment();
+ if (target instanceof OnSelectProfileCallback) {
+ ((OnSelectProfileCallback) target).onProfileSelected(args);
+ }
+ dismiss();
+ }
+ };
+
+ if (onlineRoutingProfile) {
+ View basePart = itemView.findViewById(R.id.basic_item_body);
+ View endBtn = itemView.findViewById(R.id.end_button);
+ ImageView ivEndBtnIcon = itemView.findViewById(R.id.end_button_icon);
+
+ Drawable drawable = getIcon(R.drawable.ic_action_settings,
+ nightMode ?
+ R.color.route_info_control_icon_color_dark :
+ R.color.route_info_control_icon_color_light);
+ if (Build.VERSION.SDK_INT >= 21) {
+ Drawable activeDrawable = getIcon(R.drawable.ic_action_settings, activeColorResId);
+ drawable = AndroidUtils.createPressedStateListDrawable(drawable, activeDrawable);
+ }
+ ivEndBtnIcon.setImageDrawable(drawable);
+
+ basePart.setOnClickListener(listener);
+ endBtn.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (getActivity() != null) {
+ OnlineRoutingEngineFragment.showInstance(getActivity(), getAppMode(), profile.getStringKey());
}
- })
- .create());
+ dismiss();
+ }
+ });
+ } else {
+ builder.setOnClickListener(listener);
+ }
+ items.add(builder.create());
}
private void addCheckableItem(int titleId,
@@ -363,7 +389,6 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
case NAVIGATION_PROFILE:
profiles.addAll(ProfileDataUtils.getSortedRoutingProfiles(app));
- profiles.addAll(ProfileDataUtils.getOnlineRoutingProfiles(app));
break;
case DEFAULT_PROFILE:
diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java
index 37bb29d148..0ba23f118a 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java
@@ -22,6 +22,8 @@ import net.osmand.data.LocationPoint;
import net.osmand.data.WptLocationPoint;
import net.osmand.osm.io.NetworkUtils;
import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.onlinerouting.OnlineRoutingEngine;
+import net.osmand.plus.onlinerouting.OnlineRoutingHelper;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.backend.CommonPreference;
import net.osmand.plus.R;
@@ -91,7 +93,8 @@ public class RouteProvider {
OSMAND("OsmAnd (offline)"),
BROUTER("BRouter (offline)"),
STRAIGHT("Straight line"),
- DIRECT_TO("Direct To");
+ DIRECT_TO("Direct To"),
+ ONLINE("Online engine");
private final String name;
@@ -363,6 +366,8 @@ public class RouteProvider {
res = findVectorMapsRoute(params, calcGPXRoute);
} else if (params.mode.getRouteService() == RouteService.BROUTER) {
res = findBROUTERRoute(params);
+ } else if (params.mode.getRouteService() == RouteService.ONLINE) {
+ res = findOnlineRoute(params);
// } else if (params.type == RouteService.ORS) {
// res = findORSRoute(params);
// } else if (params.type == RouteService.OSRM) {
@@ -383,6 +388,8 @@ public class RouteProvider {
log.error("Failed to find route ", e); //$NON-NLS-1$
} catch (SAXException e) {
log.error("Failed to find route ", e); //$NON-NLS-1$
+ } catch (JSONException e) {
+ log.error("Failed to find route ", e); //$NON-NLS-1$
}
}
return new RouteCalculationResult(null);
@@ -1204,6 +1211,35 @@ public class RouteProvider {
return exporter.exportRoute();
}
+ private RouteCalculationResult findOnlineRoute(RouteCalculationParams params) throws IOException, JSONException {
+ OnlineRoutingHelper helper = params.ctx.getOnlineRoutingHelper();
+ String stringKey = params.mode.getRoutingProfile();
+ List route = helper.calculateRouteOnline(helper.getEngineByKey(stringKey), getFullPathFromParams(params));
+ if (!route.isEmpty()) {
+ List res = new ArrayList<>();
+ for (LatLon pt : route) {
+ WptPt wpt = new WptPt();
+ wpt.lat = pt.getLatitude();
+ wpt.lon = pt.getLongitude();
+ res.add(createLocation(wpt));
+ }
+ params.intermediates = null;
+ return new RouteCalculationResult(res, null, params, null, true);
+ } else {
+ return new RouteCalculationResult("Route is empty");
+ }
+ }
+
+ private static List getFullPathFromParams(RouteCalculationParams params) {
+ List points = new ArrayList<>();
+ points.add(new LatLon(params.start.getLatitude(), params.start.getLongitude()));
+ if (Algorithms.isEmpty(params.intermediates)) {
+ points.addAll(params.intermediates);
+ }
+ points.add(params.end);
+ return points;
+ }
+
private void appendOSRMLoc(StringBuilder uri, LatLon il) {
uri.append(";").append(il.getLongitude());
uri.append(",").append(il.getLatitude());
diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java
index efaaff576b..836a1fc7f8 100644
--- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java
+++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java
@@ -48,7 +48,6 @@ import net.osmand.plus.helpers.enums.TracksSortByMode;
import net.osmand.plus.mapillary.MapillaryPlugin;
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
import net.osmand.plus.mapmarkers.MapMarkersMode;
-import net.osmand.plus.onlinerouting.OnlineRoutingEngine;
import net.osmand.plus.profiles.LocationIcon;
import net.osmand.plus.profiles.NavigationIcon;
import net.osmand.plus.profiles.ProfileIconColors;
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java
index fdd5508352..665374c003 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java
@@ -35,7 +35,7 @@ import java.util.List;
import java.util.Set;
import static net.osmand.plus.importfiles.ImportHelper.ImportType.SETTINGS;
-import static net.osmand.plus.profiles.SelectProfileBottomSheet.IS_PROFILE_IMPORTED_ARG;
+import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILES_LIST_UPDATED_ARG;
import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILE_KEY_ARG;
public class MainSettingsFragment extends BaseSettingsFragment implements OnSelectProfileCallback{
@@ -229,7 +229,7 @@ public class MainSettingsFragment extends BaseSettingsFragment implements OnSele
FragmentManager fragmentManager = activity.getSupportFragmentManager();
if (fragmentManager != null) {
String profileKey = args.getString(PROFILE_KEY_ARG);
- boolean imported = args.getBoolean(IS_PROFILE_IMPORTED_ARG);
+ boolean imported = args.getBoolean(PROFILES_LIST_UPDATED_ARG);
ProfileAppearanceFragment.showInstance(activity, SettingsScreenType.PROFILE_APPEARANCE,
profileKey, imported);
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/NavigationFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/NavigationFragment.java
index de8481f222..c6556459b5 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/NavigationFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/NavigationFragment.java
@@ -10,13 +10,14 @@ import androidx.preference.Preference;
import androidx.preference.SwitchPreferenceCompat;
import net.osmand.plus.measurementtool.MeasurementToolFragment;
+import net.osmand.plus.profiles.ProfileDataObject;
import net.osmand.plus.profiles.ProfileDataUtils;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet.DialogMode;
+import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
-import net.osmand.plus.profiles.RoutingProfileDataObject;
import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources;
import net.osmand.plus.profiles.SelectProfileBottomSheet;
import net.osmand.plus.profiles.SelectProfileBottomSheet.OnSelectProfileCallback;
@@ -26,7 +27,8 @@ import net.osmand.util.Algorithms;
import java.util.Map;
-import static net.osmand.plus.profiles.SelectProfileBottomSheet.IS_PROFILE_IMPORTED_ARG;
+import static net.osmand.plus.onlinerouting.OnlineRoutingEngine.ONLINE_ROUTING_ENGINE_PREFIX;
+import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILES_LIST_UPDATED_ARG;
import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILE_KEY_ARG;
import static net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet.DIALOG_MODE_KEY;
@@ -35,13 +37,13 @@ public class NavigationFragment extends BaseSettingsFragment implements OnSelect
public static final String TAG = NavigationFragment.class.getSimpleName();
public static final String NAVIGATION_TYPE = "navigation_type";
- private Map routingProfileDataObjects;
+ private Map routingProfileDataObjects;
private Preference navigationType;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- routingProfileDataObjects = ProfileDataUtils.getRoutingProfiles(app);
+ updateRoutingProfilesDataObjects();
setupOnBackPressedCallback();
}
@@ -90,7 +92,7 @@ public class NavigationFragment extends BaseSettingsFragment implements OnSelect
private void setupNavigationTypePref() {
String routingProfileKey = getSelectedAppMode().getRoutingProfile();
if (!Algorithms.isEmpty(routingProfileKey)) {
- RoutingProfileDataObject routingProfileDataObject = routingProfileDataObjects.get(routingProfileKey);
+ ProfileDataObject routingProfileDataObject = routingProfileDataObjects.get(routingProfileKey);
if (routingProfileDataObject != null) {
navigationType.setSummary(routingProfileDataObject.getName());
navigationType.setIcon(getActiveIcon(routingProfileDataObject.getIconRes()));
@@ -132,12 +134,16 @@ public class NavigationFragment extends BaseSettingsFragment implements OnSelect
return false;
}
+ private void updateRoutingProfilesDataObjects() {
+ routingProfileDataObjects = ProfileDataUtils.getRoutingProfiles(app);
+ }
+
void updateRoutingProfile(String profileKey) {
- RoutingProfileDataObject selectedRoutingProfileDataObject = routingProfileDataObjects.get(profileKey);
+ ProfileDataObject selectedRoutingProfileDataObject = routingProfileDataObjects.get(profileKey);
if (profileKey == null || selectedRoutingProfileDataObject == null) {
return;
}
- for (Map.Entry rp : routingProfileDataObjects.entrySet()) {
+ for (Map.Entry rp : routingProfileDataObjects.entrySet()) {
boolean selected = profileKey.equals(rp.getKey());
rp.getValue().setSelected(selected);
}
@@ -152,6 +158,8 @@ public class NavigationFragment extends BaseSettingsFragment implements OnSelect
routeService = RouteProvider.RouteService.DIRECT_TO;
} else if (profileKey.equals(RoutingProfilesResources.BROUTER_MODE.name())) {
routeService = RouteProvider.RouteService.BROUTER;
+ } else if (profileKey.startsWith(ONLINE_ROUTING_ENGINE_PREFIX)) {
+ routeService = RouteService.ONLINE;
} else {
routeService = RouteProvider.RouteService.OSMAND;
}
@@ -174,8 +182,8 @@ public class NavigationFragment extends BaseSettingsFragment implements OnSelect
@Override
public void onProfileSelected(Bundle args) {
- if (args.getBoolean(IS_PROFILE_IMPORTED_ARG)) {
- routingProfileDataObjects = ProfileDataUtils.getRoutingProfiles(app);
+ if (args.getBoolean(PROFILES_LIST_UPDATED_ARG)) {
+ updateRoutingProfilesDataObjects();
}
updateRoutingProfile(args.getString(PROFILE_KEY_ARG));
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java
index 7a42818745..7e1277ca18 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java
@@ -66,7 +66,7 @@ import java.util.ArrayList;
import java.util.Collections;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SETTINGS_ID;
-import static net.osmand.plus.profiles.SelectProfileBottomSheet.IS_PROFILE_IMPORTED_ARG;
+import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILES_LIST_UPDATED_ARG;
import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILE_KEY_ARG;
public class ProfileAppearanceFragment extends BaseSettingsFragment implements OnSelectProfileCallback {
@@ -934,7 +934,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
@Override
public void onProfileSelected(Bundle args) {
String profileKey = args.getString(PROFILE_KEY_ARG);
- boolean imported = args.getBoolean(IS_PROFILE_IMPORTED_ARG);
+ boolean imported = args.getBoolean(PROFILES_LIST_UPDATED_ARG);
updateParentProfile(profileKey, imported);
}