Fix bugs
This commit is contained in:
parent
2be1d5a1c0
commit
91b3eb56d8
3 changed files with 71 additions and 43 deletions
|
@ -343,15 +343,14 @@ public class RouteProvider {
|
||||||
routeParams.start, routeParams.end, startI, endI);
|
routeParams.start, routeParams.end, startI, endI);
|
||||||
}
|
}
|
||||||
List<RouteDirectionInfo> gpxDirections = new ArrayList<RouteDirectionInfo>();
|
List<RouteDirectionInfo> gpxDirections = new ArrayList<RouteDirectionInfo>();
|
||||||
if(gpxParams.directions != null) {
|
if (gpxParams.directions != null) {
|
||||||
gpxDirections.addAll(gpxParams.directions);
|
for (RouteDirectionInfo info : gpxParams.directions) {
|
||||||
}
|
if (info.routePointOffset >= startI[0] && info.routePointOffset < endI[0]) {
|
||||||
for (RouteDirectionInfo info : gpxDirections) {
|
RouteDirectionInfo ch = new RouteDirectionInfo(info.getAverageSpeed(), info.getTurnType());
|
||||||
if(info.routePointOffset >= startI[0] && info.routePointOffset < endI[0]){
|
ch.routePointOffset = info.routePointOffset - startI[0];
|
||||||
RouteDirectionInfo ch = new RouteDirectionInfo(info.getAverageSpeed(), info.getTurnType());
|
ch.setDescriptionRoute(info.getDescriptionRoutePart());
|
||||||
ch.routePointOffset = info.routePointOffset - startI[0];
|
gpxDirections.add(ch);
|
||||||
ch.setDescriptionRoute(info.getDescriptionRoutePart());
|
}
|
||||||
gpxDirections.add(ch);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean calculateOsmAndRouteParts = gpxParams.calculateOsmAndRouteParts;
|
boolean calculateOsmAndRouteParts = gpxParams.calculateOsmAndRouteParts;
|
||||||
|
|
|
@ -750,6 +750,19 @@ public class RoutingHelper {
|
||||||
currentRunningJob = null;
|
currentRunningJob = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final boolean onlineSourceWithoutInternet = !res.isCalculated() && params.type.isOnline() && !settings.isInternetConnectionAvailable();
|
||||||
|
if (onlineSourceWithoutInternet && settings.ROUTE_CALC_OSMAND_PARTS.get()) {
|
||||||
|
if (params.previousToRecalculate != null && params.previousToRecalculate.isCalculated()) {
|
||||||
|
RouteCalculationResult rcr = params.previousToRecalculate;
|
||||||
|
List<Location> locs = rcr.getRouteLocations();
|
||||||
|
List<RouteDirectionInfo> routeDirections = rcr.getRouteDirections();
|
||||||
|
try {
|
||||||
|
provider.insertInitialSegment(params, locs, routeDirections, true);
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
synchronized (RoutingHelper.this) {
|
synchronized (RoutingHelper.this) {
|
||||||
if (res.isCalculated()) {
|
if (res.isCalculated()) {
|
||||||
|
@ -768,24 +781,9 @@ public class RoutingHelper {
|
||||||
msg += " (" + Algorithms.formatDuration((int) res.getRoutingTime()) + ")";
|
msg += " (" + Algorithms.formatDuration((int) res.getRoutingTime()) + ")";
|
||||||
}
|
}
|
||||||
showMessage(msg);
|
showMessage(msg);
|
||||||
} else if (params.type.isOnline() && !settings.isInternetConnectionAvailable()) {
|
} else if (onlineSourceWithoutInternet) {
|
||||||
boolean showMsg = true;
|
showMessage(app.getString(R.string.error_calculating_route)
|
||||||
if (settings.ROUTE_CALC_OSMAND_PARTS.get() && params.previousToRecalculate != null
|
+ ":\n" + app.getString(R.string.internet_connection_required_for_online_route)); //$NON-NLS-1$
|
||||||
&& params.previousToRecalculate.isCalculated()) {
|
|
||||||
RouteCalculationResult rcr = params.previousToRecalculate;
|
|
||||||
List<Location> locs = rcr.getRouteLocations();
|
|
||||||
List<RouteDirectionInfo> routeDirections = rcr.getRouteDirections();
|
|
||||||
try {
|
|
||||||
provider.insertInitialSegment(params, locs, routeDirections, true);
|
|
||||||
showMsg = false;
|
|
||||||
} catch(RuntimeException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (showMsg) {
|
|
||||||
showMessage(app.getString(R.string.error_calculating_route)
|
|
||||||
+ ":\n" + app.getString(R.string.internet_connection_required_for_online_route)); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (res.getErrorMessage() != null) {
|
if (res.getErrorMessage() != null) {
|
||||||
showMessage(app.getString(R.string.error_calculating_route) + ":\n" + res.getErrorMessage()); //$NON-NLS-1$
|
showMessage(app.getString(R.string.error_calculating_route) + ":\n" + res.getErrorMessage()); //$NON-NLS-1$
|
||||||
|
@ -798,7 +796,7 @@ public class RoutingHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void recalculateRouteDueToSettingsChange() {
|
public void recalculateRouteDueToSettingsChange() {
|
||||||
recalculateRouteInBackground(true, lastFixedLocation, finalLocation, intermediatePoints, currentGPXRoute, null);
|
recalculateRouteInBackground(true, lastFixedLocation, finalLocation, intermediatePoints, currentGPXRoute, route);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void recalculateRouteInBackground(boolean force, final Location start, final LatLon end, final List<LatLon> intermediates,
|
private void recalculateRouteInBackground(boolean force, final Location start, final LatLon end, final List<LatLon> intermediates,
|
||||||
|
|
|
@ -7,9 +7,12 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import net.osmand.CallbackWithObject;
|
import net.osmand.CallbackWithObject;
|
||||||
|
import net.osmand.Location;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.RotatedTileBox;
|
import net.osmand.data.RotatedTileBox;
|
||||||
import net.osmand.plus.ApplicationMode;
|
import net.osmand.plus.ApplicationMode;
|
||||||
import net.osmand.plus.GPXUtilities;
|
import net.osmand.plus.GPXUtilities;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
import net.osmand.plus.GPXUtilities.GPXFile;
|
import net.osmand.plus.GPXUtilities.GPXFile;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.OsmandSettings.CommonPreference;
|
import net.osmand.plus.OsmandSettings.CommonPreference;
|
||||||
|
@ -25,6 +28,7 @@ import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||||
import net.osmand.router.GeneralRouter;
|
import net.osmand.router.GeneralRouter;
|
||||||
import net.osmand.router.GeneralRouter.RoutingParameter;
|
import net.osmand.router.GeneralRouter.RoutingParameter;
|
||||||
import net.osmand.router.GeneralRouter.RoutingParameterType;
|
import net.osmand.router.GeneralRouter.RoutingParameterType;
|
||||||
|
import net.osmand.util.MapUtils;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -80,12 +84,12 @@ public class MapRoutePreferencesControl extends MapControls {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class GPXLocalRoutingParameter extends LocalRoutingParameter {
|
private static class OtherLocalRoutingParameter extends LocalRoutingParameter {
|
||||||
public String text;
|
public String text;
|
||||||
public boolean selected;
|
public boolean selected;
|
||||||
public int id;
|
public int id;
|
||||||
|
|
||||||
public GPXLocalRoutingParameter(int id, String text, boolean selected) {
|
public OtherLocalRoutingParameter(int id, String text, boolean selected) {
|
||||||
this.text = text;
|
this.text = text;
|
||||||
this.selected = selected;
|
this.selected = selected;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
@ -155,12 +159,33 @@ public class MapRoutePreferencesControl extends MapControls {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void updateGpxRoutingParameter(GPXLocalRoutingParameter gpxParam) {
|
private void updateGpxRoutingParameter(OtherLocalRoutingParameter gpxParam) {
|
||||||
GPXRouteParamsBuilder rp = mapActivity.getRoutingHelper().getCurrentGPXRoute();
|
GPXRouteParamsBuilder rp = mapActivity.getRoutingHelper().getCurrentGPXRoute();
|
||||||
|
boolean selected = gpxParam.isSelected(settings);
|
||||||
if (rp != null) {
|
if (rp != null) {
|
||||||
boolean selected = gpxParam.isSelected(settings);
|
|
||||||
if (gpxParam.id == R.string.gpx_option_reverse_route) {
|
if (gpxParam.id == R.string.gpx_option_reverse_route) {
|
||||||
rp.setReverse(selected);
|
rp.setReverse(selected);
|
||||||
|
TargetPointsHelper tg = mapActivity.getMyApplication().getTargetPointsHelper();
|
||||||
|
List<Location> ps = rp.getPoints();
|
||||||
|
if (ps.size() > 0) {
|
||||||
|
Location first = ps.get(0);
|
||||||
|
Location end = ps.get(ps.size() - 1);
|
||||||
|
LatLon pn = tg.getPointToNavigate();
|
||||||
|
boolean update = false;
|
||||||
|
if (pn == null ||
|
||||||
|
MapUtils.getDistance(tg.getPointToNavigate(), new LatLon(first.getLatitude(), first.getLongitude())) < 10) {
|
||||||
|
tg.navigateToPoint(new LatLon(end.getLatitude(), end.getLongitude()), false, -1);
|
||||||
|
update = true;
|
||||||
|
}
|
||||||
|
if (tg.getPointToStart() == null ||
|
||||||
|
MapUtils.getDistance(tg.getPointToStart(), new LatLon(end.getLatitude(), end.getLongitude())) < 10) {
|
||||||
|
tg.setStartPoint(new LatLon(first.getLatitude(), first.getLongitude()), false, null);
|
||||||
|
update = true;
|
||||||
|
}
|
||||||
|
if(update) {
|
||||||
|
tg.updateRoutingHelper();
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (gpxParam.id == R.string.gpx_option_calculate_first_last_segment) {
|
} else if (gpxParam.id == R.string.gpx_option_calculate_first_last_segment) {
|
||||||
rp.setCalculateOsmAndRouteParts(selected);
|
rp.setCalculateOsmAndRouteParts(selected);
|
||||||
settings.ROUTE_CALC_OSMAND_PARTS.set(selected);
|
settings.ROUTE_CALC_OSMAND_PARTS.set(selected);
|
||||||
|
@ -173,30 +198,36 @@ public class MapRoutePreferencesControl extends MapControls {
|
||||||
settings.CALC_GPX_ROUTE.set(selected);
|
settings.CALC_GPX_ROUTE.set(selected);
|
||||||
rp.setCalculateOsmAndRoute(selected);
|
rp.setCalculateOsmAndRoute(selected);
|
||||||
updateParameters();
|
updateParameters();
|
||||||
} else if (gpxParam.id == R.string.calculate_osmand_route_without_internet) {
|
|
||||||
settings.ROUTE_CALC_OSMAND_PARTS.set(selected);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (gpxParam.id == R.string.calculate_osmand_route_without_internet) {
|
||||||
|
settings.ROUTE_CALC_OSMAND_PARTS.set(selected);
|
||||||
|
}
|
||||||
|
if (gpxParam.id == R.string.fast_route_mode) {
|
||||||
|
settings.FAST_ROUTE_MODE.set(selected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<LocalRoutingParameter> getRoutingParameters(ApplicationMode am) {
|
private List<LocalRoutingParameter> getRoutingParameters(ApplicationMode am) {
|
||||||
List<LocalRoutingParameter> list = new ArrayList<LocalRoutingParameter>();
|
List<LocalRoutingParameter> list = new ArrayList<LocalRoutingParameter>();
|
||||||
GPXRouteParamsBuilder rparams = mapActivity.getRoutingHelper().getCurrentGPXRoute();
|
GPXRouteParamsBuilder rparams = mapActivity.getRoutingHelper().getCurrentGPXRoute();
|
||||||
boolean osmandRouter = settings.ROUTER_SERVICE.get() != RouteService.OSMAND ;
|
boolean osmandRouter = settings.ROUTER_SERVICE.get() == RouteService.OSMAND ;
|
||||||
if(!osmandRouter) {
|
if(!osmandRouter) {
|
||||||
list.add(new GPXLocalRoutingParameter(R.string.calculate_osmand_route_without_internet,
|
list.add(new OtherLocalRoutingParameter(R.string.calculate_osmand_route_without_internet,
|
||||||
getString(R.string.calculate_osmand_route_without_internet), settings.ROUTE_CALC_OSMAND_PARTS.get()));
|
getString(R.string.calculate_osmand_route_without_internet), settings.ROUTE_CALC_OSMAND_PARTS.get()));
|
||||||
|
list.add(new OtherLocalRoutingParameter(R.string.fast_route_mode,
|
||||||
|
getString(R.string.fast_route_mode), settings.FAST_ROUTE_MODE.get()));
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
if(rparams != null) {
|
if(rparams != null) {
|
||||||
list.add(new GPXLocalRoutingParameter(R.string.gpx_option_reverse_route,
|
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_reverse_route,
|
||||||
getString(R.string.gpx_option_reverse_route), rparams.isReverse()));
|
getString(R.string.gpx_option_reverse_route), rparams.isReverse()));
|
||||||
list.add(new GPXLocalRoutingParameter(R.string.gpx_option_from_start_point,
|
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_from_start_point,
|
||||||
getString(R.string.gpx_option_from_start_point), rparams.isPassWholeRoute()));
|
getString(R.string.gpx_option_from_start_point), rparams.isPassWholeRoute()));
|
||||||
list.add(new GPXLocalRoutingParameter(R.string.gpx_option_calculate_first_last_segment,
|
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_calculate_first_last_segment,
|
||||||
getString(R.string.gpx_option_calculate_first_last_segment), rparams.isCalculateOsmAndRouteParts()));
|
getString(R.string.gpx_option_calculate_first_last_segment), rparams.isCalculateOsmAndRouteParts()));
|
||||||
list.add(new GPXLocalRoutingParameter(R.string.announce_gpx_waypoints,
|
list.add(new OtherLocalRoutingParameter(R.string.announce_gpx_waypoints,
|
||||||
getString(R.string.announce_gpx_waypoints), rparams.isAnnounceWaypoints()));
|
getString(R.string.announce_gpx_waypoints), rparams.isAnnounceWaypoints()));
|
||||||
// Temporary disabled
|
// Temporary disabled
|
||||||
// list.add(new GPXLocalRoutingParameter(R.string.calculate_osmand_route_gpx,
|
// list.add(new GPXLocalRoutingParameter(R.string.calculate_osmand_route_gpx,
|
||||||
|
@ -247,8 +278,8 @@ public class MapRoutePreferencesControl extends MapControls {
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
rp.setSelected(settings, isChecked);
|
rp.setSelected(settings, isChecked);
|
||||||
if(rp instanceof GPXLocalRoutingParameter) {
|
if(rp instanceof OtherLocalRoutingParameter) {
|
||||||
updateGpxRoutingParameter((GPXLocalRoutingParameter) rp);
|
updateGpxRoutingParameter((OtherLocalRoutingParameter) rp);
|
||||||
}
|
}
|
||||||
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
|
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue