REcalculate fully route after 3 attempts in 2 mins each

This commit is contained in:
Victor Shcherb 2015-06-09 00:33:37 +02:00
parent 2ce29533fc
commit d4bc639546
2 changed files with 14 additions and 8 deletions

View file

@ -66,7 +66,6 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import btools.routingapp.IBRouterService; import btools.routingapp.IBRouterService;

View file

@ -57,8 +57,11 @@ public class RoutingHelper {
private Location lastProjection; private Location lastProjection;
private Location lastFixedLocation; private Location lastFixedLocation;
private static final int RECALCULATE_THRESHOLD_COUNT_CAUSING_FULL_RECALCULATE = 3;
private static final int RECALCULATE_THRESHOLD_CAUSING_FULL_RECALCULATE_INTERVAL = 120000;
private Thread currentRunningJob; private Thread currentRunningJob;
private long lastTimeEvaluatedRoute = 0; private long lastTimeEvaluatedRoute = 0;
private long recalculateCountInInterval = 0;
private int evalWaitInterval = 0; private int evalWaitInterval = 0;
private ApplicationMode mode; private ApplicationMode mode;
@ -563,16 +566,13 @@ public class RoutingHelper {
// This check is valid for Online/GPX services (offline routing is aware of route direction) // This check is valid for Online/GPX services (offline routing is aware of route direction)
wrongMovementDirection = checkWrongMovementDirection(start, routeNodes.get(newCurrentRoute + 1)); wrongMovementDirection = checkWrongMovementDirection(start, routeNodes.get(newCurrentRoute + 1));
// set/reset evalWaitInterval only if new route is in forward direction // set/reset evalWaitInterval only if new route is in forward direction
if (wrongMovementDirection) {
if (!wrongMovementDirection) {
evalWaitInterval = 3000; evalWaitInterval = 3000;
} else { } else {
if(evalWaitInterval == 0){ evalWaitInterval = Math.max(3000, evalWaitInterval * 3 / 2);
evalWaitInterval = 3000;
}
evalWaitInterval = evalWaitInterval * 3 / 2;
evalWaitInterval = Math.min(evalWaitInterval, 120000); evalWaitInterval = Math.min(evalWaitInterval, 120000);
} }
} }
} }
@ -821,13 +821,20 @@ public class RoutingHelper {
// do not evaluate very often // do not evaluate very often
if ((currentRunningJob == null && System.currentTimeMillis() - lastTimeEvaluatedRoute > evalWaitInterval) if ((currentRunningJob == null && System.currentTimeMillis() - lastTimeEvaluatedRoute > evalWaitInterval)
|| paramsChanged || !onlyStartPointChanged) { || paramsChanged || !onlyStartPointChanged) {
if(System.currentTimeMillis() - lastTimeEvaluatedRoute < RECALCULATE_THRESHOLD_CAUSING_FULL_RECALCULATE_INTERVAL) {
recalculateCountInInterval ++;
}
RouteCalculationParams params = new RouteCalculationParams(); RouteCalculationParams params = new RouteCalculationParams();
params.start = start; params.start = start;
params.end = end; params.end = end;
params.intermediates = intermediates; params.intermediates = intermediates;
params.gpxRoute = gpxRoute == null ? null : gpxRoute.build(start, settings); params.gpxRoute = gpxRoute == null ? null : gpxRoute.build(start, settings);
params.onlyStartPointChanged = onlyStartPointChanged; params.onlyStartPointChanged = onlyStartPointChanged;
if(recalculateCountInInterval < RECALCULATE_THRESHOLD_COUNT_CAUSING_FULL_RECALCULATE) {
params.previousToRecalculate = previousRoute; params.previousToRecalculate = previousRoute;
} else {
recalculateCountInInterval = 0;
}
params.leftSide = settings.DRIVING_REGION.get().leftHandDriving; params.leftSide = settings.DRIVING_REGION.get().leftHandDriving;
params.fast = settings.FAST_ROUTE_MODE.getModeValue(mode); params.fast = settings.FAST_ROUTE_MODE.getModeValue(mode);
params.type = settings.ROUTER_SERVICE.getModeValue(mode); params.type = settings.ROUTER_SERVICE.getModeValue(mode);