This commit is contained in:
Denis 2015-01-19 17:29:52 +02:00
commit 4a0c77d690
68 changed files with 1133 additions and 709 deletions

View file

@ -61,12 +61,13 @@ public class BinaryInspector {
if(args.length == 1 && "test".equals(args[0])) { if(args.length == 1 && "test".equals(args[0])) {
in.inspector(new String[]{ in.inspector(new String[]{
// "-vpoi", // "-vpoi",
"-vmap", "-vmapobjects", // "-vmap", "-vmapobjects",
// "-vrouting", // "-vrouting",
// "-vaddress", "-vcities", "-vstreets", "-vstreetgroups","-vbuildings", // "-vaddress", "-vcities","-vstreetgroups",
// "-vstreets", "-vbuildings", "-vintersections",
// "-zoom=16", // "-zoom=16",
// "-bbox=1.74,51.17,1.75,51.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 { } else {
in.inspector(args); in.inspector(args);

View file

@ -495,6 +495,33 @@ public class BinaryRoutePlanner {
return directionAllowed; 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, private boolean checkIfOppositieSegmentWasVisited(final RoutingContext ctx, boolean reverseWaySearch,
PriorityQueue<RouteSegment> graphSegments, RouteSegment segment, TLongObjectHashMap<RouteSegment> oppositeSegments, PriorityQueue<RouteSegment> graphSegments, RouteSegment segment, TLongObjectHashMap<RouteSegment> oppositeSegments,
int segmentPoint, float segmentDist, float obstaclesTime) { int segmentPoint, float segmentDist, float obstaclesTime) {
@ -502,20 +529,24 @@ public class BinaryRoutePlanner {
long opp = calculateRoutePointId(road, segment.isPositive() ? segmentPoint - 1 : segmentPoint, !segment.isPositive()); long opp = calculateRoutePointId(road, segment.isPositive() ? segmentPoint - 1 : segmentPoint, !segment.isPositive());
if (oppositeSegments.containsKey(opp)) { if (oppositeSegments.containsKey(opp)) {
RouteSegment opposite = oppositeSegments.get(opp); RouteSegment opposite = oppositeSegments.get(opp);
FinalRouteSegment frs = new FinalRouteSegment(road, segmentPoint); RouteSegment to = reverseWaySearch ? getParentDiffId(segment) : getParentDiffId(opposite);
float distStartObstacles = segment.distanceFromStart RouteSegment from = !reverseWaySearch ? getParentDiffId(segment) : getParentDiffId(opposite);
+ calculateTimeWithObstacles(ctx, road, segmentDist, obstaclesTime); if (checkViaRestrictions(from, to)) {
frs.setParentRoute(segment); FinalRouteSegment frs = new FinalRouteSegment(road, segmentPoint);
frs.setParentSegmentEnd(segmentPoint); float distStartObstacles = segment.distanceFromStart
frs.reverseWaySearch = reverseWaySearch; + calculateTimeWithObstacles(ctx, road, segmentDist, obstaclesTime);
frs.distanceFromStart = opposite.distanceFromStart + distStartObstacles; frs.setParentRoute(segment);
frs.distanceToEnd = 0; frs.setParentSegmentEnd(segmentPoint);
frs.opposite = opposite; frs.reverseWaySearch = reverseWaySearch;
graphSegments.add(frs); frs.distanceFromStart = opposite.distanceFromStart + distStartObstacles;
if(TRACE_ROUTING){ frs.distanceToEnd = 0;
printRoad(" >> Final segment : ", frs, reverseWaySearch); frs.opposite = opposite;
graphSegments.add(frs);
if (TRACE_ROUTING) {
printRoad(" >> Final segment : ", frs, reverseWaySearch);
}
return true;
} }
return true;
} }
return false; return false;
} }
@ -554,17 +585,30 @@ public class BinaryRoutePlanner {
} }
private boolean proccessRestrictions(RoutingContext ctx, RouteDataObject road, RouteSegment inputNext, boolean reverseWay) { private boolean proccessRestrictions(RoutingContext ctx, RouteSegment segment, RouteSegment inputNext, boolean reverseWay) {
ctx.segmentsToVisitPrescripted.clear();
ctx.segmentsToVisitNotForbidden.clear();
boolean exclusiveRestriction = false;
RouteSegment next = inputNext;
if (!reverseWay && road.getRestrictionLength() == 0) {
return false;
}
if(!ctx.getRouter().restrictionsAware()) { if(!ctx.getRouter().restrictionsAware()) {
return false; 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) { while (next != null) {
int type = -1; int type = -1;
if (!reverseWay) { if (!reverseWay) {
@ -607,26 +651,32 @@ public class BinaryRoutePlanner {
} else if (type == MapRenderingTypes.RESTRICTION_NO_LEFT_TURN || type == MapRenderingTypes.RESTRICTION_NO_RIGHT_TURN } 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) { || type == MapRenderingTypes.RESTRICTION_NO_STRAIGHT_ON || type == MapRenderingTypes.RESTRICTION_NO_U_TURN) {
// next = next.next; continue; // next = next.next; continue;
if(via) {
ctx.segmentsToVisitPrescripted.remove(next);
}
} else if (type == -1) { } else if (type == -1) {
// case no restriction // case no restriction
ctx.segmentsToVisitNotForbidden.add(next); ctx.segmentsToVisitNotForbidden.add(next);
} else { } else {
// case exclusive restriction (only_right, only_straight, ...) if (!via) {
// 1. in case we are going backward we should not consider only_restriction // case exclusive restriction (only_right, only_straight, ...)
// as exclusive because we have many "in" roads and one "out" // 1. in case we are going backward we should not consider only_restriction
// 2. in case we are going forward we have one "in" and many "out" // as exclusive because we have many "in" roads and one "out"
if (!reverseWay) { // 2. in case we are going forward we have one "in" and many "out"
exclusiveRestriction = true; if (!reverseWay) {
ctx.segmentsToVisitNotForbidden.clear(); exclusiveRestriction = true;
ctx.segmentsToVisitPrescripted.add(next); ctx.segmentsToVisitNotForbidden.clear();
} else { ctx.segmentsToVisitPrescripted.add(next);
ctx.segmentsToVisitNotForbidden.add(next); } else {
ctx.segmentsToVisitNotForbidden.add(next);
}
} }
} }
next = next.next; next = next.next;
} }
ctx.segmentsToVisitPrescripted.addAll(ctx.segmentsToVisitNotForbidden); if(!via) {
return true; ctx.segmentsToVisitPrescripted.addAll(ctx.segmentsToVisitNotForbidden);
}
} }
@ -643,7 +693,7 @@ public class BinaryRoutePlanner {
if(inputNext != null && inputNext.getRoad().getId() == segment.getRoad().getId() && inputNext.next == null) { if(inputNext != null && inputNext.getRoad().getId() == segment.getRoad().getId() && inputNext.next == null) {
thereAreRestrictions = false; thereAreRestrictions = false;
} else { } else {
thereAreRestrictions = proccessRestrictions(ctx, segment.road, inputNext, reverseWaySearch); thereAreRestrictions = proccessRestrictions(ctx, segment, inputNext, reverseWaySearch);
if (thereAreRestrictions) { if (thereAreRestrictions) {
nextIterator = ctx.segmentsToVisitPrescripted.iterator(); nextIterator = ctx.segmentsToVisitPrescripted.iterator();
if (TRACE_ROUTING) { if (TRACE_ROUTING) {

View file

@ -40,15 +40,35 @@ public class RouteResultPreparation {
List<RouteSegmentResult> prepareResult(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException { List<RouteSegmentResult> prepareResult(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException {
validateAllPointsConnected(result); validateAllPointsConnected(result);
splitRoadsAndAttachRoadSegments(ctx, result); splitRoadsAndAttachRoadSegments(ctx, result);
// calculate time
calculateTimeSpeed(ctx, result); 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); determineTurnsToMerge(ctx.leftSideNavigation, result);
justifyUTurns(ctx.leftSideNavigation, result);
addTurnInfoDescriptions(result); addTurnInfoDescriptions(result);
return 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 { private void calculateTimeSpeed(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException {
for (int i = 0; i < result.size(); i++) { for (int i = 0; i < result.size(); i++) {
RouteSegmentResult rr = result.get(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) { protected void addTurnInfoDescriptions(List<RouteSegmentResult> result) {
int prevSegment = -1; int prevSegment = -1;
float dist = 0; float dist = 0;
@ -359,8 +359,29 @@ public class RouteResultPreparation {
if (i == result.size() || result.get(i).getTurnType() != null) { if (i == result.size() || result.get(i).getTurnType() != null) {
if (prevSegment >= 0) { if (prevSegment >= 0) {
String turn = result.get(prevSegment).getTurnType().toString(); String turn = result.get(prevSegment).getTurnType().toString();
if (result.get(prevSegment).getTurnType().getLanes() != null) { final int[] lns = result.get(prevSegment).getTurnType().getLanes();
turn += Arrays.toString(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( result.get(prevSegment).setDescription(
turn + MessageFormat.format(" and go {0,number,#.##} meters", dist)); turn + MessageFormat.format(" and go {0,number,#.##} meters", dist));
@ -381,7 +402,7 @@ public class RouteResultPreparation {
boolean tl = TurnType.TL == t.getValue(); boolean tl = TurnType.TL == t.getValue();
boolean tr = TurnType.TR == t.getValue(); boolean tr = TurnType.TR == t.getValue();
if(tl || tr) { 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) { // if (tnext != null && result.get(i).getDistance() < 35) { //
boolean ut = true; boolean ut = true;
if (i > 0) { if (i > 0) {
@ -397,6 +418,7 @@ public class RouteResultPreparation {
ut = false; ut = false;
} }
if (ut) { if (ut) {
tnext.setSkipToSpeak(true);
if (tl && TurnType.TL == tnext.getValue()) { if (tl && TurnType.TL == tnext.getValue()) {
return TurnType.valueOf(TurnType.TU, false); return TurnType.valueOf(TurnType.TU, false);
} else if (tr && TurnType.TR == tnext.getValue()) { } else if (tr && TurnType.TR == tnext.getValue()) {
@ -409,130 +431,118 @@ public class RouteResultPreparation {
} }
private void determineTurnsToMerge(boolean leftside, List<RouteSegmentResult> result) { private void determineTurnsToMerge(boolean leftside, List<RouteSegmentResult> result) {
for (int i = result.size() - 2; i >= 0; i--) { RouteSegmentResult nextSegment = null;
double dist = 0;
for (int i = result.size() - 1; i >= 0; i--) {
RouteSegmentResult currentSegment = result.get(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;
}
TurnType currentTurn = currentSegment.getTurnType(); TurnType currentTurn = currentSegment.getTurnType();
TurnType nextTurn = nextSegment.getTurnType(); dist += currentSegment.getDistance();
if (currentTurn == null || currentTurn.getLanes() == null) {
if (currentTurn == null || currentTurn.getLanes() == null || nextTurn == null || nextTurn.getLanes() == null) { // skip
continue; } else {
} if (nextSegment != null) {
String hw = currentSegment.getObject().getHighway();
// Only allow slight turns that are nearby to be merged. double mergeDistance = 200;
// [disabled cause it is valuable for two consequent sharp turns as well] if (hw != null && (hw.startsWith("trunk") || hw.startsWith("motorway"))) {
// the distance could be longer on highways and shorter in city mergeDistance = 400;
String hw = currentSegment.getObject().getHighway(); }
double mergeDistance = 200; if (dist < mergeDistance) {
if(hw != null && (hw.startsWith("trunk") || hw.startsWith("motorway"))) { mergeTurnLanes(leftside, currentSegment, nextSegment);
mergeDistance = 400; }
} }
if (currentSegment.getDistance() < mergeDistance/* nextSegment = currentSegment;
&& TurnType.isSlightTurn(currentTurn.getValue())*/) { dist = 0;
mergeTurnLanes(leftside, currentSegment, nextSegment);
} }
} }
} }
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) { private void mergeTurnLanes(boolean leftSide, RouteSegmentResult currentSegment, RouteSegmentResult nextSegment) {
MergeTurnLaneTurn active = new MergeTurnLaneTurn(currentSegment);
MergeTurnLaneTurn target = new MergeTurnLaneTurn(nextSegment);
if (active.activeLen < 2) {
return;
}
if (target.activeStartIndex == -1) {
return;
}
boolean changed = false;
if (target.isActiveTurnMostLeft()) {
// let only the most left lanes be enabled
if (target.activeLen <= active.activeLen) {
active.activeEndIndex -= (active.activeLen - target.activeLen);
changed = true;
}
} else if (target.isActiveTurnMostRight()) {
// next turn is right
// let only the most right lanes be enabled
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 (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) {
return;
}
// set the allowed lane bit
for (int i = 0; i < active.disabledLanes.length; i++) {
if (i >= active.activeStartIndex && i <= active.activeEndIndex) {
active.disabledLanes[i] |= 1;
}
}
TurnType currentTurn = currentSegment.getTurnType(); TurnType currentTurn = currentSegment.getTurnType();
TurnType nextTurn = nextSegment.getTurnType(); currentTurn.setLanes(active.disabledLanes);
boolean isUsingTurnLanes = TurnType.getPrimaryTurn(currentTurn.getLanes()[0]) != 0 int turn = inferTurnFromLanes(active.disabledLanes);
&& TurnType.getPrimaryTurn(nextTurn.getLanes()[0]) != 0; if (turn != 0 && turn != currentTurn.getValue()) {
if (isUsingTurnLanes) { TurnType newTurnType = TurnType.valueOf(turn, leftSide);
int[] lanes = new int[currentTurn.getLanes().length]; newTurnType.setLanes(active.disabledLanes);
int activeIndex = -1; newTurnType.setSkipToSpeak(currentTurn.isSkipToSpeak());
int activeLen = 0; currentSegment.setTurnType(newTurnType);
// 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) {
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) {
return;
}
boolean changed = false;
// next turn is left
if(targetActiveIndex == 0) {
// let only the most left lanes be enabled
if(targetActiveLen <= activeLen) {
activeLen = targetActiveLen;
changed = true;
}
} else if(targetActiveIndex + targetActiveLen == nextLanes.length) {
// next turn is right
// let only the most right lanes be enabled
if(targetActiveLen <= activeLen) {
activeIndex += (activeLen - targetActiveLen);
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);
changed = true;
}
}
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;
}
}
currentTurn.setLanes(lanes);
int turn = inferTurnFromLanes(lanes);
if (turn != 0 && turn != currentTurn.getValue()) {
TurnType newTurnType = TurnType.valueOf(turn, leftSide);
newTurnType.setLanes(lanes);
newTurnType.setSkipToSpeak(currentTurn.isSkipToSpeak());
currentSegment.setTurnType(newTurnType);
}
} }
} }
@ -585,10 +595,8 @@ public class RouteResultPreparation {
} else { } else {
t = TurnType.valueOf(TurnType.TU, leftSide); t = TurnType.valueOf(TurnType.TU, leftSide);
} }
int[] lanes = getTurnLanesInfo(prev, t.getValue(), leftSide, true); int[] lanes = getTurnLanesInfo(prev, t.getValue());
if(lanes != null) { t.setLanes(lanes);
t.setLanes(lanes);
}
} else if (mpi < -TURN_DEGREE_MIN) { } else if (mpi < -TURN_DEGREE_MIN) {
if (mpi > -60) { if (mpi > -60) {
t = TurnType.valueOf(TurnType.TSLR, leftSide); t = TurnType.valueOf(TurnType.TSLR, leftSide);
@ -597,14 +605,12 @@ public class RouteResultPreparation {
} else if (mpi > -135 || !leftSide) { } else if (mpi > -135 || !leftSide) {
t = TurnType.valueOf(TurnType.TSHR, leftSide); t = TurnType.valueOf(TurnType.TSHR, leftSide);
} else { } else {
t = TurnType.valueOf(TurnType.TU, leftSide); t = TurnType.valueOf(TurnType.TRU, leftSide);
}
int[] lanes = getTurnLanesInfo(prev, t.getValue(), leftSide, false);
if(lanes != null) {
t.setLanes(lanes);
} }
int[] lanes = getTurnLanesInfo(prev, t.getValue());
t.setLanes(lanes);
} else { } else {
t = attachKeepLeftInfoAndLanes(leftSide, prev, rr, t); t = attachKeepLeftInfoAndLanes(leftSide, prev, rr);
} }
if (t != null) { if (t != null) {
t.setTurnAngle((float) -mpi); t.setTurnAngle((float) -mpi);
@ -613,39 +619,34 @@ public class RouteResultPreparation {
return t; return t;
} }
private int[] getTurnLanesInfo(RouteSegmentResult prevSegm, int mainTurnType, boolean leftSide, private int[] getTurnLanesInfo(RouteSegmentResult prevSegm, int mainTurnType) {
boolean leftTurn) {
String turnLanes = getTurnLanesString(prevSegm); String turnLanes = getTurnLanesString(prevSegm);
if (turnLanes == null) { if (turnLanes == null) {
return null; return null;
} }
String[] splitLaneOptions = turnLanes.split("\\|", -1); int[] lanesArray = calculateRawTurnLanes(turnLanes, mainTurnType);
if (splitLaneOptions.length != countLanesMinOne(prevSegm)) {
// Error in data or missing data
return null;
}
int[] lanesArray = calculateRawTurnLanes(splitLaneOptions, mainTurnType);
// Manually set the allowed lanes. // Manually set the allowed lanes.
boolean isSet = setAllowedLanes(mainTurnType, lanesArray); boolean isSet = setAllowedLanes(mainTurnType, lanesArray);
if(!isSet && lanesArray.length > 0) { 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, // 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. // 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; int ind = leftTurn? 0 : lanesArray.length - 1;
final int tt = TurnType.getPrimaryTurn(lanesArray[ind]); final int tt = TurnType.getPrimaryTurn(lanesArray[ind]);
if (leftTurn) { if (leftTurn) {
if (!TurnType.isLeftTurn(tt)) { if (!TurnType.isLeftTurn(tt)) {
// This was just to make sure that there's no bad data. // This was just to make sure that there's no bad data.
TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TL);
TurnType.setSecondaryTurn(lanesArray, ind, tt); TurnType.setSecondaryTurn(lanesArray, ind, tt);
TurnType.setPrimaryTurn(lanesArray, ind, TurnType.TL);
} }
} else { } else {
if (!TurnType.isRightTurn(tt)) { if (!TurnType.isRightTurn(tt)) {
// This was just to make sure that there's no bad data. // This was just to make sure that there's no bad data.
TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TR);
TurnType.setSecondaryTurn(lanesArray, ind, tt); TurnType.setSecondaryTurn(lanesArray, ind, tt);
TurnType.setPrimaryTurn(lanesArray, ind, TurnType.TR);
} }
} }
setAllowedLanes(lanesArray[ind], lanesArray); setAllowedLanes(tt, lanesArray);
} }
return lanesArray; return lanesArray;
} }
@ -692,113 +693,189 @@ public class RouteResultPreparation {
return t; return t;
} }
private class RoadSplitStructure {
private TurnType attachKeepLeftInfoAndLanes(boolean leftSide, RouteSegmentResult prevSegm, RouteSegmentResult currentSegm, TurnType t) { boolean keepLeft = false;
// keep left/right boolean keepRight = false;
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;
boolean speak = 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())); int speakPriority = Math.max(highwaySpeakPriority(prevSegm.getObject().getHighway()), highwaySpeakPriority(currentSegm.getObject().getHighway()));
boolean otherRoutesExist = false; for (RouteSegmentResult attached : attachedRoutes) {
if (attachedRoutes != null) { double ex = MapUtils.degreesDiff(attached.getBearingBegin(), currentSegm.getBearingBegin());
for (RouteSegmentResult attached : attachedRoutes) { double mpi = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), attached.getBearingBegin()));
double ex = MapUtils.degreesDiff(attached.getBearingBegin(), currentSegm.getBearingBegin()); int rsSpeakPriority = highwaySpeakPriority(attached.getObject().getHighway());
double mpi = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), attached.getBearingBegin())); if (rsSpeakPriority != MAX_SPEAK_PRIORITY || speakPriority == MAX_SPEAK_PRIORITY) {
int rsSpeakPriority = highwaySpeakPriority(attached.getObject().getHighway()); int lanes = countLanesMinOne(attached);
if (rsSpeakPriority != MAX_SPEAK_PRIORITY || speakPriority == MAX_SPEAK_PRIORITY) { boolean smallStraightVariation = mpi < TURN_DEGREE_MIN;
if ((ex < TURN_DEGREE_MIN || mpi < TURN_DEGREE_MIN) && ex >= 0) { boolean smallTargetVariation = Math.abs(ex) < TURN_DEGREE_MIN;
kl = true; boolean attachedOnTheRight = ex >= 0;
right += countLanesMinOne(attached); if (attachedOnTheRight) {
speak = speak || rsSpeakPriority <= speakPriority; rs.roadsOnRight++;
} else if ((ex > -TURN_DEGREE_MIN || mpi < TURN_DEGREE_MIN) && ex <= 0) { } else {
kr = true; rs.roadsOnLeft++;
left += countLanesMinOne(attached); }
speak = speak || rsSpeakPriority <= speakPriority; if (smallTargetVariation || smallStraightVariation) {
} else if (mpi >= TURN_DEGREE_MIN) { if (attachedOnTheRight) {
// Indicate that there are other turns at this intersection, and displaying the lanes may be helpful here. rs.keepLeft = true;
otherRoutesExist = 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) { return rs;
left = 1; }
} else if(kl && right == 0) {
right = 1; protected TurnType createSimpleKeepLeftRightTurn(boolean leftSide, RouteSegmentResult prevSegm,
} RouteSegmentResult currentSegm, RoadSplitStructure rs) {
int current = countLanesMinOne(currentSegm); int current = countLanesMinOne(currentSegm);
int[] lanes = new int[current + left + right]; int ls = current + rs.leftLanes + rs.rightLanes;
ls = current + left + right; int[] lanes = new int[ls];
for (int it = 0; it < ls; it++) { for (int it = 0; it < ls; it++) {
if (it < left || it >= left + current) { if (it < rs.leftLanes || it >= rs.leftLanes + current) {
lanes[it] = 0; lanes[it] = 0;
} else { } else {
lanes[it] = 1; lanes[it] = 1;
} }
} }
// sometimes links are // sometimes links are
if ((current <= left + right) && (left > 1 || right > 1)) { if ((current <= rs.leftLanes + rs.rightLanes) && (rs.leftLanes > 1 || rs.rightLanes > 1)) {
speak = true; rs.speak = true;
} }
double devation = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), currentSegm.getBearingBegin())); double devation = Math.abs(MapUtils.degreesDiff(prevSegm.getBearingEnd(), currentSegm.getBearingBegin()));
boolean makeSlightTurn = devation > 5 && (!isMotorway(prevSegm) || !isMotorway(currentSegm)); 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 = TurnType.valueOf(TurnType.C, leftSide);
t.setSkipToSpeak(!speak); } else if (rs.keepLeft) {
} else if (kl) {
t = TurnType.valueOf(makeSlightTurn ? TurnType.TSLL : TurnType.KL, leftSide); t = TurnType.valueOf(makeSlightTurn ? TurnType.TSLL : TurnType.KL, leftSide);
t.setSkipToSpeak(!speak); } else if (rs.keepRight) {
} else if (kr) {
t = TurnType.valueOf(makeSlightTurn ? TurnType.TSLR : TurnType.KR, leftSide); t = TurnType.valueOf(makeSlightTurn ? TurnType.TSLR : TurnType.KR, leftSide);
t.setSkipToSpeak(!speak); } else {
} 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;
}
}
return t; return t;
} }
if (t != null && lanes != null) { t.setSkipToSpeak(!rs.speak);
int[] calcLanes = attachTurnLanesData(prevSegm, lanes); t.setLanes(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);
}
return t; 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) { private int countOccurrences(String haystack, char needle) {
int count = 0; int count = 0;
@ -905,8 +944,7 @@ public class RouteResultPreparation {
if(turnLanes == null) { if(turnLanes == null) {
return null; return null;
} }
String[] splitLaneOptions = turnLanes.split("\\|", -1); return calculateRawTurnLanes(turnLanes, 0);
return calculateRawTurnLanes(splitLaneOptions, 0);
} }
public static int[] parseLanes(RouteDataObject ro, double dirToNorthEastPi) { public static int[] parseLanes(RouteDataObject ro, double dirToNorthEastPi) {
@ -939,7 +977,8 @@ public class RouteResultPreparation {
return null; 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]; int[] lanes = new int[splitLaneOptions.length];
for (int i = 0; i < splitLaneOptions.length; i++) { for (int i = 0; i < splitLaneOptions.length; i++) {
String[] laneOptions = splitLaneOptions[i].split(";"); String[] laneOptions = splitLaneOptions[i].split(";");
@ -967,12 +1006,16 @@ public class RouteResultPreparation {
continue; continue;
} }
if (TurnType.getPrimaryTurn(lanes[i]) == 0) { final int primary = TurnType.getPrimaryTurn(lanes[i]);
TurnType.setPrimaryTurn(lanes, i, turn); if (primary == 0) {
TurnType.setPrimaryTurnAndReset(lanes, i, turn);
} else { } else {
if (turn == calcTurnType) { if (turn == calcTurnType ||
TurnType.setSecondaryTurn(lanes, i, TurnType.getPrimaryTurn(lanes[i])); (TurnType.isRightTurn(calcTurnType) && TurnType.isRightTurn(turn)) ||
TurnType.setPrimaryTurn(lanes, i, turn); (TurnType.isLeftTurn(calcTurnType) && TurnType.isLeftTurn(turn))
) {
TurnType.setPrimaryTurnAndReset(lanes, i, turn);
TurnType.setSecondaryTurn(lanes, i, primary);
} else { } else {
TurnType.setSecondaryTurn(lanes, i, turn); TurnType.setSecondaryTurn(lanes, i, turn);
} }
@ -1021,7 +1064,18 @@ public class RouteResultPreparation {
// Checking to see that there is only one unique turn // Checking to see that there is only one unique turn
if (possibleTurns.size() == 1) { 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; return 0;

View file

@ -163,14 +163,10 @@ public class TurnType {
} }
// Note that the primary turn will be the one displayed on the map. // Note that the primary turn will be the one displayed on the map.
public static void setPrimaryTurn(int[] lanes, int lane, int turnType) { public static void setPrimaryTurnAndReset(int[] lanes, int lane, int turnType) {
lanes[lane] |= (turnType << 1); 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) { public static int getPrimaryTurn(int laneValue) {
// Get the primary turn modifier for the lane // Get the primary turn modifier for the lane
@ -182,10 +178,6 @@ public class TurnType {
lanes[lane] |= (turnType << 5); lanes[lane] |= (turnType << 5);
} }
public void setSecondaryTurn(int lane, int turnType) {
lanes[lane] |= (turnType << 5);
}
public static int getSecondaryTurn(int laneValue) { public static int getSecondaryTurn(int laneValue) {
// Get the primary turn modifier for the lane // Get the primary turn modifier for the lane
return (laneValue >> 5); return (laneValue >> 5);
@ -249,11 +241,11 @@ public class TurnType {
} }
public static boolean isLeftTurn(int type) { 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) { 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) { public static boolean isSlightTurn(int type) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -7,7 +7,9 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout android:orientation="horizontal" <LinearLayout android:orientation="horizontal"
android:layout_width="wrap_content" 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" <ImageView android:src="@drawable/ic_crashlog"
android:layout_marginLeft="@dimen/dashFavIconMargin" android:layout_marginLeft="@dimen/dashFavIconMargin"
android:layout_marginRight="@dimen/dashFavIconMargin" android:layout_marginRight="@dimen/dashFavIconMargin"

View file

@ -47,7 +47,7 @@
android:id="@+id/check_item" android:id="@+id/check_item"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="2dip" android:layout_marginRight="6dip"
android:button="@drawable/ic_btn_wocheckbox" android:button="@drawable/ic_btn_wocheckbox"
android:focusable="false" /> android:focusable="false" />
</LinearLayout> </LinearLayout>

View file

@ -46,7 +46,7 @@
android:id="@+id/check_item" android:id="@+id/check_item"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="2dip" android:layout_marginRight="6dip"
android:focusable="false" /> android:focusable="false" />
</LinearLayout> </LinearLayout>

View file

@ -63,7 +63,7 @@
<string name="osb_author_or_password_not_specified">Калі ласка, пазначце карыстальніка OSM і ягоны пароль у наладах</string> <string name="osb_author_or_password_not_specified">Калі ласка, пазначце карыстальніка OSM і ягоны пароль у наладах</string>
<string name="clear_intermediate_points">Ачысьціць прамежкавыя кропкі</string> <string name="clear_intermediate_points">Ачысьціць прамежкавыя кропкі</string>
<string name="keep_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_to">Маршрут да</string>
<string name="context_menu_item_directions_from">Маршрут ад</string> <string name="context_menu_item_directions_from">Маршрут ад</string>
<string name="route_descr_map_location">Мапа: </string> <string name="route_descr_map_location">Мапа: </string>
@ -226,7 +226,7 @@
<string name="recording_context_menu_delete">Выдаліць запіс</string> <string name="recording_context_menu_delete">Выдаліць запіс</string>
<string name="recording_context_menu_play">Граць</string> <string name="recording_context_menu_play">Граць</string>
<string name="recording_description">Запіс %1$s %3$s %2$s</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">оп</string> <string name="av_control_stop">оп</string>
<string name="av_control_start">Запіс</string> <string name="av_control_start">Запіс</string>
<string name="map_widget_av_notes">Аўдыё/відэа нататкі</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="download_link_and_local_description">Націсьніце тут каб зладаваць ці абнавіць лакальныя файлы мапаў. \nПстрыкніце на любы існуючы складнік каб бачыць падрабязнасьці, альбо націсьніце і трымайце каб дэактываваць ці выдаліць. Дзейныя зьвесткі на прыладзе (вольна %1$s):</string>
<string name="unknown_from_location">Першапачатковае месцазнаходжаньне не вызначана</string> <string name="unknown_from_location">Першапачатковае месцазнаходжаньне не вызначана</string>
<string name="unknown_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="confirm_interrupt_download">Перапыніць cьцягваньне файла?</string>
<string name="first_time_msg">Дзякуй за карыстаньне OsmAnd. Каб карыстацца ўсімі магчымасьцямі праграмы, вам патрэбныя некаторыя пазасеціўныя зьвесткі для вашага рэгіёну. Іх можна cьцягнуць праз \'Налады\' → \'Кіраваць файламі мапаў\'. Пасьля гэтага вы зможаце глядзець мапу, шукаць адрасы, бачыць POI і грамадзкі транспарт.</string> <string name="first_time_msg">Дзякуй за карыстаньне OsmAnd. Каб карыстацца ўсімі магчымасьцямі праграмы, вам патрэбныя некаторыя пазасеціўныя зьвесткі для вашага рэгіёну. Іх можна cьцягнуць праз \'Налады\' → \'Кіраваць файламі мапаў\'. Пасьля гэтага вы зможаце глядзець мапу, шукаць адрасы, бачыць POI і грамадзкі транспарт.</string>
<string name="basemap_was_selected_to_download">Базавая мапа неабходная для карэктнай працы праграмы і аўтаматычна была абраная для cьцягваньня.</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="validate_gpx_upload_name_pwd">Калі ласка, пазначце імя й пароль карыстальніка OSM каб заладоўваць файлы GPX.</string>
<string name="default_buttons_support">Падтрымка</string> <string name="default_buttons_support">Падтрымка</string>
<string name="support_new_features">Падтрымка новых уласьцівасьцяў</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="show_ruler_level">Паказваць маштаб</string>
<string name="info_button">Інфармацыя</string> <string name="info_button">Інфармацыя</string>
<string name="back_to_location">Вярнуцца да пазіцыі</string> <string name="back_to_location">Вярнуцца да пазіцыі</string>
@ -792,22 +792,21 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="osmand_service">Фонавы рэжым</string> <string name="osmand_service">Фонавы рэжым</string>
<string name="osmand_service_descr">Ужываць каб OsmAnd працавала падчас выключанага экрану</string> <string name="osmand_service_descr">Ужываць каб OsmAnd працавала падчас выключанага экрану</string>
<string name="tip_rotation_switching">Арыентацыя мапы</string> <string name="tip_rotation_switching">Арыентацыя мапы</string>
<string name="tip_rotation_switching_t_v2">Націснуўшы на значок компаса на экране з картай Вы можаце змяніць рэжым павароту карты. ↵ <string name="tip_rotation_switching_t_v2">"Націснуўшы на значок компаса на экране з мапай Вы можаце зьмяніць рэжым павароту мапы. ↵
\n\nДаступныя варыянты: ↵ \n\nДаступныя варыянты: ↵
\n\t* \'Не паварочваць\' - Карта не будзе паварочвацца. Поўнач заўсёды зверху. \n\t* \'Не паварочваць\' - Мапа не будзе паварочвацца. Поўнач заўсёды зьверху.
\n\t* \'Па кірунку руху\' - Карта будзе паварочвацца ў адпаведнасці з напрамкам Вашага руху. Зверху - кірунак руху. ↵ \n\t* \'Па кірунку руху\' - Мапа будзе паварочвацца ў адпаведнасьці з напрамкам Вашага руху. Зьверху - кірунак руху. ↵
\n\t* \'Па кірунку компаса\' - Карта будзе паварочвацца так, каб сумясціць поўнач карты і паўночны напрамак (выкарыстоўваюцца паказанні компаса ў прыладзе). ↵ \n\t* \'Па кірунку компаса\' - Мапа будзе паварочвацца так, каб сумясціць поўнач карты і паўночны напрамак (выкарыстоўваюцца паказаньні компасу ў прыладзе). ↵ "</string>
</string>
<string name="binary_map_download_success">"Сьцягваньне скончана. ↵ <string name="binary_map_download_success">"Сьцягваньне скончана. ↵
\n\t\n\tАктывацыя мапаў праз \'Меню\' → \'Мапа\' → \'Крыніца мапы ...\' → \'Оффлайн вектарныя мапы\". ↵ → "</string> \n\t\n\tАктывацыя мапаў праз \'Меню\' → \'Мапа\' → \'Крыніца мапы ...\' → \'Оффлайн вектарныя мапы\". ↵ → "</string>
<string name="tip_day_night_mode">Рэжым дзень/ноч</string> <string name="tip_day_night_mode">Рэжым дзень/ноч</string>
<string name="tip_day_night_mode_t_v2">"Для лакальных вектарных карт можна змяняць выгляд у залежнасці ад часу сутак: днём (светлы), ноччу (цёмны). Начны рэжым бяспечны для выкарыстання кіроўцамі ў цемры ↵ <string name="tip_day_night_mode_t_v2">"Для лакальных вектарных мапаў можна зьмяняць выгляд у залежнасьці ад часу сутак: днём (сьветлы), ноччу (цёмны). Начны рэжым бясьпечны для выкарыстаньня кіроўцамі ў цемры ↵
\n\nКаб памяняць рэжым націсніце \'Меню\' → \'Налады мапы\' → \'Дзённы/начны рэжым\' \n\nКаб памяняць рэжым націсьніце \'Мэню\' → \'Налады мапы\' → \'Дзённы/начны рэжым\'
\n\nМагчымыя варыянты: ↵ \n\nМагчымыя варыянты: ↵
\n\t\'Усход/Заход\' - аўтаматычны рэжым, на аснове дадзеных аб становішчы сонца (тыповы) ↵ \n\t\'Усход/Заход\' - аўтаматычны рэжым, на аснове дадзеных аб становішчы сонца (тыповы) ↵
\n\t\'Дзённы\' - заўсёды выкарыстоўваецца дзённы рэжым ↵ \n\t\'Дзённы\' - заўсёды выкарыстоўваецца дзённы рэжым ↵
\n\t\'Начны\' - заўсёды выкарыстоўваецца начны рэжым ↵ \n\t\'Начны\' - заўсёды выкарыстоўваецца начны рэжым ↵
\n\t\'Датчык асветленасці\' - від карты змяняецца аўтаматычна ў залежнасці ад датчыка асветленасці (пры яго наяўнасці) у прыладзе ↵ "</string> \n\t\'Датчык асьветленасьці\' - від мапы зьмяняецца аўтаматычна ў залежнасьці ад датчыка асьветленасьці (пры яго наяўнасьці) у прыладзе ↵ "</string>
<string name="tip_osm_improve">Паляпшэньне зьвестак OSM</string> <string name="tip_osm_improve">Паляпшэньне зьвестак OSM</string>
<string name="tip_osm_improve_t">OsmAnd выкарыстоўвае картаграфічныя дадзеныя з Openstreetmap.org (OSM), да таго ж, ён можа быць выкарыстаны для іх паляпшэння. Вы можаце лёгка ствараць і загружаць новыя POI або справаздачы пра памылкі ў OSM ў некалькі дотыкаў! ↵ <string name="tip_osm_improve_t">OsmAnd выкарыстоўвае картаграфічныя дадзеныя з Openstreetmap.org (OSM), да таго ж, ён можа быць выкарыстаны для іх паляпшэння. Вы можаце лёгка ствараць і загружаць новыя POI або справаздачы пра памылкі ў OSM ў некалькі дотыкаў! ↵
\n\nДля гэтага вам трэба актываваць модуль \'Рэдагаванне OSM\' у \'Налады\' → \'Модулі\', увусці свой лагін і пароль для OSM ў \'Налады\' → \'Рэдагаванне OSM\'. ↵ \n\nДля гэтага вам трэба актываваць модуль \'Рэдагаванне OSM\' у \'Налады\' → \'Модулі\', увусці свой лагін і пароль для OSM ў \'Налады\' → \'Рэдагаванне OSM\'. ↵
@ -819,7 +818,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="download_files_question_space">Вольнага месца зараз {2} МБ! Сьцягнуць {0} файл(аў) ({1} МБ)?</string> <string name="download_files_question_space">Вольнага месца зараз {2} МБ! Сьцягнуць {0} файл(аў) ({1} МБ)?</string>
<string name="tip_navigation">Навігацыя</string> <string name="tip_navigation">Навігацыя</string>
<string name="tip_navigation_t">"Каб атрымаць маршрут да патрэбнага месца, вы можаце націснуць і трымаць пальцам карту ў патрэбным месцы (потым выбраць «Маршрут у» ў вакенцы маркера) або «Маршруты» пасля выбару любога пункта ў выніках пошуку або закладках. ↵ <string name="tip_navigation_t">"Каб атрымаць маршрут да патрэбнага месца, вы можаце націснуць і трымаць пальцам карту ў патрэбным месцы (потым выбраць «Маршрут у» ў вакенцы маркера) або «Маршруты» пасля выбару любога пункта ў выніках пошуку або закладках. ↵
\n\nМесца прызначэньня будзе пазначана сьцяжком, таксама OsmAnd пакажа адлегласць да яго і напрамак (аранжавым трохвугольнікам). ↵ \n\nМесца прызначэньня будзе пазначана сьцяжком, таксама OsmAnd пакажа адлегласьць да яго і напрамак (аранжавым трохвугольнікам). ↵
\n\nВы можаце выбраць «Пачаць навігацыю» па маршруце і OsmAnd будзе весці вас, прадастаўляючы галасавыя падказкі (калі магчыма) і г.д. Ці толькі «Паказаць маршрут» на карце; будзе паказаны ўвесь маршрут, але не будзе адбывацца пазіцыянаванне карты згодна з бягучым становішчам, і не будзе агалошвання галасавых падказкак падчас руху. ↵ \n\nВы можаце выбраць «Пачаць навігацыю» па маршруце і OsmAnd будзе весці вас, прадастаўляючы галасавыя падказкі (калі магчыма) і г.д. Ці толькі «Паказаць маршрут» на карце; будзе паказаны ўвесь маршрут, але не будзе адбывацца пазіцыянаванне карты згодна з бягучым становішчам, і не будзе агалошвання галасавых падказкак падчас руху. ↵
\n\nКаб паказаць маршрут да месца прызначэння з іншага месца, а не з таго, дзе вы знаходзіцеся, пакажыце яго на карце і абярыце «Маршрут з». ↵ \n\nКаб паказаць маршрут да месца прызначэння з іншага месца, а не з таго, дзе вы знаходзіцеся, пакажыце яго на карце і абярыце «Маршрут з». ↵
\n\nКалі вы націснеце «Маршрут з» разам з «Пачаць навігацыю», OsmAnd пакажа актуальную пазіцыю, як толькі знойдзе яе (так гэта можна выкарыстоўваць для пачатку навігацыі да таго, як месца будзе знойдзена); камбінацыя «Маршрут з» і «Паказаць маршрут» проста пакажа маршрут з любога пункту, які вы вылучыце, без наступнага абнаўлення. "</string> \n\nКалі вы націснеце «Маршрут з» разам з «Пачаць навігацыю», OsmAnd пакажа актуальную пазіцыю, як толькі знойдзе яе (так гэта можна выкарыстоўваць для пачатку навігацыі да таго, як месца будзе знойдзена); камбінацыя «Маршрут з» і «Паказаць маршрут» проста пакажа маршрут з любога пункту, які вы вылучыце, без наступнага абнаўлення. "</string>
@ -836,7 +835,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="init_native_library">Ініцыалізацыя свойскіх бібліятэк…</string> <string name="init_native_library">Ініцыалізацыя свойскіх бібліятэк…</string>
<string name="choose_auto_follow_route">Аўтаматычнае цэнтраваньне мапы</string> <string name="choose_auto_follow_route">Аўтаматычнае цэнтраваньне мапы</string>
<string name="choose_auto_follow_route_descr">Час, праз які мапа вернецца да бягучага месцазнаходжаньня</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">Аўтаматычнае цэнтраваньне толькі падчас навігацыі</string>
<string name="auto_follow_route_navigation_descr">Аўтаматычнае цэнтраваньне толькі падчас навігацыі.</string> <string name="auto_follow_route_navigation_descr">Аўтаматычнае цэнтраваньне толькі падчас навігацыі.</string>
<string name="auto_follow_location_enabled">Аўтаматычнае цэнтраваньне падчас карыстаньня.</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_title">Мова не падтрымліваецца</string>
<string name="tts_language_not_supported">Абраная мова не падтрымліваецца устаноўленым Android TTS (пераўтварэньне тэксту ў гук). Вы хочаце пашукаць іншы TTS? Калі не, то будзе выкарыстоўвацца другая ўстаноўленая мова TTS.</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_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_reverse_route">Развярнуць кірунак GPX</string>
<string name="gpx_option_destination_point">Выкарыстоўваць бягучы пункт прызначэньня</string> <string name="gpx_option_destination_point">Выкарыстоўваць бягучы пункт прызначэньня</string>
<string name="gpx_option_from_start_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_notification">Канал апавяшчэньня</string>
<string name="voice_stream_music">Мэдыя/музычны канал</string> <string name="voice_stream_music">Мэдыя/музычны канал</string>
<string name="warning_tile_layer_not_downloadable">Праграма не можа сьцягнуць слой мапы %1$s, паспрабуйце пераўсталяваць яе.</string> <string name="warning_tile_layer_not_downloadable">Праграма не можа сьцягнуць слой мапы %1$s, паспрабуйце пераўсталяваць яе.</string>
<string name="overlay_transparency_descr">Зьмяніць празрыстасць накладзенага слою</string> <string name="overlay_transparency_descr">Зьмяніць празрыстасьць накладзенага слою</string>
<string name="overlay_transparency">Празрыстасць накладаньня</string> <string name="overlay_transparency">Празрыстасьць накладаньня</string>
<string name="map_transparency_descr">Зьмяніць празрыстасць асноўнай мапы</string> <string name="map_transparency_descr">Зьмяніць празрыстасьць асноўнай мапы</string>
<string name="map_transparency">Празрыстасьць асноўнай мапы</string> <string name="map_transparency">Празрыстасьць асноўнай мапы</string>
<string name="layer_underlay">Мапа падкладкі…</string> <string name="layer_underlay">Мапа падкладкі…</string>
<string name="map_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_big_for_memory">Недастаткова памяці для лакальнай мапы \'\'{0}\'\'</string>
<string name="version_index_is_not_supported">Версія індэкса \'\'{0}\'\' не падтрымліваецца</string> <string name="version_index_is_not_supported">Версія індэкса \'\'{0}\'\' не падтрымліваецца</string>
<string name="use_osmand_routing_service">Навігацыя OsmAnd &gt; 20 км</string> <string name="use_osmand_routing_service">Навігацыя OsmAnd &gt; 20 км</string>
<string name="use_osmand_routing_service_descr">Выкарыстоўваць аўтаномную OsmAnd навігацыю на адлегласці &gt; 20 км (эксперыментальна)</string> <string name="use_osmand_routing_service_descr">Выкарыстоўваць аўтаномную OsmAnd навігацыю на адлегласьці &gt; 20 км (эксперыментальная)</string>
<string name="osmand_routing_experimental">Аўтаномная навігацыя OsmAnd зьяўляецца эксперыментальнай і не працуе на адлегласцях больш 20 км.\n\nУ гэтым выпадку для пракладкі маршруту выкарыстоўваецца онлайн сэрвіс CloudMade.</string> <string name="osmand_routing_experimental">Аўтаномная навігацыя OsmAnd зьяўляецца эксперыментальнай і не працуе на адлегласцях больш 20 км.\n\nУ гэтым выпадку для пракладкі маршруту выкарыстоўваецца онлайн сэрвіс CloudMade.</string>
<string name="specified_dir_doesnt_exist">Указаны каталог не знойдзены.</string> <string name="specified_dir_doesnt_exist">Указаны каталог не знойдзены.</string>
<string name="application_dir">Каталёг захоўваньня зьвестак</string> <string name="application_dir">Каталёг захоўваньня зьвестак</string>
@ -1228,7 +1227,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="update_poi_success">Дадзеныя POI былі пасьпяхова абноўленыя ({0} аб\'ектаў загружана)</string> <string name="update_poi_success">Дадзеныя POI былі пасьпяхова абноўленыя ({0} аб\'ектаў загружана)</string>
<string name="update_poi_error_local">Памылка падчас абнаўленьня лакальнага сьпісу POI</string> <string name="update_poi_error_local">Памылка падчас абнаўленьня лакальнага сьпісу POI</string>
<string name="update_poi_error_loading">Памылка пры загрузцы дадзеных з сервера</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="update_poi_is_not_available_for_zoom">Абнаўленьне POI не даступна для малых узроўняў маштабаваньня</string>
<string name="context_menu_item_update_poi">Абнавіць POI</string> <string name="context_menu_item_update_poi">Абнавіць POI</string>
<string name="context_menu_item_update_map_confirm">Абнавіць лакальныя дадзеныя праз Інтэрнэт?</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_comment_default">Зьмена POI</string>
<string name="poi_dialog_other_tags_message">Усе астатнія тэгі захоўваюцца</string> <string name="poi_dialog_other_tags_message">Усе астатнія тэгі захоўваюцца</string>
<string name="default_buttons_commit">Зьберагчы</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="filter_current_poiButton">Фільтраваць</string>
<string name="edit_filter_delete_menu_item">Выдаліць</string> <string name="edit_filter_delete_menu_item">Выдаліць</string>
<string name="edit_filter_save_as_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_descr">Капіяваньне дадзеных OsmAnd у новае месца (%s)…</string>
<string name="copying_osmand_files">Капіяваньне дадзеных OsmAnd…</string> <string name="copying_osmand_files">Капіяваньне дадзеных OsmAnd…</string>
<string name="app_mode_truck">Грузавік</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="speech_rate">Хуткасьць вымаўленьня</string>
<string name="disable_complex_routing">Адключыць складаную маршрутызацыю</string> <string name="disable_complex_routing">Адключыць складаную маршрутызацыю</string>
<string name="map_widget_map_rendering">Адмалёўка мапы</string> <string name="map_widget_map_rendering">Адмалёўка мапы</string>
@ -1569,7 +1568,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="osmodroid_unseek">Не адсочваць аб\'ект</string> <string name="osmodroid_unseek">Не адсочваць аб\'ект</string>
<string name="android_19_location_disabled">З версіі 4.4 Android (KitKat) вы ня можаце загружаць і абнаўляць мапу ў папярэднім каталогу захоўваньня (%s). Вы хочаце зьмяніць каталог на дазволены і скапіяваць усе файлы OsmAnd туды?\n Заўвага 1: Вашы старыя файлы застануцца некранутымі (вы можаце выдаліць іх самастойна).          <string name="android_19_location_disabled">З версіі 4.4 Android (KitKat) вы ня можаце загружаць і абнаўляць мапу ў папярэднім каталогу захоўваньня (%s). Вы хочаце зьмяніць каталог на дазволены і скапіяваць усе файлы OsmAnd туды?\n Заўвага 1: Вашы старыя файлы застануцца некранутымі (вы можаце выдаліць іх самастойна).         
\n Заўвага 2: У новым месцы захоўваньня будзе немагчыма адначасова выкарыстоўваць файлы ў OsmAnd і OsmAnd+.</string> \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: <string name="tip_recent_changes_1_7_1_t">Зьмены ў 1.7:
\n\t* ВАЖНА карты павінны быць навей лютага 2014 г. \n\t* ВАЖНА карты павінны быць навей лютага 2014 г.
\n\t* Цалкам абноўленая маршрутызацыя (хуткая і дакладная) \n\t* Цалкам абноўленая маршрутызацыя (хуткая і дакладная)
@ -1598,7 +1597,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="share_route_subject">Маршрут апублікаваны з дапамогай OsmAnd</string> <string name="share_route_subject">Маршрут апублікаваны з дапамогай OsmAnd</string>
<string name="navigation_intent_invalid">Няправільны фармат: %s</string> <string name="navigation_intent_invalid">Няправільны фармат: %s</string>
<string name="create_poi_link_to_osm_doc"><u>Online OSM</u> мапа з выявамі</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_descr">Паўтараць навігацыйныя інструкцыі праз рэгулярныя прамежкі часу</string>
<string name="keep_informing">Паўтараць навігацыйныя інструкцыі</string> <string name="keep_informing">Паўтараць навігацыйныя інструкцыі</string>
<string name="arrival_distance">Абвяшчэньне прыбыцьця</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="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="srtm_plugin_description">Модуль дазваляе cьцягваць дадзеныя ізаліній вышынь (\'Налады\' → \'Кіраваньне файламі мапаў\' → \'Сьцягнуць\' → Выберыце пажаданы тып мапы).</string>
<string name="osmodroid_plugin_description">Модуль OsMoDroid - пашырэньне для OsmAnd, што выкарыстоўвае праграму OsModroid для сеткавага адсочваньня. Інфармацыю аб сэрвісе можна знайсьці на сайце http://esya.ru.</string> <string name="osmodroid_plugin_description">Модуль OsMoDroid - пашырэньне для OsmAnd, што выкарыстоўвае праграму OsModroid для сеткавага адсочваньня. Інфармацыю аб сэрвісе можна знайсьці на сайце http://esya.ru.</string>
<string name="tip_altitude_offset_t">Большасць GPS прылад паказваюць вышыню односна элліпсоіда WGS84, для вызначэння вышыні над узроўнем мора неабходна правесці карэкцыю, якая залежыць ад вашага месцазнаходжання. ↵ <string name="tip_altitude_offset_t">"Большасьць GPS прылад паказваюць вышыню односна элліпсоіда WGS84, для вызначэньня вышыні над узроўнем мора неабходна правесьці карэкцыю, якая залежыць ад вашага месцазнаходжаньня. ↵ → →
→ → \n\nКаб выправіць значеньне вышыні выкарыстоўваецца праекцыя EGM96. ↵ \n\nКаб выправіць значэньне вышыні выкарыстоўваецца праекцыя EGM96. ↵ → →
→ → \n\nOsmAnd пакажа вышыню над узроўнем мора ў EGM96 пасля загрузкі файла \'World Altitide Correction\'(WW15MGH.DAC), праз \'Налады\' -&gt; \'Кіраваньне файламі мапаў\' (http://earth- info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC). ↵ \n\nOsmAnd пакажа вышыню над узроўнем мора ў EGM96 пасьля загрузкі файла \'World Altitide Correction\'(WW15MGH.DAC), праз \'Налады\' -&gt; \'Кіраваньне файламі мапаў\' (http://earth- info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC). ↵ "</string>
</string>
<string name="tip_recent_changes_0_8_2_t">Змены ў 0.8.2: ↵ <string name="tip_recent_changes_0_8_2_t">Змены ў 0.8.2: ↵
\n\t* Палепшаная маршрутызацыя ↵ \n\t* Палепшаная маршрутызацыя ↵
\n\t* Дынамічныя віджэты карты ↵ \n\t* Дынамічныя віджэты карты ↵
@ -1680,7 +1678,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="osmo_auto_send_locations_descr">Аўтаматычна пачынаць запіс сьледу і перадачу месцазнаходжаньня пасьля старту праграмы</string> <string name="osmo_auto_send_locations_descr">Аўтаматычна пачынаць запіс сьледу і перадачу месцазнаходжаньня пасьля старту праграмы</string>
<string name="osmo_auto_send_locations">Аўтаматычна пачынаць адсылку месцазнаходжаньня</string> <string name="osmo_auto_send_locations">Аўтаматычна пачынаць адсылку месцазнаходжаньня</string>
<string name="osmo_tracker_id">Пэрсанальны ID трэкера</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_session_token">Токен сэсыі: %1$s</string>
<string name="osmo_auth_pending">У чаканьні дазволу…</string> <string name="osmo_auth_pending">У чаканьні дазволу…</string>
<string name="osmo_locations_sent">"Месцазнаходжаньне адаслана %1$d (у буферы %2$d) "</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_gpx_track_downloaded">Сьцягнуты %1$s сьлед OsMo.</string>
<string name="osmo_group_by_invite">Уваход па запрашэньнi</string> <string name="osmo_group_by_invite">Уваход па запрашэньнi</string>
<string name="osmo_group_information">Калі ласка, прачытайце перад стварэньнем групы!</string> <string name="osmo_group_information">Калі ласка, прачытайце перад стварэньнем групы!</string>
<string name="osmo_group_information_desc">" - Усе створаныя групы з\'яўляюцца агульнымі! Калі вы хочаце заставацца ананімным, падключайце прыладу наўпрост праз Tracker-ідэнтыфікатар. <string name="osmo_group_information_desc">" - Усе створаныя групы зьяўляюцца агульнымі! Калі вы хочаце заставацца ананімным, падключайце прыладу наўпрост праз Tracker-ідэнтыфікатар.
\n - Група мажа быць зарэгістраваная на 16 чалавек. \n - Група мажа быць зарэгістраваная на 16 чалавек.
\n - У выпадку бяздзейнасці або актыўнасці толькі 1 чалавека на працягу 2 тыдняў, група будзе выдаленая. \n - У выпадку бязьдзейнасці або актыўнасьці толькі 1 чалавека на працягу 2 тыдняў, група будзе выдаленая.
\n - Вы можаце абмежаваць ўваход у групу, напрыклад па запрашэнні, але для кантрольню групай, вам неабходна скарыстацца кансольлю адміністратара. \n - Вы можаце абмежаваць ўваход у групу, напрыклад па запрашэньні, але для кантрольню групаю, вам неабходна скарыстацца кансольлю адміністратара.
\n - Калі вам трэба стварыць групу з іншымі ўмовамі, калі ласка, звяртайцеся на http://osmo.mobi"</string> \n - Калі вам трэба стварыць групу з іншымі ўмовамі, калі ласка, зьвяртайцеся на http://osmo.mobi"</string>
<string name="osmo_auth_error_short">Не атрымалася выканаць аўтарызацыю</string> <string name="osmo_auth_error_short">Не атрымалася выканаць аўтарызацыю</string>
<string name="osmo_auth_error">Адбылася памылка аўтарызацыі OsMo: %1$s.\nГэта можа быць выклікана часовай непрацаздольнасьцю службы ці сканьчэньнем вашай рэгістрацыі.\nХочаце зарэгістравацца ізноў?</string> <string name="osmo_auth_error">Адбылася памылка аўтарызацыі OsMo: %1$s.\nГэта можа быць выклікана часовай непрацаздольнасьцю службы ці сканьчэньнем вашай рэгістрацыі.\nХочаце зарэгістравацца ізноў?</string>
<string name="rendering_attr_hideBuildings_name">Схаваць будынкі</string> <string name="rendering_attr_hideBuildings_name">Схаваць будынкі</string>
@ -1824,7 +1822,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="rendering_attr_lessDetailed_name">Менш падрабязна</string> <string name="rendering_attr_lessDetailed_name">Менш падрабязна</string>
<string name="rendering_attr_hideAccess_name">Схаваць абмежаваньні доступу</string> <string name="rendering_attr_hideAccess_name">Схаваць абмежаваньні доступу</string>
<string name="rendering_attr_showAccess_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_showSurfaces_name">Адлюстроўваць тып пакрыцьця</string>
<string name="rendering_attr_showCycleRoutes_name">Паказаць веламаршруты</string> <string name="rendering_attr_showCycleRoutes_name">Паказаць веламаршруты</string>
<string name="stop_navigation_service">Прыпыніць</string> <string name="stop_navigation_service">Прыпыніць</string>
@ -1916,7 +1914,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="fav_point_dublicate_message">Назва ўлюбёнага пункту %1$s была зьменена для прадухіленьня дубляваньня імёнаў.</string> <string name="fav_point_dublicate_message">Назва ўлюбёнага пункту %1$s была зьменена для прадухіленьня дубляваньня імёнаў.</string>
<string name="use_native_render">Выкарыстоўваць натыўную візуалізацыю</string> <string name="use_native_render">Выкарыстоўваць натыўную візуалізацыю</string>
<string name="use_native_render_descr">Выкарыстоўваць С++ візуалізацыю замест Java</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="osmo_device_not_found">Прыстасаваньне ня знойдзена</string>
<string name="anonymous_user">Ананімны карыстальнік</string> <string name="anonymous_user">Ананімны карыстальнік</string>
<string name="logged_as">Вы ўвайшлі як %1$s</string> <string name="logged_as">Вы ўвайшлі як %1$s</string>
@ -1988,4 +1986,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="show_railway_warnings">Паказваць чыгуначныя пераезды</string> <string name="show_railway_warnings">Паказваць чыгуначныя пераезды</string>
<string name="speak_pedestrian">Папярэджваць пра пешаходныя пераходы</string> <string name="speak_pedestrian">Папярэджваць пра пешаходныя пераходы</string>
<string name="rendering_value__name">Па змоўчаньні</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> </resources>

View file

@ -234,7 +234,7 @@
<string name="index_name_tts_voice">Indicadors de veu (sintetitzats amb TTS, recomanat)</string> <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="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="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="pref_vector_rendering">Opcions específiques de renderització dels vectors</string>
<string name="delete_confirmation_msg">Voleu suprimir %1$s?</string> <string name="delete_confirmation_msg">Voleu suprimir %1$s?</string>
<string name="city_type_town">Poble</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_menu_item">Afegeix un comentari</string>
<string name="osb_comment_dialog_success">El comentari s\'ha afegit correctament</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="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="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. <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ú» -&gt; «Configuració del mapa» -&gt;«Mapa dia/nit». \n\nPodeu assignar un criteri pel canvi de dia/nit a «Menú» -&gt; «Configuració del mapa» -&gt;«Mapa dia/nit».
@ -1012,7 +1012,7 @@
<string name="route_descr_lat_lon">Lat %1$.3f long %2$.3f</string> <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="intermediate_points_change_order">Canvia l\'ordre</string>
<string name="recording_delete_confirm">Voleu eliminar aquest enregistrament?</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="recording_description">Enregistrament %1$s %3$s %2$s</string>
<string name="layer_recordings">Capa d\'enregistraments</string> <string name="layer_recordings">Capa d\'enregistraments</string>
<string name="recording_can_not_be_played">No es pot reproduir l\'enregistrament</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="share_route_subject">Ruta compartida via OsmAnd</string>
<string name="arrival_distance">Anunci d\'arribada</string> <string name="arrival_distance">Anunci d\'arribada</string>
<string name="arrival_distance_descr">Quan aviat vol l\'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_descr">Anunci d\'instruccions de navegació a intervals regulars</string>
<string name="keep_informing">Repetir instruccions de navegació</string> <string name="keep_informing">Repetir instruccions de navegació</string>
<string name="navigation_intent_invalid">Format no vàlid: %s</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="impassable_road">Evita carreteres…</string>
<string name="rendering_category_hide">Amaga</string> <string name="rendering_category_hide">Amaga</string>
<string name="wake_on_voice">Activa la pantalla</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="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="wake_on_voice_never">Mai</string>
<string name="advanced_settings">Avançat</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="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="speak_pedestrian">Anuncia els passos de zebra</string>
<string name="rendering_value__name">Renderització per defecte</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> </resources>

View file

@ -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> \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="recording_unavailable">nedostupné</string>
<string name="layer_recordings">Audio/video nahrávky</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="recording_default_name">nahrávám</string>
<string name="osmand_srtm_short_description_80_chars">OsmAnd modul pro offline zobrazování vrstevnic</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="stop_routing_confirm">Opravdu chcete zastavit navigaci?</string>
<string name="clear_dest_confirm">Opravdu chcete smazat cíl?</string> <string name="clear_dest_confirm">Opravdu chcete smazat cíl?</string>
<string name="recording_context_menu_show">Zobrazit</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="av_def_action_picture">Vyfotit</string>
<string name="recording_context_menu_precord">Vyfotit</string> <string name="recording_context_menu_precord">Vyfotit</string>
<string name="local_indexes_cat_av">Zvuková a video data</string> <string name="local_indexes_cat_av">Zvuková a video data</string>

View file

@ -33,7 +33,7 @@
<string name="recording_context_menu_delete">Slet optagelse</string> <string name="recording_context_menu_delete">Slet optagelse</string>
<string name="recording_context_menu_play">Afspil</string> <string name="recording_context_menu_play">Afspil</string>
<string name="recording_description">Optagelse %1$s %3$s %2$s</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="av_control_start">Start</string>
<string name="map_widget_av_notes">Audio-/videonoter</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> <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="init_native_library">Initialisere indbygget bibliotek…</string>
<string name="choose_auto_follow_route">Autocentrer kortvisning</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="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">Autocentrer kun navigation</string>
<string name="auto_follow_route_navigation_descr">Autocentrer kun kortvisning under navigation.</string> <string name="auto_follow_route_navigation_descr">Autocentrer kun kortvisning under navigation.</string>
<string name="auto_follow_location_enabled">Autocentrer kort.</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_save_as_menu_item">Gem som</string>
<string name="edit_filter_delete_menu_item">Slet</string> <string name="edit_filter_delete_menu_item">Slet</string>
<string name="filter_current_poiButton">Filter</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_other_tags_message">Alle de øvrige mærker bevares</string>
<string name="poi_dialog_comment">Kommentar</string> <string name="poi_dialog_comment">Kommentar</string>
<string name="poi_dialog_opening_hours">Åben</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_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_plugin_name">OsMo (avanceret live overvågning)</string>
<string name="osmo_settings">OpenStreetMap 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_descr">Gentag navigationsinstruktioner med jævne mellemrum</string>
<string name="keep_informing">Gentag navigationsinstruktioner</string> <string name="keep_informing">Gentag navigationsinstruktioner</string>
<string name="arrival_distance">Meddel ankomst</string> <string name="arrival_distance">Meddel ankomst</string>
@ -1833,7 +1833,7 @@
<string name="impassable_road">Undgå veje…</string> <string name="impassable_road">Undgå veje…</string>
<string name="rendering_category_hide">Skjul</string> <string name="rendering_category_hide">Skjul</string>
<string name="wake_on_voice">Tænd for skærmen</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="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="wake_on_voice_never">Aldrig</string>
<string name="advanced_settings">Avanceret</string> <string name="advanced_settings">Avanceret</string>
@ -1877,4 +1877,7 @@
<string name="show_pedestrian_warnings">Fodgængerovergange</string> <string name="show_pedestrian_warnings">Fodgængerovergange</string>
<string name="speak_pedestrian">Fodgængerovergange</string> <string name="speak_pedestrian">Fodgængerovergange</string>
<string name="rendering_value__name">Standard</string> <string name="rendering_value__name">Standard</string>
</resources> <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>

View file

@ -38,6 +38,7 @@
<string name="background_service_int_descr">GPS Aufwach-Intervall für Hintergrunddienst</string> <string name="background_service_int_descr">GPS Aufwach-Intervall für Hintergrunddienst</string>
<string name="background_service_int">GPS Aufwach-Intervall</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">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_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">Track jetzt speichern</string>
<string name="save_current_track_descr">Aktuellen Track jetzt auf SD-Karte abspeichern</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="init_native_library">Native Bibliothek wird initialisiert…</string>
<string name="choose_auto_follow_route">Kartenanzeige nachführen</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="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">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_route_navigation_descr">Kartennachführung erfolgt nur während Navigation.</string>
<string name="auto_follow_location_enabled">Kartennachführung aktiv.</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_backup">Deaktiviert</string>
<string name="local_indexes_cat_tts">Sprachansagen (TTS)</string> <string name="local_indexes_cat_tts">Sprachansagen (TTS)</string>
<string name="local_indexes_cat_voice">Sprachansagen (Aufnahmen)</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_tile">Online- und Kachel-Karten</string>
<string name="local_indexes_cat_map">Offline-Karten</string> <string name="local_indexes_cat_map">Offline-Karten</string>
<string name="local_indexes_cat_poi">POI-Daten</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_delete_confirm">Wollen Sie diese Aufnahme löschen?</string>
<string name="recording_unavailable">nicht verfügbar</string> <string name="recording_unavailable">nicht verfügbar</string>
<string name="recording_context_menu_play">Wiedergabe</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_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_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> <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">Teilen</string>
<string name="share_fav_subject">Über OsmAnd geteilte Favoriten</string> <string name="share_fav_subject">Über OsmAnd geteilte Favoriten</string>
<string name="use_points_as_intermediates">Route zwischen Punkten berechnen</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_descr">Navigationsanweisungen in regelmäßigen Abständen wiederholen</string>
<string name="keep_informing">Navigationsanweisungen wiederholen</string> <string name="keep_informing">Navigationsanweisungen wiederholen</string>
<string name="arrival_distance">Zielankündigung</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_segment_title">Abschnitt</string>
<string name="gpx_selection_number_of_points"> %1$s Punkte</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_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_route_points">%1$s \nRoutenpunkte %2$s</string>
<string name="gpx_selection_points">%1$s \nPunkte</string> <string name="gpx_selection_points">%1$s \nPunkte</string>
<string name="gpx_selection_track">%1$s \nTrack %2$s</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_visibility_txt">Sichtbarkeit</string>
<string name="gpx_tags_txt">Tags</string> <string name="gpx_tags_txt">Tags</string>
<string name="gpx_description_txt">Beschreibung</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_navigation">GPX-Route wählen</string>
<string name="gpx_option_reverse_route">GPX-Route umkehren</string> <string name="gpx_option_reverse_route">GPX-Route umkehren</string>
<string name="gpx_option_destination_point">Derzeitiges Ziel verwenden</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_category_others">Sonstiges</string>
<string name="rendering_attr_tramRoutes_name">Straßenbahnenlinien</string> <string name="rendering_attr_tramRoutes_name">Straßenbahnenlinien</string>
<string name="wake_on_voice">Bildschirm aktivieren</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="wake_on_voice_never">Niemals</string>
<string name="select_impassable_road">Auf Karte auswählen…</string> <string name="select_impassable_road">Auf Karte auswählen…</string>
<string name="impassable_road">Straße blockieren…</string> <string name="impassable_road">Straße blockieren…</string>

View file

@ -408,7 +408,7 @@
<string name="init_native_library">Αρχικοποίηση εγγενούς βιβλιοθήκης…</string> <string name="init_native_library">Αρχικοποίηση εγγενούς βιβλιοθήκης…</string>
<string name="choose_auto_follow_route">Αυτο-κεντράρισμα όψης χάρτη</string> <string name="choose_auto_follow_route">Αυτο-κεντράρισμα όψης χάρτη</string>
<string name="choose_auto_follow_route_descr">Χρόνος μέχρι η οπτική του χάρτη συγχρονιστεί με την τρέχουσα θέση</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">Αυτο-κεντράρισμα μόνο κατά την πλοήγηση</string>
<string name="auto_follow_route_navigation_descr">Αυτο-κεντραρισμένη οπτική χάρτη μόνο κατά την πλοήγηση.</string> <string name="auto_follow_route_navigation_descr">Αυτο-κεντραρισμένη οπτική χάρτη μόνο κατά την πλοήγηση.</string>
<string name="auto_follow_location_enabled">Αυτο-κεντράρισμα χάρτη σε χρήση.</string> <string name="auto_follow_location_enabled">Αυτο-κεντράρισμα χάρτη σε χρήση.</string>
@ -1040,7 +1040,7 @@
<string name="poi_dialog_comment_default">Αλλαγή ΣΕ</string> <string name="poi_dialog_comment_default">Αλλαγή ΣΕ</string>
<string name="poi_dialog_other_tags_message">Όλες οι άλλες ετικέτες διατηρούνται</string> <string name="poi_dialog_other_tags_message">Όλες οι άλλες ετικέτες διατηρούνται</string>
<string name="default_buttons_commit">Commit</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="filter_current_poiButton">Φιλτράρισμα</string>
<string name="edit_filter_delete_menu_item">Διαγραφή</string> <string name="edit_filter_delete_menu_item">Διαγραφή</string>
<string name="edit_filter_save_as_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_can_not_be_played">Η εγγραφή δεν μπορεί να αναπαραχθεί</string>
<string name="recording_context_menu_delete">Διαγραφή εγγραφής</string> <string name="recording_context_menu_delete">Διαγραφή εγγραφής</string>
<string name="recording_context_menu_play">Αναπαραγωγή</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="recording_default_name">εγγραφή</string>
<string name="map_widget_av_notes">Σημειώσεις ήχου/video</string> <string name="map_widget_av_notes">Σημειώσεις ήχου/video</string>
<string name="av_def_action_video">Εγγραφή video</string> <string name="av_def_action_video">Εγγραφή video</string>
@ -1172,7 +1172,7 @@
<string name="clear_dest_confirm">Είστε σίγουρος ότι θέλετε να καθαρίσετε το σημείο προορισμού (και τα σημεία διαδρομής);</string> <string name="clear_dest_confirm">Είστε σίγουρος ότι θέλετε να καθαρίσετε το σημείο προορισμού (και τα σημεία διαδρομής);</string>
<string name="precise_routing_mode">Ακριβής δρομολόγηση (άλφα)</string> <string name="precise_routing_mode">Ακριβής δρομολόγηση (άλφα)</string>
<string name="recording_context_menu_show">Εμφάνιση</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="av_def_action_picture">Λήψη φωτογραφίας</string>
<string name="recording_context_menu_precord">Λήψη φωτογραφίας</string> <string name="recording_context_menu_precord">Λήψη φωτογραφίας</string>
<string name="audionotes_location_not_defined">Δεν έχει καθοριστεί ακόμα τοποθεσία για συσχέτιση με την σημείωση. \"Χρήση τοποθεσίας ...\" για να συνδέσετε την σημείωση με την καθορισμένη τοποθεσία</string> <string name="audionotes_location_not_defined">Δεν έχει καθοριστεί ακόμα τοποθεσία για συσχέτιση με την σημείωση. \"Χρήση τοποθεσίας ...\" για να συνδέσετε την σημείωση με την καθορισμένη τοποθεσία</string>
@ -1541,7 +1541,7 @@
<string name="share_route_as_gpx">Διαμοιρασμός διαδρομής ως αρχείο GPX</string> <string name="share_route_as_gpx">Διαμοιρασμός διαδρομής ως αρχείο GPX</string>
<string name="arrival_distance">Ανακοίνωση άφιξης</string> <string name="arrival_distance">Ανακοίνωση άφιξης</string>
<string name="arrival_distance_descr">Πόσο σύντομα θέλετε την αναγγελία άφιξης;</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="keep_informing">Επανάληψη οδηγιών πλοήγησης</string>
<string name="local_index_mi_export">Εξαγωγή</string> <string name="local_index_mi_export">Εξαγωγή</string>
<string name="import_file_favourites">Αποθήκευση ως αρχείο GPX ή εισαγωγή στα αγαπημένα;</string> <string name="import_file_favourites">Αποθήκευση ως αρχείο GPX ή εισαγωγή στα αγαπημένα;</string>
@ -1682,7 +1682,7 @@
<string name="error_avoid_specific_road">Δεν βρέθηκε παράκαμψη</string> <string name="error_avoid_specific_road">Δεν βρέθηκε παράκαμψη</string>
<string name="osmo_use_https_descr">Χρήση ασφαλούς σύνδεσης με τον διακομιστή</string> <string name="osmo_use_https_descr">Χρήση ασφαλούς σύνδεσης με τον διακομιστή</string>
<string name="advanced_settings">Προηγμένες</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="map_widget_appearance_rem">Εναπομείναντα στοιχεία</string>
<string name="speed_limit_exceed_message">Επιλέξτε το περιθώριο του ορίου ταχύτητας, πάνω από το οποίο θα ακούτε ηχητική προειδοποίηση.</string> <string name="speed_limit_exceed_message">Επιλέξτε το περιθώριο του ορίου ταχύτητας, πάνω από το οποίο θα ακούτε ηχητική προειδοποίηση.</string>
<string name="fav_point_dublicate_message">Αλλάχτηκε το όνομα του αγαπημένου σημείου σε %1$s για να αποφευχθούν διπλά ονόματα.</string> <string name="fav_point_dublicate_message">Αλλάχτηκε το όνομα του αγαπημένου σημείου σε %1$s για να αποφευχθούν διπλά ονόματα.</string>

View file

@ -113,7 +113,7 @@
<string name="init_native_library">Inicializando biblioteca nativa…</string> <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">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="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">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_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> <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_comment_default">Cambiando PDI</string>
<string name="poi_dialog_other_tags_message">Se preservan las otras etiquetas</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_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="filter_current_poiButton">Filtro</string>
<string name="edit_filter_delete_menu_item">Borrar</string> <string name="edit_filter_delete_menu_item">Borrar</string>
<string name="edit_filter_save_as_menu_item">Guardar como</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_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_delete">Eliminar grabación</string>
<string name="recording_context_menu_play">Reproducir</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_stop">Parar</string>
<string name="av_control_start">Iniciar</string> <string name="av_control_start">Iniciar</string>
<string name="map_widget_av_notes">Notas de audio</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_as_gpx">Compartir la ruta como archivo GPX</string>
<string name="share_route_subject">Ruta compartida vía OsmAnd</string> <string name="share_route_subject">Ruta compartida vía OsmAnd</string>
<string name="navigation_intent_invalid">Formato inválido: %s</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_descr">Re-anunciar instrucciones de navegación a intervalos regulares</string>
<string name="keep_informing">Repetir instrucciones de navegación</string> <string name="keep_informing">Repetir instrucciones de navegación</string>
<string name="arrival_distance">Anuncio de llegada</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_attr_busRoutes_name">Rutas de autobús</string>
<string name="rendering_category_hide">Ocultar</string> <string name="rendering_category_hide">Ocultar</string>
<string name="wake_on_voice">Encender pantalla</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="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="wake_on_voice_never">Nunca</string>
<string name="advanced_settings">Avanzado</string> <string name="advanced_settings">Avanzado</string>
@ -1886,4 +1886,7 @@
<string name="navigate_point_northing">Al norte</string> <string name="navigate_point_northing">Al norte</string>
<string name="speak_pedestrian">Anunciar pasos de peatones</string> <string name="speak_pedestrian">Anunciar pasos de peatones</string>
<string name="rendering_value__name">Por defecto</string> <string name="rendering_value__name">Por defecto</string>
</resources> <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>

View file

@ -102,7 +102,7 @@
<string name="init_native_library">Chargement …</string> <string name="init_native_library">Chargement …</string>
<string name="choose_auto_follow_route">Centrer automatiquement la carte</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="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">Recentrage automatique navigation</string>
<string name="auto_follow_route_navigation_descr">Recentrage automatique uniquement pendant la 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> <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_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_delete">Supprimer l\'enregistrement</string>
<string name="recording_context_menu_play">Lire</string> <string name="recording_context_menu_play">Lire</string>
<string name="recording_description">Enregistrement %1$s %2$s à %3$s</string> <string name="recording_description">Enregistrement %1$s %3$s %2$s</string>
<string name="recording_default_name">enregistrement</string> <string name="recording_default_name">Enregistrement en cours</string>
<string name="av_control_stop">Arrêter</string> <string name="av_control_stop">Arrêter</string>
<string name="map_widget_av_notes">Notes audio/vidéo</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 : <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_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="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_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="av_def_action_picture">Prendre une photo</string>
<string name="recording_context_menu_precord">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> <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_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_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="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_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="keep_informing">Répéter les instructions de navigation</string>
<string name="navigation_intent_invalid">Format invalide : %s</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="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="speak_pedestrian">Annoncer les passages piéton</string>
<string name="rendering_value__name">Par défaut</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> </resources>

File diff suppressed because one or more lines are too long

View file

@ -94,7 +94,7 @@
<string name="init_native_library">Inizializzazione libreria nativa…</string> <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">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="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">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_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> <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_comment_default">Cambio PDI</string>
<string name="poi_dialog_other_tags_message">Tutte le altre etichette sono conservate</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_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="filter_current_poiButton">Filtro</string>
<string name="edit_filter_delete_menu_item">Elimina</string> <string name="edit_filter_delete_menu_item">Elimina</string>
<string name="edit_filter_save_as_menu_item">Salva come</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_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_delete">Elimina la registrazione</string>
<string name="recording_context_menu_play">Riproduci</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_description">Registrazione %1$s %3$s %2$s</string>
<string name="recording_default_name">registrazione</string> <string name="recording_default_name">Registrazione in corso</string>
<string name="av_control_stop">Ferma</string> <string name="av_control_stop">Ferma</string>
<string name="av_control_start">Avvia</string> <string name="av_control_start">Avvia</string>
<string name="map_widget_av_notes">Note audio/video</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="recording_context_menu_show">Visualizza</string>
<string name="av_def_action_picture">Scatta una foto</string> <string name="av_def_action_picture">Scatta una foto</string>
<string name="recording_context_menu_precord">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="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="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> <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_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_plugin_name">OsMo (Monitoraggio avanzato in tempo reale)</string>
<string name="osmo_settings">Monitoraggio OpenStreetMap</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_descr">Annuncia nuovamente a intervalli regolari le indicazioni di navigazione</string>
<string name="keep_informing">Ripeti le istruzioni di navigazione</string> <string name="keep_informing">Ripeti le istruzioni di navigazione</string>
<string name="arrival_distance">Annuncio arrivo</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="impassable_road">Evita strade …</string>
<string name="rendering_category_hide">Nascondi</string> <string name="rendering_category_hide">Nascondi</string>
<string name="wake_on_voice">Accendi lo schermo</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="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="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> <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="show_pedestrian_warnings">Mostra gli attraversamenti pedonali</string>
<string name="speak_pedestrian">Annuncia gli attraversamenti pedonali</string> <string name="speak_pedestrian">Annuncia gli attraversamenti pedonali</string>
<string name="rendering_value__name">Preimpostato</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> </resources>

View file

@ -189,7 +189,7 @@
<string name="init_native_library">기본 라이브러리 초기화중…</string> <string name="init_native_library">기본 라이브러리 초기화중…</string>
<string name="choose_auto_follow_route">자동-센터 지도 보기</string> <string name="choose_auto_follow_route">자동-센터 지도 보기</string>
<string name="choose_auto_follow_route_descr">지도 보기가 현재 위치와 동기화하여 복귀할 때까지 걸리는 시간입니다</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">자동-센터 운행 전용</string>
<string name="auto_follow_route_navigation_descr">운행 중에만 자동-센터 지도 보기를 사용합니다.</string> <string name="auto_follow_route_navigation_descr">운행 중에만 자동-센터 지도 보기를 사용합니다.</string>
<string name="auto_follow_location_enabled">자동-센터 지도 보기 사용 중입니다.</string> <string name="auto_follow_location_enabled">자동-센터 지도 보기 사용 중입니다.</string>
@ -883,7 +883,7 @@
<string name="poi_dialog_comment_default">POI 변경</string> <string name="poi_dialog_comment_default">POI 변경</string>
<string name="poi_dialog_other_tags_message">모든 다른 태그는 보존된다</string> <string name="poi_dialog_other_tags_message">모든 다른 태그는 보존된다</string>
<string name="default_buttons_commit">반영</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="filter_current_poiButton">필터</string>
<string name="edit_filter_delete_menu_item">삭제</string> <string name="edit_filter_delete_menu_item">삭제</string>
<string name="edit_filter_save_as_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="share_route_subject">OsmAnd를 통해 공유된 경로</string>
<string name="arrival_distance">도착 알림</string> <string name="arrival_distance">도착 알림</string>
<string name="arrival_distance_descr">도착 알림을 원하세요 ?</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_descr">정기적인 간격으로 운행 명령을 다시 알리기</string>
<string name="keep_informing">운행 명령을 반복</string> <string name="keep_informing">운행 명령을 반복</string>
<string name="navigation_intent_invalid">잘못된 포맷 : %s</string> <string name="navigation_intent_invalid">잘못된 포맷 : %s</string>
@ -2063,7 +2063,7 @@
<string name="rendering_attr_tramTrainRoutes_name">전차 및 기차 노선</string> <string name="rendering_attr_tramTrainRoutes_name">전차 및 기차 노선</string>
<string name="rendering_category_hide">숨기기</string> <string name="rendering_category_hide">숨기기</string>
<string name="wake_on_voice">화면 켜기</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="lock_screen_request_explanation">%1$의 절전 기능에 대한 화면을 해제 하려면 이 권한이 필요 합니다.</string>
<string name="wake_on_voice_never">결코</string> <string name="wake_on_voice_never">결코</string>
<string name="advanced_settings">고급</string> <string name="advanced_settings">고급</string>
@ -2107,4 +2107,7 @@
<string name="show_pedestrian_warnings">보행자 횡단보도 표시</string> <string name="show_pedestrian_warnings">보행자 횡단보도 표시</string>
<string name="speak_pedestrian">보행자 횡단보도 알리기</string> <string name="speak_pedestrian">보행자 횡단보도 알리기</string>
<string name="rendering_value__name">기본값</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> </resources>

View file

@ -173,7 +173,7 @@
<string name="poi_kindergarten">Kleuterschool</string> <string name="poi_kindergarten">Kleuterschool</string>
<string name="poi_university">Universiteit</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_prison">Gevangenis</string>
<string name="poi_embassy">Ambassade</string> <string name="poi_embassy">Ambassade</string>
<string name="poi_government">Regering</string> <string name="poi_government">Regering</string>
@ -438,4 +438,89 @@
<string name="poi_power_substation">Onderstation</string> <string name="poi_power_substation">Onderstation</string>
<string name="poi_power_transformer">Transformator</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> </resources>

View file

@ -516,7 +516,7 @@
<string name="transport_searching_transport">Openbaar vervoer-resultaten (geen bestemming):</string> <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_searching_route">Openbaar vervoer-resultaten ({0} naar bestemming):</string>
<string name="transport_search_none">geen</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="map_index">Kaart</string>
<string name="voice">Opgenomen stem</string> <string name="voice">Opgenomen stem</string>
<string name="no_vector_map_loaded">Geen vectorkaarten geladen</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="layer_gpx_layer">GPX-track…</string>
<string name="error_reading_gpx">Fout bij het lezen van GPX-gegevens</string> <string name="error_reading_gpx">Fout bij het lezen van GPX-gegevens</string>
<string name="vector_data">Offline vectorkaarten</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="point_on_map">Locatie:\n Lat %1$.5f\n Lon %2$.5f</string>
<string name="osb_bug_name">Bug</string> <string name="osb_bug_name">Bug</string>
<string name="poi_context_menu_modify">Wijzig interessepunt</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="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="poi_namefinder_query_empty">Type een zoekwoord om een interessepunt te vinden</string>
<string name="any_poi">Alle</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="thanks_yandex_traffic">Met dank aan Yandex voor de verkeersinformatie.</string>
<string name="layer_yandex_traffic">Yandex Traffic</string> <string name="layer_yandex_traffic">Yandex Traffic</string>
<string name="layer_route">Route</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_can_not_be_played">Opname kan niet worden afgespeeld</string>
<string name="recording_context_menu_delete">Wis opname</string> <string name="recording_context_menu_delete">Wis opname</string>
<string name="recording_context_menu_play">Afspelen</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="recording_default_name">opname</string>
<string name="av_control_stop">Stop</string> <string name="av_control_stop">Stop</string>
<string name="av_control_start">Start</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_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="dropbox_plugin_name">Dropbox-plugin</string>
<string name="recording_context_menu_show">Toon</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="av_def_action_picture">Neem een foto</string>
<string name="recording_context_menu_precord">Neem een foto</string> <string name="recording_context_menu_precord">Neem een foto</string>
<string name="stop_routing_confirm">Navigatie stoppen?</string> <string name="stop_routing_confirm">Navigatie stoppen?</string>

View file

@ -10,7 +10,7 @@
<string name="pref_vector_map">Ustawienia mapy wektorowej</string> <string name="pref_vector_map">Ustawienia mapy wektorowej</string>
<string name="choose_auto_follow_route">Autocentrowanie mapy</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="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">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_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> <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_comment_default">Zmiana POI</string>
<string name="poi_dialog_other_tags_message">Wszystkie pozostałe tagi pozostają bez zmian</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_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="filter_current_poiButton">Filtr</string>
<string name="edit_filter_delete_menu_item">Usuń</string> <string name="edit_filter_delete_menu_item">Usuń</string>
<string name="edit_filter_save_as_menu_item">Zapisz jako</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_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_delete">Usuń nagranie</string>
<string name="recording_context_menu_play">Odtwórz</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_description">Nagranie %1$s %3$s %2$s</string>
<string name="recording_default_name">nagranie</string> <string name="recording_default_name">Nagranie</string>
<string name="av_control_stop">Stop</string> <string name="av_control_stop">Stop</string>
<string name="av_control_start">Start</string> <string name="av_control_start">Start</string>
<string name="map_widget_av_notes">Notatki audio/video</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="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="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_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="av_def_action_picture">Zrób zdjęcie</string>
<string name="recording_context_menu_precord">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> <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_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_plugin_name">OsMo (Zaawansowany Monitoring na Żywo)</string>
<string name="osmo_settings">Monitoring OpenStreetMap</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_descr">Podawaj instrukcje nawigacji w regularnych odstępach czasu</string>
<string name="keep_informing">Powtarzaj instrukcje nawigacji</string> <string name="keep_informing">Powtarzaj instrukcje nawigacji</string>
<string name="arrival_distance">Informacja o odległości do celu</string> <string name="arrival_distance">Informacja o odległości do celu</string>

File diff suppressed because one or more lines are too long

View file

@ -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_save_gpx">Sarba comente GPX</string>
<string name="distance_measurement_load_gpx">Aberi GPX esistente</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="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="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="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> <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_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="precise_routing_mode">Calculu pretzisu de s\'àndala (alfa)</string>
<string name="recording_context_menu_show">Ammustra</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="av_def_action_picture">Iscata una foto</string>
<string name="recording_context_menu_precord">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> <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_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_delete">Burra sa registratzione</string>
<string name="recording_context_menu_play">Reprodui</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="recording_default_name">registratzione</string>
<string name="av_control_stop">Stop</string> <string name="av_control_stop">Stop</string>
<string name="av_control_start">Avia/Inghitza</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_day_night_mode">Modalidade die/note</string>
<string name="tip_osm_improve">Megiora sos datos OSM</string> <string name="tip_osm_improve">Megiora sos datos OSM</string>
<string name="tip_navigation">Nàvigu</string> <string name="tip_navigation">Nàvigu</string>
<string name="auto_follow_route_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">Mai</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="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_raster_map">Impostaduras de sa mitza de sa mapa</string>
<string name="pref_vector_map">Impostaduras de sa mapa vetoriale</string> <string name="pref_vector_map">Impostaduras de sa mapa vetoriale</string>

View file

@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<resources><string name="recording_context_menu_show">Zobraziť</string> <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="av_def_action_picture">Zachytiť fotografiu</string>
<string name="recording_context_menu_precord">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> <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="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">Automatické centrovanie</string>
<string name="choose_auto_follow_route_descr">Čas pokiaľ sa mapové zobrazenie zosynchronizuje s pozíciou</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">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_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> <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_comment_default">Zmena POI</string>
<string name="poi_dialog_other_tags_message">Všetky ostatné tagy ponechané</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_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="filter_current_poiButton">Filter</string>
<string name="edit_filter_delete_menu_item">Vymazať</string> <string name="edit_filter_delete_menu_item">Vymazať</string>
<string name="edit_filter_save_as_menu_item">Uložiť ako</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_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_delete">Odstrániť záznam</string>
<string name="recording_context_menu_play">Prehrať</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="recording_default_name">nahrávka</string>
<string name="av_control_stop">Zastaviť</string> <string name="av_control_stop">Zastaviť</string>
<string name="av_control_start">Nahrať</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_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_plugin_name">OsMo</string>
<string name="osmo_settings">OpenStreetMap sledovanie</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_descr">Opakuj navigačné pokyny v pravidelných intervaloch</string>
<string name="keep_informing">Opakuj navigačné pokyny</string> <string name="keep_informing">Opakuj navigačné pokyny</string>
<string name="arrival_distance">Oznámenie príjazdu</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="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="speak_pedestrian">Oznamovať priechody pre chodcov</string>
<string name="rendering_value__name">Predvolené</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> </resources>

View file

@ -306,7 +306,7 @@
<string name="general_settings_descr">Določi splošne nastavitve</string> <string name="general_settings_descr">Določi splošne nastavitve</string>
<string name="global_app_settings">Splošne nastavitve aplikacije</string> <string name="global_app_settings">Splošne nastavitve aplikacije</string>
<string name="preferred_locale">Jezik</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="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="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> <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_undefined">Nedoločeno</string>
<string name="search_position_fixed">" "</string> <string name="search_position_fixed">" "</string>
<string name="search_position_current_location">Trenutni položaj …</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="search_position_address">Naslov …</string>
<string name="city_type_city">Mesto</string> <string name="city_type_city">Mesto</string>
<string name="city_type_hamlet">Zaselek</string> <string name="city_type_hamlet">Zaselek</string>
@ -1116,7 +1116,7 @@
<string name="srtm_plugin_name">Vtičnik Izohipse</string> <string name="srtm_plugin_name">Vtičnik Izohipse</string>
<string name="download_select_map_types">Drugi zemljevidi</string> <string name="download_select_map_types">Drugi zemljevidi</string>
<string name="recording_context_menu_play">Predvajaj</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="recording_default_name">snemanje</string>
<string name="av_control_stop">Ustavi</string> <string name="av_control_stop">Ustavi</string>
<string name="map_widget_av_notes">Zvočni zapisi</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_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="dropbox_plugin_name">Vtičnik Dropbox</string>
<string name="recording_context_menu_show">Prikaži</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="av_def_action_picture">Posnami fotografijo</string>
<string name="recording_context_menu_precord">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> <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="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="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="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="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="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> <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_descr">Nastavite velikost napisov na zemljevidu.</string>
<string name="text_size">Velikost napisov</string> <string name="text_size">Velikost napisov</string>
<string name="rendering_attr_osmcTraces_name">Prosojnica s simboli za pohodništvo</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="impassable_road">Izogibanje cestam…</string>
<string name="rendering_attr_tramTrainRoutes_name">Proge tramvaja in vlaka</string> <string name="rendering_attr_tramTrainRoutes_name">Proge tramvaja in vlaka</string>
<string name="rendering_attr_busRoutes_name">Proge avtobusov</string> <string name="rendering_attr_busRoutes_name">Proge avtobusov</string>

View file

@ -68,7 +68,7 @@
<string name="poi_dialog_comment_default">Ändring av POI</string> <string name="poi_dialog_comment_default">Ändring av POI</string>
<string name="poi_dialog_other_tags_message">Alla andra taggar sparas</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_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="filter_current_poiButton">Filter</string>
<string name="add_favorite_dialog_default_favourite_name">Favorit</string> <string name="add_favorite_dialog_default_favourite_name">Favorit</string>
<string name="default_buttons_no">Nej</string> <string name="default_buttons_no">Nej</string>
@ -395,7 +395,7 @@
<string name="init_native_library">Initierar inbyggt bibliotek …</string> <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">Auto-centrerad kartvy</string>
<string name="choose_auto_follow_route_descr">Tid tills kartvyn synkroniseras med aktuell position</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">Auto-centrera endast nav</string>
<string name="auto_follow_route_navigation_descr">Auto-centrera kartan endast vid navigering.</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> <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_delete">Ta bort inspelningen</string>
<string name="recording_context_menu_play">Spela upp</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_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="av_control_stop">Stoppa</string>
<string name="map_widget_av_notes">Ljud-/Videoanteckningar</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> <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="interrupt_music">Avbryt musik</string>
<string name="share_route_as_gpx">Dela rutt som GPX-fil</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="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_descr">Läs upp navigationsinstruktioner med regelbundna intervall</string>
<string name="keep_informing">Upprepa navigationsinstruktioner</string> <string name="keep_informing">Upprepa navigationsinstruktioner</string>
@ -1724,7 +1724,7 @@
<string name="impassable_road">Undvik vägar …</string> <string name="impassable_road">Undvik vägar …</string>
<string name="rendering_category_hide">Dölj</string> <string name="rendering_category_hide">Dölj</string>
<string name="wake_on_voice">Slå på skärmen</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="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="wake_on_voice_never">Aldrig</string>
<string name="advanced_settings">Avancerat</string> <string name="advanced_settings">Avancerat</string>
@ -1769,4 +1769,5 @@
<string name="voices">Röstprompter</string> <string name="voices">Röstprompter</string>
<string name="speak_pedestrian">Meddela om övergångsställen</string> <string name="speak_pedestrian">Meddela om övergångsställen</string>
<string name="rendering_value__name">Standard</string> <string name="rendering_value__name">Standard</string>
</resources> <string name="avoid_roads_msg">Du kan ändra rutten genom att markera vägar att undvika</string>
</resources>

View file

@ -377,7 +377,7 @@
<string name="init_native_library">初始化原生函式庫…</string> <string name="init_native_library">初始化原生函式庫…</string>
<string name="choose_auto_follow_route">地圖檢視自動置中</string> <string name="choose_auto_follow_route">地圖檢視自動置中</string>
<string name="choose_auto_follow_route_descr">一段時間後地圖會移到目前位置</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">只有導航時自動置中</string>
<string name="auto_follow_route_navigation_descr">只有在導航時,地圖檢視自動置中。</string> <string name="auto_follow_route_navigation_descr">只有在導航時,地圖檢視自動置中。</string>
<string name="auto_follow_location_enabled">使用地圖檢視自動置中。</string> <string name="auto_follow_location_enabled">使用地圖檢視自動置中。</string>
@ -983,7 +983,7 @@
<string name="poi_dialog_comment_default">興趣點變更中</string> <string name="poi_dialog_comment_default">興趣點變更中</string>
<string name="poi_dialog_other_tags_message">所有其它的標誌已保存</string> <string name="poi_dialog_other_tags_message">所有其它的標誌已保存</string>
<string name="default_buttons_commit">提交</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="filter_current_poiButton">篩選</string>
<string name="edit_filter_delete_menu_item">刪除</string> <string name="edit_filter_delete_menu_item">刪除</string>
<string name="edit_filter_save_as_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">OpenStreetMap 監控</string>
<string name="osmo_settings_descr">組態監控設定值和安裝個人監控頻道</string> <string name="osmo_settings_descr">組態監控設定值和安裝個人監控頻道</string>
<string name="osmo_plugin_description">"OpenStreetMap 進階即時監控,跟蹤其它裝置並進行追蹤,請參閱 http://osmo.mobi。建立匿名群組分享彼此的位置和交流。它具有各種設定用於連線階段追蹤或持續的追蹤。匿名群組是有限制天數和一些功能也就是沒有遠端控制和群組管理員。完整的功能需在網站上建立群組並且只有已註冊的使用者才能進入他們。 "</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_descr">按照定期間隔重新通報導航指示</string>
<string name="keep_informing">重複導航指示</string> <string name="keep_informing">重複導航指示</string>
<string name="arrival_distance">到達預告</string> <string name="arrival_distance">到達預告</string>
@ -1824,8 +1824,8 @@
<string name="impassable_road">避開的道路…</string> <string name="impassable_road">避開的道路…</string>
<string name="rendering_attr_tramTrainRoutes_name">有軌電車和火車路線</string> <string name="rendering_attr_tramTrainRoutes_name">有軌電車和火車路線</string>
<string name="rendering_category_hide">隱藏</string> <string name="rendering_category_hide">隱藏</string>
<string name="wake_on_voice">開啟螢幕</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$s 需要此許可權才能關閉螢幕。</string> <string name="lock_screen_request_explanation">為了節電作用 %1$s 需要此許可權才能關閉螢幕。</string>
<string name="wake_on_voice_never">永不</string> <string name="wake_on_voice_never">永不</string>
<string name="advanced_settings">進階</string> <string name="advanced_settings">進階</string>
@ -1869,4 +1869,7 @@
<string name="show_pedestrian_warnings">顯示行人穿越道</string> <string name="show_pedestrian_warnings">顯示行人穿越道</string>
<string name="speak_pedestrian">通報行人穿越道</string> <string name="speak_pedestrian">通報行人穿越道</string>
<string name="rendering_value__name">預設</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> </resources>

View file

@ -9,6 +9,8 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). 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 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="rendering_value__name">Default</string>
<string name="speak_pedestrian">Announce pedestrian crosswalks</string> <string name="speak_pedestrian">Announce pedestrian crosswalks</string>
<string name="rendering_attr_roadStyle_name">Road style</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_tramTrainRoutes_name">Tram and train routes</string>
<string name="rendering_attr_subwayMode_name">Subway 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="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">Turn screen on</string>
<string name="wake_on_voice_descr">Turn on the device screen when approaching a turn</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="wake_on_voice_never">Never</string>
<string name="select_impassable_road">Select on map&#8230;</string> <string name="select_impassable_road">Select on map&#8230;</string>
<string name="impassable_road">Avoid roads&#8230;</string> <string name="impassable_road">Avoid roads&#8230;</string>
@ -141,6 +143,7 @@
<string name="background_service_int">GPS Wake-up interval</string> <string name="background_service_int">GPS Wake-up interval</string>
<string name="enable_sleep_mode">Enable GPS sleep mode</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">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_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_descr">Save current track to SD now</string>
<string name="save_current_track">Save current GPX track</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_segment_title">Segment</string>
<string name="gpx_selection_number_of_points"> %1$s points</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_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_route_points">%1$s \nRoute points %2$s</string>
<string name="gpx_selection_points">%1$s \nPoints</string> <string name="gpx_selection_points">%1$s \nPoints</string>
<string name="gpx_selection_track">%1$s \nTrack %2$s</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_delete">Delete recording</string>
<string name="recording_context_menu_play">Play</string> <string name="recording_context_menu_play">Play</string>
<string name="recording_description">Recording %1$s %3$s %2$s</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_stop">Stop</string>
<string name="av_control_start">Start</string> <string name="av_control_start">Start</string>
<string name="map_widget_av_notes">Audio/video notes</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_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_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="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="show_current_gpx_title">Show current track</string>
<string name="tip_recent_changes_0_7_0_t">Changes in 0.7.0: <string name="tip_recent_changes_0_7_0_t">Changes in 0.7.0:
\n\t- Offline wikipedia data with articles \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&#8230;</string> <string name="init_native_library">Initializing native library&#8230;</string>
<string name="choose_auto_follow_route">Auto-center map view</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="choose_auto_follow_route_descr">Time until map view synchronizes with current position</string>
<string name="auto_follow_route_never">Never</string> <string name="auto_follow_route_never">Never (tap blue arrow to start guidance manually)</string>
<string name="keep_informing_never">Never</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_descr">Re-announce navigation instructions at regular intervals</string>
<string name="keep_informing">Repeat navigation instructions</string> <string name="keep_informing">Repeat navigation instructions</string>
<string name="auto_follow_route_navigation">Auto-center nav only</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_backup">Deactivated</string>
<string name="local_indexes_cat_tts">Voice data (TTS)</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_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="local_indexes_cat_poi">POI data</string>
<string name="ttsvoice">TTS voice</string> <string name="ttsvoice">TTS voice</string>
<string name="search_offline_clear_search">New Search</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_comment_default">POI changing</string>
<string name="poi_dialog_other_tags_message">All other tags are preserved</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_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="filter_current_poiButton">Filter</string>
<string name="edit_filter_delete_menu_item">Delete</string> <string name="edit_filter_delete_menu_item">Delete</string>
<string name="edit_filter_save_as_menu_item">Save As</string> <string name="edit_filter_save_as_menu_item">Save As</string>

View file

@ -51,8 +51,9 @@ public class ApplicationMode {
static { static {
ApplicationMode[] exceptPedestrianAndDefault = new ApplicationMode[] { CAR, BICYCLE, BOAT, AIRCRAFT }; 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[] pedestrian = new ApplicationMode[] { PEDESTRIAN };
ApplicationMode[] pedestrianBicycle = new ApplicationMode[] { PEDESTRIAN, BICYCLE };
ApplicationMode[] all = null; ApplicationMode[] all = null;
ApplicationMode[] none = new ApplicationMode[] {}; ApplicationMode[] none = new ApplicationMode[] {};
@ -69,7 +70,7 @@ public class ApplicationMode {
regWidget("speed", exceptPedestrianAndDefault); regWidget("speed", exceptPedestrianAndDefault);
regWidget("max_speed", CAR); regWidget("max_speed", CAR);
regWidget("gps_info", DEFAULT); regWidget("gps_info", DEFAULT);
regWidget("altitude", BICYCLE); regWidget("altitude", pedestrianBicycle);
// top // top
regWidget("compass", all); regWidget("compass", all);

View file

@ -181,6 +181,7 @@ public class FavouritesDbHelper {
} }
if (saveImmediately) { if (saveImmediately) {
saveCurrentPointsIntoFile(); saveCurrentPointsIntoFile();
sortAll();
} }
return true; return true;
@ -431,6 +432,9 @@ public class FavouritesDbHelper {
for(FavoriteGroup g : favoriteGroups) { for(FavoriteGroup g : favoriteGroups) {
Collections.sort(g.points, favoritesComparator); Collections.sort(g.points, favoritesComparator);
} }
if(cachedFavoritePoints != null) {
Collections.sort(cachedFavoritePoints, favoritesComparator);
}
} }

View file

@ -74,7 +74,7 @@ public class GpxSelectionHelper {
private void collectDisplayGroups(List<GpxDisplayGroup> dg, GPXFile g) { private void collectDisplayGroups(List<GpxDisplayGroup> dg, GPXFile g) {
String name = g.path; String name = g.path;
if(g.showCurrentTrack){ if(g.showCurrentTrack){
name = getString(R.string.gpx_selection_current_track); name = getString(R.string.gpx_available_current_track);
} else { } else {
int i = name.lastIndexOf('/'); int i = name.lastIndexOf('/');
if(i >= 0) { if(i >= 0) {
@ -324,7 +324,7 @@ public class GpxSelectionHelper {
selectedGPXFiles.add(savingTrackHelper.getCurrentTrack()); selectedGPXFiles.add(savingTrackHelper.getCurrentTrack());
} }
} }
} catch (JSONException e) { } catch (Exception e) {
app.getSettings().SELECTED_GPX.set(""); app.getSettings().SELECTED_GPX.set("");
e.printStackTrace(); e.printStackTrace();
} }
@ -337,10 +337,10 @@ public class GpxSelectionHelper {
if(s.gpxFile != null && !s.notShowNavigationDialog) { if(s.gpxFile != null && !s.notShowNavigationDialog) {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
try { try {
if(!Algorithms.isEmpty(s.gpxFile.path)) { if(s.isShowCurrentTrack()) {
obj.put(FILE, s.gpxFile.path);
} else {
obj.put(CURRENT_TRACK, true); obj.put(CURRENT_TRACK, true);
} else if(!Algorithms.isEmpty(s.gpxFile.path)) {
obj.put(FILE, s.gpxFile.path);
} }
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
@ -410,10 +410,14 @@ public class GpxSelectionHelper {
if(gpxFile.tracks.size() > 0) { if(gpxFile.tracks.size() > 0) {
this.color = gpxFile.tracks.get(0).getColor(0); this.color = gpxFile.tracks.get(0).getColor(0);
} }
processPoints();
}
public void processPoints() {
this.processedPointsToDisplay = gpxFile.proccessPoints(); this.processedPointsToDisplay = gpxFile.proccessPoints();
if(this.processedPointsToDisplay.isEmpty()) { if(this.processedPointsToDisplay.isEmpty()) {
this.processedPointsToDisplay = gpxFile.processRoutePoints(); this.processedPointsToDisplay = gpxFile.processRoutePoints();
routePoints = true; routePoints = !this.processedPointsToDisplay.isEmpty();
} }
} }
@ -437,6 +441,11 @@ public class GpxSelectionHelper {
return gpxFile; return gpxFile;
} }
public GPXFile getModifiableGpxFile() {
// call process points after
return gpxFile;
}
public boolean isShowCurrentTrack() { public boolean isShowCurrentTrack() {
return showCurrentTrack; return showCurrentTrack;
} }

View file

@ -596,6 +596,8 @@ public class OsmandApplication extends Application {
} catch (RuntimeException e) { } catch (RuntimeException e) {
warnings.add(e.getMessage()); warnings.add(e.getMessage());
} }
} else {
savingTrackHelper.loadGpxFromDatabase();
} }
} }
if(getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()){ if(getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()){

View file

@ -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<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_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(); 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_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 = "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_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_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_BUILDING = "last_searched_building"; //$NON-NLS-1$
public static final String LAST_SEARCHED_INTERSECTED_STREET = "last_searched_intersected_street"; //$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) { public boolean setLastSearchedRegion(String region, LatLon l) {
SettingsEditor edit = settingsAPI.edit(globalPreferences).putString(LAST_SEARCHED_REGION, region).putLong(LAST_SEARCHED_CITY, -1). 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$ putString(LAST_SEARCHED_STREET,"").putString(LAST_SEARCHED_BUILDING, ""); //$NON-NLS-1$ //$NON-NLS-2$
if (settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)) { if (settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)) {
edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$
@ -1552,12 +1550,12 @@ public class OsmandSettings {
} }
public String getLastSearchedPostcode(){ 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){ 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$ SettingsEditor edit = settingsAPI.edit(globalPreferences).putLong(LAST_SEARCHED_CITY, -1).putString(LAST_SEARCHED_STREET, "") //$NON-NLS-1$
LAST_SEARCHED_BUILDING, "").putString(lAST_SEARCHED_POSTCODE, postcode); //$NON-NLS-1$ .putString(LAST_SEARCHED_BUILDING, "").putString(LAST_SEARCHED_POSTCODE, postcode); //$NON-NLS-1$
if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){ if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){
edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ 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) { 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). 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$ putString(LAST_SEARCHED_STREET, "").putString(LAST_SEARCHED_BUILDING, "").putString(LAST_SEARCHED_POSTCODE, ""); //$NON-NLS-1$
edit.remove(lAST_SEARCHED_POSTCODE); //edit.remove(LAST_SEARCHED_POSTCODE);
if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){ if(settingsAPI.contains(globalPreferences,LAST_SEARCHED_INTERSECTED_STREET)){
edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$ edit.putString(LAST_SEARCHED_INTERSECTED_STREET, ""); //$NON-NLS-1$
} }
@ -1870,8 +1868,8 @@ public class OsmandSettings {
public enum AutoZoomMap { public enum AutoZoomMap {
NONE(R.string.auto_zoom_none, 0f, 18), NONE(R.string.auto_zoom_none, 0f, 18),
FARTHEST(R.string.auto_zoom_farthest, 1f, 17f), FARTHEST(R.string.auto_zoom_farthest, 1f, 15.5f),
FAR(R.string.auto_zoom_far, 1.4f, 18f), FAR(R.string.auto_zoom_far, 1.4f, 17f),
CLOSE(R.string.auto_zoom_close, 2f, 19f) CLOSE(R.string.auto_zoom_close, 2f, 19f)
; ;
public final float coefficient; public final float coefficient;

View file

@ -639,7 +639,9 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
if (info.gpx != null && info.gpx.showCurrentTrack) { if (info.gpx != null && info.gpx.showCurrentTrack) {
catName = info.name; catName = info.name;
} else { } 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; int found = -1;
// search from end // search from end
@ -809,7 +811,9 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
// search from end // search from end
for (int i = category.size() - 1; i >= 0; i--) { for (int i = category.size() - 1; i >= 0; i--) {
String cat = category.get(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; found = i;
break; break;
} }

View file

@ -6,6 +6,8 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import android.view.ViewGroup;
import android.widget.*;
import net.londatiga.android.ActionItem; import net.londatiga.android.ActionItem;
import net.londatiga.android.QuickAction; import net.londatiga.android.QuickAction;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
@ -57,14 +59,6 @@ import android.support.v4.widget.DrawerLayout;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.WindowManager; 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 { 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) { public void enterRoutePlanningMode(final LatLon from, final String fromName, boolean useCurrentGPX) {
List<SelectedGpxFile> selectedGPXFiles = mapActivity.getMyApplication().getSelectedGpxHelper() List<SelectedGpxFile> selectedGPXFiles = mapActivity.getMyApplication().getSelectedGpxHelper()
.getSelectedGPXFiles(); .getSelectedGPXFiles();
GPXFile gpxFile = null; final List<GPXFile> gpxFiles = new ArrayList<GPXFile>();
for (SelectedGpxFile gs : selectedGPXFiles) { for (SelectedGpxFile gs : selectedGPXFiles) {
if (!gs.isShowCurrentTrack() && !gs.notShowNavigationDialog) { if (!gs.isShowCurrentTrack() && !gs.notShowNavigationDialog) {
if (gs.getGpxFile().hasRtePt() || gs.getGpxFile().hasTrkpt()) { if (gs.getGpxFile().hasRtePt() || gs.getGpxFile().hasTrkpt()) {
gpxFile = gs.getGpxFile(); gpxFiles.add(gs.getGpxFile());
break;
} }
} }
} }
final GPXFile f = gpxFile;
if (gpxFile != null && !useCurrentGPX) {
if (gpxFiles.size() > 0 && !useCurrentGPX) {
Builder bld = new AlertDialog.Builder(mapActivity); Builder bld = new AlertDialog.Builder(mapActivity);
bld.setMessage(R.string.use_displayed_track_for_navigation); if (gpxFiles.size() == 1){
bld.setPositiveButton(R.string.default_buttons_yes, new DialogInterface.OnClickListener() { bld.setMessage(R.string.use_displayed_track_for_navigation);
@Override bld.setPositiveButton(R.string.default_buttons_yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { @Override
enterRoutePlanningModeImpl(f, from, fromName); public void onClick(DialogInterface dialog, int which) {
} 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() { bld.setNegativeButton(R.string.default_buttons_no, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
@ -430,7 +447,7 @@ public class MapActivityActions implements DialogProvider {
}); });
bld.show(); bld.show();
} else { } 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){ switch (currentDrawer){
case MAIN_MENU: case MAIN_MENU:
prepareOptionsMenu(createMainOptionsMenu()); prepareOptionsMenu(createMainOptionsMenu());
@ -879,7 +900,7 @@ public class MapActivityActions implements DialogProvider {
}).reg(); }).reg();
} }
final OsmAndLocationProvider loc = app.getLocationProvider(); 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) { if (OsmandPlugin.getEnabledPlugin(OsmandDevelopmentPlugin.class) != null) {
optionsMenuHelper optionsMenuHelper
.item(loc.getLocationSimulation().isRouteAnimating() ? R.string.animate_route_off : R.string.animate_route) .item(loc.getLocationSimulation().isRouteAnimating() ? R.string.animate_route_off : R.string.animate_route)
@ -894,7 +915,6 @@ public class MapActivityActions implements DialogProvider {
} }
}).reg(); }).reg();
} }
}
OsmandPlugin.registerOptionsMenu(mapActivity, optionsMenuHelper); OsmandPlugin.registerOptionsMenu(mapActivity, optionsMenuHelper);
optionsMenuHelper.item(R.string.exit_Button).icons(R.drawable.ic_action_quit_dark, R.drawable.ic_action_quit_light ) optionsMenuHelper.item(R.string.exit_Button).icons(R.drawable.ic_action_quit_dark, R.drawable.ic_action_quit_light )

View file

@ -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(); final OsmandSettings settings = getApplication().getSettings();
CallbackWithObject<GPXFile[]> callbackWithObject = new CallbackWithObject<GPXFile[]>() { CallbackWithObject<GPXFile[]> callbackWithObject = new CallbackWithObject<GPXFile[]>() {
@Override @Override
@ -243,14 +243,15 @@ public class MapActivityLayers {
mapView.getZoom(), true); mapView.getZoom(), true);
} }
mapView.refreshMap(); mapView.refreshMap();
activity.getMapActions().refreshDrawer();
return true; return true;
} }
}; };
if (files == null) { if (files == null) {
GpxUiHelper.selectGPXFile(activity, true, true, callbackWithObject); return GpxUiHelper.selectGPXFile(activity, true, true, callbackWithObject);
} else { } else {
GpxUiHelper.selectGPXFile(files, activity, true, true, callbackWithObject); return GpxUiHelper.selectGPXFile(files, activity, true, true, callbackWithObject);
} }
} }

View file

@ -376,20 +376,23 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
assert track.segments.size() == points.size(); assert track.segments.size() == points.size();
if (points.size() == 0 || newSegment) { if (points.size() == 0 || newSegment) {
points.add(new ArrayList<WptPt>()); points.add(new ArrayList<WptPt>());
}
if(track.segments.size() == 0 || newSegment) {
track.segments.add(new TrkSegment()); track.segments.add(new TrkSegment());
} }
if (pt != null) { if (pt != null) {
int ind = points.size() - 1; int ind = points.size() - 1;
List<WptPt> last = points.get(ind); List<WptPt> last = points.get(ind);
last.add(pt); 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) { public void insertPointData(double lat, double lon, long time, String description) {
final WptPt pt = new WptPt(lat, lon, time, Double.NaN, 0, Double.NaN); final WptPt pt = new WptPt(lat, lon, time, Double.NaN, 0, Double.NaN);
pt.name = description; pt.name = description;
currentTrack.getGpxFile().points.add(pt); currentTrack.getModifiableGpxFile().points.add(pt);
execWithClose(updatePointsScript, new Object[] { lat, lon, time, description }); 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() { public boolean getIsRecording() {
return isRecording; return isRecording;
} }

View file

@ -367,6 +367,7 @@ public class SettingsGeneralActivity extends SettingsBaseActivity {
if (MORE_VALUE.equals(newValue)) { if (MORE_VALUE.equals(newValue)) {
// listPref.set(oldValue); // revert the change.. // listPref.set(oldValue); // revert the change..
final Intent intent = new Intent(this, DownloadActivity.class); 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()); intent.putExtra(DownloadActivity.FILTER_CAT, DownloadActivityType.VOICE_FILE.getTag());
startActivity(intent); startActivity(intent);
} else { } else {

View file

@ -211,7 +211,7 @@ public class SearchAddressFragment extends SherlockFragment {
building = null; building = null;
searchPoint = null; searchPoint = null;
osmandSettings.setLastSearchedBuilding("", null); osmandSettings.setLastSearchedBuilding("", null);
osmandSettings.setLastSearchedPoint(null); //also empties Point, REMOVES intersecting street
updateUI(); updateUI();
} }
}); });
@ -223,9 +223,7 @@ public class SearchAddressFragment extends SherlockFragment {
building = null; building = null;
searchPoint = null; searchPoint = null;
osmandSettings.setLastSearchedStreet("", null); osmandSettings.setLastSearchedStreet("", null);
osmandSettings.setLastSearchedIntersectedStreet("", null); //also empties Building, (Intersecting Street), Point
osmandSettings.setLastSearchedBuilding("", null);
osmandSettings.setLastSearchedPoint(null);
updateUI(); updateUI();
} }
}); });
@ -238,12 +236,8 @@ public class SearchAddressFragment extends SherlockFragment {
street2 = null; street2 = null;
building = null; building = null;
searchPoint = null; searchPoint = null;
osmandSettings.setLastSearchedPostcode("", null); osmandSettings.setLastSearchedCity(-1L, "", null);
osmandSettings.setLastSearchedCity(0L, "", null); //also empties Street, (Intersecting Street), Building, Point, REMOVES Postcode
osmandSettings.setLastSearchedStreet("", null);
osmandSettings.setLastSearchedIntersectedStreet("", null);
osmandSettings.setLastSearchedBuilding("", null);
osmandSettings.setLastSearchedPoint(null);
updateUI(); updateUI();
} }
}); });
@ -258,12 +252,7 @@ public class SearchAddressFragment extends SherlockFragment {
building = null; building = null;
searchPoint = null; searchPoint = null;
osmandSettings.setLastSearchedRegion("", null); osmandSettings.setLastSearchedRegion("", null);
osmandSettings.setLastSearchedPostcode("", null); // also empties City, Postcode, Street, (Interseting street), Building, Point
osmandSettings.setLastSearchedCity(0L, "", null);
osmandSettings.setLastSearchedStreet("", null);
osmandSettings.setLastSearchedIntersectedStreet("", null);
osmandSettings.setLastSearchedBuilding("", null);
osmandSettings.setLastSearchedPoint(null);
updateUI(); updateUI();
} }
}); });

View file

@ -9,6 +9,7 @@ import net.osmand.data.City;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.Street; import net.osmand.data.Street;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation; import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
import net.osmand.plus.resources.RegionAddressRepository; import net.osmand.plus.resources.RegionAddressRepository;
@ -21,6 +22,7 @@ public class SearchBuildingByNameActivity extends SearchByNameAbstractActivity<B
private RegionAddressRepository region; private RegionAddressRepository region;
private City city; private City city;
private Street street; private Street street;
private OsmandSettings osmandSettings;
@Override @Override
protected Comparator<? super Building> createComparator() { 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 @Override
public AsyncTask<Object, ?, ?> getInitializeTask() { public AsyncTask<Object, ?, ?> getInitializeTask() {
return new AsyncTask<Object, Void, List<Building>>(){ return new AsyncTask<Object, Void, List<Building>>(){

View file

@ -4,6 +4,7 @@ import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
//import net.osmand.IProgress;
import net.osmand.CollatorStringMatcher; import net.osmand.CollatorStringMatcher;
import net.osmand.CollatorStringMatcher.StringMatcherMode; import net.osmand.CollatorStringMatcher.StringMatcherMode;
import net.osmand.OsmAndCollator; import net.osmand.OsmAndCollator;
@ -13,6 +14,7 @@ import net.osmand.data.City.CityType;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.resources.RegionAddressRepository; import net.osmand.plus.resources.RegionAddressRepository;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
@ -29,7 +31,25 @@ public class SearchCityByNameActivity extends SearchByNameAbstractActivity<City>
private RegionAddressRepository region; private RegionAddressRepository region;
private int searchVillagesMode = -1; private int searchVillagesMode = -1;
private Button searchVillages; 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 @Override
protected void addFooterViews() { protected void addFooterViews() {
@ -173,7 +193,8 @@ public class SearchCityByNameActivity extends SearchByNameAbstractActivity<City>
@Override @Override
public void itemSelected(City obj) { public void itemSelected(City obj) {
settings.setLastSearchedCity(obj.getId(), obj.getName(region.useEnglishNames()), obj.getLocation()); 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) { //if (region.getCityById(obj.getId(), obj.getName(region.useEnglishNames())) == null) {
// region.addCityToPreloadedList((City) obj); // region.addCityToPreloadedList((City) obj);
//} //}

View file

@ -7,7 +7,9 @@ import java.util.Comparator;
import net.osmand.access.AccessibleToast; import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.resources.RegionAddressRepository; import net.osmand.plus.resources.RegionAddressRepository;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
@ -15,6 +17,7 @@ import android.widget.Toast;
public class SearchRegionByNameActivity extends SearchByNameAbstractActivity<RegionAddressRepository> { public class SearchRegionByNameActivity extends SearchByNameAbstractActivity<RegionAddressRepository> {
private OsmandSettings osmandSettings;
@Override @Override
protected Comparator<? super RegionAddressRepository> createComparator() { 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 @Override
protected LatLon getLocation(RegionAddressRepository item) { protected LatLon getLocation(RegionAddressRepository item) {
return item.getEstimatedRegionCenter(); return item.getEstimatedRegionCenter();
@ -47,7 +57,8 @@ public class SearchRegionByNameActivity extends SearchByNameAbstractActivity<Reg
@Override @Override
public String getText(RegionAddressRepository obj) { public String getText(RegionAddressRepository obj) {
return obj.getName().replace('_', ' '); return FileNameTranslationHelper.getFileName(this,
getMyApplication().getResourceManager().getOsmandRegions(), obj.getName());
} }
@Override @Override

View file

@ -7,6 +7,7 @@ import net.osmand.data.City;
import net.osmand.data.MapObject.MapObjectComparator; import net.osmand.data.MapObject.MapObjectComparator;
import net.osmand.data.Street; import net.osmand.data.Street;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation; import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
import net.osmand.plus.resources.RegionAddressRepository; import net.osmand.plus.resources.RegionAddressRepository;
@ -17,12 +18,20 @@ public class SearchStreet2ByNameActivity extends SearchByNameAbstractActivity<St
private RegionAddressRepository region; private RegionAddressRepository region;
private City cityOrPostcode; private City cityOrPostcode;
private Street street1; private Street street1;
private OsmandSettings osmandSettings;
@Override @Override
protected Comparator<? super Street> createComparator() { protected Comparator<? super Street> createComparator() {
return new MapObjectComparator(getMyApplication().getSettings().usingEnglishNames()); 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 @Override
public AsyncTask<Object, ?, ?> getInitializeTask() { public AsyncTask<Object, ?, ?> getInitializeTask() {
return new AsyncTask<Object, Void, List<Street>>(){ return new AsyncTask<Object, Void, List<Street>>(){

View file

@ -15,6 +15,7 @@ import net.osmand.data.MapObject.MapObjectComparator;
import net.osmand.data.Street; import net.osmand.data.Street;
import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation; import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
import net.osmand.plus.resources.RegionAddressRepository; import net.osmand.plus.resources.RegionAddressRepository;
@ -33,6 +34,7 @@ public class SearchStreetByNameActivity extends SearchByNameAbstractActivity<Str
private City city; private City city;
private Button searchAllStrets; private Button searchAllStrets;
private int searchWithCity = -1; // -1 - default, 0 - filter city, 1 - deep search private int searchWithCity = -1; // -1 - default, 0 - filter city, 1 - deep search
private OsmandSettings osmandSettings;
@Override @Override
protected Comparator<? super Street> createComparator() { protected Comparator<? super Street> createComparator() {
@ -51,11 +53,12 @@ public class SearchStreetByNameActivity extends SearchByNameAbstractActivity<Str
@Override @Override
protected void reset() { 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(); super.reset();
} }
@Override @Override
protected void addFooterViews() { protected void addFooterViews() {
final FrameLayout ll = new FrameLayout(this); final FrameLayout ll = new FrameLayout(this);
@ -214,7 +217,7 @@ public class SearchStreetByNameActivity extends SearchByNameAbstractActivity<Str
@Override @Override
public void itemSelected(Street obj) { public void itemSelected(Street obj) {
if(!Algorithms.objectEquals(settings.getLastSearchedCity(), obj.getCity().getId())) { 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()); settings.setLastSearchedStreet(obj.getName(region.useEnglishNames()), obj.getLocation());
// if(obj.getBuildings().size() == 0){ // if(obj.getBuildings().size() == 0){

View file

@ -185,8 +185,9 @@ public class SQLiteAPIImpl implements SQLiteAPI {
@Override @Override
public SQLiteConnection openByAbsolutePath(String path, boolean readOnly) { 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, 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) { if(db == null) {
return null; return null;
} }

View file

@ -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(); final Location loc = app.getLocationProvider().getLastKnownLocation();
// double lat = mapActivity.getMapView().getLatitude(); // double lat = mapActivity.getMapView().getLatitude();
// double lon = mapActivity.getMapView().getLongitude(); // double lon = mapActivity.getMapView().getLongitude();
@ -592,6 +592,15 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
stopRecording(activity); 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) { public void recordVideo(final double lat, final double lon, final MapActivity mapActivity) {
if (AV_EXTERNAL_RECORDER.get()) { if (AV_EXTERNAL_RECORDER.get()) {
captureVideoExternal(lat, lon, mapActivity); captureVideoExternal(lat, lon, mapActivity);

View file

@ -11,9 +11,11 @@ public class MediaRemoteControlReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
AudioVideoNotesPlugin plugin = OsmandPlugin.getEnabledPlugin(AudioVideoNotesPlugin.class); 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)); // 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(); // Toast.makeText(context, "Button pressed " + intent.getIntExtra(Intent.EXTRA_KEY_EVENT, 0), Toast.LENGTH_LONG).show();
plugin.defaultAction(plugin.getActivity());
} }
} }
} }

View file

@ -197,7 +197,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
// decrease a bit // decrease a bit
zdelta += 1; 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(); int threshold = settings.AUTO_FOLLOW_ROUTE.get();
if (now - lastTimeAutoZooming > 4500 && (now - lastTimeAutoZooming > threshold || !isUserZoomed)) { if (now - lastTimeAutoZooming > 4500 && (now - lastTimeAutoZooming > threshold || !isUserZoomed)) {
isUserZoomed = false; isUserZoomed = false;

View file

@ -2,7 +2,12 @@ package net.osmand.plus.dashboard;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; 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.os.AsyncTask;
import android.util.DisplayMetrics;
import android.view.*; import android.view.*;
import android.widget.ImageView; import android.widget.ImageView;
import net.osmand.data.LatLon; 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.OsmAndMapSurfaceView;
import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.OsmandMapTileView;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.widget.Button; import android.widget.Button;
@ -33,6 +39,8 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
public static final String TAG = "DASH_MAP_FRAGMENT"; public static final String TAG = "DASH_MAP_FRAGMENT";
private Paint paintBmp;
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
@ -43,6 +51,10 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
getMyApplication().getResourceManager().getMapTileDownloader().addDownloaderCallback(this); getMyApplication().getResourceManager().getMapTileDownloader().addDownloaderCallback(this);
paintBmp = new Paint();
paintBmp.setAntiAlias(true);
paintBmp.setFilterBitmap(true);
paintBmp.setDither(true);
} }
protected void startMapActivity() { protected void startMapActivity() {
@ -74,17 +86,36 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
return view; return view;
} }
private void setMapImage(View view) { private void setMapImage(final Bitmap image) {
if (view == null) { final View view = getView();
return; if (view != null && image != null) {
}
final Bitmap image = getMyApplication().getResourceManager().getRenderer().getBitmap();
final ImageView map = (ImageView) view.findViewById(R.id.map_image);
if (image != null) {
getActivity().runOnUiThread(new Runnable() { getActivity().runOnUiThread(new Runnable() {
@Override @Override
public void run() { 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(); ResourceManager mgr = getMyApplication().getResourceManager();
mgr.tileDownloaded(request); mgr.tileDownloaded(request);
} }
setMapImage(getView()); setMapImage(getMyApplication().getResourceManager().getRenderer().getBitmap());
} }
private void updateMapImage() { private void updateMapImage() {
MapRenderRepositories repositories = getMyApplication().getResourceManager().getRenderer(); MapRenderRepositories repositories = getMyApplication().getResourceManager().getRenderer();
LatLon lm = getMyApplication().getSettings().getLastKnownMapLocation(); if(repositories.getBitmap() != null) {
int zm = getMyApplication().getSettings().getLastKnownMapZoom(); setMapImage(repositories.getBitmap());
} else {
WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); LatLon lm = getMyApplication().getSettings().getLastKnownMapLocation();
Display display = wm.getDefaultDisplay(); int zm = getMyApplication().getSettings().getLastKnownMapZoom();
int height = (int) getActivity().getResources().getDimension(R.dimen.dashMapHeight);
int width = display.getWidth();
RotatedTileBox rotatedTileBox = new RotatedTileBox.RotatedTileBoxBuilder(). WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
setZoom(zm).setLocation(lm.getLatitude(), lm.getLongitude()). Display display = wm.getDefaultDisplay();
setPixelDimensions(width, height).build(); final Point pnt = new Point();
repositories.loadMap(rotatedTileBox, display.getSize(pnt);
getMyApplication().getResourceManager().getMapTileDownloader().getDownloaderCallbacks()); int height = pnt.y; // (int) getActivity().getResources().getDimension(R.dimen.dashMapHeight);
int width = pnt.x;// display.getWidth();
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);
} }
} }

View file

@ -74,6 +74,9 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
long javaTotal = Runtime.getRuntime().totalMemory() / (1024*1024l); long javaTotal = Runtime.getRuntime().totalMemory() / (1024*1024l);
long dalvikSize = android.os.Debug.getNativeHeapAllocatedSize() / (1024*1024l); long dalvikSize = android.os.Debug.getNativeHeapAllocatedSize() / (1024*1024l);
pref.setSummary(getString(R.string.global_app_allocated_memory_descr, javaAvailMem, javaTotal, dalvikSize)); 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); cat.addPreference(pref);
// ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); // 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 pref.setSummary(getString(R.string.native_app_allocated_memory_descr
, mem.nativePrivateDirty / 1024, mem.dalvikPrivateDirty / 1024 , mem.otherPrivateDirty / 1024 , mem.nativePrivateDirty / 1024, mem.dalvikPrivateDirty / 1024 , mem.otherPrivateDirty / 1024
, mem.nativePss / 1024, mem.dalvikPss / 1024 , mem.otherPss / 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); cat.addPreference(pref);
@ -101,6 +107,9 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
pref.setSummary(getString(R.string.day_night_info_description, "null", pref.setSummary(getString(R.string.day_night_info_description, "null",
"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); cat.addPreference(pref);
} }

View file

@ -15,6 +15,7 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings;
import net.osmand.plus.OsmandSettings.CommonPreference; import net.osmand.plus.OsmandSettings.CommonPreference;
import net.osmand.plus.PoiFilter;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.SettingsActivity; import net.osmand.plus.activities.SettingsActivity;
@ -103,11 +104,10 @@ public class ConfigureMapMenu {
@Override @Override
public boolean onRowItemClick(ArrayAdapter<?> adapter, View view, int itemId, int pos) { public boolean onRowItemClick(ArrayAdapter<?> adapter, View view, int itemId, int pos) {
if(itemId == R.string.layer_poi && cm.getSelection(pos) == 1) { if(itemId == R.string.layer_poi && cm.getSelection(pos) == 1) {
ma.getMapLayers().selectPOIFilterLayer(ma.getMapView(), null); selectPOILayer(ma.getMyApplication().getSettings());
return false; return false;
} else if(itemId == R.string.layer_gpx_layer && cm.getSelection(pos) == 1) { } else if(itemId == R.string.layer_gpx_layer && cm.getSelection(pos) == 1) {
ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView()); 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; return false;
} else { } else {
return super.onRowItemClick(adapter, view, itemId, pos); return super.onRowItemClick(adapter, view, itemId, pos);
@ -115,13 +115,14 @@ public class ConfigureMapMenu {
} }
@Override @Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) { public boolean onContextMenuClick(final ArrayAdapter<?> adapter, int itemId, final int pos, boolean isChecked) {
OsmandSettings settings = ma.getMyApplication().getSettings(); final OsmandSettings settings = ma.getMyApplication().getSettings();
if (itemId == R.string.layer_poi) { if (itemId == R.string.layer_poi) {
if (isChecked) {
ma.getMapLayers().selectPOIFilterLayer(ma.getMapView(), null);
}
settings.SHOW_POI_OVER_MAP.set(isChecked); settings.SHOW_POI_OVER_MAP.set(isChecked);
if (isChecked) {
selectPOILayer(settings);
}
} else if (itemId == R.string.layer_amenity_label) { } else if (itemId == R.string.layer_amenity_label) {
settings.SHOW_POI_LABEL.set(isChecked); settings.SHOW_POI_LABEL.set(isChecked);
} else if (itemId == R.string.layer_favorites) { } else if (itemId == R.string.layer_favorites) {
@ -130,9 +131,15 @@ public class ConfigureMapMenu {
if (ma.getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles()) { if (ma.getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles()) {
ma.getMyApplication().getSelectedGpxHelper().clearAllGpxFileToShow(); ma.getMyApplication().getSelectedGpxHelper().clearAllGpxFileToShow();
} else { } 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) { } else if (itemId == R.string.layer_transport_route) {
ma.getMapLayers().getTransportInfoLayer().setVisible(isChecked); ma.getMapLayers().getTransportInfoLayer().setVisible(isChecked);
} }
@ -140,6 +147,21 @@ public class ConfigureMapMenu {
ma.getMapView().refreshMap(); ma.getMapView().refreshMap();
return false; 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) { private void createLayersItems(ContextMenuAdapter adapter , MapActivity activity) {

View file

@ -6,7 +6,6 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import android.app.FragmentManager;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandPlugin;
@ -51,6 +50,7 @@ public class DownloadActivity extends BaseDownloadActivity {
private String initialFilter = ""; private String initialFilter = "";
private boolean singleTab; private boolean singleTab;
public static final String FILTER_KEY = "filter"; public static final String FILTER_KEY = "filter";
public static final String FILTER_CAT = "filter_cat"; 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 DOWNLOAD_TAB = "download";
public static final String UPDATES_TAB = "updates"; public static final String UPDATES_TAB = "updates";
public static final String SINGLE_TAB = "SINGLE_TAB"; public static final String SINGLE_TAB = "SINGLE_TAB";
private List<DownloadActivityType> downloadTypes = new ArrayList<DownloadActivityType>();
@Override @Override
@ -134,9 +135,8 @@ public class DownloadActivity extends BaseDownloadActivity {
}); });
final List<DownloadActivityType> downloadTypes = getDownloadTypes(); downloadTypes = createDownloadTypes();
final Intent intent = getIntent(); final Intent intent = getIntent();
setType(downloadTypes.get(0));
if (intent != null && intent.getExtras() != null) { if (intent != null && intent.getExtras() != null) {
final String filter = intent.getExtras().getString(FILTER_KEY); final String filter = intent.getExtras().getString(FILTER_KEY);
if (filter != null) { if (filter != null) {
@ -147,12 +147,12 @@ public class DownloadActivity extends BaseDownloadActivity {
if (filterCat != null) { if (filterCat != null) {
DownloadActivityType type = DownloadActivityType.getIndexType(filterCat.toLowerCase()); DownloadActivityType type = DownloadActivityType.getIndexType(filterCat.toLowerCase());
if (type != null) { if (type != null) {
setType(type);
downloadTypes.remove(type); downloadTypes.remove(type);
downloadTypes.add(0, type); downloadTypes.add(0, type);
} }
} }
} }
changeType(downloadTypes.get(0));
getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@ -195,8 +195,6 @@ public class DownloadActivity extends BaseDownloadActivity {
return localIndexInfos; return localIndexInfos;
} }
public void setType(DownloadActivityType type) { this.type = type;}
public void changeType(final DownloadActivityType tp) { public void changeType(final DownloadActivityType tp) {
//invalidateOptionsMenu(); //invalidateOptionsMenu();
if (downloadListIndexThread != null && type != tp) { if (downloadListIndexThread != null && type != tp) {
@ -339,7 +337,12 @@ public class DownloadActivity extends BaseDownloadActivity {
// } // }
} }
public List<DownloadActivityType> getDownloadTypes() { public List<DownloadActivityType> getDownloadTypes() {
return downloadTypes;
}
public List<DownloadActivityType> createDownloadTypes() {
List<DownloadActivityType> items = new ArrayList<DownloadActivityType>(); List<DownloadActivityType> items = new ArrayList<DownloadActivityType>();
items.add(DownloadActivityType.NORMAL_FILE); items.add(DownloadActivityType.NORMAL_FILE);
items.add(DownloadActivityType.VOICE_FILE); items.add(DownloadActivityType.VOICE_FILE);

View file

@ -48,7 +48,6 @@ public class AvoidSpecificRoads {
public ArrayAdapter<RouteDataObject> createAdapter(final MapActivity ctx) { public ArrayAdapter<RouteDataObject> createAdapter(final MapActivity ctx) {
final ArrayList<RouteDataObject> points = new ArrayList<RouteDataObject>(); final ArrayList<RouteDataObject> points = new ArrayList<RouteDataObject>();
points.add(new RouteDataObject((RouteRegion) null));
points.addAll(missingRoads); points.addAll(missingRoads);
final LatLon mapLocation = ctx.getMapLocation(); final LatLon mapLocation = ctx.getMapLocation();
return new ArrayAdapter<RouteDataObject>(ctx, return new ArrayAdapter<RouteDataObject>(ctx,
@ -58,42 +57,35 @@ public class AvoidSpecificRoads {
public View getView(final int position, View convertView, ViewGroup parent) { public View getView(final int position, View convertView, ViewGroup parent) {
// User super class to create the View // User super class to create the View
View v = convertView; View v = convertView;
if (position == 0) { if (v == null || v.findViewById(R.id.info_close) == null) {
v= ctx.getLayoutInflater().inflate(R.layout.list_bigtextview, null); v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, 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()?
R.drawable.ic_action_road_works_light : R.drawable.ic_action_road_works_dark);
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_text)).setText(getText(obj));
ImageButton remove = (ImageButton) v.findViewById(R.id.info_close);
remove.setVisibility(View.VISIBLE);
remove.setImageResource(app.getSettings().isLightContentMenu()?
R.drawable.ic_action_gremove_light : R.drawable.ic_action_gremove_dark);
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
remove(obj);
getBuilder().removeImpassableRoad(obj);
notifyDataSetChanged();
RoutingHelper rh = app.getRoutingHelper();
if(rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
rh.recalculateRouteDueToSettingsChange();
}
}
});
} }
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() ?
R.drawable.ic_action_road_works_light : R.drawable.ic_action_road_works_dark);
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_text)).setText(getText(obj));
ImageButton remove = (ImageButton) v.findViewById(R.id.info_close);
remove.setVisibility(View.VISIBLE);
remove.setImageResource(app.getSettings().isLightContentMenu() ?
R.drawable.ic_action_gremove_light : R.drawable.ic_action_gremove_dark);
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
remove(obj);
getBuilder().removeImpassableRoad(obj);
notifyDataSetChanged();
RoutingHelper rh = app.getRoutingHelper();
if (rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
rh.recalculateRouteDueToSettingsChange();
}
}
});
return v; return v;
} }
@ -109,23 +101,29 @@ public class AvoidSpecificRoads {
public void showDialog(final MapActivity mapActivity) { public void showDialog(final MapActivity mapActivity) {
Builder bld = new AlertDialog.Builder(mapActivity); Builder bld = new AlertDialog.Builder(mapActivity);
bld.setTitle(R.string.impassable_road); bld.setTitle(R.string.impassable_road);
final ArrayAdapter<?> listAdapter = createAdapter(mapActivity); if (missingRoads.size() == 0){
bld.setAdapter(listAdapter, new DialogInterface.OnClickListener() { bld.setMessage(R.string.avoid_roads_msg);
} else {
@Override final ArrayAdapter<?> listAdapter = createAdapter(mapActivity);
public void onClick(DialogInterface dialog, int which) { bld.setAdapter(listAdapter, new DialogInterface.OnClickListener() {
if(which == 0) { @Override
selectFromMap(mapActivity); public void onClick(DialogInterface dialog, int which) {
} else {
RouteDataObject obj = missingRoads.get(which - 1); RouteDataObject obj = missingRoads.get(which - 1);
double lat = MapUtils.get31LatitudeY(obj.getPoint31YTile(0)); double lat = MapUtils.get31LatitudeY(obj.getPoint31YTile(0));
double lon = MapUtils.get31LongitudeX(obj.getPoint31XTile(0)); double lon = MapUtils.get31LongitudeX(obj.getPoint31XTile(0));
showOnMap(app, mapActivity, lat, lon, getText(obj), dialog); showOnMap(app, mapActivity, lat, lon, getText(obj), dialog);
} }
}
});
}
bld.setPositiveButton(R.string.select_impassable_road, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
selectFromMap(mapActivity);
}
}); });
bld.setPositiveButton(R.string.close, null); bld.setNegativeButton(R.string.default_buttons_cancel, null);
bld.show(); bld.show();
} }

View file

@ -3,13 +3,13 @@ package net.osmand.plus.helpers;
import android.content.Context; import android.content.Context;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
import net.osmand.map.OsmandRegions; import net.osmand.map.OsmandRegions;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import java.lang.reflect.Field; import java.lang.reflect.Field;
/** /**
* Created by Barsik on 07.07.2014. * Created by Barsik
* on 07.07.2014.
*/ */
public class FileNameTranslationHelper { public class FileNameTranslationHelper {

View file

@ -105,16 +105,16 @@ public class GpxUiHelper {
// 4. Elevation, eleUp, eleDown, if recorded // 4. Elevation, eleUp, eleDown, if recorded
if (analysis.isElevationSpecified()) { if (analysis.isElevationSpecified()) {
description.append("<br/>"); description.append(nl);
description.append(app.getString(R.string.gpx_info_avg_altitude, description.append(app.getString(R.string.gpx_info_avg_altitude,
getColorValue(speedClr, OsmAndFormatter.getFormattedAlt(analysis.avgElevation, app), html))); 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 min = getColorValue(descClr, OsmAndFormatter.getFormattedAlt(analysis.minElevation, app), html);
String max = getColorValue(ascClr, OsmAndFormatter.getFormattedAlt(analysis.maxElevation, app), html); String max = getColorValue(ascClr, OsmAndFormatter.getFormattedAlt(analysis.maxElevation, app), html);
String asc = getColorValue(ascClr, OsmAndFormatter.getFormattedAlt(analysis.diffElevationUp, app), html); String asc = getColorValue(ascClr, OsmAndFormatter.getFormattedAlt(analysis.diffElevationUp, app), html);
String desc = getColorValue(descClr, OsmAndFormatter.getFormattedAlt(analysis.diffElevationDown, 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(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 + "")); description.append(app.getString(R.string.gpx_info_asc_altitude,"\u2193 " + desc + " \u2191 " + asc + ""));
} }
@ -122,8 +122,8 @@ public class GpxUiHelper {
if(analysis.isSpeedSpecified()){ if(analysis.isSpeedSpecified()){
String avg = getColorValue(speedClr, OsmAndFormatter.getFormattedSpeed(analysis.avgSpeed, app), html); String avg = getColorValue(speedClr, OsmAndFormatter.getFormattedSpeed(analysis.avgSpeed, app), html);
String max = getColorValue(ascClr, OsmAndFormatter.getFormattedSpeed(analysis.maxSpeed, 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(nl).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_maximum_speed,max));
} }
return description.toString(); return description.toString();
} }
@ -141,7 +141,8 @@ public class GpxUiHelper {
if(showCurrentGpx){ if(showCurrentGpx){
allGpxList.add(0, activity.getString(R.string.show_current_gpx_title)); 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); 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)); 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 createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, list, adapter);
} }
return null; return null;
} }
private static ContextMenuAdapter createGpxContextMenuAdapter(Activity activity, List<String> allGpxList, 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); final ContextMenuAdapter adapter = new ContextMenuAdapter(activity);
//element position in adapter //element position in adapter
int i = 0; int i = 0;
@ -184,18 +187,29 @@ public class GpxUiHelper {
//if there's some selected files - need to mark them as selected //if there's some selected files - need to mark them as selected
if (selectedGpxList != null) { if (selectedGpxList != null) {
for (String file : selectedGpxList) { updateSelection(selectedGpxList, showCurrentTrack, adapter, i, fileName);
if (file.endsWith(fileName)) {
adapter.setSelection(i, 1);
break;
}
}
} }
i++; i++;
} }
return adapter; 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);
break;
}
}
}
}
private static void setDescripionInDialog(final ArrayAdapter<?> adapter, final ContextMenuAdapter cmAdapter, Activity activity, private static void setDescripionInDialog(final ArrayAdapter<?> adapter, final ContextMenuAdapter cmAdapter, Activity activity,
final File dir, String filename, final int position) { final File dir, String filename, final int position) {
final Application app = activity.getApplication(); final Application app = activity.getApplication();

View file

@ -49,6 +49,10 @@ public class WaypointHelper {
private static final int SHORT_ANNOUNCE_RADIUS = 150; private static final int SHORT_ANNOUNCE_RADIUS = 150;
private static final int ALARMS_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; OsmandApplication app;
// every time we modify this collection, we change the reference (copy on write list) // every time we modify this collection, we change the reference (copy on write list)
public static final int TARGETS = 0; public static final int TARGETS = 0;
@ -342,6 +346,9 @@ public class WaypointHelper {
kIterator++; kIterator++;
} }
if (!announcePoints.isEmpty()) { if (!announcePoints.isEmpty()) {
if(announcePoints.size() > ANNOUNCE_POI_LIMIT) {
announcePoints = announcePoints.subList(0, ANNOUNCE_POI_LIMIT);
}
if (type == WAYPOINTS) { if (type == WAYPOINTS) {
getVoiceRouter().announceWaypoint(announcePoints); getVoiceRouter().announceWaypoint(announcePoints);
} else if (type == POI) { } else if (type == POI) {
@ -353,6 +360,9 @@ public class WaypointHelper {
} }
} }
if (!approachPoints.isEmpty()) { if (!approachPoints.isEmpty()) {
if(approachPoints.size() > APPROACH_POI_LIMIT) {
approachPoints = approachPoints.subList(0, APPROACH_POI_LIMIT);
}
if (type == WAYPOINTS) { if (type == WAYPOINTS) {
getVoiceRouter().approachWaypoint(lastKnownLocation, approachPoints); getVoiceRouter().approachWaypoint(lastKnownLocation, approachPoints);
} else if (type == POI) { } else if (type == POI) {

View file

@ -60,7 +60,11 @@ public class SettingsMonitoringActivity extends SettingsBaseActivity {
grp.addPreference(cat); grp.addPreference(cat);
Preference globalrecord = new Preference(this); 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.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); cat.addPreference(globalrecord);
if(settings.SAVE_GLOBAL_TRACK_REMEMBER.get()) { if(settings.SAVE_GLOBAL_TRACK_REMEMBER.get()) {

View file

@ -81,7 +81,7 @@ public class OsMoControlDevice implements OsMoReactor {
app.getNavigationService().stopIfNeeded(app,NavigationService.USED_BY_LIVE); app.getNavigationService().stopIfNeeded(app,NavigationService.USED_BY_LIVE);
} }
} else if(data.equals("START_TRACKING")) { } else if(data.equals("START_TRACKING")) {
tracker.enableTracker(); tracker.enableTrackerCmd();
app.startNavigationService(NavigationService.USED_BY_LIVE); app.startNavigationService(NavigationService.USED_BY_LIVE);
//interval setting not needed here, handled centrally in app.startNavigationService //interval setting not needed here, handled centrally in app.startNavigationService
//app.getSettings().SERVICE_OFF_INTERVAL.set(0); //app.getSettings().SERVICE_OFF_INTERVAL.set(0);

View file

@ -71,7 +71,6 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer
this.app = app; this.app = app;
service = new OsMoService(app, this); service = new OsMoService(app, this);
tracker = new OsMoTracker(service, app.getSettings().OSMO_SAVE_TRACK_INTERVAL, tracker = new OsMoTracker(service, app.getSettings().OSMO_SAVE_TRACK_INTERVAL,
app.getSettings().OSMO_AUTO_SEND_LOCATIONS,
app.getSettings().OSMO_SEND_LOCATIONS_STATE); app.getSettings().OSMO_SEND_LOCATIONS_STATE);
deviceControl = new OsMoControlDevice(app, this, service, tracker); deviceControl = new OsMoControlDevice(app, this, service, tracker);
groups = new OsMoGroups(this, service, tracker, app); groups = new OsMoGroups(this, service, tracker, app);

View file

@ -21,7 +21,6 @@ public class OsMoTracker implements OsMoReactor {
private OsmandPreference<Integer> pref; private OsmandPreference<Integer> pref;
private String sessionURL; private String sessionURL;
private Map<String, OsMoDevice> trackingDevices = new java.util.concurrent.ConcurrentHashMap<String, OsMoGroupsStorage.OsMoDevice>(); private Map<String, OsMoDevice> trackingDevices = new java.util.concurrent.ConcurrentHashMap<String, OsMoGroupsStorage.OsMoDevice>();
private OsmandPreference<Boolean> autoStart;
private OsmandPreference<Boolean> stateSendLocation; private OsmandPreference<Boolean> stateSendLocation;
public interface OsmoTrackerListener { public interface OsmoTrackerListener {
@ -31,10 +30,9 @@ public class OsMoTracker implements OsMoReactor {
public OsMoTracker(OsMoService service, OsmandPreference<Integer> interval, public OsMoTracker(OsMoService service, OsmandPreference<Integer> interval,
OsmandPreference<Boolean> autoStart, OsmandPreference<Boolean> stateSendLocation) { OsmandPreference<Boolean> stateSendLocation) {
this.service = service; this.service = service;
this.pref = interval; this.pref = interval;
this.autoStart = autoStart;
this.stateSendLocation = stateSendLocation; this.stateSendLocation = stateSendLocation;
service.registerReactor(this); service.registerReactor(this);
} }
@ -52,16 +50,17 @@ public class OsMoTracker implements OsMoReactor {
public void enableTracker() { public void enableTracker() {
if(!isEnabledTracker()) { if(!isEnabledTracker()) {
stateSendLocation.set(true); enableTrackerCmd();
service.pushCommand("TRACKER_SESSION_OPEN");
} }
} }
public void enableTrackerCmd() {
stateSendLocation.set(true);
service.pushCommand("TRACKER_SESSION_OPEN");
}
public void disableTracker() { public void disableTracker() {
if(isEnabledTracker()) { if(isEnabledTracker()) {
if(autoStart.get()) {
autoStart.set(false);
}
stateSendLocation.set(false); stateSendLocation.set(false);
service.pushCommand("TRACKER_SESSION_CLOSE"); service.pushCommand("TRACKER_SESSION_CLOSE");
} }
@ -114,7 +113,7 @@ public class OsMoTracker implements OsMoReactor {
} }
public void sendCoordinate(Location location) { public void sendCoordinate(Location location) {
if(stateSendLocation.set(true) && location != null) { if(stateSendLocation.get() && location != null) {
long ltime = lastBufferLocation == null ? 0 : lastBufferLocation.getTime(); long ltime = lastBufferLocation == null ? 0 : lastBufferLocation.getTime();
if (location.getTime() - ltime > pref.get()) { if (location.getTime() - ltime > pref.get()) {
@ -218,11 +217,8 @@ public class OsMoTracker implements OsMoReactor {
@Override @Override
public void onConnected() { public void onConnected() {
if(autoStart.get() || stateSendLocation.get()) { if(stateSendLocation.get()) {
if(autoStart.get() && !stateSendLocation.get()) { enableTrackerCmd();
stateSendLocation.set(true);
}
enableTracker();
} }
} }

View file

@ -29,7 +29,7 @@ public class SettingsOsMoActivity extends SettingsBaseActivity {
private Preference debugPref; private Preference debugPref;
private Preference trackerId; 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[] SECONDS = new int[] {0, 1, 2, 3, 5, 10, 15, 30, 60, 90};
public static final int[] MINUTES = new int[] {2, 3, 5}; 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); autoConnectref.setSummary(R.string.osmo_auto_connect_descr);
grp.addPreference(autoConnectref); grp.addPreference(autoConnectref);
sendLocationsref = createCheckBoxPreference(settings.OSMO_AUTO_SEND_LOCATIONS); // sendLocationsref = createCheckBoxPreference(settings.OSMO_AUTO_SEND_LOCATIONS);
sendLocationsref.setTitle(R.string.osmo_auto_send_locations); // sendLocationsref.setTitle(R.string.osmo_auto_send_locations);
sendLocationsref.setSummary(R.string.osmo_auto_send_locations_descr); // sendLocationsref.setSummary(R.string.osmo_auto_send_locations_descr);
sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get()); // sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get());
grp.addPreference(sendLocationsref); // grp.addPreference(sendLocationsref);
grp.addPreference(createTimeListPreference(settings.OSMO_SAVE_TRACK_INTERVAL, SECONDS, grp.addPreference(createTimeListPreference(settings.OSMO_SAVE_TRACK_INTERVAL, SECONDS,
MINUTES, 1000, R.string.osmo_track_interval, R.string.osmo_track_interval_descr)); 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) { public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean p = super.onPreferenceChange(preference, newValue); boolean p = super.onPreferenceChange(preference, newValue);
String id = preference.getKey(); String id = preference.getKey();
if (id.equals(settings.OSMO_AUTO_SEND_LOCATIONS.getId())) { if (id.equals(settings.OSMO_AUTO_CONNECT.getId())) {
if ((Boolean) newValue) {
final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class);
plugin.getTracker().enableTracker();
}
} else if (id.equals(settings.OSMO_AUTO_CONNECT.getId())) {
if ((Boolean) newValue) { if ((Boolean) newValue) {
final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class); final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class);
plugin.getService().connect(false); plugin.getService().connect(false);
} }
sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get()); // sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get());
} }
return p; return p;
} }

View file

@ -54,7 +54,9 @@ public class BaseLocationIndexRepository<T extends MapObject> {
// close previous db // close previous db
db.close(); 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('.')); name = file.getName().substring(0, file.getName().indexOf('.'));
if(db.getVersion() != version){ if(db.getVersion() != version){
db.close(); db.close();

View file

@ -119,7 +119,9 @@ public class RegionAddressRepositoryBinary implements RegionAddressRepository {
@Override @Override
public synchronized void addCityToPreloadedList(City city) { public synchronized void addCityToPreloadedList(City city) {
cities.put(city.getId(), city); if (!cities.containsKey(city.getId())) {
cities.put(city.getId(), city);
}
} }
@Override @Override
@ -129,6 +131,7 @@ public class RegionAddressRepositoryBinary implements RegionAddressRepository {
@Override @Override
public synchronized void preloadStreets(City o, ResultMatcher<Street> resultMatcher) { 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(); Collection<Street> streets = o.getStreets();
if(!streets.isEmpty()){ if(!streets.isEmpty()){
return; return;
@ -138,7 +141,6 @@ public class RegionAddressRepositoryBinary implements RegionAddressRepository {
} catch (IOException e) { } catch (IOException e) {
log.error("Disk operation failed" , e); //$NON-NLS-1$ log.error("Disk operation failed" , e); //$NON-NLS-1$
} }
} }
// // not use ccontains It is really slow, takes about 10 times more than other steps // // not use ccontains It is really slow, takes about 10 times more than other steps

View file

@ -49,7 +49,10 @@ public class HillshadeLayer extends MapTileLayer {
@Override @Override
protected Void doInBackground(Void... params) { protected Void doInBackground(Void... params) {
File tilesDir = app.getAppPath(IndexConstants.TILES_INDEX_DIR); 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) { if(sqliteDb.getVersion() == 0) {
sqliteDb.setVersion(1); sqliteDb.setVersion(1);
sqliteDb.execSQL("CREATE TABLE TILE_SOURCES(filename varchar2(256), date_modified int, left int, right int, top int, bottom int)"); sqliteDb.execSQL("CREATE TABLE TILE_SOURCES(filename varchar2(256), date_modified int, left int, right int, top int, bottom int)");