Merge branch 'master' of https://github.com/osmandapp/Osmand
This commit is contained in:
commit
4a0c77d690
68 changed files with 1133 additions and 709 deletions
|
@ -61,12 +61,13 @@ public class BinaryInspector {
|
|||
if(args.length == 1 && "test".equals(args[0])) {
|
||||
in.inspector(new String[]{
|
||||
// "-vpoi",
|
||||
"-vmap", "-vmapobjects",
|
||||
// "-vmap", "-vmapobjects",
|
||||
// "-vrouting",
|
||||
// "-vaddress", "-vcities", "-vstreets", "-vstreetgroups","-vbuildings",
|
||||
// "-vaddress", "-vcities","-vstreetgroups",
|
||||
// "-vstreets", "-vbuildings", "-vintersections",
|
||||
// "-zoom=16",
|
||||
// "-bbox=1.74,51.17,1.75,51.16",
|
||||
"/home/victor/projects/osmand/osm-gen/Map.obf"
|
||||
// "/home/victor/projects/osmand/osm-gen/Map.obf"
|
||||
});
|
||||
} else {
|
||||
in.inspector(args);
|
||||
|
|
|
@ -495,6 +495,33 @@ public class BinaryRoutePlanner {
|
|||
return directionAllowed;
|
||||
}
|
||||
|
||||
private boolean checkViaRestrictions(RouteSegment from, RouteSegment to) {
|
||||
if(from != null && to != null) {
|
||||
long fid = to.getRoad().getId();
|
||||
for(int i = 0; i < from.getRoad().getRestrictionLength(); i++) {
|
||||
long id = from.getRoad().getRestrictionId(i);
|
||||
if(fid == id) {
|
||||
int tp = from.getRoad().getRestrictionType(i);
|
||||
if(tp == MapRenderingTypes.RESTRICTION_NO_LEFT_TURN ||
|
||||
tp == MapRenderingTypes.RESTRICTION_NO_RIGHT_TURN ||
|
||||
tp == MapRenderingTypes.RESTRICTION_NO_STRAIGHT_ON ||
|
||||
tp == MapRenderingTypes.RESTRICTION_NO_U_TURN) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private RouteSegment getParentDiffId(RouteSegment s) {
|
||||
while(s.getParentRoute() != null && s.getParentRoute().getRoad().getId() == s.getRoad().getId()) {
|
||||
s = s.getParentRoute();
|
||||
}
|
||||
return s.getParentRoute();
|
||||
}
|
||||
|
||||
private boolean checkIfOppositieSegmentWasVisited(final RoutingContext ctx, boolean reverseWaySearch,
|
||||
PriorityQueue<RouteSegment> graphSegments, RouteSegment segment, TLongObjectHashMap<RouteSegment> oppositeSegments,
|
||||
int segmentPoint, float segmentDist, float obstaclesTime) {
|
||||
|
@ -502,6 +529,9 @@ public class BinaryRoutePlanner {
|
|||
long opp = calculateRoutePointId(road, segment.isPositive() ? segmentPoint - 1 : segmentPoint, !segment.isPositive());
|
||||
if (oppositeSegments.containsKey(opp)) {
|
||||
RouteSegment opposite = oppositeSegments.get(opp);
|
||||
RouteSegment to = reverseWaySearch ? getParentDiffId(segment) : getParentDiffId(opposite);
|
||||
RouteSegment from = !reverseWaySearch ? getParentDiffId(segment) : getParentDiffId(opposite);
|
||||
if (checkViaRestrictions(from, to)) {
|
||||
FinalRouteSegment frs = new FinalRouteSegment(road, segmentPoint);
|
||||
float distStartObstacles = segment.distanceFromStart
|
||||
+ calculateTimeWithObstacles(ctx, road, segmentDist, obstaclesTime);
|
||||
|
@ -512,11 +542,12 @@ public class BinaryRoutePlanner {
|
|||
frs.distanceToEnd = 0;
|
||||
frs.opposite = opposite;
|
||||
graphSegments.add(frs);
|
||||
if(TRACE_ROUTING){
|
||||
if (TRACE_ROUTING) {
|
||||
printRoad(" >> Final segment : ", frs, reverseWaySearch);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -554,17 +585,30 @@ public class BinaryRoutePlanner {
|
|||
}
|
||||
|
||||
|
||||
private boolean proccessRestrictions(RoutingContext ctx, RouteDataObject road, RouteSegment inputNext, boolean reverseWay) {
|
||||
ctx.segmentsToVisitPrescripted.clear();
|
||||
ctx.segmentsToVisitNotForbidden.clear();
|
||||
boolean exclusiveRestriction = false;
|
||||
RouteSegment next = inputNext;
|
||||
if (!reverseWay && road.getRestrictionLength() == 0) {
|
||||
return false;
|
||||
}
|
||||
private boolean proccessRestrictions(RoutingContext ctx, RouteSegment segment, RouteSegment inputNext, boolean reverseWay) {
|
||||
if(!ctx.getRouter().restrictionsAware()) {
|
||||
return false;
|
||||
}
|
||||
RouteDataObject road = segment.getRoad();
|
||||
RouteSegment parent = getParentDiffId(segment);
|
||||
if (!reverseWay && road.getRestrictionLength() == 0 &&
|
||||
(parent == null || parent.getRoad().getRestrictionLength() == 0)) {
|
||||
return false;
|
||||
}
|
||||
ctx.segmentsToVisitPrescripted.clear();
|
||||
ctx.segmentsToVisitNotForbidden.clear();
|
||||
processRestriction(ctx, inputNext, reverseWay, false, road);
|
||||
if(parent != null) {
|
||||
processRestriction(ctx, inputNext, reverseWay, true, parent.getRoad());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
protected void processRestriction(RoutingContext ctx, RouteSegment inputNext, boolean reverseWay, boolean via,
|
||||
RouteDataObject road) {
|
||||
RouteSegment next = inputNext;
|
||||
boolean exclusiveRestriction = false;
|
||||
while (next != null) {
|
||||
int type = -1;
|
||||
if (!reverseWay) {
|
||||
|
@ -607,10 +651,14 @@ public class BinaryRoutePlanner {
|
|||
} else if (type == MapRenderingTypes.RESTRICTION_NO_LEFT_TURN || type == MapRenderingTypes.RESTRICTION_NO_RIGHT_TURN
|
||||
|| type == MapRenderingTypes.RESTRICTION_NO_STRAIGHT_ON || type == MapRenderingTypes.RESTRICTION_NO_U_TURN) {
|
||||
// next = next.next; continue;
|
||||
if(via) {
|
||||
ctx.segmentsToVisitPrescripted.remove(next);
|
||||
}
|
||||
} else if (type == -1) {
|
||||
// case no restriction
|
||||
ctx.segmentsToVisitNotForbidden.add(next);
|
||||
} else {
|
||||
if (!via) {
|
||||
// case exclusive restriction (only_right, only_straight, ...)
|
||||
// 1. in case we are going backward we should not consider only_restriction
|
||||
// as exclusive because we have many "in" roads and one "out"
|
||||
|
@ -623,10 +671,12 @@ public class BinaryRoutePlanner {
|
|||
ctx.segmentsToVisitNotForbidden.add(next);
|
||||
}
|
||||
}
|
||||
}
|
||||
next = next.next;
|
||||
}
|
||||
if(!via) {
|
||||
ctx.segmentsToVisitPrescripted.addAll(ctx.segmentsToVisitNotForbidden);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -643,7 +693,7 @@ public class BinaryRoutePlanner {
|
|||
if(inputNext != null && inputNext.getRoad().getId() == segment.getRoad().getId() && inputNext.next == null) {
|
||||
thereAreRestrictions = false;
|
||||
} else {
|
||||
thereAreRestrictions = proccessRestrictions(ctx, segment.road, inputNext, reverseWaySearch);
|
||||
thereAreRestrictions = proccessRestrictions(ctx, segment, inputNext, reverseWaySearch);
|
||||
if (thereAreRestrictions) {
|
||||
nextIterator = ctx.segmentsToVisitPrescripted.iterator();
|
||||
if (TRACE_ROUTING) {
|
||||
|
|
|
@ -40,15 +40,35 @@ public class RouteResultPreparation {
|
|||
List<RouteSegmentResult> prepareResult(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException {
|
||||
validateAllPointsConnected(result);
|
||||
splitRoadsAndAttachRoadSegments(ctx, result);
|
||||
// calculate time
|
||||
calculateTimeSpeed(ctx, result);
|
||||
|
||||
addTurnInfo(ctx.leftSideNavigation, result);
|
||||
for (int i = 0; i < result.size(); i ++) {
|
||||
TurnType turnType = getTurnInfo(result, i, ctx.leftSideNavigation);
|
||||
result.get(i).setTurnType(turnType);
|
||||
}
|
||||
|
||||
determineTurnsToMerge(ctx.leftSideNavigation, result);
|
||||
justifyUTurns(ctx.leftSideNavigation, result);
|
||||
addTurnInfoDescriptions(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void justifyUTurns(boolean leftSide, List<RouteSegmentResult> result) {
|
||||
int next;
|
||||
for (int i = 0; i < result.size() - 1; i = next) {
|
||||
next = i + 1;
|
||||
TurnType t = result.get(i).getTurnType();
|
||||
// justify turn
|
||||
if (t != null) {
|
||||
TurnType jt = justifyUTurn(leftSide, result, i, t);
|
||||
if (jt != null) {
|
||||
result.get(i).setTurnType(jt);
|
||||
next = i + 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void calculateTimeSpeed(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException {
|
||||
for (int i = 0; i < result.size(); i++) {
|
||||
RouteSegmentResult rr = result.get(i);
|
||||
|
@ -332,26 +352,6 @@ public class RouteResultPreparation {
|
|||
}
|
||||
|
||||
|
||||
private void addTurnInfo(boolean leftside, List<RouteSegmentResult> result) {
|
||||
int next = 1;
|
||||
for (int i = 0; i <= result.size(); i = next) {
|
||||
TurnType t = null;
|
||||
next = i + 1;
|
||||
if (i < result.size()) {
|
||||
t = getTurnInfo(result, i, leftside);
|
||||
// justify turn
|
||||
if(t != null && i < result.size() - 1) {
|
||||
TurnType jt = justifyUTurn(leftside, result, i, t);
|
||||
if(jt != null) {
|
||||
t = jt;
|
||||
next = i + 2;
|
||||
}
|
||||
}
|
||||
result.get(i).setTurnType(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void addTurnInfoDescriptions(List<RouteSegmentResult> result) {
|
||||
int prevSegment = -1;
|
||||
float dist = 0;
|
||||
|
@ -359,8 +359,29 @@ public class RouteResultPreparation {
|
|||
if (i == result.size() || result.get(i).getTurnType() != null) {
|
||||
if (prevSegment >= 0) {
|
||||
String turn = result.get(prevSegment).getTurnType().toString();
|
||||
if (result.get(prevSegment).getTurnType().getLanes() != null) {
|
||||
turn += Arrays.toString(result.get(prevSegment).getTurnType().getLanes());
|
||||
final int[] lns = result.get(prevSegment).getTurnType().getLanes();
|
||||
if (lns != null) {
|
||||
String s = "[ ";
|
||||
for (int h = 0; h < lns.length; h++) {
|
||||
if (h > 0) {
|
||||
s += ", ";
|
||||
}
|
||||
if (lns[h] % 2 == 1) {
|
||||
s += "+";
|
||||
}
|
||||
int pt = TurnType.getPrimaryTurn(lns[h]);
|
||||
if (pt == 0) {
|
||||
pt = 1;
|
||||
}
|
||||
s += TurnType.valueOf(pt, false).toXmlString();
|
||||
int st = TurnType.getSecondaryTurn(lns[h]);
|
||||
if (st != 0) {
|
||||
s += ";" + TurnType.valueOf(st, false).toXmlString();
|
||||
}
|
||||
|
||||
}
|
||||
s += "]";
|
||||
turn += s;
|
||||
}
|
||||
result.get(prevSegment).setDescription(
|
||||
turn + MessageFormat.format(" and go {0,number,#.##} meters", dist));
|
||||
|
@ -381,7 +402,7 @@ public class RouteResultPreparation {
|
|||
boolean tl = TurnType.TL == t.getValue();
|
||||
boolean tr = TurnType.TR == t.getValue();
|
||||
if(tl || tr) {
|
||||
TurnType tnext = getTurnInfo(result, i + 1, leftside);
|
||||
TurnType tnext = result.get(i + 1).getTurnType();
|
||||
if (tnext != null && result.get(i).getDistance() < 35) { //
|
||||
boolean ut = true;
|
||||
if (i > 0) {
|
||||
|
@ -397,6 +418,7 @@ public class RouteResultPreparation {
|
|||
ut = false;
|
||||
}
|
||||
if (ut) {
|
||||
tnext.setSkipToSpeak(true);
|
||||
if (tl && TurnType.TL == tnext.getValue()) {
|
||||
return TurnType.valueOf(TurnType.TU, false);
|
||||
} else if (tr && TurnType.TR == tnext.getValue()) {
|
||||
|
@ -409,132 +431,120 @@ public class RouteResultPreparation {
|
|||
}
|
||||
|
||||
private void determineTurnsToMerge(boolean leftside, List<RouteSegmentResult> result) {
|
||||
for (int i = result.size() - 2; i >= 0; i--) {
|
||||
RouteSegmentResult currentSegment = result.get(i);
|
||||
RouteSegmentResult nextSegment = null;
|
||||
|
||||
// We need to get the next segment that has a turn and lanes attached.
|
||||
for (int j = i + 1; j < result.size(); j++) {
|
||||
RouteSegmentResult possibleSegment = result.get(j);
|
||||
if (possibleSegment.getTurnType() != null && possibleSegment.getTurnType().getLanes() != null) {
|
||||
nextSegment = possibleSegment;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (nextSegment == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
double dist = 0;
|
||||
for (int i = result.size() - 1; i >= 0; i--) {
|
||||
RouteSegmentResult currentSegment = result.get(i);
|
||||
TurnType currentTurn = currentSegment.getTurnType();
|
||||
TurnType nextTurn = nextSegment.getTurnType();
|
||||
|
||||
if (currentTurn == null || currentTurn.getLanes() == null || nextTurn == null || nextTurn.getLanes() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Only allow slight turns that are nearby to be merged.
|
||||
// [disabled cause it is valuable for two consequent sharp turns as well]
|
||||
// the distance could be longer on highways and shorter in city
|
||||
dist += currentSegment.getDistance();
|
||||
if (currentTurn == null || currentTurn.getLanes() == null) {
|
||||
// skip
|
||||
} else {
|
||||
if (nextSegment != null) {
|
||||
String hw = currentSegment.getObject().getHighway();
|
||||
double mergeDistance = 200;
|
||||
if(hw != null && (hw.startsWith("trunk") || hw.startsWith("motorway"))) {
|
||||
if (hw != null && (hw.startsWith("trunk") || hw.startsWith("motorway"))) {
|
||||
mergeDistance = 400;
|
||||
}
|
||||
if (currentSegment.getDistance() < mergeDistance/*
|
||||
&& TurnType.isSlightTurn(currentTurn.getValue())*/) {
|
||||
if (dist < mergeDistance) {
|
||||
mergeTurnLanes(leftside, currentSegment, nextSegment);
|
||||
}
|
||||
}
|
||||
nextSegment = currentSegment;
|
||||
dist = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class MergeTurnLaneTurn {
|
||||
TurnType turn;
|
||||
int[] originalLanes;
|
||||
int[] disabledLanes;
|
||||
int activeStartIndex = -1;
|
||||
int activeEndIndex = -1;
|
||||
int activeLen = 0;
|
||||
|
||||
public MergeTurnLaneTurn(RouteSegmentResult segment) {
|
||||
this.turn = segment.getTurnType();
|
||||
if(turn != null) {
|
||||
originalLanes = turn.getLanes();
|
||||
}
|
||||
if(originalLanes != null) {
|
||||
disabledLanes = new int[originalLanes.length];
|
||||
for (int i = 0; i < originalLanes.length; i++) {
|
||||
int ln = originalLanes[i];
|
||||
disabledLanes[i] = ln & ~1;
|
||||
if ((ln & 1) > 0) {
|
||||
if (activeStartIndex == -1) {
|
||||
activeStartIndex = i;
|
||||
}
|
||||
activeEndIndex = i;
|
||||
activeLen++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isActiveTurnMostLeft() {
|
||||
return activeStartIndex == 0;
|
||||
}
|
||||
public boolean isActiveTurnMostRight() {
|
||||
return activeEndIndex == originalLanes.length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void mergeTurnLanes(boolean leftSide, RouteSegmentResult currentSegment, RouteSegmentResult nextSegment) {
|
||||
TurnType currentTurn = currentSegment.getTurnType();
|
||||
TurnType nextTurn = nextSegment.getTurnType();
|
||||
boolean isUsingTurnLanes = TurnType.getPrimaryTurn(currentTurn.getLanes()[0]) != 0
|
||||
&& TurnType.getPrimaryTurn(nextTurn.getLanes()[0]) != 0;
|
||||
if (isUsingTurnLanes) {
|
||||
int[] lanes = new int[currentTurn.getLanes().length];
|
||||
int activeIndex = -1;
|
||||
int activeLen = 0;
|
||||
// define enabled lanes
|
||||
for(int i = 0; i < lanes.length; i++) {
|
||||
int ln = currentTurn.getLanes()[i];
|
||||
lanes[i] = ln & ~1;
|
||||
if((ln & 1) > 0) {
|
||||
if(activeIndex == -1) {
|
||||
activeIndex = i;
|
||||
activeLen++;
|
||||
} else {
|
||||
activeLen++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(activeLen < 2) {
|
||||
MergeTurnLaneTurn active = new MergeTurnLaneTurn(currentSegment);
|
||||
MergeTurnLaneTurn target = new MergeTurnLaneTurn(nextSegment);
|
||||
if (active.activeLen < 2) {
|
||||
return;
|
||||
}
|
||||
int targetActiveIndex = -1;
|
||||
int targetActiveLen = 0;
|
||||
int[] nextLanes = nextTurn.getLanes();
|
||||
for(int i = 0; i < nextLanes.length; i++) {
|
||||
int ln = nextLanes[i];
|
||||
if((ln & 1) > 0) {
|
||||
if(targetActiveIndex == -1) {
|
||||
targetActiveIndex = i;
|
||||
targetActiveLen++;
|
||||
} else {
|
||||
targetActiveLen++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(targetActiveIndex == -1) {
|
||||
if (target.activeStartIndex == -1) {
|
||||
return;
|
||||
}
|
||||
boolean changed = false;
|
||||
// next turn is left
|
||||
if(targetActiveIndex == 0) {
|
||||
if (target.isActiveTurnMostLeft()) {
|
||||
// let only the most left lanes be enabled
|
||||
if(targetActiveLen <= activeLen) {
|
||||
activeLen = targetActiveLen;
|
||||
if (target.activeLen <= active.activeLen) {
|
||||
active.activeEndIndex -= (active.activeLen - target.activeLen);
|
||||
changed = true;
|
||||
}
|
||||
} else if(targetActiveIndex + targetActiveLen == nextLanes.length) {
|
||||
} else if (target.isActiveTurnMostRight()) {
|
||||
// next turn is right
|
||||
// let only the most right lanes be enabled
|
||||
if(targetActiveLen <= activeLen) {
|
||||
activeIndex += (activeLen - targetActiveLen);
|
||||
if (target.activeLen < active.activeLen) {
|
||||
active.activeStartIndex += (active.activeLen - target.activeLen);
|
||||
changed = true;
|
||||
}
|
||||
} else {
|
||||
// next turn is get through (take out the left and the right turn)
|
||||
if(nextLanes.length >= activeLen) {
|
||||
float ratio = (nextLanes.length / (float)activeLen);
|
||||
activeLen = (int) Math.ceil(targetActiveLen * ratio);
|
||||
activeIndex = (int) Math.floor(targetActiveIndex / ratio);
|
||||
if (target.activeLen < active.activeLen) {
|
||||
float ratio = (active.activeLen - target.activeLen) / 2f;
|
||||
active.activeEndIndex = (int) Math.ceil(active.activeEndIndex - ratio);
|
||||
active.activeStartIndex = (int) Math.floor(active.activeStartIndex + ratio);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
if(!changed) {
|
||||
if (!changed) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// set the allowed lane bit
|
||||
for (int i = 0; i < lanes.length; i++) {
|
||||
if(i >= activeIndex && i < activeIndex + activeLen) {
|
||||
lanes[i] |= 1;
|
||||
for (int i = 0; i < active.disabledLanes.length; i++) {
|
||||
if (i >= active.activeStartIndex && i <= active.activeEndIndex) {
|
||||
active.disabledLanes[i] |= 1;
|
||||
}
|
||||
}
|
||||
currentTurn.setLanes(lanes);
|
||||
int turn = inferTurnFromLanes(lanes);
|
||||
TurnType currentTurn = currentSegment.getTurnType();
|
||||
currentTurn.setLanes(active.disabledLanes);
|
||||
int turn = inferTurnFromLanes(active.disabledLanes);
|
||||
if (turn != 0 && turn != currentTurn.getValue()) {
|
||||
TurnType newTurnType = TurnType.valueOf(turn, leftSide);
|
||||
newTurnType.setLanes(lanes);
|
||||
newTurnType.setLanes(active.disabledLanes);
|
||||
newTurnType.setSkipToSpeak(currentTurn.isSkipToSpeak());
|
||||
currentSegment.setTurnType(newTurnType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static final int MAX_SPEAK_PRIORITY = 5;
|
||||
private int highwaySpeakPriority(String highway) {
|
||||
|
@ -585,10 +595,8 @@ public class RouteResultPreparation {
|
|||
} else {
|
||||
t = TurnType.valueOf(TurnType.TU, leftSide);
|
||||
}
|
||||
int[] lanes = getTurnLanesInfo(prev, t.getValue(), leftSide, true);
|
||||
if(lanes != null) {
|
||||
int[] lanes = getTurnLanesInfo(prev, t.getValue());
|
||||
t.setLanes(lanes);
|
||||
}
|
||||
} else if (mpi < -TURN_DEGREE_MIN) {
|
||||
if (mpi > -60) {
|
||||
t = TurnType.valueOf(TurnType.TSLR, leftSide);
|
||||
|
@ -597,14 +605,12 @@ public class RouteResultPreparation {
|
|||
} else if (mpi > -135 || !leftSide) {
|
||||
t = TurnType.valueOf(TurnType.TSHR, leftSide);
|
||||
} else {
|
||||
t = TurnType.valueOf(TurnType.TU, leftSide);
|
||||
t = TurnType.valueOf(TurnType.TRU, leftSide);
|
||||
}
|
||||
int[] lanes = getTurnLanesInfo(prev, t.getValue(), leftSide, false);
|
||||
if(lanes != null) {
|
||||
int[] lanes = getTurnLanesInfo(prev, t.getValue());
|
||||
t.setLanes(lanes);
|
||||
}
|
||||
} else {
|
||||
t = attachKeepLeftInfoAndLanes(leftSide, prev, rr, t);
|
||||
t = attachKeepLeftInfoAndLanes(leftSide, prev, rr);
|
||||
}
|
||||
if (t != null) {
|
||||
t.setTurnAngle((float) -mpi);
|
||||
|
@ -613,39 +619,34 @@ public class RouteResultPreparation {
|
|||
return t;
|
||||
}
|
||||
|
||||
private int[] getTurnLanesInfo(RouteSegmentResult prevSegm, int mainTurnType, boolean leftSide,
|
||||
boolean leftTurn) {
|
||||
private int[] getTurnLanesInfo(RouteSegmentResult prevSegm, int mainTurnType) {
|
||||
String turnLanes = getTurnLanesString(prevSegm);
|
||||
if (turnLanes == null) {
|
||||
return null;
|
||||
}
|
||||
String[] splitLaneOptions = turnLanes.split("\\|", -1);
|
||||
if (splitLaneOptions.length != countLanesMinOne(prevSegm)) {
|
||||
// Error in data or missing data
|
||||
return null;
|
||||
}
|
||||
int[] lanesArray = calculateRawTurnLanes(splitLaneOptions, mainTurnType);
|
||||
int[] lanesArray = calculateRawTurnLanes(turnLanes, mainTurnType);
|
||||
// Manually set the allowed lanes.
|
||||
boolean isSet = setAllowedLanes(mainTurnType, lanesArray);
|
||||
if(!isSet && lanesArray.length > 0) {
|
||||
// In some cases (at least in the US), the rightmost lane might not have a right turn indicated as per turn:lanes,
|
||||
// but is allowed and being used here. This section adds in that indicator. The same applies for where leftSide is true.
|
||||
boolean leftTurn = TurnType.isLeftTurn(mainTurnType);
|
||||
int ind = leftTurn? 0 : lanesArray.length - 1;
|
||||
final int tt = TurnType.getPrimaryTurn(lanesArray[ind]);
|
||||
if (leftTurn) {
|
||||
if (!TurnType.isLeftTurn(tt)) {
|
||||
// This was just to make sure that there's no bad data.
|
||||
TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TL);
|
||||
TurnType.setSecondaryTurn(lanesArray, ind, tt);
|
||||
TurnType.setPrimaryTurn(lanesArray, ind, TurnType.TL);
|
||||
}
|
||||
} else {
|
||||
if (!TurnType.isRightTurn(tt)) {
|
||||
// This was just to make sure that there's no bad data.
|
||||
TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TR);
|
||||
TurnType.setSecondaryTurn(lanesArray, ind, tt);
|
||||
TurnType.setPrimaryTurn(lanesArray, ind, TurnType.TR);
|
||||
}
|
||||
}
|
||||
setAllowedLanes(lanesArray[ind], lanesArray);
|
||||
setAllowedLanes(tt, lanesArray);
|
||||
}
|
||||
return lanesArray;
|
||||
}
|
||||
|
@ -692,113 +693,189 @@ public class RouteResultPreparation {
|
|||
return t;
|
||||
}
|
||||
|
||||
|
||||
private TurnType attachKeepLeftInfoAndLanes(boolean leftSide, RouteSegmentResult prevSegm, RouteSegmentResult currentSegm, TurnType t) {
|
||||
// keep left/right
|
||||
boolean kl = false;
|
||||
boolean kr = false;
|
||||
List<RouteSegmentResult> attachedRoutes = currentSegm.getAttachedRoutes(currentSegm.getStartPointIndex());
|
||||
int ls = prevSegm.getObject().getLanes();
|
||||
if(ls >= 0 && prevSegm.getObject().getOneway() == 0) {
|
||||
ls = (ls + 1) / 2;
|
||||
}
|
||||
int left = 0;
|
||||
int right = 0;
|
||||
private class RoadSplitStructure {
|
||||
boolean keepLeft = false;
|
||||
boolean keepRight = false;
|
||||
boolean speak = false;
|
||||
int leftLanes = 0;
|
||||
int rightLanes = 0;
|
||||
int roadsOnLeft = 0;
|
||||
int addRoadsOnLeft = 0;
|
||||
int roadsOnRight = 0;
|
||||
int addRoadsOnRight = 0;
|
||||
}
|
||||
|
||||
|
||||
private TurnType attachKeepLeftInfoAndLanes(boolean leftSide, RouteSegmentResult prevSegm, RouteSegmentResult currentSegm) {
|
||||
List<RouteSegmentResult> attachedRoutes = currentSegm.getAttachedRoutes(currentSegm.getStartPointIndex());
|
||||
if(attachedRoutes == null || attachedRoutes.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
// keep left/right
|
||||
RoadSplitStructure rs = calculateRoadSplitStructure(prevSegm, currentSegm, attachedRoutes);
|
||||
if(rs.roadsOnLeft + rs.roadsOnRight == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// turn lanes exist
|
||||
String turnLanes = getTurnLanesString(prevSegm);
|
||||
if (turnLanes != null) {
|
||||
return createKeepLeftRightTurnBasedOnTurnTypes(rs, prevSegm, currentSegm, turnLanes, leftSide);
|
||||
}
|
||||
|
||||
// turn lanes don't exist
|
||||
if (rs.keepLeft || rs.keepRight) {
|
||||
return createSimpleKeepLeftRightTurn(leftSide, prevSegm, currentSegm, rs);
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected TurnType createKeepLeftRightTurnBasedOnTurnTypes(RoadSplitStructure rs, RouteSegmentResult prevSegm,
|
||||
RouteSegmentResult currentSegm, String turnLanes,boolean leftSide) {
|
||||
// Maybe going straight at a 90-degree intersection
|
||||
TurnType t = TurnType.valueOf(TurnType.C, leftSide);
|
||||
int[] rawLanes = calculateRawTurnLanes(turnLanes, TurnType.C);
|
||||
if (rs.keepLeft || rs.keepRight) {
|
||||
String[] splitLaneOptions = turnLanes.split("\\|", -1);
|
||||
int activeBeginIndex = findActiveIndex(rawLanes, splitLaneOptions, rs.leftLanes, true,
|
||||
rs.roadsOnLeft, rs.addRoadsOnLeft);
|
||||
int activeEndIndex = findActiveIndex(rawLanes, splitLaneOptions, rs.rightLanes, false,
|
||||
rs.roadsOnRight, rs.addRoadsOnRight);
|
||||
if (activeBeginIndex == -1 || activeEndIndex == -1 || activeBeginIndex > activeEndIndex) {
|
||||
// something went wrong
|
||||
return createSimpleKeepLeftRightTurn(leftSide, prevSegm, currentSegm, rs);
|
||||
}
|
||||
for (int k = 0; k < rawLanes.length; k++) {
|
||||
if (k >= activeBeginIndex && k <= activeEndIndex) {
|
||||
rawLanes[k] |= 1;
|
||||
}
|
||||
}
|
||||
int tp = inferTurnFromLanes(rawLanes);
|
||||
if (tp != t.getValue() && tp != 0) {
|
||||
t = TurnType.valueOf(tp, leftSide);
|
||||
}
|
||||
} else {
|
||||
for (int k = 0; k < rawLanes.length; k++) {
|
||||
int turn = rawLanes[k];
|
||||
boolean active = false;
|
||||
if (TurnType.getPrimaryTurn(turn) == TurnType.C) {
|
||||
active = true;
|
||||
} else if (TurnType.isRightTurn(turn) && rs.roadsOnRight == 0) {
|
||||
// some turns go through many segments (to turn right or left)
|
||||
// so on one first segment the lane could be available and may be only 1 possible
|
||||
// all undesired lanes will be disabled through the 2nd pass
|
||||
active = true;
|
||||
} else if (TurnType.isLeftTurn(turn) && rs.roadsOnLeft == 0) {
|
||||
active = true;
|
||||
}
|
||||
if (active) {
|
||||
rawLanes[k] |= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
t.setSkipToSpeak(!rs.speak);
|
||||
t.setLanes(rawLanes);
|
||||
return t;
|
||||
}
|
||||
|
||||
protected int findActiveIndex(int[] rawLanes, String[] splitLaneOptions, int lanes, boolean left,
|
||||
int roads, int addRoads) {
|
||||
int activeStartIndex = -1;
|
||||
boolean lookupSlightTurn = addRoads > 0;
|
||||
for (int i = 0; i < rawLanes.length; i++) {
|
||||
int ind = left ? i : (rawLanes.length - i - 1);
|
||||
if (!lookupSlightTurn ||
|
||||
TurnType.isSlightTurn(TurnType.getPrimaryTurn(rawLanes[ind]))
|
||||
|| TurnType.isSlightTurn(TurnType.getSecondaryTurn(rawLanes[ind]))) {
|
||||
int cnt = countOccurrences(splitLaneOptions[ind], ';') + 1;
|
||||
if(cnt > 1) {
|
||||
// sometimes slight right turn goes to the road with 2 lanes
|
||||
// the better situation to group all the lanes and
|
||||
// when ';' we know for sure the lane combines 2 group
|
||||
roads --;
|
||||
}
|
||||
lanes -= cnt;
|
||||
// we already found slight turn others are turn in different direction
|
||||
lookupSlightTurn = false;
|
||||
}
|
||||
if (lanes < 0 || roads < 0) {
|
||||
activeStartIndex = ind;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return activeStartIndex;
|
||||
}
|
||||
|
||||
protected RoadSplitStructure calculateRoadSplitStructure(RouteSegmentResult prevSegm, RouteSegmentResult currentSegm,
|
||||
List<RouteSegmentResult> attachedRoutes) {
|
||||
RoadSplitStructure rs = new RoadSplitStructure();
|
||||
int speakPriority = Math.max(highwaySpeakPriority(prevSegm.getObject().getHighway()), highwaySpeakPriority(currentSegm.getObject().getHighway()));
|
||||
boolean otherRoutesExist = false;
|
||||
if (attachedRoutes != null) {
|
||||
for (RouteSegmentResult attached : attachedRoutes) {
|
||||
double ex = MapUtils.degreesDiff(attached.getBearingBegin(), currentSegm.getBearingBegin());
|
||||
double mpi = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), attached.getBearingBegin()));
|
||||
int rsSpeakPriority = highwaySpeakPriority(attached.getObject().getHighway());
|
||||
if (rsSpeakPriority != MAX_SPEAK_PRIORITY || speakPriority == MAX_SPEAK_PRIORITY) {
|
||||
if ((ex < TURN_DEGREE_MIN || mpi < TURN_DEGREE_MIN) && ex >= 0) {
|
||||
kl = true;
|
||||
right += countLanesMinOne(attached);
|
||||
speak = speak || rsSpeakPriority <= speakPriority;
|
||||
} else if ((ex > -TURN_DEGREE_MIN || mpi < TURN_DEGREE_MIN) && ex <= 0) {
|
||||
kr = true;
|
||||
left += countLanesMinOne(attached);
|
||||
speak = speak || rsSpeakPriority <= speakPriority;
|
||||
} else if (mpi >= TURN_DEGREE_MIN) {
|
||||
// Indicate that there are other turns at this intersection, and displaying the lanes may be helpful here.
|
||||
otherRoutesExist = true;
|
||||
int lanes = countLanesMinOne(attached);
|
||||
boolean smallStraightVariation = mpi < TURN_DEGREE_MIN;
|
||||
boolean smallTargetVariation = Math.abs(ex) < TURN_DEGREE_MIN;
|
||||
boolean attachedOnTheRight = ex >= 0;
|
||||
if (attachedOnTheRight) {
|
||||
rs.roadsOnRight++;
|
||||
} else {
|
||||
rs.roadsOnLeft++;
|
||||
}
|
||||
if (smallTargetVariation || smallStraightVariation) {
|
||||
if (attachedOnTheRight) {
|
||||
rs.keepLeft = true;
|
||||
rs.rightLanes += lanes;
|
||||
} else {
|
||||
rs.keepRight = true;
|
||||
rs.leftLanes += lanes;
|
||||
}
|
||||
rs.speak = rs.speak || rsSpeakPriority <= speakPriority;
|
||||
} else {
|
||||
if (attachedOnTheRight) {
|
||||
rs.addRoadsOnRight++;
|
||||
} else {
|
||||
rs.addRoadsOnLeft++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(kr && left == 0) {
|
||||
left = 1;
|
||||
} else if(kl && right == 0) {
|
||||
right = 1;
|
||||
return rs;
|
||||
}
|
||||
|
||||
protected TurnType createSimpleKeepLeftRightTurn(boolean leftSide, RouteSegmentResult prevSegm,
|
||||
RouteSegmentResult currentSegm, RoadSplitStructure rs) {
|
||||
int current = countLanesMinOne(currentSegm);
|
||||
int[] lanes = new int[current + left + right];
|
||||
ls = current + left + right;
|
||||
int ls = current + rs.leftLanes + rs.rightLanes;
|
||||
int[] lanes = new int[ls];
|
||||
for (int it = 0; it < ls; it++) {
|
||||
if (it < left || it >= left + current) {
|
||||
if (it < rs.leftLanes || it >= rs.leftLanes + current) {
|
||||
lanes[it] = 0;
|
||||
} else {
|
||||
lanes[it] = 1;
|
||||
}
|
||||
}
|
||||
// sometimes links are
|
||||
if ((current <= left + right) && (left > 1 || right > 1)) {
|
||||
speak = true;
|
||||
if ((current <= rs.leftLanes + rs.rightLanes) && (rs.leftLanes > 1 || rs.rightLanes > 1)) {
|
||||
rs.speak = true;
|
||||
}
|
||||
|
||||
double devation = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), currentSegm.getBearingBegin()));
|
||||
boolean makeSlightTurn = devation > 5 && (!isMotorway(prevSegm) || !isMotorway(currentSegm));
|
||||
if (kl && kr) {
|
||||
TurnType t = null;
|
||||
if (rs.keepLeft && rs.keepRight) {
|
||||
t = TurnType.valueOf(TurnType.C, leftSide);
|
||||
t.setSkipToSpeak(!speak);
|
||||
} else if (kl) {
|
||||
} else if (rs.keepLeft) {
|
||||
t = TurnType.valueOf(makeSlightTurn ? TurnType.TSLL : TurnType.KL, leftSide);
|
||||
t.setSkipToSpeak(!speak);
|
||||
} else if (kr) {
|
||||
} else if (rs.keepRight) {
|
||||
t = TurnType.valueOf(makeSlightTurn ? TurnType.TSLR : TurnType.KR, leftSide);
|
||||
t.setSkipToSpeak(!speak);
|
||||
} else if (otherRoutesExist && getTurnLanesString(prevSegm) != null) {
|
||||
// Maybe going straight at a 90-degree intersection
|
||||
t = TurnType.valueOf(TurnType.C, leftSide);
|
||||
t.setSkipToSpeak(true);
|
||||
|
||||
// When going straight, the lanes have to be calculated from the previous segment, not the current/next segment.
|
||||
int prevLanes = countLanesMinOne(prevSegm);
|
||||
|
||||
t.setLanes(attachTurnLanesData(prevSegm, new int[prevLanes]));
|
||||
|
||||
// Manually set the allowed lanes based on the turn type
|
||||
for (int i = 0; i < t.getLanes().length; i++) {
|
||||
if (TurnType.getPrimaryTurn(t.getLanes()[i]) == TurnType.C) {
|
||||
t.getLanes()[i] |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
return t;
|
||||
}
|
||||
if (t != null && lanes != null) {
|
||||
int[] calcLanes = attachTurnLanesData(prevSegm, lanes);
|
||||
if(calcLanes != lanes) {
|
||||
int tp = inferTurnFromLanes(calcLanes);
|
||||
if (tp != 0 && tp != t.getValue()) {
|
||||
TurnType derivedTurnType = TurnType.valueOf(tp, leftSide);
|
||||
derivedTurnType.setLanes(calcLanes);
|
||||
derivedTurnType.setSkipToSpeak(t.isSkipToSpeak());
|
||||
// Because only the primary turn is displayed, if the turn to be taken is currently set as the
|
||||
// secondary turn, then that needs to be switched around.
|
||||
for (int i = 0; i < calcLanes.length; i++) {
|
||||
if (TurnType.getSecondaryTurn(calcLanes[i]) == tp) {
|
||||
derivedTurnType.setSecondaryTurn(i, TurnType.getPrimaryTurn(calcLanes[i]));
|
||||
derivedTurnType.setPrimaryTurn(i, tp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
t.setLanes(calcLanes);
|
||||
|
||||
}
|
||||
t.setSkipToSpeak(!rs.speak);
|
||||
t.setLanes(lanes);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
@ -839,45 +916,7 @@ public class RouteResultPreparation {
|
|||
}
|
||||
}
|
||||
|
||||
private int[] attachTurnLanesData(RouteSegmentResult prevSegm, int[] outgoingCalcLanes) {
|
||||
String turnLanes = getTurnLanesString(prevSegm);
|
||||
if (turnLanes == null) {
|
||||
return outgoingCalcLanes;
|
||||
}
|
||||
String[] splitLaneOptions = turnLanes.split("\\|", -1);
|
||||
if (splitLaneOptions.length != countLanesMinOne(prevSegm)) {
|
||||
// Error in data or missing data
|
||||
return outgoingCalcLanes;
|
||||
}
|
||||
int[] usableLanes = mergeOutgoingLanesUsingTurnLanes(outgoingCalcLanes, splitLaneOptions);
|
||||
int[] rawLanes = calculateRawTurnLanes(splitLaneOptions, 0);
|
||||
for(int k = 0 ; k < splitLaneOptions.length; k++) {
|
||||
if((usableLanes[k] & 1) != 0) {
|
||||
rawLanes[k] |= 1;
|
||||
}
|
||||
}
|
||||
return rawLanes;
|
||||
}
|
||||
|
||||
protected int[] mergeOutgoingLanesUsingTurnLanes(int[] outgoingCalcLanes, String[] splitLaneOptions) {
|
||||
int[] usableLanes = outgoingCalcLanes;
|
||||
if (outgoingCalcLanes.length != splitLaneOptions.length) {
|
||||
usableLanes = new int[splitLaneOptions.length];
|
||||
// The turn:lanes don't easily match up to the target road.
|
||||
int outgoingLanesIndex = 0;
|
||||
int sourceLanesIndex = 0;
|
||||
while (outgoingLanesIndex < outgoingCalcLanes.length &&
|
||||
sourceLanesIndex < splitLaneOptions.length) {
|
||||
int options = countOccurrences(splitLaneOptions[sourceLanesIndex], ';');
|
||||
for (int k = 0; k <= options && outgoingLanesIndex < outgoingCalcLanes.length; k++) {
|
||||
usableLanes[sourceLanesIndex] |= outgoingCalcLanes[outgoingLanesIndex];
|
||||
outgoingLanesIndex++;
|
||||
}
|
||||
sourceLanesIndex++;
|
||||
}
|
||||
}
|
||||
return usableLanes;
|
||||
}
|
||||
|
||||
private int countOccurrences(String haystack, char needle) {
|
||||
int count = 0;
|
||||
|
@ -905,8 +944,7 @@ public class RouteResultPreparation {
|
|||
if(turnLanes == null) {
|
||||
return null;
|
||||
}
|
||||
String[] splitLaneOptions = turnLanes.split("\\|", -1);
|
||||
return calculateRawTurnLanes(splitLaneOptions, 0);
|
||||
return calculateRawTurnLanes(turnLanes, 0);
|
||||
}
|
||||
|
||||
public static int[] parseLanes(RouteDataObject ro, double dirToNorthEastPi) {
|
||||
|
@ -939,7 +977,8 @@ public class RouteResultPreparation {
|
|||
return null;
|
||||
}
|
||||
|
||||
private static int[] calculateRawTurnLanes(String[] splitLaneOptions, int calcTurnType) {
|
||||
private static int[] calculateRawTurnLanes(String turnLanes, int calcTurnType) {
|
||||
String[] splitLaneOptions = turnLanes.split("\\|", -1);
|
||||
int[] lanes = new int[splitLaneOptions.length];
|
||||
for (int i = 0; i < splitLaneOptions.length; i++) {
|
||||
String[] laneOptions = splitLaneOptions[i].split(";");
|
||||
|
@ -967,12 +1006,16 @@ public class RouteResultPreparation {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (TurnType.getPrimaryTurn(lanes[i]) == 0) {
|
||||
TurnType.setPrimaryTurn(lanes, i, turn);
|
||||
final int primary = TurnType.getPrimaryTurn(lanes[i]);
|
||||
if (primary == 0) {
|
||||
TurnType.setPrimaryTurnAndReset(lanes, i, turn);
|
||||
} else {
|
||||
if (turn == calcTurnType) {
|
||||
TurnType.setSecondaryTurn(lanes, i, TurnType.getPrimaryTurn(lanes[i]));
|
||||
TurnType.setPrimaryTurn(lanes, i, turn);
|
||||
if (turn == calcTurnType ||
|
||||
(TurnType.isRightTurn(calcTurnType) && TurnType.isRightTurn(turn)) ||
|
||||
(TurnType.isLeftTurn(calcTurnType) && TurnType.isLeftTurn(turn))
|
||||
) {
|
||||
TurnType.setPrimaryTurnAndReset(lanes, i, turn);
|
||||
TurnType.setSecondaryTurn(lanes, i, primary);
|
||||
} else {
|
||||
TurnType.setSecondaryTurn(lanes, i, turn);
|
||||
}
|
||||
|
@ -1021,7 +1064,18 @@ public class RouteResultPreparation {
|
|||
|
||||
// Checking to see that there is only one unique turn
|
||||
if (possibleTurns.size() == 1) {
|
||||
return possibleTurns.iterator().next();
|
||||
int infer = possibleTurns.iterator().next();
|
||||
for(int i = 0; i < oLanes.length; i++) {
|
||||
if(TurnType.getSecondaryTurn(oLanes[i]) == infer) {
|
||||
int pt = TurnType.getPrimaryTurn(oLanes[i]);
|
||||
int en = oLanes[i] & 1;
|
||||
TurnType.setPrimaryTurnAndReset(oLanes, i, infer);
|
||||
oLanes[i] |= en;
|
||||
TurnType.setSecondaryTurn(oLanes, i, pt);
|
||||
}
|
||||
|
||||
}
|
||||
return infer;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -163,14 +163,10 @@ public class TurnType {
|
|||
}
|
||||
|
||||
// Note that the primary turn will be the one displayed on the map.
|
||||
public static void setPrimaryTurn(int[] lanes, int lane, int turnType) {
|
||||
lanes[lane] |= (turnType << 1);
|
||||
public static void setPrimaryTurnAndReset(int[] lanes, int lane, int turnType) {
|
||||
lanes[lane] = (turnType << 1);
|
||||
}
|
||||
|
||||
public void setPrimaryTurn(int lane, int turnType) {
|
||||
lanes[lane] &= ~(15 << 1);
|
||||
lanes[lane] |= (turnType << 1);
|
||||
}
|
||||
|
||||
public static int getPrimaryTurn(int laneValue) {
|
||||
// Get the primary turn modifier for the lane
|
||||
|
@ -182,10 +178,6 @@ public class TurnType {
|
|||
lanes[lane] |= (turnType << 5);
|
||||
}
|
||||
|
||||
public void setSecondaryTurn(int lane, int turnType) {
|
||||
lanes[lane] |= (turnType << 5);
|
||||
}
|
||||
|
||||
public static int getSecondaryTurn(int laneValue) {
|
||||
// Get the primary turn modifier for the lane
|
||||
return (laneValue >> 5);
|
||||
|
@ -249,11 +241,11 @@ public class TurnType {
|
|||
}
|
||||
|
||||
public static boolean isLeftTurn(int type) {
|
||||
return type == TL || type == TSHL || type == TSLL;
|
||||
return type == TL || type == TSHL || type == TSLL || type == TRU;
|
||||
}
|
||||
|
||||
public static boolean isRightTurn(int type) {
|
||||
return type == TR || type == TSHR || type == TSLR;
|
||||
return type == TR || type == TSHR || type == TSLR || type == TU;
|
||||
}
|
||||
|
||||
public static boolean isSlightTurn(int type) {
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 131 B After Width: | Height: | Size: 1.1 KiB |
BIN
OsmAnd/res/drawable-mdpi/ruler.9.png
Normal file
BIN
OsmAnd/res/drawable-mdpi/ruler.9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
OsmAnd/res/drawable-xhdpi/ruler.9.png
Normal file
BIN
OsmAnd/res/drawable-xhdpi/ruler.9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
OsmAnd/res/drawable-xxhdpi/ruler.9.png
Normal file
BIN
OsmAnd/res/drawable-xxhdpi/ruler.9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -7,7 +7,9 @@
|
|||
android:layout_height="wrap_content">
|
||||
<LinearLayout android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp">
|
||||
<ImageView android:src="@drawable/ic_crashlog"
|
||||
android:layout_marginLeft="@dimen/dashFavIconMargin"
|
||||
android:layout_marginRight="@dimen/dashFavIconMargin"
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
android:id="@+id/check_item"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="2dip"
|
||||
android:layout_marginRight="6dip"
|
||||
android:button="@drawable/ic_btn_wocheckbox"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
android:id="@+id/check_item"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="2dip"
|
||||
android:layout_marginRight="6dip"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<string name="osb_author_or_password_not_specified">Калі ласка, пазначце карыстальніка OSM і ягоны пароль у наладах</string>
|
||||
<string name="clear_intermediate_points">Ачысьціць прамежкавыя кропкі</string>
|
||||
<string name="keep_intermediate_points">Захаваць прамежкавыя кропкі</string>
|
||||
<string name="new_directions_point_dialog">У вас ужо ёсць набор прамежкавых кропак.</string>
|
||||
<string name="new_directions_point_dialog">У вас ужо ёсьць набор прамежкавых кропак.</string>
|
||||
<string name="context_menu_item_directions_to">Маршрут да</string>
|
||||
<string name="context_menu_item_directions_from">Маршрут ад</string>
|
||||
<string name="route_descr_map_location">Мапа: </string>
|
||||
|
@ -226,7 +226,7 @@
|
|||
<string name="recording_context_menu_delete">Выдаліць запіс</string>
|
||||
<string name="recording_context_menu_play">Граць</string>
|
||||
<string name="recording_description">Запіс %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">запіс</string>
|
||||
<string name="recording_default_name">Запіс</string>
|
||||
<string name="av_control_stop">Cтоп</string>
|
||||
<string name="av_control_start">Запіс</string>
|
||||
<string name="map_widget_av_notes">Аўдыё/відэа нататкі</string>
|
||||
|
@ -601,7 +601,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="download_link_and_local_description">Націсьніце тут каб зладаваць ці абнавіць лакальныя файлы мапаў. \nПстрыкніце на любы існуючы складнік каб бачыць падрабязнасьці, альбо націсьніце і трымайце каб дэактываваць ці выдаліць. Дзейныя зьвесткі на прыладзе (вольна %1$s):</string>
|
||||
<string name="unknown_from_location">Першапачатковае месцазнаходжаньне не вызначана</string>
|
||||
<string name="unknown_location">Месца пакуль ня вызначанае</string>
|
||||
<string name="modify_transparency">Змяніць празрыстасць (0 - празрысты, 255 - непразрысты)</string>
|
||||
<string name="modify_transparency">Зьмяніць празрыстасьць (0 - празрысты, 255 - непразрысты)</string>
|
||||
<string name="confirm_interrupt_download">Перапыніць cьцягваньне файла?</string>
|
||||
<string name="first_time_msg">Дзякуй за карыстаньне OsmAnd. Каб карыстацца ўсімі магчымасьцямі праграмы, вам патрэбныя некаторыя пазасеціўныя зьвесткі для вашага рэгіёну. Іх можна cьцягнуць праз \'Налады\' → \'Кіраваць файламі мапаў\'. Пасьля гэтага вы зможаце глядзець мапу, шукаць адрасы, бачыць POI і грамадзкі транспарт.</string>
|
||||
<string name="basemap_was_selected_to_download">Базавая мапа неабходная для карэктнай працы праграмы і аўтаматычна была абраная для cьцягваньня.</string>
|
||||
|
@ -659,7 +659,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="validate_gpx_upload_name_pwd">Калі ласка, пазначце імя й пароль карыстальніка OSM каб заладоўваць файлы GPX.</string>
|
||||
<string name="default_buttons_support">Падтрымка</string>
|
||||
<string name="support_new_features">Падтрымка новых уласьцівасьцяў</string>
|
||||
<string name="support_new_features_descr">Ахвяраваць, каб убачыць новыя магчымасці, рэалізаванымі ў праграме</string>
|
||||
<string name="support_new_features_descr">Ахвяраваць, каб убачыць новыя магчымасьці, рэалізаванымі ў праграме</string>
|
||||
<string name="show_ruler_level">Паказваць маштаб</string>
|
||||
<string name="info_button">Інфармацыя</string>
|
||||
<string name="back_to_location">Вярнуцца да пазіцыі</string>
|
||||
|
@ -792,22 +792,21 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="osmand_service">Фонавы рэжым</string>
|
||||
<string name="osmand_service_descr">Ужываць каб OsmAnd працавала падчас выключанага экрану</string>
|
||||
<string name="tip_rotation_switching">Арыентацыя мапы</string>
|
||||
<string name="tip_rotation_switching_t_v2">Націснуўшы на значок компаса на экране з картай Вы можаце змяніць рэжым павароту карты. ↵
|
||||
\n\nДаступныя варыянты: ↵
|
||||
\n\t* \'Не паварочваць\' - Карта не будзе паварочвацца. Поўнач заўсёды зверху.
|
||||
\n\t* \'Па кірунку руху\' - Карта будзе паварочвацца ў адпаведнасці з напрамкам Вашага руху. Зверху - кірунак руху. ↵
|
||||
\n\t* \'Па кірунку компаса\' - Карта будзе паварочвацца так, каб сумясціць поўнач карты і паўночны напрамак (выкарыстоўваюцца паказанні компаса ў прыладзе). ↵
|
||||
</string>
|
||||
<string name="tip_rotation_switching_t_v2">"Націснуўшы на значок компаса на экране з мапай Вы можаце зьмяніць рэжым павароту мапы. ↵
|
||||
\n\nДаступныя варыянты: ↵
|
||||
\n\t* \'Не паварочваць\' - Мапа не будзе паварочвацца. Поўнач заўсёды зьверху.
|
||||
\n\t* \'Па кірунку руху\' - Мапа будзе паварочвацца ў адпаведнасьці з напрамкам Вашага руху. Зьверху - кірунак руху. ↵
|
||||
\n\t* \'Па кірунку компаса\' - Мапа будзе паварочвацца так, каб сумясціць поўнач карты і паўночны напрамак (выкарыстоўваюцца паказаньні компасу ў прыладзе). ↵ "</string>
|
||||
<string name="binary_map_download_success">"Сьцягваньне скончана. ↵
|
||||
\n\t\n\tАктывацыя мапаў праз \'Меню\' → \'Мапа\' → \'Крыніца мапы ...\' → \'Оффлайн вектарныя мапы\". ↵ → "</string>
|
||||
<string name="tip_day_night_mode">Рэжым дзень/ноч</string>
|
||||
<string name="tip_day_night_mode_t_v2">"Для лакальных вектарных карт можна змяняць выгляд у залежнасці ад часу сутак: днём (светлы), ноччу (цёмны). Начны рэжым бяспечны для выкарыстання кіроўцамі ў цемры ↵
|
||||
\n\nКаб памяняць рэжым націсніце \'Меню\' → \'Налады мапы\' → \'Дзённы/начны рэжым\'
|
||||
<string name="tip_day_night_mode_t_v2">"Для лакальных вектарных мапаў можна зьмяняць выгляд у залежнасьці ад часу сутак: днём (сьветлы), ноччу (цёмны). Начны рэжым бясьпечны для выкарыстаньня кіроўцамі ў цемры ↵
|
||||
\n\nКаб памяняць рэжым націсьніце \'Мэню\' → \'Налады мапы\' → \'Дзённы/начны рэжым\'
|
||||
\n\nМагчымыя варыянты: ↵
|
||||
\n\t\'Усход/Заход\' - аўтаматычны рэжым, на аснове дадзеных аб становішчы сонца (тыповы) ↵
|
||||
\n\t\'Дзённы\' - заўсёды выкарыстоўваецца дзённы рэжым ↵
|
||||
\n\t\'Начны\' - заўсёды выкарыстоўваецца начны рэжым ↵
|
||||
\n\t\'Датчык асветленасці\' - від карты змяняецца аўтаматычна ў залежнасці ад датчыка асветленасці (пры яго наяўнасці) у прыладзе ↵ "</string>
|
||||
\n\t\'Датчык асьветленасьці\' - від мапы зьмяняецца аўтаматычна ў залежнасьці ад датчыка асьветленасьці (пры яго наяўнасьці) у прыладзе ↵ "</string>
|
||||
<string name="tip_osm_improve">Паляпшэньне зьвестак OSM</string>
|
||||
<string name="tip_osm_improve_t">OsmAnd выкарыстоўвае картаграфічныя дадзеныя з Openstreetmap.org (OSM), да таго ж, ён можа быць выкарыстаны для іх паляпшэння. Вы можаце лёгка ствараць і загружаць новыя POI або справаздачы пра памылкі ў OSM ў некалькі дотыкаў! ↵
|
||||
\n\nДля гэтага вам трэба актываваць модуль \'Рэдагаванне OSM\' у \'Налады\' → \'Модулі\', увусці свой лагін і пароль для OSM ў \'Налады\' → \'Рэдагаванне OSM\'. ↵
|
||||
|
@ -819,7 +818,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="download_files_question_space">Вольнага месца зараз {2} МБ! Сьцягнуць {0} файл(аў) ({1} МБ)?</string>
|
||||
<string name="tip_navigation">Навігацыя</string>
|
||||
<string name="tip_navigation_t">"Каб атрымаць маршрут да патрэбнага месца, вы можаце націснуць і трымаць пальцам карту ў патрэбным месцы (потым выбраць «Маршрут у» ў вакенцы маркера) або «Маршруты» пасля выбару любога пункта ў выніках пошуку або закладках. ↵
|
||||
\n\nМесца прызначэньня будзе пазначана сьцяжком, таксама OsmAnd пакажа адлегласць да яго і напрамак (аранжавым трохвугольнікам). ↵
|
||||
\n\nМесца прызначэньня будзе пазначана сьцяжком, таксама OsmAnd пакажа адлегласьць да яго і напрамак (аранжавым трохвугольнікам). ↵
|
||||
\n\nВы можаце выбраць «Пачаць навігацыю» па маршруце і OsmAnd будзе весці вас, прадастаўляючы галасавыя падказкі (калі магчыма) і г.д. Ці толькі «Паказаць маршрут» на карце; будзе паказаны ўвесь маршрут, але не будзе адбывацца пазіцыянаванне карты згодна з бягучым становішчам, і не будзе агалошвання галасавых падказкак падчас руху. ↵
|
||||
\n\nКаб паказаць маршрут да месца прызначэння з іншага месца, а не з таго, дзе вы знаходзіцеся, пакажыце яго на карце і абярыце «Маршрут з». ↵
|
||||
\n\nКалі вы націснеце «Маршрут з» разам з «Пачаць навігацыю», OsmAnd пакажа актуальную пазіцыю, як толькі знойдзе яе (так гэта можна выкарыстоўваць для пачатку навігацыі да таго, як месца будзе знойдзена); камбінацыя «Маршрут з» і «Паказаць маршрут» проста пакажа маршрут з любога пункту, які вы вылучыце, без наступнага абнаўлення. "</string>
|
||||
|
@ -836,7 +835,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="init_native_library">Ініцыалізацыя свойскіх бібліятэк…</string>
|
||||
<string name="choose_auto_follow_route">Аўтаматычнае цэнтраваньне мапы</string>
|
||||
<string name="choose_auto_follow_route_descr">Час, праз які мапа вернецца да бягучага месцазнаходжаньня</string>
|
||||
<string name="auto_follow_route_never">Ніколі</string>
|
||||
<string name="auto_follow_route_never">Ніколі (націскаць на сінюю стрэлку для навігацыі)</string>
|
||||
<string name="auto_follow_route_navigation">Аўтаматычнае цэнтраваньне толькі падчас навігацыі</string>
|
||||
<string name="auto_follow_route_navigation_descr">Аўтаматычнае цэнтраваньне толькі падчас навігацыі.</string>
|
||||
<string name="auto_follow_location_enabled">Аўтаматычнае цэнтраваньне падчас карыстаньня.</string>
|
||||
|
@ -955,7 +954,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="tts_language_not_supported_title">Мова не падтрымліваецца</string>
|
||||
<string name="tts_language_not_supported">Абраная мова не падтрымліваецца устаноўленым Android TTS (пераўтварэньне тэксту ў гук). Вы хочаце пашукаць іншы TTS? Калі не, то будзе выкарыстоўвацца другая ўстаноўленая мова TTS.</string>
|
||||
<string name="tts_missing_language_data_title">Адсутнічаюць дадзеныя</string>
|
||||
<string name="tts_missing_language_data">Няма ўсталяваных дадзеных для абранай мовы. Вы хочаце пайсці на Market, каб усталяваць?</string>
|
||||
<string name="tts_missing_language_data">Няма ўсталяваных дадзеных для абранай мовы. Вы хочаце пайсьці на Google Play, каб усталяваць?</string>
|
||||
<string name="gpx_option_reverse_route">Развярнуць кірунак GPX</string>
|
||||
<string name="gpx_option_destination_point">Выкарыстоўваць бягучы пункт прызначэньня</string>
|
||||
<string name="gpx_option_from_start_point">Прайсьці ўвесь шлях спачатку</string>
|
||||
|
@ -966,9 +965,9 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="voice_stream_notification">Канал апавяшчэньня</string>
|
||||
<string name="voice_stream_music">Мэдыя/музычны канал</string>
|
||||
<string name="warning_tile_layer_not_downloadable">Праграма не можа сьцягнуць слой мапы %1$s, паспрабуйце пераўсталяваць яе.</string>
|
||||
<string name="overlay_transparency_descr">Зьмяніць празрыстасць накладзенага слою</string>
|
||||
<string name="overlay_transparency">Празрыстасць накладаньня</string>
|
||||
<string name="map_transparency_descr">Зьмяніць празрыстасць асноўнай мапы</string>
|
||||
<string name="overlay_transparency_descr">Зьмяніць празрыстасьць накладзенага слою</string>
|
||||
<string name="overlay_transparency">Празрыстасьць накладаньня</string>
|
||||
<string name="map_transparency_descr">Зьмяніць празрыстасьць асноўнай мапы</string>
|
||||
<string name="map_transparency">Празрыстасьць асноўнай мапы</string>
|
||||
<string name="layer_underlay">Мапа падкладкі…</string>
|
||||
<string name="map_underlay">Мапа падкладкі</string>
|
||||
|
@ -1064,7 +1063,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="version_index_is_big_for_memory">Недастаткова памяці для лакальнай мапы \'\'{0}\'\'</string>
|
||||
<string name="version_index_is_not_supported">Версія індэкса \'\'{0}\'\' не падтрымліваецца</string>
|
||||
<string name="use_osmand_routing_service">Навігацыя OsmAnd > 20 км</string>
|
||||
<string name="use_osmand_routing_service_descr">Выкарыстоўваць аўтаномную OsmAnd навігацыю на адлегласці > 20 км (эксперыментальна)</string>
|
||||
<string name="use_osmand_routing_service_descr">Выкарыстоўваць аўтаномную OsmAnd навігацыю на адлегласьці > 20 км (эксперыментальная)</string>
|
||||
<string name="osmand_routing_experimental">Аўтаномная навігацыя OsmAnd зьяўляецца эксперыментальнай і не працуе на адлегласцях больш 20 км.\n\nУ гэтым выпадку для пракладкі маршруту выкарыстоўваецца онлайн сэрвіс CloudMade.</string>
|
||||
<string name="specified_dir_doesnt_exist">Указаны каталог не знойдзены.</string>
|
||||
<string name="application_dir">Каталёг захоўваньня зьвестак</string>
|
||||
|
@ -1228,7 +1227,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="update_poi_success">Дадзеныя POI былі пасьпяхова абноўленыя ({0} аб\'ектаў загружана)</string>
|
||||
<string name="update_poi_error_local">Памылка падчас абнаўленьня лакальнага сьпісу POI</string>
|
||||
<string name="update_poi_error_loading">Памылка пры загрузцы дадзеных з сервера</string>
|
||||
<string name="update_poi_no_offline_poi_index">Для гэтай мясцовасці адсутнічаюць лакальныя дадзеныя аб POI</string>
|
||||
<string name="update_poi_no_offline_poi_index">Для гэтай мясцовасьці адсутнічаюць лякальныя дадзеныя пра POI</string>
|
||||
<string name="update_poi_is_not_available_for_zoom">Абнаўленьне POI не даступна для малых узроўняў маштабаваньня</string>
|
||||
<string name="context_menu_item_update_poi">Абнавіць POI</string>
|
||||
<string name="context_menu_item_update_map_confirm">Абнавіць лакальныя дадзеныя праз Інтэрнэт?</string>
|
||||
|
@ -1434,7 +1433,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="poi_dialog_comment_default">Зьмена POI</string>
|
||||
<string name="poi_dialog_other_tags_message">Усе астатнія тэгі захоўваюцца</string>
|
||||
<string name="default_buttons_commit">Зьберагчы</string>
|
||||
<string name="default_buttons_reset">Скінуць</string>
|
||||
<string name="default_buttons_reset">Ачысьціць</string>
|
||||
<string name="filter_current_poiButton">Фільтраваць</string>
|
||||
<string name="edit_filter_delete_menu_item">Выдаліць</string>
|
||||
<string name="edit_filter_save_as_menu_item">Захаваць як</string>
|
||||
|
@ -1526,7 +1525,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="copying_osmand_files_descr">Капіяваньне дадзеных OsmAnd у новае месца (%s)…</string>
|
||||
<string name="copying_osmand_files">Капіяваньне дадзеных OsmAnd…</string>
|
||||
<string name="app_mode_truck">Грузавік</string>
|
||||
<string name="speech_rate_descr">Задайце хуткасць вымаўленьня для TTS</string>
|
||||
<string name="speech_rate_descr">Задайце хуткасьць вымаўленьня для TTS</string>
|
||||
<string name="speech_rate">Хуткасьць вымаўленьня</string>
|
||||
<string name="disable_complex_routing">Адключыць складаную маршрутызацыю</string>
|
||||
<string name="map_widget_map_rendering">Адмалёўка мапы</string>
|
||||
|
@ -1569,7 +1568,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="osmodroid_unseek">Не адсочваць аб\'ект</string>
|
||||
<string name="android_19_location_disabled">З версіі 4.4 Android (KitKat) вы ня можаце загружаць і абнаўляць мапу ў папярэднім каталогу захоўваньня (%s). Вы хочаце зьмяніць каталог на дазволены і скапіяваць усе файлы OsmAnd туды?\n Заўвага 1: Вашы старыя файлы застануцца некранутымі (вы можаце выдаліць іх самастойна).
|
||||
\n Заўвага 2: У новым месцы захоўваньня будзе немагчыма адначасова выкарыстоўваць файлы ў OsmAnd і OsmAnd+.</string>
|
||||
<string name="route_is_too_long">Пазасеціўная маршрутызацыя OsmAnd можа заняць вельмі шмат часу (а часам і не спрацаваць) для кропак на адлегласьці больш чым у 200 км адзін ад аднаго. Вы можаце дадаць прамежкавыя шляхавыя кропкі для павышэньня прадукцыйнасці.</string>
|
||||
<string name="route_is_too_long">Пазасеціўная маршрутызацыя OsmAnd можа заняць вельмі шмат часу (а часам і не спрацаваць) для кропак на адлегласьці больш чым у 200 км адзін ад адной. Вы можаце дадаць прамежкавыя шляхавыя кропкі для падвышэньня прадукцыйнасьці.</string>
|
||||
<string name="tip_recent_changes_1_7_1_t">Зьмены ў 1.7:
|
||||
\n\t* ВАЖНА карты павінны быць навей лютага 2014 г.
|
||||
\n\t* Цалкам абноўленая маршрутызацыя (хуткая і дакладная)
|
||||
|
@ -1598,7 +1597,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="share_route_subject">Маршрут апублікаваны з дапамогай OsmAnd</string>
|
||||
<string name="navigation_intent_invalid">Няправільны фармат: %s</string>
|
||||
<string name="create_poi_link_to_osm_doc"><u>Online OSM</u> мапа з выявамі</string>
|
||||
<string name="keep_informing_never">Ніколі</string>
|
||||
<string name="keep_informing_never">Толькі ўручную (націскаць на стрэлку)</string>
|
||||
<string name="keep_informing_descr">Паўтараць навігацыйныя інструкцыі праз рэгулярныя прамежкі часу</string>
|
||||
<string name="keep_informing">Паўтараць навігацыйныя інструкцыі</string>
|
||||
<string name="arrival_distance">Абвяшчэньне прыбыцьця</string>
|
||||
|
@ -1617,10 +1616,9 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="osmand_srtm_long_description_1000_chars">Гэты модуль паказвае ізалініі вышынь на картах OsmAnd. Глабальныя дадзеныя (паміж 70 градусамі на поўначы і 70 градусамі на поўдні) грунтуюцца на вымярэннях SRTM (Shuttle Radar Topography Mission) і ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), дадзеных інструмента візуалізацыі Terra, флагманскага спадарожніка сістэмы назірання Зямлі ад NASA. ASTER - гэта вынік сумеснай працы NASA, міністэрства эканомікі Японіі, міністэрства гандлю і прамысловасці Японіі (METI), агенцтва касмічных сістэм Японіі (J-spacesystems).</string>
|
||||
<string name="srtm_plugin_description">Модуль дазваляе cьцягваць дадзеныя ізаліній вышынь (\'Налады\' → \'Кіраваньне файламі мапаў\' → \'Сьцягнуць\' → Выберыце пажаданы тып мапы).</string>
|
||||
<string name="osmodroid_plugin_description">Модуль OsMoDroid - пашырэньне для OsmAnd, што выкарыстоўвае праграму OsModroid для сеткавага адсочваньня. Інфармацыю аб сэрвісе можна знайсьці на сайце http://esya.ru.</string>
|
||||
<string name="tip_altitude_offset_t">Большасць GPS прылад паказваюць вышыню односна элліпсоіда WGS84, для вызначэння вышыні над узроўнем мора неабходна правесці карэкцыю, якая залежыць ад вашага месцазнаходжання. ↵
|
||||
→ → \n\nКаб выправіць значеньне вышыні выкарыстоўваецца праекцыя EGM96. ↵
|
||||
→ → \n\nOsmAnd пакажа вышыню над узроўнем мора ў EGM96 пасля загрузкі файла \'World Altitide Correction\'(WW15MGH.DAC), праз \'Налады\' -> \'Кіраваньне файламі мапаў\' (http://earth- info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC). ↵
|
||||
</string>
|
||||
<string name="tip_altitude_offset_t">"Большасьць GPS прылад паказваюць вышыню односна элліпсоіда WGS84, для вызначэньня вышыні над узроўнем мора неабходна правесьці карэкцыю, якая залежыць ад вашага месцазнаходжаньня. ↵ → →
|
||||
\n\nКаб выправіць значэньне вышыні выкарыстоўваецца праекцыя EGM96. ↵ → →
|
||||
\n\nOsmAnd пакажа вышыню над узроўнем мора ў EGM96 пасьля загрузкі файла \'World Altitide Correction\'(WW15MGH.DAC), праз \'Налады\' -> \'Кіраваньне файламі мапаў\' (http://earth- info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC). ↵ "</string>
|
||||
<string name="tip_recent_changes_0_8_2_t">Змены ў 0.8.2: ↵
|
||||
\n\t* Палепшаная маршрутызацыя ↵
|
||||
\n\t* Дынамічныя віджэты карты ↵
|
||||
|
@ -1680,7 +1678,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="osmo_auto_send_locations_descr">Аўтаматычна пачынаць запіс сьледу і перадачу месцазнаходжаньня пасьля старту праграмы</string>
|
||||
<string name="osmo_auto_send_locations">Аўтаматычна пачынаць адсылку месцазнаходжаньня</string>
|
||||
<string name="osmo_tracker_id">Пэрсанальны ID трэкера</string>
|
||||
<string name="osmo_tracker_id_descr">Націсніце, каб паглядзець ці падзяліцца ідэнтыфікатарам трэкера. Выкарыстаньне ідэнтыфікатара трэкера звязанага з прыстасаваньнем дасць магчымасць кантраляваць усе перамяшчэньні гэтага прыстасаваньня! Для адключэньня выберыце опцыю перастварэньня.</string>
|
||||
<string name="osmo_tracker_id_descr">Націсніце, каб паглядзець ці падзяліцца ідэнтыфікатарам трэкера. Выкарыстаньне ідэнтыфікатара трэкера звязанага з прыстасаваньнем дасьць магчымасьць кантраляваць усе перамяшчэньні гэтага прыстасаваньня! Для адключэньня выберыце опцыю перастварэньня.</string>
|
||||
<string name="osmo_session_token">Токен сэсыі: %1$s</string>
|
||||
<string name="osmo_auth_pending">У чаканьні дазволу…</string>
|
||||
<string name="osmo_locations_sent">"Месцазнаходжаньне адаслана %1$d (у буферы %2$d) "</string>
|
||||
|
@ -1808,11 +1806,11 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="osmo_gpx_track_downloaded">Сьцягнуты %1$s сьлед OsMo.</string>
|
||||
<string name="osmo_group_by_invite">Уваход па запрашэньнi</string>
|
||||
<string name="osmo_group_information">Калі ласка, прачытайце перад стварэньнем групы!</string>
|
||||
<string name="osmo_group_information_desc">" - Усе створаныя групы з\'яўляюцца агульнымі! Калі вы хочаце заставацца ананімным, падключайце прыладу наўпрост праз Tracker-ідэнтыфікатар.
|
||||
<string name="osmo_group_information_desc">" - Усе створаныя групы зьяўляюцца агульнымі! Калі вы хочаце заставацца ананімным, падключайце прыладу наўпрост праз Tracker-ідэнтыфікатар.
|
||||
\n - Група мажа быць зарэгістраваная на 16 чалавек.
|
||||
\n - У выпадку бяздзейнасці або актыўнасці толькі 1 чалавека на працягу 2 тыдняў, група будзе выдаленая.
|
||||
\n - Вы можаце абмежаваць ўваход у групу, напрыклад па запрашэнні, але для кантрольню групай, вам неабходна скарыстацца кансольлю адміністратара.
|
||||
\n - Калі вам трэба стварыць групу з іншымі ўмовамі, калі ласка, звяртайцеся на http://osmo.mobi"</string>
|
||||
\n - У выпадку бязьдзейнасці або актыўнасьці толькі 1 чалавека на працягу 2 тыдняў, група будзе выдаленая.
|
||||
\n - Вы можаце абмежаваць ўваход у групу, напрыклад па запрашэньні, але для кантрольню групаю, вам неабходна скарыстацца кансольлю адміністратара.
|
||||
\n - Калі вам трэба стварыць групу з іншымі ўмовамі, калі ласка, зьвяртайцеся на http://osmo.mobi"</string>
|
||||
<string name="osmo_auth_error_short">Не атрымалася выканаць аўтарызацыю</string>
|
||||
<string name="osmo_auth_error">Адбылася памылка аўтарызацыі OsMo: %1$s.\nГэта можа быць выклікана часовай непрацаздольнасьцю службы ці сканьчэньнем вашай рэгістрацыі.\nХочаце зарэгістравацца ізноў?</string>
|
||||
<string name="rendering_attr_hideBuildings_name">Схаваць будынкі</string>
|
||||
|
@ -1824,7 +1822,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="rendering_attr_lessDetailed_name">Менш падрабязна</string>
|
||||
<string name="rendering_attr_hideAccess_name">Схаваць абмежаваньні доступу</string>
|
||||
<string name="rendering_attr_showAccess_name">Паказаць абмежаваньні доступу</string>
|
||||
<string name="rendering_attr_showSurfaceGrade_name">Адлюстроўваць якасць дарог</string>
|
||||
<string name="rendering_attr_showSurfaceGrade_name">Адлюстроўваць якасьць дарог</string>
|
||||
<string name="rendering_attr_showSurfaces_name">Адлюстроўваць тып пакрыцьця</string>
|
||||
<string name="rendering_attr_showCycleRoutes_name">Паказаць веламаршруты</string>
|
||||
<string name="stop_navigation_service">Прыпыніць</string>
|
||||
|
@ -1916,7 +1914,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="fav_point_dublicate_message">Назва ўлюбёнага пункту %1$s была зьменена для прадухіленьня дубляваньня імёнаў.</string>
|
||||
<string name="use_native_render">Выкарыстоўваць натыўную візуалізацыю</string>
|
||||
<string name="use_native_render_descr">Выкарыстоўваць С++ візуалізацыю замест Java</string>
|
||||
<string name="local_index_description">Націсьніце на любы элемент сьпісу для прагляду больш падрабязнай інфармацыі, націсьніце і ўтрымлівайце, каб зьмясціць у архіў ці выдаліць. Бягучыя дадзеныя на прыстасаваньні (%1$s вольна):</string>
|
||||
<string name="local_index_description">Націсьніце на любы элемэнт сьпісу для прагляду больш падрабязнай інфармацыі, націсьніце і ўтрымлівайце, каб зьмясьціць у архіў ці выдаліць. Бягучыя дадзеныя на прыстасаваньні (%1$s вольна):</string>
|
||||
<string name="osmo_device_not_found">Прыстасаваньне ня знойдзена</string>
|
||||
<string name="anonymous_user">Ананімны карыстальнік</string>
|
||||
<string name="logged_as">Вы ўвайшлі як %1$s</string>
|
||||
|
@ -1988,4 +1986,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
|
|||
<string name="show_railway_warnings">Паказваць чыгуначныя пераезды</string>
|
||||
<string name="speak_pedestrian">Папярэджваць пра пешаходныя пераходы</string>
|
||||
<string name="rendering_value__name">Па змоўчаньні</string>
|
||||
<string name="save_track_to_gpx_globally_headline">Запіс сьледу па запатрабаваньні</string>
|
||||
<string name="avoid_roads_msg">Вы можаце зьмяніць маршрут пазначыўшы якія дарогі варта пазьбягаць</string>
|
||||
<string name="navigation_over_track">Пачаць навігацыю ўздоўж сьледу?</string>
|
||||
</resources>
|
||||
|
|
|
@ -234,7 +234,7 @@
|
|||
<string name="index_name_tts_voice">Indicadors de veu (sintetitzats amb TTS, recomanat)</string>
|
||||
<string name="native_library_not_supported">La llibreria nativa no està suportada en aquest dispositiu.</string>
|
||||
<string name="init_native_library">S\'està inicialitzant la llibreria nativa…</string>
|
||||
<string name="auto_follow_route_never">Mai</string>
|
||||
<string name="auto_follow_route_never">Mai (premeu la fletxa blava per iniciar manualment la navegació)</string>
|
||||
<string name="pref_vector_rendering">Opcions específiques de renderització dels vectors</string>
|
||||
<string name="delete_confirmation_msg">Voleu suprimir %1$s?</string>
|
||||
<string name="city_type_town">Poble</string>
|
||||
|
@ -942,7 +942,7 @@
|
|||
<string name="osb_comment_menu_item">Afegeix un comentari</string>
|
||||
<string name="osb_comment_dialog_success">El comentari s\'ha afegit correctament</string>
|
||||
<string name="poi_remove_success">El PDI s\'ha eliminat correctament</string>
|
||||
<string name="default_buttons_reset">Reinicia</string>
|
||||
<string name="default_buttons_reset">Neteja</string>
|
||||
<string name="edit_filter_delete_dialog_title">Voleu eliminar el filtre seleccionat?</string>
|
||||
<string name="tip_day_night_mode_t_v2">"L\'aspecte dels mapes vectorials pot canviar entre dia (clar) i nit (fosc). Els colors de nit són més segurs per la conducció nocturna.
|
||||
\n\nPodeu assignar un criteri pel canvi de dia/nit a «Menú» -> «Configuració del mapa» ->«Mapa dia/nit».
|
||||
|
@ -1012,7 +1012,7 @@
|
|||
<string name="route_descr_lat_lon">Lat %1$.3f long %2$.3f</string>
|
||||
<string name="intermediate_points_change_order">Canvia l\'ordre</string>
|
||||
<string name="recording_delete_confirm">Voleu eliminar aquest enregistrament?</string>
|
||||
<string name="recording_default_name">enregistrament</string>
|
||||
<string name="recording_default_name">Enregistrament</string>
|
||||
<string name="recording_description">Enregistrament %1$s %3$s %2$s</string>
|
||||
<string name="layer_recordings">Capa d\'enregistraments</string>
|
||||
<string name="recording_can_not_be_played">No es pot reproduir l\'enregistrament</string>
|
||||
|
@ -1526,7 +1526,7 @@
|
|||
<string name="share_route_subject">Ruta compartida via OsmAnd</string>
|
||||
<string name="arrival_distance">Anunci d\'arribada</string>
|
||||
<string name="arrival_distance_descr">Quan aviat vol l\'anunci d\'arribada?</string>
|
||||
<string name="keep_informing_never">Mai</string>
|
||||
<string name="keep_informing_never">Només manualment (premeu fletxa)</string>
|
||||
<string name="keep_informing_descr">Anunci d\'instruccions de navegació a intervals regulars</string>
|
||||
<string name="keep_informing">Repetir instruccions de navegació</string>
|
||||
<string name="navigation_intent_invalid">Format no vàlid: %s</string>
|
||||
|
@ -1817,7 +1817,7 @@
|
|||
<string name="impassable_road">Evita carreteres…</string>
|
||||
<string name="rendering_category_hide">Amaga</string>
|
||||
<string name="wake_on_voice">Activa la pantalla</string>
|
||||
<string name="wake_on_voice_descr">Activa la pantalla del dispositiu en aproximar-se a un gir</string>
|
||||
<string name="wake_on_voice_descr">Activa la pantalla del dispositiu (si no ho està ) en aproximar-se a un gir</string>
|
||||
<string name="lock_screen_request_explanation">"%1$s necessita aquest permís per la funcionalitat de posar la pantalla en mode d\'estalvi d\'energia."</string>
|
||||
<string name="wake_on_voice_never">Mai</string>
|
||||
<string name="advanced_settings">Avançat</string>
|
||||
|
@ -1861,4 +1861,7 @@
|
|||
<string name="routing_attr_no_new_routing_description">No feu ús de les preferències de navegació introduïdes a la v1.9</string>
|
||||
<string name="speak_pedestrian">Anuncia els passos de zebra</string>
|
||||
<string name="rendering_value__name">Renderització per defecte</string>
|
||||
<string name="navigation_over_track">Iniciar la navegació sobre la traça?</string>
|
||||
<string name="avoid_roads_msg">Podeu condicionar la ruta seleccionant vies a evitar</string>
|
||||
<string name="save_track_to_gpx_globally_headline">Registre de traces a petició</string>
|
||||
</resources>
|
||||
|
|
|
@ -1131,7 +1131,7 @@
|
|||
\n\t* Modul měření vzdálenosti\n\t* Modul zvykové poznámky\n\t* Modul vrstevnice\n\t* Opravení chyb\n\t* Nový styl mapy \'Touring view\' s více mapovými detaily, novými styly vykreslování silnic, větším kontrastem a možností horské turistiky (značení SAC)\n\t* Korekce výpočtu výšky EGM96 "</string>
|
||||
<string name="recording_unavailable">nedostupné</string>
|
||||
<string name="layer_recordings">Audio/video nahrávky</string>
|
||||
<string name="recording_description">Nahrávka %1$s %2$s na %3$s</string>
|
||||
<string name="recording_description">Nahrávka %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">nahrávám</string>
|
||||
<string name="osmand_srtm_short_description_80_chars">OsmAnd modul pro offline zobrazování vrstevnic</string>
|
||||
|
||||
|
@ -1148,7 +1148,7 @@
|
|||
<string name="stop_routing_confirm">Opravdu chcete zastavit navigaci?</string>
|
||||
<string name="clear_dest_confirm">Opravdu chcete smazat cíl?</string>
|
||||
<string name="recording_context_menu_show">Zobrazit</string>
|
||||
<string name="recording_photo_description">Foto %1$s v %2$s</string>
|
||||
<string name="recording_photo_description">Foto %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Vyfotit</string>
|
||||
<string name="recording_context_menu_precord">Vyfotit</string>
|
||||
<string name="local_indexes_cat_av">Zvuková a video data</string>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<string name="recording_context_menu_delete">Slet optagelse</string>
|
||||
<string name="recording_context_menu_play">Afspil</string>
|
||||
<string name="recording_description">Optagelse %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">optager</string>
|
||||
<string name="recording_default_name">Optager</string>
|
||||
<string name="av_control_start">Start</string>
|
||||
<string name="map_widget_av_notes">Audio-/videonoter</string>
|
||||
<string name="osmand_srtm_short_description_80_chars">OsmAnd udvidelse for offline højdekurver</string>
|
||||
|
@ -521,7 +521,7 @@
|
|||
<string name="init_native_library">Initialisere indbygget bibliotek…</string>
|
||||
<string name="choose_auto_follow_route">Autocentrer kortvisning</string>
|
||||
<string name="choose_auto_follow_route_descr">Tid indtil kortvisning synkroniseres med aktuel position</string>
|
||||
<string name="auto_follow_route_never">Aldrig</string>
|
||||
<string name="auto_follow_route_never">Aldrig (tryk på blå pil for at starte vejledning manuelt)</string>
|
||||
<string name="auto_follow_route_navigation">Autocentrer kun navigation</string>
|
||||
<string name="auto_follow_route_navigation_descr">Autocentrer kun kortvisning under navigation.</string>
|
||||
<string name="auto_follow_location_enabled">Autocentrer kort.</string>
|
||||
|
@ -960,7 +960,7 @@
|
|||
<string name="edit_filter_save_as_menu_item">Gem som</string>
|
||||
<string name="edit_filter_delete_menu_item">Slet</string>
|
||||
<string name="filter_current_poiButton">Filter</string>
|
||||
<string name="default_buttons_reset">Nulstil</string>
|
||||
<string name="default_buttons_reset">Ryd</string>
|
||||
<string name="poi_dialog_other_tags_message">Alle de øvrige mærker bevares</string>
|
||||
<string name="poi_dialog_comment">Kommentar</string>
|
||||
<string name="poi_dialog_opening_hours">Åben</string>
|
||||
|
@ -1557,7 +1557,7 @@
|
|||
<string name="osmo_plugin_description">"OpenStreetMap - avanceret live overvågning, se http://osmo.mobi. Spor andre enheder og bliv selv sporet. Opret anonyme grupper, del hinandens placering og kommuniker. Har forskellige indstillinger for session sporing eller permanent sporing. Anonyme grupper er begrænset til et antal dage og nogle funktioner, dvs der er ingen fjernkontrol og gruppeadministrator. Fuldt funktionelle grupper bør oprettes på hjemmesiden og kun registrerede brugere har adgang til dem. "</string>
|
||||
<string name="osmo_plugin_name">OsMo (avanceret live overvågning)</string>
|
||||
<string name="osmo_settings">OpenStreetMap overvågning</string>
|
||||
<string name="keep_informing_never">Aldrig</string>
|
||||
<string name="keep_informing_never">Kun manuelt (tryk på pilen)</string>
|
||||
<string name="keep_informing_descr">Gentag navigationsinstruktioner med jævne mellemrum</string>
|
||||
<string name="keep_informing">Gentag navigationsinstruktioner</string>
|
||||
<string name="arrival_distance">Meddel ankomst</string>
|
||||
|
@ -1833,7 +1833,7 @@
|
|||
<string name="impassable_road">Undgå veje…</string>
|
||||
<string name="rendering_category_hide">Skjul</string>
|
||||
<string name="wake_on_voice">Tænd for skærmen</string>
|
||||
<string name="wake_on_voice_descr">Tænd for skærmen ved navigationsinstruktioner</string>
|
||||
<string name="wake_on_voice_descr">Tænd for skærmen (hvis slukket) ved navigationsinstruktioner</string>
|
||||
<string name="lock_screen_request_explanation">%1$s behøver denne tilladelse til at slukke for skærmen for strømbesparende funktion.</string>
|
||||
<string name="wake_on_voice_never">Aldrig</string>
|
||||
<string name="advanced_settings">Avanceret</string>
|
||||
|
@ -1877,4 +1877,7 @@
|
|||
<string name="show_pedestrian_warnings">Fodgængerovergange</string>
|
||||
<string name="speak_pedestrian">Fodgængerovergange</string>
|
||||
<string name="rendering_value__name">Standard</string>
|
||||
<string name="save_track_to_gpx_globally_headline">On demand sporingslogning</string>
|
||||
<string name="navigation_over_track">Start navigation over spor?</string>
|
||||
<string name="avoid_roads_msg">Du kan ændre ruten ved at vælge veje der skal undgås</string>
|
||||
</resources>
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
<string name="background_service_int_descr">GPS Aufwach-Intervall für Hintergrunddienst</string>
|
||||
<string name="background_service_int">GPS Aufwach-Intervall</string>
|
||||
<string name="save_track_to_gpx_globally">Aufzeichnung in GPX-Datei</string>
|
||||
<string name="save_track_to_gpx_globally_headline">GPX-Aufzeichnung bei Bedarf</string>
|
||||
<string name="save_track_to_gpx_globally_descr">Generelle Positionsaufzeichnung kann man mit der Schaltfläche \'GPX-Aufnahme\' direkt auf dem Kartenbildschirm aktivieren oder deaktivieren</string>
|
||||
<string name="save_current_track">Track jetzt speichern</string>
|
||||
<string name="save_current_track_descr">Aktuellen Track jetzt auf SD-Karte abspeichern</string>
|
||||
|
@ -370,7 +371,7 @@
|
|||
<string name="init_native_library">Native Bibliothek wird initialisiert…</string>
|
||||
<string name="choose_auto_follow_route">Kartenanzeige nachführen</string>
|
||||
<string name="choose_auto_follow_route_descr">Wartezeit für Rückkehr zur Kartennachführung</string>
|
||||
<string name="auto_follow_route_never">Nie</string>
|
||||
<string name="auto_follow_route_never">Nie (Klick auf blauen Pfeil startet Navigation manuell)</string>
|
||||
<string name="auto_follow_route_navigation">Nachführung nur bei aktiver Navigation</string>
|
||||
<string name="auto_follow_route_navigation_descr">Kartennachführung erfolgt nur während Navigation.</string>
|
||||
<string name="auto_follow_location_enabled">Kartennachführung aktiv.</string>
|
||||
|
@ -638,7 +639,7 @@
|
|||
<string name="local_indexes_cat_backup">Deaktiviert</string>
|
||||
<string name="local_indexes_cat_tts">Sprachansagen (TTS)</string>
|
||||
<string name="local_indexes_cat_voice">Sprachansagen (Aufnahmen)</string>
|
||||
<string name="local_indexes_cat_gpx">GPX-Daten</string>
|
||||
<!-- string name="local_indexes_cat_gpx">GPX-Daten</string -->
|
||||
<string name="local_indexes_cat_tile">Online- und Kachel-Karten</string>
|
||||
<string name="local_indexes_cat_map">Offline-Karten</string>
|
||||
<string name="local_indexes_cat_poi">POI-Daten</string>
|
||||
|
@ -1332,7 +1333,7 @@
|
|||
<string name="recording_delete_confirm">Wollen Sie diese Aufnahme löschen?</string>
|
||||
<string name="recording_unavailable">nicht verfügbar</string>
|
||||
<string name="recording_context_menu_play">Wiedergabe</string>
|
||||
<string name="recording_default_name">Aufnehmen</string>
|
||||
<string name="recording_default_name">Aufnahme</string>
|
||||
<string name="recording_error">Fehler bei der Aufnahme</string>
|
||||
<string name="recording_is_recorded">Audio/Video wird aufgenommen. Zum Stoppen drücken Sie das A/V-Widget.</string>
|
||||
<string name="recording_playing">Aus der angegebenen Aufnahme wird abgespielt.\n%1$s</string>
|
||||
|
@ -1548,7 +1549,7 @@
|
|||
<string name="share_fav">Teilen</string>
|
||||
<string name="share_fav_subject">Über OsmAnd geteilte Favoriten</string>
|
||||
<string name="use_points_as_intermediates">Route zwischen Punkten berechnen</string>
|
||||
<string name="keep_informing_never">Niemals</string>
|
||||
<string name="keep_informing_never">Nur manuell (Klick auf Pfeil)</string>
|
||||
<string name="keep_informing_descr">Navigationsanweisungen in regelmäßigen Abständen wiederholen</string>
|
||||
<string name="keep_informing">Navigationsanweisungen wiederholen</string>
|
||||
<string name="arrival_distance">Zielankündigung</string>
|
||||
|
@ -1907,7 +1908,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an
|
|||
<string name="gpx_selection_segment_title">Abschnitt</string>
|
||||
<string name="gpx_selection_number_of_points"> %1$s Punkte</string>
|
||||
<string name="gpx_selection_point">Punkt %1$s</string>
|
||||
<string name="gpx_selection_current_track">Aufnahme</string>
|
||||
<!-- string name="gpx_selection_current_track">Aufnahme</string -->
|
||||
<string name="gpx_selection_route_points">%1$s \nRoutenpunkte %2$s</string>
|
||||
<string name="gpx_selection_points">%1$s \nPunkte</string>
|
||||
<string name="gpx_selection_track">%1$s \nTrack %2$s</string>
|
||||
|
@ -1921,7 +1922,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an
|
|||
<string name="gpx_visibility_txt">Sichtbarkeit</string>
|
||||
<string name="gpx_tags_txt">Tags</string>
|
||||
<string name="gpx_description_txt">Beschreibung</string>
|
||||
<string name="gpx_monitoring_disabled_warn">Bitte Aufzeichnung unter \'Einstellungen\' → \'Navigation\' aktivieren.</string>
|
||||
<string name="gpx_monitoring_disabled_warn">Aufzeichnung mit dem GPX-Knopf oder unter \'Einstellungen\' → \'Strecken-Aufzeichnung\' aktivieren.</string>
|
||||
<string name="gpx_navigation">GPX-Route wählen</string>
|
||||
<string name="gpx_option_reverse_route">GPX-Route umkehren</string>
|
||||
<string name="gpx_option_destination_point">Derzeitiges Ziel verwenden</string>
|
||||
|
@ -1974,7 +1975,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an
|
|||
<string name="rendering_category_others">Sonstiges</string>
|
||||
<string name="rendering_attr_tramRoutes_name">Straßenbahnenlinien</string>
|
||||
<string name="wake_on_voice">Bildschirm aktivieren</string>
|
||||
<string name="wake_on_voice_descr">Bildschirm bei Navigationsanweisung aktivieren</string>
|
||||
<string name="wake_on_voice_descr">Bildschirm bei Navigationsanweisung aktivieren (falls aus)</string>
|
||||
<string name="wake_on_voice_never">Niemals</string>
|
||||
<string name="select_impassable_road">Auf Karte auswählen…</string>
|
||||
<string name="impassable_road">Straße blockieren…</string>
|
||||
|
|
|
@ -408,7 +408,7 @@
|
|||
<string name="init_native_library">Αρχικοποίηση εγγενούς βιβλιοθήκης…</string>
|
||||
<string name="choose_auto_follow_route">Αυτο-κεντράρισμα όψης χάρτη</string>
|
||||
<string name="choose_auto_follow_route_descr">Χρόνος μέχρι η οπτική του χάρτη συγχρονιστεί με την τρέχουσα θέση</string>
|
||||
<string name="auto_follow_route_never">Ποτέ</string>
|
||||
<string name="auto_follow_route_never">Ποτέ (Πατήστε το μπλε βέλος για να αρχίσει η καθοδήγηση χειροκίνητα)</string>
|
||||
<string name="auto_follow_route_navigation">Αυτο-κεντράρισμα μόνο κατά την πλοήγηση</string>
|
||||
<string name="auto_follow_route_navigation_descr">Αυτο-κεντραρισμένη οπτική χάρτη μόνο κατά την πλοήγηση.</string>
|
||||
<string name="auto_follow_location_enabled">Αυτο-κεντράρισμα χάρτη σε χρήση.</string>
|
||||
|
@ -1040,7 +1040,7 @@
|
|||
<string name="poi_dialog_comment_default">Αλλαγή ΣΕ</string>
|
||||
<string name="poi_dialog_other_tags_message">Όλες οι άλλες ετικέτες διατηρούνται</string>
|
||||
<string name="default_buttons_commit">Commit</string>
|
||||
<string name="default_buttons_reset">Επαναφορά</string>
|
||||
<string name="default_buttons_reset">Καθαρισμός</string>
|
||||
<string name="filter_current_poiButton">Φιλτράρισμα</string>
|
||||
<string name="edit_filter_delete_menu_item">Διαγραφή</string>
|
||||
<string name="edit_filter_save_as_menu_item">Αποθήκευση Ως</string>
|
||||
|
@ -1145,7 +1145,7 @@
|
|||
<string name="recording_can_not_be_played">Η εγγραφή δεν μπορεί να αναπαραχθεί</string>
|
||||
<string name="recording_context_menu_delete">Διαγραφή εγγραφής</string>
|
||||
<string name="recording_context_menu_play">Αναπαραγωγή</string>
|
||||
<string name="recording_description">Εγγραφή %1$s %2$s από %3$s</string>
|
||||
<string name="recording_description">Εγγραφή %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">εγγραφή</string>
|
||||
<string name="map_widget_av_notes">Σημειώσεις ήχου/video</string>
|
||||
<string name="av_def_action_video">Εγγραφή video</string>
|
||||
|
@ -1172,7 +1172,7 @@
|
|||
<string name="clear_dest_confirm">Είστε σίγουρος ότι θέλετε να καθαρίσετε το σημείο προορισμού (και τα σημεία διαδρομής);</string>
|
||||
<string name="precise_routing_mode">Ακριβής δρομολόγηση (άλφα)</string>
|
||||
<string name="recording_context_menu_show">Εμφάνιση</string>
|
||||
<string name="recording_photo_description">Φωτογραφία %1$s από %2$s</string>
|
||||
<string name="recording_photo_description">Φωτογραφία %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Λήψη φωτογραφίας</string>
|
||||
<string name="recording_context_menu_precord">Λήψη φωτογραφίας</string>
|
||||
<string name="audionotes_location_not_defined">Δεν έχει καθοριστεί ακόμα τοποθεσία για συσχέτιση με την σημείωση. \"Χρήση τοποθεσίας ...\" για να συνδέσετε την σημείωση με την καθορισμένη τοποθεσία</string>
|
||||
|
@ -1541,7 +1541,7 @@
|
|||
<string name="share_route_as_gpx">Διαμοιρασμός διαδρομής ως αρχείο GPX</string>
|
||||
<string name="arrival_distance">Ανακοίνωση άφιξης</string>
|
||||
<string name="arrival_distance_descr">Πόσο σύντομα θέλετε την αναγγελία άφιξης;</string>
|
||||
<string name="keep_informing_never">Ποτέ</string>
|
||||
<string name="keep_informing_never">Μόνο χειροκίνητα (πατήστε το βέλος)</string>
|
||||
<string name="keep_informing">Επανάληψη οδηγιών πλοήγησης</string>
|
||||
<string name="local_index_mi_export">Εξαγωγή</string>
|
||||
<string name="import_file_favourites">Αποθήκευση ως αρχείο GPX ή εισαγωγή στα αγαπημένα;</string>
|
||||
|
@ -1682,7 +1682,7 @@
|
|||
<string name="error_avoid_specific_road">Δεν βρέθηκε παράκαμψη</string>
|
||||
<string name="osmo_use_https_descr">Χρήση ασφαλούς σύνδεσης με τον διακομιστή</string>
|
||||
<string name="advanced_settings">Προηγμένες</string>
|
||||
<string name="wake_on_voice">Άναμμα της οθόνης</string>
|
||||
<string name="wake_on_voice">Άναμμα οθόνης</string>
|
||||
<string name="map_widget_appearance_rem">Εναπομείναντα στοιχεία</string>
|
||||
<string name="speed_limit_exceed_message">Επιλέξτε το περιθώριο του ορίου ταχύτητας, πάνω από το οποίο θα ακούτε ηχητική προειδοποίηση.</string>
|
||||
<string name="fav_point_dublicate_message">Αλλάχτηκε το όνομα του αγαπημένου σημείου σε %1$s για να αποφευχθούν διπλά ονόματα.</string>
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
<string name="init_native_library">Inicializando biblioteca nativa…</string>
|
||||
<string name="choose_auto_follow_route">Auto-centrar vista de mapa</string>
|
||||
<string name="choose_auto_follow_route_descr">Tiempo hasta que la vista del mapa vuelve a sincronizarse con la posición actual</string>
|
||||
<string name="auto_follow_route_never">Nunca</string>
|
||||
<string name="auto_follow_route_never">Nunca (pulsa la flecha azul para iniciar manualmente el guiado)</string>
|
||||
<string name="auto_follow_route_navigation">Auto-centrar sólo nav</string>
|
||||
<string name="auto_follow_route_navigation_descr">Auto-centra la vista del mapa sólo durante la navegación.</string>
|
||||
<string name="auto_follow_location_enabled">Auto-centrar vista del mapa activado.</string>
|
||||
|
@ -746,7 +746,7 @@
|
|||
<string name="poi_dialog_comment_default">Cambiando PDI</string>
|
||||
<string name="poi_dialog_other_tags_message">Se preservan las otras etiquetas</string>
|
||||
<string name="default_buttons_commit">Confirmar</string>
|
||||
<string name="default_buttons_reset">Reiniciar</string>
|
||||
<string name="default_buttons_reset">Limpiar</string>
|
||||
<string name="filter_current_poiButton">Filtro</string>
|
||||
<string name="edit_filter_delete_menu_item">Borrar</string>
|
||||
<string name="edit_filter_save_as_menu_item">Guardar como</string>
|
||||
|
@ -1100,7 +1100,7 @@
|
|||
<string name="recording_can_not_be_played">La grabación no se puede reproducir</string>
|
||||
<string name="recording_context_menu_delete">Eliminar grabación</string>
|
||||
<string name="recording_context_menu_play">Reproducir</string>
|
||||
<string name="recording_default_name">grabación</string>
|
||||
<string name="recording_default_name">Grabación</string>
|
||||
<string name="av_control_stop">Parar</string>
|
||||
<string name="av_control_start">Iniciar</string>
|
||||
<string name="map_widget_av_notes">Notas de audio</string>
|
||||
|
@ -1566,7 +1566,7 @@
|
|||
<string name="share_route_as_gpx">Compartir la ruta como archivo GPX</string>
|
||||
<string name="share_route_subject">Ruta compartida vía OsmAnd</string>
|
||||
<string name="navigation_intent_invalid">Formato inválido: %s</string>
|
||||
<string name="keep_informing_never">Nunca</string>
|
||||
<string name="keep_informing_never">Sólo manualmente (pulsa la flecha)</string>
|
||||
<string name="keep_informing_descr">Re-anunciar instrucciones de navegación a intervalos regulares</string>
|
||||
<string name="keep_informing">Repetir instrucciones de navegación</string>
|
||||
<string name="arrival_distance">Anuncio de llegada</string>
|
||||
|
@ -1842,7 +1842,7 @@
|
|||
<string name="rendering_attr_busRoutes_name">Rutas de autobús</string>
|
||||
<string name="rendering_category_hide">Ocultar</string>
|
||||
<string name="wake_on_voice">Encender pantalla</string>
|
||||
<string name="wake_on_voice_descr">Encender la pantalla del dispositivo al aproximarse a un giro</string>
|
||||
<string name="wake_on_voice_descr">Enciende la pantalla del dispositivo al aproximarse a un giro</string>
|
||||
<string name="lock_screen_request_explanation">%1$s necesita este permiso para apagar la pantalla para la característica de ahorro energético.</string>
|
||||
<string name="wake_on_voice_never">Nunca</string>
|
||||
<string name="advanced_settings">Avanzado</string>
|
||||
|
@ -1886,4 +1886,7 @@
|
|||
<string name="navigate_point_northing">Al norte</string>
|
||||
<string name="speak_pedestrian">Anunciar pasos de peatones</string>
|
||||
<string name="rendering_value__name">Por defecto</string>
|
||||
<string name="save_track_to_gpx_globally_headline">Registro de trazas bajo demanda</string>
|
||||
<string name="navigation_over_track">¿Empezar navegación sobre traza?</string>
|
||||
<string name="avoid_roads_msg">Puedes cambiar la ruta seleccionando los caminos a evitar</string>
|
||||
</resources>
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
<string name="init_native_library">Chargement …</string>
|
||||
<string name="choose_auto_follow_route">Centrer automatiquement la carte</string>
|
||||
<string name="choose_auto_follow_route_descr">Temps avant que la carte se recentre sur la position actuelle</string>
|
||||
<string name="auto_follow_route_never">Jamais</string>
|
||||
<string name="auto_follow_route_never">Jamais (Appuyez sur la flèche pour démarrer manuellement la navigation)</string>
|
||||
<string name="auto_follow_route_navigation">Recentrage automatique navigation</string>
|
||||
<string name="auto_follow_route_navigation_descr">Recentrage automatique uniquement pendant la navigation.</string>
|
||||
<string name="auto_follow_location_enabled">Recentrage automatique activé.</string>
|
||||
|
@ -1141,8 +1141,8 @@
|
|||
<string name="recording_can_not_be_played">L\'enregistrement ne peut pas être lu</string>
|
||||
<string name="recording_context_menu_delete">Supprimer l\'enregistrement</string>
|
||||
<string name="recording_context_menu_play">Lire</string>
|
||||
<string name="recording_description">Enregistrement %1$s %2$s à %3$s</string>
|
||||
<string name="recording_default_name">enregistrement</string>
|
||||
<string name="recording_description">Enregistrement %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">Enregistrement en cours</string>
|
||||
<string name="av_control_stop">Arrêter</string>
|
||||
<string name="map_widget_av_notes">Notes audio/vidéo</string>
|
||||
<string name="tip_recent_changes_1_1_0_t">"Changements pour 1.1.0 :
|
||||
|
@ -1161,7 +1161,7 @@
|
|||
<string name="dropbox_plugin_name">Greffon Dropbox</string>
|
||||
<string name="dropbox_plugin_description">Le greffon Dropbox permet de synchroniser des pistes et des notes audio / vidéo avec votre compte Dropbox.</string>
|
||||
<string name="recording_context_menu_show">Afficher</string>
|
||||
<string name="recording_photo_description">Photo %1$s à %2$s</string>
|
||||
<string name="recording_photo_description">Photo %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Prendre une photo</string>
|
||||
<string name="recording_context_menu_precord">Prendre une photo</string>
|
||||
<string name="stop_routing_confirm">Êtes-vous sûr de vouloir arrêter la navigation ?</string>
|
||||
|
@ -1586,7 +1586,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et
|
|||
<string name="osmo_conn_successfull">Connexion établie : %1$s </string>
|
||||
<string name="osmo_auto_send_locations_descr">Démarrer automatiquement une session de suivi et l\'envoi des emplacements dès le démarrage de l\'application</string>
|
||||
<string name="osmo_auto_send_locations">Démarrage automatique de session de suivi</string>
|
||||
<string name="keep_informing_never">Jamais</string>
|
||||
<string name="keep_informing_never">Manuelle (en appuyant sur la flèche)</string>
|
||||
<string name="keep_informing_descr">Répéter les instructions de navigation à intervalles réguliers</string>
|
||||
<string name="keep_informing">Répéter les instructions de navigation</string>
|
||||
<string name="navigation_intent_invalid">Format invalide : %s</string>
|
||||
|
@ -1895,4 +1895,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et
|
|||
<string name="routing_attr_no_new_routing_name">Ne pas utiliser la version 1.9 des calculs de route</string>
|
||||
<string name="speak_pedestrian">Annoncer les passages piéton</string>
|
||||
<string name="rendering_value__name">Par défaut</string>
|
||||
<string name="avoid_roads_msg">Vous pouvez modifier l\'itinéraire en sélectionnant les routes à éviter.</string>
|
||||
<string name="navigation_over_track">Démarrer la navigation sur les pistes ?</string>
|
||||
<string name="save_track_to_gpx_globally_headline">Enregistrement de traces à la demande</string>
|
||||
</resources>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -94,7 +94,7 @@
|
|||
<string name="init_native_library">Inizializzazione libreria nativa…</string>
|
||||
<string name="choose_auto_follow_route">Centra automaticamente la mappa</string>
|
||||
<string name="choose_auto_follow_route_descr">Scegli intervallo di tempo per seguire automaticamente la posizione attuale</string>
|
||||
<string name="auto_follow_route_never">Mai</string>
|
||||
<string name="auto_follow_route_never">Mai (tap sulla freccia blu per avviare la navigazione manualmente)</string>
|
||||
<string name="auto_follow_route_navigation">Centra automaticamente solo in navigazione</string>
|
||||
<string name="auto_follow_route_navigation_descr">Centra automaticamente la visione della mappa solo durante la navigazione.</string>
|
||||
<string name="auto_follow_location_enabled">Visualizzazione mappa centrata automaticamente.</string>
|
||||
|
@ -751,7 +751,7 @@
|
|||
<string name="poi_dialog_comment_default">Cambio PDI</string>
|
||||
<string name="poi_dialog_other_tags_message">Tutte le altre etichette sono conservate</string>
|
||||
<string name="default_buttons_commit">Esegui</string>
|
||||
<string name="default_buttons_reset">Ripristina</string>
|
||||
<string name="default_buttons_reset">Cancella</string>
|
||||
<string name="filter_current_poiButton">Filtro</string>
|
||||
<string name="edit_filter_delete_menu_item">Elimina</string>
|
||||
<string name="edit_filter_save_as_menu_item">Salva come</string>
|
||||
|
@ -1211,8 +1211,8 @@
|
|||
<string name="recording_can_not_be_played">La registrazione non può essere riprodotta</string>
|
||||
<string name="recording_context_menu_delete">Elimina la registrazione</string>
|
||||
<string name="recording_context_menu_play">Riproduci</string>
|
||||
<string name="recording_description">Registrazione %1$s %2$s di %3$s</string>
|
||||
<string name="recording_default_name">registrazione</string>
|
||||
<string name="recording_description">Registrazione %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">Registrazione in corso</string>
|
||||
<string name="av_control_stop">Ferma</string>
|
||||
<string name="av_control_start">Avvia</string>
|
||||
<string name="map_widget_av_notes">Note audio/video</string>
|
||||
|
@ -1225,7 +1225,7 @@
|
|||
<string name="recording_context_menu_show">Visualizza</string>
|
||||
<string name="av_def_action_picture">Scatta una foto</string>
|
||||
<string name="recording_context_menu_precord">Scatta una foto</string>
|
||||
<string name="recording_photo_description">Foto %1$s a %2$s</string>
|
||||
<string name="recording_photo_description">Foto %1$s %2$s</string>
|
||||
<string name="stop_routing_confirm">Sei sicuro di voler fermare la navigazione?</string>
|
||||
<string name="clear_dest_confirm">Sei sicuro di voler eliminare la tua destinazione (e i punti intermedi)?</string>
|
||||
<string name="precise_routing_mode_descr">Abilita per calcolare percorsi precisi senza intoppi. È lento e limitato in distanza.</string>
|
||||
|
@ -1723,7 +1723,7 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz
|
|||
<string name="osmo_plugin_description">"OpenStreetMap monitoraggio avanzato in diretta, vedi http://osmo.mobi. Fornisce la possibilità di tracciare altri dispositivi e di essere tracciati. Crea gruppo anonimi, condivide reciprocamente la posizione e comunica. Sono disponibili varie impostazioni di monitoraggio, per la sessione in corso o permanenti. I gruppi anonimi sono limitati a un numero di giorni e alcune funzioni es. non c\'è il controllo remoto e l\'amministratore del gruppo. Gruppi con tutte le funzionalità possono essere creati dal sito e solo gli utenti registrati possono accedervi. "</string>
|
||||
<string name="osmo_plugin_name">OsMo (Monitoraggio avanzato in tempo reale)</string>
|
||||
<string name="osmo_settings">Monitoraggio OpenStreetMap</string>
|
||||
<string name="keep_informing_never">Mai</string>
|
||||
<string name="keep_informing_never">Solo manualmente (tap sulla freccia)</string>
|
||||
<string name="keep_informing_descr">Annuncia nuovamente a intervalli regolari le indicazioni di navigazione</string>
|
||||
<string name="keep_informing">Ripeti le istruzioni di navigazione</string>
|
||||
<string name="arrival_distance">Annuncio arrivo</string>
|
||||
|
@ -2000,7 +2000,7 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz
|
|||
<string name="impassable_road">Evita strade …</string>
|
||||
<string name="rendering_category_hide">Nascondi</string>
|
||||
<string name="wake_on_voice">Accendi lo schermo</string>
|
||||
<string name="wake_on_voice_descr">Accendi lo schermo all\'approssimarsi di una svolta</string>
|
||||
<string name="wake_on_voice_descr">Accendi lo schermo (se spento) all\'approssimarsi di una svolta</string>
|
||||
<string name="wake_on_voice_never">Mai</string>
|
||||
<string name="lock_screen_request_explanation">%1$s necessita di questa autorizzazione per spegnere lo schermo per la funzionalità di risparmio energetico.</string>
|
||||
<string name="advanced_settings">Avanzato</string>
|
||||
|
@ -2044,4 +2044,7 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz
|
|||
<string name="show_pedestrian_warnings">Mostra gli attraversamenti pedonali</string>
|
||||
<string name="speak_pedestrian">Annuncia gli attraversamenti pedonali</string>
|
||||
<string name="rendering_value__name">Preimpostato</string>
|
||||
<string name="navigation_over_track">Iniziare la navigazione sulla traccia?</string>
|
||||
<string name="avoid_roads_msg">Puoi modificare il percorso selezionando le strade da evitare</string>
|
||||
<string name="save_track_to_gpx_globally_headline">Registrazione della traccia su richiesta</string>
|
||||
</resources>
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
<string name="init_native_library">기본 라이브러리 초기화중…</string>
|
||||
<string name="choose_auto_follow_route">자동-센터 지도 보기</string>
|
||||
<string name="choose_auto_follow_route_descr">지도 보기가 현재 위치와 동기화하여 복귀할 때까지 걸리는 시간입니다</string>
|
||||
<string name="auto_follow_route_never">결코(Never)</string>
|
||||
<string name="auto_follow_route_never">결코(Never : 수동으로 길안내를 시작하기 위해 파란 화살표를 누르세요)</string>
|
||||
<string name="auto_follow_route_navigation">자동-센터 운행 전용</string>
|
||||
<string name="auto_follow_route_navigation_descr">운행 중에만 자동-센터 지도 보기를 사용합니다.</string>
|
||||
<string name="auto_follow_location_enabled">자동-센터 지도 보기 사용 중입니다.</string>
|
||||
|
@ -883,7 +883,7 @@
|
|||
<string name="poi_dialog_comment_default">POI 변경</string>
|
||||
<string name="poi_dialog_other_tags_message">모든 다른 태그는 보존된다</string>
|
||||
<string name="default_buttons_commit">반영</string>
|
||||
<string name="default_buttons_reset">재설정</string>
|
||||
<string name="default_buttons_reset">지우기</string>
|
||||
<string name="filter_current_poiButton">필터</string>
|
||||
<string name="edit_filter_delete_menu_item">삭제</string>
|
||||
<string name="edit_filter_save_as_menu_item">다른이름으로 저장</string>
|
||||
|
@ -1772,7 +1772,7 @@
|
|||
<string name="share_route_subject">OsmAnd를 통해 공유된 경로</string>
|
||||
<string name="arrival_distance">도착 알림</string>
|
||||
<string name="arrival_distance_descr">도착 알림을 원하세요 ?</string>
|
||||
<string name="keep_informing_never">결코</string>
|
||||
<string name="keep_informing_never">수동으로 (화살표를 누르세요)</string>
|
||||
<string name="keep_informing_descr">정기적인 간격으로 운행 명령을 다시 알리기</string>
|
||||
<string name="keep_informing">운행 명령을 반복</string>
|
||||
<string name="navigation_intent_invalid">잘못된 포맷 : %s</string>
|
||||
|
@ -2063,7 +2063,7 @@
|
|||
<string name="rendering_attr_tramTrainRoutes_name">전차 및 기차 노선</string>
|
||||
<string name="rendering_category_hide">숨기기</string>
|
||||
<string name="wake_on_voice">화면 켜기</string>
|
||||
<string name="wake_on_voice_descr">교차로에 접근할 때 전화 화면 켜기</string>
|
||||
<string name="wake_on_voice_descr">교차로에 접근할 때 화면 켜기</string>
|
||||
<string name="lock_screen_request_explanation">%1$의 절전 기능에 대한 화면을 해제 하려면 이 권한이 필요 합니다.</string>
|
||||
<string name="wake_on_voice_never">결코</string>
|
||||
<string name="advanced_settings">고급</string>
|
||||
|
@ -2107,4 +2107,7 @@
|
|||
<string name="show_pedestrian_warnings">보행자 횡단보도 표시</string>
|
||||
<string name="speak_pedestrian">보행자 횡단보도 알리기</string>
|
||||
<string name="rendering_value__name">기본값</string>
|
||||
<string name="navigation_over_track">경로를 따라 운행을 시작할까요?</string>
|
||||
<string name="avoid_roads_msg">원하는 도로를 선택하여 경로를 변경할 수 있습니다</string>
|
||||
<string name="save_track_to_gpx_globally_headline">트랙 로깅 요구</string>
|
||||
</resources>
|
||||
|
|
|
@ -173,7 +173,7 @@
|
|||
<string name="poi_kindergarten">Kleuterschool</string>
|
||||
<string name="poi_university">Universiteit</string>
|
||||
|
||||
<string name="poi_college">College</string>
|
||||
<string name="poi_college">Hogeschool</string>
|
||||
<string name="poi_prison">Gevangenis</string>
|
||||
<string name="poi_embassy">Ambassade</string>
|
||||
<string name="poi_government">Regering</string>
|
||||
|
@ -438,4 +438,89 @@
|
|||
|
||||
<string name="poi_power_substation">Onderstation</string>
|
||||
<string name="poi_power_transformer">Transformator</string>
|
||||
<string name="poi_aerialway_station">Kabelbaanstation</string>
|
||||
<string name="poi_recycling">Recyclage</string>
|
||||
<string name="poi_landfill">Stortplaats</string>
|
||||
<string name="poi_surveillance">Bewaking</string>
|
||||
<string name="poi_works">Fabriek</string>
|
||||
<string name="poi_construction">Werken</string>
|
||||
<string name="poi_mineshaft">Mijnschacht</string>
|
||||
<string name="poi_petroleum_well">Oliebron</string>
|
||||
<string name="poi_windmill">Windmolen</string>
|
||||
<string name="poi_salt_pond">Zoutwinning</string>
|
||||
<string name="poi_driving_school">Rijschool</string>
|
||||
<string name="poi_courthouse">Gerechtsgebouw</string>
|
||||
<string name="poi_healthcare_alternative">Alternatieve geneeskunde</string>
|
||||
<string name="poi_healthcare_centre">Gezondheidscentrum</string>
|
||||
<string name="poi_midwife">Vroedvrouw</string>
|
||||
<string name="poi_occupational_therapist">Ergotherapeut</string>
|
||||
<string name="poi_healthcare_rehabilitation">Revalidatie</string>
|
||||
<string name="poi_sports_centre">Sportcentrum</string>
|
||||
<string name="poi_golf_course">Golfbaan</string>
|
||||
<string name="poi_ice_rink">Schaatsbaan</string>
|
||||
<string name="poi_running_track">Looppiste</string>
|
||||
<string name="poi_bicycle_track">Fietspiste</string>
|
||||
<string name="poi_archery">Boogschieten</string>
|
||||
<string name="poi_athletics">Athletiek</string>
|
||||
<string name="poi_basketball">Basketbal</string>
|
||||
<string name="poi_chess">Schaak</string>
|
||||
<string name="poi_climbing">Klimmen</string>
|
||||
<string name="poi_cricket">Cricket</string>
|
||||
<string name="poi_cycling">Fietsen</string>
|
||||
<string name="poi_diving">Duiken</string>
|
||||
<string name="poi_dog_racing">Hondenrennen</string>
|
||||
<string name="poi_golf">Golf</string>
|
||||
<string name="poi_gymnastics">Turnen</string>
|
||||
<string name="poi_handball">Handbal</string>
|
||||
<string name="poi_horse_racing">Paardenrennen</string>
|
||||
<string name="poi_ice_skating">Ijsschaatsen</string>
|
||||
<string name="poi_telephone_exchange">Telefooncentrale</string>
|
||||
|
||||
<string name="poi_waste_disposal">Afvalverwerking</string>
|
||||
<string name="poi_waste_basket">Prullenbak</string>
|
||||
|
||||
<string name="poi_adit">Horizontale mijnschacht</string>
|
||||
<string name="poi_survey_point">Landmeetpunt</string>
|
||||
<string name="poi_quarry">Groeve</string>
|
||||
<string name="poi_cricket_nets">Cricket-netten</string>
|
||||
|
||||
<string name="poi_social_facility">Sociale voorziening</string>
|
||||
<string name="poi_register_office">Burgerlijke stand</string>
|
||||
<string name="poi_bailiff">Baljuw</string>
|
||||
<string name="poi_prosecutor">Aanklager</string>
|
||||
<string name="poi_pension_fund">Pensioenfonds</string>
|
||||
<string name="poi_migration">Migratie</string>
|
||||
<string name="poi_tax_inspection">Belastingsinspectie</string>
|
||||
<string name="poi_administrative_office">Administratief kantoor</string>
|
||||
<string name="poi_speech_therapist">Logopedist</string>
|
||||
<string name="poi_healthcare_yes">Medische voorziening</string>
|
||||
|
||||
<string name="poi_telecommunication_office">Telecommunicatiekantoor</string>
|
||||
<string name="poi_employment_agency">Arbeidsbureau</string>
|
||||
<string name="poi_it_office">IT-kantoor</string>
|
||||
<string name="poi_newspaper_office">Krantenkantoor</string>
|
||||
<string name="poi_pitch">Sportveld</string>
|
||||
<string name="poi_leisure_track">Circuit</string>
|
||||
<string name="poi_horse_track">Paardenrenbaan</string>
|
||||
<string name="poi_raceway">Racecircuit</string>
|
||||
<string name="poi_9pin">Kegelen</string>
|
||||
<string name="poi_10pin">Bowlen</string>
|
||||
<string name="poi_power_generator">Stroomgenerator</string>
|
||||
|
||||
<string name="poi_american_football">American football</string>
|
||||
<string name="poi_australian_football">Australian football</string>
|
||||
<string name="poi_base">Basejumpen</string>
|
||||
<string name="poi_baseball">Honkbal</string>
|
||||
<string name="poi_beachvolleyball">Beachvolleybal</string>
|
||||
<string name="poi_bmx_sport">BMX</string>
|
||||
<string name="poi_boules">Petanque</string>
|
||||
<string name="poi_bowls">Bowls</string>
|
||||
<string name="poi_canadian_football">Canadian football</string>
|
||||
<string name="poi_canoe">Kano</string>
|
||||
<string name="poi_croquet">Croquet</string>
|
||||
<string name="poi_scuba_diving">Duiksport</string>
|
||||
<string name="poi_equestrian">Paardrijden</string>
|
||||
<string name="poi_hockey">Hockey</string>
|
||||
<string name="poi_ice_stock">IJsstokschieten</string>
|
||||
<string name="poi_korfbal">Korfbal</string>
|
||||
</resources>
|
||||
|
|
|
@ -516,7 +516,7 @@
|
|||
<string name="transport_searching_transport">Openbaar vervoer-resultaten (geen bestemming):</string>
|
||||
<string name="transport_searching_route">Openbaar vervoer-resultaten ({0} naar bestemming):</string>
|
||||
<string name="transport_search_none">geen</string>
|
||||
<string name="transport_search_again">Opnieuw OV zoeken</string>
|
||||
<string name="transport_search_again">Opnieuw openbaar vervoer zoeken</string>
|
||||
<string name="map_index">Kaart</string>
|
||||
<string name="voice">Opgenomen stem</string>
|
||||
<string name="no_vector_map_loaded">Geen vectorkaarten geladen</string>
|
||||
|
@ -525,7 +525,7 @@
|
|||
<string name="layer_gpx_layer">GPX-track…</string>
|
||||
<string name="error_reading_gpx">Fout bij het lezen van GPX-gegevens</string>
|
||||
<string name="vector_data">Offline vectorkaarten</string>
|
||||
<string name="transport_context_menu">Zoek vervoer op halte</string>
|
||||
<string name="transport_context_menu">Zoek openbaar vervoer op halte</string>
|
||||
<string name="point_on_map">Locatie:\n Lat %1$.5f\n Lon %2$.5f</string>
|
||||
<string name="osb_bug_name">Bug</string>
|
||||
<string name="poi_context_menu_modify">Wijzig interessepunt</string>
|
||||
|
@ -547,7 +547,7 @@
|
|||
<string name="none_region_found">Geen offline-gegevens voor regio gevonden op de SD kaart. Download regio\'s van het internet.</string>
|
||||
<string name="poi_namefinder_query_empty">Type een zoekwoord om een interessepunt te vinden</string>
|
||||
<string name="any_poi">Alle</string>
|
||||
<string name="layer_transport_route">OV-verbindingen</string>
|
||||
<string name="layer_transport_route">Openbaar vervoer-verbindingen</string>
|
||||
<string name="thanks_yandex_traffic">Met dank aan Yandex voor de verkeersinformatie.</string>
|
||||
<string name="layer_yandex_traffic">Yandex Traffic</string>
|
||||
<string name="layer_route">Route</string>
|
||||
|
@ -1202,7 +1202,7 @@
|
|||
<string name="recording_can_not_be_played">Opname kan niet worden afgespeeld</string>
|
||||
<string name="recording_context_menu_delete">Wis opname</string>
|
||||
<string name="recording_context_menu_play">Afspelen</string>
|
||||
<string name="recording_description">Opname %1$s %2$s van %3$s</string>
|
||||
<string name="recording_description">Opname %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">opname</string>
|
||||
<string name="av_control_stop">Stop</string>
|
||||
<string name="av_control_start">Start</string>
|
||||
|
@ -1226,7 +1226,7 @@
|
|||
<string name="dropbox_plugin_description">De Dropbox-plugin kan tracks en audio/video-notities synchroniseren met je Dropbox-account.</string>
|
||||
<string name="dropbox_plugin_name">Dropbox-plugin</string>
|
||||
<string name="recording_context_menu_show">Toon</string>
|
||||
<string name="recording_photo_description">Foto %1$s van %2$s</string>
|
||||
<string name="recording_photo_description">Foto %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Neem een foto</string>
|
||||
<string name="recording_context_menu_precord">Neem een foto</string>
|
||||
<string name="stop_routing_confirm">Navigatie stoppen?</string>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<string name="pref_vector_map">Ustawienia mapy wektorowej</string>
|
||||
<string name="choose_auto_follow_route">Autocentrowanie mapy</string>
|
||||
<string name="choose_auto_follow_route_descr">Opóźnienie, po którym mapa zacznie podążać za aktualną pozycją GPS</string>
|
||||
<string name="auto_follow_route_never">Nigdy</string>
|
||||
<string name="auto_follow_route_never">Nigdy (dotknij niebieskiej strzałki, aby rozpocząć ręcznie)</string>
|
||||
<string name="auto_follow_route_navigation">Auto-podążanie za pozycją</string>
|
||||
<string name="auto_follow_route_navigation_descr">Włącz podążanie za pozycją tylko w trybie nawigacji.</string>
|
||||
<string name="auto_follow_location_enabled">Podążanie za pozycją jest włączone.</string>
|
||||
|
@ -668,7 +668,7 @@
|
|||
<string name="poi_dialog_comment_default">Zmiana POI</string>
|
||||
<string name="poi_dialog_other_tags_message">Wszystkie pozostałe tagi pozostają bez zmian</string>
|
||||
<string name="default_buttons_commit">Wyślij</string>
|
||||
<string name="default_buttons_reset">Resetuj</string>
|
||||
<string name="default_buttons_reset">Wyczyść</string>
|
||||
<string name="filter_current_poiButton">Filtr</string>
|
||||
<string name="edit_filter_delete_menu_item">Usuń</string>
|
||||
<string name="edit_filter_save_as_menu_item">Zapisz jako</string>
|
||||
|
@ -1136,8 +1136,8 @@
|
|||
<string name="recording_can_not_be_played">Nagranie nie może zostać odtworzone</string>
|
||||
<string name="recording_context_menu_delete">Usuń nagranie</string>
|
||||
<string name="recording_context_menu_play">Odtwórz</string>
|
||||
<string name="recording_description">Nagranie %1$s %2$s w %3$s</string>
|
||||
<string name="recording_default_name">nagranie</string>
|
||||
<string name="recording_description">Nagranie %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">Nagranie</string>
|
||||
<string name="av_control_stop">Stop</string>
|
||||
<string name="av_control_start">Start</string>
|
||||
<string name="map_widget_av_notes">Notatki audio/video</string>
|
||||
|
@ -1155,7 +1155,7 @@
|
|||
<string name="recording_context_menu_vrecord">Nagraj notatkę wideo</string>
|
||||
<string name="osmand_srtm_long_description_1000_chars">Ta wtyczka dostarcza poziomice, które mogą być wyświetlane na mapach offline w OsmAnd. Światowe dane (między 70 stopniem szerokości północnej a 70 stopniem szerokości południowej) opierają się na pomiarach SRTM (Shuttle Radar Topography Mission) i ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), przyrządu na pokładzie Terra, flagowego satelity Systemu Obserwacji Ziemi NASA. ASTER jest wspólnym przedsięwzięciem NASA, japońskiego Ministerstwa Gospodarki, Handlu i Przemysłu (METI) i Japońskich Systemów Kosmicznych (J-spacesystems).</string>
|
||||
<string name="recording_context_menu_show">Pokaż</string>
|
||||
<string name="recording_photo_description">Zdjęcie %1$s w %2$s</string>
|
||||
<string name="recording_photo_description">Zdjęcie %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Zrób zdjęcie</string>
|
||||
<string name="recording_context_menu_precord">Zrób zdjęcie</string>
|
||||
<string name="stop_routing_confirm">Czy na pewno chcesz zatrzymać nawigację?</string>
|
||||
|
@ -1661,7 +1661,7 @@ Afganistan, Afryka Południowa, Albania, Algieria, Andora, Angola, Anguilla, Ant
|
|||
<string name="osmo_plugin_description">"OpenStreetMap zaawansowany monitoring na żywo, zobacz http://osmo.mobi. Daje możliwość śledzenia innych urządzeń i vice versa. Twórz anonimowe grupy, dziel się lokalizacją i prowadź komunikację. System ma wiele ustawień dla śledzenia w sesji lub stałego śledzenia. Grupy anonimowe mają ograniczenia czasowe i funkcjonalne, np. nie ma zdalnej kontroli i administratora grupy. W pełni funkcjonalne grupy powinny być tworzone przez witrynę, a dostęp zarezerwowany tylko dla zarejestrowanych użytkowników. "</string>
|
||||
<string name="osmo_plugin_name">OsMo (Zaawansowany Monitoring na Żywo)</string>
|
||||
<string name="osmo_settings">Monitoring OpenStreetMap</string>
|
||||
<string name="keep_informing_never">Nigdy</string>
|
||||
<string name="keep_informing_never">Tylko ręcznie (naciśnij strzałkę)</string>
|
||||
<string name="keep_informing_descr">Podawaj instrukcje nawigacji w regularnych odstępach czasu</string>
|
||||
<string name="keep_informing">Powtarzaj instrukcje nawigacji</string>
|
||||
<string name="arrival_distance">Informacja o odległości do celu</string>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -254,7 +254,7 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres
|
|||
<string name="distance_measurement_save_gpx">Sarba comente GPX</string>
|
||||
<string name="distance_measurement_load_gpx">Aberi GPX esistente</string>
|
||||
<string name="wait_current_task_finished">Pro piaghere iseta sa fine de su traballu presente</string>
|
||||
<string name="use_kalman_filter_compass_descr">Imprea su filtru pro istransire traviaduras de sa bùssola</string>
|
||||
<string name="use_kalman_filter_compass_descr">Minimat s\'abbolotu de sa bùssola ma annanghet inèrtzia/preìtia</string>
|
||||
<string name="use_kalman_filter_compass">Impreu de su filtru de Kalman</string>
|
||||
<string name="access_mark_final_location_first">Modalidade de atzessu fatzilidadu: issebera in antis sa destinatzione</string>
|
||||
<string name="use_magnetic_sensor_descr">Imprea su sensore magneticu pro determinare su balore de sa bùssola imbetzes de su sensore de orientamentu</string>
|
||||
|
@ -341,7 +341,7 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres
|
|||
<string name="precise_routing_mode_descr">Abìlita pro calculare àndalas pretzisas sena attoppos. Est lentu e limitadu in sa distantzia.</string>
|
||||
<string name="precise_routing_mode">Calculu pretzisu de s\'àndala (alfa)</string>
|
||||
<string name="recording_context_menu_show">Ammustra</string>
|
||||
<string name="recording_photo_description">Foto %1$s a %2$s</string>
|
||||
<string name="recording_photo_description">Foto %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Iscata una foto</string>
|
||||
<string name="recording_context_menu_precord">Iscata una foto</string>
|
||||
<string name="av_use_external_camera_descr">Imprea s\'aplicu de sistema pro sas fotos</string>
|
||||
|
@ -383,7 +383,7 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres
|
|||
<string name="recording_can_not_be_played">Sa registratzione non podet èssere reprodota</string>
|
||||
<string name="recording_context_menu_delete">Burra sa registratzione</string>
|
||||
<string name="recording_context_menu_play">Reprodui</string>
|
||||
<string name="recording_description">Registratzione %1$s %2$s de %3$s</string>
|
||||
<string name="recording_description">Registratzione %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">registratzione</string>
|
||||
<string name="av_control_stop">Stop</string>
|
||||
<string name="av_control_start">Avia/Inghitza</string>
|
||||
|
@ -917,8 +917,8 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres
|
|||
<string name="tip_day_night_mode">Modalidade die/note</string>
|
||||
<string name="tip_osm_improve">Megiora sos datos OSM</string>
|
||||
<string name="tip_navigation">Nàvigu</string>
|
||||
<string name="auto_follow_route_never">Mai</string>
|
||||
<string name="keep_informing_never">Mai</string>
|
||||
<string name="auto_follow_route_never">Mai (carca sa fritza biaita pro aviare manualmente sa ghia)</string>
|
||||
<string name="keep_informing_never">Manualmente ebbia (carca sa fritza)</string>
|
||||
<string name="keep_informing">Torra a repìtere sas istrutziones de nàvigu</string>
|
||||
<string name="pref_raster_map">Impostaduras de sa mitza de sa mapa</string>
|
||||
<string name="pref_vector_map">Impostaduras de sa mapa vetoriale</string>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources><string name="recording_context_menu_show">Zobraziť</string>
|
||||
<string name="recording_photo_description">Fotografia %1$s zachytená dňa %2$s</string>
|
||||
<string name="recording_photo_description">Fotografia %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Zachytiť fotografiu</string>
|
||||
<string name="recording_context_menu_precord">Zachytiť fotografiu</string>
|
||||
<string name="enable_plugin_monitoring_services">Na použitie služieb pre záznam pozície zapnite monitorovacie zásuvné moduly (stopovanie, stopovanie naživo)</string>
|
||||
|
@ -276,7 +276,7 @@
|
|||
<string name="init_native_library">Inicializácia natívnej knižnice…</string>
|
||||
<string name="choose_auto_follow_route">Automatické centrovanie</string>
|
||||
<string name="choose_auto_follow_route_descr">Čas pokiaľ sa mapové zobrazenie zosynchronizuje s pozíciou</string>
|
||||
<string name="auto_follow_route_never">Nikdy</string>
|
||||
<string name="auto_follow_route_never">Nikdy (použite modrú šípku pre spustenie pokynov)</string>
|
||||
<string name="auto_follow_route_navigation">Autom. nasledovanie iba pri navigácii</string>
|
||||
<string name="auto_follow_route_navigation_descr">Povoliť autom. nasledovanie pozície iba v režime navigácie.</string>
|
||||
<string name="auto_follow_location_enabled">Automatické nasledovanie je povolené.</string>
|
||||
|
@ -950,7 +950,7 @@
|
|||
<string name="poi_dialog_comment_default">Zmena POI</string>
|
||||
<string name="poi_dialog_other_tags_message">Všetky ostatné tagy ponechané</string>
|
||||
<string name="default_buttons_commit">Uložiť</string>
|
||||
<string name="default_buttons_reset">Reset</string>
|
||||
<string name="default_buttons_reset">Vymazať</string>
|
||||
<string name="filter_current_poiButton">Filter</string>
|
||||
<string name="edit_filter_delete_menu_item">Vymazať</string>
|
||||
<string name="edit_filter_save_as_menu_item">Uložiť ako</string>
|
||||
|
@ -1157,7 +1157,7 @@
|
|||
<string name="recording_can_not_be_played">Nahrávanie nemôže byť prehrané</string>
|
||||
<string name="recording_context_menu_delete">Odstrániť záznam</string>
|
||||
<string name="recording_context_menu_play">Prehrať</string>
|
||||
<string name="recording_description">Záznam %1$s %2$s v %3$s</string>
|
||||
<string name="recording_description">Záznam %1$s %2$s %3$s</string>
|
||||
<string name="recording_default_name">nahrávka</string>
|
||||
<string name="av_control_stop">Zastaviť</string>
|
||||
<string name="av_control_start">Nahrať</string>
|
||||
|
@ -1700,7 +1700,7 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda,
|
|||
<string name="osmo_plugin_description">"OpenStreetMap pokročilé sledovanie naživo, pozrite http://osmo.mobi. Ponúka možnosti sledovania iných zariadení a byť sledovaný. Vytvorte anonymné skupiny, zdieľajte vzájomne polohu a komunikujte. Rôzne možnosti nastavenia krátkodobého a dlhodobého sledovania. Anonymné skupiny sú obmedzené na počet dní a pre niektoré funkcie nie je diaľkové ovládanie ani administrátor skupiny. Plne funkčné skupiny sa vytvárajú na webstránke a sú prístupné len registrovaným používateľom. "</string>
|
||||
<string name="osmo_plugin_name">OsMo</string>
|
||||
<string name="osmo_settings">OpenStreetMap sledovanie</string>
|
||||
<string name="keep_informing_never">Nikdy</string>
|
||||
<string name="keep_informing_never">Len ručne (použiť šípku)</string>
|
||||
<string name="keep_informing_descr">Opakuj navigačné pokyny v pravidelných intervaloch</string>
|
||||
<string name="keep_informing">Opakuj navigačné pokyny</string>
|
||||
<string name="arrival_distance">Oznámenie príjazdu</string>
|
||||
|
@ -2028,4 +2028,5 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda,
|
|||
<string name="routing_attr_no_new_routing_description">Nepoužívať pravidlá výpočtu trasy zavedené vo verzii 1.9</string>
|
||||
<string name="speak_pedestrian">Oznamovať priechody pre chodcov</string>
|
||||
<string name="rendering_value__name">Predvolené</string>
|
||||
<string name="save_track_to_gpx_globally_headline">Záznam trasy v prípade potreby</string>
|
||||
</resources>
|
||||
|
|
|
@ -306,7 +306,7 @@
|
|||
<string name="general_settings_descr">Določi splošne nastavitve</string>
|
||||
<string name="global_app_settings">Splošne nastavitve aplikacije</string>
|
||||
<string name="preferred_locale">Jezik</string>
|
||||
<string name="preferred_locale_descr">Izberite jezik uporabniškega vmesnika</string>
|
||||
<string name="preferred_locale_descr">Izberite jezik uporabniškega vmesnika (ponovno zaženite OsmAnd po zamenjavi)</string>
|
||||
<string name="map_widget_show_destination_arrow">Prikaži smer cilja</string>
|
||||
<string name="enable_plugin_monitoring_services">Omogoči vtičnike za nadzor (beleženje, sledenje v živo) za uporabljanje nadzornih storitev</string>
|
||||
<string name="non_optimal_route_calculation">Izračunaj morda ne-optimalne poti na dolge razdalje</string>
|
||||
|
@ -511,7 +511,7 @@
|
|||
<string name="search_position_undefined">Nedoločeno</string>
|
||||
<string name="search_position_fixed">" "</string>
|
||||
<string name="search_position_current_location">Trenutni položaj …</string>
|
||||
<string name="search_position_map_view">Zadnji pogled zemljevida</string>
|
||||
<string name="search_position_map_view">Center trenutnega zemljevida</string>
|
||||
<string name="search_position_address">Naslov …</string>
|
||||
<string name="city_type_city">Mesto</string>
|
||||
<string name="city_type_hamlet">Zaselek</string>
|
||||
|
@ -1116,7 +1116,7 @@
|
|||
<string name="srtm_plugin_name">Vtičnik Izohipse</string>
|
||||
<string name="download_select_map_types">Drugi zemljevidi</string>
|
||||
<string name="recording_context_menu_play">Predvajaj</string>
|
||||
<string name="recording_description">Snemanje %1$s %2$s na %3$s</string>
|
||||
<string name="recording_description">Snemanje %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">snemanje</string>
|
||||
<string name="av_control_stop">Ustavi</string>
|
||||
<string name="map_widget_av_notes">Zvočni zapisi</string>
|
||||
|
@ -1172,7 +1172,7 @@
|
|||
<string name="dropbox_plugin_description">Vtičnik Dropbox omogoča sinhronizacijo datotek sledi in video/zvočnih posnetkov z vašim dropbox uporabniškim računom.</string>
|
||||
<string name="dropbox_plugin_name">Vtičnik Dropbox</string>
|
||||
<string name="recording_context_menu_show">Prikaži</string>
|
||||
<string name="recording_photo_description">Fotografija %1$s ob %2$s</string>
|
||||
<string name="recording_photo_description">Fotografija %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Posnami fotografijo</string>
|
||||
<string name="recording_context_menu_precord">Posnami fotografijo</string>
|
||||
<string name="stop_routing_confirm">Ali ste prepričani, da želite prekiniti navigacijo?</string>
|
||||
|
@ -1272,7 +1272,7 @@
|
|||
<string name="osmand_distance_planning_plugin_name">Računanje razdalj in Orodje za načrtovanje</string>
|
||||
<string name="distance_measurement_finish_subtrack">Začni novo pod-sled</string>
|
||||
<string name="wait_current_task_finished">Počakajte, da je trenutna naloga končana</string>
|
||||
<string name="use_kalman_filter_compass_descr">Uporaba Kalmanovega filtra za preprečevanje odstopanj kompasa</string>
|
||||
<string name="use_kalman_filter_compass_descr">Zmanjšuje šum pri branju kompasa, vendar dodaja inercijo</string>
|
||||
<string name="use_kalman_filter_compass">Uporabi Kalmanov filter</string>
|
||||
<string name="access_mark_final_location_first">Način dostopnosti: prosim, najprej izberite cilj</string>
|
||||
<string name="use_magnetic_sensor_descr">Namesto senzorja usmerjenosti, za določanje vrednosti kompasa uporabljaj magnetni senzor</string>
|
||||
|
@ -1889,7 +1889,7 @@ Seznam držav (praktično ves svet!): Afganistan, Albanija, Alžirija, Andora, A
|
|||
<string name="text_size_descr">Nastavite velikost napisov na zemljevidu.</string>
|
||||
<string name="text_size">Velikost napisov</string>
|
||||
<string name="rendering_attr_osmcTraces_name">Prosojnica s simboli za pohodništvo</string>
|
||||
<string name="select_impassable_road">Izberi na zemljevidu</string>
|
||||
<string name="select_impassable_road">Izberi na zemljevidu …</string>
|
||||
<string name="impassable_road">Izogibanje cestam…</string>
|
||||
<string name="rendering_attr_tramTrainRoutes_name">Proge tramvaja in vlaka</string>
|
||||
<string name="rendering_attr_busRoutes_name">Proge avtobusov</string>
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
<string name="poi_dialog_comment_default">Ändring av POI</string>
|
||||
<string name="poi_dialog_other_tags_message">Alla andra taggar sparas</string>
|
||||
<string name="default_buttons_commit">Skicka in</string>
|
||||
<string name="default_buttons_reset">Återställ</string>
|
||||
<string name="default_buttons_reset">Töm</string>
|
||||
<string name="filter_current_poiButton">Filter</string>
|
||||
<string name="add_favorite_dialog_default_favourite_name">Favorit</string>
|
||||
<string name="default_buttons_no">Nej</string>
|
||||
|
@ -395,7 +395,7 @@
|
|||
<string name="init_native_library">Initierar inbyggt bibliotek …</string>
|
||||
<string name="choose_auto_follow_route">Auto-centrerad kartvy</string>
|
||||
<string name="choose_auto_follow_route_descr">Tid tills kartvyn synkroniseras med aktuell position</string>
|
||||
<string name="auto_follow_route_never">Aldrig</string>
|
||||
<string name="auto_follow_route_never">Aldrig (tryck på den blå pilen för att starta vägledning manuellt)</string>
|
||||
<string name="auto_follow_route_navigation">Auto-centrera endast nav</string>
|
||||
<string name="auto_follow_route_navigation_descr">Auto-centrera kartan endast vid navigering.</string>
|
||||
<string name="auto_follow_location_enabled">Auto-centrera aktuell kartvy.</string>
|
||||
|
@ -946,7 +946,7 @@
|
|||
<string name="recording_context_menu_delete">Ta bort inspelningen</string>
|
||||
<string name="recording_context_menu_play">Spela upp</string>
|
||||
<string name="recording_description">Inspelning %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">spelar in</string>
|
||||
<string name="recording_default_name">Spelar in</string>
|
||||
<string name="av_control_stop">Stoppa</string>
|
||||
<string name="map_widget_av_notes">Ljud-/Videoanteckningar</string>
|
||||
<string name="osmand_srtm_short_description_80_chars">OsmAnd-modul för höjdkurvor offline</string>
|
||||
|
@ -1445,7 +1445,7 @@
|
|||
<string name="interrupt_music">Avbryt musik</string>
|
||||
<string name="share_route_as_gpx">Dela rutt som GPX-fil</string>
|
||||
<string name="share_route_subject">Utdelad rutt via OsmAnd</string>
|
||||
<string name="keep_informing_never">Aldrig</string>
|
||||
<string name="keep_informing_never">Endast manuellt (tryck på pilen)</string>
|
||||
<string name="keep_informing_descr">Läs upp navigationsinstruktioner med regelbundna intervall</string>
|
||||
<string name="keep_informing">Upprepa navigationsinstruktioner</string>
|
||||
|
||||
|
@ -1724,7 +1724,7 @@
|
|||
<string name="impassable_road">Undvik vägar …</string>
|
||||
<string name="rendering_category_hide">Dölj</string>
|
||||
<string name="wake_on_voice">Slå på skärmen</string>
|
||||
<string name="wake_on_voice_descr">Slå på skärmen när jag närmar mig en sväng</string>
|
||||
<string name="wake_on_voice_descr">Slå på skärmen (om den är av) när jag närmar mig en sväng</string>
|
||||
<string name="lock_screen_request_explanation">%1$s behöver denna tillåtelse för att stänga av skärmen för strömsparningsfunktionen.</string>
|
||||
<string name="wake_on_voice_never">Aldrig</string>
|
||||
<string name="advanced_settings">Avancerat</string>
|
||||
|
@ -1769,4 +1769,5 @@
|
|||
<string name="voices">Röstprompter</string>
|
||||
<string name="speak_pedestrian">Meddela om övergångsställen</string>
|
||||
<string name="rendering_value__name">Standard</string>
|
||||
<string name="avoid_roads_msg">Du kan ändra rutten genom att markera vägar att undvika</string>
|
||||
</resources>
|
||||
|
|
|
@ -377,7 +377,7 @@
|
|||
<string name="init_native_library">初始化原生函式庫…</string>
|
||||
<string name="choose_auto_follow_route">地圖檢視自動置中</string>
|
||||
<string name="choose_auto_follow_route_descr">一段時間後地圖會移到目前位置</string>
|
||||
<string name="auto_follow_route_never">永不</string>
|
||||
<string name="auto_follow_route_never">永不(輕點藍色箭頭可啟動手動引導)</string>
|
||||
<string name="auto_follow_route_navigation">只有導航時自動置中</string>
|
||||
<string name="auto_follow_route_navigation_descr">只有在導航時,地圖檢視自動置中。</string>
|
||||
<string name="auto_follow_location_enabled">使用地圖檢視自動置中。</string>
|
||||
|
@ -983,7 +983,7 @@
|
|||
<string name="poi_dialog_comment_default">興趣點變更中</string>
|
||||
<string name="poi_dialog_other_tags_message">所有其它的標誌已保存</string>
|
||||
<string name="default_buttons_commit">提交</string>
|
||||
<string name="default_buttons_reset">重置</string>
|
||||
<string name="default_buttons_reset">清除</string>
|
||||
<string name="filter_current_poiButton">篩選</string>
|
||||
<string name="edit_filter_delete_menu_item">刪除</string>
|
||||
<string name="edit_filter_save_as_menu_item">另存</string>
|
||||
|
@ -1547,7 +1547,7 @@
|
|||
<string name="osmo_settings">OpenStreetMap 監控</string>
|
||||
<string name="osmo_settings_descr">組態監控設定值和安裝個人監控頻道</string>
|
||||
<string name="osmo_plugin_description">"OpenStreetMap 進階即時監控,跟蹤其它裝置並進行追蹤,請參閱 http://osmo.mobi。建立匿名群組,分享彼此的位置和交流。它具有各種設定用於連線階段追蹤或持續的追蹤。匿名群組是有限制天數和一些功能,也就是沒有遠端控制和群組管理員。完整的功能需在網站上建立群組,並且只有已註冊的使用者才能進入他們。 "</string>
|
||||
<string name="keep_informing_never">永不</string>
|
||||
<string name="keep_informing_never">只有手動(輕點箭頭)</string>
|
||||
<string name="keep_informing_descr">按照定期間隔重新通報導航指示</string>
|
||||
<string name="keep_informing">重複導航指示</string>
|
||||
<string name="arrival_distance">到達預告</string>
|
||||
|
@ -1824,8 +1824,8 @@
|
|||
<string name="impassable_road">避開的道路…</string>
|
||||
<string name="rendering_attr_tramTrainRoutes_name">有軌電車和火車路線</string>
|
||||
<string name="rendering_category_hide">隱藏</string>
|
||||
<string name="wake_on_voice">開啟螢幕</string>
|
||||
<string name="wake_on_voice_descr">當接近轉彎時,開啟裝置螢幕</string>
|
||||
<string name="wake_on_voice">將螢幕開啟</string>
|
||||
<string name="wake_on_voice_descr">當接近轉彎時,開啟裝置螢幕 (螢幕關閉時)</string>
|
||||
<string name="lock_screen_request_explanation">為了節電作用 %1$s 需要此許可權才能關閉螢幕。</string>
|
||||
<string name="wake_on_voice_never">永不</string>
|
||||
<string name="advanced_settings">進階</string>
|
||||
|
@ -1869,4 +1869,7 @@
|
|||
<string name="show_pedestrian_warnings">顯示行人穿越道</string>
|
||||
<string name="speak_pedestrian">通報行人穿越道</string>
|
||||
<string name="rendering_value__name">預設</string>
|
||||
<string name="navigation_over_track">開始導航覆蓋在軌跡上嗎?</string>
|
||||
<string name="avoid_roads_msg">您可以經由選擇道路,以避免更改路線</string>
|
||||
<string name="save_track_to_gpx_globally_headline">要求軌跡日誌</string>
|
||||
</resources>
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="navigation_over_track">Start navigation over track?</string>
|
||||
<string name="avoid_roads_msg">You can change route by selecting roads to avoid</string>
|
||||
<string name="rendering_value__name">Default</string>
|
||||
<string name="speak_pedestrian">Announce pedestrian crosswalks</string>
|
||||
<string name="rendering_attr_roadStyle_name">Road style</string>
|
||||
|
@ -54,8 +56,8 @@
|
|||
<string name="rendering_attr_tramTrainRoutes_name">Tram and train routes</string>
|
||||
<string name="rendering_attr_subwayMode_name">Subway routes</string>
|
||||
<string name="lock_screen_request_explanation">%1$s needs this permission to turn off the screen for the power saving feature.</string>
|
||||
<string name="wake_on_voice">Turn on the screen</string>
|
||||
<string name="wake_on_voice_descr">Turn on the device screen when approaching a turn</string>
|
||||
<string name="wake_on_voice">Turn screen on</string>
|
||||
<string name="wake_on_voice_descr">Turn on device screen (if off) when approaching a turn</string>
|
||||
<string name="wake_on_voice_never">Never</string>
|
||||
<string name="select_impassable_road">Select on map…</string>
|
||||
<string name="impassable_road">Avoid roads…</string>
|
||||
|
@ -141,6 +143,7 @@
|
|||
<string name="background_service_int">GPS Wake-up interval</string>
|
||||
<string name="enable_sleep_mode">Enable GPS sleep mode</string>
|
||||
<string name="save_track_to_gpx_globally">Log track to GPX file</string>
|
||||
<string name="save_track_to_gpx_globally_headline">On demand track logging</string>
|
||||
<string name="save_track_to_gpx_globally_descr">General position logging to a GPX file can be turned on or off using the GPX recording widget on the map screen</string>
|
||||
<string name="save_current_track_descr">Save current track to SD now</string>
|
||||
<string name="save_current_track">Save current GPX track</string>
|
||||
|
@ -263,7 +266,7 @@
|
|||
<string name="gpx_selection_segment_title">Segment</string>
|
||||
<string name="gpx_selection_number_of_points"> %1$s points</string>
|
||||
<string name="gpx_selection_point">Point %1$s</string>
|
||||
<string name="gpx_selection_current_track">recording</string>
|
||||
<!-- string name="gpx_selection_current_track">recording</string -->
|
||||
<string name="gpx_selection_route_points">%1$s \nRoute points %2$s</string>
|
||||
<string name="gpx_selection_points">%1$s \nPoints</string>
|
||||
<string name="gpx_selection_track">%1$s \nTrack %2$s</string>
|
||||
|
@ -745,7 +748,7 @@
|
|||
<string name="recording_context_menu_delete">Delete recording</string>
|
||||
<string name="recording_context_menu_play">Play</string>
|
||||
<string name="recording_description">Recording %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">recording</string>
|
||||
<string name="recording_default_name">Recording</string>
|
||||
<string name="av_control_stop">Stop</string>
|
||||
<string name="av_control_start">Start</string>
|
||||
<string name="map_widget_av_notes">Audio/video notes</string>
|
||||
|
@ -1344,7 +1347,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
|||
<string name="live_monitoring_interval">Online tracking interval</string>
|
||||
<string name="live_monitoring_url_descr">Specify the web address with parameter syntax: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}</string>
|
||||
<string name="live_monitoring_url">Online tracking web address</string>
|
||||
<string name="gpx_monitoring_disabled_warn">Please enable \'Log track to GPX file\' settings.</string>
|
||||
<string name="gpx_monitoring_disabled_warn">Log track using GPX widget or via \'Trip recording\' settings.</string>
|
||||
<string name="show_current_gpx_title">Show current track</string>
|
||||
<string name="tip_recent_changes_0_7_0_t">Changes in 0.7.0:
|
||||
\n\t- Offline wikipedia data with articles
|
||||
|
@ -1427,8 +1430,8 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
|||
<string name="init_native_library">Initializing native library…</string>
|
||||
<string name="choose_auto_follow_route">Auto-center map view</string>
|
||||
<string name="choose_auto_follow_route_descr">Time until map view synchronizes with current position</string>
|
||||
<string name="auto_follow_route_never">Never</string>
|
||||
<string name="keep_informing_never">Never</string>
|
||||
<string name="auto_follow_route_never">Never (tap blue arrow to start guidance manually)</string>
|
||||
<string name="keep_informing_never">Only manually (tap arrow)</string>
|
||||
<string name="keep_informing_descr">Re-announce navigation instructions at regular intervals</string>
|
||||
<string name="keep_informing">Repeat navigation instructions</string>
|
||||
<string name="auto_follow_route_navigation">Auto-center nav only</string>
|
||||
|
@ -1533,7 +1536,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
|||
<string name="local_indexes_cat_backup">Deactivated</string>
|
||||
<string name="local_indexes_cat_tts">Voice data (TTS)</string>
|
||||
<string name="local_indexes_cat_voice">Voice data (recorded)</string>
|
||||
<string name="local_indexes_cat_gpx">GPX data</string>
|
||||
<!-- string name="local_indexes_cat_gpx">GPX data</string -->
|
||||
<string name="local_indexes_cat_poi">POI data</string>
|
||||
<string name="ttsvoice">TTS voice</string>
|
||||
<string name="search_offline_clear_search">New Search</string>
|
||||
|
@ -2038,7 +2041,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
|||
<string name="poi_dialog_comment_default">POI changing</string>
|
||||
<string name="poi_dialog_other_tags_message">All other tags are preserved</string>
|
||||
<string name="default_buttons_commit">Commit</string>
|
||||
<string name="default_buttons_reset">Reset</string>
|
||||
<string name="default_buttons_reset">Clear</string>
|
||||
<string name="filter_current_poiButton">Filter</string>
|
||||
<string name="edit_filter_delete_menu_item">Delete</string>
|
||||
<string name="edit_filter_save_as_menu_item">Save As</string>
|
||||
|
|
|
@ -51,8 +51,9 @@ public class ApplicationMode {
|
|||
|
||||
static {
|
||||
ApplicationMode[] exceptPedestrianAndDefault = new ApplicationMode[] { CAR, BICYCLE, BOAT, AIRCRAFT };
|
||||
ApplicationMode[] exceptAirBoat = new ApplicationMode[] { DEFAULT, CAR, BICYCLE};
|
||||
ApplicationMode[] exceptAirBoat = new ApplicationMode[] { DEFAULT, CAR, BICYCLE, PEDESTRIAN };
|
||||
ApplicationMode[] pedestrian = new ApplicationMode[] { PEDESTRIAN };
|
||||
ApplicationMode[] pedestrianBicycle = new ApplicationMode[] { PEDESTRIAN, BICYCLE };
|
||||
|
||||
ApplicationMode[] all = null;
|
||||
ApplicationMode[] none = new ApplicationMode[] {};
|
||||
|
@ -69,7 +70,7 @@ public class ApplicationMode {
|
|||
regWidget("speed", exceptPedestrianAndDefault);
|
||||
regWidget("max_speed", CAR);
|
||||
regWidget("gps_info", DEFAULT);
|
||||
regWidget("altitude", BICYCLE);
|
||||
regWidget("altitude", pedestrianBicycle);
|
||||
|
||||
// top
|
||||
regWidget("compass", all);
|
||||
|
|
|
@ -181,6 +181,7 @@ public class FavouritesDbHelper {
|
|||
}
|
||||
if (saveImmediately) {
|
||||
saveCurrentPointsIntoFile();
|
||||
sortAll();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -431,6 +432,9 @@ public class FavouritesDbHelper {
|
|||
for(FavoriteGroup g : favoriteGroups) {
|
||||
Collections.sort(g.points, favoritesComparator);
|
||||
}
|
||||
if(cachedFavoritePoints != null) {
|
||||
Collections.sort(cachedFavoritePoints, favoritesComparator);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ public class GpxSelectionHelper {
|
|||
private void collectDisplayGroups(List<GpxDisplayGroup> dg, GPXFile g) {
|
||||
String name = g.path;
|
||||
if(g.showCurrentTrack){
|
||||
name = getString(R.string.gpx_selection_current_track);
|
||||
name = getString(R.string.gpx_available_current_track);
|
||||
} else {
|
||||
int i = name.lastIndexOf('/');
|
||||
if(i >= 0) {
|
||||
|
@ -324,7 +324,7 @@ public class GpxSelectionHelper {
|
|||
selectedGPXFiles.add(savingTrackHelper.getCurrentTrack());
|
||||
}
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
} catch (Exception e) {
|
||||
app.getSettings().SELECTED_GPX.set("");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -337,10 +337,10 @@ public class GpxSelectionHelper {
|
|||
if(s.gpxFile != null && !s.notShowNavigationDialog) {
|
||||
JSONObject obj = new JSONObject();
|
||||
try {
|
||||
if(!Algorithms.isEmpty(s.gpxFile.path)) {
|
||||
obj.put(FILE, s.gpxFile.path);
|
||||
} else {
|
||||
if(s.isShowCurrentTrack()) {
|
||||
obj.put(CURRENT_TRACK, true);
|
||||
} else if(!Algorithms.isEmpty(s.gpxFile.path)) {
|
||||
obj.put(FILE, s.gpxFile.path);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -410,10 +410,14 @@ public class GpxSelectionHelper {
|
|||
if(gpxFile.tracks.size() > 0) {
|
||||
this.color = gpxFile.tracks.get(0).getColor(0);
|
||||
}
|
||||
processPoints();
|
||||
}
|
||||
|
||||
public void processPoints() {
|
||||
this.processedPointsToDisplay = gpxFile.proccessPoints();
|
||||
if(this.processedPointsToDisplay.isEmpty()) {
|
||||
this.processedPointsToDisplay = gpxFile.processRoutePoints();
|
||||
routePoints = true;
|
||||
routePoints = !this.processedPointsToDisplay.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -437,6 +441,11 @@ public class GpxSelectionHelper {
|
|||
return gpxFile;
|
||||
}
|
||||
|
||||
public GPXFile getModifiableGpxFile() {
|
||||
// call process points after
|
||||
return gpxFile;
|
||||
}
|
||||
|
||||
public boolean isShowCurrentTrack() {
|
||||
return showCurrentTrack;
|
||||
}
|
||||
|
|
|
@ -596,6 +596,8 @@ public class OsmandApplication extends Application {
|
|||
} catch (RuntimeException e) {
|
||||
warnings.add(e.getMessage());
|
||||
}
|
||||
} else {
|
||||
savingTrackHelper.loadGpxFromDatabase();
|
||||
}
|
||||
}
|
||||
if(getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()){
|
||||
|
|
|
@ -885,8 +885,6 @@ public class OsmandSettings {
|
|||
|
||||
public final OsmandPreference<Long> OSMO_LAST_PING = new LongPreference("osmo_last_ping", 0).makeGlobal().cache();
|
||||
|
||||
public final OsmandPreference<Boolean> OSMO_AUTO_SEND_LOCATIONS = new BooleanPreference("osmo_automatically_send_locations", false).makeGlobal();
|
||||
|
||||
public final OsmandPreference<Boolean> OSMO_SEND_LOCATIONS_STATE = new BooleanPreference("osmo_send_locations", false).cache().makeGlobal();
|
||||
|
||||
public final OsmandPreference<Boolean> OSMO_SHOW_GROUP_NOTIFICATIONS = new BooleanPreference("osmo_show_toast_notifications", true).makeGlobal();
|
||||
|
@ -1507,7 +1505,7 @@ public class OsmandSettings {
|
|||
public static final String LAST_SEARCHED_REGION = "last_searched_region"; //$NON-NLS-1$
|
||||
public static final String LAST_SEARCHED_CITY = "last_searched_city"; //$NON-NLS-1$
|
||||
public static final String LAST_SEARCHED_CITY_NAME = "last_searched_city_name"; //$NON-NLS-1$
|
||||
public static final String lAST_SEARCHED_POSTCODE= "last_searched_postcode"; //$NON-NLS-1$
|
||||
public static final String LAST_SEARCHED_POSTCODE= "last_searched_postcode"; //$NON-NLS-1$
|
||||
public static final String LAST_SEARCHED_STREET = "last_searched_street"; //$NON-NLS-1$
|
||||
public static final String LAST_SEARCHED_BUILDING = "last_searched_building"; //$NON-NLS-1$
|
||||
public static final String LAST_SEARCHED_INTERSECTED_STREET = "last_searched_intersected_street"; //$NON-NLS-1$
|
||||
|
@ -1541,7 +1539,7 @@ public class OsmandSettings {
|
|||
|
||||
public boolean setLastSearchedRegion(String region, LatLon l) {
|
||||
SettingsEditor edit = settingsAPI.edit(globalPreferences).putString(LAST_SEARCHED_REGION, region).putLong(LAST_SEARCHED_CITY, -1).
|
||||
putString(LAST_SEARCHED_CITY_NAME, "").putString(lAST_SEARCHED_POSTCODE, "").
|
||||
putString(LAST_SEARCHED_CITY_NAME, "").putString(LAST_SEARCHED_POSTCODE, "").
|
||||
putString(LAST_SEARCHED_STREET,"").putString(LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
if (settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)) {
|
||||
edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$
|
||||
|
@ -1552,12 +1550,12 @@ public class OsmandSettings {
|
|||
}
|
||||
|
||||
public String getLastSearchedPostcode(){
|
||||
return settingsAPI.getString(globalPreferences, lAST_SEARCHED_POSTCODE, null);
|
||||
return settingsAPI.getString(globalPreferences, LAST_SEARCHED_POSTCODE, null);
|
||||
}
|
||||
|
||||
public boolean setLastSearchedPostcode(String postcode, LatLon point){
|
||||
SettingsEditor edit = settingsAPI.edit(globalPreferences).putLong(LAST_SEARCHED_CITY, -1).putString(LAST_SEARCHED_STREET, "").putString( //$NON-NLS-1$
|
||||
LAST_SEARCHED_BUILDING, "").putString(lAST_SEARCHED_POSTCODE, postcode); //$NON-NLS-1$
|
||||
SettingsEditor edit = settingsAPI.edit(globalPreferences).putLong(LAST_SEARCHED_CITY, -1).putString(LAST_SEARCHED_STREET, "") //$NON-NLS-1$
|
||||
.putString(LAST_SEARCHED_BUILDING, "").putString(LAST_SEARCHED_POSTCODE, postcode); //$NON-NLS-1$
|
||||
if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){
|
||||
edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$
|
||||
}
|
||||
|
@ -1576,8 +1574,8 @@ public class OsmandSettings {
|
|||
|
||||
public boolean setLastSearchedCity(Long cityId, String name, LatLon point) {
|
||||
SettingsEditor edit = settingsAPI.edit(globalPreferences).putLong(LAST_SEARCHED_CITY, cityId).putString(LAST_SEARCHED_CITY_NAME, name).
|
||||
putString(LAST_SEARCHED_STREET, "").putString(LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$
|
||||
edit.remove(lAST_SEARCHED_POSTCODE);
|
||||
putString(LAST_SEARCHED_STREET, "").putString(LAST_SEARCHED_BUILDING, "").putString(LAST_SEARCHED_POSTCODE, ""); //$NON-NLS-1$
|
||||
//edit.remove(LAST_SEARCHED_POSTCODE);
|
||||
if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){
|
||||
edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$
|
||||
}
|
||||
|
@ -1870,8 +1868,8 @@ public class OsmandSettings {
|
|||
|
||||
public enum AutoZoomMap {
|
||||
NONE(R.string.auto_zoom_none, 0f, 18),
|
||||
FARTHEST(R.string.auto_zoom_farthest, 1f, 17f),
|
||||
FAR(R.string.auto_zoom_far, 1.4f, 18f),
|
||||
FARTHEST(R.string.auto_zoom_farthest, 1f, 15.5f),
|
||||
FAR(R.string.auto_zoom_far, 1.4f, 17f),
|
||||
CLOSE(R.string.auto_zoom_close, 2f, 19f)
|
||||
;
|
||||
public final float coefficient;
|
||||
|
|
|
@ -639,7 +639,9 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
|
|||
if (info.gpx != null && info.gpx.showCurrentTrack) {
|
||||
catName = info.name;
|
||||
} else {
|
||||
catName = app.getString(R.string.local_indexes_cat_gpx) + " " + info.subfolder;
|
||||
//local_indexes_cat_gpx now obsolete in new UI screen which shows only GPX data
|
||||
//catName = app.getString(R.string.local_indexes_cat_gpx) + " " + info.subfolder;
|
||||
catName = "" + info.subfolder;
|
||||
}
|
||||
int found = -1;
|
||||
// search from end
|
||||
|
@ -809,7 +811,9 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
|
|||
// search from end
|
||||
for (int i = category.size() - 1; i >= 0; i--) {
|
||||
String cat = category.get(i);
|
||||
if (Algorithms.objectEquals(getActivity().getString(R.string.local_indexes_cat_gpx) + " " + g.subfolder, cat)) {
|
||||
//local_indexes_cat_gpx now obsolete in new UI screen which shows only GPX data
|
||||
//if (Algorithms.objectEquals(getActivity().getString(R.string.local_indexes_cat_gpx) + " " + g.subfolder, cat)) {
|
||||
if (Algorithms.objectEquals("" + g.subfolder, cat)) {
|
||||
found = i;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import java.util.ArrayList;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import net.londatiga.android.ActionItem;
|
||||
import net.londatiga.android.QuickAction;
|
||||
import net.osmand.IndexConstants;
|
||||
|
@ -57,14 +59,6 @@ import android.support.v4.widget.DrawerLayout;
|
|||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class MapActivityActions implements DialogProvider {
|
||||
|
||||
|
@ -402,26 +396,49 @@ public class MapActivityActions implements DialogProvider {
|
|||
public void enterRoutePlanningMode(final LatLon from, final String fromName, boolean useCurrentGPX) {
|
||||
List<SelectedGpxFile> selectedGPXFiles = mapActivity.getMyApplication().getSelectedGpxHelper()
|
||||
.getSelectedGPXFiles();
|
||||
GPXFile gpxFile = null;
|
||||
final List<GPXFile> gpxFiles = new ArrayList<GPXFile>();
|
||||
for (SelectedGpxFile gs : selectedGPXFiles) {
|
||||
if (!gs.isShowCurrentTrack() && !gs.notShowNavigationDialog) {
|
||||
if (gs.getGpxFile().hasRtePt() || gs.getGpxFile().hasTrkpt()) {
|
||||
gpxFile = gs.getGpxFile();
|
||||
break;
|
||||
gpxFiles.add(gs.getGpxFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
final GPXFile f = gpxFile;
|
||||
if (gpxFile != null && !useCurrentGPX) {
|
||||
|
||||
if (gpxFiles.size() > 0 && !useCurrentGPX) {
|
||||
Builder bld = new AlertDialog.Builder(mapActivity);
|
||||
if (gpxFiles.size() == 1){
|
||||
bld.setMessage(R.string.use_displayed_track_for_navigation);
|
||||
bld.setPositiveButton(R.string.default_buttons_yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
enterRoutePlanningModeImpl(f, from, fromName);
|
||||
enterRoutePlanningModeImpl(gpxFiles.get(0), from, fromName);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
bld.setTitle(R.string.navigation_over_track);
|
||||
ArrayAdapter<GPXFile> adapter =new ArrayAdapter<GPXFile>(mapActivity, R.layout.drawer_list_item, gpxFiles){
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
if (convertView == null){
|
||||
convertView = mapActivity.getLayoutInflater().inflate(R.layout.drawer_list_item, null);
|
||||
}
|
||||
String path = getItem(position).path;
|
||||
String name = path.substring(path.lastIndexOf("/") + 1,path.length());
|
||||
((TextView)convertView.findViewById(R.id.title)).setText(name);
|
||||
convertView.findViewById(R.id.icon).setVisibility(View.GONE);
|
||||
convertView.findViewById(R.id.check_item).setVisibility(View.GONE);
|
||||
return convertView;
|
||||
}
|
||||
};
|
||||
bld.setAdapter(adapter, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
enterRoutePlanningModeImpl(gpxFiles.get(i), from, fromName);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
bld.setNegativeButton(R.string.default_buttons_no, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
|
@ -430,7 +447,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
});
|
||||
bld.show();
|
||||
} else {
|
||||
enterRoutePlanningModeImpl(useCurrentGPX ? f : null, from, fromName);
|
||||
enterRoutePlanningModeImpl(useCurrentGPX ? gpxFiles.get(0) : null, from, fromName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -606,6 +623,10 @@ public class MapActivityActions implements DialogProvider {
|
|||
}
|
||||
});
|
||||
}
|
||||
refreshDrawer();
|
||||
}
|
||||
|
||||
public void refreshDrawer(){
|
||||
switch (currentDrawer){
|
||||
case MAIN_MENU:
|
||||
prepareOptionsMenu(createMainOptionsMenu());
|
||||
|
@ -879,7 +900,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
}).reg();
|
||||
}
|
||||
final OsmAndLocationProvider loc = app.getLocationProvider();
|
||||
if (app.getTargetPointsHelper().getPointToNavigate() != null || loc.getLocationSimulation().isRouteAnimating()) {
|
||||
// this is development functionality so it should stay preferrably here
|
||||
if (OsmandPlugin.getEnabledPlugin(OsmandDevelopmentPlugin.class) != null) {
|
||||
optionsMenuHelper
|
||||
.item(loc.getLocationSimulation().isRouteAnimating() ? R.string.animate_route_off : R.string.animate_route)
|
||||
|
@ -894,7 +915,6 @@ public class MapActivityActions implements DialogProvider {
|
|||
}
|
||||
}).reg();
|
||||
}
|
||||
}
|
||||
|
||||
OsmandPlugin.registerOptionsMenu(mapActivity, optionsMenuHelper);
|
||||
optionsMenuHelper.item(R.string.exit_Button).icons(R.drawable.ic_action_quit_dark, R.drawable.ic_action_quit_light )
|
||||
|
|
|
@ -217,7 +217,7 @@ public class MapActivityLayers {
|
|||
|
||||
|
||||
|
||||
public void showGPXFileLayer(List<String> files, final OsmandMapTileView mapView) {
|
||||
public AlertDialog showGPXFileLayer(List<String> files, final OsmandMapTileView mapView) {
|
||||
final OsmandSettings settings = getApplication().getSettings();
|
||||
CallbackWithObject<GPXFile[]> callbackWithObject = new CallbackWithObject<GPXFile[]>() {
|
||||
@Override
|
||||
|
@ -243,14 +243,15 @@ public class MapActivityLayers {
|
|||
mapView.getZoom(), true);
|
||||
}
|
||||
mapView.refreshMap();
|
||||
activity.getMapActions().refreshDrawer();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
if (files == null) {
|
||||
GpxUiHelper.selectGPXFile(activity, true, true, callbackWithObject);
|
||||
return GpxUiHelper.selectGPXFile(activity, true, true, callbackWithObject);
|
||||
} else {
|
||||
GpxUiHelper.selectGPXFile(files, activity, true, true, callbackWithObject);
|
||||
return GpxUiHelper.selectGPXFile(files, activity, true, true, callbackWithObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -376,20 +376,23 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
|||
assert track.segments.size() == points.size();
|
||||
if (points.size() == 0 || newSegment) {
|
||||
points.add(new ArrayList<WptPt>());
|
||||
}
|
||||
if(track.segments.size() == 0 || newSegment) {
|
||||
track.segments.add(new TrkSegment());
|
||||
}
|
||||
if (pt != null) {
|
||||
int ind = points.size() - 1;
|
||||
List<WptPt> last = points.get(ind);
|
||||
last.add(pt);
|
||||
track.segments.get(ind).points.add(pt);
|
||||
TrkSegment lt = track.segments.get(track.segments.size() - 1);
|
||||
lt.points.add(pt);
|
||||
}
|
||||
}
|
||||
|
||||
public void insertPointData(double lat, double lon, long time, String description) {
|
||||
final WptPt pt = new WptPt(lat, lon, time, Double.NaN, 0, Double.NaN);
|
||||
pt.name = description;
|
||||
currentTrack.getGpxFile().points.add(pt);
|
||||
currentTrack.getModifiableGpxFile().points.add(pt);
|
||||
execWithClose(updatePointsScript, new Object[] { lat, lon, time, description });
|
||||
}
|
||||
|
||||
|
@ -406,6 +409,15 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public void loadGpxFromDatabase(){
|
||||
Map<String, GPXFile> files = collectRecordedData();
|
||||
for (Map.Entry<String, GPXFile> entry : files.entrySet()){
|
||||
currentTrack.getModifiableGpxFile().points.addAll(entry.getValue().points);
|
||||
currentTrack.getModifiableGpxFile().tracks.addAll(entry.getValue().tracks);
|
||||
}
|
||||
currentTrack.processPoints();
|
||||
}
|
||||
|
||||
public boolean getIsRecording() {
|
||||
return isRecording;
|
||||
}
|
||||
|
|
|
@ -367,6 +367,7 @@ public class SettingsGeneralActivity extends SettingsBaseActivity {
|
|||
if (MORE_VALUE.equals(newValue)) {
|
||||
// listPref.set(oldValue); // revert the change..
|
||||
final Intent intent = new Intent(this, DownloadActivity.class);
|
||||
intent.putExtra(DownloadActivity.TAB_TO_OPEN, DownloadActivity.DOWNLOAD_TAB);
|
||||
intent.putExtra(DownloadActivity.FILTER_CAT, DownloadActivityType.VOICE_FILE.getTag());
|
||||
startActivity(intent);
|
||||
} else {
|
||||
|
|
|
@ -211,7 +211,7 @@ public class SearchAddressFragment extends SherlockFragment {
|
|||
building = null;
|
||||
searchPoint = null;
|
||||
osmandSettings.setLastSearchedBuilding("", null);
|
||||
osmandSettings.setLastSearchedPoint(null);
|
||||
//also empties Point, REMOVES intersecting street
|
||||
updateUI();
|
||||
}
|
||||
});
|
||||
|
@ -223,9 +223,7 @@ public class SearchAddressFragment extends SherlockFragment {
|
|||
building = null;
|
||||
searchPoint = null;
|
||||
osmandSettings.setLastSearchedStreet("", null);
|
||||
osmandSettings.setLastSearchedIntersectedStreet("", null);
|
||||
osmandSettings.setLastSearchedBuilding("", null);
|
||||
osmandSettings.setLastSearchedPoint(null);
|
||||
//also empties Building, (Intersecting Street), Point
|
||||
updateUI();
|
||||
}
|
||||
});
|
||||
|
@ -238,12 +236,8 @@ public class SearchAddressFragment extends SherlockFragment {
|
|||
street2 = null;
|
||||
building = null;
|
||||
searchPoint = null;
|
||||
osmandSettings.setLastSearchedPostcode("", null);
|
||||
osmandSettings.setLastSearchedCity(0L, "", null);
|
||||
osmandSettings.setLastSearchedStreet("", null);
|
||||
osmandSettings.setLastSearchedIntersectedStreet("", null);
|
||||
osmandSettings.setLastSearchedBuilding("", null);
|
||||
osmandSettings.setLastSearchedPoint(null);
|
||||
osmandSettings.setLastSearchedCity(-1L, "", null);
|
||||
//also empties Street, (Intersecting Street), Building, Point, REMOVES Postcode
|
||||
updateUI();
|
||||
}
|
||||
});
|
||||
|
@ -258,12 +252,7 @@ public class SearchAddressFragment extends SherlockFragment {
|
|||
building = null;
|
||||
searchPoint = null;
|
||||
osmandSettings.setLastSearchedRegion("", null);
|
||||
osmandSettings.setLastSearchedPostcode("", null);
|
||||
osmandSettings.setLastSearchedCity(0L, "", null);
|
||||
osmandSettings.setLastSearchedStreet("", null);
|
||||
osmandSettings.setLastSearchedIntersectedStreet("", null);
|
||||
osmandSettings.setLastSearchedBuilding("", null);
|
||||
osmandSettings.setLastSearchedPoint(null);
|
||||
// also empties City, Postcode, Street, (Interseting street), Building, Point
|
||||
updateUI();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -9,6 +9,7 @@ import net.osmand.data.City;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.Street;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
|
||||
import net.osmand.plus.resources.RegionAddressRepository;
|
||||
|
@ -21,6 +22,7 @@ public class SearchBuildingByNameActivity extends SearchByNameAbstractActivity<B
|
|||
private RegionAddressRepository region;
|
||||
private City city;
|
||||
private Street street;
|
||||
private OsmandSettings osmandSettings;
|
||||
|
||||
@Override
|
||||
protected Comparator<? super Building> createComparator() {
|
||||
|
@ -34,6 +36,13 @@ public class SearchBuildingByNameActivity extends SearchByNameAbstractActivity<B
|
|||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void reset() {
|
||||
//This is really only a "clear input text field", hence do not reset settings here
|
||||
//osmandSettings.setLastSearchedBuilding("", null);
|
||||
super.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AsyncTask<Object, ?, ?> getInitializeTask() {
|
||||
return new AsyncTask<Object, Void, List<Building>>(){
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.util.Collection;
|
|||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
//import net.osmand.IProgress;
|
||||
import net.osmand.CollatorStringMatcher;
|
||||
import net.osmand.CollatorStringMatcher.StringMatcherMode;
|
||||
import net.osmand.OsmAndCollator;
|
||||
|
@ -13,6 +14,7 @@ import net.osmand.data.City.CityType;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.resources.RegionAddressRepository;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
@ -29,7 +31,25 @@ public class SearchCityByNameActivity extends SearchByNameAbstractActivity<City>
|
|||
private RegionAddressRepository region;
|
||||
private int searchVillagesMode = -1;
|
||||
private Button searchVillages;
|
||||
private OsmandSettings osmandSettings;
|
||||
|
||||
@Override
|
||||
protected void reset() {
|
||||
//This is really only a "clear input text field", hence do not reset settings here
|
||||
//searchVillagesMode = -1;
|
||||
//osmandSettings.setLastSearchedCity(-1L, "", null);
|
||||
|
||||
//Issue 2535: Try to reload indexes as workaround
|
||||
// This creates the issue immediately after tapping "Reset", but then going back to the searchAdressFragment screen resets the issue and everything works(!?)
|
||||
//new AsyncTask<Void, Void, List<String>>() {
|
||||
// @Override
|
||||
// protected List<String> doInBackground(Void... params) {
|
||||
// return getMyApplication().getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS);
|
||||
// }
|
||||
//}.execute();
|
||||
|
||||
super.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addFooterViews() {
|
||||
|
@ -173,7 +193,8 @@ public class SearchCityByNameActivity extends SearchByNameAbstractActivity<City>
|
|||
@Override
|
||||
public void itemSelected(City obj) {
|
||||
settings.setLastSearchedCity(obj.getId(), obj.getName(region.useEnglishNames()), obj.getLocation());
|
||||
// Hardy: Looks like disabling this fixes the issue of the Search City dialogue becoming non-functional after the first tapping on a found village (not city) ... (while selected village is still remembered on the dialog for future reference!)
|
||||
// Issue 2535: Disabling the next 3 lines fixes the issue of the Search City dialogue becoming non-functional after the first tapping on a found village (not city)
|
||||
// but then the issue is still present once a neighborhood street is selected on the Search Street screen
|
||||
//if (region.getCityById(obj.getId(), obj.getName(region.useEnglishNames())) == null) {
|
||||
// region.addCityToPreloadedList((City) obj);
|
||||
//}
|
||||
|
|
|
@ -7,7 +7,9 @@ import java.util.Comparator;
|
|||
import net.osmand.access.AccessibleToast;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.resources.RegionAddressRepository;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
@ -15,6 +17,7 @@ import android.widget.Toast;
|
|||
|
||||
|
||||
public class SearchRegionByNameActivity extends SearchByNameAbstractActivity<RegionAddressRepository> {
|
||||
private OsmandSettings osmandSettings;
|
||||
|
||||
@Override
|
||||
protected Comparator<? super RegionAddressRepository> createComparator() {
|
||||
|
@ -28,6 +31,13 @@ public class SearchRegionByNameActivity extends SearchByNameAbstractActivity<Reg
|
|||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void reset() {
|
||||
//This is really only a "clear input text field", hence do not reset settings here
|
||||
//osmandSettings.setLastSearchedRegion("", null);
|
||||
super.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LatLon getLocation(RegionAddressRepository item) {
|
||||
return item.getEstimatedRegionCenter();
|
||||
|
@ -47,7 +57,8 @@ public class SearchRegionByNameActivity extends SearchByNameAbstractActivity<Reg
|
|||
|
||||
@Override
|
||||
public String getText(RegionAddressRepository obj) {
|
||||
return obj.getName().replace('_', ' ');
|
||||
return FileNameTranslationHelper.getFileName(this,
|
||||
getMyApplication().getResourceManager().getOsmandRegions(), obj.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -7,6 +7,7 @@ import net.osmand.data.City;
|
|||
import net.osmand.data.MapObject.MapObjectComparator;
|
||||
import net.osmand.data.Street;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
|
||||
import net.osmand.plus.resources.RegionAddressRepository;
|
||||
|
@ -17,12 +18,20 @@ public class SearchStreet2ByNameActivity extends SearchByNameAbstractActivity<St
|
|||
private RegionAddressRepository region;
|
||||
private City cityOrPostcode;
|
||||
private Street street1;
|
||||
private OsmandSettings osmandSettings;
|
||||
|
||||
@Override
|
||||
protected Comparator<? super Street> createComparator() {
|
||||
return new MapObjectComparator(getMyApplication().getSettings().usingEnglishNames());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void reset() {
|
||||
//This is really only a "clear input text field", hence do not reset settings here
|
||||
//osmandSettings.setLastSearchedIntersectedStreet("", null);
|
||||
super.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AsyncTask<Object, ?, ?> getInitializeTask() {
|
||||
return new AsyncTask<Object, Void, List<Street>>(){
|
||||
|
|
|
@ -15,6 +15,7 @@ import net.osmand.data.MapObject.MapObjectComparator;
|
|||
import net.osmand.data.Street;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
|
||||
import net.osmand.plus.resources.RegionAddressRepository;
|
||||
|
@ -33,6 +34,7 @@ public class SearchStreetByNameActivity extends SearchByNameAbstractActivity<Str
|
|||
private City city;
|
||||
private Button searchAllStrets;
|
||||
private int searchWithCity = -1; // -1 - default, 0 - filter city, 1 - deep search
|
||||
private OsmandSettings osmandSettings;
|
||||
|
||||
@Override
|
||||
protected Comparator<? super Street> createComparator() {
|
||||
|
@ -51,11 +53,12 @@ public class SearchStreetByNameActivity extends SearchByNameAbstractActivity<Str
|
|||
|
||||
@Override
|
||||
protected void reset() {
|
||||
searchWithCity = -1;
|
||||
//This is really only a "clear input text field", hence do not reset settings here
|
||||
//searchWithCity = -1;
|
||||
//osmandSettings.setLastSearchedStreet("", null);
|
||||
super.reset();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void addFooterViews() {
|
||||
final FrameLayout ll = new FrameLayout(this);
|
||||
|
@ -214,7 +217,7 @@ public class SearchStreetByNameActivity extends SearchByNameAbstractActivity<Str
|
|||
@Override
|
||||
public void itemSelected(Street obj) {
|
||||
if(!Algorithms.objectEquals(settings.getLastSearchedCity(), obj.getCity().getId())) {
|
||||
settings.setLastSearchedCity(obj.getCity().getId(), obj.getCity().getName(), obj.getLocation());
|
||||
settings.setLastSearchedCity(obj.getCity().getId(), obj.getCity().getName(region.useEnglishNames()), obj.getLocation());
|
||||
}
|
||||
settings.setLastSearchedStreet(obj.getName(region.useEnglishNames()), obj.getLocation());
|
||||
// if(obj.getBuildings().size() == 0){
|
||||
|
|
|
@ -185,8 +185,9 @@ public class SQLiteAPIImpl implements SQLiteAPI {
|
|||
|
||||
@Override
|
||||
public SQLiteConnection openByAbsolutePath(String path, boolean readOnly) {
|
||||
// fix http://stackoverflow.com/questions/26937152/workaround-for-nexus-9-sqlite-file-write-operations-on-external-dirs
|
||||
android.database.sqlite.SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,
|
||||
readOnly? SQLiteDatabase.OPEN_READONLY : SQLiteDatabase.OPEN_READWRITE);
|
||||
readOnly? SQLiteDatabase.OPEN_READONLY : (SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING));
|
||||
if(db == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -507,7 +507,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
private void defaultAction(final MapActivity mapActivity) {
|
||||
public void defaultAction(final MapActivity mapActivity) {
|
||||
final Location loc = app.getLocationProvider().getLastKnownLocation();
|
||||
// double lat = mapActivity.getMapView().getLatitude();
|
||||
// double lon = mapActivity.getMapView().getLongitude();
|
||||
|
@ -592,6 +592,15 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
|||
stopRecording(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mapActivityResume(MapActivity activity) {
|
||||
this.activity = activity;;
|
||||
}
|
||||
|
||||
public MapActivity getActivity() {
|
||||
return activity;
|
||||
}
|
||||
|
||||
public void recordVideo(final double lat, final double lon, final MapActivity mapActivity) {
|
||||
if (AV_EXTERNAL_RECORDER.get()) {
|
||||
captureVideoExternal(lat, lon, mapActivity);
|
||||
|
|
|
@ -11,9 +11,11 @@ public class MediaRemoteControlReceiver extends BroadcastReceiver {
|
|||
public void onReceive(Context context, Intent intent) {
|
||||
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
|
||||
AudioVideoNotesPlugin plugin = OsmandPlugin.getEnabledPlugin(AudioVideoNotesPlugin.class);
|
||||
if(plugin != null && intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) {
|
||||
if(plugin != null && intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null &&
|
||||
plugin.getActivity() != null) {
|
||||
// System.out.println("OsmAnd AV Button pressed " + intent.getIntExtra(Intent.EXTRA_KEY_EVENT, 0));
|
||||
// Toast.makeText(context, "Button pressed " + intent.getIntExtra(Intent.EXTRA_KEY_EVENT, 0), Toast.LENGTH_LONG).show();
|
||||
plugin.defaultAction(plugin.getActivity());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -197,7 +197,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
|
|||
// decrease a bit
|
||||
zdelta += 1;
|
||||
}
|
||||
double targetZoom = Math.max(tb.getZoom() + tb.getZoomFloatPart() + zdelta, settings.AUTO_ZOOM_MAP.get().maxZoom);
|
||||
double targetZoom = Math.min(tb.getZoom() + tb.getZoomFloatPart() + zdelta, settings.AUTO_ZOOM_MAP.get().maxZoom);
|
||||
int threshold = settings.AUTO_FOLLOW_ROUTE.get();
|
||||
if (now - lastTimeAutoZooming > 4500 && (now - lastTimeAutoZooming > threshold || !isUserZoomed)) {
|
||||
isUserZoomed = false;
|
||||
|
|
|
@ -2,7 +2,12 @@ package net.osmand.plus.dashboard;
|
|||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Point;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.*;
|
||||
import android.widget.ImageView;
|
||||
import net.osmand.data.LatLon;
|
||||
|
@ -20,6 +25,7 @@ import net.osmand.plus.views.MapTextLayer;
|
|||
import net.osmand.plus.views.OsmAndMapSurfaceView;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.widget.Button;
|
||||
|
@ -33,6 +39,8 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
|
|||
|
||||
public static final String TAG = "DASH_MAP_FRAGMENT";
|
||||
|
||||
private Paint paintBmp;
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
@ -43,6 +51,10 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
|
|||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
getMyApplication().getResourceManager().getMapTileDownloader().addDownloaderCallback(this);
|
||||
paintBmp = new Paint();
|
||||
paintBmp.setAntiAlias(true);
|
||||
paintBmp.setFilterBitmap(true);
|
||||
paintBmp.setDither(true);
|
||||
}
|
||||
|
||||
protected void startMapActivity() {
|
||||
|
@ -74,17 +86,36 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
|
|||
return view;
|
||||
}
|
||||
|
||||
private void setMapImage(View view) {
|
||||
if (view == null) {
|
||||
return;
|
||||
}
|
||||
final Bitmap image = getMyApplication().getResourceManager().getRenderer().getBitmap();
|
||||
final ImageView map = (ImageView) view.findViewById(R.id.map_image);
|
||||
if (image != null) {
|
||||
private void setMapImage(final Bitmap image) {
|
||||
final View view = getView();
|
||||
if (view != null && image != null) {
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
map.setImageBitmap(image);
|
||||
final ImageView mapView = (ImageView) view.findViewById(R.id.map_image);
|
||||
mapView.setImageDrawable(new Drawable(){
|
||||
|
||||
@Override
|
||||
public void draw(Canvas canvas) {
|
||||
// int h = mapView.getHeight();
|
||||
// int w = mapView.getWidth();
|
||||
canvas.drawBitmap(image, 0, 0, paintBmp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAlpha(int alpha) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColorFilter(ColorFilter cf) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOpacity() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -133,23 +164,38 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
|
|||
ResourceManager mgr = getMyApplication().getResourceManager();
|
||||
mgr.tileDownloaded(request);
|
||||
}
|
||||
setMapImage(getView());
|
||||
setMapImage(getMyApplication().getResourceManager().getRenderer().getBitmap());
|
||||
}
|
||||
|
||||
private void updateMapImage() {
|
||||
MapRenderRepositories repositories = getMyApplication().getResourceManager().getRenderer();
|
||||
if(repositories.getBitmap() != null) {
|
||||
setMapImage(repositories.getBitmap());
|
||||
} else {
|
||||
|
||||
LatLon lm = getMyApplication().getSettings().getLastKnownMapLocation();
|
||||
int zm = getMyApplication().getSettings().getLastKnownMapZoom();
|
||||
|
||||
WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
|
||||
Display display = wm.getDefaultDisplay();
|
||||
int height = (int) getActivity().getResources().getDimension(R.dimen.dashMapHeight);
|
||||
int width = display.getWidth();
|
||||
final Point pnt = new Point();
|
||||
display.getSize(pnt);
|
||||
int height = pnt.y; // (int) getActivity().getResources().getDimension(R.dimen.dashMapHeight);
|
||||
int width = pnt.x;// display.getWidth();
|
||||
|
||||
RotatedTileBox rotatedTileBox = new RotatedTileBox.RotatedTileBoxBuilder().
|
||||
setZoom(zm).setLocation(lm.getLatitude(), lm.getLongitude()).
|
||||
setPixelDimensions(width, height).build();
|
||||
repositories.loadMap(rotatedTileBox,
|
||||
getMyApplication().getResourceManager().getMapTileDownloader().getDownloaderCallbacks());
|
||||
WindowManager mgr = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
|
||||
DisplayMetrics dm = new DisplayMetrics();
|
||||
mgr.getDefaultDisplay().getMetrics(dm);
|
||||
RotatedTileBox currentViewport = new RotatedTileBox.RotatedTileBoxBuilder().setZoom(zm)
|
||||
.setLocation(lm.getLatitude(), lm.getLongitude()).setPixelDimensions(width, height).build();
|
||||
currentViewport.setDensity(dm.density);
|
||||
currentViewport.setMapDensity(getSettingsMapDensity(dm.density));
|
||||
repositories.loadMap(currentViewport, getMyApplication().getResourceManager().getMapTileDownloader()
|
||||
.getDownloaderCallbacks());
|
||||
}
|
||||
}
|
||||
|
||||
public double getSettingsMapDensity(double density) {
|
||||
return (getMyApplication().getSettings().MAP_DENSITY.get()) * Math.max(1, density);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,6 +74,9 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
long javaTotal = Runtime.getRuntime().totalMemory() / (1024*1024l);
|
||||
long dalvikSize = android.os.Debug.getNativeHeapAllocatedSize() / (1024*1024l);
|
||||
pref.setSummary(getString(R.string.global_app_allocated_memory_descr, javaAvailMem, javaTotal, dalvikSize));
|
||||
pref.setEnabled(false);
|
||||
//Use setEnabled(false) only, this way you can produce more contrast by/while tapping it when needed
|
||||
//pref.setSelectable(false);
|
||||
cat.addPreference(pref);
|
||||
|
||||
// ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
|
||||
|
@ -87,6 +90,9 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
pref.setSummary(getString(R.string.native_app_allocated_memory_descr
|
||||
, mem.nativePrivateDirty / 1024, mem.dalvikPrivateDirty / 1024 , mem.otherPrivateDirty / 1024
|
||||
, mem.nativePss / 1024, mem.dalvikPss / 1024 , mem.otherPss / 1024));
|
||||
pref.setEnabled(false);
|
||||
//Use setEnabled(false) only, this way you can produce more contrast by/while tapping it when needed
|
||||
//pref.setSelectable(false);
|
||||
cat.addPreference(pref);
|
||||
|
||||
|
||||
|
@ -101,6 +107,9 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
pref.setSummary(getString(R.string.day_night_info_description, "null",
|
||||
"null"));
|
||||
}
|
||||
pref.setEnabled(false);
|
||||
//Use setEnabled(false) only, this way you can produce more contrast by/while tapping it when needed
|
||||
//pref.setSelectable(false);
|
||||
cat.addPreference(pref);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import net.osmand.plus.OsmandApplication;
|
|||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.PoiFilter;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.SettingsActivity;
|
||||
|
@ -103,11 +104,10 @@ public class ConfigureMapMenu {
|
|||
@Override
|
||||
public boolean onRowItemClick(ArrayAdapter<?> adapter, View view, int itemId, int pos) {
|
||||
if(itemId == R.string.layer_poi && cm.getSelection(pos) == 1) {
|
||||
ma.getMapLayers().selectPOIFilterLayer(ma.getMapView(), null);
|
||||
selectPOILayer(ma.getMyApplication().getSettings());
|
||||
return false;
|
||||
} else if(itemId == R.string.layer_gpx_layer && cm.getSelection(pos) == 1) {
|
||||
ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView());
|
||||
// TODO: tick mark of "Show GPX" needs to be synced after return form sub-selection screen (user may or may not have selected files!)
|
||||
return false;
|
||||
} else {
|
||||
return super.onRowItemClick(adapter, view, itemId, pos);
|
||||
|
@ -115,13 +115,14 @@ public class ConfigureMapMenu {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
|
||||
OsmandSettings settings = ma.getMyApplication().getSettings();
|
||||
public boolean onContextMenuClick(final ArrayAdapter<?> adapter, int itemId, final int pos, boolean isChecked) {
|
||||
final OsmandSettings settings = ma.getMyApplication().getSettings();
|
||||
if (itemId == R.string.layer_poi) {
|
||||
if (isChecked) {
|
||||
ma.getMapLayers().selectPOIFilterLayer(ma.getMapView(), null);
|
||||
}
|
||||
settings.SHOW_POI_OVER_MAP.set(isChecked);
|
||||
if (isChecked) {
|
||||
selectPOILayer(settings);
|
||||
}
|
||||
|
||||
} else if (itemId == R.string.layer_amenity_label) {
|
||||
settings.SHOW_POI_LABEL.set(isChecked);
|
||||
} else if (itemId == R.string.layer_favorites) {
|
||||
|
@ -130,9 +131,15 @@ public class ConfigureMapMenu {
|
|||
if (ma.getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles()) {
|
||||
ma.getMyApplication().getSelectedGpxHelper().clearAllGpxFileToShow();
|
||||
} else {
|
||||
ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView());
|
||||
AlertDialog dialog = ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView());
|
||||
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialogInterface) {
|
||||
cm.setSelection(pos, 0);
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
// TODO: tick mark of "Show GPX" needs to be synced after return form sub-selection screen (user may or may not have selected files!)
|
||||
} else if (itemId == R.string.layer_transport_route) {
|
||||
ma.getMapLayers().getTransportInfoLayer().setVisible(isChecked);
|
||||
}
|
||||
|
@ -140,6 +147,21 @@ public class ConfigureMapMenu {
|
|||
ma.getMapView().refreshMap();
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void selectPOILayer(final OsmandSettings settings) {
|
||||
final PoiFilter[] selected = new PoiFilter[1];
|
||||
AlertDialog dlg = ma.getMapLayers().selectPOIFilterLayer(ma.getMapView(), selected);
|
||||
dlg.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if(selected[0] == null) {
|
||||
settings.SHOW_POI_OVER_MAP.set(selected[0] != null);
|
||||
}
|
||||
ma.getMapActions().refreshDrawer();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void createLayersItems(ContextMenuAdapter adapter , MapActivity activity) {
|
||||
|
|
|
@ -6,7 +6,6 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import android.app.FragmentManager;
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
|
@ -51,6 +50,7 @@ public class DownloadActivity extends BaseDownloadActivity {
|
|||
private String initialFilter = "";
|
||||
private boolean singleTab;
|
||||
|
||||
|
||||
public static final String FILTER_KEY = "filter";
|
||||
public static final String FILTER_CAT = "filter_cat";
|
||||
|
||||
|
@ -59,6 +59,7 @@ public class DownloadActivity extends BaseDownloadActivity {
|
|||
public static final String DOWNLOAD_TAB = "download";
|
||||
public static final String UPDATES_TAB = "updates";
|
||||
public static final String SINGLE_TAB = "SINGLE_TAB";
|
||||
private List<DownloadActivityType> downloadTypes = new ArrayList<DownloadActivityType>();
|
||||
|
||||
|
||||
@Override
|
||||
|
@ -134,9 +135,8 @@ public class DownloadActivity extends BaseDownloadActivity {
|
|||
|
||||
});
|
||||
|
||||
final List<DownloadActivityType> downloadTypes = getDownloadTypes();
|
||||
downloadTypes = createDownloadTypes();
|
||||
final Intent intent = getIntent();
|
||||
setType(downloadTypes.get(0));
|
||||
if (intent != null && intent.getExtras() != null) {
|
||||
final String filter = intent.getExtras().getString(FILTER_KEY);
|
||||
if (filter != null) {
|
||||
|
@ -147,12 +147,12 @@ public class DownloadActivity extends BaseDownloadActivity {
|
|||
if (filterCat != null) {
|
||||
DownloadActivityType type = DownloadActivityType.getIndexType(filterCat.toLowerCase());
|
||||
if (type != null) {
|
||||
setType(type);
|
||||
downloadTypes.remove(type);
|
||||
downloadTypes.add(0, type);
|
||||
}
|
||||
}
|
||||
}
|
||||
changeType(downloadTypes.get(0));
|
||||
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
@ -195,8 +195,6 @@ public class DownloadActivity extends BaseDownloadActivity {
|
|||
return localIndexInfos;
|
||||
}
|
||||
|
||||
public void setType(DownloadActivityType type) { this.type = type;}
|
||||
|
||||
public void changeType(final DownloadActivityType tp) {
|
||||
//invalidateOptionsMenu();
|
||||
if (downloadListIndexThread != null && type != tp) {
|
||||
|
@ -339,7 +337,12 @@ public class DownloadActivity extends BaseDownloadActivity {
|
|||
// }
|
||||
}
|
||||
|
||||
|
||||
public List<DownloadActivityType> getDownloadTypes() {
|
||||
return downloadTypes;
|
||||
}
|
||||
|
||||
public List<DownloadActivityType> createDownloadTypes() {
|
||||
List<DownloadActivityType> items = new ArrayList<DownloadActivityType>();
|
||||
items.add(DownloadActivityType.NORMAL_FILE);
|
||||
items.add(DownloadActivityType.VOICE_FILE);
|
||||
|
|
|
@ -48,7 +48,6 @@ public class AvoidSpecificRoads {
|
|||
|
||||
public ArrayAdapter<RouteDataObject> createAdapter(final MapActivity ctx) {
|
||||
final ArrayList<RouteDataObject> points = new ArrayList<RouteDataObject>();
|
||||
points.add(new RouteDataObject((RouteRegion) null));
|
||||
points.addAll(missingRoads);
|
||||
final LatLon mapLocation = ctx.getMapLocation();
|
||||
return new ArrayAdapter<RouteDataObject>(ctx,
|
||||
|
@ -58,26 +57,21 @@ public class AvoidSpecificRoads {
|
|||
public View getView(final int position, View convertView, ViewGroup parent) {
|
||||
// User super class to create the View
|
||||
View v = convertView;
|
||||
if (position == 0) {
|
||||
v= ctx.getLayoutInflater().inflate(R.layout.list_bigtextview, null);
|
||||
TextView tv = (TextView) v.findViewById(R.id.Text);
|
||||
tv.setText(app.getString(R.string.select_impassable_road));
|
||||
} else {
|
||||
if (v == null || v.findViewById(R.id.info_close) == null) {
|
||||
v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null);
|
||||
}
|
||||
final RouteDataObject obj = getItem(position);
|
||||
v.findViewById(R.id.all_points).setVisibility(View.GONE);
|
||||
((ImageView) v.findViewById(R.id.waypoint_icon)).setImageResource(app.getSettings().isLightContentMenu()?
|
||||
((ImageView) v.findViewById(R.id.waypoint_icon)).setImageResource(app.getSettings().isLightContentMenu() ?
|
||||
R.drawable.ic_action_road_works_light : R.drawable.ic_action_road_works_dark);
|
||||
double dist = MapUtils.getDistance(mapLocation, MapUtils.get31LatitudeY(obj.getPoint31YTile(0)) ,
|
||||
double dist = MapUtils.getDistance(mapLocation, MapUtils.get31LatitudeY(obj.getPoint31YTile(0)),
|
||||
MapUtils.get31LongitudeX(obj.getPoint31XTile(0)));
|
||||
((TextView)v.findViewById(R.id.waypoint_dist)).setText(OsmAndFormatter.getFormattedDistance((float) dist, app));
|
||||
((TextView) v.findViewById(R.id.waypoint_dist)).setText(OsmAndFormatter.getFormattedDistance((float) dist, app));
|
||||
|
||||
((TextView)v.findViewById(R.id.waypoint_text)).setText(getText(obj));
|
||||
((TextView) v.findViewById(R.id.waypoint_text)).setText(getText(obj));
|
||||
ImageButton remove = (ImageButton) v.findViewById(R.id.info_close);
|
||||
remove.setVisibility(View.VISIBLE);
|
||||
remove.setImageResource(app.getSettings().isLightContentMenu()?
|
||||
remove.setImageResource(app.getSettings().isLightContentMenu() ?
|
||||
R.drawable.ic_action_gremove_light : R.drawable.ic_action_gremove_dark);
|
||||
remove.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
|
@ -87,13 +81,11 @@ public class AvoidSpecificRoads {
|
|||
getBuilder().removeImpassableRoad(obj);
|
||||
notifyDataSetChanged();
|
||||
RoutingHelper rh = app.getRoutingHelper();
|
||||
if(rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
|
||||
if (rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
|
||||
rh.recalculateRouteDueToSettingsChange();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -109,23 +101,29 @@ public class AvoidSpecificRoads {
|
|||
public void showDialog(final MapActivity mapActivity) {
|
||||
Builder bld = new AlertDialog.Builder(mapActivity);
|
||||
bld.setTitle(R.string.impassable_road);
|
||||
if (missingRoads.size() == 0){
|
||||
bld.setMessage(R.string.avoid_roads_msg);
|
||||
} else {
|
||||
final ArrayAdapter<?> listAdapter = createAdapter(mapActivity);
|
||||
bld.setAdapter(listAdapter, new DialogInterface.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if(which == 0) {
|
||||
selectFromMap(mapActivity);
|
||||
} else {
|
||||
RouteDataObject obj = missingRoads.get(which - 1);
|
||||
double lat = MapUtils.get31LatitudeY(obj.getPoint31YTile(0));
|
||||
double lon = MapUtils.get31LongitudeX(obj.getPoint31XTile(0));
|
||||
showOnMap(app, mapActivity, lat, lon, getText(obj), dialog);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
bld.setPositiveButton(R.string.close, null);
|
||||
}
|
||||
|
||||
bld.setPositiveButton(R.string.select_impassable_road, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
selectFromMap(mapActivity);
|
||||
}
|
||||
});
|
||||
bld.setNegativeButton(R.string.default_buttons_cancel, null);
|
||||
bld.show();
|
||||
}
|
||||
|
||||
|
|
|
@ -3,13 +3,13 @@ package net.osmand.plus.helpers;
|
|||
import android.content.Context;
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
/**
|
||||
* Created by Barsik on 07.07.2014.
|
||||
* Created by Barsik
|
||||
* on 07.07.2014.
|
||||
*/
|
||||
public class FileNameTranslationHelper {
|
||||
|
||||
|
|
|
@ -105,16 +105,16 @@ public class GpxUiHelper {
|
|||
|
||||
// 4. Elevation, eleUp, eleDown, if recorded
|
||||
if (analysis.isElevationSpecified()) {
|
||||
description.append("<br/>");
|
||||
description.append(nl);
|
||||
description.append(app.getString(R.string.gpx_info_avg_altitude,
|
||||
getColorValue(speedClr, OsmAndFormatter.getFormattedAlt(analysis.avgElevation, app), html)));
|
||||
description.append("<br/>");
|
||||
description.append(nl);
|
||||
String min = getColorValue(descClr, OsmAndFormatter.getFormattedAlt(analysis.minElevation, app), html);
|
||||
String max = getColorValue(ascClr, OsmAndFormatter.getFormattedAlt(analysis.maxElevation, app), html);
|
||||
String asc = getColorValue(ascClr, OsmAndFormatter.getFormattedAlt(analysis.diffElevationUp, app), html);
|
||||
String desc = getColorValue(descClr, OsmAndFormatter.getFormattedAlt(analysis.diffElevationDown, app), html);
|
||||
description.append(app.getString(R.string.gpx_info_diff_altitude,min +" - " + max ));
|
||||
description.append("<br/>");
|
||||
description.append(nl);
|
||||
description.append(app.getString(R.string.gpx_info_asc_altitude,"\u2193 " + desc + " \u2191 " + asc + ""));
|
||||
}
|
||||
|
||||
|
@ -122,8 +122,8 @@ public class GpxUiHelper {
|
|||
if(analysis.isSpeedSpecified()){
|
||||
String avg = getColorValue(speedClr, OsmAndFormatter.getFormattedSpeed(analysis.avgSpeed, app), html);
|
||||
String max = getColorValue(ascClr, OsmAndFormatter.getFormattedSpeed(analysis.maxSpeed, app), html);
|
||||
description.append("<br/>").append(app.getString(R.string.gpx_info_average_speed,avg));
|
||||
description.append("<br/>").append(app.getString(R.string.gpx_info_maximum_speed,max));
|
||||
description.append(nl).append(app.getString(R.string.gpx_info_average_speed,avg));
|
||||
description.append(nl).append(app.getString(R.string.gpx_info_maximum_speed,max));
|
||||
}
|
||||
return description.toString();
|
||||
}
|
||||
|
@ -141,7 +141,8 @@ public class GpxUiHelper {
|
|||
if(showCurrentGpx){
|
||||
allGpxList.add(0, activity.getString(R.string.show_current_gpx_title));
|
||||
}
|
||||
final ContextMenuAdapter adapter = createGpxContextMenuAdapter(activity, allGpxList, selectedGpxList, multipleChoice);
|
||||
final ContextMenuAdapter adapter = createGpxContextMenuAdapter(activity, allGpxList, selectedGpxList, multipleChoice,
|
||||
showCurrentGpx);
|
||||
|
||||
return createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, allGpxList, adapter);
|
||||
}
|
||||
|
@ -161,14 +162,16 @@ public class GpxUiHelper {
|
|||
list.add(0, activity.getString(R.string.show_current_gpx_title));
|
||||
}
|
||||
|
||||
final ContextMenuAdapter adapter = createGpxContextMenuAdapter(activity, list, null, multipleChoice);
|
||||
final ContextMenuAdapter adapter = createGpxContextMenuAdapter(activity, list, null, multipleChoice,
|
||||
showCurrentGpx);
|
||||
return createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, list, adapter);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static ContextMenuAdapter createGpxContextMenuAdapter(Activity activity, List<String> allGpxList,
|
||||
List<String> selectedGpxList, boolean multipleChoice) {
|
||||
List<String> selectedGpxList, boolean multipleChoice,
|
||||
boolean showCurrentTrack) {
|
||||
final ContextMenuAdapter adapter = new ContextMenuAdapter(activity);
|
||||
//element position in adapter
|
||||
int i = 0;
|
||||
|
@ -184,6 +187,20 @@ public class GpxUiHelper {
|
|||
|
||||
//if there's some selected files - need to mark them as selected
|
||||
if (selectedGpxList != null) {
|
||||
updateSelection(selectedGpxList, showCurrentTrack, adapter, i, fileName);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return adapter;
|
||||
}
|
||||
|
||||
protected static void updateSelection(List<String> selectedGpxList, boolean showCurrentTrack,
|
||||
final ContextMenuAdapter adapter, int i, String fileName) {
|
||||
if(i == 0 && showCurrentTrack) {
|
||||
if(selectedGpxList.contains("")) {
|
||||
adapter.setSelection(i, 1);
|
||||
}
|
||||
} else {
|
||||
for (String file : selectedGpxList) {
|
||||
if (file.endsWith(fileName)) {
|
||||
adapter.setSelection(i, 1);
|
||||
|
@ -191,9 +208,6 @@ public class GpxUiHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return adapter;
|
||||
}
|
||||
|
||||
private static void setDescripionInDialog(final ArrayAdapter<?> adapter, final ContextMenuAdapter cmAdapter, Activity activity,
|
||||
|
|
|
@ -49,6 +49,10 @@ public class WaypointHelper {
|
|||
private static final int SHORT_ANNOUNCE_RADIUS = 150;
|
||||
private static final int ALARMS_ANNOUNCE_RADIUS = 150;
|
||||
|
||||
// don't annoy users by lots of announcements
|
||||
private static final int APPROACH_POI_LIMIT = 3;
|
||||
private static final int ANNOUNCE_POI_LIMIT = 3;
|
||||
|
||||
OsmandApplication app;
|
||||
// every time we modify this collection, we change the reference (copy on write list)
|
||||
public static final int TARGETS = 0;
|
||||
|
@ -342,6 +346,9 @@ public class WaypointHelper {
|
|||
kIterator++;
|
||||
}
|
||||
if (!announcePoints.isEmpty()) {
|
||||
if(announcePoints.size() > ANNOUNCE_POI_LIMIT) {
|
||||
announcePoints = announcePoints.subList(0, ANNOUNCE_POI_LIMIT);
|
||||
}
|
||||
if (type == WAYPOINTS) {
|
||||
getVoiceRouter().announceWaypoint(announcePoints);
|
||||
} else if (type == POI) {
|
||||
|
@ -353,6 +360,9 @@ public class WaypointHelper {
|
|||
}
|
||||
}
|
||||
if (!approachPoints.isEmpty()) {
|
||||
if(approachPoints.size() > APPROACH_POI_LIMIT) {
|
||||
approachPoints = approachPoints.subList(0, APPROACH_POI_LIMIT);
|
||||
}
|
||||
if (type == WAYPOINTS) {
|
||||
getVoiceRouter().approachWaypoint(lastKnownLocation, approachPoints);
|
||||
} else if (type == POI) {
|
||||
|
|
|
@ -60,7 +60,11 @@ public class SettingsMonitoringActivity extends SettingsBaseActivity {
|
|||
grp.addPreference(cat);
|
||||
|
||||
Preference globalrecord = new Preference(this);
|
||||
globalrecord.setTitle(R.string.save_track_to_gpx_globally_headline);
|
||||
globalrecord.setSummary(R.string.save_track_to_gpx_globally_descr);
|
||||
globalrecord.setEnabled(false);
|
||||
//Use setEnabled(false) only, this way you can produce more contrast by/while tapping it when needed
|
||||
//globalrecord.setSelectable(false);
|
||||
cat.addPreference(globalrecord);
|
||||
|
||||
if(settings.SAVE_GLOBAL_TRACK_REMEMBER.get()) {
|
||||
|
|
|
@ -81,7 +81,7 @@ public class OsMoControlDevice implements OsMoReactor {
|
|||
app.getNavigationService().stopIfNeeded(app,NavigationService.USED_BY_LIVE);
|
||||
}
|
||||
} else if(data.equals("START_TRACKING")) {
|
||||
tracker.enableTracker();
|
||||
tracker.enableTrackerCmd();
|
||||
app.startNavigationService(NavigationService.USED_BY_LIVE);
|
||||
//interval setting not needed here, handled centrally in app.startNavigationService
|
||||
//app.getSettings().SERVICE_OFF_INTERVAL.set(0);
|
||||
|
|
|
@ -71,7 +71,6 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer
|
|||
this.app = app;
|
||||
service = new OsMoService(app, this);
|
||||
tracker = new OsMoTracker(service, app.getSettings().OSMO_SAVE_TRACK_INTERVAL,
|
||||
app.getSettings().OSMO_AUTO_SEND_LOCATIONS,
|
||||
app.getSettings().OSMO_SEND_LOCATIONS_STATE);
|
||||
deviceControl = new OsMoControlDevice(app, this, service, tracker);
|
||||
groups = new OsMoGroups(this, service, tracker, app);
|
||||
|
|
|
@ -21,7 +21,6 @@ public class OsMoTracker implements OsMoReactor {
|
|||
private OsmandPreference<Integer> pref;
|
||||
private String sessionURL;
|
||||
private Map<String, OsMoDevice> trackingDevices = new java.util.concurrent.ConcurrentHashMap<String, OsMoGroupsStorage.OsMoDevice>();
|
||||
private OsmandPreference<Boolean> autoStart;
|
||||
private OsmandPreference<Boolean> stateSendLocation;
|
||||
|
||||
public interface OsmoTrackerListener {
|
||||
|
@ -31,10 +30,9 @@ public class OsMoTracker implements OsMoReactor {
|
|||
|
||||
|
||||
public OsMoTracker(OsMoService service, OsmandPreference<Integer> interval,
|
||||
OsmandPreference<Boolean> autoStart, OsmandPreference<Boolean> stateSendLocation) {
|
||||
OsmandPreference<Boolean> stateSendLocation) {
|
||||
this.service = service;
|
||||
this.pref = interval;
|
||||
this.autoStart = autoStart;
|
||||
this.stateSendLocation = stateSendLocation;
|
||||
service.registerReactor(this);
|
||||
}
|
||||
|
@ -52,16 +50,17 @@ public class OsMoTracker implements OsMoReactor {
|
|||
|
||||
public void enableTracker() {
|
||||
if(!isEnabledTracker()) {
|
||||
enableTrackerCmd();
|
||||
}
|
||||
}
|
||||
|
||||
public void enableTrackerCmd() {
|
||||
stateSendLocation.set(true);
|
||||
service.pushCommand("TRACKER_SESSION_OPEN");
|
||||
}
|
||||
}
|
||||
|
||||
public void disableTracker() {
|
||||
if(isEnabledTracker()) {
|
||||
if(autoStart.get()) {
|
||||
autoStart.set(false);
|
||||
}
|
||||
stateSendLocation.set(false);
|
||||
service.pushCommand("TRACKER_SESSION_CLOSE");
|
||||
}
|
||||
|
@ -114,7 +113,7 @@ public class OsMoTracker implements OsMoReactor {
|
|||
}
|
||||
|
||||
public void sendCoordinate(Location location) {
|
||||
if(stateSendLocation.set(true) && location != null) {
|
||||
if(stateSendLocation.get() && location != null) {
|
||||
long ltime = lastBufferLocation == null ? 0 : lastBufferLocation.getTime();
|
||||
|
||||
if (location.getTime() - ltime > pref.get()) {
|
||||
|
@ -218,11 +217,8 @@ public class OsMoTracker implements OsMoReactor {
|
|||
|
||||
@Override
|
||||
public void onConnected() {
|
||||
if(autoStart.get() || stateSendLocation.get()) {
|
||||
if(autoStart.get() && !stateSendLocation.get()) {
|
||||
stateSendLocation.set(true);
|
||||
}
|
||||
enableTracker();
|
||||
if(stateSendLocation.get()) {
|
||||
enableTrackerCmd();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ public class SettingsOsMoActivity extends SettingsBaseActivity {
|
|||
|
||||
private Preference debugPref;
|
||||
private Preference trackerId;
|
||||
private CheckBoxPreference sendLocationsref;
|
||||
// private CheckBoxPreference sendLocationsref;
|
||||
|
||||
public static final int[] SECONDS = new int[] {0, 1, 2, 3, 5, 10, 15, 30, 60, 90};
|
||||
public static final int[] MINUTES = new int[] {2, 3, 5};
|
||||
|
@ -54,11 +54,11 @@ public class SettingsOsMoActivity extends SettingsBaseActivity {
|
|||
autoConnectref.setSummary(R.string.osmo_auto_connect_descr);
|
||||
grp.addPreference(autoConnectref);
|
||||
|
||||
sendLocationsref = createCheckBoxPreference(settings.OSMO_AUTO_SEND_LOCATIONS);
|
||||
sendLocationsref.setTitle(R.string.osmo_auto_send_locations);
|
||||
sendLocationsref.setSummary(R.string.osmo_auto_send_locations_descr);
|
||||
sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get());
|
||||
grp.addPreference(sendLocationsref);
|
||||
// sendLocationsref = createCheckBoxPreference(settings.OSMO_AUTO_SEND_LOCATIONS);
|
||||
// sendLocationsref.setTitle(R.string.osmo_auto_send_locations);
|
||||
// sendLocationsref.setSummary(R.string.osmo_auto_send_locations_descr);
|
||||
// sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get());
|
||||
// grp.addPreference(sendLocationsref);
|
||||
|
||||
grp.addPreference(createTimeListPreference(settings.OSMO_SAVE_TRACK_INTERVAL, SECONDS,
|
||||
MINUTES, 1000, R.string.osmo_track_interval, R.string.osmo_track_interval_descr));
|
||||
|
@ -178,17 +178,12 @@ public class SettingsOsMoActivity extends SettingsBaseActivity {
|
|||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
boolean p = super.onPreferenceChange(preference, newValue);
|
||||
String id = preference.getKey();
|
||||
if (id.equals(settings.OSMO_AUTO_SEND_LOCATIONS.getId())) {
|
||||
if ((Boolean) newValue) {
|
||||
final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class);
|
||||
plugin.getTracker().enableTracker();
|
||||
}
|
||||
} else if (id.equals(settings.OSMO_AUTO_CONNECT.getId())) {
|
||||
if (id.equals(settings.OSMO_AUTO_CONNECT.getId())) {
|
||||
if ((Boolean) newValue) {
|
||||
final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class);
|
||||
plugin.getService().connect(false);
|
||||
}
|
||||
sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get());
|
||||
// sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get());
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
|
|
@ -54,7 +54,9 @@ public class BaseLocationIndexRepository<T extends MapObject> {
|
|||
// close previous db
|
||||
db.close();
|
||||
}
|
||||
db = SQLiteDatabase.openOrCreateDatabase(file, null);
|
||||
// fix http://stackoverflow.com/questions/26937152/workaround-for-nexus-9-sqlite-file-write-operations-on-external-dirs
|
||||
db = SQLiteDatabase.openDatabase(file.getPath(), null,
|
||||
SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING| SQLiteDatabase.CREATE_IF_NECESSARY);
|
||||
name = file.getName().substring(0, file.getName().indexOf('.'));
|
||||
if(db.getVersion() != version){
|
||||
db.close();
|
||||
|
|
|
@ -119,8 +119,10 @@ public class RegionAddressRepositoryBinary implements RegionAddressRepository {
|
|||
|
||||
@Override
|
||||
public synchronized void addCityToPreloadedList(City city) {
|
||||
if (!cities.containsKey(city.getId())) {
|
||||
cities.put(city.getId(), city);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized List<City> getLoadedCities(){
|
||||
|
@ -129,6 +131,7 @@ public class RegionAddressRepositoryBinary implements RegionAddressRepository {
|
|||
|
||||
@Override
|
||||
public synchronized void preloadStreets(City o, ResultMatcher<Street> resultMatcher) {
|
||||
//TODO: Check NPE, looks like o can be null here, question is why
|
||||
Collection<Street> streets = o.getStreets();
|
||||
if(!streets.isEmpty()){
|
||||
return;
|
||||
|
@ -138,7 +141,6 @@ public class RegionAddressRepositoryBinary implements RegionAddressRepository {
|
|||
} catch (IOException e) {
|
||||
log.error("Disk operation failed" , e); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// // not use ccontains It is really slow, takes about 10 times more than other steps
|
||||
|
|
|
@ -49,7 +49,10 @@ public class HillshadeLayer extends MapTileLayer {
|
|||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
File tilesDir = app.getAppPath(IndexConstants.TILES_INDEX_DIR);
|
||||
sqliteDb = SQLiteDatabase.openOrCreateDatabase(new File(tilesDir, HILLSHADE_CACHE) , null);
|
||||
// fix http://stackoverflow.com/questions/26937152/workaround-for-nexus-9-sqlite-file-write-operations-on-external-dirs
|
||||
sqliteDb = SQLiteDatabase.openDatabase(new File(tilesDir, HILLSHADE_CACHE).getPath() ,
|
||||
null, SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING
|
||||
| SQLiteDatabase.CREATE_IF_NECESSARY );
|
||||
if(sqliteDb.getVersion() == 0) {
|
||||
sqliteDb.setVersion(1);
|
||||
sqliteDb.execSQL("CREATE TABLE TILE_SOURCES(filename varchar2(256), date_modified int, left int, right int, top int, bottom int)");
|
||||
|
|
Loading…
Reference in a new issue