Merge branch 'r3.3'

This commit is contained in:
Victor Shcherb 2019-03-17 16:05:25 +01:00
commit 8cbce7fbb7
7 changed files with 145 additions and 109 deletions

View file

@ -11,6 +11,8 @@
Thx - Hardy
-->
<string name="avoid_pt_types_descr">Select a public transport types you want to avoid during navigation:</string>
<string name="avoid_pt_types">Avoid transport types…</string>
<string name="shared_string_walk">Walk</string>
<string name="save_poi_value_exceed_length">Value of tag \"%s\" cannot exceed 255 chars. \nPlease edit it before continue.</string>
<string name="save_poi_value_exceed_length_title">Length of \"%s\" value</string>

View file

@ -48,6 +48,7 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
public static final int OPEN_AVOID_ROADS_DIALOG_REQUEST_CODE = 1;
private static final String AVOID_ROADS_TYPES_KEY = "avoid_roads_types";
private static final String HIDE_IMPASSABLE_ROADS_KEY = "hide_impassable_roads";
private static final String AVOID_ROADS_OBJECTS_KEY = "avoid_roads_objects";
private RoutingOptionsHelper routingOptionsHelper;
@ -55,6 +56,14 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
private HashMap<String, Boolean> routingParametersMap;
private List<LatLon> removedImpassableRoads;
private LinearLayout stylesContainer;
private boolean hideImpassableRoads;
public AvoidRoadsBottomSheetDialogFragment() {
}
public AvoidRoadsBottomSheetDialogFragment(boolean hideImpassableRoads) {
this.hideImpassableRoads = hideImpassableRoads;
}
List<BottomSheetItemWithCompoundButton> compoundButtons = new ArrayList<>();
@ -69,6 +78,9 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
if (savedInstanceState.containsKey(AVOID_ROADS_TYPES_KEY)) {
routingParametersMap = (HashMap<String, Boolean>) savedInstanceState.getSerializable(AVOID_ROADS_TYPES_KEY);
}
if (savedInstanceState.containsKey(HIDE_IMPASSABLE_ROADS_KEY)) {
hideImpassableRoads = true;
}
if (savedInstanceState.containsKey(AVOID_ROADS_OBJECTS_KEY)) {
removedImpassableRoads = (List<LatLon>) savedInstanceState.getSerializable(AVOID_ROADS_OBJECTS_KEY);
}
@ -101,7 +113,8 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
items.add(titleItem);
final SimpleBottomSheetItem descriptionItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
.setTitle(getString(R.string.avoid_roads_descr))
.setTitle(
!hideImpassableRoads ? getString(R.string.avoid_roads_descr) : getString(R.string.avoid_pt_types_descr))
.setLayoutId(R.layout.bottom_sheet_item_title_long)
.create();
items.add(descriptionItem);
@ -119,42 +132,46 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
}
items.add(new BaseBottomSheetItem.Builder().setCustomView(stylesContainer).create());
populateImpassableRoadsObjects();
if(!hideImpassableRoads) {
populateImpassableRoadsObjects();
final View buttonView = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.bottom_sheet_item_btn, null);
TextView buttonDescription = (TextView) buttonView.findViewById(R.id.button_descr);
buttonDescription.setText(R.string.shared_string_select_on_map);
buttonDescription.setTextColor(getResolvedColor(nightMode ? R.color.active_buttons_and_links_dark : R.color.active_buttons_and_links_light));
final View buttonView = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.bottom_sheet_item_btn, null);
TextView buttonDescription = (TextView) buttonView.findViewById(R.id.button_descr);
buttonDescription.setText(R.string.shared_string_select_on_map);
buttonDescription.setTextColor(getResolvedColor(nightMode ? R.color.active_buttons_and_links_dark : R.color.active_buttons_and_links_light));
FrameLayout buttonContainer = buttonView.findViewById(R.id.button_container);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
AndroidUtils.setBackground(app, buttonContainer, nightMode, R.drawable.btn_border_light, R.drawable.btn_border_dark);
AndroidUtils.setBackground(app, buttonDescription, nightMode, R.drawable.ripple_light, R.drawable.ripple_dark);
} else {
AndroidUtils.setBackground(app, buttonContainer, nightMode, R.drawable.btn_border_trans_light, R.drawable.btn_border_trans_dark);
}
buttonContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
mapActivity.getDashboard().setDashboardVisibility(false, DashboardOnMap.DashboardType.ROUTE_PREFERENCES);
mapActivity.getMapRouteInfoMenu().hide();
app.getAvoidSpecificRoads().selectFromMap(mapActivity);
Fragment fragment = getTargetFragment();
if (fragment != null) {
fragment.onActivityResult(getTargetRequestCode(), OPEN_AVOID_ROADS_DIALOG_REQUEST_CODE, null);
}
}
dismiss();
}
});
final SimpleBottomSheetItem buttonItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
.setCustomView(buttonView)
.create();
items.add(buttonItem);
FrameLayout buttonContainer = buttonView.findViewById(R.id.button_container);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
AndroidUtils.setBackground(app, buttonContainer, nightMode, R.drawable.btn_border_light, R.drawable.btn_border_dark);
AndroidUtils.setBackground(app, buttonDescription, nightMode, R.drawable.ripple_light, R.drawable.ripple_dark);
} else {
AndroidUtils.setBackground(app, buttonContainer, nightMode, R.drawable.btn_border_trans_light, R.drawable.btn_border_trans_dark);
}
buttonContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
mapActivity.getDashboard().setDashboardVisibility(false, DashboardOnMap.DashboardType.ROUTE_PREFERENCES);
mapActivity.getMapRouteInfoMenu().hide();
app.getAvoidSpecificRoads().selectFromMap(mapActivity);
Fragment fragment = getTargetFragment();
if (fragment != null) {
fragment.onActivityResult(getTargetRequestCode(), OPEN_AVOID_ROADS_DIALOG_REQUEST_CODE, null);
}
}
dismiss();
}
});
final SimpleBottomSheetItem buttonItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
.setCustomView(buttonView)
.create();
items.add(buttonItem);
items.add(new SubtitleDividerItem(app));
@ -243,6 +260,9 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
super.onSaveInstanceState(outState);
outState.putSerializable(AVOID_ROADS_TYPES_KEY, routingParametersMap);
outState.putSerializable(AVOID_ROADS_OBJECTS_KEY, (Serializable) removedImpassableRoads);
if(hideImpassableRoads) {
outState.putBoolean(HIDE_IMPASSABLE_ROADS_KEY, true);
}
}
@Override

View file

@ -61,7 +61,6 @@ import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.mapmarkers.MapMarkerSelectionFragment;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.AvoidRoadsRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.AvoidRoadsTypesRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.LocalRoutingParameterGroup;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.MuteSoundRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.ShowAlongTheRouteItem;
@ -95,6 +94,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import static net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.DRIVING_STYLE;
@ -971,60 +971,20 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
}
}
}
} else if (parameter instanceof AvoidRoadsTypesRoutingParameter) {
final LinearLayout item = createToolbarOptionView(false, null, -1, -1, null);
if (item != null) {
item.findViewById(R.id.route_option_container).setVisibility(View.GONE);
List<RoutingParameter> avoidParameters = app.getRoutingOptionsHelper().getAvoidRoutingPrefsForAppMode(applicationMode);
final List<RoutingParameter> avoidedParameters = new ArrayList<>();
for (int i = 0; i < avoidParameters.size(); i++) {
RoutingParameter p = avoidParameters.get(i);
CommonPreference<Boolean> preference = settings.getCustomRoutingBooleanProperty(p.getId(), p.getDefaultBoolean());
if (preference != null && preference.get()) {
avoidedParameters.add(p);
}
}
if (avoidedParameters.isEmpty()) {
continue;
}
for (int i = 0; i < avoidedParameters.size(); i++) {
final RoutingParameter routingParameter = avoidedParameters.get(i);
final View container = createToolbarSubOptionView(false, SettingsBaseActivity.getRoutingStringPropertyName(app, routingParameter.getId(), routingParameter.getName()), R.drawable.ic_action_remove_dark, i == avoidedParameters.size() - 1, new OnClickListener() {
@Override
public void onClick(View v) {
CommonPreference<Boolean> preference = settings.getCustomRoutingBooleanProperty(routingParameter.getId(), routingParameter.getDefaultBoolean());
preference.set(false);
avoidedParameters.remove(routingParameter);
if (avoidedParameters.isEmpty()) {
mode.parameters.remove(parameter);
}
if (mode.parameters.size() > 2) {
item.removeView(v);
} else {
updateOptionsButtons();
}
}
});
if (container != null) {
item.addView(container, newLp);
}
}
optionsContainer.addView(item, lp);
}
} else if (parameter instanceof AvoidRoadsRoutingParameter) {
} else if (parameter instanceof AvoidRoadsRoutingParameter || parameter instanceof RoutingOptionsHelper.AvoidPTTypesRoutingParameter) {
final LinearLayout item = createToolbarOptionView(false, null, -1, -1, null);
if (item != null) {
item.findViewById(R.id.route_option_container).setVisibility(View.GONE);
AvoidSpecificRoads avoidSpecificRoads = app.getAvoidSpecificRoads();
Map<LatLon, RouteDataObject> impassableRoads = avoidSpecificRoads.getImpassableRoads();
if (impassableRoads.isEmpty()) {
continue;
Map<LatLon, RouteDataObject> impassableRoads = new TreeMap<>();
if (parameter instanceof AvoidRoadsRoutingParameter) {
impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads();
}
Iterator<RouteDataObject> it = impassableRoads.values().iterator();
while (it.hasNext()) {
final RouteDataObject routeDataObject = it.next();
final View container = createToolbarSubOptionView(false, avoidSpecificRoads.getText(routeDataObject), R.drawable.ic_action_remove_dark, !it.hasNext(), new OnClickListener() {
final View container = createToolbarSubOptionView(false, app.getAvoidSpecificRoads().getText(routeDataObject), R.drawable.ic_action_remove_dark, !it.hasNext(), new OnClickListener() {
@Override
public void onClick(View v) {
MapActivity mapActivity = getMapActivity();
@ -1053,7 +1013,41 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
item.addView(container, newLp);
}
}
optionsContainer.addView(item, lp);
List<RoutingParameter> avoidParameters = app.getRoutingOptionsHelper().getAvoidRoutingPrefsForAppMode(applicationMode);
final List<RoutingParameter> avoidedParameters = new ArrayList<>();
for (int i = 0; i < avoidParameters.size(); i++) {
RoutingParameter p = avoidParameters.get(i);
CommonPreference<Boolean> preference = settings.getCustomRoutingBooleanProperty(p.getId(), p.getDefaultBoolean());
if (preference != null && preference.get()) {
avoidedParameters.add(p);
}
}
for (int i = 0; i < avoidedParameters.size(); i++) {
final RoutingParameter routingParameter = avoidedParameters.get(i);
final View container = createToolbarSubOptionView(false, SettingsBaseActivity.getRoutingStringPropertyName(app, routingParameter.getId(), routingParameter.getName()), R.drawable.ic_action_remove_dark, i == avoidedParameters.size() - 1, new OnClickListener() {
@Override
public void onClick(View v) {
CommonPreference<Boolean> preference = settings.getCustomRoutingBooleanProperty(routingParameter.getId(), routingParameter.getDefaultBoolean());
preference.set(false);
avoidedParameters.remove(routingParameter);
if (avoidedParameters.isEmpty()) {
mode.parameters.remove(parameter);
}
if (mode.parameters.size() > 2) {
item.removeView(v);
} else {
updateOptionsButtons();
}
}
});
if (container != null) {
item.addView(container, newLp);
}
}
if(avoidedParameters.size() > 0 || impassableRoads.size() > 0) {
optionsContainer.addView(item, lp);
}
}
} else if (parameter instanceof LocalRoutingParameterGroup) {
final LocalRoutingParameterGroup group = (LocalRoutingParameterGroup) parameter;

View file

@ -32,7 +32,7 @@ import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
import net.osmand.plus.development.OsmandDevelopmentPlugin;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.AvoidRoadsRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.AvoidRoadsTypesRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.AvoidPTTypesRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.DividerItem;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.GpxLocalRoutingParameter;
import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.LocalRoutingParameter;
@ -91,8 +91,8 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
if (OsmandPlugin.getEnabledPlugin(OsmandDevelopmentPlugin.class) != null) {
items.add(createRouteSimulationItem(optionsItem));
}
} else if (optionsItem instanceof AvoidRoadsTypesRoutingParameter) {
items.add(createAvoidRoadsTypesItem(optionsItem));
} else if (optionsItem instanceof AvoidPTTypesRoutingParameter) {
items.add(createAvoidPTTypesItem(optionsItem));
} else if (optionsItem instanceof AvoidRoadsRoutingParameter) {
items.add(createAvoidRoadsItem(optionsItem));
} else if (optionsItem instanceof GpxLocalRoutingParameter) {
@ -198,7 +198,8 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
.create();
}
private BaseBottomSheetItem createAvoidRoadsTypesItem(final LocalRoutingParameter optionsItem) {
private BaseBottomSheetItem createAvoidRoadsItem(final LocalRoutingParameter optionsItem) {
return new SimpleBottomSheetItem.Builder()
.setIcon(getContentIcon((optionsItem.getActiveIconId())))
.setTitle(getString(R.string.impassable_road))
@ -216,10 +217,11 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
.create();
}
private BaseBottomSheetItem createAvoidRoadsItem(final LocalRoutingParameter optionsItem) {
private BaseBottomSheetItem createAvoidPTTypesItem(final LocalRoutingParameter optionsItem) {
return new SimpleBottomSheetItem.Builder()
.setIcon(getContentIcon((optionsItem.getActiveIconId())))
.setTitle(getString(R.string.impassable_road))
.setTitle(getString(R.string.avoid_pt_types))
.setLayoutId(R.layout.bottom_sheet_item_simple_56dp)
.setOnClickListener(new View.OnClickListener() {
@Override
@ -461,7 +463,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
GeneralRouter.USE_HEIGHT_OBSTACLES,
DividerItem.KEY,
GeneralRouter.ALLOW_MOTORWAYS,
AvoidRoadsTypesRoutingParameter.KEY,
AvoidRoadsRoutingParameter.KEY,
ShowAlongTheRouteItem.KEY,
DividerItem.KEY,
GpxLocalRoutingParameter.KEY,
@ -471,7 +473,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
PEDESTRIAN(MuteSoundRoutingParameter.KEY,
GeneralRouter.USE_HEIGHT_OBSTACLES,
DividerItem.KEY,
AvoidRoadsTypesRoutingParameter.KEY,
AvoidRoadsRoutingParameter.KEY,
ShowAlongTheRouteItem.KEY,
DividerItem.KEY,
GpxLocalRoutingParameter.KEY,
@ -480,7 +482,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
PUBLIC_TRANSPORT(// MuteSoundRoutingParameter.KEY,
// DividerItem.KEY,
AvoidRoadsTypesRoutingParameter.KEY,
AvoidPTTypesRoutingParameter.KEY,
// ShowAlongTheRouteItem.KEY,
// DividerItem.KEY,
OtherSettingsRoutingParameter.KEY),

View file

@ -355,8 +355,6 @@ public class RoutingOptionsHelper {
return new RouteSimulationItem();
case ShowAlongTheRouteItem.KEY:
return new ShowAlongTheRouteItem();
case AvoidRoadsTypesRoutingParameter.KEY:
return new AvoidRoadsTypesRoutingParameter();
case AvoidRoadsRoutingParameter.KEY:
return new AvoidRoadsRoutingParameter();
case GpxLocalRoutingParameter.KEY:
@ -781,11 +779,11 @@ public class RoutingOptionsHelper {
}
}
public static class AvoidRoadsTypesRoutingParameter extends LocalRoutingParameter {
public static class AvoidPTTypesRoutingParameter extends LocalRoutingParameter {
public static final String KEY = "AvoidRoadsTypesRoutingParameter";
public static final String KEY = "AvoidPTTypesRoutingParameter";
public AvoidRoadsTypesRoutingParameter() {
public AvoidPTTypesRoutingParameter() {
super(null);
}
@ -795,15 +793,16 @@ public class RoutingOptionsHelper {
@Override
public int getActiveIconId() {
return R.drawable.ic_action_road_works_dark;
return R.drawable.ic_action_bus_dark;
}
@Override
public int getDisabledIconId() {
return R.drawable.ic_action_road_works_dark;
return R.drawable.ic_action_bus_dark;
}
}
public static class GpxLocalRoutingParameter extends LocalRoutingParameter {
public static final String KEY = "GpxLocalRoutingParameter";

View file

@ -308,6 +308,7 @@ public class RoutingHelper {
Location locationProjection = currentLocation;
if (isPublicTransportMode() && currentLocation != null && finalLocation != null &&
(targetPointsChanged || transportRoutingHelper.getStartLocation() == null)) {
transportRoutingHelper.setApplicationMode(mode);
transportRoutingHelper.setFinalAndCurrentLocation(finalLocation,
new LatLon(currentLocation.getLatitude(), currentLocation.getLongitude()));
}
@ -946,6 +947,7 @@ public class RoutingHelper {
if (isPublicTransportMode()) {
Location start = lastFixedLocation;
LatLon finish = finalLocation;
transportRoutingHelper.setApplicationMode(mode);
if (start != null && finish != null) {
transportRoutingHelper.setFinalAndCurrentLocation(finish,
new LatLon(start.getLatitude(), start.getLongitude()));

View file

@ -14,10 +14,12 @@ import net.osmand.osm.edit.Node;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.routing.RouteCalculationParams.RouteCalculationResultListener;
import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback;
import net.osmand.router.GeneralRouter;
import net.osmand.router.RouteCalculationProgress;
import net.osmand.router.RoutingConfiguration;
import net.osmand.router.TransportRoutePlanner;
@ -35,6 +37,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import static net.osmand.plus.notifications.OsmandNotification.NotificationType.NAVIGATION;
@ -46,6 +49,7 @@ public class TransportRoutingHelper {
private List<WeakReference<IRouteInformationListener>> listeners = new LinkedList<>();
private OsmandApplication app;
private ApplicationMode applicationMode = ApplicationMode.PUBLIC_TRANSPORT;
private RoutingHelper routingHelper;
private List<TransportRouteResult> routes;
@ -54,7 +58,6 @@ public class TransportRoutingHelper {
private LatLon startLocation;
private LatLon endLocation;
private boolean useSchedule;
private Thread currentRunningJob;
private String lastRouteCalcError;
@ -63,6 +66,7 @@ public class TransportRoutingHelper {
private TransportRouteCalculationProgressCallback progressRoute;
public TransportRoutingHelper(@NonNull OsmandApplication app) {
this.app = app;
}
@ -79,13 +83,6 @@ public class TransportRoutingHelper {
return endLocation;
}
public boolean isUseSchedule() {
return useSchedule;
}
public void setUseSchedule(boolean useSchedule) {
this.useSchedule = useSchedule;
}
public int getCurrentRoute() {
return currentRoute;
@ -188,7 +185,7 @@ public class TransportRoutingHelper {
TransportRouteCalculationParams params = new TransportRouteCalculationParams();
params.start = start;
params.end = end;
params.useSchedule = useSchedule;
params.mode = applicationMode;
params.type = RouteService.OSMAND;
params.ctx = app;
params.calculationProgress = new RouteCalculationProgress();
@ -360,6 +357,10 @@ public class TransportRoutingHelper {
return r.left == 0 && r.right == 0 ? null : r;
}
public void setApplicationMode(ApplicationMode applicationMode) {
this.applicationMode = applicationMode;
}
public interface TransportRouteCalculationProgressCallback {
void start();
@ -375,8 +376,9 @@ public class TransportRoutingHelper {
public LatLon end;
public OsmandApplication ctx;
public ApplicationMode mode;
public RouteService type;
public boolean useSchedule;
public Map<String, String> params = new TreeMap<>();
public RouteCalculationProgress calculationProgress;
public TransportRouteCalculationResultListener resultListener;
@ -442,9 +444,24 @@ public class TransportRoutingHelper {
private List<TransportRouteResult> calculateRouteImpl(TransportRouteCalculationParams params) throws IOException, InterruptedException {
RoutingConfiguration.Builder config = params.ctx.getDefaultRoutingConfig();
BinaryMapIndexReader[] files = params.ctx.getResourceManager().getTransportRoutingMapFiles();
TransportRoutingConfiguration cfg = new TransportRoutingConfiguration(config);
cfg.useSchedule = params.useSchedule;
params.params.clear();
OsmandSettings settings = params.ctx.getSettings();
for(Map.Entry<String, GeneralRouter.RoutingParameter> e : config.getRouter(params.mode.getStringKey()).getParameters().entrySet()){
String key = e.getKey();
GeneralRouter.RoutingParameter pr = e.getValue();
String vl;
if(pr.getType() == GeneralRouter.RoutingParameterType.BOOLEAN) {
OsmandSettings.CommonPreference<Boolean> pref = settings.getCustomRoutingBooleanProperty(key, pr.getDefaultBoolean());
Boolean bool = pref.getModeValue(params.mode);
vl = bool ? "true" : null;
} else {
vl = settings.getCustomRoutingProperty(key, "").getModeValue(params.mode);
}
if(vl != null && vl.length() > 0) {
params.params.put(key, vl);
}
}
TransportRoutingConfiguration cfg = new TransportRoutingConfiguration(config, params.params);
TransportRoutePlanner planner = new TransportRoutePlanner();
TransportRoutingContext ctx = new TransportRoutingContext(cfg, files);
ctx.calculationProgress = params.calculationProgress;