From 9916b725556b410840ea04507f50bcc291878719 Mon Sep 17 00:00:00 2001 From: madwasp79 Date: Mon, 20 May 2019 15:29:13 +0300 Subject: [PATCH] Add Straight Line and BRouter (if installed) to Routing Types list. Extracted string resources, refactoring and general clean up of code Add RouteService to ApplicationMode (to set straight line for AIRCRAFT mode --- .../java/net/osmand/router/GeneralRouter.java | 1 - OsmAnd/res/values/strings.xml | 9 +- .../src/net/osmand/plus/ApplicationMode.java | 17 ++- .../plus/profiles/EditProfileFragment.java | 144 ++++++++++-------- .../osmand/plus/routing/RouteProvider.java | 13 +- 5 files changed, 107 insertions(+), 77 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 841cce8f90..3579449f5b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -94,7 +94,6 @@ public class GeneralRouter implements VehicleRouter { BICYCLE, BOAT, PUBLIC_TRANSPORT, - CUSTOM } diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 5387d1c7c4..903f39a191 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,13 @@ Thx - Hardy --> + Select Routing Type + You need to select Routing Type to create New Application Profile + Enter Profile Name + Profile name shouldn\'t be empty! + Duplicate Name + There is already profile with such name + You cannot delete OsmAnd base profiles Save Changes You need to save changes to Profile before proceed Delete Profile @@ -30,7 +37,7 @@ OsmAnd routing Custom routing profile Special routing - Online routing + 3rd-party routing Moved %1$d files (%2$s). Copied %1$d files (%2$s). diff --git a/OsmAnd/src/net/osmand/plus/ApplicationMode.java b/OsmAnd/src/net/osmand/plus/ApplicationMode.java index 43dfdb2d4f..8eeea1ce4f 100644 --- a/OsmAnd/src/net/osmand/plus/ApplicationMode.java +++ b/OsmAnd/src/net/osmand/plus/ApplicationMode.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import net.osmand.plus.routing.RouteProvider.RouteService; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -33,7 +34,7 @@ public class ApplicationMode { private static List values = new ArrayList<>(); private static List cachedFilteredValues = new ArrayList<>(); /* - * DEFAULT("Browse map"), CAR("Car"), BICYCLE("Bicycle"), PEDESTRIAN("Pedestrian"); NAUTICAL("boat"); PUBLIC_TRANSPORT("Public transport") + * DEFAULT("Browse map"), CAR("Car"), BICYCLE("Bicycle"), PEDESTRIAN("Pedestrian"); NAUTICAL("boat"); PUBLIC_TRANSPORT("Public transport"); AIRCRAFT("Aircraft") */ public static final ApplicationMode DEFAULT = create(R.string.app_mode_default, "default").speed(1.5f, 5).arrivalDistance(90).defLocation(). icon(R.drawable.map_world_globe_dark, R.drawable.ic_world_globe_dark).reg(); @@ -54,7 +55,7 @@ public class ApplicationMode { icon(R.drawable.map_action_sail_boat_dark, R.drawable.ic_action_sail_boat_dark).setRoutingProfile("boat").reg(); public static final ApplicationMode AIRCRAFT = create(R.string.app_mode_aircraft, "aircraft").speed(40f, 100).carLocation(). - icon(R.drawable.map_action_aircraft, R.drawable.ic_action_aircraft).reg(); + icon(R.drawable.map_action_aircraft, R.drawable.ic_action_aircraft).setRouteService(RouteService.STRAIGHT).reg(); static { ApplicationMode[] exceptDefault = new ApplicationMode[]{CAR, PEDESTRIAN, BICYCLE, BOAT, PUBLIC_TRANSPORT}; @@ -207,10 +208,13 @@ public class ApplicationMode { applicationMode.routingProfile = routingProfileName; return this; } + + public ApplicationModeBuilder setRouteService(RouteService service) { + applicationMode.routeService = service; + return this; + } } - - private static ApplicationModeBuilder create(int key, String stringKey) { ApplicationModeBuilder builder = new ApplicationModeBuilder(); builder.applicationMode = new ApplicationMode(key, stringKey); @@ -412,6 +416,10 @@ public class ApplicationMode { } } + public RouteService getRouteService() { + return routeService; + } + public static ApplicationMode valueOfStringKey(String key, ApplicationMode def) { for (ApplicationMode p : values) { if (p.getStringKey().equals(key)) { @@ -468,6 +476,7 @@ public class ApplicationMode { @Expose private int locationIconDayLost = R.drawable.map_pedestrian_location_lost; @Expose private int locationIconNightLost = R.drawable.map_pedestrian_location_lost_night; @Expose private String routingProfile = null; + @Expose private RouteService routeService = RouteService.OSMAND; private static StateChangedListener listener; private static OsmAndAppCustomization.OsmAndAppCustomizationListener customizationListener; diff --git a/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java b/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java index 944f479ca6..9facb4a2ff 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/EditProfileFragment.java @@ -37,11 +37,9 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import net.osmand.PlatformUtil; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandApplication; @@ -52,6 +50,7 @@ import net.osmand.plus.activities.SettingsNavigationActivity; import net.osmand.plus.base.BaseOsmAndFragment; import net.osmand.plus.profiles.ProfileBottomSheetDialogFragment.ProfileTypeDialogListener; import net.osmand.plus.profiles.SelectIconBottomSheetDialogFragment.IconIdListener; +import net.osmand.plus.routing.RouteProvider.RouteService; import net.osmand.plus.widgets.OsmandTextFieldBoxes; import net.osmand.router.GeneralRouter; import net.osmand.util.Algorithms; @@ -119,7 +118,7 @@ public class EditProfileFragment extends BaseOsmAndFragment { mode = ApplicationMode.valueOfStringKey(modeName, ApplicationMode.DEFAULT); profile = new ApplicationProfileObject(mode, isNew, isUserProfile); } - isNightMode = !app.getSettings().isLightContent(); + isNightMode = !app.getSettings().isLightContent(); routingProfileDataObjects = getRoutingProfiles(app); } @@ -159,18 +158,23 @@ public class EditProfileFragment extends BaseOsmAndFragment { .getBackground(); if (isNightMode) { - profileNameTextBox.setPrimaryColor(ContextCompat.getColor(app, R.color.color_dialog_buttons_dark)); - navTypeTextBox.setPrimaryColor(ContextCompat.getColor(app, R.color.color_dialog_buttons_dark)); - selectIconBtnBackground.setColor(app.getResources().getColor(R.color.text_field_box_dark)); + profileNameTextBox + .setPrimaryColor(ContextCompat.getColor(app, R.color.color_dialog_buttons_dark)); + navTypeTextBox + .setPrimaryColor(ContextCompat.getColor(app, R.color.color_dialog_buttons_dark)); + selectIconBtnBackground + .setColor(app.getResources().getColor(R.color.text_field_box_dark)); } else { - selectIconBtnBackground.setColor(app.getResources().getColor(R.color.text_field_box_light)); + selectIconBtnBackground + .setColor(app.getResources().getColor(R.color.text_field_box_light)); } String title = "New Profile"; int startIconId = R.drawable.map_world_globe_dark; if (isNew) { isDataChanged = true; - title = String.format("Custom %s", getResources().getString(profile.parent.getStringResource())); + title = String + .format("Custom %s", getResources().getString(profile.parent.getStringResource())); startIconId = profile.parent.getSmallIconDark(); profile.iconId = startIconId; } else if (isUserProfile) { @@ -224,30 +228,17 @@ public class EditProfileFragment extends BaseOsmAndFragment { } else { for (RoutingProfileDataObject rp : routingProfileDataObjects) { if (profile.stringKey.equals(rp.getStringKey())) { - switch (rp.getStringKey()) { - case "car": - navTypeEt.setText(R.string.rendering_value_car_name); - break; - case "pedestrian": - navTypeEt.setText(R.string.rendering_value_pedestrian_name); - break; - case "bicycle": - navTypeEt.setText(R.string.rendering_value_bicycle_name); - break; - case "public_transport": - navTypeEt.setText(R.string.app_mode_public_transport); - break; - case "boat": - navTypeEt.setText(R.string.app_mode_boat); - break; - } + navTypeEt.setText( + RoutingProfilesResources.valueOf(rp.getStringKey().toUpperCase()) + .getStringRes()); } } navTypeEt.clearFocus(); } profileNameEt.clearFocus(); - if (getActivity() != null && ((EditProfileActivity) getActivity()).getSupportActionBar() != null) { + if (getActivity() != null + && ((EditProfileActivity) getActivity()).getSupportActionBar() != null) { ((EditProfileActivity) getActivity()).getSupportActionBar().setTitle(title); ((EditProfileActivity) getActivity()).getSupportActionBar().setElevation(5.0f); } @@ -265,9 +256,13 @@ public class EditProfileFragment extends BaseOsmAndFragment { profileNameEt.addTextChangedListener(new TextWatcher() { @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + @Override - public void onTextChanged(CharSequence s, int start, int before, int count) {} + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + @Override public void afterTextChanged(Editable s) { if (getActivity() instanceof OsmandActionBarActivity) { @@ -288,7 +283,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { ProfileBottomSheetDialogFragment fragment = new ProfileBottomSheetDialogFragment(); Bundle bundle = new Bundle(); if (profile.routingProfileDataObject != null) { - bundle.putString(SELECTED_KEY, profile.routingProfileDataObject.getStringKey()); + bundle.putString(SELECTED_KEY, + profile.routingProfileDataObject.getStringKey()); } bundle.putString(DIALOG_TYPE, TYPE_NAV_PROFILE); fragment.setArguments(bundle); @@ -437,7 +433,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { baseTypeListener = new ProfileTypeDialogListener() { @Override public void onSelectedType(int pos) { - String key = SettingsProfileFragment.getBaseProfiles(getMyApplication()).get(pos).getStringKey(); + String key = SettingsProfileFragment.getBaseProfiles(getMyApplication()).get(pos) + .getStringKey(); setupBaseProfileView(key); profile.parent = ApplicationMode.valueOfStringKey(key, ApplicationMode.DEFAULT); } @@ -500,7 +497,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { navTypeListener = new ProfileTypeDialogListener() { @Override public void onSelectedType(int pos) { - updateRoutingProfile(pos);} + updateRoutingProfile(pos); + } }; } return navTypeListener; @@ -564,8 +562,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { private boolean saveNewProfile() { if (profile.routingProfileDataObject == null) { showSaveWarningDialog( - "Select Routing Type", - "You need to select Routing Type to create New Application Profile", + getString(R.string.profile_alert_need_routing_type_title), + getString(R.string.profile_alert_need_routing_type_msg), getActivity()); return false; } @@ -573,8 +571,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { if (profile.userProfileTitle.isEmpty() || profile.userProfileTitle.replace(" ", "").length() < 1) { showSaveWarningDialog( - "Enter Profile Name", - "Profile name shouldn't be empty!", + getString(R.string.profile_alert_need_profile_name_title), + getString(R.string.profile_alert_need_profile_name_msg), getActivity() ); return false; @@ -586,8 +584,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { if (isNew || !Algorithms.isEmpty(mode.getUserProfileName()) && !mode.getUserProfileName().equals(profile.userProfileTitle)) { AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); - bld.setTitle("Duplicate Name"); - bld.setMessage("There is already profile with such name"); + bld.setTitle(R.string.profile_alert_duplicate_name_title); + bld.setMessage(R.string.profile_alert_duplicate_name_msg); bld.setNegativeButton(R.string.shared_string_dismiss, null); bld.show(); bld.setOnDismissListener(new OnDismissListener() { @@ -609,7 +607,7 @@ public class EditProfileFragment extends BaseOsmAndFragment { String customStringKey = profile.stringKey; if (isNew && profile.parent != null) { customStringKey = - profile.parent.getStringKey() + "_" + profile.userProfileTitle.hashCode(); + profile.parent.getStringKey() + "_" + System.currentTimeMillis(); } ApplicationMode.ApplicationModeBuilder builder = ApplicationMode @@ -618,6 +616,9 @@ public class EditProfileFragment extends BaseOsmAndFragment { .icon(profile.iconId, profile.iconId); if (profile.routingProfileDataObject != null) { +// if () { +// +// } builder.setRoutingProfile(profile.routingProfileDataObject.getStringKey()); } @@ -625,7 +626,20 @@ public class EditProfileFragment extends BaseOsmAndFragment { ApplicationMode.saveCustomModeToSettings(getSettings()); if (!ApplicationMode.values(app).contains(mode)) { - ApplicationMode.changeProfileStatus(mode, true, getMyApplication()); + boolean save = ApplicationMode.changeProfileStatus(mode, true, getMyApplication()); + + if (save && getSettings() != null) { + if (profile.routingProfileDataObject.getStringKey() + .equals(RoutingProfilesResources.STRAIGHT_LINE_MODE.toString())) { + getSettings().ROUTER_SERVICE.setModeValue(mode, RouteService.STRAIGHT); + } else if (profile.routingProfileDataObject.getStringKey() + .equals(RoutingProfilesResources.BROUTER_MODE.toString())) { + getSettings().ROUTER_SERVICE.setModeValue(mode, RouteService.BROUTER); + } else { + getSettings().ROUTER_SERVICE.setModeValue(mode, RouteService.OSMAND); + } + } + } isDataChanged = false; return true; @@ -655,7 +669,8 @@ public class EditProfileFragment extends BaseOsmAndFragment { AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); bld.setTitle(R.string.profile_alert_delete_title); bld.setMessage(String - .format(getString(R.string.profile_alert_delete_msg), profile.userProfileTitle)); + .format(getString(R.string.profile_alert_delete_msg), + profile.userProfileTitle)); bld.setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() { @Override @@ -670,28 +685,28 @@ public class EditProfileFragment extends BaseOsmAndFragment { bld.setNegativeButton(R.string.shared_string_dismiss, null); bld.show(); } else { - Toast.makeText(getActivity(), "You cannot delete OsmAnd base profiles", + Toast.makeText(getActivity(), R.string.profile_alert_cant_delete_base, Toast.LENGTH_SHORT).show(); } - } } static List getRoutingProfiles(OsmandApplication context) { List profilesObjects = new ArrayList<>(); profilesObjects.add(new RoutingProfileDataObject( - RoutingProfilesResources.STRAIGHT_LINE.toString(), - context.getString(RoutingProfilesResources.STRAIGHT_LINE.getStringRes()), + RoutingProfilesResources.STRAIGHT_LINE_MODE.toString(), + context.getString(RoutingProfilesResources.STRAIGHT_LINE_MODE.getStringRes()), context.getString(R.string.special_routing_type), - RoutingProfilesResources.STRAIGHT_LINE.getIconRes(), - false, null)); - - profilesObjects.add(new RoutingProfileDataObject( - RoutingProfilesResources.BROUTER.toString(), - context.getString(RoutingProfilesResources.BROUTER.getStringRes()), - context.getString(R.string.online_routing_type), - RoutingProfilesResources.BROUTER.getIconRes(), + RoutingProfilesResources.STRAIGHT_LINE_MODE.getIconRes(), false, null)); + if (context.getBRouterService() != null) { + profilesObjects.add(new RoutingProfileDataObject( + RoutingProfilesResources.BROUTER_MODE.toString(), + context.getString(RoutingProfilesResources.BROUTER_MODE.getStringRes()), + context.getString(R.string.third_party_routing_type), + RoutingProfilesResources.BROUTER_MODE.getIconRes(), + false, null)); + } Map inputProfiles = context.getRoutingConfig().getAllRoutes(); for (Entry e : inputProfiles.entrySet()) { @@ -700,26 +715,28 @@ public class EditProfileFragment extends BaseOsmAndFragment { String description; if (e.getValue().getFilename() == null) { iconRes = RoutingProfilesResources.valueOf(name.toUpperCase()).getIconRes(); - name = context.getString(RoutingProfilesResources.valueOf(name.toUpperCase()).getStringRes()); + name = context + .getString(RoutingProfilesResources.valueOf(name.toUpperCase()).getStringRes()); description = context.getString(R.string.osmand_default_routing); } else { description = context.getString(R.string.custom_routing); } - profilesObjects.add(new RoutingProfileDataObject(e.getKey(), name, description, iconRes, false, - e.getValue().getFilename())); + profilesObjects + .add(new RoutingProfileDataObject(e.getKey(), name, description, iconRes, false, + e.getValue().getFilename())); } return profilesObjects; } public enum RoutingProfilesResources { - STRAIGHT_LINE(R.string.routing_profile_straightline, R.drawable.ic_action_split_interval), - BROUTER(R.string.routing_profile_broutrer, R.drawable.ic_action_split_interval), - CAR (R.string.rendering_value_car_name, R.drawable.ic_action_car_dark), - PEDESTRIAN (R.string.rendering_value_pedestrian_name, R.drawable.map_action_pedestrian_dark), - BICYCLE (R.string.rendering_value_bicycle_name, R.drawable.map_action_bicycle_dark), - PUBLIC_TRANSPORT (R.string.app_mode_public_transport, R.drawable.map_action_bus_dark), - BOAT (R.string.app_mode_boat, R.drawable.map_action_sail_boat_dark), - GEOCODING (R.string.routing_profile_geocoding, R.drawable.ic_action_world_globe); + STRAIGHT_LINE_MODE(R.string.routing_profile_straightline,R.drawable.ic_action_split_interval), + BROUTER_MODE(R.string.routing_profile_broutrer, R.drawable.ic_action_split_interval), + CAR(R.string.rendering_value_car_name, R.drawable.ic_action_car_dark), + PEDESTRIAN(R.string.rendering_value_pedestrian_name, R.drawable.map_action_pedestrian_dark), + BICYCLE(R.string.rendering_value_bicycle_name, R.drawable.map_action_bicycle_dark), + PUBLIC_TRANSPORT(R.string.app_mode_public_transport, R.drawable.map_action_bus_dark), + BOAT(R.string.app_mode_boat, R.drawable.map_action_sail_boat_dark), + GEOCODING(R.string.routing_profile_geocoding, R.drawable.ic_action_world_globe); int stringRes; int iconRes; @@ -739,6 +756,7 @@ public class EditProfileFragment extends BaseOsmAndFragment { } private class ApplicationProfileObject { + int key = -1; String stringKey; String userProfileTitle = ""; diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java index 0535a9a78c..7497bd2aaf 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java +++ b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java @@ -682,9 +682,7 @@ public class RouteProvider { GeneralRouter generalRouter) throws IOException, FileNotFoundException { GeneralRouterProfile p ; - if (params.mode.getRoutingProfile() != null ) { - p = GeneralRouterProfile.CUSTOM; - } else if (params.mode.isDerivedRoutingFrom(ApplicationMode.BICYCLE)) { + if (params.mode.isDerivedRoutingFrom(ApplicationMode.BICYCLE)) { p = GeneralRouterProfile.BICYCLE; } else if (params.mode.isDerivedRoutingFrom(ApplicationMode.PEDESTRIAN)) { p = GeneralRouterProfile.PEDESTRIAN; @@ -695,7 +693,6 @@ public class RouteProvider { } else { return null; } - log.debug("General Router Profile:" + p.name()); Map paramsR = new LinkedHashMap(); for(Map.Entry e : generalRouter.getParameters().entrySet()){ @@ -724,10 +721,10 @@ public class RouteProvider { // make visible int memoryLimit = (int) (0.95 * ((rt.maxMemory() - rt.totalMemory()) + rt.freeMemory()) / mb); log.warn("Use " + memoryLimit + " MB Free " + rt.freeMemory() / mb + " of " + rt.totalMemory() / mb + " max " + rt.maxMemory() / mb); - String name = p == GeneralRouterProfile.CUSTOM ? params.mode.getRoutingProfile() : p.name().toLowerCase(); - RoutingConfiguration cf = config.build(name, params.start.hasBearing() ? - params.start.getBearing() / 180d * Math.PI : null, - memoryLimit, paramsR); + + RoutingConfiguration cf = config.build(p.name().toLowerCase(), params.start.hasBearing() ? + params.start.getBearing() / 180d * Math.PI : null, + memoryLimit, paramsR); return cf; }