Compare commits
2 commits
master
...
refactorMa
Author | SHA1 | Date | |
---|---|---|---|
|
51857e827e | ||
|
beb8058495 |
696 changed files with 14347 additions and 42028 deletions
|
@ -17,7 +17,6 @@ package com.jwetherell.openmap.common;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class MGRSPoint extends ZonedUTMPoint {
|
||||
|
||||
|
@ -698,9 +697,10 @@ public class MGRSPoint extends ZonedUTMPoint {
|
|||
all.set(1, shiftChar(all.get(1), eastShift, northShift));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ import net.osmand.binary.StringBundle;
|
|||
import net.osmand.binary.StringBundleWriter;
|
||||
import net.osmand.binary.StringBundleXmlWriter;
|
||||
import net.osmand.data.QuadRect;
|
||||
import net.osmand.router.RouteColorize.ColorizationType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -228,9 +227,6 @@ public class GPXUtilities {
|
|||
public double hdop = Double.NaN;
|
||||
public float heading = Float.NaN;
|
||||
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 double distance = 0.0; // cumulative distance, if in a track
|
||||
|
||||
|
@ -253,9 +249,6 @@ public class GPXUtilities {
|
|||
this.hdop = wptPt.hdop;
|
||||
this.heading = wptPt.heading;
|
||||
this.deleted = wptPt.deleted;
|
||||
this.speedColor = wptPt.speedColor;
|
||||
this.altitudeColor = wptPt.altitudeColor;
|
||||
this.slopeColor = wptPt.slopeColor;
|
||||
this.colourARGB = wptPt.colourARGB;
|
||||
this.distance = wptPt.distance;
|
||||
}
|
||||
|
@ -318,26 +311,6 @@ public class GPXUtilities {
|
|||
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() {
|
||||
return getExtensionsToRead().get(BACKGROUND_TYPE_EXTENSION);
|
||||
}
|
||||
|
@ -1113,15 +1086,6 @@ public class GPXUtilities {
|
|||
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) {
|
||||
for (int i = startIndex; i < pts.size(); i++) {
|
||||
WptPt pt = pts.get(i);
|
||||
|
@ -1698,16 +1662,16 @@ public class GPXUtilities {
|
|||
return new QuadRect(left, top, right, bottom);
|
||||
}
|
||||
|
||||
public int[] getGradientScaleColor(String gradientScaleType) {
|
||||
public int getGradientScaleColor(String gradientScaleType, int defColor) {
|
||||
String clrValue = null;
|
||||
if (extensions != null) {
|
||||
clrValue = extensions.get(gradientScaleType);
|
||||
}
|
||||
return Algorithms.stringToGradientPalette(clrValue);
|
||||
return parseColor(clrValue, defColor);
|
||||
}
|
||||
|
||||
public void setGradientScaleColor(String gradientScaleType, int[] gradientScalePalette) {
|
||||
getExtensionsToWrite().put(gradientScaleType, Algorithms.gradientPaletteToString(gradientScalePalette));
|
||||
public void setGradientScaleColor(String gradientScaleType, int gradientScaleColor) {
|
||||
getExtensionsToWrite().put(gradientScaleType, Algorithms.colorToString(gradientScaleColor));
|
||||
}
|
||||
|
||||
public String getGradientScaleType() {
|
||||
|
|
|
@ -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_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_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_FEET_MAP_INDEX_EXT_ZIP = ".srtmf.obf.zip"; //$NON-NLS-1$
|
||||
public static final String EXTRA_EXT = ".extra";
|
||||
public static final String EXTRA_ZIP_EXT = ".extra.zip";
|
||||
|
||||
|
|
|
@ -1,23 +1,20 @@
|
|||
package net.osmand;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Calendar;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Period {
|
||||
|
||||
public enum PeriodUnit {
|
||||
YEAR("Y", Calendar.YEAR),
|
||||
MONTH("M", Calendar.MONTH),
|
||||
WEEK("W", Calendar.WEEK_OF_YEAR),
|
||||
DAY("D", Calendar.DATE);
|
||||
YEAR("Y"),
|
||||
MONTH("M"),
|
||||
WEEK("W"),
|
||||
DAY("D");
|
||||
|
||||
private String unitStr;
|
||||
private int calendarIdx;
|
||||
|
||||
PeriodUnit(String unitStr, int calendarIdx) {
|
||||
this.calendarIdx = calendarIdx;
|
||||
PeriodUnit(String unitStr) {
|
||||
this.unitStr = unitStr;
|
||||
}
|
||||
|
||||
|
@ -25,10 +22,6 @@ public class Period {
|
|||
return unitStr;
|
||||
}
|
||||
|
||||
public int getCalendarIdx() {
|
||||
return calendarIdx;
|
||||
}
|
||||
|
||||
public double getMonthsValue() {
|
||||
switch (this) {
|
||||
case YEAR:
|
||||
|
|
|
@ -1,9 +1,25 @@
|
|||
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.InvalidProtocolBufferException;
|
||||
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.ResultMatcher;
|
||||
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
|
||||
|
@ -18,23 +34,6 @@ import net.osmand.util.Algorithms;
|
|||
import net.osmand.util.MapUtils;
|
||||
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 {
|
||||
protected static final Log LOG = PlatformUtil.getLog(BinaryMapRouteReaderAdapter.class);
|
||||
private static final int SHIFT_COORDINATES = 4;
|
||||
|
@ -304,7 +303,6 @@ public class BinaryMapRouteReaderAdapter {
|
|||
public int directionTrafficSignalsBackward = -1;
|
||||
public int trafficSignals = -1;
|
||||
public int stopSign = -1;
|
||||
public int stopMinor = -1;
|
||||
public int giveWaySign = -1;
|
||||
|
||||
int nameTypeRule = -1;
|
||||
|
@ -365,8 +363,6 @@ public class BinaryMapRouteReaderAdapter {
|
|||
destinationRefTypeRule = id;
|
||||
} else if (tags.equals("highway") && val.equals("traffic_signals")){
|
||||
trafficSignals = id;
|
||||
} else if (tags.equals("stop") && val.equals("minor")) {
|
||||
stopMinor = id;
|
||||
} else if (tags.equals("highway") && val.equals("stop")){
|
||||
stopSign = id;
|
||||
} else if (tags.equals("highway") && val.equals("give_way")){
|
||||
|
|
|
@ -282,12 +282,10 @@ public class GeocodingUtilities {
|
|||
} else {
|
||||
Collections.sort(streetsList, DISTANCE_COMPARATOR);
|
||||
double streetDistance = 0;
|
||||
boolean isBuildingFound = knownMinBuildingDistance > 0;
|
||||
for (GeocodingResult street : streetsList) {
|
||||
if (streetDistance == 0) {
|
||||
streetDistance = street.getDistance();
|
||||
} else if (streetDistance > 0 && street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME &&
|
||||
isBuildingFound) {
|
||||
} else if (street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME) {
|
||||
continue;
|
||||
}
|
||||
street.connectionPoint = road.connectionPoint;
|
||||
|
@ -298,7 +296,6 @@ public class GeocodingUtilities {
|
|||
if (knownMinBuildingDistance == 0) {
|
||||
GeocodingResult firstBld = it.next();
|
||||
knownMinBuildingDistance = firstBld.getDistance();
|
||||
isBuildingFound = true;
|
||||
res.add(firstBld);
|
||||
}
|
||||
while (it.hasNext()) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import net.osmand.Location;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
import net.osmand.util.TransliterationHelper;
|
||||
|
@ -38,9 +37,7 @@ public class RouteDataObject {
|
|||
public int[] nameIds;
|
||||
// mixed array [0, height, cumulative_distance height, cumulative_distance, height, ...] - length is length(points)*2
|
||||
public float[] heightDistanceArray = null;
|
||||
public float heightByCurrentLocation = Float.NaN;
|
||||
private static final Log LOG = PlatformUtil.getLog(RouteDataObject.class);
|
||||
|
||||
public RouteDataObject(RouteRegion region) {
|
||||
this.region = region;
|
||||
}
|
||||
|
@ -127,7 +124,7 @@ public class RouteDataObject {
|
|||
equals = this.pointTypes[i] == thatObj.pointTypes[i];
|
||||
} else if (pointTypes[i].length != thatObj.pointTypes[i].length) {
|
||||
equals = false;
|
||||
} else {
|
||||
} else {
|
||||
for (int j = 0; j < this.pointTypes[i].length && equals; j++) {
|
||||
String thisTag = region.routeEncodingRules.get(pointTypes[i][j]).getTag();
|
||||
String thisValue = region.routeEncodingRules.get(pointTypes[i][j]).getValue();
|
||||
|
@ -150,7 +147,7 @@ public class RouteDataObject {
|
|||
equals = this.pointNameTypes[i] == thatObj.pointNameTypes[i];
|
||||
} else if (pointNameTypes[i].length != thatObj.pointNameTypes[i].length) {
|
||||
equals = false;
|
||||
} else {
|
||||
} else {
|
||||
for (int j = 0; j < this.pointNameTypes[i].length && equals; j++) {
|
||||
String thisTag = region.routeEncodingRules.get(pointNameTypes[i][j]).getTag();
|
||||
String thisValue = pointNames[i][j];
|
||||
|
@ -168,68 +165,53 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public float[] calculateHeightArray() {
|
||||
return calculateHeightArray(null);
|
||||
}
|
||||
|
||||
public float[] calculateHeightArray(LatLon currentLocation) {
|
||||
if (heightDistanceArray != null) {
|
||||
if(heightDistanceArray != null) {
|
||||
return heightDistanceArray;
|
||||
}
|
||||
int startHeight = Algorithms.parseIntSilently(getValue("osmand_ele_start"), HEIGHT_UNDEFINED);
|
||||
int endHeight = Algorithms.parseIntSilently(getValue("osmand_ele_end"), startHeight);
|
||||
if (startHeight == HEIGHT_UNDEFINED) {
|
||||
if(startHeight == HEIGHT_UNDEFINED) {
|
||||
heightDistanceArray = new float[0];
|
||||
return heightDistanceArray;
|
||||
}
|
||||
|
||||
heightDistanceArray = new float[2 * getPointsLength()];
|
||||
heightDistanceArray = new float[2*getPointsLength()];
|
||||
double plon = 0;
|
||||
double plat = 0;
|
||||
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 lat = MapUtils.get31LatitudeY(getPoint31YTile(k));
|
||||
if (k > 0) {
|
||||
if(k > 0) {
|
||||
double dd = MapUtils.getDistance(plat, plon, lat, lon);
|
||||
float height = HEIGHT_UNDEFINED;
|
||||
if (k == getPointsLength() - 1) {
|
||||
if(k == getPointsLength() - 1) {
|
||||
height = endHeight;
|
||||
} else {
|
||||
String asc = getValue(k, "osmand_ele_asc");
|
||||
if (asc != null && asc.length() > 0) {
|
||||
if(asc != null && asc.length() > 0) {
|
||||
height = (prevHeight + Float.parseFloat(asc));
|
||||
} else {
|
||||
String desc = getValue(k, "osmand_ele_desc");
|
||||
if (desc != null && desc.length() > 0) {
|
||||
if(desc != null && desc.length() > 0) {
|
||||
height = (prevHeight - Float.parseFloat(desc));
|
||||
}
|
||||
}
|
||||
}
|
||||
heightDistanceArray[2 * k] = (float) dd;
|
||||
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) {
|
||||
heightDistanceArray[2*k] = (float) dd;
|
||||
heightDistanceArray[2*k+1] = height;
|
||||
if(height != HEIGHT_UNDEFINED) {
|
||||
// interpolate undefined
|
||||
double totalDistance = dd;
|
||||
int startUndefined = k;
|
||||
while (startUndefined - 1 >= 0 && heightDistanceArray[2 * (startUndefined - 1) + 1] == HEIGHT_UNDEFINED) {
|
||||
startUndefined--;
|
||||
totalDistance += heightDistanceArray[2 * (startUndefined)];
|
||||
while(startUndefined - 1 >= 0 && heightDistanceArray[2*(startUndefined - 1)+1] == HEIGHT_UNDEFINED) {
|
||||
startUndefined --;
|
||||
totalDistance += heightDistanceArray[2*(startUndefined)];
|
||||
}
|
||||
if (totalDistance > 0) {
|
||||
if(totalDistance > 0) {
|
||||
double angle = (height - prevHeight) / totalDistance;
|
||||
for (int j = startUndefined; j < k; j++) {
|
||||
heightDistanceArray[2 * j + 1] = (float) ((heightDistanceArray[2 * j] * angle) + heightDistanceArray[2 * j - 1]);
|
||||
for(int j = startUndefined; j < k; j++) {
|
||||
heightDistanceArray[2*j+1] = (float) ((heightDistanceArray[2*j] * angle) + heightDistanceArray[2*j-1]);
|
||||
}
|
||||
}
|
||||
prevHeight = height;
|
||||
|
@ -241,9 +223,6 @@ public class RouteDataObject {
|
|||
}
|
||||
plat = lat;
|
||||
plon = lon;
|
||||
if (currentLocation != null) {
|
||||
prevDistance = MapUtils.getDistance(currentLocation, plat, plon);
|
||||
}
|
||||
}
|
||||
return heightDistanceArray;
|
||||
}
|
||||
|
@ -252,34 +231,34 @@ public class RouteDataObject {
|
|||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
if (names != null) {
|
||||
public String getName(){
|
||||
if(names != null ) {
|
||||
return names.get(region.nameTypeRule);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public String getName(String lang) {
|
||||
public String getName(String lang){
|
||||
return getName(lang, false);
|
||||
}
|
||||
|
||||
public String getName(String lang, boolean transliterate) {
|
||||
if (names != null) {
|
||||
if (Algorithms.isEmpty(lang)) {
|
||||
public String getName(String lang, boolean transliterate){
|
||||
if(names != null ) {
|
||||
if(Algorithms.isEmpty(lang)) {
|
||||
return names.get(region.nameTypeRule);
|
||||
}
|
||||
int[] kt = names.keys();
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (("name:" + lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(("name:"+lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
String nmDef = names.get(region.nameTypeRule);
|
||||
if (transliterate && nmDef != null && nmDef.length() > 0) {
|
||||
if(transliterate && nmDef != null && nmDef.length() > 0) {
|
||||
return TransliterationHelper.transliterate(nmDef);
|
||||
}
|
||||
return nmDef;
|
||||
|
@ -300,20 +279,20 @@ public class RouteDataObject {
|
|||
// return getDestinationRef(direction);
|
||||
//}
|
||||
if (names != null) {
|
||||
if (Algorithms.isEmpty(lang)) {
|
||||
if(Algorithms.isEmpty(lang)) {
|
||||
return names.get(region.refTypeRule);
|
||||
}
|
||||
int[] kt = names.keys();
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (("ref:" + lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(("ref:"+lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
String refDefault = names.get(region.refTypeRule);
|
||||
if (transliterate && refDefault != null && refDefault.length() > 0) {
|
||||
if(transliterate && refDefault != null && refDefault.length() > 0) {
|
||||
return TransliterationHelper.transliterate(refDefault);
|
||||
}
|
||||
return refDefault;
|
||||
|
@ -328,13 +307,13 @@ public class RouteDataObject {
|
|||
String refTagDefault = "destination:ref";
|
||||
String refDefault = null;
|
||||
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (refTag.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(refTag.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
if (refTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(refTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
refDefault = names.get(k);
|
||||
}
|
||||
}
|
||||
|
@ -347,12 +326,12 @@ public class RouteDataObject {
|
|||
return null;
|
||||
}
|
||||
|
||||
public String getDestinationName(String lang, boolean transliterate, boolean direction) {
|
||||
public String getDestinationName(String lang, boolean transliterate, boolean direction){
|
||||
//Issue #3289: Treat destination:ref like a destination, not like a ref
|
||||
String destRef = ((getDestinationRef(direction) == null) || getDestinationRef(direction).equals(getRef(lang, transliterate, direction))) ? "" : getDestinationRef(direction);
|
||||
String destRef1 = Algorithms.isEmpty(destRef) ? "" : destRef + ", ";
|
||||
|
||||
if (names != null) {
|
||||
if(names != null) {
|
||||
int[] kt = names.keys();
|
||||
|
||||
// Issue #3181: Parse destination keys in this order:
|
||||
|
@ -362,35 +341,35 @@ public class RouteDataObject {
|
|||
// destination
|
||||
|
||||
String destinationTagLangFB = "destination:lang:XX";
|
||||
if (!Algorithms.isEmpty(lang)) {
|
||||
if(!Algorithms.isEmpty(lang)) {
|
||||
destinationTagLangFB = (direction == true) ? "destination:lang:" + lang + ":forward" : "destination:lang:" + lang + ":backward";
|
||||
}
|
||||
String destinationTagFB = (direction == true) ? "destination:forward" : "destination:backward";
|
||||
String destinationTagLang = "destination:lang:XX";
|
||||
if (!Algorithms.isEmpty(lang)) {
|
||||
if(!Algorithms.isEmpty(lang)) {
|
||||
destinationTagLang = "destination:lang:" + lang;
|
||||
}
|
||||
String destinationTagDefault = "destination";
|
||||
String destinationDefault = null;
|
||||
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (!Algorithms.isEmpty(lang) && destinationTagLangFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(!Algorithms.isEmpty(lang) && destinationTagLangFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if (destinationTagFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(destinationTagFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if (!Algorithms.isEmpty(lang) && destinationTagLang.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(!Algorithms.isEmpty(lang) && destinationTagLang.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if (destinationTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if(destinationTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
destinationDefault = names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (destinationDefault != null) {
|
||||
if(destinationDefault != null) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(destinationDefault) : destinationDefault);
|
||||
}
|
||||
}
|
||||
|
@ -421,14 +400,14 @@ public class RouteDataObject {
|
|||
RestrictionInfo ri = new RestrictionInfo();
|
||||
ri.toWay = getRestrictionId(k);
|
||||
ri.type = getRestrictionType(k);
|
||||
if (restrictionsVia != null && k < restrictionsVia.length) {
|
||||
if(restrictionsVia != null && k < restrictionsVia.length) {
|
||||
ri.viaWay = restrictionsVia[k];
|
||||
}
|
||||
return ri;
|
||||
}
|
||||
|
||||
public long getRestrictionVia(int i) {
|
||||
if (restrictionsVia != null && restrictionsVia.length > i) {
|
||||
if(restrictionsVia != null && restrictionsVia.length > i) {
|
||||
return restrictionsVia[i];
|
||||
}
|
||||
return 0;
|
||||
|
@ -462,7 +441,7 @@ public class RouteDataObject {
|
|||
}
|
||||
if (insNames) {
|
||||
pointNames = new String[opointNames.length + 1][];
|
||||
pointNameTypes = new int[opointNameTypes.length + 1][];
|
||||
pointNameTypes = new int[opointNameTypes.length +1][];
|
||||
}
|
||||
int i = 0;
|
||||
for (; i < pos; i++) {
|
||||
|
@ -520,24 +499,6 @@ public class RouteDataObject {
|
|||
}
|
||||
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() {
|
||||
return types;
|
||||
|
@ -584,7 +545,7 @@ public class RouteDataObject {
|
|||
String nonCondTag = rtr.getTag();
|
||||
int 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)) {
|
||||
break;
|
||||
}
|
||||
|
@ -629,7 +590,7 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public static float parseSpeed(String v, float def) {
|
||||
if (v.equals("none")) {
|
||||
if(v.equals("none")) {
|
||||
return RouteDataObject.NONE_MAX_SPEED;
|
||||
} else {
|
||||
int i = Algorithms.findFirstNumberEndIndex(v);
|
||||
|
@ -653,20 +614,20 @@ public class RouteDataObject {
|
|||
f += Float.parseFloat(v.substring(0, i));
|
||||
String pref = v.substring(i, v.length()).trim();
|
||||
float add = 0;
|
||||
for (int ik = 0; ik < pref.length(); ik++) {
|
||||
if (Algorithms.isDigit(pref.charAt(ik)) || pref.charAt(ik) == '.' || pref.charAt(ik) == '-') {
|
||||
for(int ik = 0; ik < pref.length(); ik++) {
|
||||
if(Algorithms.isDigit(pref.charAt(ik)) || pref.charAt(ik) == '.' || pref.charAt(ik) == '-') {
|
||||
int first = Algorithms.findFirstNumberEndIndex(pref.substring(ik));
|
||||
if (first != -1) {
|
||||
if(first != -1) {
|
||||
add = parseLength(pref.substring(ik), 0);
|
||||
pref = pref.substring(0, ik);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pref.contains("km")) {
|
||||
if(pref.contains("km")) {
|
||||
f *= 1000;
|
||||
}
|
||||
if (pref.contains("\"") || pref.contains("in")) {
|
||||
if(pref.contains("\"") || pref.contains("in")) {
|
||||
f *= 0.0254;
|
||||
} else if (pref.contains("\'") || pref.contains("ft") || pref.contains("feet")) {
|
||||
// foot to meters
|
||||
|
@ -712,27 +673,27 @@ public class RouteDataObject {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean roundabout() {
|
||||
public boolean roundabout(){
|
||||
int sz = types.length;
|
||||
for (int i = 0; i < sz; i++) {
|
||||
for(int i=0; i<sz; i++) {
|
||||
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
|
||||
if (r.roundabout()) {
|
||||
if(r.roundabout()) {
|
||||
return true;
|
||||
} else if (r.onewayDirection() != 0 && loop()) {
|
||||
} else if(r.onewayDirection() != 0 && loop()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean tunnel() {
|
||||
public boolean tunnel(){
|
||||
int sz = types.length;
|
||||
for (int i = 0; i < sz; i++) {
|
||||
for(int i=0; i<sz; i++) {
|
||||
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
|
||||
if (r.getTag().equals("tunnel") && r.getValue().equals("yes")) {
|
||||
if(r.getTag().equals("tunnel") && r.getValue().equals("yes")) {
|
||||
return true;
|
||||
}
|
||||
if (r.getTag().equals("layer") && r.getValue().equals("-1")) {
|
||||
if(r.getTag().equals("layer") && r.getValue().equals("-1")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -921,7 +882,7 @@ public class RouteDataObject {
|
|||
|
||||
public boolean bearingVsRouteDirection(Location loc) {
|
||||
boolean direction = true;
|
||||
if (loc != null && loc.hasBearing()) {
|
||||
if(loc != null && loc.hasBearing()) {
|
||||
double diff = MapUtils.alignAngleDifference(directionRoute(0, true) - loc.getBearing() / 180f * Math.PI);
|
||||
direction = Math.abs(diff) < Math.PI / 2f;
|
||||
}
|
||||
|
@ -971,13 +932,13 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public double distance(int startPoint, int endPoint) {
|
||||
if (startPoint > endPoint) {
|
||||
if(startPoint > endPoint) {
|
||||
int k = endPoint;
|
||||
endPoint = startPoint;
|
||||
startPoint = k;
|
||||
}
|
||||
double d = 0;
|
||||
for (int k = startPoint; k < endPoint && k < getPointsLength() - 1; k++) {
|
||||
for(int k = startPoint; k < endPoint && k < getPointsLength() -1; k++) {
|
||||
int x = getPoint31XTile(k);
|
||||
int y = getPoint31YTile(k);
|
||||
int kx = getPoint31XTile(k + 1);
|
||||
|
@ -1013,16 +974,16 @@ public class RouteDataObject {
|
|||
// translate into meters
|
||||
total += simplifyDistance(x, y, px, py);
|
||||
} while (total < dist);
|
||||
return -Math.atan2(x - px, y - py);
|
||||
return -Math.atan2( x - px, y - py );
|
||||
}
|
||||
|
||||
private double simplifyDistance(int x, int y, int px, int py) {
|
||||
return Math.abs(px - x) * 0.011d + Math.abs(py - y) * 0.01863d;
|
||||
}
|
||||
|
||||
private static void assertTrueLength(String vl, float exp) {
|
||||
private static void assertTrueLength(String vl, float exp){
|
||||
float dest = parseLength(vl, 0);
|
||||
if (exp != dest) {
|
||||
if(exp != dest) {
|
||||
System.err.println("FAIL " + vl + " " + dest);
|
||||
} else {
|
||||
System.out.println("OK " + vl);
|
||||
|
@ -1031,24 +992,24 @@ public class RouteDataObject {
|
|||
|
||||
public static void main(String[] args) {
|
||||
assertTrueLength("10 km", 10000);
|
||||
assertTrueLength("0.01 km", 10);
|
||||
assertTrueLength("0.01 km 10 m", 20);
|
||||
assertTrueLength("10 m", 10);
|
||||
assertTrueLength("10m", 10);
|
||||
assertTrueLength("3.4 m", 3.4f);
|
||||
assertTrueLength("3.40 m", 3.4f);
|
||||
assertTrueLength("10 m 10m", 20);
|
||||
assertTrueLength("14'10\"", 4.5212f);
|
||||
assertTrueLength("14.5'", 4.4196f);
|
||||
assertTrueLength("14.5 ft", 4.4196f);
|
||||
assertTrueLength("14'0\"", 4.2672f);
|
||||
assertTrueLength("15ft", 4.572f);
|
||||
assertTrueLength("15 ft 1 in", 4.5974f);
|
||||
assertTrueLength("4.1 metres", 4.1f);
|
||||
assertTrueLength("14'0''", 4.2672f);
|
||||
assertTrueLength("14 feet", 4.2672f);
|
||||
assertTrueLength("14 mile", 22530.76f);
|
||||
assertTrueLength("14 cm", 0.14f);
|
||||
assertTrueLength("0.01 km", 10);
|
||||
assertTrueLength("0.01 km 10 m", 20);
|
||||
assertTrueLength("10 m", 10);
|
||||
assertTrueLength("10m", 10);
|
||||
assertTrueLength("3.4 m", 3.4f);
|
||||
assertTrueLength("3.40 m", 3.4f);
|
||||
assertTrueLength("10 m 10m", 20);
|
||||
assertTrueLength("14'10\"", 4.5212f);
|
||||
assertTrueLength("14.5'", 4.4196f);
|
||||
assertTrueLength("14.5 ft", 4.4196f);
|
||||
assertTrueLength("14'0\"", 4.2672f);
|
||||
assertTrueLength("15ft", 4.572f);
|
||||
assertTrueLength("15 ft 1 in", 4.5974f);
|
||||
assertTrueLength("4.1 metres", 4.1f);
|
||||
assertTrueLength("14'0''", 4.2672f);
|
||||
assertTrueLength("14 feet", 4.2672f);
|
||||
assertTrueLength("14 mile", 22530.76f);
|
||||
assertTrueLength("14 cm", 0.14f);
|
||||
|
||||
// float badValue = -1;
|
||||
// assertTrueLength("none", badValue);
|
||||
|
@ -1093,7 +1054,7 @@ public class RouteDataObject {
|
|||
public RestrictionInfo next; // optional to simulate linked list
|
||||
|
||||
public int length() {
|
||||
if (next == null) {
|
||||
if(next == null) {
|
||||
return 1;
|
||||
}
|
||||
return next.length() + 1;
|
||||
|
@ -1103,16 +1064,16 @@ public class RouteDataObject {
|
|||
public void setRestriction(int k, long to, int type, long viaWay) {
|
||||
long valto = (to << RouteDataObject.RESTRICTION_SHIFT) | ((long) type & RouteDataObject.RESTRICTION_MASK);
|
||||
restrictions[k] = valto;
|
||||
if (viaWay != 0) {
|
||||
if(viaWay != 0) {
|
||||
setRestrictionVia(k, viaWay);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRestrictionVia(int k, long viaWay) {
|
||||
if (restrictionsVia != null) {
|
||||
if(restrictionsVia != null) {
|
||||
long[] nrestrictionsVia = new long[Math.max(k + 1, restrictions.length)];
|
||||
System.arraycopy(restrictions, 0, nrestrictionsVia, 0, restrictions.length);
|
||||
restrictionsVia = nrestrictionsVia;
|
||||
restrictionsVia = nrestrictionsVia;
|
||||
} else {
|
||||
restrictionsVia = new long[k + 1];
|
||||
}
|
||||
|
|
|
@ -279,19 +279,6 @@ public class Amenity extends MapObject {
|
|||
}
|
||||
|
||||
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) {
|
||||
String translateName = getAdditionalInfo(tag + ":" + lang);
|
||||
if (!Algorithms.isEmpty(translateName)) {
|
||||
|
@ -306,6 +293,11 @@ public class Amenity extends MapObject {
|
|||
if (!Algorithms.isEmpty(enName)) {
|
||||
return enName;
|
||||
}
|
||||
for (String nm : getAdditionalInfoKeys()) {
|
||||
if (nm.startsWith(tag + ":")) {
|
||||
return getAdditionalInfo(nm);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,11 +16,13 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
|
||||
|
@ -181,9 +183,8 @@ public abstract class MapObject implements Comparable<MapObject> {
|
|||
public String getName(String lang, boolean transliterate) {
|
||||
if (lang != null && lang.length() > 0) {
|
||||
if (lang.equals("en")) {
|
||||
// for some objects like wikipedia, english name is stored 'name' tag
|
||||
String enName = getEnName(transliterate);
|
||||
return !Algorithms.isEmpty(enName) ? enName : getName();
|
||||
// ignore transliterate option here for backward compatibility
|
||||
return getEnName(true);
|
||||
} else {
|
||||
// get name
|
||||
if (names != null) {
|
||||
|
|
|
@ -163,7 +163,9 @@ public class Multipolygon {
|
|||
* @return true if this multipolygon is correct and contains the point
|
||||
*/
|
||||
public boolean containsPoint(LatLon point) {
|
||||
|
||||
return containsPoint(point.getLatitude(), point.getLongitude());
|
||||
|
||||
}
|
||||
|
||||
public int countOuterPolygons() {
|
||||
|
|
|
@ -6,7 +6,6 @@ public class QuadRect {
|
|||
public double top;
|
||||
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) {
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
|
@ -22,18 +21,16 @@ public class QuadRect {
|
|||
}
|
||||
|
||||
public double width() {
|
||||
return Math.abs(right - left);
|
||||
return right - left;
|
||||
}
|
||||
|
||||
public double height() {
|
||||
return Math.abs(bottom - top);
|
||||
return bottom - top;
|
||||
}
|
||||
|
||||
public boolean contains(double left, double top, double right, double bottom) {
|
||||
return Math.min(this.left, this.right) <= Math.min(left, right)
|
||||
&& Math.max(this.left, this.right) >= Math.max(left, right)
|
||||
&& Math.min(this.top, this.bottom) <= Math.min(top, bottom)
|
||||
&& Math.max(this.top, this.bottom) >= Math.max(top, bottom);
|
||||
return this.left < this.right && this.top < this.bottom && this.left <= left && this.top <= top && this.right >= right
|
||||
&& this.bottom >= bottom;
|
||||
}
|
||||
|
||||
public boolean contains(QuadRect box) {
|
||||
|
@ -41,15 +38,12 @@ public class QuadRect {
|
|||
}
|
||||
|
||||
public static boolean intersects(QuadRect a, QuadRect b) {
|
||||
return Math.min(a.left, a.right) <= Math.max(b.left, b.right)
|
||||
&& 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);
|
||||
return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;
|
||||
}
|
||||
|
||||
public static boolean trivialOverlap(QuadRect a, QuadRect b) {
|
||||
return !((a.right < b.left) || (a.left > b.right) || (a.top < b.bottom) || (a.bottom > b.top));
|
||||
}
|
||||
|
||||
public static boolean trivialOverlap(QuadRect a, QuadRect b) {
|
||||
return intersects(a, b);
|
||||
}
|
||||
|
||||
public double centerX() {
|
||||
return (left + right) / 2;
|
||||
|
|
|
@ -103,16 +103,18 @@ public class QuadTree<T> {
|
|||
void splitBox(QuadRect node_extent, QuadRect[] n) {
|
||||
// coord2d c=node_extent.center();
|
||||
|
||||
double width = node_extent.width();
|
||||
double height = node_extent.height();
|
||||
|
||||
double lx = node_extent.left;
|
||||
double ly = node_extent.top;
|
||||
double hx = node_extent.right;
|
||||
double hy = node_extent.bottom;
|
||||
double lox = node_extent.left;
|
||||
double loy = node_extent.top;
|
||||
double hix = node_extent.right;
|
||||
double hiy = node_extent.bottom;
|
||||
|
||||
n[0] = new QuadRect(lx, ly, lx + (hx - lx) * ratio, ly + (hy - ly) * ratio);
|
||||
n[1] = new QuadRect(lx + (hx - lx) * (1 - ratio), ly, hx, ly + (hy - ly) * ratio);
|
||||
n[2] = new QuadRect(lx, ly + (hy - ly) * (1 - ratio), lx + (hx - lx) * ratio, hy);
|
||||
n[3] = new QuadRect(lx + (hx - lx) * (1 - ratio), ly + (hy - ly) * (1 - ratio), hx, hy);
|
||||
n[0] = new QuadRect(lox, loy, lox + width * ratio, loy + height * ratio);
|
||||
n[1] = new QuadRect(hix - width * ratio, loy, hix, loy + height * ratio);
|
||||
n[2] = new QuadRect(lox, hiy - height * ratio, lox + width * ratio, hiy);
|
||||
n[3] = new QuadRect(hix - width * ratio, hiy - height * ratio, hix, hiy);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -436,7 +436,7 @@ public class OsmandRegions {
|
|||
cx /= object.getPointsLength();
|
||||
cy /= object.getPointsLength();
|
||||
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);
|
||||
|
@ -462,15 +462,13 @@ public class OsmandRegions {
|
|||
return rd;
|
||||
}
|
||||
|
||||
private void findBoundaries(WorldRegion rd, BinaryMapDataObject object) {
|
||||
private QuadRect findBoundingBox(BinaryMapDataObject object) {
|
||||
if (object.getPointsLength() == 0) {
|
||||
return;
|
||||
return new QuadRect(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
List<LatLon> polygon = new ArrayList<>();
|
||||
double currentX = object.getPoint31XTile(0);
|
||||
double currentY = object.getPoint31YTile(0);
|
||||
polygon.add(new LatLon(currentX, currentY));
|
||||
double minX = currentX;
|
||||
double maxX = currentX;
|
||||
double minY = currentY;
|
||||
|
@ -490,7 +488,6 @@ public class OsmandRegions {
|
|||
} else if (currentY < minY) {
|
||||
minY = currentY;
|
||||
}
|
||||
polygon.add(new LatLon(currentX, currentY));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -499,8 +496,7 @@ public class OsmandRegions {
|
|||
double revertedMinY = MapUtils.get31LatitudeY((int) maxY);
|
||||
double revertedMaxY = MapUtils.get31LatitudeY((int) minY);
|
||||
|
||||
rd.boundingBox = new QuadRect(minX, revertedMinY, maxX, revertedMaxY);
|
||||
rd.polygon = polygon;
|
||||
return new QuadRect(minX, revertedMinY, maxX, revertedMaxY);
|
||||
}
|
||||
|
||||
private String getSearchIndex(BinaryMapDataObject object) {
|
||||
|
|
|
@ -5,11 +5,8 @@ import net.osmand.data.QuadRect;
|
|||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class WorldRegion implements Serializable {
|
||||
|
||||
|
@ -45,7 +42,6 @@ public class WorldRegion implements Serializable {
|
|||
protected boolean regionMapDownload;
|
||||
protected LatLon regionCenter;
|
||||
protected QuadRect boundingBox;
|
||||
protected List<LatLon> polygon;
|
||||
|
||||
public static class RegionParams {
|
||||
protected String regionLeftHandDriving;
|
||||
|
@ -190,23 +186,12 @@ public class WorldRegion implements Serializable {
|
|||
}
|
||||
|
||||
public boolean containsRegion(WorldRegion region) {
|
||||
if (containsBoundingBox(region.boundingBox)) {
|
||||
// check polygon only if bounding box match
|
||||
return containsPolygon(region.polygon);
|
||||
if (this.boundingBox != null && region.boundingBox != null) {
|
||||
return this.boundingBox.contains(region.boundingBox);
|
||||
}
|
||||
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() {
|
||||
if (superregion != null) {
|
||||
String superRegionId = superregion.getRegionId();
|
||||
|
@ -215,22 +200,4 @@ public class WorldRegion implements Serializable {
|
|||
}
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -658,8 +658,6 @@ public class MapPoiTypes {
|
|||
tp.setOsmValue(parser.getAttributeValue("", "value"));
|
||||
tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"),
|
||||
parser.getAttributeValue("", "edit_value"));
|
||||
tp.setOsmEditTagValue2(parser.getAttributeValue("", "edit_tag2"),
|
||||
parser.getAttributeValue("", "edit_value2"));
|
||||
|
||||
tp.setOsmTag2(parser.getAttributeValue("", "tag2"));
|
||||
tp.setOsmValue2(parser.getAttributeValue("", "value2"));
|
||||
|
|
|
@ -16,10 +16,9 @@ public class PoiType extends AbstractPoiType {
|
|||
|
||||
private String editTag;
|
||||
private String editValue;
|
||||
private String editTag2;
|
||||
private String editValue2;
|
||||
private boolean filterOnly;
|
||||
|
||||
|
||||
private String nameTag;
|
||||
private boolean text;
|
||||
private boolean nameOnly;
|
||||
|
@ -69,46 +68,27 @@ public class PoiType extends AbstractPoiType {
|
|||
this.editTag = osmTag;
|
||||
this.editValue = editValue;
|
||||
}
|
||||
|
||||
public void setOsmEditTagValue2(String osmTag, String editValue) {
|
||||
this.editTag2 = osmTag;
|
||||
this.editValue2 = editValue;
|
||||
}
|
||||
|
||||
|
||||
public String getEditOsmTag() {
|
||||
if (isReference()) {
|
||||
if(isReference()) {
|
||||
return referenceType.getEditOsmTag();
|
||||
}
|
||||
if (editTag == null) {
|
||||
if(editTag == null) {
|
||||
return getOsmTag();
|
||||
}
|
||||
return editTag;
|
||||
}
|
||||
|
||||
public String getEditOsmValue() {
|
||||
if (isReference()) {
|
||||
if(isReference()) {
|
||||
return referenceType.getEditOsmValue();
|
||||
}
|
||||
if (editValue == null) {
|
||||
if(editValue == null) {
|
||||
return getOsmValue();
|
||||
}
|
||||
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) {
|
||||
this.osmTag = osmTag;
|
||||
}
|
||||
|
|
|
@ -153,34 +153,35 @@ public class OsmMapUtils {
|
|||
}
|
||||
boolean area = w.getFirstNodeId() == w.getLastNodeId();
|
||||
// double check for area (could be negative all)
|
||||
if (area) {
|
||||
if(area) {
|
||||
Node fn = w.getFirstNode();
|
||||
Node ln = w.getLastNode();
|
||||
if (fn != null && fn != null && MapUtils.getDistance(fn.getLatLon(), ln.getLatLon()) < 50) {
|
||||
if(fn != null && fn != null && MapUtils.getDistance(fn.getLatLon(), ln.getLatLon()) < 50) {
|
||||
area = true;
|
||||
} else {
|
||||
area = false;
|
||||
}
|
||||
}
|
||||
LatLon ll = area ? getComplexPolyCenter(nodes, null) : getWeightCenterForNodes(nodes);
|
||||
if (ll == null) {
|
||||
if(ll == null) {
|
||||
return null;
|
||||
}
|
||||
double flat = ll.getLatitude();
|
||||
double flon = ll.getLongitude();
|
||||
if (!area || !MapAlgorithms.containsPoint(nodes, ll.getLatitude(), ll.getLongitude())) {
|
||||
if(!area || !MapAlgorithms.containsPoint(nodes, ll.getLatitude(), ll.getLongitude())) {
|
||||
double minDistance = Double.MAX_VALUE;
|
||||
for (Node n : nodes) {
|
||||
if (n != null) {
|
||||
double d = MapUtils.getDistance(n.getLatitude(), n.getLongitude(), ll.getLatitude(), ll.getLongitude());
|
||||
if (d < minDistance) {
|
||||
if(d < minDistance) {
|
||||
flat = n.getLatitude();
|
||||
flon = n.getLongitude();
|
||||
minDistance = d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
LatLon p = MapUtils.getProjection(node.getLatitude(), node.getLongitude(), nodeLineStart.getLatitude(),
|
||||
nodeLineStart.getLongitude(), nodeLineEnd.getLatitude(), nodeLineEnd.getLongitude());
|
||||
|
|
|
@ -183,7 +183,7 @@ public class OsmBaseStorage {
|
|||
protected static final int moduleProgress = 1 << 10;
|
||||
|
||||
public void startElement(XmlPullParser parser, String name) {
|
||||
if (!parseStarted) {
|
||||
if(!parseStarted){
|
||||
initRootElement(parser, name);
|
||||
}
|
||||
if (ELEM_MODIFY.equals(name) ) {
|
||||
|
@ -283,14 +283,13 @@ public class OsmBaseStorage {
|
|||
if (type != null) {
|
||||
if(currentParsedEntity != null){
|
||||
EntityId entityId = new EntityId(type, currentParsedEntity.getId());
|
||||
if (acceptEntityToLoad(entityId, currentParsedEntity)) {
|
||||
if(acceptEntityToLoad(entityId, currentParsedEntity)){
|
||||
Entity oldEntity = entities.put(entityId, currentParsedEntity);
|
||||
if (parseEntityInfo && currentParsedEntityInfo != null) {
|
||||
if(parseEntityInfo && currentParsedEntityInfo != null){
|
||||
entityInfo.put(entityId, currentParsedEntityInfo);
|
||||
}
|
||||
if (!supressWarnings && oldEntity != null) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Entity with id=" + oldEntity.getId() + " is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
if(!supressWarnings && oldEntity!= null){
|
||||
throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
} else {
|
||||
// System.gc();
|
||||
|
@ -309,8 +308,8 @@ public class OsmBaseStorage {
|
|||
|
||||
|
||||
protected boolean acceptEntityToLoad(EntityId entityId, Entity entity) {
|
||||
for (IOsmStorageFilter f : filters) {
|
||||
if (!f.acceptEntityToLoad(this, entityId, entity)) {
|
||||
for(IOsmStorageFilter f : filters){
|
||||
if(!f.acceptEntityToLoad(this, entityId, entity)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -620,7 +620,9 @@ public class GeneralRouter implements VehicleRouter {
|
|||
public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) {
|
||||
float ts = getPenaltyTransition(segment.getRoad());
|
||||
float prevTs = getPenaltyTransition(prev.getRoad());
|
||||
|
||||
float totalPenalty = 0;
|
||||
|
||||
if (prevTs != ts) {
|
||||
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()) {
|
||||
double rt = getRoundaboutTurn();
|
||||
if(rt > 0) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import net.osmand.NativeLibrary;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.ResultMatcher;
|
||||
import net.osmand.binary.BinaryMapIndexReader;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
||||
import net.osmand.binary.RouteDataObject;
|
||||
import net.osmand.data.LatLon;
|
||||
|
@ -688,15 +689,15 @@ public class RoutePlannerFrontEnd {
|
|||
}
|
||||
}
|
||||
if (ctx.calculationMode == RouteCalculationMode.COMPLEX && routeDirection == null
|
||||
&& maxDistance > RoutingConfiguration.DEVIATION_RADIUS * 6) {
|
||||
&& maxDistance > ctx.config.DEVIATION_RADIUS * 6) {
|
||||
ctx.calculationProgress.totalIterations++;
|
||||
RoutingContext nctx = buildRoutingContext(ctx.config, ctx.nativeLib, ctx.getMaps(), RouteCalculationMode.BASE);
|
||||
nctx.calculationProgress = ctx.calculationProgress;
|
||||
List<RouteSegmentResult> ls = searchRoute(nctx, start, end, intermediates);
|
||||
if (ls == null) {
|
||||
if(ls == 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 ;
|
||||
if (intermediatesEmpty && ctx.nativeLib != null) {
|
||||
|
|
|
@ -176,49 +176,11 @@ public class RouteResultPreparation {
|
|||
combineWayPointsForAreaRouting(ctx, result);
|
||||
validateAllPointsConnected(result);
|
||||
splitRoadsAndAttachRoadSegments(ctx, result, recalculation);
|
||||
for (int i = 0; i < result.size(); i++) {
|
||||
filterMinorStops(result.get(i));
|
||||
}
|
||||
calculateTimeSpeed(ctx, result);
|
||||
|
||||
prepareTurnResults(ctx, 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) {
|
||||
for (int i = 0; i < result.size(); i ++) {
|
||||
|
@ -1117,8 +1079,8 @@ public class RouteResultPreparation {
|
|||
if (UNMATCHED_HIGHWAY_TYPE.equals(rr.getObject().getHighway())) {
|
||||
bearingDist = RouteSegmentResult.DIST_BEARING_DETECT_UNMATCHED;
|
||||
}
|
||||
double mpi = MapUtils.degreesDiff(prev.getBearingEnd(prev.getEndPointIndex(), Math.min(prev.getDistance(), bearingDist)),
|
||||
rr.getBearingBegin(rr.getStartPointIndex(), Math.min(rr.getDistance(), bearingDist)));
|
||||
double mpi = MapUtils.degreesDiff(prev.getBearingEnd(prev.getEndPointIndex(), bearingDist),
|
||||
rr.getBearingBegin(rr.getStartPointIndex(), bearingDist));
|
||||
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.
|
||||
|
|
|
@ -457,7 +457,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
|
|||
}
|
||||
|
||||
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) {
|
||||
|
@ -465,7 +465,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
|
@ -20,7 +20,7 @@ import java.util.Stack;
|
|||
public class RoutingConfiguration {
|
||||
|
||||
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>();
|
||||
|
||||
// 1. parameters of routing and different tweaks
|
||||
|
|
|
@ -10,6 +10,8 @@ import net.osmand.router.GeneralRouter.RouteDataObjectAttribute;
|
|||
|
||||
public class TransportRoutingConfiguration {
|
||||
|
||||
public static final String KEY = "public_transport";
|
||||
|
||||
public int ZOOM_TO_LOAD_TILES = 15;
|
||||
|
||||
public int walkRadius = 1500; // ? 3000
|
||||
|
|
|
@ -8,7 +8,7 @@ public enum ObjectType {
|
|||
// LOCATION
|
||||
LOCATION(true), PARTIAL_LOCATION(false),
|
||||
// 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(true),
|
||||
|
|
|
@ -1317,13 +1317,7 @@ public class SearchCoreFactory {
|
|||
|| !phrase.isSearchTypeAllowed(ObjectType.HOUSE)) {
|
||||
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.location = b.getLocation();
|
||||
}
|
||||
res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
|
||||
res.otherNames = b.getAllNames(true);
|
||||
res.object = b;
|
||||
res.file = file;
|
||||
|
@ -1334,6 +1328,12 @@ public class SearchCoreFactory {
|
|||
res.relatedObject = s;
|
||||
res.localeRelatedObjectName = s.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
|
||||
res.objectType = ObjectType.HOUSE;
|
||||
if(interpolation) {
|
||||
res.location = b.getLocation(b.interpolation(lw));
|
||||
res.localeName = lw;
|
||||
} else {
|
||||
res.location = b.getLocation();
|
||||
}
|
||||
res.preferredZoom = 17;
|
||||
|
||||
resultMatcher.publish(res);
|
||||
|
|
|
@ -55,9 +55,7 @@ public class SearchResult {
|
|||
|
||||
public double getSumPhraseMatchWeight() {
|
||||
// if result is a complete match in the search we prioritize it higher
|
||||
int localWordsMatched = alternateName != null ?
|
||||
requiredSearchPhrase.countWords(alternateName) : requiredSearchPhrase.countWords(localeName) ;
|
||||
boolean match = localWordsMatched <= getSelfWordCount();
|
||||
boolean match = requiredSearchPhrase.countWords(localeName) <= getSelfWordCount();
|
||||
double res = ObjectType.getTypeWeight(match ? objectType : null);
|
||||
if (parentSearchResult != null) {
|
||||
res = res + parentSearchResult.getSumPhraseMatchWeight() / MAX_TYPE_WEIGHT;
|
||||
|
|
|
@ -2,8 +2,6 @@ package net.osmand.util;
|
|||
|
||||
import net.osmand.IProgress;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.router.RouteColorize;
|
||||
import net.osmand.data.LatLon;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
@ -55,8 +53,6 @@ public class Algorithms {
|
|||
public static final int XML_FILE_SIGNATURE = 0x3c3f786d;
|
||||
public static final int OBF_FILE_SIGNATURE = 0x08029001;
|
||||
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) {
|
||||
boolean norm = false;
|
||||
|
@ -119,7 +115,7 @@ public class Algorithms {
|
|||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
|
||||
public static int parseIntSilently(String input, int def) {
|
||||
if (input != null && input.length() > 0) {
|
||||
try {
|
||||
|
@ -142,35 +138,6 @@ public class Algorithms {
|
|||
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) {
|
||||
return getFileNameWithoutExtension(f.getName());
|
||||
}
|
||||
|
@ -355,24 +322,6 @@ public class Algorithms {
|
|||
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
|
||||
* directory.
|
||||
|
@ -409,14 +358,6 @@ public class Algorithms {
|
|||
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) {
|
||||
if (s != null && s.length() > 1) {
|
||||
// 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")
|
||||
public static void updateAllExistingImgTilesToOsmandFormat(File f) {
|
||||
if (f.isDirectory()) {
|
||||
|
@ -789,10 +723,6 @@ public class Algorithms {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static boolean isInt(double d) {
|
||||
return (d == Math.floor(d)) && !Double.isInfinite(d);
|
||||
}
|
||||
|
||||
public static boolean isInt(String value) {
|
||||
int length = value.length();
|
||||
for (int i = 0; i < length; i++) {
|
||||
|
@ -1062,30 +992,4 @@ public class Algorithms {
|
|||
}
|
||||
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]);
|
||||
}
|
||||
}
|
|
@ -747,9 +747,7 @@ public class MapUtils {
|
|||
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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -80,9 +80,9 @@ public class SearchUICoreTest {
|
|||
if (files != null) {
|
||||
for (File file : files) {
|
||||
String fileName = file.getName();
|
||||
if (fileName.endsWith(".json")) {
|
||||
if(fileName.endsWith(".json")) {
|
||||
String name = fileName.substring(0, fileName.length() - ".json".length());
|
||||
arrayList.add(new Object[] { name, file });
|
||||
arrayList.add(new Object[] {name, file});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -191,10 +191,10 @@ public class SearchUICoreTest {
|
|||
if (!Algorithms.stringsEqual(expected, present)) {
|
||||
System.out.println(String.format("Phrase: %s", phrase));
|
||||
System.out.println(String.format("Mismatch for '%s' != '%s'. Result: ", expected, present));
|
||||
}
|
||||
for (SearchResult r : searchResults) {
|
||||
System.out.println(String.format("\t\"%s\",", formatResult(false, r, phrase)));
|
||||
}
|
||||
}
|
||||
Assert.assertEquals(expected, present);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 & 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>
|
|
@ -74,7 +74,4 @@
|
|||
<string name="shared_string_appearance">Vzhled</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="by_name">Podle názvu</string>
|
||||
<string name="shared_string_distance">Vzdálenost</string>
|
||||
<string name="shared_string_later">Později</string>
|
||||
</resources>
|
|
@ -82,7 +82,7 @@
|
|||
<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="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="share_location">Standort teilen</string>
|
||||
<string name="process_service">OsmAnd Tracker-Service</string>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
<string name="shared_string_share">Κοινοποίηση</string>
|
||||
<string name="shared_string_back">Προηγούμενο</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_enabled">Ενεργοποιημένο</string>
|
||||
<string name="units_and_formats">Μονάδες μέτρησης & φορμά</string>
|
||||
|
@ -53,5 +53,4 @@
|
|||
<string name="si_km_m">Χιλιόμετρα/μέτρα</string>
|
||||
<string name="unit_of_length_descr">Αλλαγή απόστασης που μετριέται.</string>
|
||||
<string name="unit_of_length">Μονάδες μήκους</string>
|
||||
<string name="shared_string_sort_by">Ταξινόμηση κατά</string>
|
||||
</resources>
|
|
@ -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 & 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>
|
|
@ -69,7 +69,7 @@
|
|||
<string name="mile">mi</string>
|
||||
<string name="km">km</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_km">min/km</string>
|
||||
<string name="m_s">m/s</string>
|
||||
|
@ -249,7 +249,7 @@
|
|||
<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_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="shared_string_hour_short">h</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<string name="shared_string_map">نقشه</string>
|
||||
<string name="average_altitude">میانگین ارتفاع</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_search">جستوجو</string>
|
||||
<string name="altitude">ارتفاع</string>
|
||||
|
@ -81,5 +81,5 @@
|
|||
<string name="send_report">ارسال گزارش</string>
|
||||
<string name="shared_string_export">برونبرد</string>
|
||||
<string name="logcat_buffer">بافر لاگکت</string>
|
||||
<string name="logcat_buffer_descr">لاگهای باجزئیات برنامه را بررسی و همرسانی کنید</string>
|
||||
<string name="logcat_buffer_descr">لاگهای جزئی برنامه را بررسی و همرسانی کنید</string>
|
||||
</resources>
|
|
@ -41,5 +41,4 @@
|
|||
<string name="shared_string_enable">Ota käyttöön</string>
|
||||
<string name="shared_string_select">Valitse</string>
|
||||
<string name="shared_string_apply">Käytä</string>
|
||||
<string name="shared_string_sort">Lajittele</string>
|
||||
</resources>
|
|
@ -213,7 +213,7 @@
|
|||
<string name="by_group">Par groupe</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_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="share_location_as">Partager la position comme</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="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="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="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>
|
||||
|
@ -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="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="time_ago">il y a</string>
|
||||
<string name="time_ago">depuis</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="shared_string_export">Exporter</string>
|
||||
|
|
|
@ -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_after_creating_account">Utána használhatja ezt az alkalmazást.</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="minutes_format">%1$d perc</string>
|
||||
<string name="shared_string_install">Telepítés</string>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<string name="proxy_port">ポート</string>
|
||||
<string name="proxy_server">サーバー</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_connected">接続しました</string>
|
||||
<string name="proxy_disconnected">切断しました</string>
|
||||
|
|
|
@ -258,7 +258,7 @@
|
|||
<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="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_descr">Controleer en deel gedetailleerde logs van de app</string>
|
||||
</resources>
|
|
@ -2,12 +2,12 @@
|
|||
<resources>
|
||||
<string name="timeline_no_data">Sem dados</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_descr">Filtro: distância mínima para registar um novo ponto</string>
|
||||
<string name="min_logging_accuracy">Precisão mínima de registo</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_speed">Velocidade mínima de registo</string>
|
||||
<string name="min_logging_speed_descr">Filtro: sem registo abaixo da velocidade selecionada</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 registrar um novo ponto</string>
|
||||
<string name="min_logging_accuracy">Precisão mínima de registro</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 registro</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_username">Nome de utilizador</string>
|
||||
<string name="shared_string_enable">Ativar</string>
|
||||
|
@ -16,7 +16,7 @@
|
|||
<string name="altitude">Altitude</string>
|
||||
<string name="shared_string_search">Pesquisar</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_appearance">Aparência</string>
|
||||
<string name="shared_string_update">Atualizar</string>
|
||||
|
@ -35,13 +35,13 @@
|
|||
<string name="shared_string_end">Fim</string>
|
||||
<string name="shared_string_start">Iniciar</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="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="proxy_key">Chave</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="shared_string_connection">Conexão</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">Proxy</string>
|
||||
<string name="precision">Precisão</string>
|
||||
<string name="bearing">Rumo</string>
|
||||
<string name="search_contacts">Pesquisar contactos</string>
|
||||
<string name="search_contacts_descr">Pesquise em todos os seus grupos e contactos.</string>
|
||||
<string name="type_contact_or_group_name">Digite o nome do contacto ou do grupo</string>
|
||||
<string name="bearing">Rolamento</string>
|
||||
<string name="search_contacts">Pesquisar contatos</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 contato ou do grupo</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="timeline_description">Ative a monitorização 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_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="timeline_description">Ative o monitoramento para gravar todos os locais no histórico.</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 . 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="shared_string_accept">Aceitar</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="received_gps_points">Pontos GPX recebidos: %1$s</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="gps_points_in_buffer">enviado (%1$d em buffer)</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="shared_string_sent">Enviado</string>
|
||||
<string name="monitoring_is_enabled">A monitorização está ativada</string>
|
||||
<string name="monitoring_is_disabled">A monitorização está desativada</string>
|
||||
<string name="monitoring_is_enabled">Monitoramento está ativado</string>
|
||||
<string name="monitoring_is_disabled">Monitoramento está desativado</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_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="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="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="enter_device_name_description">Atribua um nome a seu novo dispositivo com o máximo de 200 caracteres.</string>
|
||||
<string name="device_name_is_too_long">Nome do dispositivo muito longo</string>
|
||||
<string name="device_name_cannot_be_empty">O nome do dispositivo não pode estar vazio</string>
|
||||
<string name="device_name">Nome do dispositivo</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">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="error_adding_new_device">Não foi possível adicionar novo aparelho</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 aparelho muito longo</string>
|
||||
<string name="device_name_cannot_be_empty">O nome do aparelho não pode estar vazio</string>
|
||||
<string name="device_name">Nome do aparelho</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 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="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="waiting_for_response_from_telegram">A aguardar a resposta do Telegram</string>
|
||||
<string name="sending_location_messages">A enviar a localização</string>
|
||||
<string name="initializing">A iniciar</string>
|
||||
<string name="searching_for_gps">A posicionar…</string>
|
||||
<string name="waiting_for_response_from_telegram">Aguardando resposta do Telegram</string>
|
||||
<string name="sending_location_messages">enviando localização</string>
|
||||
<string name="initializing">Iniciando</string>
|
||||
<string name="searching_for_gps">Posicionando…</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="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="go_to_settings">Ir às configurações</string>
|
||||
<string name="sharing_in_background">Compartilhando em segundo plano</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_found_yet">Ainda não encontrado</string>
|
||||
<string name="re_send_location">Reenvie o local</string>
|
||||
<string name="last_available_location">Última localização disponível</string>
|
||||
<string name="sharing_status">Estado da partilha</string>
|
||||
<string name="location_sharing_status">Partilha: %1$s</string>
|
||||
<string name="sharing_status">Estado de compartilhamento</string>
|
||||
<string name="location_sharing_status">Compartilhamento: %1$s</string>
|
||||
<string name="shared_string_enabled">Ativado</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_save">Guardar</string>
|
||||
<string name="add_device">Adicionar dispositivo</string>
|
||||
<string name="share_location_as">Partilhar localização como</string>
|
||||
<string name="live_now_description">Contactos e grupos partilhando a localização 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="shared_string_save">Gravar</string>
|
||||
<string name="add_device">Adicionar aparelho</string>
|
||||
<string name="share_location_as">Compartilhar localização como</string>
|
||||
<string name="live_now_description">Contatos e grupos compartilhando o local consigo.</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="shared_string_name">Nome</string>
|
||||
<string name="by_distance">Pela distância</string>
|
||||
<string name="by_name">Por nome</string>
|
||||
<string name="by_group">Por grupo</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="disable_all_sharing_desc">Desativa a partilha da localização para todos os bate-papos selecionados (%1$d).</string>
|
||||
<string name="disable_all_sharing">Desativar todas as partilhas</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 todo o compartilhamento</string>
|
||||
<string name="turn_off_all">Desligue todos</string>
|
||||
<string name="shared_string_exit">Sair</string>
|
||||
<string name="time_ago">atrás</string>
|
||||
|
@ -136,34 +136,34 @@
|
|||
<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="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="logout_help_desc">Como desativar o OsmAnd Tracker para Telegram</string>
|
||||
<string name="connected_account">Conta conectada</string>
|
||||
<string name="shared_string_account">Conta</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="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="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="send_my_location_desc">Defina o intervalo mínimo para a partilha da localização.</string>
|
||||
<string name="send_my_location">Enviar a minha 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 minha localizaçã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="stop_sharing_all">A partilha está ativada (desativar)</string>
|
||||
<string name="turn_off_location_sharing">Desativar a partilha da localização</string>
|
||||
<string name="stop_sharing_all">O compartilhamento está ativado (desativado)</string>
|
||||
<string name="turn_off_location_sharing">Desativar o compartilhamento de local</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="get_telegram_title">Registo 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_title">Registro no Telegram</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_after_creating_account">Depois pode usar esta aplicação.</string>
|
||||
<string name="shared_string_all">Tudo</string>
|
||||
<string name="shared_string_off">Desativado</string>
|
||||
<string name="get_telegram_after_creating_account">Então pode usar esta app.</string>
|
||||
<string name="shared_string_all">Todos</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="do_not_have_telegram">Não tenho uma conta do Telegram</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="hours_format">%1$d h</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="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">Definir hora</string>
|
||||
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja partilhar a sua localização.</string>
|
||||
<string name="my_location_search_hint">Pesquisa: grupo ou contacto</string>
|
||||
<string name="start_location_sharing">Partilhar localização</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 tempo</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 contato</string>
|
||||
<string name="start_location_sharing">Compartilhar localização</string>
|
||||
<string name="show_on_map">Mostrar no mapa</string>
|
||||
<string name="app_name">OsmAnd Online GPS Tracker</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="shared_string_password">Palavra-passe</string>
|
||||
<string name="enter_code">Digite o código</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">Código de Autenticação</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="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_logout">Sair</string>
|
||||
<string name="initialization">A iniciar</string>
|
||||
<string name="logging_out">A terminar sessão</string>
|
||||
<string name="closing">A fechar</string>
|
||||
<string name="initialization">Iniciando</string>
|
||||
<string name="logging_out">Saindo</string>
|
||||
<string name="closing">Fechando</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_cancel">Cancelar</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="gps_not_available">Por favor, ative a \"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="osmand_service">Modo em segundo plano</string>
|
||||
<string name="osmand_service_descr">O OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</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, ligue \"Localização\" nas configurações do sistema</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 de fundo</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="share_location">Partilhar localização</string>
|
||||
<string name="sharing_location">A partilhar a localização</string>
|
||||
<string name="share_location">Compartilhar localização</string>
|
||||
<string name="sharing_location">Compartilhando localização</string>
|
||||
<string name="process_service">Serviço OsmAnd Tracker</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>
|
||||
|
@ -229,13 +229,13 @@
|
|||
<string name="nm_h">mn/h</string>
|
||||
<string name="m_s">m/s</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_mph">Milhas por hora</string>
|
||||
<string name="si_m_s">Metros por segundo</string>
|
||||
<string name="si_min_km">Minutos por quilómetro</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_yard">Milhas/jardas</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_minute_short">min</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="my_location">A minha posição</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">Minha localização</string>
|
||||
<string name="live_now">Ao vivo agora</string>
|
||||
<string name="timeline">Cronologia</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">Tempo de expiração do buffer</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="duration_ago">%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="shared_string_export">Exportar</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>
|
|
@ -1,274 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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 & 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>
|
|
@ -16,6 +16,7 @@
|
|||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<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.MODIFY_AUDIO_SETTINGS" />
|
||||
|
@ -1026,7 +1027,6 @@
|
|||
</activity>
|
||||
|
||||
<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.download.DownloadActivity" android:label="" />
|
||||
|
||||
|
@ -1065,7 +1065,7 @@
|
|||
|
||||
<activity android:name="net.osmand.plus.activities.PrintDialogActivity" />
|
||||
<activity android:name=".liveupdates.OsmLiveActivity"
|
||||
android:label="@string/purchases"/>
|
||||
android:label="@string/osm_live"/>
|
||||
<activity android:name=".wikivoyage.explore.WikivoyageExploreActivity">
|
||||
|
||||
<intent-filter>
|
||||
|
|
BIN
OsmAnd/assets/fonts/RobotoSlab-Regular.ttf
Executable file
BIN
OsmAnd/assets/fonts/RobotoSlab-Regular.ttf
Executable file
Binary file not shown.
|
@ -109,9 +109,6 @@ android {
|
|||
clean.doFirst {
|
||||
delete fileTree('assets') {
|
||||
include '*.obf'
|
||||
include 'fonts/**'
|
||||
include 'feature_articles/**'
|
||||
include 'voice/**'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -348,7 +345,7 @@ dependencies {
|
|||
implementation 'org.immutables:gson:2.5.0'
|
||||
implementation 'com.vividsolutions:jts-core:1.14.0'
|
||||
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
|
||||
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
|
||||
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||
|
@ -373,5 +370,4 @@ dependencies {
|
|||
}
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'org.bouncycastle:bcpkix-jdk15on:1.56'
|
||||
implementation 'com.google.android.play:core:1.9.1'
|
||||
}
|
|
@ -57,5 +57,5 @@ project.afterEvaluate {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
implementation 'com.google.android.gms:play-services-location:17.1.0'
|
||||
}
|
||||
|
|
|
@ -36,9 +36,9 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
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
|
||||
versionName "4.0.0"
|
||||
versionName "3.9.0"
|
||||
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
|
||||
}
|
||||
|
@ -187,6 +187,18 @@ dependencies {
|
|||
opengldebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
|
||||
openglImplementation "net.osmand:OsmAndCore_androidNativeRelease: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'
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
15
OsmAnd/res/drawable/seekbar_progress_announcement_time.xml
Normal file
15
OsmAnd/res/drawable/seekbar_progress_announcement_time.xml
Normal 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>
|
13
OsmAnd/res/drawable/seekbar_thumb_announcement_time.xml
Normal file
13
OsmAnd/res/drawable/seekbar_thumb_announcement_time.xml
Normal 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>
|
|
@ -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>
|
|
@ -9,8 +9,8 @@
|
|||
<gradient
|
||||
android:angle="90"
|
||||
android:startColor="#1A000000"
|
||||
android:centerColor="#00000000"
|
||||
android:endColor="#00000000" />
|
||||
android:centerColor="#00FFFFFF"
|
||||
android:endColor="#00FFFFFF" />
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
@ -23,8 +23,8 @@
|
|||
<gradient
|
||||
android:angle="90"
|
||||
android:startColor="#0D000000"
|
||||
android:centerColor="#00000000"
|
||||
android:endColor="#00000000" />
|
||||
android:centerColor="#00FFFFFF"
|
||||
android:endColor="#00FFFFFF" />
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_gravity="start"
|
||||
android:layout_marginTop="@dimen/dashboard_map_toolbar"
|
||||
android:background="?attr/activity_background_basic"
|
||||
android:visibility="gone">
|
||||
|
||||
<net.osmand.plus.views.controls.DynamicListView
|
||||
|
|
|
@ -16,34 +16,20 @@
|
|||
android:focusable="true"
|
||||
android:orientation="vertical"
|
||||
android:clickable="true"
|
||||
tools:ignore="UselessParent">
|
||||
tools:background="@drawable/bg_bottom_menu_dark">
|
||||
|
||||
<FrameLayout
|
||||
<ProgressBar
|
||||
android:id="@+id/snap_to_road_progress_bar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
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
|
||||
android:id="@+id/snap_to_road_progress_bar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="0dp"
|
||||
android:background="?attr/list_background_color"
|
||||
android:visibility="invisible"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</FrameLayout>
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="0dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/main_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/list_background_color">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/up_down_row"
|
||||
|
@ -67,19 +53,6 @@
|
|||
android:background="@null"
|
||||
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
|
||||
android:id="@+id/up_down_button"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -92,7 +65,6 @@
|
|||
android:layout_marginRight="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null"
|
||||
android:visibility="gone"
|
||||
tools:src="@drawable/ic_action_arrow_down"/>
|
||||
|
||||
<TextView
|
||||
|
@ -188,9 +160,7 @@
|
|||
android:paddingRight="@dimen/measurement_tool_text_button_padding_small"
|
||||
android:text="@string/shared_string_options"
|
||||
android:textColor="?attr/color_dialog_buttons"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:paddingEnd="@dimen/measurement_tool_text_button_padding_small"
|
||||
android:paddingStart="@dimen/measurement_tool_text_button_padding_small" />
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -225,13 +195,11 @@
|
|||
<include
|
||||
android:id="@+id/add_point_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_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:minWidth="@dimen/measurement_tool_button_width" />
|
||||
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -243,15 +211,14 @@
|
|||
|
||||
<include
|
||||
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_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_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="@dimen/measurement_tool_button_margin"
|
||||
android:layout_marginRight="@dimen/measurement_tool_button_margin"
|
||||
android:minWidth="@dimen/measurement_tool_button_width" />
|
||||
layout="@layout/bottom_sheet_dialog_button" />
|
||||
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
|
|
|
@ -659,7 +659,6 @@
|
|||
<!-- CENTER -->
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/top_controls_container"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
|
|
|
@ -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"/>
|
|
@ -17,9 +17,7 @@
|
|||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding_small"
|
||||
android:tint="?attr/default_icon_color"
|
||||
osmand:srcCompat="@drawable/ic_action_user_account"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding" />
|
||||
osmand:srcCompat="@drawable/ic_action_user_account" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -28,9 +26,7 @@
|
|||
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/subHeaderPadding"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding">
|
||||
android:orientation="vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/account_title"
|
||||
|
|
|
@ -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>
|
|
@ -86,8 +86,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
android:layout_marginRight="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding_small"
|
||||
android:layout_marginEnd="@dimen/content_padding_small" />
|
||||
android:paddingBottom="@dimen/content_padding" />
|
||||
|
||||
</LinearLayout>
|
|
@ -62,12 +62,18 @@
|
|||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Normal" />
|
||||
|
||||
<com.google.android.material.slider.Slider
|
||||
android:id="@+id/arrival_slider"
|
||||
<SeekBar
|
||||
android:id="@+id/seek_bar_arrival"
|
||||
style="@style/Widget.AppCompat.SeekBar.Discrete"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding" />
|
||||
android:layout_marginTop="@dimen/pages_item_margin"
|
||||
android:maxHeight="2dp"
|
||||
android:paddingTop="11dp"
|
||||
android:paddingBottom="11dp"
|
||||
osmand:tickMark="@drawable/seekbar_tickmark_announcement_time"
|
||||
tools:max="3"
|
||||
tools:progress="1" />
|
||||
|
||||
<View
|
||||
android:id="@+id/divider"
|
||||
|
|
|
@ -3,13 +3,14 @@
|
|||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:background="@drawable/btn_background_inactive_dark">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/button_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:orientation="horizontal"
|
||||
|
@ -19,6 +20,7 @@
|
|||
android:paddingEnd="@dimen/content_padding_small"
|
||||
android:paddingRight="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/text_margin_small"
|
||||
tools:background="@drawable/btn_background_inactive_dark"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -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>
|
|
@ -8,9 +8,7 @@
|
|||
android:paddingBottom="@dimen/content_padding_small"
|
||||
android:minHeight="@dimen/card_row_min_height"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
|
|
|
@ -57,9 +57,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/content_padding_half"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding">
|
||||
android:layout_marginRight="@dimen/content_padding">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/text"
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingEnd="@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
|
||||
android:id="@+id/title"
|
||||
|
@ -41,8 +41,7 @@
|
|||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:saveEnabled="false" />
|
||||
android:focusableInTouchMode="false" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -7,6 +7,4 @@
|
|||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/content_padding_small"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding" />
|
||||
android:paddingBottom="@dimen/content_padding_small" />
|
||||
|
|
|
@ -11,9 +11,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding">
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@android:id/title"
|
||||
|
@ -45,8 +43,6 @@
|
|||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding" />
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
|
@ -1,5 +1,6 @@
|
|||
<?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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_large_list_item_height"
|
||||
|
@ -7,7 +8,6 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/descriptionContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_large_list_item_height"
|
||||
android:gravity="center_vertical"
|
||||
|
|
|
@ -1,63 +1,63 @@
|
|||
<?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:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
<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:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
android:paddingEnd="@dimen/content_padding">
|
||||
|
||||
<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"
|
||||
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||
tools:src="@drawable/list_destination" />
|
||||
<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"
|
||||
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||
tools:src="@drawable/list_destination"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
tools:text="Some title" />
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
tools:text="Some title"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:textColor="@null"
|
||||
tools:text="Some description" />
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:textColor="@null"
|
||||
tools:text="Some description"/>
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/compound_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:saveEnabled="false" />
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/compound_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -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>
|
|
@ -90,9 +90,7 @@
|
|||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/end_button_icon"
|
||||
|
|
|
@ -90,9 +90,7 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
tools:src="@drawable/ic_action_info_dark"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding" />
|
||||
tools:src="@drawable/ic_action_info_dark" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue