Compare commits

..

2 commits

Author SHA1 Message Date
Victor Shcherb
51857e827e Refactor group markers 2021-04-19 14:45:45 +02:00
Victor Shcherb
beb8058495 Remove CategoriesSubHeader 2021-04-19 13:46:14 +02:00
696 changed files with 14347 additions and 42028 deletions

View file

@ -17,7 +17,6 @@ package com.jwetherell.openmap.common;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale;
public class MGRSPoint extends ZonedUTMPoint { public class MGRSPoint extends ZonedUTMPoint {
@ -699,8 +698,9 @@ public class MGRSPoint extends ZonedUTMPoint {
String zero = ""; String zero = "";
} }
all.add(String.format(Locale.US,"%0" + accuracy + "d", roundedEasting));
all.add(String.format(Locale.US,"%0" + accuracy + "d", roundedNorthing)); all.add(String.format("%0" + accuracy + "d", roundedEasting));
all.add(String.format("%0" + accuracy + "d", roundedNorthing));
break; break;
} }
} }

View file

@ -6,7 +6,6 @@ import net.osmand.binary.StringBundle;
import net.osmand.binary.StringBundleWriter; import net.osmand.binary.StringBundleWriter;
import net.osmand.binary.StringBundleXmlWriter; import net.osmand.binary.StringBundleXmlWriter;
import net.osmand.data.QuadRect; import net.osmand.data.QuadRect;
import net.osmand.router.RouteColorize.ColorizationType;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -228,9 +227,6 @@ public class GPXUtilities {
public double hdop = Double.NaN; public double hdop = Double.NaN;
public float heading = Float.NaN; public float heading = Float.NaN;
public boolean deleted = false; public boolean deleted = false;
public int speedColor = 0;
public int altitudeColor = 0;
public int slopeColor = 0;
public int colourARGB = 0; // point colour (used for altitude/speed colouring) public int colourARGB = 0; // point colour (used for altitude/speed colouring)
public double distance = 0.0; // cumulative distance, if in a track public double distance = 0.0; // cumulative distance, if in a track
@ -253,9 +249,6 @@ public class GPXUtilities {
this.hdop = wptPt.hdop; this.hdop = wptPt.hdop;
this.heading = wptPt.heading; this.heading = wptPt.heading;
this.deleted = wptPt.deleted; this.deleted = wptPt.deleted;
this.speedColor = wptPt.speedColor;
this.altitudeColor = wptPt.altitudeColor;
this.slopeColor = wptPt.slopeColor;
this.colourARGB = wptPt.colourARGB; this.colourARGB = wptPt.colourARGB;
this.distance = wptPt.distance; this.distance = wptPt.distance;
} }
@ -318,26 +311,6 @@ public class GPXUtilities {
getExtensionsToWrite().put(ICON_NAME_EXTENSION, iconName); getExtensionsToWrite().put(ICON_NAME_EXTENSION, iconName);
} }
public int getColor(ColorizationType type) {
if (type == ColorizationType.SPEED) {
return speedColor;
} else if (type == ColorizationType.ELEVATION) {
return altitudeColor;
} else {
return slopeColor;
}
}
public void setColor(ColorizationType type, int color) {
if (type == ColorizationType.SPEED) {
speedColor = color;
} else if (type == ColorizationType.ELEVATION) {
altitudeColor = color;
} else if (type == ColorizationType.SLOPE) {
slopeColor = color;
}
}
public String getBackgroundType() { public String getBackgroundType() {
return getExtensionsToRead().get(BACKGROUND_TYPE_EXTENSION); return getExtensionsToRead().get(BACKGROUND_TYPE_EXTENSION);
} }
@ -1113,15 +1086,6 @@ public class GPXUtilities {
return trackBounds; return trackBounds;
} }
public static QuadRect calculateTrackBounds(List<TrkSegment> segments) {
QuadRect trackBounds = new QuadRect(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,
Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
for (TrkSegment segment : segments) {
updateBounds(trackBounds, segment.points, 0);
}
return trackBounds;
}
public static void updateBounds(QuadRect trackBounds, List<WptPt> pts, int startIndex) { public static void updateBounds(QuadRect trackBounds, List<WptPt> pts, int startIndex) {
for (int i = startIndex; i < pts.size(); i++) { for (int i = startIndex; i < pts.size(); i++) {
WptPt pt = pts.get(i); WptPt pt = pts.get(i);
@ -1698,16 +1662,16 @@ public class GPXUtilities {
return new QuadRect(left, top, right, bottom); return new QuadRect(left, top, right, bottom);
} }
public int[] getGradientScaleColor(String gradientScaleType) { public int getGradientScaleColor(String gradientScaleType, int defColor) {
String clrValue = null; String clrValue = null;
if (extensions != null) { if (extensions != null) {
clrValue = extensions.get(gradientScaleType); clrValue = extensions.get(gradientScaleType);
} }
return Algorithms.stringToGradientPalette(clrValue); return parseColor(clrValue, defColor);
} }
public void setGradientScaleColor(String gradientScaleType, int[] gradientScalePalette) { public void setGradientScaleColor(String gradientScaleType, int gradientScaleColor) {
getExtensionsToWrite().put(gradientScaleType, Algorithms.gradientPaletteToString(gradientScalePalette)); getExtensionsToWrite().put(gradientScaleType, Algorithms.colorToString(gradientScaleColor));
} }
public String getGradientScaleType() { public String getGradientScaleType() {

View file

@ -27,9 +27,7 @@ public class IndexConstants {
public static final String BINARY_ROAD_MAP_INDEX_EXT = ".road.obf"; //$NON-NLS-1$ public static final String BINARY_ROAD_MAP_INDEX_EXT = ".road.obf"; //$NON-NLS-1$
public static final String BINARY_ROAD_MAP_INDEX_EXT_ZIP = ".road.obf.zip"; //$NON-NLS-1$ public static final String BINARY_ROAD_MAP_INDEX_EXT_ZIP = ".road.obf.zip"; //$NON-NLS-1$
public static final String BINARY_SRTM_MAP_INDEX_EXT = ".srtm.obf"; //$NON-NLS-1$ public static final String BINARY_SRTM_MAP_INDEX_EXT = ".srtm.obf"; //$NON-NLS-1$
public static final String BINARY_SRTM_FEET_MAP_INDEX_EXT = ".srtmf.obf"; //$NON-NLS-1$
public static final String BINARY_SRTM_MAP_INDEX_EXT_ZIP = ".srtm.obf.zip"; //$NON-NLS-1$ public static final String BINARY_SRTM_MAP_INDEX_EXT_ZIP = ".srtm.obf.zip"; //$NON-NLS-1$
public static final String BINARY_SRTM_FEET_MAP_INDEX_EXT_ZIP = ".srtmf.obf.zip"; //$NON-NLS-1$
public static final String EXTRA_EXT = ".extra"; public static final String EXTRA_EXT = ".extra";
public static final String EXTRA_ZIP_EXT = ".extra.zip"; public static final String EXTRA_ZIP_EXT = ".extra.zip";

View file

@ -1,23 +1,20 @@
package net.osmand; package net.osmand;
import java.text.ParseException; import java.text.ParseException;
import java.util.Calendar;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class Period { public class Period {
public enum PeriodUnit { public enum PeriodUnit {
YEAR("Y", Calendar.YEAR), YEAR("Y"),
MONTH("M", Calendar.MONTH), MONTH("M"),
WEEK("W", Calendar.WEEK_OF_YEAR), WEEK("W"),
DAY("D", Calendar.DATE); DAY("D");
private String unitStr; private String unitStr;
private int calendarIdx;
PeriodUnit(String unitStr, int calendarIdx) { PeriodUnit(String unitStr) {
this.calendarIdx = calendarIdx;
this.unitStr = unitStr; this.unitStr = unitStr;
} }
@ -25,10 +22,6 @@ public class Period {
return unitStr; return unitStr;
} }
public int getCalendarIdx() {
return calendarIdx;
}
public double getMonthsValue() { public double getMonthsValue() {
switch (this) { switch (this) {
case YEAR: case YEAR:

View file

@ -1,9 +1,25 @@
package net.osmand.binary; package net.osmand.binary;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedInputStream;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.WireFormat; import com.google.protobuf.WireFormat;
import gnu.trove.iterator.TLongObjectIterator;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.list.array.TLongArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher; import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest; import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
@ -18,23 +34,6 @@ import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
import net.osmand.util.OpeningHoursParser; import net.osmand.util.OpeningHoursParser;
import org.apache.commons.logging.Log;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import gnu.trove.iterator.TLongObjectIterator;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.list.array.TLongArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
public class BinaryMapRouteReaderAdapter { public class BinaryMapRouteReaderAdapter {
protected static final Log LOG = PlatformUtil.getLog(BinaryMapRouteReaderAdapter.class); protected static final Log LOG = PlatformUtil.getLog(BinaryMapRouteReaderAdapter.class);
private static final int SHIFT_COORDINATES = 4; private static final int SHIFT_COORDINATES = 4;
@ -304,7 +303,6 @@ public class BinaryMapRouteReaderAdapter {
public int directionTrafficSignalsBackward = -1; public int directionTrafficSignalsBackward = -1;
public int trafficSignals = -1; public int trafficSignals = -1;
public int stopSign = -1; public int stopSign = -1;
public int stopMinor = -1;
public int giveWaySign = -1; public int giveWaySign = -1;
int nameTypeRule = -1; int nameTypeRule = -1;
@ -365,8 +363,6 @@ public class BinaryMapRouteReaderAdapter {
destinationRefTypeRule = id; destinationRefTypeRule = id;
} else if (tags.equals("highway") && val.equals("traffic_signals")){ } else if (tags.equals("highway") && val.equals("traffic_signals")){
trafficSignals = id; trafficSignals = id;
} else if (tags.equals("stop") && val.equals("minor")) {
stopMinor = id;
} else if (tags.equals("highway") && val.equals("stop")){ } else if (tags.equals("highway") && val.equals("stop")){
stopSign = id; stopSign = id;
} else if (tags.equals("highway") && val.equals("give_way")){ } else if (tags.equals("highway") && val.equals("give_way")){

View file

@ -282,12 +282,10 @@ public class GeocodingUtilities {
} else { } else {
Collections.sort(streetsList, DISTANCE_COMPARATOR); Collections.sort(streetsList, DISTANCE_COMPARATOR);
double streetDistance = 0; double streetDistance = 0;
boolean isBuildingFound = knownMinBuildingDistance > 0;
for (GeocodingResult street : streetsList) { for (GeocodingResult street : streetsList) {
if (streetDistance == 0) { if (streetDistance == 0) {
streetDistance = street.getDistance(); streetDistance = street.getDistance();
} else if (streetDistance > 0 && street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME && } else if (street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME) {
isBuildingFound) {
continue; continue;
} }
street.connectionPoint = road.connectionPoint; street.connectionPoint = road.connectionPoint;
@ -298,7 +296,6 @@ public class GeocodingUtilities {
if (knownMinBuildingDistance == 0) { if (knownMinBuildingDistance == 0) {
GeocodingResult firstBld = it.next(); GeocodingResult firstBld = it.next();
knownMinBuildingDistance = firstBld.getDistance(); knownMinBuildingDistance = firstBld.getDistance();
isBuildingFound = true;
res.add(firstBld); res.add(firstBld);
} }
while (it.hasNext()) { while (it.hasNext()) {

View file

@ -4,7 +4,6 @@ import net.osmand.Location;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
import net.osmand.data.LatLon;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
import net.osmand.util.TransliterationHelper; import net.osmand.util.TransliterationHelper;
@ -38,9 +37,7 @@ public class RouteDataObject {
public int[] nameIds; public int[] nameIds;
// mixed array [0, height, cumulative_distance height, cumulative_distance, height, ...] - length is length(points)*2 // mixed array [0, height, cumulative_distance height, cumulative_distance, height, ...] - length is length(points)*2
public float[] heightDistanceArray = null; public float[] heightDistanceArray = null;
public float heightByCurrentLocation = Float.NaN;
private static final Log LOG = PlatformUtil.getLog(RouteDataObject.class); private static final Log LOG = PlatformUtil.getLog(RouteDataObject.class);
public RouteDataObject(RouteRegion region) { public RouteDataObject(RouteRegion region) {
this.region = region; this.region = region;
} }
@ -168,10 +165,6 @@ public class RouteDataObject {
} }
public float[] calculateHeightArray() { public float[] calculateHeightArray() {
return calculateHeightArray(null);
}
public float[] calculateHeightArray(LatLon currentLocation) {
if(heightDistanceArray != null) { if(heightDistanceArray != null) {
return heightDistanceArray; return heightDistanceArray;
} }
@ -186,8 +179,6 @@ public class RouteDataObject {
double plon = 0; double plon = 0;
double plat = 0; double plat = 0;
float prevHeight = startHeight; float prevHeight = startHeight;
heightByCurrentLocation = Float.NaN;
double prevDistance = 0;
for(int k = 0; k < getPointsLength(); k++) { for(int k = 0; k < getPointsLength(); k++) {
double lon = MapUtils.get31LongitudeX(getPoint31XTile(k)); double lon = MapUtils.get31LongitudeX(getPoint31XTile(k));
double lat = MapUtils.get31LatitudeY(getPoint31YTile(k)); double lat = MapUtils.get31LatitudeY(getPoint31YTile(k));
@ -209,15 +200,6 @@ public class RouteDataObject {
} }
heightDistanceArray[2*k] = (float) dd; heightDistanceArray[2*k] = (float) dd;
heightDistanceArray[2*k+1] = height; heightDistanceArray[2*k+1] = height;
if (currentLocation != null) {
double distance = MapUtils.getDistance(currentLocation, lat, lon);
if (height != HEIGHT_UNDEFINED && distance < prevDistance) {
prevDistance = distance;
heightByCurrentLocation = height;
}
}
if(height != HEIGHT_UNDEFINED) { if(height != HEIGHT_UNDEFINED) {
// interpolate undefined // interpolate undefined
double totalDistance = dd; double totalDistance = dd;
@ -241,9 +223,6 @@ public class RouteDataObject {
} }
plat = lat; plat = lat;
plon = lon; plon = lon;
if (currentLocation != null) {
prevDistance = MapUtils.getDistance(currentLocation, plat, plon);
}
} }
return heightDistanceArray; return heightDistanceArray;
} }
@ -521,24 +500,6 @@ public class RouteDataObject {
return pointTypes[ind]; return pointTypes[ind];
} }
public void removePointType(int ind, int type) {
if (pointTypes != null || ind < pointTypes.length) {
int[] typesArr = pointTypes[ind];
for (int i = 0; i < typesArr.length; i++) {
if (typesArr[i] == type) {
int[] result = new int[typesArr.length - 1];
System.arraycopy(typesArr, 0, result, 0, i);
if (typesArr.length != i) {
System.arraycopy(typesArr, i + 1, result, i, typesArr.length - 1 - i);
pointTypes[ind] = result;
break;
}
}
}
}
}
public int[] getTypes() { public int[] getTypes() {
return types; return types;
} }
@ -584,7 +545,7 @@ public class RouteDataObject {
String nonCondTag = rtr.getTag(); String nonCondTag = rtr.getTag();
int ks; int ks;
for (ks = 0; ks < pointTypes[i].length; ks++) { for (ks = 0; ks < pointTypes[i].length; ks++) {
RouteTypeRule toReplace = region.quickGetEncodingRule(pointTypes[i][ks]); RouteTypeRule toReplace = region.quickGetEncodingRule(pointTypes[i][j]);
if (toReplace != null && toReplace.getTag().contentEquals(nonCondTag)) { if (toReplace != null && toReplace.getTag().contentEquals(nonCondTag)) {
break; break;
} }

View file

@ -279,19 +279,6 @@ public class Amenity extends MapObject {
} }
public String getTagContent(String tag, String lang) { public String getTagContent(String tag, String lang) {
String translateName = getStrictTagContent(tag, lang);
if (translateName != null) {
return translateName;
}
for (String nm : getAdditionalInfoKeys()) {
if (nm.startsWith(tag + ":")) {
return getAdditionalInfo(nm);
}
}
return null;
}
public String getStrictTagContent(String tag, String lang) {
if (lang != null) { if (lang != null) {
String translateName = getAdditionalInfo(tag + ":" + lang); String translateName = getAdditionalInfo(tag + ":" + lang);
if (!Algorithms.isEmpty(translateName)) { if (!Algorithms.isEmpty(translateName)) {
@ -306,6 +293,11 @@ public class Amenity extends MapObject {
if (!Algorithms.isEmpty(enName)) { if (!Algorithms.isEmpty(enName)) {
return enName; return enName;
} }
for (String nm : getAdditionalInfoKeys()) {
if (nm.startsWith(tag + ":")) {
return getAdditionalInfo(nm);
}
}
return null; return null;
} }

View file

@ -16,11 +16,13 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
@ -181,9 +183,8 @@ public abstract class MapObject implements Comparable<MapObject> {
public String getName(String lang, boolean transliterate) { public String getName(String lang, boolean transliterate) {
if (lang != null && lang.length() > 0) { if (lang != null && lang.length() > 0) {
if (lang.equals("en")) { if (lang.equals("en")) {
// for some objects like wikipedia, english name is stored 'name' tag // ignore transliterate option here for backward compatibility
String enName = getEnName(transliterate); return getEnName(true);
return !Algorithms.isEmpty(enName) ? enName : getName();
} else { } else {
// get name // get name
if (names != null) { if (names != null) {

View file

@ -163,7 +163,9 @@ public class Multipolygon {
* @return true if this multipolygon is correct and contains the point * @return true if this multipolygon is correct and contains the point
*/ */
public boolean containsPoint(LatLon point) { public boolean containsPoint(LatLon point) {
return containsPoint(point.getLatitude(), point.getLongitude()); return containsPoint(point.getLatitude(), point.getLongitude());
} }
public int countOuterPolygons() { public int countOuterPolygons() {

View file

@ -6,7 +6,6 @@ public class QuadRect {
public double top; public double top;
public double bottom; public double bottom;
// left & right / top & bottom could be flipped (so it's useful for latlon bbox)
public QuadRect(double left, double top, double right, double bottom) { public QuadRect(double left, double top, double right, double bottom) {
this.left = left; this.left = left;
this.right = right; this.right = right;
@ -22,18 +21,16 @@ public class QuadRect {
} }
public double width() { public double width() {
return Math.abs(right - left); return right - left;
} }
public double height() { public double height() {
return Math.abs(bottom - top); return bottom - top;
} }
public boolean contains(double left, double top, double right, double bottom) { public boolean contains(double left, double top, double right, double bottom) {
return Math.min(this.left, this.right) <= Math.min(left, right) return this.left < this.right && this.top < this.bottom && this.left <= left && this.top <= top && this.right >= right
&& Math.max(this.left, this.right) >= Math.max(left, right) && this.bottom >= bottom;
&& Math.min(this.top, this.bottom) <= Math.min(top, bottom)
&& Math.max(this.top, this.bottom) >= Math.max(top, bottom);
} }
public boolean contains(QuadRect box) { public boolean contains(QuadRect box) {
@ -41,14 +38,11 @@ public class QuadRect {
} }
public static boolean intersects(QuadRect a, QuadRect b) { public static boolean intersects(QuadRect a, QuadRect b) {
return Math.min(a.left, a.right) <= Math.max(b.left, b.right) return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;
&& Math.max(a.left, a.right) >= Math.min(b.left, b.right)
&& Math.min(a.bottom, a.top) <= Math.max(b.bottom, b.top)
&& Math.max(a.bottom, a.top) >= Math.min(b.bottom, b.top);
} }
public static boolean trivialOverlap(QuadRect a, QuadRect b) { public static boolean trivialOverlap(QuadRect a, QuadRect b) {
return intersects(a, b); return !((a.right < b.left) || (a.left > b.right) || (a.top < b.bottom) || (a.bottom > b.top));
} }
public double centerX() { public double centerX() {

View file

@ -103,16 +103,18 @@ public class QuadTree<T> {
void splitBox(QuadRect node_extent, QuadRect[] n) { void splitBox(QuadRect node_extent, QuadRect[] n) {
// coord2d c=node_extent.center(); // coord2d c=node_extent.center();
double width = node_extent.width();
double height = node_extent.height();
double lx = node_extent.left; double lox = node_extent.left;
double ly = node_extent.top; double loy = node_extent.top;
double hx = node_extent.right; double hix = node_extent.right;
double hy = node_extent.bottom; double hiy = node_extent.bottom;
n[0] = new QuadRect(lx, ly, lx + (hx - lx) * ratio, ly + (hy - ly) * ratio); n[0] = new QuadRect(lox, loy, lox + width * ratio, loy + height * ratio);
n[1] = new QuadRect(lx + (hx - lx) * (1 - ratio), ly, hx, ly + (hy - ly) * ratio); n[1] = new QuadRect(hix - width * ratio, loy, hix, loy + height * ratio);
n[2] = new QuadRect(lx, ly + (hy - ly) * (1 - ratio), lx + (hx - lx) * ratio, hy); n[2] = new QuadRect(lox, hiy - height * ratio, lox + width * ratio, hiy);
n[3] = new QuadRect(lx + (hx - lx) * (1 - ratio), ly + (hy - ly) * (1 - ratio), hx, hy); n[3] = new QuadRect(hix - width * ratio, hiy - height * ratio, hix, hiy);
} }
} }

View file

@ -436,7 +436,7 @@ public class OsmandRegions {
cx /= object.getPointsLength(); cx /= object.getPointsLength();
cy /= object.getPointsLength(); cy /= object.getPointsLength();
rd.regionCenter = new LatLon(MapUtils.get31LatitudeY((int) cy), MapUtils.get31LongitudeX((int) cx)); rd.regionCenter = new LatLon(MapUtils.get31LatitudeY((int) cy), MapUtils.get31LongitudeX((int) cx));
findBoundaries(rd, object); rd.boundingBox = findBoundingBox(object);
} }
rd.regionParentFullName = mapIndexFields.get(mapIndexFields.parentFullName, object); rd.regionParentFullName = mapIndexFields.get(mapIndexFields.parentFullName, object);
@ -462,15 +462,13 @@ public class OsmandRegions {
return rd; return rd;
} }
private void findBoundaries(WorldRegion rd, BinaryMapDataObject object) { private QuadRect findBoundingBox(BinaryMapDataObject object) {
if (object.getPointsLength() == 0) { if (object.getPointsLength() == 0) {
return; return new QuadRect(0, 0, 0, 0);
} }
List<LatLon> polygon = new ArrayList<>();
double currentX = object.getPoint31XTile(0); double currentX = object.getPoint31XTile(0);
double currentY = object.getPoint31YTile(0); double currentY = object.getPoint31YTile(0);
polygon.add(new LatLon(currentX, currentY));
double minX = currentX; double minX = currentX;
double maxX = currentX; double maxX = currentX;
double minY = currentY; double minY = currentY;
@ -490,7 +488,6 @@ public class OsmandRegions {
} else if (currentY < minY) { } else if (currentY < minY) {
minY = currentY; minY = currentY;
} }
polygon.add(new LatLon(currentX, currentY));
} }
} }
@ -499,8 +496,7 @@ public class OsmandRegions {
double revertedMinY = MapUtils.get31LatitudeY((int) maxY); double revertedMinY = MapUtils.get31LatitudeY((int) maxY);
double revertedMaxY = MapUtils.get31LatitudeY((int) minY); double revertedMaxY = MapUtils.get31LatitudeY((int) minY);
rd.boundingBox = new QuadRect(minX, revertedMinY, maxX, revertedMaxY); return new QuadRect(minX, revertedMinY, maxX, revertedMaxY);
rd.polygon = polygon;
} }
private String getSearchIndex(BinaryMapDataObject object) { private String getSearchIndex(BinaryMapDataObject object) {

View file

@ -5,11 +5,8 @@ import net.osmand.data.QuadRect;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set;
public class WorldRegion implements Serializable { public class WorldRegion implements Serializable {
@ -45,7 +42,6 @@ public class WorldRegion implements Serializable {
protected boolean regionMapDownload; protected boolean regionMapDownload;
protected LatLon regionCenter; protected LatLon regionCenter;
protected QuadRect boundingBox; protected QuadRect boundingBox;
protected List<LatLon> polygon;
public static class RegionParams { public static class RegionParams {
protected String regionLeftHandDriving; protected String regionLeftHandDriving;
@ -190,23 +186,12 @@ public class WorldRegion implements Serializable {
} }
public boolean containsRegion(WorldRegion region) { public boolean containsRegion(WorldRegion region) {
if (containsBoundingBox(region.boundingBox)) { if (this.boundingBox != null && region.boundingBox != null) {
// check polygon only if bounding box match return this.boundingBox.contains(region.boundingBox);
return containsPolygon(region.polygon);
} }
return false; return false;
} }
private boolean containsBoundingBox(QuadRect rectangle) {
return (boundingBox != null && rectangle != null) &&
boundingBox.contains(rectangle);
}
private boolean containsPolygon(List<LatLon> another) {
return (polygon != null && another != null) &&
Algorithms.isFirstPolygonInsideSecond(another, polygon);
}
public boolean isContinent() { public boolean isContinent() {
if (superregion != null) { if (superregion != null) {
String superRegionId = superregion.getRegionId(); String superRegionId = superregion.getRegionId();
@ -215,22 +200,4 @@ public class WorldRegion implements Serializable {
} }
return false; return false;
} }
public static List<WorldRegion> removeDuplicates(List<WorldRegion> regions) {
List<WorldRegion> copy = new ArrayList<>(regions);
Set<WorldRegion> duplicates = new HashSet<>();
for (int i = 0; i < copy.size() - 1; i++) {
WorldRegion r1 = copy.get(i);
for (int j = i + 1; j < copy.size(); j++) {
WorldRegion r2 = copy.get(j);
if (r1.containsRegion(r2)) {
duplicates.add(r2);
} else if (r2.containsRegion(r1)) {
duplicates.add(r1);
}
}
}
copy.removeAll(duplicates);
return copy;
}
} }

View file

@ -658,8 +658,6 @@ public class MapPoiTypes {
tp.setOsmValue(parser.getAttributeValue("", "value")); tp.setOsmValue(parser.getAttributeValue("", "value"));
tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"), tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"),
parser.getAttributeValue("", "edit_value")); parser.getAttributeValue("", "edit_value"));
tp.setOsmEditTagValue2(parser.getAttributeValue("", "edit_tag2"),
parser.getAttributeValue("", "edit_value2"));
tp.setOsmTag2(parser.getAttributeValue("", "tag2")); tp.setOsmTag2(parser.getAttributeValue("", "tag2"));
tp.setOsmValue2(parser.getAttributeValue("", "value2")); tp.setOsmValue2(parser.getAttributeValue("", "value2"));

View file

@ -16,10 +16,9 @@ public class PoiType extends AbstractPoiType {
private String editTag; private String editTag;
private String editValue; private String editValue;
private String editTag2;
private String editValue2;
private boolean filterOnly; private boolean filterOnly;
private String nameTag; private String nameTag;
private boolean text; private boolean text;
private boolean nameOnly; private boolean nameOnly;
@ -70,11 +69,6 @@ public class PoiType extends AbstractPoiType {
this.editValue = editValue; this.editValue = editValue;
} }
public void setOsmEditTagValue2(String osmTag, String editValue) {
this.editTag2 = osmTag;
this.editValue2 = editValue;
}
public String getEditOsmTag() { public String getEditOsmTag() {
if(isReference()) { if(isReference()) {
return referenceType.getEditOsmTag(); return referenceType.getEditOsmTag();
@ -95,20 +89,6 @@ public class PoiType extends AbstractPoiType {
return editValue; return editValue;
} }
public String getEditOsmTag2() {
if (isReference()) {
return referenceType.getEditOsmTag2();
}
return editTag2;
}
public String getEditOsmValue2() {
if (isReference()) {
return referenceType.getEditOsmValue2();
}
return editValue2;
}
public void setOsmTag(String osmTag) { public void setOsmTag(String osmTag) {
this.osmTag = osmTag; this.osmTag = osmTag;
} }

View file

@ -181,6 +181,7 @@ public class OsmMapUtils {
} }
} }
} }
return new LatLon(flat, flon); return new LatLon(flat, flon);
} }
@ -340,30 +341,6 @@ public class OsmMapUtils {
} }
} }
public static void simplifyDouglasPeucker(List<Node> nodes, int start, int end, List<Node> survivedNodes, double epsilon) {
double dmax = Double.NEGATIVE_INFINITY;
int index = -1;
Node startPt = nodes.get(start);
Node endPt = nodes.get(end);
for (int i = start + 1; i < end; i++) {
Node pt = nodes.get(i);
double d = MapUtils.getOrthogonalDistance(pt.getLatitude(), pt.getLongitude(),
startPt.getLatitude(), startPt.getLongitude(), endPt.getLatitude(), endPt.getLongitude());
if (d > dmax) {
dmax = d;
index = i;
}
}
if (dmax > epsilon) {
simplifyDouglasPeucker(nodes, start, index, survivedNodes, epsilon);
simplifyDouglasPeucker(nodes, index, end, survivedNodes, epsilon);
} else {
survivedNodes.add(nodes.get(end));
}
}
private static double orthogonalDistance(int zoom, Node nodeLineStart, Node nodeLineEnd, Node node) { private static double orthogonalDistance(int zoom, Node nodeLineStart, Node nodeLineEnd, Node node) {
LatLon p = MapUtils.getProjection(node.getLatitude(), node.getLongitude(), nodeLineStart.getLatitude(), LatLon p = MapUtils.getProjection(node.getLatitude(), node.getLongitude(), nodeLineStart.getLatitude(),
nodeLineStart.getLongitude(), nodeLineEnd.getLatitude(), nodeLineEnd.getLongitude()); nodeLineStart.getLongitude(), nodeLineEnd.getLatitude(), nodeLineEnd.getLongitude());

View file

@ -289,8 +289,7 @@ public class OsmBaseStorage {
entityInfo.put(entityId, currentParsedEntityInfo); entityInfo.put(entityId, currentParsedEntityInfo);
} }
if(!supressWarnings && oldEntity!= null){ if(!supressWarnings && oldEntity!= null){
throw new UnsupportedOperationException( throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
"Entity with id=" + oldEntity.getId() + " is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
} }
} else { } else {
// System.gc(); // System.gc();

View file

@ -620,7 +620,9 @@ public class GeneralRouter implements VehicleRouter {
public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) { public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) {
float ts = getPenaltyTransition(segment.getRoad()); float ts = getPenaltyTransition(segment.getRoad());
float prevTs = getPenaltyTransition(prev.getRoad()); float prevTs = getPenaltyTransition(prev.getRoad());
float totalPenalty = 0; float totalPenalty = 0;
if (prevTs != ts) { if (prevTs != ts) {
totalPenalty += Math.abs(ts - prevTs) / 2; totalPenalty += Math.abs(ts - prevTs) / 2;
} }
@ -636,9 +638,7 @@ public class GeneralRouter implements VehicleRouter {
// } // }
// } // }
// } // }
if (shortestRoute) {
return totalPenalty;
}
if(segment.getRoad().roundabout() && !prev.getRoad().roundabout()) { if(segment.getRoad().roundabout() && !prev.getRoad().roundabout()) {
double rt = getRoundaboutTurn(); double rt = getRoundaboutTurn();
if(rt > 0) { if(rt > 0) {

View file

@ -1,501 +0,0 @@
package net.osmand.router;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.GPXUtilities.GPXTrackAnalysis;
import net.osmand.GPXUtilities.Track;
import net.osmand.GPXUtilities.TrkSegment;
import net.osmand.GPXUtilities.WptPt;
import net.osmand.PlatformUtil;
import net.osmand.osm.edit.Node;
import net.osmand.osm.edit.OsmMapUtils;
import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.List;
public class RouteColorize {
public int zoom;
public double[] latitudes;
public double[] longitudes;
public double[] values;
public double minValue;
public double maxValue;
public double[][] palette;
private List<RouteColorizationPoint> dataList;
public static final int DARK_GREY = rgbaToDecimal(92, 92, 92, 255);
public static final int LIGHT_GREY = rgbaToDecimal(200, 200, 200, 255);
public static final int GREEN = rgbaToDecimal(90, 220, 95, 255);
public static final int YELLOW = rgbaToDecimal(212, 239, 50, 255);
public static final int RED = rgbaToDecimal(243, 55, 77, 255);
public static final int[] colors = new int[] {GREEN, YELLOW, RED};
private static final float DEFAULT_BASE = 17.2f;
private static final int MAX_SLOPE_VALUE = 25;
public enum ColorizationType {
ELEVATION,
SPEED,
SLOPE,
NONE
}
private final int VALUE_INDEX = 0;
private final int DECIMAL_COLOR_INDEX = 1;//sRGB decimal format
private final int RED_COLOR_INDEX = 1;//RGB
private final int GREEN_COLOR_INDEX = 2;//RGB
private final int BLUE_COLOR_INDEX = 3;//RGB
private final int ALPHA_COLOR_INDEX = 4;//RGBA
private ColorizationType colorizationType;
public static int SLOPE_RANGE = 150;//150 meters
private static final double MIN_DIFFERENCE_SLOPE = 0.05d;//5%
private static final Log LOG = PlatformUtil.getLog(RouteColorize.class);
/**
* @param minValue can be NaN
* @param maxValue can be NaN
* @param palette array {{value,color},...} - color in sRGB (decimal) format OR {{value,RED,GREEN,BLUE,ALPHA},...} - color in RGBA format
*/
public RouteColorize(int zoom, double[] latitudes, double[] longitudes, double[] values, double minValue, double maxValue, double[][] palette) {
this.zoom = zoom;
this.latitudes = latitudes;
this.longitudes = longitudes;
this.values = values;
this.minValue = minValue;
this.maxValue = maxValue;
this.palette = palette;
if (Double.isNaN(minValue) || Double.isNaN(maxValue)) {
calculateMinMaxValue();
}
checkPalette();
sortPalette();
}
/**
* @param type ELEVATION, SPEED, SLOPE
*/
public RouteColorize(int zoom, GPXFile gpxFile, ColorizationType type) {
this(zoom, gpxFile, null, type, 0);
}
public RouteColorize(int zoom, GPXFile gpxFile, GPXTrackAnalysis analysis, ColorizationType type, float maxProfileSpeed) {
if (!gpxFile.hasTrkPt()) {
LOG.warn("GPX file is not consist of track points");
return;
}
List<Double> latList = new ArrayList<>();
List<Double> lonList = new ArrayList<>();
List<Double> valList = new ArrayList<>();
int wptIdx = 0;
if (analysis == null) {
analysis = Algorithms.isEmpty(gpxFile.path)
? gpxFile.getAnalysis(System.currentTimeMillis())
: gpxFile.getAnalysis(gpxFile.modifiedTime);
}
for (Track t : gpxFile.tracks) {
for (TrkSegment ts : t.segments) {
if (ts.generalSegment || ts.points.size() < 2) {
continue;
}
for (WptPt p : ts.points) {
latList.add(p.lat);
lonList.add(p.lon);
if (type == ColorizationType.SPEED) {
valList.add((double) analysis.speedData.get(wptIdx).speed);
} else {
valList.add((double) analysis.elevationData.get(wptIdx).elevation);
}
wptIdx++;
}
}
}
this.zoom = zoom;
colorizationType = type;
latitudes = listToArray(latList);
longitudes = listToArray(lonList);
if (type == ColorizationType.SLOPE) {
values = calculateSlopesByElevations(latitudes, longitudes, listToArray(valList), SLOPE_RANGE);
} else {
values = listToArray(valList);
}
calculateMinMaxValue();
maxValue = getMaxValue(colorizationType, analysis, minValue, maxProfileSpeed);
checkPalette();
sortPalette();
}
/**
* Calculate slopes from elevations needs for right colorizing
*
* @param slopeRange - in what range calculate the derivative, usually we used 150 meters
* @return slopes array, in the begin and the end present NaN values!
*/
public double[] calculateSlopesByElevations(double[] latitudes, double[] longitudes, double[] elevations, double slopeRange) {
double[] newElevations = elevations;
for (int i = 2; i < elevations.length - 2; i++) {
newElevations[i] = elevations[i - 2]
+ elevations[i - 1]
+ elevations[i]
+ elevations[i + 1]
+ elevations[i + 2];
newElevations[i] /= 5;
}
elevations = newElevations;
double[] slopes = new double[elevations.length];
if (latitudes.length != longitudes.length || latitudes.length != elevations.length) {
LOG.warn("Sizes of arrays latitudes, longitudes and values are not match");
return slopes;
}
double[] distances = new double[elevations.length];
double totalDistance = 0.0d;
distances[0] = totalDistance;
for (int i = 0; i < elevations.length - 1; i++) {
totalDistance += MapUtils.getDistance(latitudes[i], longitudes[i], latitudes[i + 1], longitudes[i + 1]);
distances[i + 1] = totalDistance;
}
for (int i = 0; i < elevations.length; i++) {
if (distances[i] < slopeRange / 2 || distances[i] > totalDistance - slopeRange / 2) {
slopes[i] = Double.NaN;
} else {
double[] arg = findDerivativeArguments(distances, elevations, i, slopeRange);
slopes[i] = (arg[1] - arg[0]) / (arg[3] - arg[2]);
}
}
return slopes;
}
public List<RouteColorizationPoint> getResult(boolean simplify) {
List<RouteColorizationPoint> result = new ArrayList<>();
if (simplify) {
result = simplify(zoom);
} else {
for (int i = 0; i < latitudes.length; i++) {
result.add(new RouteColorizationPoint(i, latitudes[i], longitudes[i], values[i]));
}
}
for (RouteColorizationPoint data : result) {
data.color = getColorByValue(data.val);
}
return result;
}
public int getColorByValue(double value) {
if (Double.isNaN(value)) {
value = colorizationType == ColorizationType.SLOPE ? minValue : (minValue + maxValue) / 2;
}
for (int i = 0; i < palette.length - 1; i++) {
if (value == palette[i][VALUE_INDEX])
return (int) palette[i][DECIMAL_COLOR_INDEX];
if (value >= palette[i][VALUE_INDEX] && value <= palette[i + 1][VALUE_INDEX]) {
int minPaletteColor = (int) palette[i][DECIMAL_COLOR_INDEX];
int maxPaletteColor = (int) palette[i + 1][DECIMAL_COLOR_INDEX];
double minPaletteValue = palette[i][VALUE_INDEX];
double maxPaletteValue = palette[i + 1][VALUE_INDEX];
double percent = (value - minPaletteValue) / (maxPaletteValue - minPaletteValue);
double resultRed = getRed(minPaletteColor) + percent * (getRed(maxPaletteColor) - getRed(minPaletteColor));
double resultGreen = getGreen(minPaletteColor) + percent * (getGreen(maxPaletteColor) - getGreen(minPaletteColor));
double resultBlue = getBlue(minPaletteColor) + percent * (getBlue(maxPaletteColor) - getBlue(minPaletteColor));
double resultAlpha = getAlpha(minPaletteColor) + percent * (getAlpha(maxPaletteColor) - getAlpha(minPaletteColor));
return rgbaToDecimal((int) resultRed, (int) resultGreen, (int) resultBlue, (int) resultAlpha);
}
}
return getTransparentColor();
}
public void setPalette(double[][] palette) {
this.palette = palette;
checkPalette();
sortPalette();
}
public void setPalette(int[] gradientPalette) {
if (gradientPalette == null || gradientPalette.length != 3) {
return;
}
setPalette(new double[][] {
{minValue, gradientPalette[0]},
{(minValue + maxValue) / 2, gradientPalette[1]},
{maxValue, gradientPalette[2]}
});
}
private int getTransparentColor() {
return rgbaToDecimal(0, 0, 0, 0);
}
public List<RouteColorizationPoint> simplify(int zoom) {
if (dataList == null) {
dataList = new ArrayList<>();
for (int i = 0; i < latitudes.length; i++) {
dataList.add(new RouteColorizationPoint(i, latitudes[i], longitudes[i], values[i]));
}
}
List<Node> nodes = new ArrayList<>();
List<Node> result = new ArrayList<>();
for (RouteColorizationPoint data : dataList) {
nodes.add(new net.osmand.osm.edit.Node(data.lat, data.lon, data.id));
}
double epsilon = Math.pow(2.0, DEFAULT_BASE - zoom);
result.add(nodes.get(0));
OsmMapUtils.simplifyDouglasPeucker(nodes, 0, nodes.size() - 1, result, epsilon);
List<RouteColorizationPoint> simplified = new ArrayList<>();
for (int i = 1; i < result.size(); i++) {
int prevId = (int) result.get(i - 1).getId();
int currentId = (int) result.get(i).getId();
List<RouteColorizationPoint> sublist = dataList.subList(prevId, currentId);
simplified.addAll(getExtremums(sublist));
}
Node lastSurvivedPoint = result.get(result.size() - 1);
simplified.add(dataList.get((int) lastSurvivedPoint.getId()));
return simplified;
}
private List<RouteColorizationPoint> getExtremums(List<RouteColorizationPoint> subDataList) {
if (subDataList.size() <= 2) {
return subDataList;
}
List<RouteColorizationPoint> result = new ArrayList<>();
double min;
double max;
min = max = subDataList.get(0).val;
for (RouteColorizationPoint pt : subDataList) {
if (min > pt.val) {
min = pt.val;
}
if (max < pt.val) {
max = pt.val;
}
}
double diff = max - min;
result.add(subDataList.get(0));
for (int i = 1; i < subDataList.size() - 1; i++) {
double prev = subDataList.get(i - 1).val;
double current = subDataList.get(i).val;
double next = subDataList.get(i + 1).val;
RouteColorizationPoint currentData = subDataList.get(i);
if ((current > prev && current > next) || (current < prev && current < next)
|| (current < prev && current == next) || (current == prev && current < next)
|| (current > prev && current == next) || (current == prev && current > next)) {
RouteColorizationPoint prevInResult;
if (result.size() > 0) {
prevInResult = result.get(0);
if (prevInResult.val / diff > MIN_DIFFERENCE_SLOPE) {
result.add(currentData);
}
} else
result.add(currentData);
}
}
result.add(subDataList.get(subDataList.size() - 1));
return result;
}
private void checkPalette() {
if (palette == null || palette.length < 2 || palette[0].length < 2 || palette[1].length < 2) {
LOG.info("Will use default palette");
palette = new double[3][2];
double[][] defaultPalette = {
{minValue, GREEN},
{(minValue + maxValue) / 2, YELLOW},
{maxValue, RED}
};
palette = defaultPalette;
}
double min;
double max = min = palette[0][VALUE_INDEX];
int minIndex = 0;
int maxIndex = 0;
double[][] sRGBPalette = new double[palette.length][2];
for (int i = 0; i < palette.length; i++) {
double[] p = palette[i];
if (p.length == 2) {
sRGBPalette[i] = p;
} else if (p.length == 4) {
int color = rgbaToDecimal((int) p[RED_COLOR_INDEX], (int) p[GREEN_COLOR_INDEX], (int) p[BLUE_COLOR_INDEX], 255);
sRGBPalette[i] = new double[]{p[VALUE_INDEX], color};
} else if (p.length >= 5) {
int color = rgbaToDecimal((int) p[RED_COLOR_INDEX], (int) p[GREEN_COLOR_INDEX], (int) p[BLUE_COLOR_INDEX], (int) p[ALPHA_COLOR_INDEX]);
sRGBPalette[i] = new double[]{p[VALUE_INDEX], color};
}
if (p[VALUE_INDEX] > max) {
max = p[VALUE_INDEX];
maxIndex = i;
}
if (p[VALUE_INDEX] < min) {
min = p[VALUE_INDEX];
minIndex = i;
}
}
palette = sRGBPalette;
if (minValue < min) {
palette[minIndex][VALUE_INDEX] = minValue;
}
if (maxValue > max) {
palette[maxIndex][VALUE_INDEX] = maxValue;
}
}
private void sortPalette() {
java.util.Arrays.sort(palette, new java.util.Comparator<double[]>() {
public int compare(double[] a, double[] b) {
return Double.compare(a[VALUE_INDEX], b[VALUE_INDEX]);
}
});
}
/**
* @return double[minElevation, maxElevation, minDist, maxDist]
*/
private double[] findDerivativeArguments(double[] distances, double[] elevations, int index, double slopeRange) {
double[] result = new double[4];
double minDist = distances[index] - slopeRange / 2;
double maxDist = distances[index] + slopeRange / 2;
result[0] = Double.NaN;
result[1] = Double.NaN;
result[2] = minDist;
result[3] = maxDist;
int closestMaxIndex = -1;
int closestMinIndex = -1;
for (int i = index; i < distances.length; i++) {
if (distances[i] == maxDist) {
result[1] = elevations[i];
break;
}
if (distances[i] > maxDist) {
closestMaxIndex = i;
break;
}
}
for (int i = index; i >= 0; i--) {
if (distances[i] == minDist) {
result[0] = elevations[i];
break;
}
if (distances[i] < minDist) {
closestMinIndex = i;
break;
}
}
if (closestMaxIndex > 0) {
double diff = distances[closestMaxIndex] - distances[closestMaxIndex - 1];
double coef = (maxDist - distances[closestMaxIndex - 1]) / diff;
if (coef > 1 || coef < 0) {
LOG.warn("Coefficient fo max must be 0..1 , coef=" + coef);
}
result[1] = (1 - coef) * elevations[closestMaxIndex - 1] + coef * elevations[closestMaxIndex];
}
if (closestMinIndex >= 0) {
double diff = distances[closestMinIndex + 1] - distances[closestMinIndex];
double coef = (minDist - distances[closestMinIndex]) / diff;
if (coef > 1 || coef < 0) {
LOG.warn("Coefficient for min must be 0..1 , coef=" + coef);
}
result[0] = (1 - coef) * elevations[closestMinIndex] + coef * elevations[closestMinIndex + 1];
}
if (Double.isNaN(result[0]) || Double.isNaN(result[1])) {
LOG.warn("Elevations wasn't calculated");
}
return result;
}
public static double getMinValue(ColorizationType type, GPXTrackAnalysis analysis) {
return type == ColorizationType.ELEVATION ? analysis.minElevation : 0.0;
}
public static double getMaxValue(ColorizationType type, GPXTrackAnalysis analysis, double minValue, double maxProfileSpeed) {
if (type == ColorizationType.SPEED) {
return Math.max(analysis.maxSpeed, maxProfileSpeed);
} else if (type == ColorizationType.ELEVATION) {
return Math.max(analysis.maxElevation, minValue + 50);
} else {
return MAX_SLOPE_VALUE;
}
}
private void calculateMinMaxValue() {
if (values.length == 0)
return;
minValue = maxValue = Double.NaN;
for (double value : values) {
if ((Double.isNaN(maxValue) || Double.isNaN(minValue)) && !Double.isNaN(value))
maxValue = minValue = value;
if (minValue > value)
minValue = value;
if (maxValue < value)
maxValue = value;
}
}
private double[] listToArray(List<Double> doubleList) {
double[] result = new double[doubleList.size()];
for (int i = 0; i < doubleList.size(); i++) {
result[i] = doubleList.get(i);
}
return result;
}
private static int rgbaToDecimal(int r, int g, int b, int a) {
int value = ((a & 0xFF) << 24) |
((r & 0xFF) << 16) |
((g & 0xFF) << 8) |
((b & 0xFF) << 0);
return value;
}
private int getRed(int value) {
return (value >> 16) & 0xFF;
}
private int getGreen(int value) {
return (value >> 8) & 0xFF;
}
private int getBlue(int value) {
return (value >> 0) & 0xFF;
}
private int getAlpha(int value) {
return (value >> 24) & 0xff;
}
public static class RouteColorizationPoint {
public int id;
public double lat;
public double lon;
public double val;
public int color;
RouteColorizationPoint(int id, double lat, double lon, double val) {
this.id = id;
this.lat = lat;
this.lon = lon;
this.val = val;
}
}
}

View file

@ -6,6 +6,7 @@ import net.osmand.NativeLibrary;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher; import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader; import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.binary.BinaryMapRouteReaderAdapter;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.binary.RouteDataObject; import net.osmand.binary.RouteDataObject;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
@ -688,7 +689,7 @@ public class RoutePlannerFrontEnd {
} }
} }
if (ctx.calculationMode == RouteCalculationMode.COMPLEX && routeDirection == null if (ctx.calculationMode == RouteCalculationMode.COMPLEX && routeDirection == null
&& maxDistance > RoutingConfiguration.DEVIATION_RADIUS * 6) { && maxDistance > ctx.config.DEVIATION_RADIUS * 6) {
ctx.calculationProgress.totalIterations++; ctx.calculationProgress.totalIterations++;
RoutingContext nctx = buildRoutingContext(ctx.config, ctx.nativeLib, ctx.getMaps(), RouteCalculationMode.BASE); RoutingContext nctx = buildRoutingContext(ctx.config, ctx.nativeLib, ctx.getMaps(), RouteCalculationMode.BASE);
nctx.calculationProgress = ctx.calculationProgress; nctx.calculationProgress = ctx.calculationProgress;
@ -696,7 +697,7 @@ public class RoutePlannerFrontEnd {
if(ls == null) { if(ls == null) {
return null; return null;
} }
routeDirection = PrecalculatedRouteDirection.build(ls, RoutingConfiguration.DEVIATION_RADIUS, ctx.getRouter().getMaxSpeed()); routeDirection = PrecalculatedRouteDirection.build(ls, ctx.config.DEVIATION_RADIUS, ctx.getRouter().getMaxSpeed());
} }
List<RouteSegmentResult> res ; List<RouteSegmentResult> res ;
if (intermediatesEmpty && ctx.nativeLib != null) { if (intermediatesEmpty && ctx.nativeLib != null) {

View file

@ -176,50 +176,12 @@ public class RouteResultPreparation {
combineWayPointsForAreaRouting(ctx, result); combineWayPointsForAreaRouting(ctx, result);
validateAllPointsConnected(result); validateAllPointsConnected(result);
splitRoadsAndAttachRoadSegments(ctx, result, recalculation); splitRoadsAndAttachRoadSegments(ctx, result, recalculation);
for (int i = 0; i < result.size(); i++) {
filterMinorStops(result.get(i));
}
calculateTimeSpeed(ctx, result); calculateTimeSpeed(ctx, result);
prepareTurnResults(ctx, result); prepareTurnResults(ctx, result);
return result; return result;
} }
public RouteSegmentResult filterMinorStops(RouteSegmentResult seg) {
List<Integer> stops = null;
boolean plus = seg.getStartPointIndex() < seg.getEndPointIndex();
int next;
for (int i = seg.getStartPointIndex(); i != seg.getEndPointIndex(); i = next) {
next = plus ? i + 1 : i - 1;
int[] pointTypes = seg.getObject().getPointTypes(i);
if (pointTypes != null) {
for (int j = 0; j < pointTypes.length; j++) {
if (pointTypes[j] == seg.getObject().region.stopMinor) {
if (stops == null) {
stops = new ArrayList<>();
}
stops.add(i);
}
}
}
}
if (stops != null) {
for (int stop : stops) {
List<RouteSegmentResult> attachedRoutes = seg.getAttachedRoutes(stop);
for (RouteSegmentResult attached : attachedRoutes) {
int attStopPriority = highwaySpeakPriority(attached.getObject().getHighway());
int segStopPriority = highwaySpeakPriority(seg.getObject().getHighway());
if (segStopPriority < attStopPriority) {
seg.getObject().removePointType(stop, seg.getObject().region.stopSign);
break;
}
}
}
}
return seg;
}
public void prepareTurnResults(RoutingContext ctx, List<RouteSegmentResult> result) { public void prepareTurnResults(RoutingContext ctx, List<RouteSegmentResult> result) {
for (int i = 0; i < result.size(); i ++) { for (int i = 0; i < result.size(); i ++) {
TurnType turnType = getTurnInfo(result, i, ctx.leftSideNavigation); TurnType turnType = getTurnInfo(result, i, ctx.leftSideNavigation);
@ -1117,8 +1079,8 @@ public class RouteResultPreparation {
if (UNMATCHED_HIGHWAY_TYPE.equals(rr.getObject().getHighway())) { if (UNMATCHED_HIGHWAY_TYPE.equals(rr.getObject().getHighway())) {
bearingDist = RouteSegmentResult.DIST_BEARING_DETECT_UNMATCHED; bearingDist = RouteSegmentResult.DIST_BEARING_DETECT_UNMATCHED;
} }
double mpi = MapUtils.degreesDiff(prev.getBearingEnd(prev.getEndPointIndex(), Math.min(prev.getDistance(), bearingDist)), double mpi = MapUtils.degreesDiff(prev.getBearingEnd(prev.getEndPointIndex(), bearingDist),
rr.getBearingBegin(rr.getStartPointIndex(), Math.min(rr.getDistance(), bearingDist))); rr.getBearingBegin(rr.getStartPointIndex(), bearingDist));
if (mpi >= TURN_DEGREE_MIN) { if (mpi >= TURN_DEGREE_MIN) {
if (mpi < TURN_DEGREE_MIN) { if (mpi < TURN_DEGREE_MIN) {
// Slight turn detection here causes many false positives where drivers would expect a "normal" TL. Best use limit-angle=TURN_DEGREE_MIN, this reduces TSL to the turn-lanes cases. // Slight turn detection here causes many false positives where drivers would expect a "normal" TL. Best use limit-angle=TURN_DEGREE_MIN, this reduces TSL to the turn-lanes cases.

View file

@ -457,7 +457,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
} }
public float getBearingBegin() { public float getBearingBegin() {
return getBearingBegin(startPointIndex, distance > 0 && distance < DIST_BEARING_DETECT ? distance : DIST_BEARING_DETECT); return getBearingBegin(startPointIndex, DIST_BEARING_DETECT);
} }
public float getBearingBegin(int point, float dist) { public float getBearingBegin(int point, float dist) {
@ -465,7 +465,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
} }
public float getBearingEnd() { public float getBearingEnd() {
return getBearingEnd(endPointIndex, distance > 0 && distance < DIST_BEARING_DETECT ? distance : DIST_BEARING_DETECT); return getBearingEnd(endPointIndex, DIST_BEARING_DETECT);
} }
public float getBearingEnd(int point, float dist) { public float getBearingEnd(int point, float dist) {

View file

@ -20,7 +20,7 @@ import java.util.Stack;
public class RoutingConfiguration { public class RoutingConfiguration {
public static final int DEFAULT_MEMORY_LIMIT = 30; public static final int DEFAULT_MEMORY_LIMIT = 30;
public static final float DEVIATION_RADIUS = 3000; public final float DEVIATION_RADIUS = 3000;
public Map<String, String> attributes = new LinkedHashMap<String, String>(); public Map<String, String> attributes = new LinkedHashMap<String, String>();
// 1. parameters of routing and different tweaks // 1. parameters of routing and different tweaks

View file

@ -10,6 +10,8 @@ import net.osmand.router.GeneralRouter.RouteDataObjectAttribute;
public class TransportRoutingConfiguration { public class TransportRoutingConfiguration {
public static final String KEY = "public_transport";
public int ZOOM_TO_LOAD_TILES = 15; public int ZOOM_TO_LOAD_TILES = 15;
public int walkRadius = 1500; // ? 3000 public int walkRadius = 1500; // ? 3000

View file

@ -8,7 +8,7 @@ public enum ObjectType {
// LOCATION // LOCATION
LOCATION(true), PARTIAL_LOCATION(false), LOCATION(true), PARTIAL_LOCATION(false),
// UI OBJECTS // UI OBJECTS
FAVORITE(true), FAVORITE_GROUP(false), WPT(true), RECENT_OBJ(true), GPX_TRACK(false), FAVORITE(true), FAVORITE_GROUP(false), WPT(true), RECENT_OBJ(true),
// ONLINE SEARCH // ONLINE SEARCH
ONLINE_SEARCH(true), ONLINE_SEARCH(true),

View file

@ -1317,13 +1317,7 @@ public class SearchCoreFactory {
|| !phrase.isSearchTypeAllowed(ObjectType.HOUSE)) { || !phrase.isSearchTypeAllowed(ObjectType.HOUSE)) {
continue; continue;
} }
if(interpolation) {
res.localeName = lw;
res.location = b.getLocation(b.interpolation(lw));
} else {
res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()); res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
res.location = b.getLocation();
}
res.otherNames = b.getAllNames(true); res.otherNames = b.getAllNames(true);
res.object = b; res.object = b;
res.file = file; res.file = file;
@ -1334,6 +1328,12 @@ public class SearchCoreFactory {
res.relatedObject = s; res.relatedObject = s;
res.localeRelatedObjectName = s.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()); res.localeRelatedObjectName = s.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
res.objectType = ObjectType.HOUSE; res.objectType = ObjectType.HOUSE;
if(interpolation) {
res.location = b.getLocation(b.interpolation(lw));
res.localeName = lw;
} else {
res.location = b.getLocation();
}
res.preferredZoom = 17; res.preferredZoom = 17;
resultMatcher.publish(res); resultMatcher.publish(res);

View file

@ -55,9 +55,7 @@ public class SearchResult {
public double getSumPhraseMatchWeight() { public double getSumPhraseMatchWeight() {
// if result is a complete match in the search we prioritize it higher // if result is a complete match in the search we prioritize it higher
int localWordsMatched = alternateName != null ? boolean match = requiredSearchPhrase.countWords(localeName) <= getSelfWordCount();
requiredSearchPhrase.countWords(alternateName) : requiredSearchPhrase.countWords(localeName) ;
boolean match = localWordsMatched <= getSelfWordCount();
double res = ObjectType.getTypeWeight(match ? objectType : null); double res = ObjectType.getTypeWeight(match ? objectType : null);
if (parentSearchResult != null) { if (parentSearchResult != null) {
res = res + parentSearchResult.getSumPhraseMatchWeight() / MAX_TYPE_WEIGHT; res = res + parentSearchResult.getSumPhraseMatchWeight() / MAX_TYPE_WEIGHT;

View file

@ -2,8 +2,6 @@ package net.osmand.util;
import net.osmand.IProgress; import net.osmand.IProgress;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.router.RouteColorize;
import net.osmand.data.LatLon;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
@ -55,8 +53,6 @@ public class Algorithms {
public static final int XML_FILE_SIGNATURE = 0x3c3f786d; public static final int XML_FILE_SIGNATURE = 0x3c3f786d;
public static final int OBF_FILE_SIGNATURE = 0x08029001; public static final int OBF_FILE_SIGNATURE = 0x08029001;
public static final int SQLITE_FILE_SIGNATURE = 0x53514C69; public static final int SQLITE_FILE_SIGNATURE = 0x53514C69;
public static final int BZIP_FILE_SIGNATURE = 0x425a;
public static final int GZIP_FILE_SIGNATURE = 0x1f8b;
public static String normalizeSearchText(String s) { public static String normalizeSearchText(String s) {
boolean norm = false; boolean norm = false;
@ -142,35 +138,6 @@ public class Algorithms {
return def; return def;
} }
public static boolean isFirstPolygonInsideSecond(List<LatLon> firstPolygon,
List<LatLon> secondPolygon) {
for (LatLon point : firstPolygon) {
if (!isPointInsidePolygon(point, secondPolygon)) {
// if at least one point is not inside the boundary, return false
return false;
}
}
return true;
}
public static boolean isPointInsidePolygon(LatLon point,
List<LatLon> polygon) {
double pointX = point.getLongitude();
double pointY = point.getLatitude();
boolean result = false;
for (int i = 0, j = polygon.size() - 1; i < polygon.size(); j = i++) {
double x1 = polygon.get(i).getLongitude();
double y1 = polygon.get(i).getLatitude();
double x2 = polygon.get(j).getLongitude();
double y2 = polygon.get(j).getLatitude();
if ((y1 > pointY) != (y2 > pointY)
&& (pointX < (x2 - x1) * (pointY - y1) / (y2-y1) + x1)) {
result = !result;
}
}
return result;
}
public static String getFileNameWithoutExtension(File f) { public static String getFileNameWithoutExtension(File f) {
return getFileNameWithoutExtension(f.getName()); return getFileNameWithoutExtension(f.getName());
} }
@ -355,24 +322,6 @@ public class Algorithms {
return test == ZIP_FILE_SIGNATURE; return test == ZIP_FILE_SIGNATURE;
} }
public static boolean checkFileSignature(InputStream inputStream, int fileSignature) throws IOException {
if (inputStream == null) return false;
int firstBytes;
if (isSmallFileSignature(fileSignature)) {
firstBytes = readSmallInt(inputStream);
} else {
firstBytes = readInt(inputStream);
}
if (inputStream.markSupported()) {
inputStream.reset();
}
return firstBytes == fileSignature;
}
public static boolean isSmallFileSignature(int fileSignature) {
return fileSignature == BZIP_FILE_SIGNATURE || fileSignature == GZIP_FILE_SIGNATURE;
}
/** /**
* Checks, whether the child directory is a subdirectory of the parent * Checks, whether the child directory is a subdirectory of the parent
* directory. * directory.
@ -409,14 +358,6 @@ public class Algorithms {
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + ch4); return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + ch4);
} }
public static int readSmallInt(InputStream in) throws IOException {
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return ((ch1 << 8) + ch2);
}
public static String capitalizeFirstLetterAndLowercase(String s) { public static String capitalizeFirstLetterAndLowercase(String s) {
if (s != null && s.length() > 1) { if (s != null && s.length() > 1) {
// not very efficient algorithm // not very efficient algorithm
@ -596,13 +537,6 @@ public class Algorithms {
} }
} }
public static ByteArrayInputStream createByteArrayIS(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
streamCopy(in, out);
in.close();
return new ByteArrayInputStream(out.toByteArray());
}
@SuppressWarnings("ResultOfMethodCallIgnored") @SuppressWarnings("ResultOfMethodCallIgnored")
public static void updateAllExistingImgTilesToOsmandFormat(File f) { public static void updateAllExistingImgTilesToOsmandFormat(File f) {
if (f.isDirectory()) { if (f.isDirectory()) {
@ -789,10 +723,6 @@ public class Algorithms {
return false; return false;
} }
public static boolean isInt(double d) {
return (d == Math.floor(d)) && !Double.isInfinite(d);
}
public static boolean isInt(String value) { public static boolean isInt(String value) {
int length = value.length(); int length = value.length();
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
@ -1062,30 +992,4 @@ public class Algorithms {
} }
return false; return false;
} }
public static int[] stringToGradientPalette(String str) {
if (Algorithms.isBlank(str)) {
return RouteColorize.colors;
}
String[] arr = str.split(" ");
if (arr.length != 3) {
return RouteColorize.colors;
}
int[] colors = new int[3];
try {
for (int i = 0; i < 3; i++) {
colors[i] = Algorithms.parseColor(arr[i]);
}
} catch (IllegalArgumentException e) {
return RouteColorize.colors;
}
return colors;
}
public static String gradientPaletteToString(int[] colors) {
int[] src = (colors != null && colors.length == 3) ? colors : RouteColorize.colors;
return Algorithms.colorToString(src[0]) + " " +
Algorithms.colorToString(src[1]) + " " +
Algorithms.colorToString(src[2]);
}
} }

View file

@ -747,9 +747,7 @@ public class MapUtils {
return Math.sqrt((endX - startX) * (endX - startX) + (endY - startY) * (endY - startY)); return Math.sqrt((endX - startX) * (endX - startX) + (endY - startY) * (endY - startY));
} }
public static double getSqrtDistance(float startX, float startY, float endX, float endY) {
return Math.sqrt((endX - startX) * (endX - startX) + (endY - startY) * (endY - startY));
}
} }

View file

@ -191,10 +191,10 @@ public class SearchUICoreTest {
if (!Algorithms.stringsEqual(expected, present)) { if (!Algorithms.stringsEqual(expected, present)) {
System.out.println(String.format("Phrase: %s", phrase)); System.out.println(String.format("Phrase: %s", phrase));
System.out.println(String.format("Mismatch for '%s' != '%s'. Result: ", expected, present)); System.out.println(String.format("Mismatch for '%s' != '%s'. Result: ", expected, present));
}
for (SearchResult r : searchResults) { for (SearchResult r : searchResults) {
System.out.println(String.format("\t\"%s\",", formatResult(false, r, phrase))); System.out.println(String.format("\t\"%s\",", formatResult(false, r, phrase)));
} }
}
Assert.assertEquals(expected, present); Assert.assertEquals(expected, present);
} }
} }

View file

@ -1,274 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="shared_string_select">Označi</string>
<string name="shared_string_enable">Omogući</string>
<string name="altitude">Nadmorska visina</string>
<string name="shared_string_search">Traži</string>
<string name="shared_string_ok">U redu</string>
<string name="shared_string_update">Ažuriraj</string>
<string name="average_altitude">Prosečna visina</string>
<string name="average_speed">Prosečna brzina</string>
<string name="shared_string_map">Karta</string>
<string name="shared_string_add">Dodaj</string>
<string name="shared_string_hide">Sakrij</string>
<string name="shared_string_status">Stanje</string>
<string name="shared_string_disable">Onemogući</string>
<string name="shared_string_save">Sačuvaj</string>
<string name="shared_string_name">Ime</string>
<string name="shared_string_sort">Sortiraj</string>
<string name="shared_string_exit">Izlaz</string>
<string name="shared_string_close">Zatvori</string>
<string name="shared_string_all">Sve</string>
<string name="shared_string_off">Isključeno</string>
<string name="shared_string_install">Instaliraj</string>
<string name="shared_string_share">Deli</string>
<string name="shared_string_back">Nazad</string>
<string name="shared_string_continue">Nastavi</string>
<string name="shared_string_cancel">Otkaži</string>
<string name="shared_string_settings">Postavke</string>
<string name="osmand_service">Pozadinski režim</string>
<string name="yard">yd</string>
<string name="foot">ft</string>
<string name="mile">mi</string>
<string name="km">km</string>
<string name="m">m</string>
<string name="nm">nmi</string>
<string name="min_mile">min/m</string>
<string name="min_km">min/km</string>
<string name="m_s">m/s</string>
<string name="km_h">km/h</string>
<string name="mile_per_hour">mph</string>
<string name="si_kmh">Kilometara na sat</string>
<string name="si_mph">Milja na sat</string>
<string name="si_m_s">Metara u sekundi</string>
<string name="si_min_km">Minuta po kilometru</string>
<string name="si_min_m">Minuta po milji</string>
<string name="si_mi_feet">Milje/stope</string>
<string name="si_mi_yard">Milje/jardi</string>
<string name="si_km_m">Kilometri/metri</string>
<string name="si_nm">Nautičke milje</string>
<string name="si_mi_meters">Milje/metri</string>
<string name="shared_string_apply">Primeni</string>
<string name="shared_string_enabled">Uključen</string>
<string name="units_and_formats">Merne jedinice &amp; formatiranja</string>
<string name="unit_of_length_descr">Promeni jedinice za dužinu.</string>
<string name="unit_of_length">Jedinice dužine</string>
<string name="shared_string_appearance">Izgled</string>
<string name="timeline">Vremenska linija</string>
<string name="live_now">Uživo sada</string>
<string name="my_location">Moja lokacija</string>
<string name="welcome_descr"><b>OsmAnd Pratioc</b> omogućava vam da delite svoju lokaciju i vidite lokaciju drugih u OsmAndu.<br/><br/>Aplikacija koristi Telegram API, pa vam je potreban Telegram nalog.</string>
<string name="shared_string_second_short">sek</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_hour_short">č</string>
<string name="si_nm_h">Nautičkih milja na sat (čvorovi)</string>
<string name="nm_h">nmi/č</string>
<string name="shared_string_welcome">Dobrodošli</string>
<string name="shared_string_authorization_descr">Unesite vaš telefonski broj Telegrama u međunarodnom formatu</string>
<string name="shared_string_authorization">Autorizacija</string>
<string name="active_chats">Aktivna ćaskanja</string>
<string name="show_users_on_map">Prikažite korisnike na mapi</string>
<string name="install_osmand">Instalirajte OsmAnd</string>
<string name="install_osmand_dialog_message">Prvo morate instalirati besplatnu ili plaćenu verziju OsmAnda</string>
<string name="osmand_logo">Logo OsmAnda</string>
<string name="process_service">Usluga OsmAnd Pratioca</string>
<string name="sharing_location">Deljenje lokacije</string>
<string name="share_location">Deli lokaciju</string>
<string name="shared_string_distance">Rastojanje</string>
<string name="osmand_service_descr">OsmAnd Pratioc radi u pozadini sa isključenim ekranom.</string>
<string name="location_service_no_gps_available">Izaberite jednog od dobavljača lokacije da bi deliti vašu lokaciju.</string>
<string name="gps_not_available">Uključite „Lokaciju“ u sistemskim podešavanjima</string>
<string name="no_location_permission">Aplikaciji nedostaje dozvola za pristup podacima o lokaciji.</string>
<string name="not_logged_in">Niste prijavljeni</string>
<string name="gps_network_not_enabled">Uključiti „Lokaciju“\?</string>
<string name="closing">Zatvaranje</string>
<string name="logging_out">Odjavljivanje</string>
<string name="initialization">Pokretanje</string>
<string name="shared_string_logout">Odjaviti se</string>
<string name="shared_string_login">Prijavite se</string>
<string name="password_descr">Telegram lozinka</string>
<string name="enter_password">Unesite lozinku</string>
<string name="authentication_code_descr">Telegram vam je poslao kod za OsmAnd radi prijave na vaš nalog.</string>
<string name="authentication_code">Validacioni kod</string>
<string name="enter_code">Unesite kod</string>
<string name="shared_string_password">Lozinka</string>
<string name="phone_number_descr">Broj telefona u međunarodnom formatu</string>
<string name="phone_number_title">Broj telefona</string>
<string name="app_name">OsmAnd Onlajn GPS Pratioc</string>
<string name="show_on_map">Prikaži na mapi</string>
<string name="start_location_sharing">Deli lokaciju</string>
<string name="my_location_search_hint">Pretražite: Grupu ili kontakt</string>
<string name="location_sharing_description">Izaberite kontakte i grupe sa kojima želite da delite lokaciju.</string>
<string name="set_time">Podesite vreme</string>
<string name="set_time_description">Podesite vreme za koji će izabrani kontakti i grupe videti vašu lokaciju u realnom vremenu.</string>
<string name="visible_time_for_all">Vidljivo vreme za sve</string>
<string name="hours_format">%1$ č</string>
<string name="minutes_format">%1$ m</string>
<string name="hours_and_minutes_format">%1$ č %2$ m</string>
<string name="set_visible_time_for_all">Podesite vidljivo vreme za sve</string>
<string name="enter_authentication_code">Unesite kod za validaciju</string>
<string name="enter_phone_number">Unesite broj telefona</string>
<string name="do_not_have_telegram">Nemam Telegram nalog</string>
<string name="already_registered_in_telegram">Potreban vam je registrovani Telegram nalog i broj telefona</string>
<string name="get_telegram_after_creating_account">Tada možete da koristite ovu aplikaciju.</string>
<string name="get_telegram_description_continue">Instalirajte Telegram i otvorite nalog.</string>
<string name="get_telegram_account_first">Za deljenje lokacije potreban vam je Telegram nalog.</string>
<string name="get_telegram_title">Registracija u Telegramu</string>
<string name="shared_string_bot">Bot</string>
<string name="shared_string_live">Uživo</string>
<string name="open_osmand">Otvori OsmAnd</string>
<string name="turn_off_location_sharing">Isključite deljenje lokacije</string>
<string name="stop_sharing_all">Deljenje je uključeno (isključite)</string>
<string name="expire_at">Ističe</string>
<string name="sharing_time">Vreme deljenja</string>
<string name="gps_and_location">Pozicija</string>
<string name="send_my_location">Pošalji moju lokaciju</string>
<string name="send_my_location_desc">Podesite minimalni interval za deljenje lokacije.</string>
<string name="stale_location">Nepomičan</string>
<string name="stale_location_desc">Poslednji put kada se kontakt pomerio.</string>
<string name="location_history">Istorija lokacije</string>
<string name="location_history_desc">Sakrijte kontakte koji se nisu pomerili u datom vremenu.</string>
<string name="osmand_connect">Osmand veza</string>
<string name="osmand_connect_desc">Odaberite verziju OsmAnda koju OsmAnd pratioc koristi za prikazivanje pozicija.</string>
<string name="in_time">u %1$</string>
<string name="shared_string_account">Nalog</string>
<string name="connected_account">Povezani nalog</string>
<string name="logout_help_desc">Kako isključiti OsmAnd pratioca iz Telegrama</string>
<string name="disconnect_from_telegram">Kako isključiti OsmAnd pratioca iz Telegrama</string>
<string name="disconnect_from_telegram_desc">Da biste opozvali pristup deljenju lokacije. Otvorite Telegram, idite na Podešavanja → Privatnost i bezbednost → Sesije i prekinete sesiju OsmAnd pratioca.</string>
<string name="logout_no_internet_msg">Povežite se na Internet kako biste se pravilno odjavili iz Telegrama.</string>
<string name="shared_string_group">Grupa</string>
<string name="last_response">Poslednji odgovor</string>
<string name="time_ago">pre</string>
<string name="turn_off_all">Isključi sve</string>
<string name="disable_all_sharing">Onemogući svako deljenje</string>
<string name="disable_all_sharing_desc">Isključuje deljenje lokacije prema svim izabranim čatovima (%1$).</string>
<string name="choose_osmand">Izaberite verziju OsmAnda koju želite da koristite</string>
<string name="choose_osmand_desc">Izaberite verziju OsmAnda gde će se kontakti prikazati na mapi.</string>
<string name="shared_string_sort_by">Sortiraj po</string>
<string name="by_group">Po grupi</string>
<string name="by_name">Po imenu</string>
<string name="by_distance">Po udaljenosti</string>
<string name="logout_from_osmand_telegram">Odjaviti se sa OsmAnd pratioca\?</string>
<string name="logout_from_osmand_telegram_descr">Jeste li sigurni da se želite odjaviti sa OsmAnd pratioca tako da ne možete da delite lokaciju ili vidite lokaciju drugih\?</string>
<string name="live_now_description">Kontakti i grupe dele lokaciju vama.</string>
<string name="share_location_as">Deljenje lokacije kao</string>
<string name="add_device">Dodajte uređaj</string>
<string name="no_internet_connection">Nema internet konekcije</string>
<string name="no_gps_connection">Nema GPS veze</string>
<string name="location_sharing_status">Deljenje: %1$</string>
<string name="sharing_status">Deljenje statusa</string>
<string name="last_available_location">Poslednja dostupna lokacija</string>
<string name="re_send_location">Ponovo pošalji lokaciju</string>
<string name="not_found_yet">Još nije pronađeno</string>
<string name="not_sent_yet">Još nije poslato</string>
<string name="shared_string_later">Kasnije</string>
<string name="go_to_settings">Idi na Podešavanja</string>
<string name="sharing_in_background">Deljenje u pozadini</string>
<string name="battery_optimization_description">Isključite optimizaciju baterije za OsmAnd pratilac tako da se ne isključi iznenada kad je u pozadini.</string>
<string name="background_work">Rad u pozadini</string>
<string name="background_work_description">Promenite podešavanja za optimizaciju baterije da biste stabilizovali deljenje lokacije.</string>
<string name="connecting_to_the_internet">Povezivanje sa Internetom</string>
<string name="searching_for_gps">Pozicioniranje…</string>
<string name="initializing">Pokretanje</string>
<string name="sending_location_messages">Lokacija se šalje</string>
<string name="waiting_for_response_from_telegram">Čeka se odgovor iz Telegrama</string>
<string name="not_possible_to_send_to_telegram_chats">Nije moguće poslati u Telegram četove:</string>
<string name="successfully_sent_and_updated">Uspešno poslato i ažurirano</string>
<string name="last_updated_location">Poslednja ažurirana lokacija:</string>
<string name="share_location_as_description">Ako želite da povežete više uređaja sa jednim nalogom telegrama, trebate koristiti drugi uređaj da bi delili vašu lokaciju.</string>
<string name="share_location_as_description_second_line">Možete da kreirate i vidite ID uređaja u telegram klijentu koristeći %1$ čat bot. %2$</string>
<string name="device_name">Ime uređaja</string>
<string name="device_name_cannot_be_empty">Ime uređaja ne može biti prazno</string>
<string name="device_name_is_too_long">Ime uređaja predugo</string>
<string name="enter_device_name_description">Imenujte vaš novi uređaj sa maksimalno 200 simbola.</string>
<string name="error_adding_new_device">Nije moguće dodati novi uređaj</string>
<string name="device_added_successfully">%1$ dodato.</string>
<string name="enter_another_device_name">Izaberite ime koje niste već koristili</string>
<string name="last_update_from_telegram">Poslednje ažuriranje od Telegrama</string>
<string name="map_and_text">Mapa i tekst</string>
<string name="shared_string_text">Tekst</string>
<string name="send_location_as_descr">Odaberite kako će izgledati poruke sa vašom lokacijom.</string>
<string name="send_location_as">Pošalji lokaciju kao</string>
<string name="start_date">Početni datum</string>
<string name="end_date">Krajnji datum</string>
<string name="open_in_osmand">Prikaži u OsmAndu</string>
<string name="time_on_the_move">Vreme kretanja</string>
<string name="monitoring_is_disabled">Praćenje je onemogućeno</string>
<string name="monitoring_is_enabled">Praćenje je omogućeno</string>
<string name="shared_string_sent">Poslato</string>
<string name="gps_points">GPS tačke</string>
<string name="shared_string_collected">Prikupljeno</string>
<string name="shared_string_date">Datum</string>
<string name="points_size">%1$ tačaka</string>
<string name="gps_points_in_buffer">poslato (%1$ u baferu)</string>
<string name="please_update_osmand">Ažurirajte OsmAnd da biste videli podatke na mapi</string>
<string name="show_gps_points_descr">Prikaži količinu prikupljenih i poslatih GPS tačaka.</string>
<string name="show_gps_points">Pokaži GPS tačke</string>
<string name="received_gps_points">Primljene GPKS tačke: %1$</string>
<string name="how_it_works">Kako radi</string>
<string name="osmand_privacy_policy">OsmAnd politika privatnosti</string>
<string name="telegram_privacy_policy">Politika privatnosti Telegrama</string>
<string name="shared_string_accept">Prihvati</string>
<string name="privacy_policy_agree">Klikom na „Nastavi“ prihvatate uslove politike privatnosti Telegrama i OsmAnda.</string>
<string name="privacy_policy_telegram_client">OsmAnd pratilac je jedan od klijenata koji koriste otvorenu platformu Telegram. Vaši kontakti mogu da koriste bilo koji drugi Telegram klijent.</string>
<string name="privacy_policy_use_telegram">Telegram (aplikacija za razmenu poruka) koristi se za povezivanje i komunikaciju sa ljudima.</string>
<string name="shared_string_telegram">Telegram</string>
<string name="app_name_short">OsmAnd pratilac</string>
<string name="timeline_description">Omogućite praćenje da biste sačuvali sve lokacije u istoriji.</string>
<string name="location_recording_enabled">Snimanje lokacije omogućeno</string>
<string name="disable_monitoring">Onemogućite praćenje</string>
<string name="timeline_available_for_free_now">Vremenska linija je funkcija koja je sada dostupna besplatno.</string>
<string name="type_contact_or_group_name">Unesite ime kontakta ili grupe</string>
<string name="search_contacts_descr">Pretraga po svim vašim grupama i kontaktima.</string>
<string name="search_contacts">Pretraga kontakta</string>
<string name="bearing">Usmerenje</string>
<string name="precision">Preciznost</string>
<string name="direction">Smer</string>
<string name="privacy">Privatnost</string>
<string name="proxy">Proksi</string>
<string name="proxy_settings">Podešavanja proksija</string>
<string name="proxy_disconnected">Prekinut</string>
<string name="proxy_connected">Povezan</string>
<string name="proxy_type">Tip proksija</string>
<string name="shared_string_connection">Veza</string>
<string name="proxy_server">Server</string>
<string name="proxy_port">Port</string>
<string name="proxy_credentials">Akreditivi</string>
<string name="proxy_username">Korisničko ime</string>
<string name="proxy_password">Lozinka</string>
<string name="proxy_key">Ključ</string>
<string name="gpx_settings">GPX podešavanja</string>
<string name="min_logging_speed_descr">Filter: nema zapisivanja ispod odabrane brzine</string>
<string name="min_logging_speed">Minimalna brzina zapisivanja</string>
<string name="min_logging_accuracy_descr">Filter: Nema zapisa dok se ne dostigne ova tačnost</string>
<string name="min_logging_accuracy">Minimalna tačnost evidentiranja</string>
<string name="min_logging_distance_descr">Filter: minimalna udaljenost za evidentiranje nove tačke</string>
<string name="min_logging_distance">Minimalna udaljenost evidentiranja</string>
<string name="timeline_no_data">Nema podataka</string>
<string name="timeline_no_data_descr">Nemamo prikupljene podatke za izabrani dan</string>
<string name="start_end_date">Početni — Krajnji datum</string>
<string name="set_time_timeline_descr">Izaberite vreme za prikaz</string>
<string name="shared_string_start">Početak</string>
<string name="shared_string_end">Kraj</string>
<string name="saved_messages">Sačuvane poruke</string>
<string name="unit_of_speed_system">Jedinica brzine</string>
<string name="unit_of_speed_system_descr">Definišite jedinicu brzine.</string>
<string name="time_zone">Vremenska zona</string>
<string name="time_zone_descr">Izaberite vremensku zonu koja će se prikazati u porukama lokacije.</string>
<string name="buffer_time">Vreme isteka bafera</string>
<string name="buffer_time_descr">Maksimalno vreme za skladištenje tačaka u bafer</string>
<string name="status_widget_title">Status Tragača OsmAnda</string>
<string name="shared_string_suggested">Predloženo</string>
<string name="back_to_osmand">Povratak na OsmAnd</string>
<string name="duration_ago">Pre %1$</string>
<string name="last_response_duration">Poslednji odgovor: pre %1$</string>
<string name="last_update_from_telegram_duration">Poslednje ažuriranje iz Telegrama: pre %1$</string>
<string name="last_response_date">Poslednji odgovor: %1$</string>
<string name="last_update_from_telegram_date">Poslednje ažuriranje iz Telegrama: %1$</string>
<string name="shared_string_error_short">Greška</string>
<string name="shared_string_export">Izvezi</string>
<string name="logcat_buffer">Logcat bafer</string>
<string name="logcat_buffer_descr">Proverite i podelite detaljne zapise aplikacije</string>
<string name="send_report">Pošalji izveštaj</string>
</resources>

View file

@ -74,7 +74,4 @@
<string name="shared_string_appearance">Vzhled</string> <string name="shared_string_appearance">Vzhled</string>
<string name="logcat_buffer">Zásobník logcat</string> <string name="logcat_buffer">Zásobník logcat</string>
<string name="logcat_buffer_descr">Zkontrolovat a sdílet podrobné záznamy aplikace</string> <string name="logcat_buffer_descr">Zkontrolovat a sdílet podrobné záznamy aplikace</string>
<string name="by_name">Podle názvu</string>
<string name="shared_string_distance">Vzdálenost</string>
<string name="shared_string_later">Později</string>
</resources> </resources>

View file

@ -82,7 +82,7 @@
<string name="no_location_permission">Der App fehlt die Berechtigung, auf Standortdaten zuzugreifen.</string> <string name="no_location_permission">Der App fehlt die Berechtigung, auf Standortdaten zuzugreifen.</string>
<string name="gps_not_available">Bitte schalten Sie \"Standort\" in den Systemeinstellungen ein</string> <string name="gps_not_available">Bitte schalten Sie \"Standort\" in den Systemeinstellungen ein</string>
<string name="osmand_service">Hintergrundmodus</string> <string name="osmand_service">Hintergrundmodus</string>
<string name="osmand_service_descr">OsmAnd Tracker läuft bei ausgeschaltetem Bildschirm im Hintergrund.</string> <string name="osmand_service_descr">OsmAnd Tracker läuft im Hintergrund bei ausgeschaltetem Bildschirm.</string>
<string name="shared_string_distance">Distanz</string> <string name="shared_string_distance">Distanz</string>
<string name="share_location">Standort teilen</string> <string name="share_location">Standort teilen</string>
<string name="process_service">OsmAnd Tracker-Service</string> <string name="process_service">OsmAnd Tracker-Service</string>

View file

@ -39,7 +39,7 @@
<string name="shared_string_share">Κοινοποίηση</string> <string name="shared_string_share">Κοινοποίηση</string>
<string name="shared_string_back">Προηγούμενο</string> <string name="shared_string_back">Προηγούμενο</string>
<string name="shared_string_continue">Συνέχεια</string> <string name="shared_string_continue">Συνέχεια</string>
<string name="shared_string_cancel">Άκυρο</string> <string name="shared_string_cancel">Ακύρωση</string>
<string name="shared_string_settings">Επιλογές</string> <string name="shared_string_settings">Επιλογές</string>
<string name="shared_string_enabled">Ενεργοποιημένο</string> <string name="shared_string_enabled">Ενεργοποιημένο</string>
<string name="units_and_formats">Μονάδες μέτρησης &amp; φορμά</string> <string name="units_and_formats">Μονάδες μέτρησης &amp; φορμά</string>
@ -53,5 +53,4 @@
<string name="si_km_m">Χιλιόμετρα/μέτρα</string> <string name="si_km_m">Χιλιόμετρα/μέτρα</string>
<string name="unit_of_length_descr">Αλλαγή απόστασης που μετριέται.</string> <string name="unit_of_length_descr">Αλλαγή απόστασης που μετριέται.</string>
<string name="unit_of_length">Μονάδες μήκους</string> <string name="unit_of_length">Μονάδες μήκους</string>
<string name="shared_string_sort_by">Ταξινόμηση κατά</string>
</resources> </resources>

View file

@ -1,146 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="average_altitude">Mezuma altitudo</string>
<string name="how_it_works">Kiel ĝi funkcias</string>
<string name="proxy_disconnected">Ne konektita</string>
<string name="proxy_connected">Konektita</string>
<string name="altitude">Altitudo</string>
<string name="precision">Precizeco</string>
<string name="privacy">Privateco</string>
<string name="shared_string_settings">Agordoj</string>
<string name="shared_string_cancel">Nuligi</string>
<string name="shared_string_continue">Daŭrigi</string>
<string name="osmand_logo">emblemo de OsmAnd</string>
<string name="saved_messages">Konservitaj mesaĝoj</string>
<string name="shared_string_second_short">s</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_hour_short">h</string>
<string name="si_mi_meters">Mejloj/metroj</string>
<string name="si_min_m">Minutoj en mejlo</string>
<string name="si_min_km">Minutoj en kilometro</string>
<string name="si_m_s">Metroj en sekundo</string>
<string name="si_mph">Mejloj en horo</string>
<string name="si_kmh">Kilometroj en horo</string>
<string name="km_h">km/h</string>
<string name="m_s">m/s</string>
<string name="si_nm">Marmejloj</string>
<string name="si_km_m">Kilometroj/metroj</string>
<string name="si_mi_yard">Mejloj/jardoj</string>
<string name="si_mi_feet">Mejloj/futoj</string>
<string name="share_location">Kunhavigi lokon</string>
<string name="shared_string_distance">Distanco</string>
<string name="shared_string_welcome">Bonvenon</string>
<string name="m">m</string>
<string name="km">km</string>
<string name="nm">nmi</string>
<string name="min_mile">min/m</string>
<string name="min_km">min/km</string>
<string name="my_location">Mia loko</string>
<string name="start_date">Komenca dato</string>
<string name="end_date">Fina dato</string>
<string name="send_location_as">Sendi lokon kiel</string>
<string name="shared_string_hide">Kaŝi</string>
<string name="device_name">Nomo de aparato</string>
<string name="shared_string_add">Aldoni</string>
<string name="map_and_text">Mapo kaj teksto</string>
<string name="shared_string_text">Teksto</string>
<string name="shared_string_map">Mapo</string>
<string name="shared_string_date">Dato</string>
<string name="shared_string_accept">Akcepti</string>
<string name="shared_string_telegram">Telegram</string>
<string name="shared_string_ok">Bone</string>
<string name="shared_string_search">Serĉi</string>
<string name="direction">Direkto</string>
<string name="shared_string_enable">Ŝalti</string>
<string name="shared_string_connection">Konekto</string>
<string name="timeline_no_data">Neniu dateno</string>
<string name="proxy_server">Servilo</string>
<string name="proxy_port">Pordo</string>
<string name="proxy_username">Salutnomo</string>
<string name="proxy_password">Pasvorto</string>
<string name="proxy_key">Ŝlosilo</string>
<string name="shared_string_select">Elekti</string>
<string name="shared_string_start">Komenco</string>
<string name="shared_string_end">Fino</string>
<string name="time_zone">Horzono</string>
<string name="send_report">Sendi raporton</string>
<string name="search_contacts">Serĉi kontaktojn</string>
<string name="bearing">Direkto</string>
<string name="proxy_settings">Agordoj pri la Retperanto</string>
<string name="proxy_type">Tipo de retperanto</string>
<string name="units_and_formats">Mezurunuoj &amp; formoj</string>
<string name="shared_string_export">Elporti</string>
<string name="points_size">%1$d punktoj</string>
<string name="shared_string_appearance">Aspekto</string>
<string name="telegram_privacy_policy">Reguloj pri Privateco de Telegram</string>
<string name="osmand_privacy_policy">Reguloj pri Privateco de OsmAnd</string>
<string name="shared_string_update">Ĝisdatigi</string>
<string name="shared_string_collected">Kolektita</string>
<string name="open_in_osmand">Montri per OsmAnd</string>
<string name="background_work">Fona laboro</string>
<string name="no_internet_connection">Sen interreta konekto</string>
<string name="shared_string_status">Stato</string>
<string name="proxy">Retperanto</string>
<string name="gpx_settings">Agordoj pri GPX</string>
<string name="start_end_date">Komenca Fina datoj</string>
<string name="unit_of_speed_system_descr">Difinu la mezurunuon de rapido.</string>
<string name="unit_of_length">Mezurunuoj de longo</string>
<string name="unit_of_speed_system">Mezurunuo de rapido</string>
<string name="shared_string_error_short">ERARO</string>
<string name="back_to_osmand">Reen al OsmAnd</string>
<string name="duration_ago">antaŭ %1$s</string>
<string name="last_response_duration">Lasta respondo: antaŭ %1$s</string>
<string name="last_update_from_telegram_duration">Lasta ĝisdatigo de Telegram: antaŭ %1$s</string>
<string name="last_update_from_telegram_date">Lasta ĝisdatigo de Telegram: %1$s</string>
<string name="last_response_date">Lasta respondo: %1$s</string>
<string name="show_users_on_map">Montri uzantojn sur la mapo</string>
<string name="install_osmand">Instali OsmAnd</string>
<string name="shared_string_suggested">Sugestataj</string>
<string name="average_speed">Mezuma rapido</string>
<string name="shared_string_back">Reen</string>
<string name="shared_string_share">Kunhavigi</string>
<string name="shared_string_install">Instali</string>
<string name="phone_number_descr">Telefonnumero en internacia formo</string>
<string name="phone_number_title">Telefonnumero</string>
<string name="shared_string_password">Pasvorto</string>
<string name="nm_h">kn</string>
<string name="mile">mi</string>
<string name="foot">ft</string>
<string name="yard">yd</string>
<string name="mile_per_hour">mi/h</string>
<string name="si_nm_h">Marmejloj en horo (nodoj)</string>
<string name="shared_string_sort_by">Ordigi laŭ</string>
<string name="shared_string_sort">Ordigi</string>
<string name="by_group">Laŭ grupo</string>
<string name="by_name">Laŭ nomo</string>
<string name="by_distance">Laŭ distanco</string>
<string name="shared_string_name">Nomo</string>
<string name="shared_string_enabled">Aktiva</string>
<string name="connecting_to_the_internet">Konektante al Interreto</string>
<string name="initializing">Komencante</string>
<string name="sending_location_messages">Sendante lokon</string>
<string name="password_descr">Pasvorto de Telegram</string>
<string name="enter_password">Tajpu pasvorton</string>
<string name="show_on_map">Montri sur mapo</string>
<string name="hours_format">%1$d h</string>
<string name="minutes_format">%1$d min</string>
<string name="hours_and_minutes_format">%1$d h %2$d min</string>
<string name="shared_string_sent">Sendita</string>
<string name="not_logged_in">Vi ne estas salutinta</string>
<string name="closing">Fermante</string>
<string name="logging_out">Adiaŭante</string>
<string name="initialization">Lanĉante</string>
<string name="shared_string_logout">Adiaŭi</string>
<string name="shared_string_login">Saluti</string>
<string name="osmand_service">Fona reĝimo</string>
<string name="shared_string_off">Malaktiva</string>
<string name="shared_string_all">Ĉiuj</string>
<string name="shared_string_close">Fermi</string>
<string name="shared_string_exit">Eliri</string>
<string name="shared_string_save">Konservi</string>
<string name="shared_string_disable">Malaktivigi</string>
<string name="shared_string_apply">Apliki</string>
<string name="unit_of_length_descr">Ŝanĝi unuojn por reprezenti distancoj.</string>
<string name="logcat_buffer">Bufro logcat</string>
<string name="logcat_buffer_descr">Legi kaj kunhavigi detalajn protokolojn de la aplikaĵo</string>
</resources>

View file

@ -69,7 +69,7 @@
<string name="mile">mi</string> <string name="mile">mi</string>
<string name="km">km</string> <string name="km">km</string>
<string name="m">m</string> <string name="m">m</string>
<string name="nm">M</string> <string name="nm">nmi</string>
<string name="min_mile">min/m</string> <string name="min_mile">min/m</string>
<string name="min_km">min/km</string> <string name="min_km">min/km</string>
<string name="m_s">m/s</string> <string name="m_s">m/s</string>
@ -249,7 +249,7 @@
<string name="shared_string_authorization">Autoriseerimine</string> <string name="shared_string_authorization">Autoriseerimine</string>
<string name="shared_string_authorization_descr">Palun sisesta oma Telegrami telefoninumber rahvusvahelises formaadis</string> <string name="shared_string_authorization_descr">Palun sisesta oma Telegrami telefoninumber rahvusvahelises formaadis</string>
<string name="shared_string_welcome">Tere tulemast</string> <string name="shared_string_welcome">Tere tulemast</string>
<string name="nm_h">sõlme</string> <string name="nm_h">nmi/h</string>
<string name="si_nm_h">Meremiili tunnis (sõlm)</string> <string name="si_nm_h">Meremiili tunnis (sõlm)</string>
<string name="shared_string_hour_short">h</string> <string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string> <string name="shared_string_minute_short">min</string>

View file

@ -59,7 +59,7 @@
<string name="shared_string_map">نقشه</string> <string name="shared_string_map">نقشه</string>
<string name="average_altitude">میانگین ارتفاع</string> <string name="average_altitude">میانگین ارتفاع</string>
<string name="average_speed">میانگین سرعت</string> <string name="average_speed">میانگین سرعت</string>
<string name="shared_string_update">روزآمدسازی</string> <string name="shared_string_update">به‌روزرسانی</string>
<string name="shared_string_ok">خُب</string> <string name="shared_string_ok">خُب</string>
<string name="shared_string_search">جست‌وجو</string> <string name="shared_string_search">جست‌وجو</string>
<string name="altitude">ارتفاع</string> <string name="altitude">ارتفاع</string>
@ -81,5 +81,5 @@
<string name="send_report">ارسال گزارش</string> <string name="send_report">ارسال گزارش</string>
<string name="shared_string_export">برون‌برد</string> <string name="shared_string_export">برون‌برد</string>
<string name="logcat_buffer">بافر لاگ‌کت</string> <string name="logcat_buffer">بافر لاگ‌کت</string>
<string name="logcat_buffer_descr">لاگ‌های باجزئیات برنامه را بررسی و هم‌رسانی کنید</string> <string name="logcat_buffer_descr">لاگ‌های جزئی برنامه را بررسی و هم‌رسانی کنید</string>
</resources> </resources>

View file

@ -41,5 +41,4 @@
<string name="shared_string_enable">Ota käyttöön</string> <string name="shared_string_enable">Ota käyttöön</string>
<string name="shared_string_select">Valitse</string> <string name="shared_string_select">Valitse</string>
<string name="shared_string_apply">Käytä</string> <string name="shared_string_apply">Käytä</string>
<string name="shared_string_sort">Lajittele</string>
</resources> </resources>

View file

@ -213,7 +213,7 @@
<string name="by_group">Par groupe</string> <string name="by_group">Par groupe</string>
<string name="by_distance">Par distance</string> <string name="by_distance">Par distance</string>
<string name="logout_from_osmand_telegram">Se déconnecter d\'OsmAnd Tracker \?</string> <string name="logout_from_osmand_telegram">Se déconnecter d\'OsmAnd Tracker \?</string>
<string name="logout_from_osmand_telegram_descr">Êtes-vous certain de vouloir vous déconnecter d\'OsmAnd Tracker \? Vous ne pourrez pas partager votre position ni voir la position des autres.</string> <string name="logout_from_osmand_telegram_descr">Êtes-vous sûr·e de vouloir vous déconnecter d\'OsmAnd Tracker ; vous ne pourrez pas partager votre position ni vous la position des autres \?</string>
<string name="live_now_description">Contacts et groupes partageant leur position avec vous.</string> <string name="live_now_description">Contacts et groupes partageant leur position avec vous.</string>
<string name="share_location_as">Partager la position comme</string> <string name="share_location_as">Partager la position comme</string>
<string name="add_device">Ajouter un périphérique</string> <string name="add_device">Ajouter un périphérique</string>
@ -237,7 +237,7 @@
<string name="not_possible_to_send_to_telegram_chats">Impossible d\'envoyer dans les discussions Telegram :</string> <string name="not_possible_to_send_to_telegram_chats">Impossible d\'envoyer dans les discussions Telegram :</string>
<string name="successfully_sent_and_updated">Envoyé et mis à jour avec succès</string> <string name="successfully_sent_and_updated">Envoyé et mis à jour avec succès</string>
<string name="last_updated_location">Dernière position mise à jour :</string> <string name="last_updated_location">Dernière position mise à jour :</string>
<string name="share_location_as_description">Si vous souhaitez connecter plusieurs appareils à un même compte Telegram, vous devez partager votre position depuis chaque appareil.</string> <string name="share_location_as_description">Si vous voulez connecter plusieurs appareils à un même compte Telegram, vous devez utiliser un appareil différent pour partager votre position.</string>
<string name="share_location_as_description_second_line">Vous pouvez créer et visualiser l\'identifiant du périphérique dans le client Telegram en utilisant le chat-bot %1$s. %2$s</string> <string name="share_location_as_description_second_line">Vous pouvez créer et visualiser l\'identifiant du périphérique dans le client Telegram en utilisant le chat-bot %1$s. %2$s</string>
<string name="enter_device_name_description">Nommez votre nouveau périphérique en max 200 symboles.</string> <string name="enter_device_name_description">Nommez votre nouveau périphérique en max 200 symboles.</string>
<string name="enter_another_device_name">Choisissez un nom que vous n\'avez pas encore utilisé</string> <string name="enter_another_device_name">Choisissez un nom que vous n\'avez pas encore utilisé</string>
@ -266,7 +266,7 @@
<string name="location_history_desc">Cacher les contacts qui ne se sont pas déplacés depuis un temps donné.</string> <string name="location_history_desc">Cacher les contacts qui ne se sont pas déplacés depuis un temps donné.</string>
<string name="set_time_description">Définissez l\'heure à laquelle les contacts et groupes sélectionnés verront votre position en temps réel.</string> <string name="set_time_description">Définissez l\'heure à laquelle les contacts et groupes sélectionnés verront votre position en temps réel.</string>
<string name="osmand_connect">OsmAnd connect</string> <string name="osmand_connect">OsmAnd connect</string>
<string name="time_ago">il y a</string> <string name="time_ago">depuis</string>
<string name="logcat_buffer">Buffer Logcat</string> <string name="logcat_buffer">Buffer Logcat</string>
<string name="logcat_buffer_descr">Vérifier et partager les logs détaillés de l\'application</string> <string name="logcat_buffer_descr">Vérifier et partager les logs détaillés de l\'application</string>
<string name="shared_string_export">Exporter</string> <string name="shared_string_export">Exporter</string>

View file

@ -109,7 +109,7 @@
<string name="get_telegram_description_continue">Kérjük, telepítse a Telegramot és hozzon létre egy fiókot.</string> <string name="get_telegram_description_continue">Kérjük, telepítse a Telegramot és hozzon létre egy fiókot.</string>
<string name="get_telegram_after_creating_account">Utána használhatja ezt az alkalmazást.</string> <string name="get_telegram_after_creating_account">Utána használhatja ezt az alkalmazást.</string>
<string name="shared_string_all">Minden</string> <string name="shared_string_all">Minden</string>
<string name="shared_string_off">Kikapcsolva</string> <string name="shared_string_off">Kikapcsolás</string>
<string name="hours_and_minutes_format">%1$d óra %2$d perc</string> <string name="hours_and_minutes_format">%1$d óra %2$d perc</string>
<string name="minutes_format">%1$d perc</string> <string name="minutes_format">%1$d perc</string>
<string name="shared_string_install">Telepítés</string> <string name="shared_string_install">Telepítés</string>

View file

@ -22,7 +22,7 @@
<string name="proxy_port">ポート</string> <string name="proxy_port">ポート</string>
<string name="proxy_server">サーバー</string> <string name="proxy_server">サーバー</string>
<string name="shared_string_connection">接続</string> <string name="shared_string_connection">接続</string>
<string name="shared_string_enable">有効</string> <string name="shared_string_enable">有効</string>
<string name="proxy_type">プロキシタイプ</string> <string name="proxy_type">プロキシタイプ</string>
<string name="proxy_connected">接続しました</string> <string name="proxy_connected">接続しました</string>
<string name="proxy_disconnected">切断しました</string> <string name="proxy_disconnected">切断しました</string>

View file

@ -258,7 +258,7 @@
<string name="unit_of_speed_system_descr">Definieer de eenheid voor snelheid.</string> <string name="unit_of_speed_system_descr">Definieer de eenheid voor snelheid.</string>
<string name="unit_of_speed_system">Eenheid van snelheid</string> <string name="unit_of_speed_system">Eenheid van snelheid</string>
<string name="send_report">Stuur rapport</string> <string name="send_report">Stuur rapport</string>
<string name="shared_string_export">Exporteer</string> <string name="shared_string_export">Exporteer naar OSM</string>
<string name="logcat_buffer">Logcat buffer</string> <string name="logcat_buffer">Logcat buffer</string>
<string name="logcat_buffer_descr">Controleer en deel gedetailleerde logs van de app</string> <string name="logcat_buffer_descr">Controleer en deel gedetailleerde logs van de app</string>
</resources> </resources>

View file

@ -2,12 +2,12 @@
<resources> <resources>
<string name="timeline_no_data">Sem dados</string> <string name="timeline_no_data">Sem dados</string>
<string name="shared_string_select">Selecionar</string> <string name="shared_string_select">Selecionar</string>
<string name="min_logging_distance">Distância mínima de registo</string> <string name="min_logging_distance">Distância mínima de registro</string>
<string name="min_logging_distance_descr">Filtro: distância mínima para registar um novo ponto</string> <string name="min_logging_distance_descr">Filtro: distância mínima para registrar um novo ponto</string>
<string name="min_logging_accuracy">Precisão mínima de registo</string> <string name="min_logging_accuracy">Precisão mínima de registro</string>
<string name="min_logging_accuracy_descr">Filtro: sem registo, a não ser que seja atingida a precisão</string> <string name="min_logging_accuracy_descr">Filtro: sem registro, a menos que a precisão seja atingida</string>
<string name="min_logging_speed">Velocidade mínima de registo</string> <string name="min_logging_speed">Velocidade mínima de registro</string>
<string name="min_logging_speed_descr">Filtro: sem registo abaixo da velocidade selecionada</string> <string name="min_logging_speed_descr">Filtro: sem registro abaixo da velocidade selecionada</string>
<string name="proxy_password">Palavra-passe</string> <string name="proxy_password">Palavra-passe</string>
<string name="proxy_username">Nome de utilizador</string> <string name="proxy_username">Nome de utilizador</string>
<string name="shared_string_enable">Ativar</string> <string name="shared_string_enable">Ativar</string>
@ -16,7 +16,7 @@
<string name="altitude">Altitude</string> <string name="altitude">Altitude</string>
<string name="shared_string_search">Pesquisar</string> <string name="shared_string_search">Pesquisar</string>
<string name="shared_string_ok">Ok</string> <string name="shared_string_ok">Ok</string>
<string name="app_name_short">OsmAnd Tracker</string> <string name="app_name_short">Rastreador OsmAnd</string>
<string name="shared_string_telegram">Telegram</string> <string name="shared_string_telegram">Telegram</string>
<string name="shared_string_appearance">Aparência</string> <string name="shared_string_appearance">Aparência</string>
<string name="shared_string_update">Atualizar</string> <string name="shared_string_update">Atualizar</string>
@ -35,13 +35,13 @@
<string name="shared_string_end">Fim</string> <string name="shared_string_end">Fim</string>
<string name="shared_string_start">Iniciar</string> <string name="shared_string_start">Iniciar</string>
<string name="shared_string_apply">Aplicar</string> <string name="shared_string_apply">Aplicar</string>
<string name="set_time_timeline_descr">Selecionar a hora de visualização</string> <string name="set_time_timeline_descr">Selecionar a hora para exibir</string>
<string name="start_end_date">Data de início - fim</string> <string name="start_end_date">Data de início - fim</string>
<string name="timeline_no_data_descr">Não temos dados recolhidos para o dia selecionado</string> <string name="timeline_no_data_descr">Não coletamos dados para o dia selecionado</string>
<string name="gpx_settings">Configurações de GPX</string> <string name="gpx_settings">Configurações de GPX</string>
<string name="proxy_key">Chave</string> <string name="proxy_key">Chave</string>
<string name="proxy_credentials">Credenciais</string> <string name="proxy_credentials">Credenciais</string>
<string name="proxy_port">Porta</string> <string name="proxy_port">Port</string>
<string name="proxy_server">Servidor</string> <string name="proxy_server">Servidor</string>
<string name="shared_string_connection">Conexão</string> <string name="shared_string_connection">Conexão</string>
<string name="proxy_type">Tipo de proxy</string> <string name="proxy_type">Tipo de proxy</string>
@ -50,16 +50,16 @@
<string name="proxy_settings">Configurações de proxy</string> <string name="proxy_settings">Configurações de proxy</string>
<string name="proxy">Proxy</string> <string name="proxy">Proxy</string>
<string name="precision">Precisão</string> <string name="precision">Precisão</string>
<string name="bearing">Rumo</string> <string name="bearing">Rolamento</string>
<string name="search_contacts">Pesquisar contactos</string> <string name="search_contacts">Pesquisar contatos</string>
<string name="search_contacts_descr">Pesquise em todos os seus grupos e contactos.</string> <string name="search_contacts_descr">Pesquise em todos os seus grupos e contatos.</string>
<string name="type_contact_or_group_name">Digite o nome do contacto ou do grupo</string> <string name="type_contact_or_group_name">Digite o nome do contato ou do grupo</string>
<string name="timeline_available_for_free_now">Linha do tempo é um recurso disponível agora gratuitamente.</string> <string name="timeline_available_for_free_now">Linha do tempo é um recurso disponível agora gratuitamente.</string>
<string name="disable_monitoring">Desativar monitorização</string> <string name="disable_monitoring">Desativar monitoramento</string>
<string name="location_recording_enabled">Gravação de localização ativada</string> <string name="location_recording_enabled">Gravação de localização ativada</string>
<string name="timeline_description">Ative a monitorização para gravar todos os locais no histórico.</string> <string name="timeline_description">Ative o monitoramento para gravar todos os locais no histórico.</string>
<string name="privacy_policy_use_telegram">O Telegram (a aplicação de mensagens) é usado para conectar e comunicar com outras pessoas.</string> <string name="privacy_policy_use_telegram">Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas.</string>
<string name="privacy_policy_telegram_client">OsmAnd Tracker é um dos clientes que usam a Plataforma aberta do Telegram. Os seus contactos podem usar qualquer outro cliente Telegram.</string> <string name="privacy_policy_telegram_client">OsmAnd tracker é um dos clientes que usam a Plataforma aberta do Telegram . Seus contatos podem usar qualquer outro cliente Telegram.</string>
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string> <string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
<string name="shared_string_accept">Aceitar</string> <string name="shared_string_accept">Aceitar</string>
<string name="telegram_privacy_policy">Política de privacidade do Telegram</string> <string name="telegram_privacy_policy">Política de privacidade do Telegram</string>
@ -67,68 +67,68 @@
<string name="how_it_works">Como funciona</string> <string name="how_it_works">Como funciona</string>
<string name="received_gps_points">Pontos GPX recebidos: %1$s</string> <string name="received_gps_points">Pontos GPX recebidos: %1$s</string>
<string name="show_gps_points">Mostrar pontos de GPS</string> <string name="show_gps_points">Mostrar pontos de GPS</string>
<string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS recolhidos e enviados.</string> <string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS coletados e enviados.</string>
<string name="please_update_osmand">Por favor, atualize o OsmAnd para ver os dados no mapa</string> <string name="please_update_osmand">Por favor, atualize o OsmAnd para ver os dados no mapa</string>
<string name="gps_points_in_buffer">enviado (%1$d em buffer)</string> <string name="gps_points_in_buffer">enviado (%1$d em buffer)</string>
<string name="points_size">%1$d pontos</string> <string name="points_size">%1$d pontos</string>
<string name="shared_string_collected">Recolhidos</string> <string name="shared_string_collected">Coletado</string>
<string name="gps_points">Pontos de GPS</string> <string name="gps_points">Pontos de GPS</string>
<string name="shared_string_sent">Enviado</string> <string name="shared_string_sent">Enviado</string>
<string name="monitoring_is_enabled">A monitorização está ativada</string> <string name="monitoring_is_enabled">Monitoramento está ativado</string>
<string name="monitoring_is_disabled">A monitorização está desativada</string> <string name="monitoring_is_disabled">Monitoramento está desativado</string>
<string name="open_in_osmand">Mostrar no OsmAnd</string> <string name="open_in_osmand">Mostrar no OsmAnd</string>
<string name="end_date">Data de fim</string> <string name="end_date">Data final</string>
<string name="send_location_as">Enviar localização como</string> <string name="send_location_as">Enviar localização como</string>
<string name="send_location_as_descr">Escolha a forma como as mensagens com a sua localização serão mostradas.</string> <string name="send_location_as_descr">Escolha como as mensagens com sua localização serão exibidas.</string>
<string name="map_and_text">Mapa e texto</string> <string name="map_and_text">Mapa e texto</string>
<string name="last_update_from_telegram">Última atualização do Telegram</string> <string name="last_update_from_telegram">Última atualização do Telegram</string>
<string name="enter_another_device_name">Escolha um nome que ainda não usou</string> <string name="enter_another_device_name">Escolha um nome que ainda não usou</string>
<string name="device_added_successfully">%1$s adicionado.</string> <string name="device_added_successfully">%1$s adicionado.</string>
<string name="error_adding_new_device">Não foi possível adicionar o novo dispositivo</string> <string name="error_adding_new_device">Não foi possível adicionar novo aparelho</string>
<string name="enter_device_name_description">Atribua um nome a seu novo dispositivo com o máximo de 200 caracteres.</string> <string name="enter_device_name_description">Nomeie seu novo aparelho no máximo 200 símbolos.</string>
<string name="device_name_is_too_long">Nome do dispositivo muito longo</string> <string name="device_name_is_too_long">Nome do aparelho muito longo</string>
<string name="device_name_cannot_be_empty">O nome do dispositivo não pode estar vazio</string> <string name="device_name_cannot_be_empty">O nome do aparelho não pode estar vazio</string>
<string name="device_name">Nome do dispositivo</string> <string name="device_name">Nome do aparelho</string>
<string name="share_location_as_description_second_line">Pode criar e visualizar o ID do dispositivo no cliente de Telegram usando o robô de bate-papo %1$s. %2$s</string> <string name="share_location_as_description_second_line">Pode criar e visualizar o ID do aparelho no cliente de telegrama usando o bot de bate-papo %1$s. %2$s</string>
<string name="share_location_as_description">Se quer conectar vários dispositivos a uma conta no Telegram, é necessário usar um dispositivo diferente para partilhar a sua localização.</string> <string name="share_location_as_description">Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização.</string>
<string name="last_updated_location">Última localização atualizada:</string> <string name="last_updated_location">Última localização atualizada:</string>
<string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string> <string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string>
<string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string> <string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string>
<string name="waiting_for_response_from_telegram">A aguardar a resposta do Telegram</string> <string name="waiting_for_response_from_telegram">Aguardando resposta do Telegram</string>
<string name="sending_location_messages">A enviar a localização</string> <string name="sending_location_messages">enviando localização</string>
<string name="initializing">A iniciar</string> <string name="initializing">Iniciando</string>
<string name="searching_for_gps">A posicionar</string> <string name="searching_for_gps">Posicionando</string>
<string name="connecting_to_the_internet">Conectando-se à Internet</string> <string name="connecting_to_the_internet">Conectando-se à Internet</string>
<string name="background_work_description">Altere as configurações de otimização da bateria para estabilizar a partilha da localização.</string> <string name="background_work_description">Altere as configurações de otimização da bateria para estabilizar o compartilhamento de local.</string>
<string name="background_work">Funcionamento em segundo plano</string> <string name="background_work">Funcionamento em segundo plano</string>
<string name="battery_optimization_description">Desative a otimização da bateria do OsmAnd Tracker para que ele não seja desligado repentinamente quando estiver em segundo plano.</string> <string name="battery_optimization_description">Desative a otimização da bateria do OsmAnd Tracker para que ele não seja desligado repentinamente quando estiver em segundo plano.</string>
<string name="sharing_in_background">Partilha em segundo plano</string> <string name="sharing_in_background">Compartilhando em segundo plano</string>
<string name="go_to_settings">Ir às configurações</string> <string name="go_to_settings">Vá para as configurações</string>
<string name="not_sent_yet">Ainda não enviado</string> <string name="not_sent_yet">Ainda não enviado</string>
<string name="not_found_yet">Ainda não encontrado</string> <string name="not_found_yet">Ainda não encontrado</string>
<string name="re_send_location">Reenvie o local</string> <string name="re_send_location">Reenvie o local</string>
<string name="last_available_location">Última localização disponível</string> <string name="last_available_location">Última localização disponível</string>
<string name="sharing_status">Estado da partilha</string> <string name="sharing_status">Estado de compartilhamento</string>
<string name="location_sharing_status">Partilha: %1$s</string> <string name="location_sharing_status">Compartilhamento: %1$s</string>
<string name="shared_string_enabled">Ativado</string> <string name="shared_string_enabled">Ativado</string>
<string name="no_gps_connection">Sem conexão GPS</string> <string name="no_gps_connection">Sem conexão GPS</string>
<string name="no_internet_connection">Sem ligação à Internet</string> <string name="no_internet_connection">Sem conexão com a internet</string>
<string name="shared_string_disable">Desativar</string> <string name="shared_string_disable">Desativar</string>
<string name="shared_string_save">Guardar</string> <string name="shared_string_save">Gravar</string>
<string name="add_device">Adicionar dispositivo</string> <string name="add_device">Adicionar aparelho</string>
<string name="share_location_as">Partilhar localização como</string> <string name="share_location_as">Compartilhar localização como</string>
<string name="live_now_description">Contactos e grupos partilhando a localização consigo.</string> <string name="live_now_description">Contatos e grupos compartilhando o local consigo.</string>
<string name="logout_from_osmand_telegram_descr">Tem a certeza de que quer sair do OsmAnd Tracker para que não possa partilhar a localização ou ver a localização de outras pessoas\?</string> <string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
<string name="logout_from_osmand_telegram">Sair do OsmAnd Tracker\?</string> <string name="logout_from_osmand_telegram">Sair do OsmAnd Tracker\?</string>
<string name="shared_string_name">Nome</string> <string name="shared_string_name">Nome</string>
<string name="by_distance">Pela distância</string> <string name="by_distance">Pela distância</string>
<string name="by_name">Por nome</string> <string name="by_name">Por nome</string>
<string name="by_group">Por grupo</string> <string name="by_group">Por grupo</string>
<string name="shared_string_sort">Ordenar</string> <string name="shared_string_sort">Ordenar</string>
<string name="choose_osmand_desc">Selecione a versão OsmAnd onde os contactos serão mostrados no mapa.</string> <string name="choose_osmand_desc">Selecione a versão OsmAnd, onde os contatos serão exibidos no mapa.</string>
<string name="choose_osmand">Selecione a versão do OsmAnd para usar</string> <string name="choose_osmand">Selecione a versão do OsmAnd para usar</string>
<string name="disable_all_sharing_desc">Desativa a partilha da localização para todos os bate-papos selecionados (%1$d).</string> <string name="disable_all_sharing_desc">Desativa o compartilhamento de local para todos os bate-papos selecionados (%1$d).</string>
<string name="disable_all_sharing">Desativar todas as partilhas</string> <string name="disable_all_sharing">Desativar todo o compartilhamento</string>
<string name="turn_off_all">Desligue todos</string> <string name="turn_off_all">Desligue todos</string>
<string name="shared_string_exit">Sair</string> <string name="shared_string_exit">Sair</string>
<string name="time_ago">atrás</string> <string name="time_ago">atrás</string>
@ -136,34 +136,34 @@
<string name="shared_string_group">Grupo</string> <string name="shared_string_group">Grupo</string>
<string name="logout_no_internet_msg">Conecte-se à Internet para efetuar a saída do Telegram corretamente.</string> <string name="logout_no_internet_msg">Conecte-se à Internet para efetuar a saída do Telegram corretamente.</string>
<string name="shared_string_close">Fechar</string> <string name="shared_string_close">Fechar</string>
<string name="disconnect_from_telegram_desc">Para revogar o acesso à partilha da localização. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker.</string> <string name="disconnect_from_telegram_desc">Para revogar o acesso ao compartilhamento de local. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker.</string>
<string name="disconnect_from_telegram">Como desativar o OsmAnd Tracker para Telegram</string> <string name="disconnect_from_telegram">Como desativar o OsmAnd Tracker para Telegram</string>
<string name="logout_help_desc">Como desativar o OsmAnd Tracker para Telegram</string> <string name="logout_help_desc">Como desativar o OsmAnd Tracker para Telegram</string>
<string name="connected_account">Conta conectada</string> <string name="connected_account">Conta conectada</string>
<string name="shared_string_account">Conta</string> <string name="shared_string_account">Conta</string>
<string name="in_time">no %1$s</string> <string name="in_time">no %1$s</string>
<string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para mostrar posições.</string> <string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para exibir posições.</string>
<string name="osmand_connect">Conectar OsmAnd</string> <string name="osmand_connect">Conectar OsmAnd</string>
<string name="location_history_desc">Ocultar contactos que não foram movidos num determinado momento.</string> <string name="location_history_desc">Ocultar contactos que não foram movidos num determinado momento.</string>
<string name="location_history">Histórico de localização</string> <string name="location_history">Histórico de localização</string>
<string name="stale_location_desc">A última vez que um contacto foi movido.</string> <string name="stale_location_desc">A última vez que um contato foi movido.</string>
<string name="stale_location">Parado</string> <string name="stale_location">Parado</string>
<string name="send_my_location_desc">Defina o intervalo mínimo para a partilha da localização.</string> <string name="send_my_location_desc">Defina o intervalo mínimo para o compartilhamento de local.</string>
<string name="send_my_location">Enviar a minha localização</string> <string name="send_my_location">Enviar minha localização</string>
<string name="gps_and_location">Posição</string> <string name="gps_and_location">Posição</string>
<string name="sharing_time">Tempo de partilha</string> <string name="sharing_time">Tempo de compartilhamento</string>
<string name="expire_at">Expira</string> <string name="expire_at">Expira</string>
<string name="stop_sharing_all">A partilha está ativada (desativar)</string> <string name="stop_sharing_all">O compartilhamento está ativado (desativado)</string>
<string name="turn_off_location_sharing">Desativar a partilha da localização</string> <string name="turn_off_location_sharing">Desativar o compartilhamento de local</string>
<string name="open_osmand">Abrir OsmAnd</string> <string name="open_osmand">Abrir OsmAnd</string>
<string name="shared_string_live">Tempo real</string> <string name="shared_string_live">Vivo</string>
<string name="shared_string_bot">Robô</string> <string name="shared_string_bot">Robô</string>
<string name="get_telegram_title">Registo no Telegram</string> <string name="get_telegram_title">Registro no Telegram</string>
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar a partilha de localização.</string> <string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
<string name="get_telegram_description_continue">Por favor, instale o Telegram e configure uma conta.</string> <string name="get_telegram_description_continue">Por favor, instale o Telegram e configure uma conta.</string>
<string name="get_telegram_after_creating_account">Depois pode usar esta aplicação.</string> <string name="get_telegram_after_creating_account">Então pode usar esta app.</string>
<string name="shared_string_all">Tudo</string> <string name="shared_string_all">Todos</string>
<string name="shared_string_off">Desativado</string> <string name="shared_string_off">Desligado</string>
<string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string> <string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string>
<string name="do_not_have_telegram">Não tenho uma conta do Telegram</string> <string name="do_not_have_telegram">Não tenho uma conta do Telegram</string>
<string name="enter_phone_number">Digite o número de telefone</string> <string name="enter_phone_number">Digite o número de telefone</string>
@ -173,42 +173,42 @@
<string name="minutes_format">%1$d m</string> <string name="minutes_format">%1$d m</string>
<string name="hours_format">%1$d h</string> <string name="hours_format">%1$d h</string>
<string name="shared_string_install">Instalar</string> <string name="shared_string_install">Instalar</string>
<string name="shared_string_share">Partilhar</string> <string name="shared_string_share">Compartilhar</string>
<string name="shared_string_back">Voltar</string> <string name="shared_string_back">Voltar</string>
<string name="visible_time_for_all">Hora visível para todos</string> <string name="visible_time_for_all">Hora visível para todos</string>
<string name="set_time_description">Defina a hora em que os seus contactos e grupos selecionados verão a sua localização em tempo real.</string> <string name="set_time_description">Defina a hora em que seus contatos e grupos selecionados verão sua localização em tempo real.</string>
<string name="set_time">Definir hora</string> <string name="set_time">Definir tempo</string>
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja partilhar a sua localização.</string> <string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja compartilhar sua localização.</string>
<string name="my_location_search_hint">Pesquisa: grupo ou contacto</string> <string name="my_location_search_hint">Pesquisa: Grupo ou contato</string>
<string name="start_location_sharing">Partilhar localização</string> <string name="start_location_sharing">Compartilhar localização</string>
<string name="show_on_map">Mostrar no mapa</string> <string name="show_on_map">Mostrar no mapa</string>
<string name="app_name">OsmAnd Online GPS Tracker</string> <string name="app_name">OsmAnd Online GPS Tracker</string>
<string name="phone_number_title">Número de telefone</string> <string name="phone_number_title">Número de telefone</string>
<string name="phone_number_descr">Número de telefone no formato internacional</string> <string name="phone_number_descr">Número de telefone no formato internacional</string>
<string name="shared_string_password">Palavra-passe</string> <string name="shared_string_password">Palavra-passe</string>
<string name="enter_code">Digite o código</string> <string name="enter_code">Digite o código</string>
<string name="authentication_code">Código de autenticação</string> <string name="authentication_code">Código de Autenticação</string>
<string name="authentication_code_descr">O Telegram enviou-lhe um código para o OsmAnd para iniciar sessão na sua conta.</string> <string name="authentication_code_descr">Uma faixa GPX é salva automaticamente durante a navegação.</string>
<string name="enter_password">Digite a palavra-passe</string> <string name="enter_password">Digite a palavra-passe</string>
<string name="password_descr">Palavra-passe do Telegram</string> <string name="password_descr">Palavra-passe do telegrama</string>
<string name="shared_string_login">Entrar</string> <string name="shared_string_login">Entrar</string>
<string name="shared_string_logout">Sair</string> <string name="shared_string_logout">Sair</string>
<string name="initialization">A iniciar</string> <string name="initialization">Iniciando</string>
<string name="logging_out">A terminar sessão</string> <string name="logging_out">Saindo</string>
<string name="closing">A fechar</string> <string name="closing">Fechando</string>
<string name="gps_network_not_enabled">Ativar \"Localização\"\?</string> <string name="gps_network_not_enabled">Ativar \"Localização\"\?</string>
<string name="not_logged_in">Não tem a sessão iniciada</string> <string name="not_logged_in">você não está logado no</string>
<string name="shared_string_continue">Continuar</string> <string name="shared_string_continue">Continuar</string>
<string name="shared_string_cancel">Cancelar</string> <string name="shared_string_cancel">Cancelar</string>
<string name="shared_string_settings">Configurações</string> <string name="shared_string_settings">Configurações</string>
<string name="no_location_permission">A aplicação não tem permissão para aceder aos dados de localização.</string> <string name="no_location_permission">A app não tem permissão para acessar os dados de localização.</string>
<string name="gps_not_available">Por favor, ative a \"Localização\" nas configurações do sistema</string> <string name="gps_not_available">Por favor, ligue \"Localização\" nas configurações do sistema</string>
<string name="location_service_no_gps_available">Selecione um dos fornecedores de localização para partilhar a sua localização.</string> <string name="location_service_no_gps_available">Selecione um dos provedores de localização para compartilhar sua localização.</string>
<string name="osmand_service">Modo em segundo plano</string> <string name="osmand_service">Modo de fundo</string>
<string name="osmand_service_descr">O OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string> <string name="osmand_service_descr">OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string>
<string name="shared_string_distance">Distância</string> <string name="shared_string_distance">Distância</string>
<string name="share_location">Partilhar localização</string> <string name="share_location">Compartilhar localização</string>
<string name="sharing_location">A partilhar a localização</string> <string name="sharing_location">Compartilhando localização</string>
<string name="process_service">Serviço OsmAnd Tracker</string> <string name="process_service">Serviço OsmAnd Tracker</string>
<string name="osmand_logo">Logotipo do OsmAnd</string> <string name="osmand_logo">Logotipo do OsmAnd</string>
<string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string> <string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
@ -229,13 +229,13 @@
<string name="nm_h">mn/h</string> <string name="nm_h">mn/h</string>
<string name="m_s">m/s</string> <string name="m_s">m/s</string>
<string name="km_h">km/h</string> <string name="km_h">km/h</string>
<string name="mile_per_hour">mi/h</string> <string name="mile_per_hour">mph</string>
<string name="si_kmh">Quilómetros por hora</string> <string name="si_kmh">Quilómetros por hora</string>
<string name="si_mph">Milhas por hora</string> <string name="si_mph">Milhas por hora</string>
<string name="si_m_s">Metros por segundo</string> <string name="si_m_s">Metros por segundo</string>
<string name="si_min_km">Minutos por quilómetro</string> <string name="si_min_km">Minutos por quilómetro</string>
<string name="si_min_m">Minutos por milha</string> <string name="si_min_m">Minutos por milha</string>
<string name="si_nm_h">Milhas náuticas por hora (nós)</string> <string name="si_nm_h">Milhas náuticas por hora (nó)</string>
<string name="si_mi_feet">Milhas/pés</string> <string name="si_mi_feet">Milhas/pés</string>
<string name="si_mi_yard">Milhas/jardas</string> <string name="si_mi_yard">Milhas/jardas</string>
<string name="si_km_m">Quilómetros/metros</string> <string name="si_km_m">Quilómetros/metros</string>
@ -244,8 +244,8 @@
<string name="shared_string_hour_short">h</string> <string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string> <string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">seg</string> <string name="shared_string_second_short">seg</string>
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>A aplicação usa a API do Telegram e é necessário ter uma conta no Telegram.</string> <string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>O app usa a API Telegram e precisa de uma conta do Telegram.</string>
<string name="my_location">A minha posição</string> <string name="my_location">Minha localização</string>
<string name="live_now">Ao vivo agora</string> <string name="live_now">Ao vivo agora</string>
<string name="timeline">Cronologia</string> <string name="timeline">Cronologia</string>
<string name="saved_messages">Mensagens gravadas</string> <string name="saved_messages">Mensagens gravadas</string>
@ -259,7 +259,7 @@
<string name="buffer_time_descr">Tempo máximo para armazenar pontos no buffer</string> <string name="buffer_time_descr">Tempo máximo para armazenar pontos no buffer</string>
<string name="buffer_time">Tempo de expiração do buffer</string> <string name="buffer_time">Tempo de expiração do buffer</string>
<string name="shared_string_suggested">Sugerido</string> <string name="shared_string_suggested">Sugerido</string>
<string name="status_widget_title">Estado do OsmAnd Tracker</string> <string name="status_widget_title">Estado do Rastreador de OsmAnd</string>
<string name="back_to_osmand">Voltar para OsmAnd</string> <string name="back_to_osmand">Voltar para OsmAnd</string>
<string name="duration_ago">%1$s atrás</string> <string name="duration_ago">%1$s atrás</string>
<string name="last_response_duration">Última resposta: %1$s atrás</string> <string name="last_response_duration">Última resposta: %1$s atrás</string>
@ -270,5 +270,5 @@
<string name="send_report">Enviar o relatório</string> <string name="send_report">Enviar o relatório</string>
<string name="shared_string_export">Exportar</string> <string name="shared_string_export">Exportar</string>
<string name="logcat_buffer">Buffer de logcat</string> <string name="logcat_buffer">Buffer de logcat</string>
<string name="logcat_buffer_descr">Verifique e partilhe registos detalhados da aplicação</string> <string name="logcat_buffer_descr">Verifique e compartilhe registos detalhados da app</string>
</resources> </resources>

View file

@ -1,274 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="last_update_from_telegram_date">Senaste uppdatering från Telegram: %1$s</string> <string name="last_update_from_telegram_date">Senaste uppdatering från Telegram: %1$s</string>
<string name="timeline">Tidslinje</string>
<string name="live_now">Direkt nu</string>
<string name="my_location">Min plats</string>
<string name="welcome_descr"><b>OsmAnd Tracker</b> låter dig dela din plats och se andras i OsmAnd. <br/> <br/>Appen använder Telegram API, så du behöver ett Telegram-konto.</string>
<string name="shared_string_second_short">sek</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_hour_short">t</string>
<string name="si_mi_meters">Miles/meter</string>
<string name="si_nm">Distansminuter</string>
<string name="si_km_m">Kilomter/meter</string>
<string name="si_mi_yard">Miles/yard</string>
<string name="si_mi_feet">Miles/fot</string>
<string name="si_nm_h">Sjömil per timme (knop)</string>
<string name="si_min_m">Minuter per mile</string>
<string name="si_min_km">Minuter per kilometer</string>
<string name="si_m_s">Meter per sekund</string>
<string name="si_mph">Miles per timme</string>
<string name="si_kmh">Kilometer per timme</string>
<string name="mile_per_hour">mph</string>
<string name="km_h">km/h</string>
<string name="m_s">m/s</string>
<string name="nm_h">M/h</string>
<string name="min_km">min/km</string>
<string name="min_mile">min/mi</string>
<string name="nm">di</string>
<string name="m">m</string>
<string name="km">km</string>
<string name="mile">mi</string>
<string name="foot">ft</string>
<string name="yard">yd</string>
<string name="shared_string_welcome">Välkommen</string>
<string name="shared_string_authorization_descr">Ange ditt Telegram-telefonnummer i internationellt format</string>
<string name="shared_string_authorization">Tillstånd</string>
<string name="active_chats">Aktivera chattar</string>
<string name="show_users_on_map">Visa användare på kartan</string>
<string name="install_osmand">Installera OsmAnd</string>
<string name="install_osmand_dialog_message">Du måste installera den gratis eller betalda versionen av OsmAnd först</string>
<string name="osmand_logo">OsmAnd logotyp</string>
<string name="process_service">OsmAnd Tracker tjänst</string>
<string name="sharing_location">Delar plats</string>
<string name="share_location">Dela plats</string>
<string name="shared_string_distance">Avstånd</string>
<string name="osmand_service_descr">OsmAnd Tracker körs i bakgrunden medan skärmen är avstängd.</string>
<string name="osmand_service">Bakgrundsläge</string>
<string name="location_service_no_gps_available">Välj en av platsleverantörerna för att dela din plats.</string>
<string name="gps_not_available">Aktivera \"Plats\" i systeminställningarna</string>
<string name="no_location_permission">App saknar behörighet för plats data.</string>
<string name="shared_string_settings">Inställningar</string>
<string name="shared_string_cancel">Avbryt</string>
<string name="shared_string_continue">Fortsätt</string>
<string name="not_logged_in">Du är inte inloggad</string>
<string name="gps_network_not_enabled">Starta \"Platsdelning\"\?</string>
<string name="closing">Stänger</string>
<string name="logging_out">Loggar ut</string>
<string name="initialization">Startar</string>
<string name="shared_string_logout">Logga ut</string>
<string name="shared_string_login">Logga in</string>
<string name="password_descr">Telegram-lösenord</string>
<string name="enter_password">Ange lösenord</string>
<string name="authentication_code_descr">Telegram har skickat en kod till dig för OmsAnd för inloggning till ditt konto.</string>
<string name="authentication_code">Autentiseringskod</string>
<string name="enter_code">Ange kod</string>
<string name="shared_string_password">Lösenord</string>
<string name="phone_number_descr">Telefonnummer i internationellt format</string>
<string name="phone_number_title">Telefonnummer</string>
<string name="app_name">OsmAnd Online GPS Tracker</string>
<string name="show_on_map">Visa på karta</string>
<string name="start_location_sharing">Platsdelning</string>
<string name="my_location_search_hint">Sök: Grupp och kontakt</string>
<string name="location_sharing_description">Välj de kontakter och grupper du vill dela din plats med.</string>
<string name="set_time">Ange tid</string>
<string name="set_time_description">Ställ in tiden att dina valda kontakter och grupper ska se din plats i realtid.</string>
<string name="visible_time_for_all">Synlig tid för alla</string>
<string name="shared_string_back">Bakåt</string>
<string name="shared_string_share">Dela</string>
<string name="shared_string_install">Installera</string>
<string name="hours_format">%1$d t</string>
<string name="minutes_format">%1$d m</string>
<string name="hours_and_minutes_format">%1$d t %2$d m</string>
<string name="set_visible_time_for_all">Ställ in synlig tid för alla</string>
<string name="enter_authentication_code">Ange autentiseringskod</string>
<string name="enter_phone_number">Skriv in telefonnummer</string>
<string name="do_not_have_telegram">Jag har inget Telegramkonto</string>
<string name="already_registered_in_telegram">Du behöver ett registrerat Telegramkonto och ett telefonnummer</string>
<string name="shared_string_off">Av</string>
<string name="shared_string_all">Alla</string>
<string name="get_telegram_after_creating_account">Efter det kan du använda denna app.</string>
<string name="get_telegram_description_continue">Installera Telegram och registrera ett konto.</string>
<string name="get_telegram_account_first">Du behöver ett Telegramkonto för att använda platsdelning.</string>
<string name="get_telegram_title">Registrering i Telegram</string>
<string name="shared_string_bot">Bot</string>
<string name="shared_string_live">Direkt</string>
<string name="open_osmand">Öppna OsmAnd</string>
<string name="turn_off_location_sharing">Stäng av platsdelning</string>
<string name="stop_sharing_all">Delning är påslagen (stäng av)</string>
<string name="expire_at">Går ut</string>
<string name="sharing_time">Delningstid</string>
<string name="gps_and_location">Plats</string>
<string name="send_my_location">Skicka min plats</string>
<string name="send_my_location_desc">Ställ in minsta intervall för platsdelning.</string>
<string name="stale_location">Ingen rörelse</string>
<string name="stale_location_desc">Senaste tid en kontakt rört sig.</string>
<string name="location_history">Platshistorik</string>
<string name="location_history_desc">Göm kontakter som inte har rört sig inom given tid.</string>
<string name="osmand_connect">Anslutning till OsmAnd</string>
<string name="osmand_connect_desc">Välj den OsmAnd-version som OsmAnd Tracker använder för att visa positioner.</string>
<string name="in_time">i %1$s</string>
<string name="shared_string_account">Konto</string>
<string name="connected_account">Anlutet konto</string>
<string name="logout_help_desc">Hur man stänger av OsmAnd Tracker från Telegram</string>
<string name="disconnect_from_telegram">Hur man stänger av OsmAnd Tracker från Telegram</string>
<string name="disconnect_from_telegram_desc">För att återkalla platsdelningsåtkomst. Öppna Telegram, gå till Inställningar → Sekretess och säkerhet → Sessioner och avsluta OsmAnd Tracker-sessionen.</string>
<string name="shared_string_close">Stäng</string>
<string name="logout_no_internet_msg">Anslut till internet för att logga ut ordentligt från Telegram.</string>
<string name="shared_string_group">Grupp</string>
<string name="last_response">Senaste svar</string>
<string name="time_ago">sedan</string>
<string name="shared_string_exit">Utgång</string>
<string name="turn_off_all">Stäng av allt</string>
<string name="disable_all_sharing">Inaktivera all delning</string>
<string name="disable_all_sharing_desc">Stäng av platsdelning i alla valda chatter (%1$d).</string>
<string name="choose_osmand">Välj OsmAnd version att använda</string>
<string name="choose_osmand_desc">Välj OsmAnd version där kontakter kommer att visas på kartan.</string>
<string name="shared_string_sort_by">Sortera efter</string>
<string name="shared_string_sort">Sortera</string>
<string name="by_group">Efter grupp</string>
<string name="by_name">Efter namn</string>
<string name="by_distance">Avstånd</string>
<string name="shared_string_name">Namn</string>
<string name="logout_from_osmand_telegram">Logga ut från OsmAnd Tracker\?</string>
<string name="logout_from_osmand_telegram_descr">Är du säker på att du vill logga ut från OsmAnd Tracker så att du inte kan dela plats eller se andras plats\?</string>
<string name="live_now_description">Kontakter och grupper delar plats med dig.</string>
<string name="share_location_as">Dela plats som</string>
<string name="add_device">Lägg till enhet</string>
<string name="shared_string_save">Spara</string>
<string name="shared_string_disable">Inaktivera</string>
<string name="no_internet_connection">Ingen internet-anslutning</string>
<string name="no_gps_connection">Ingen GPS-anslutning</string>
<string name="shared_string_status">Status</string>
<string name="shared_string_enabled">Aktiverat</string>
<string name="location_sharing_status">Delar: %1$s</string>
<string name="sharing_status">Delar status</string>
<string name="last_available_location">Senaste tillgängliga plats</string>
<string name="re_send_location">Skicka plats igen</string>
<string name="not_found_yet">Hittades inte än</string>
<string name="not_sent_yet">Inte skickat än</string>
<string name="shared_string_later">Senare</string>
<string name="go_to_settings">Gå till inställningar</string>
<string name="sharing_in_background">Delar i bakgrunden</string>
<string name="battery_optimization_description">Stäng av batterioptimering för OsmAnd Tracker så att den inte plötsligt stängs av i bakgrunden.</string>
<string name="background_work">Bakgrundsarbete</string>
<string name="background_work_description">Ändra batterioptimeringsinställningarna för att stabilisera platsdelning.</string>
<string name="connecting_to_the_internet">Ansluter till internet</string>
<string name="searching_for_gps">Positionering …</string>
<string name="initializing">Startar</string>
<string name="sending_location_messages">Skickar plats</string>
<string name="waiting_for_response_from_telegram">Väntar på svar från Telegram</string>
<string name="not_possible_to_send_to_telegram_chats">Inte möjligt att skicka till Telegram-chattar:</string>
<string name="successfully_sent_and_updated">Skickades och uppdaterades</string>
<string name="last_updated_location">Senast uppdaterad plats:</string>
<string name="share_location_as_description">Om du vill ansluta flera enheter till ett telegramkonto måste du använda olika enheter för att dela din plats.</string>
<string name="share_location_as_description_second_line">Du kan skapa och visa enhets-ID i Telegram-klienten genom att använda %1$s chatt-bot. %2$s</string>
<string name="shared_string_hide">Göm</string>
<string name="device_name">Enhetsnamn</string>
<string name="device_name_cannot_be_empty">Enhetsnamn kan inte vara tomt</string>
<string name="device_name_is_too_long">Enhetsnamn för långt</string>
<string name="enter_device_name_description">Namnge din nya enhet med max 200 symboler.</string>
<string name="error_adding_new_device">Kunde inte lägga till ny enhet</string>
<string name="shared_string_add">Lägg till</string>
<string name="device_added_successfully">%1$s tillagt.</string>
<string name="enter_another_device_name">Välj ett namn som du inte redan har använt</string>
<string name="last_update_from_telegram">Senaste uppdatering från Telegram</string>
<string name="map_and_text">Karta och text</string>
<string name="shared_string_text">Text</string>
<string name="shared_string_map">Karta</string>
<string name="send_location_as_descr">Välj hur meddelanden med din plats ska se ut.</string>
<string name="send_location_as">Skicka plats som</string>
<string name="start_date">Start datum</string>
<string name="end_date">Slutdatum</string>
<string name="open_in_osmand">Visa i OsmAnd</string>
<string name="average_speed">Genomsnittlig hastighet</string>
<string name="average_altitude">Genomsnittlig höjd</string>
<string name="time_on_the_move">Rörelse tid</string>
<string name="monitoring_is_disabled">Övervakning är inaktiverad</string>
<string name="monitoring_is_enabled">Övervakning är aktiverad</string>
<string name="shared_string_sent">Skickat</string>
<string name="gps_points">GPS-punkter</string>
<string name="shared_string_collected">Samlade</string>
<string name="shared_string_date">Datum</string>
<string name="points_size">%1$d punkter</string>
<string name="gps_points_in_buffer">skicka (%1$d i buffer)</string>
<string name="shared_string_update">Uppdatering</string>
<string name="please_update_osmand">var snäll uppdatera OsmAnd för att visa data på kartan</string>
<string name="show_gps_points_descr">Visa antal samlade och skickade GPS-punkter.</string>
<string name="show_gps_points">Visa GPS-punkter</string>
<string name="shared_string_appearance">Utseende</string>
<string name="received_gps_points">Fick GPX-punkter: %1$s</string>
<string name="how_it_works">Hur det fungerar</string>
<string name="osmand_privacy_policy">OsmAnd integritetspolicy</string>
<string name="telegram_privacy_policy">Telegram integritetspolicy</string>
<string name="shared_string_accept">Acceptera</string>
<string name="privacy_policy_agree">Genom att klicka på \"Fortsätt\" godkänner du villkoren i Telegram- och OsmAnds integritetspolicy.</string>
<string name="privacy_policy_telegram_client">OsmAnd tracker är en av klienterna som använder Telegram öppen plattform. Dina kontakter kan använda vilken Telegram-klient som helst.</string>
<string name="privacy_policy_use_telegram">Telegram (meddelandeappen) används för att ansluta och kommunicera med människor.</string>
<string name="shared_string_telegram">Telegram</string>
<string name="app_name_short">OsmAnd Tracker</string>
<string name="timeline_description">Aktivera övervakning för att spara alla platser i historiken.</string>
<string name="location_recording_enabled">Platsinspelning aktiverad</string>
<string name="disable_monitoring">Deaktivera övervakning</string>
<string name="timeline_available_for_free_now">Tidslinje är nu tillgängligt utan extra kostnad.</string>
<string name="shared_string_ok">OK</string>
<string name="shared_string_search">Sök</string>
<string name="type_contact_or_group_name">Skriv kontakt eller gruppnamn</string>
<string name="search_contacts_descr">Sök i alla dina grupper och kontakter.</string>
<string name="search_contacts">Sök kontakter</string>
<string name="bearing">Riktning</string>
<string name="altitude">Höjd över havet</string>
<string name="precision">Precision</string>
<string name="direction">Riktning</string>
<string name="privacy">Integritet</string>
<string name="proxy">Proxy</string>
<string name="proxy_settings">Proxy-inställningar</string>
<string name="proxy_disconnected">Frånkopplad</string>
<string name="proxy_connected">Ansluten</string>
<string name="proxy_type">Proxy-typ</string>
<string name="shared_string_enable">Aktivera</string>
<string name="shared_string_connection">Anslutning</string>
<string name="proxy_server">Server</string>
<string name="proxy_port">Port</string>
<string name="proxy_credentials">Referenser</string>
<string name="proxy_username">Användarnamn</string>
<string name="proxy_password">Lösenord</string>
<string name="proxy_key">Nyckel</string>
<string name="gpx_settings">GPX-inställningar</string>
<string name="min_logging_speed_descr">Filter: ingen loggning under valda hastigheten</string>
<string name="min_logging_speed">Minsta loggningshastighet</string>
<string name="min_logging_accuracy_descr">Filter: ingen loggning utan att nogranheten är nodd</string>
<string name="min_logging_accuracy">Minsta loggningsnoggrannhet</string>
<string name="min_logging_distance_descr">Filter: minsta avstånd för att logga en ny punkt</string>
<string name="min_logging_distance">Minsta loggningsavstånd</string>
<string name="shared_string_select">Välj</string>
<string name="timeline_no_data">Ingen data</string>
<string name="timeline_no_data_descr">Vi har inget sparad data för den valda dagen</string>
<string name="start_end_date">Start - Slut datum</string>
<string name="set_time_timeline_descr">Välj tid att visa</string>
<string name="shared_string_apply">Verkställ</string>
<string name="shared_string_start">Start</string>
<string name="shared_string_end">Slut</string>
<string name="saved_messages">Sparade meddelanden</string>
<string name="unit_of_speed_system">Enhet för hastighet</string>
<string name="unit_of_speed_system_descr">Definera enhet för hastighet.</string>
<string name="unit_of_length">Enhet för längd</string>
<string name="unit_of_length_descr">Ändra vad avstånd mäts i.</string>
<string name="units_and_formats">Enheter &amp; format</string>
<string name="time_zone">Tidszon</string>
<string name="time_zone_descr">Välj tidszon som ska visas i dina platsmeddelanden.</string>
<string name="buffer_time">Buffertens utgångstid</string>
<string name="buffer_time_descr">Maximal tid att lagra poäng i bufferten</string>
<string name="status_widget_title">OsmAnd Tracler status</string>
<string name="shared_string_suggested">Förslagen</string>
<string name="back_to_osmand">Tillbaka till OsmAnd</string>
<string name="duration_ago">%1$s sedan</string>
<string name="last_response_duration">Senaste svar: %1$s sedan</string>
<string name="last_update_from_telegram_duration">Senaste uppdatering från Telegram: %1$s sedan</string>
<string name="last_response_date">Senast response: %1$s</string>
<string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Export</string>
<string name="logcat_buffer">Logcat buffer</string>
<string name="logcat_buffer_descr">Kontrollera och dela detaljerade loggar för appen</string>
<string name="send_report">Skicka rapport</string>
</resources> </resources>

View file

@ -16,6 +16,7 @@
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
@ -1026,7 +1027,6 @@
</activity> </activity>
<activity android:name="net.osmand.plus.development.TestVoiceActivity" /> <activity android:name="net.osmand.plus.development.TestVoiceActivity" />
<activity android:name="net.osmand.plus.development.TestBackupActivity" />
<activity android:name="net.osmand.plus.development.LogcatActivity" /> <activity android:name="net.osmand.plus.development.LogcatActivity" />
<activity android:name="net.osmand.plus.download.DownloadActivity" android:label="" /> <activity android:name="net.osmand.plus.download.DownloadActivity" android:label="" />
@ -1065,7 +1065,7 @@
<activity android:name="net.osmand.plus.activities.PrintDialogActivity" /> <activity android:name="net.osmand.plus.activities.PrintDialogActivity" />
<activity android:name=".liveupdates.OsmLiveActivity" <activity android:name=".liveupdates.OsmLiveActivity"
android:label="@string/purchases"/> android:label="@string/osm_live"/>
<activity android:name=".wikivoyage.explore.WikivoyageExploreActivity"> <activity android:name=".wikivoyage.explore.WikivoyageExploreActivity">
<intent-filter> <intent-filter>

Binary file not shown.

View file

@ -109,9 +109,6 @@ android {
clean.doFirst { clean.doFirst {
delete fileTree('assets') { delete fileTree('assets') {
include '*.obf' include '*.obf'
include 'fonts/**'
include 'feature_articles/**'
include 'voice/**'
} }
} }
@ -348,7 +345,7 @@ dependencies {
implementation 'org.immutables:gson:2.5.0' implementation 'org.immutables:gson:2.5.0'
implementation 'com.vividsolutions:jts-core:1.14.0' implementation 'com.vividsolutions:jts-core:1.14.0'
implementation 'com.google.openlocationcode:openlocationcode:1.0.4' implementation 'com.google.openlocationcode:openlocationcode:1.0.4'
implementation 'com.android.billingclient:billing:3.0.2' implementation 'com.android.billingclient:billing:2.0.3'
// turn off for now // turn off for now
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0' //implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.squareup.picasso:picasso:2.71828'
@ -373,5 +370,4 @@ dependencies {
} }
implementation 'com.jaredrummler:colorpicker:1.1.0' implementation 'com.jaredrummler:colorpicker:1.1.0'
implementation 'org.bouncycastle:bcpkix-jdk15on:1.56' implementation 'org.bouncycastle:bcpkix-jdk15on:1.56'
implementation 'com.google.android.play:core:1.9.1'
} }

View file

@ -57,5 +57,5 @@ project.afterEvaluate {
} }
dependencies { dependencies {
implementation 'com.google.android.gms:play-services-location:18.0.0' implementation 'com.google.android.gms:play-services-location:17.1.0'
} }

View file

@ -36,9 +36,9 @@ android {
defaultConfig { defaultConfig {
minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15 minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15
versionCode 400 versionCode 390
versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
versionName "4.0.0" versionName "3.9.0"
versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName
versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName
} }
@ -187,6 +187,18 @@ dependencies {
opengldebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" opengldebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
openglImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar" openglImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
openglImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" openglImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
implementation ("com.getkeepsafe.taptargetview:taptargetview:1.12.0"){
exclude group: 'com.android.support'
}
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1'
implementation ("com.github.HITGIF:TextFieldBoxes:1.4.5"){
exclude group: 'com.android.support'
}
implementation('com.github.scribejava:scribejava-apis:7.1.1'){
exclude group: "com.fasterxml.jackson.core"
}
implementation 'com.jaredrummler:colorpicker:1.1.0'
implementation "org.bouncycastle:bcpkix-jdk15on:1.56"
huaweiImplementation 'com.huawei.hms:iap:5.0.2.300' huaweiImplementation 'com.huawei.hms:iap:5.0.2.300'

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/switch_button_active_light" />
<corners android:radius="4dp" />
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/osmand_live_active" />
<corners android:radius="26dp" />
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/osmand_live_cancelled" />
<corners android:radius="26dp" />
</shape>

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:angle="0"
android:startColor="@color/track_gradient_start"
android:centerColor="@color/track_gradient_center"
android:endColor="@color/track_gradient_end"
android:type="linear" />
</shape>
</item>
</selector>

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/switch_button_active_dark" />
<corners android:radius="4dp" />
</shape>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="4dp" />
<solid android:color="@color/switch_button_active_dark" />
</shape>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="4dp" />
<solid android:color="@color/switch_button_active_light" />
</shape>

View file

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,22C17.5228,22 22,17.5228 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12C2,17.5228 6.4771,22 12,22ZM11,14V7H13V14H11ZM11,18V16H13V18H11Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22H17V20H12C7.66,20 4,16.34 4,12C4,7.66 7.66,4 12,4C16.34,4 20,7.66 20,12V13.43C20,14.22 19.29,15 18.5,15C17.71,15 17,14.22 17,13.43V12C17,9.24 14.76,7 12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C13.38,17 14.64,16.44 15.54,15.53C16.19,16.42 17.31,17 18.5,17C20.47,17 22,15.4 22,13.43V12C22,6.48 17.52,2 12,2ZM12,15C10.34,15 9,13.66 9,12C9,10.34 10.34,9 12,9C13.66,9 15,10.34 15,12C15,13.66 13.66,15 12,15Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,18 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M20,12C20,15.4738 17.7859,18.4304 14.692,19.5358L14.9449,21.5593C19.0304,20.3022 22,16.4979 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12C2,16.4979 4.9696,20.3022 9.0551,21.5593L9.308,19.5358C6.2141,18.4304 4,15.4738 4,12C4,7.5817 7.5817,4 12,4C16.4183,4 20,7.5817 20,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M18,12C18,14.4466 16.5357,16.5511 14.4356,17.485L14.1701,15.3607C15.2713,14.6482 16,13.4092 16,12C16,9.7909 14.2091,8 12,8C9.7909,8 8,9.7909 8,12C8,13.4092 8.7287,14.6482 9.8299,15.3607L9.5644,17.485C7.4643,16.5511 6,14.4466 6,12C6,8.6863 8.6863,6 12,6C15.3137,6 18,8.6863 18,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M14,12C14,13.1046 13.1046,14 12,14C10.8954,14 10,13.1046 10,12C10,10.8954 10.8954,10 12,10C13.1046,10 14,10.8954 14,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M11,15V22H13V15H11Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,15 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M22.0001,12C22.0001,13.9623 21.4349,15.7926 20.4583,17.337L18.9991,15.8777C19.6369,14.7291 20.0001,13.407 20.0001,12C20.0001,7.5817 16.4183,4 12.0001,4C10.5931,4 9.271,4.3632 8.1223,5.0009L6.6631,3.5417C8.2075,2.5652 10.0378,2 12.0001,2C17.5229,2 22.0001,6.4771 22.0001,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M18.0001,12C18.0001,12.8478 17.8242,13.6545 17.507,14.3857L15.9203,12.7989C15.9726,12.5407 16.0001,12.2736 16.0001,12C16.0001,9.7909 14.2092,8 12.0001,8C11.7265,8 11.4593,8.0275 11.2012,8.0798L9.6144,6.493C10.3456,6.1758 11.1523,6 12.0001,6C15.3138,6 18.0001,8.6863 18.0001,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M14.3449,16.759L14.4357,17.485C14.5806,17.4206 14.7225,17.3506 14.8611,17.2752L16.3203,18.7344C15.8138,19.0599 15.2682,19.33 14.692,19.5358L14.945,21.5593C15.9623,21.2463 16.9105,20.7753 17.7609,20.1749L21.293,23.7071L22.7072,22.2928L2.7072,2.2929L1.293,3.7071L3.8251,6.2392C2.6754,7.8677 2.0001,9.855 2.0001,12C2.0001,16.4979 4.9696,20.3022 9.0552,21.5593L9.3081,19.5358C6.2141,18.4304 4.0001,15.4738 4.0001,12C4.0001,10.4087 4.4647,8.9258 5.2657,7.6798L6.7248,9.1389C6.2626,9.9894 6.0001,10.964 6.0001,12C6.0001,14.4466 7.4644,16.5511 9.5644,17.485L9.83,15.3607C8.7288,14.6482 8.0001,13.4092 8.0001,12C8.0001,11.5256 8.0826,11.0705 8.2342,10.6483L10.0555,12.4696C10.2305,13.197 10.8031,13.7695 11.5305,13.9446L12.5859,15H11.0001V22H13.0001V15.4142L14.3449,16.759Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,18V17.9725C3.75,17.7238 2,15.8163 2,13.5C2,11.0147 4.0147,9 6.5,9C6.5998,9 6.6989,9.0033 6.7971,9.0097C7.8332,7.2109 9.7752,6 12,6C15.3137,6 18,8.6863 18,12C18,12.0574 17.9992,12.1146 17.9976,12.1716C18.3111,12.0605 18.6485,12 19,12C20.6569,12 22,13.3431 22,15C22,16.6569 20.6569,18 19,18H6Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,17.9725V18H19C20.6569,18 22,16.6569 22,15C22,13.3431 20.6569,12 19,12C18.6485,12 18.3111,12.0605 17.9976,12.1716C17.9992,12.1146 18,12.0574 18,12C18,8.6863 15.3137,6 12,6C9.7752,6 7.8332,7.2109 6.7971,9.0097C6.6989,9.0033 6.5998,9 6.5,9C4.0147,9 2,11.0147 2,13.5C2,15.8163 3.75,17.7238 6,17.9725ZM11,13V8H13V13H11ZM11,17V15H13V17H11Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M14,18V15H16.5L12.5,10L8.5,15H11V18H6V17.9725C3.75,17.7238 2,15.8163 2,13.5C2,11.0147 4.0147,9 6.5,9C6.5998,9 6.6989,9.0033 6.7971,9.0097C7.8332,7.2109 9.7752,6 12,6C15.3137,6 18,8.6863 18,12C18,12.0574 17.9992,12.1146 17.9976,12.1716C18.3111,12.0605 18.6485,12 19,12C20.6569,12 22,13.3431 22,15C22,16.6569 20.6569,18 19,18H14Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,12 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,18V17.9725C3.75,17.7238 2,15.8163 2,13.5C2,11.0147 4.0147,9 6.5,9C6.5998,9 6.6989,9.0033 6.7971,9.0097C7.8332,7.2109 9.7752,6 12,6C15.3137,6 18,8.6863 18,12C18,12.0574 17.9992,12.1146 17.9976,12.1716C18.3111,12.0605 18.6485,12 19,12C20.6569,12 22,13.3431 22,15C22,16.6569 20.6569,18 19,18H6Z"
android:fillColor="#6C19FF"/>
<path
android:pathData="M11,15H8.5L12.5,9.5L16.5,15H14V20H11V15Z"
android:fillColor="#FFC30D"/>
</vector>

View file

@ -1,63 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M22,2V19C22,20.6569 20.6569,22 19,22H5C3.3431,22 2,20.6569 2,19V2H4V18H20V2H22Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M13,14.2C13,14.0895 13.0895,14 13.2,14H17.8C17.9105,14 18,14.0895 18,14.2V15.8C18,15.9105 17.9105,16 17.8,16H13.2C13.0895,16 13,15.9105 13,15.8V14.2Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M6,6H9V8H6V6Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M11,6H18V8H11V6Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M4,4H20V2H4V4Z"
android:strokeAlpha="0.7"
android:fillColor="#ffffff"
android:fillAlpha="0.7"/>
<path
android:pathData="M4,4H20V18H4V4Z"
android:strokeAlpha="0.1"
android:fillColor="#ffffff"
android:fillAlpha="0.1"/>
<path
android:pathData="M6,9H11V10H6V9Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M6,11H7V12H6V11Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M12,9H14V10H12V9Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M15,9H18V10H15V9Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M8,11H12V12H8V11Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M13,11H18V12H13V11Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M6.2,14C6.0895,14 6,14.0895 6,14.2V15.8C6,15.9105 6.0895,16 6.2,16H10.8C10.9105,16 11,15.9105 11,15.8V14.2C11,14.0895 10.9105,14 10.8,14H6.2Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
</vector>

View file

@ -1,30 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,2C4.8954,2 4,2.8954 4,4V20C4,21.1046 4.8954,22 6,22H18C19.1046,22 20,21.1046 20,20V8H16C14.8954,8 14,7.1046 14,6V2H6ZM9,9H7V11H9V9ZM7,13H9V15H7V13ZM7,17H9V19H7V17ZM11,11V9H17V11H11ZM17,15V13H11V15H17ZM17,19V17H11V19H17Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M14,2L20,8H16C14.8954,8 14,7.1046 14,6V2Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M17,9H11V11H17V9Z"
android:strokeAlpha="0.2"
android:fillColor="#ffffff"
android:fillAlpha="0.2"/>
<path
android:pathData="M11,13H17V15H11V13Z"
android:strokeAlpha="0.2"
android:fillColor="#ffffff"
android:fillAlpha="0.2"/>
<path
android:pathData="M11,17H17V19H11V17Z"
android:strokeAlpha="0.2"
android:fillColor="#ffffff"
android:fillAlpha="0.2"/>
</vector>

View file

@ -1,18 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2,12C2,16.9406 5.5829,21.0444 10.2922,21.8547C10.1025,21.2707 10,20.6473 10,20C10,17.913 11.0655,16.0749 12.6822,15L11.0001,15L11,11.9338L12.7455,10.8865C13.2136,10.6056 13.5,10.0998 13.5,9.554L13.5,9.25C13.5,8.5597 12.9403,8 12.25,8H12C11.4477,8 11,8.4477 11,9H9C9,7.3432 10.3431,6 12,6H12.25C14.0449,6 15.5,7.4551 15.5,9.25L15.5,9.554C15.4999,10.8024 14.845,11.9592 13.7745,12.6015L13,13.0662L13.0001,14.8027C13.8826,14.2922 14.9072,14 16,14H21.8C21.9311,13.3538 22,12.6849 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M16,16H17V18H16C14.8954,18 14,18.8954 14,20C14,21.1046 14.8954,22 16,22H17V24H16C13.7909,24 12,22.2091 12,20C12,17.7909 13.7909,16 16,16Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M20,22H19V24H20C22.2091,24 24,22.2091 24,20C24,17.7909 22.2091,16 20,16H19V18H20C21.1046,18 22,18.8954 22,20C22,21.1046 21.1046,22 20,22Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M16,20C16,19.4477 16.4477,19 17,19H19C19.5523,19 20,19.4477 20,20C20,20.5523 19.5523,21 19,21H17C16.4477,21 16,20.5523 16,20Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M8,5C8,3.8954 8.8954,3 10,3H14C15.1046,3 16,3.8954 16,5V8H20V19C20,20.1046 19.1046,21 18,21H6C4.8954,21 4,20.1046 4,19V8H8V5ZM14,5V8H10V5H14ZM10,18V11L15.5,14L10,18Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M10,3C8.8954,3 8,3.8954 8,5V8H4V19C4,20.1046 4.8954,21 6,21H18C19.1046,21 20,20.1046 20,19V8H16V5C16,3.8954 15.1046,3 14,3H10ZM14,8V5H10V8H14ZM6,10H18V19H6V10Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,15 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M14,2L20,8H16C14.8954,8 14,7.1046 14,6V2Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M4,4C4,2.8954 4.8954,2 6,2H14V6C14,7.1046 14.8954,8 16,8H20V20C20,21.1046 19.1046,22 18,22H6C4.8954,22 4,21.1046 4,20V4ZM11,18H13V13H15L12,9L9,13H11V18Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,37 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,5C12.5523,5 13,4.5523 13,4H17V8.0549C16.6717,8.0186 16.338,8 16,8C11.0294,8 7,12.0294 7,17V4H11C11,4.5523 11.4477,5 12,5Z"
android:strokeAlpha="0.3"
android:fillColor="#ffffff"
android:fillAlpha="0.3"/>
<path
android:pathData="M7,17C7,18.0519 7.1805,19.0617 7.5121,20H7V17Z"
android:strokeAlpha="0.3"
android:fillColor="#ffffff"
android:fillAlpha="0.3"/>
<path
android:pathData="M17,2.01L7,2C5.9,2 5,2.9 5,4V20C5,21.1 5.9,22 7,22H8.5155C8.1025,21.383 7.7638,20.7121 7.5121,20H7V4H11C11,4.5523 11.4477,5 12,5C12.5523,5 13,4.5523 13,4H17V8.0549C17.6935,8.1316 18.3632,8.287 19,8.5121V4C19,2.9 18.1,2.01 17,2.01Z"
android:strokeAlpha="0.7"
android:fillColor="#ffffff"
android:fillAlpha="0.7"/>
<path
android:pathData="M16,21C18.2091,21 20,19.2091 20,17C20,14.7909 18.2091,13 16,13C13.7909,13 12,14.7909 12,17H14L11,20L8,17H10C10,13.6863 12.6863,11 16,11C19.3137,11 22,13.6863 22,17C22,20.3137 19.3137,23 16,23C14.598,23 13.3082,22.5191 12.2868,21.7132L13.7159,20.2841C14.3635,20.7354 15.1508,21 16,21Z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="6.36396"
android:centerX="16"
android:centerY="17"
android:type="radial">
<item android:offset="0" android:color="#FFFFFFFF"/>
<item android:offset="0.8125" android:color="#FFFFFFFF"/>
<item android:offset="1" android:color="#00FFFFFF"/>
</gradient>
</aapt:attr>
</path>
</vector>

View file

@ -1,12 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,0.9999L16,4.9999L12,8.9999L12,6C8.6863,6 6,8.6863 6,12C6,12.7351 6.1322,13.4394 6.3741,14.0903L4.8574,15.6071C4.309,14.5232 4,13.2977 4,12C4,7.5817 7.5817,4 12,4V0.9999Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M12,15.0001L12,18C15.3137,18 18,15.3137 18,12C18,11.2649 17.8678,10.5606 17.6258,9.9097L19.1426,8.3929C19.691,9.4768 20,10.7023 20,12C20,16.4183 16.4183,20 12,20V23.0001L8,19.0001L12,15.0001Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -1,15 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,3C4.8954,3 4,3.8954 4,5V7H20C20,5.8954 19.1046,5 18,5H13L11.4,3H6Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M2,7C2,5.8954 2.8954,5 4,5H10L12,7H20C21.1046,7 22,7.8954 22,9V19C22,20.1046 21.1046,21 20,21H4C2.8954,21 2,20.1046 2,19V7ZM17,12C17,13.1046 16.1046,14 15,14C13.8954,14 13,13.1046 13,12C13,10.8954 13.8954,10 15,10C16.1046,10 17,10.8954 17,12ZM10,17.5V19H20V17.5C20,15.5 17,15 15,15C13,15 10,15.5 10,17.5Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,7 +0,0 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:bottomLeftRadius="@dimen/list_item_button_padding"
android:topLeftRadius="@dimen/list_item_button_padding" />
<solid android:color="@color/list_background_color_dark" />
</shape>

View file

@ -1,11 +0,0 @@
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/active_buttons_and_links_trans_light">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<corners
android:bottomLeftRadius="@dimen/list_item_button_padding"
android:topLeftRadius="@dimen/list_item_button_padding" />
<solid android:color="@color/active_color_primary_light" />
</shape>
</item>
</ripple>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/background">
<shape android:shape="rectangle">
<solid android:color="#4d007eb3" />
<corners android:radius="30dp" />
</shape>
</item>
<item android:id="@+id/progress">
<shape android:shape="rectangle">
<solid android:color="@color/color_white" />
<corners android:radius="30dp" />
</shape>
</item>
</layer-list>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<item android:id="@+id/thump">
<shape android:shape="oval">
<size
android:width="12dp"
android:height="12dp" />
<solid android:color="@color/profile_icon_color_blue_light" />
</shape>
</item>
</layer-list>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="2dp"
android:height="2dp" />
<solid android:color="#17181A" />
</shape>

View file

@ -9,8 +9,8 @@
<gradient <gradient
android:angle="90" android:angle="90"
android:startColor="#1A000000" android:startColor="#1A000000"
android:centerColor="#00000000" android:centerColor="#00FFFFFF"
android:endColor="#00000000" /> android:endColor="#00FFFFFF" />
</shape> </shape>
</item> </item>
@ -23,8 +23,8 @@
<gradient <gradient
android:angle="90" android:angle="90"
android:startColor="#0D000000" android:startColor="#0D000000"
android:centerColor="#00000000" android:centerColor="#00FFFFFF"
android:endColor="#00000000" /> android:endColor="#00FFFFFF" />
</shape> </shape>
</item> </item>

View file

@ -50,7 +50,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="start" android:layout_gravity="start"
android:layout_marginTop="@dimen/dashboard_map_toolbar" android:layout_marginTop="@dimen/dashboard_map_toolbar"
android:background="?attr/activity_background_basic"
android:visibility="gone"> android:visibility="gone">
<net.osmand.plus.views.controls.DynamicListView <net.osmand.plus.views.controls.DynamicListView

View file

@ -16,16 +16,7 @@
android:focusable="true" android:focusable="true"
android:orientation="vertical" android:orientation="vertical"
android:clickable="true" android:clickable="true"
tools:ignore="UselessParent"> tools:background="@drawable/bg_bottom_menu_dark">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@drawable/bg_contextmenu_shadow_top_light" />
<ProgressBar <ProgressBar
android:id="@+id/snap_to_road_progress_bar" android:id="@+id/snap_to_road_progress_bar"
@ -33,17 +24,12 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="0dp" android:minHeight="0dp"
android:background="?attr/list_background_color" android:visibility="gone"
android:visibility="invisible"
tools:visibility="visible" /> tools:visibility="visible" />
</FrameLayout>
<LinearLayout <LinearLayout
android:id="@+id/main_content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:background="?attr/list_background_color">
<RelativeLayout <RelativeLayout
android:id="@+id/up_down_row" android:id="@+id/up_down_row"
@ -67,19 +53,6 @@
android:background="@null" android:background="@null"
tools:src="@drawable/ic_action_ruler"/> tools:src="@drawable/ic_action_ruler"/>
<include
layout="@layout/custom_icon_radio_buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/content_padding_half"
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
android:layout_marginRight="@dimen/content_padding_half"
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
android:background="@null" />
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/up_down_button" android:id="@+id/up_down_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -92,7 +65,6 @@
android:layout_marginRight="@dimen/bottom_sheet_content_margin" android:layout_marginRight="@dimen/bottom_sheet_content_margin"
android:layout_marginStart="@dimen/bottom_sheet_content_margin" android:layout_marginStart="@dimen/bottom_sheet_content_margin"
android:background="@null" android:background="@null"
android:visibility="gone"
tools:src="@drawable/ic_action_arrow_down"/> tools:src="@drawable/ic_action_arrow_down"/>
<TextView <TextView
@ -188,9 +160,7 @@
android:paddingRight="@dimen/measurement_tool_text_button_padding_small" android:paddingRight="@dimen/measurement_tool_text_button_padding_small"
android:text="@string/shared_string_options" android:text="@string/shared_string_options"
android:textColor="?attr/color_dialog_buttons" android:textColor="?attr/color_dialog_buttons"
osmand:typeface="@string/font_roboto_medium" osmand:typeface="@string/font_roboto_medium" />
android:paddingEnd="@dimen/measurement_tool_text_button_padding_small"
android:paddingStart="@dimen/measurement_tool_text_button_padding_small" />
<RelativeLayout <RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -225,13 +195,11 @@
<include <include
android:id="@+id/add_point_button" android:id="@+id/add_point_button"
layout="@layout/bottom_sheet_dialog_button" layout="@layout/bottom_sheet_dialog_button"
android:layout_width="wrap_content" android:layout_width="@dimen/measurement_tool_button_width"
android:layout_height="@dimen/measurement_tool_button_height" android:layout_height="@dimen/measurement_tool_button_height"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:minWidth="@dimen/measurement_tool_button_width" /> android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@ -243,15 +211,14 @@
<include <include
android:id="@+id/apply_move_point_button" android:id="@+id/apply_move_point_button"
layout="@layout/bottom_sheet_dialog_button"
android:layout_width="wrap_content"
android:layout_height="@dimen/measurement_tool_button_height" android:layout_height="@dimen/measurement_tool_button_height"
android:layout_width="@dimen/measurement_tool_button_width"
android:layout_marginEnd="@dimen/measurement_tool_button_margin"
android:layout_marginRight="@dimen/measurement_tool_button_margin"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/measurement_tool_button_margin" layout="@layout/bottom_sheet_dialog_button" />
android:layout_marginRight="@dimen/measurement_tool_button_margin"
android:minWidth="@dimen/measurement_tool_button_width" />
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx

View file

@ -659,7 +659,6 @@
<!-- CENTER --> <!-- CENTER -->
<FrameLayout <FrameLayout
android:id="@+id/top_controls_container"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:layout_marginRight="-8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="-8dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:scaleType="centerInside"
android:duplicateParentState="true"/>

View file

@ -17,9 +17,7 @@
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding"
android:layout_marginBottom="@dimen/content_padding_small" android:layout_marginBottom="@dimen/content_padding_small"
android:tint="?attr/default_icon_color" android:tint="?attr/default_icon_color"
osmand:srcCompat="@drawable/ic_action_user_account" osmand:srcCompat="@drawable/ic_action_user_account" />
android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -28,9 +26,7 @@
android:layout_marginTop="@dimen/subHeaderPadding" android:layout_marginTop="@dimen/subHeaderPadding"
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding"
android:layout_marginBottom="@dimen/subHeaderPadding" android:layout_marginBottom="@dimen/subHeaderPadding"
android:orientation="vertical" android:orientation="vertical">
android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/account_title" android:id="@+id/account_title"

View file

@ -1,87 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:osmand="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:focusable="true"
android:focusableInTouchMode="true" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/name_text_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/favorite_category_name"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
app:startIconDrawable="@drawable/ic_action_folder"
app:boxBackgroundColor="?attr/text_input_background"
app:boxStrokeColor="@color/osmand_orange"
app:hintTextColor="@color/text_color_secondary_light">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences"
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" />
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<net.osmand.plus.widgets.TextViewEx
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:letterSpacing="@dimen/description_letter_spacing"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/context_menu_first_line_top_margin"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
android:text="@string/select_color"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_medium"
android:paddingEnd="@dimen/content_padding"
android:paddingStart="@dimen/content_padding" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/color_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:letterSpacing="@dimen/description_letter_spacing"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/context_menu_first_line_top_margin"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
android:text="@string/select_color"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_medium"
android:paddingStart="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding" />
</LinearLayout>
<LinearLayout
android:id="@+id/select_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/content_padding_small"
android:layout_marginLeft="@dimen/content_padding_small"
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
android:layout_marginBottom="@dimen/content_padding_half"
android:orientation="horizontal" />
</LinearLayout>

View file

@ -86,8 +86,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding_small" android:layout_marginLeft="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding_small" android:layout_marginRight="@dimen/content_padding_small"
android:paddingBottom="@dimen/content_padding" android:paddingBottom="@dimen/content_padding" />
android:layout_marginStart="@dimen/content_padding_small"
android:layout_marginEnd="@dimen/content_padding_small" />
</LinearLayout> </LinearLayout>

View file

@ -62,12 +62,18 @@
osmand:typeface="@string/font_roboto_medium" osmand:typeface="@string/font_roboto_medium"
tools:text="Normal" /> tools:text="Normal" />
<com.google.android.material.slider.Slider <SeekBar
android:id="@+id/arrival_slider" android:id="@+id/seek_bar_arrival"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding" android:layout_marginTop="@dimen/pages_item_margin"
android:layout_marginRight="@dimen/content_padding" /> android:maxHeight="2dp"
android:paddingTop="11dp"
android:paddingBottom="11dp"
osmand:tickMark="@drawable/seekbar_tickmark_announcement_time"
tools:max="3"
tools:progress="1" />
<View <View
android:id="@+id/divider" android:id="@+id/divider"

View file

@ -3,13 +3,14 @@
xmlns:osmand="http://schemas.android.com/apk/res-auto" xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
tools:background="@drawable/btn_background_inactive_dark">
<LinearLayout <LinearLayout
android:id="@+id/button_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/selectableItemBackground" android:clickable="true"
android:focusable="true"
android:gravity="center_vertical" android:gravity="center_vertical"
android:minHeight="@dimen/bottom_sheet_list_item_height" android:minHeight="@dimen/bottom_sheet_list_item_height"
android:orientation="horizontal" android:orientation="horizontal"
@ -19,6 +20,7 @@
android:paddingEnd="@dimen/content_padding_small" android:paddingEnd="@dimen/content_padding_small"
android:paddingRight="@dimen/content_padding_small" android:paddingRight="@dimen/content_padding_small"
android:paddingBottom="@dimen/text_margin_small" android:paddingBottom="@dimen/text_margin_small"
tools:background="@drawable/btn_background_inactive_dark"
tools:ignore="UselessParent"> tools:ignore="UselessParent">
<LinearLayout <LinearLayout

View file

@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_button_height"
android:layout_marginStart="@dimen/content_padding"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:orientation="vertical">
<LinearLayout
android:id="@+id/button_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:gravity="center"
android:orientation="horizontal"
tools:ignore="UselessParent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/button_icon"
android:layout_width="@dimen/map_widget_icon"
android:layout_height="@dimen/map_widget_icon"
android:layout_marginEnd="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding_small"
android:tint="?attr/active_color_basic"
tools:srcCompat="@drawable/ic_action_appearance" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/button_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/context_menu_controller_height"
android:layout_marginRight="@dimen/context_menu_controller_height"
android:letterSpacing="@dimen/description_letter_spacing"
android:textColor="?attr/active_color_basic"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_medium"
tools:text="Button" />
</LinearLayout>
</LinearLayout>

View file

@ -8,9 +8,7 @@
android:paddingBottom="@dimen/content_padding_small" android:paddingBottom="@dimen/content_padding_small"
android:minHeight="@dimen/card_row_min_height" android:minHeight="@dimen/card_row_min_height"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:paddingEnd="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<TextView <TextView
android:id="@+id/description" android:id="@+id/description"

View file

@ -57,9 +57,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/content_padding_half" android:layout_marginTop="@dimen/content_padding_half"
android:layout_marginLeft="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding">
android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding">
<LinearLayout <LinearLayout
android:id="@+id/text" android:id="@+id/text"

View file

@ -13,11 +13,11 @@
android:layout_marginEnd="@dimen/content_padding" android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding"
android:minHeight="@dimen/bottom_sheet_list_item_height" android:minHeight="@dimen/bottom_sheet_list_item_height"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
tools:background="@drawable/rectangle_rounded_right"> tools:background="@drawable/rectangle_rounded_right"
android:paddingEnd="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/title" android:id="@+id/title"
@ -41,8 +41,7 @@
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:focusable="false" android:focusable="false"
android:focusableInTouchMode="false" android:focusableInTouchMode="false" />
android:saveEnabled="false" />
</LinearLayout> </LinearLayout>

View file

@ -7,6 +7,4 @@
android:paddingLeft="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:paddingTop="@dimen/content_padding_small" android:paddingTop="@dimen/content_padding_small"
android:paddingBottom="@dimen/content_padding_small" android:paddingBottom="@dimen/content_padding_small" />
android:paddingEnd="@dimen/content_padding"
android:paddingStart="@dimen/content_padding" />

View file

@ -11,9 +11,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"
android:paddingLeft="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding">
android:paddingStart="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@android:id/title" android:id="@android:id/title"
@ -45,8 +43,6 @@
android:layout_marginLeft="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content" />
android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding" />
</LinearLayout> </LinearLayout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_large_list_item_height" android:layout_height="@dimen/bottom_sheet_large_list_item_height"
@ -7,7 +8,6 @@
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
android:id="@+id/descriptionContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_large_list_item_height" android:layout_height="@dimen/bottom_sheet_large_list_item_height"
android:gravity="center_vertical" android:gravity="center_vertical"

View file

@ -1,15 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:gravity="center_vertical" android:gravity="center_vertical"
android:minHeight="@dimen/bottom_sheet_selected_item_title_height" android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"> android:paddingStart="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon" android:id="@+id/icon"
@ -52,12 +53,11 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
android:layout_marginLeft="@dimen/bottom_sheet_content_margin" android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:focusable="false" android:focusable="false"
android:focusableInTouchMode="false" android:focusableInTouchMode="false"/>
android:saveEnabled="false" />
</LinearLayout> </LinearLayout>

View file

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/title"
style="@style/TextAppearance.ListItemTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
tools:text="Some title" />
<TextView
android:id="@+id/description"
style="@style/TextAppearance.ContextMenuSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:letterSpacing="@dimen/description_letter_spacing"
android:maxLines="1"
tools:text="Some description" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon"
android:layout_width="@dimen/standard_icon_size"
android:layout_height="@dimen/standard_icon_size"
android:layout_gravity="center_vertical"
tools:src="@drawable/list_destination" />
</LinearLayout>

View file

@ -90,9 +90,7 @@
android:paddingLeft="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent">
android:paddingEnd="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/end_button_icon" android:id="@+id/end_button_icon"

View file

@ -90,9 +90,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginLeft="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding"
tools:src="@drawable/ic_action_info_dark" tools:src="@drawable/ic_action_info_dark" />
android:layout_marginEnd="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding" />
</LinearLayout> </LinearLayout>

Some files were not shown because too many files have changed in this diff Show more