diff --git a/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java b/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java index 73d831f6ee..cb1307d3b5 100644 --- a/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java +++ b/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java @@ -800,7 +800,7 @@ public abstract class ByteString implements Iterable { // Copy the information we need into local variables so as to hold // the lock for as short a time as possible. cachedFlushBuffers = - flushedBuffers.toArray(new ByteString[flushedBuffers.size()]); + flushedBuffers.toArray(new ByteString[0]); cachedBuffer = buffer; cachedBufferPos = bufferPos; } diff --git a/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java b/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java index 2663694fc3..02ec66309e 100644 --- a/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java +++ b/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java @@ -242,8 +242,7 @@ final class FieldSet nextPolyGeom = new ArrayList<>(); boolean valid = true; // Add exterior ring @@ -362,7 +361,7 @@ public final class JtsAdapter { CoordinateArrays.reverse(exteriorRing.getCoordinates()); } - nextPolyGeom.addAll(linesToGeomCmds(exteriorRing, mvtClosePath, cursor, 2)); + final List nextPolyGeom = new ArrayList<>(linesToGeomCmds(exteriorRing, mvtClosePath, cursor, 2)); // Add interior rings diff --git a/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java b/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java index 6083ca980e..73ce9eeb12 100644 --- a/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java +++ b/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java @@ -322,7 +322,7 @@ public final class MvtReader { geoms.add(geomFactory.createLineString(nextCoordSeq)); } - return geoms.size() == 1 ? geoms.get(0) : geomFactory.createMultiLineString(geoms.toArray(new LineString[geoms.size()])); + return geoms.size() == 1 ? geoms.get(0) : geomFactory.createMultiLineString(geoms.toArray(new LineString[0])); } /** @@ -450,7 +450,7 @@ public final class MvtReader { return polygons.get(0); } else { - return geomFactory.createMultiPolygon(polygons.toArray(new Polygon[polygons.size()])); + return geomFactory.createMultiPolygon(polygons.toArray(new Polygon[0])); } } @@ -512,7 +512,7 @@ public final class MvtReader { if (area > 0d) { if (outerPoly != null) { - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); holes.clear(); } @@ -533,7 +533,7 @@ public final class MvtReader { if (outerPoly != null) { holes.toArray(); - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); } return polygons; @@ -569,7 +569,7 @@ public final class MvtReader { if (outerPoly == null || (outerArea < 0 == area < 0)) { if (outerPoly != null) { - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); holes.clear(); } @@ -590,7 +590,7 @@ public final class MvtReader { if (outerPoly != null) { holes.toArray(); - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); } return polygons; diff --git a/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java b/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java index 1d1b1da020..b8835ff2c6 100644 --- a/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java +++ b/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java @@ -1247,7 +1247,7 @@ public class GPXUtilities { } } } - g.prepareInformation(fileTimestamp, splitSegments.toArray(new SplitSegment[splitSegments.size()])); + g.prepareInformation(fileTimestamp, splitSegments.toArray(new SplitSegment[0])); return g; } diff --git a/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java b/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java index 8c2a4baf32..e4862d3bfe 100644 --- a/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java +++ b/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java @@ -68,7 +68,7 @@ public class TspHeldKarp { } break; } - System.err.printf("."); + System.err.print("."); PriorityQueue children = new PriorityQueue(11, new NodeComparator()); children.add(exclude(currentNode, i, currentNode.parent[i])); for (int j = 0; j < n; j++) { diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java index f9015ec48d..5e45a893ba 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java @@ -2501,8 +2501,9 @@ public class BinaryMapIndexReader { } } } - for (MapObject e : resMap.keySet()) { - Street s = resMap.get(e); + for (Entry entry : resMap.entrySet()) { + MapObject e = entry.getKey(); + Street s = entry.getValue(); if (e instanceof Building && MapUtils.getDistance(e.getLocation(), lat, lon) < 40) { Building b = (Building) e; System.out.println(b.getName() + " " + s); diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java b/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java index 4a4bec70a2..63c81d13fa 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java @@ -241,9 +241,7 @@ public class CachedOsmandIndexes { cblock.type = mr.getType(); mi.cities.add(cblock); } - for(String s : index.getAdditionalTagsList()) { - mi.attributeTagsTable.add(s); - } + mi.attributeTagsTable.addAll(index.getAdditionalTagsList()); reader.addressIndexes.add(mi); reader.indexes.add(mi); } diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java b/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java index bfe638d394..bc81ca667e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java @@ -329,7 +329,7 @@ public class RouteDataObject { 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 = ("".equals(destRef)) ? "" : destRef + ", "; + String destRef1 = Algorithms.isEmpty(destRef) ? "" : destRef + ", "; if(names != null) { int[] kt = names.keys(); @@ -373,7 +373,7 @@ public class RouteDataObject { return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(destinationDefault) : destinationDefault); } } - return "".equals(destRef) ? null : destRef; + return Algorithms.isEmpty(destRef) ? null : destRef; } public int getPoint31XTile(int i) { diff --git a/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java b/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java index bf8c0a4964..6fb6db0f3c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java @@ -61,9 +61,9 @@ public class Multipolygon { innerLinearRings.add(innerRing.toLinearRing()); } } - polygons.add(geometryFactory.createPolygon(outerRing.toLinearRing(), innerLinearRings.toArray(new LinearRing[innerLinearRings.size()]))); + polygons.add(geometryFactory.createPolygon(outerRing.toLinearRing(), innerLinearRings.toArray(new LinearRing[0]))); } - return geometryFactory.createMultiPolygon(polygons.toArray(new Polygon[polygons.size()])); + return geometryFactory.createMultiPolygon(polygons.toArray(new Polygon[0])); } public long getId() { diff --git a/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java b/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java index 9885aa2fbf..d9924dc9c6 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java @@ -140,7 +140,7 @@ public class TileSourceManager { } } } - return randoms.toArray(new String[randoms.size()]); + return randoms.toArray(new String[0]); } public void setMinZoom(int minZoom) { @@ -518,8 +518,8 @@ public class TileSourceManager { } if (override || !metainfo.exists()) { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(metainfo))); - for (String key : properties.keySet()) { - writer.write("[" + key + "]\n" + properties.get(key) + "\n"); + for (Map.Entry entry : properties.entrySet()) { + writer.write("[" + entry.getKey() + "]\n" + entry.getValue() + "\n"); } writer.close(); } diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java index d996678e44..bcbcbfc2b0 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java @@ -96,8 +96,9 @@ public abstract class MapRenderingTypes { Map common = new HashMap(); String ATTACHED_KEY = "seamark:attached"; String type = ""; - for (String s : tags.keySet()) { - String value = tags.get(s); + for (Entry entry : tags.entrySet()) { + String s = entry.getKey(); + String value = entry.getValue(); if (s.equals("seamark:type")) { type = value; common.put(ATTACHED_KEY, openSeaType(value)); diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java b/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java index 8c3aef8163..9caa54b55c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java @@ -33,9 +33,10 @@ public class EntityParser { if (mo.getEnName(false).length() == 0) { mo.setEnName(tags.get(OSMTagKey.NAME_EN.getValue())); } - for (String ts : tags.keySet()) { + for (Map.Entry entry : tags.entrySet()) { + String ts = entry.getKey(); if (ts.startsWith("name:") && !ts.equals(OSMTagKey.NAME_EN.getValue())) { - mo.setName(ts.substring(("name:").length()), tags.get(ts)); + mo.setName(ts.substring(("name:").length()), entry.getValue()); } } if (mo.getName().length() == 0) { diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java b/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java index 28a1ec3fb9..e3d162826c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java @@ -63,8 +63,8 @@ public class NetworkUtils { URL url; try { boolean firstPrm =!urlText.contains("?"); - for (String key : additionalMapData.keySet()) { - urlText += (firstPrm ? "?" : "&") + key + "=" + URLEncoder.encode(additionalMapData.get(key), "UTF-8"); + for (Map.Entry entry : additionalMapData.entrySet()) { + urlText += (firstPrm ? "?" : "&") + entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), "UTF-8"); firstPrm = false; } log.info("Start uploading file to " + urlText + " " +fileToUpload.getName()); diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java b/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java index f1c718465e..cf2f5a5acc 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java @@ -25,16 +25,16 @@ public class OsmOAuthAuthorizationClient { private final OsmAndJDKHttpClient httpClient; public final static Log log = PlatformUtil.getLog(OsmOAuthAuthorizationClient.class); - public OsmOAuthAuthorizationClient(String key, String secret) { + public OsmOAuthAuthorizationClient(String key, String secret, DefaultApi10a api) { httpClient = new OsmAndJDKHttpClient(JDKHttpClientConfig.defaultConfig()); service = new ServiceBuilder(key) .apiSecret(secret) .httpClient(httpClient) .callback("osmand-oauth://example.com/oauth") - .build(new OsmApi()); + .build(api); } - static class OsmApi extends DefaultApi10a { + public static class OsmApi extends DefaultApi10a { @Override public OAuth1SignatureType getSignatureType() { return OAuth1SignatureType.QUERY_STRING; @@ -56,6 +56,28 @@ public class OsmOAuthAuthorizationClient { } } + public static class OsmDevApi extends DefaultApi10a { + @Override + public OAuth1SignatureType getSignatureType() { + return OAuth1SignatureType.QUERY_STRING; + } + + @Override + public String getRequestTokenEndpoint() { + return "https://master.apis.dev.openstreetmap.org/oauth/request_token"; + } + + @Override + public String getAccessTokenEndpoint() { + return "https://master.apis.dev.openstreetmap.org/oauth/access_token"; + } + + @Override + protected String getAuthorizationBaseUrl() { + return "https://master.apis.dev.openstreetmap.org/oauth/authorize"; + } + } + public OsmAndJDKHttpClient getHttpClient() { return httpClient; } diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java index 0ae4314dd9..b402cca664 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java @@ -70,7 +70,7 @@ public class RenderingRule { i++; } } - properties = props.toArray(new RenderingRuleProperty[props.size()]); + properties = props.toArray(new RenderingRuleProperty[0]); } private int getPropertyIndex(String property){ diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java index 3eafb803dd..4ae767561e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java @@ -318,7 +318,7 @@ public class RenderingRuleStorageProperties { } public RenderingRuleProperty[] getPoperties() { - return rules.toArray(new RenderingRuleProperty[rules.size()]); + return rules.toArray(new RenderingRuleProperty[0]); } public List getCustomRules() { diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java index d4d97d547c..cf97dd520c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java @@ -432,8 +432,7 @@ public class RenderingRulesStorage { for(RenderingRule ch : caseChildren) { List apply = applyRules; if(!renderingRule.getIfChildren().isEmpty()) { - apply = new ArrayList(); - apply.addAll(renderingRule.getIfChildren()); + apply = new ArrayList<>(renderingRule.getIfChildren()); if(applyRules != null) { apply.addAll(applyRules); } @@ -492,10 +491,10 @@ public class RenderingRulesStorage { } public String[] getRenderingAttributeNames() { - return renderingAttributes.keySet().toArray(new String[renderingAttributes.size()]); + return renderingAttributes.keySet().toArray(new String[0]); } public RenderingRule[] getRenderingAttributeValues() { - return renderingAttributes.values().toArray(new RenderingRule[renderingAttributes.size()]); + return renderingAttributes.values().toArray(new RenderingRule[0]); } public RenderingRule[] getRules(int state){ diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java index 86d0c2cb73..3acdeade26 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java @@ -152,9 +152,9 @@ public class RenderingRulesStoragePrinter { for (int i = 0; i < 15; i++) { out.println("" + indent + ti + "RenderingRule rule" + i + " = null;"); } - for (String s : storage.renderingAttributes.keySet()) { - generateRenderingRule(storage, out, indent + ti, "rule", 0, storage.renderingAttributes.get(s)); - out.println("" + indent + ti + "storage.renderingAttributes.put(" + javaString(s) + ", rule0);"); + for (Entry entry : storage.renderingAttributes.entrySet()) { + generateRenderingRule(storage, out, indent + ti, "rule", 0, entry.getValue()); + out.println("" + indent + ti + "storage.renderingAttributes.put(" + javaString(entry.getKey()) + ", rule0);"); } out.println(""+indent +"}"); } @@ -221,7 +221,7 @@ public class RenderingRulesStoragePrinter { mp+=", "; } } - if(mp.equals("")) { + if(mp.isEmpty()) { mp = "java.util.Collections.EMPTY_MAP"; } else { mp = "createMap(" +mp +")"; @@ -242,9 +242,9 @@ public class RenderingRulesStoragePrinter { private void printJavaInitConstants(RenderingRulesStorage storage, PrintStream out, String indent, String ti) { out.println("\n" + indent + "public void initConstants() {"); - for (String s : storage.renderingConstants.keySet()) { - out.println("" + indent + ti + "storage.renderingConstants.put(" + javaString(s) + ", " - + javaString(storage.renderingConstants.get(s)) + ");"); + for (Entry entry : storage.renderingConstants.entrySet()) { + out.println("" + indent + ti + "storage.renderingConstants.put(" + javaString(entry.getKey()) + ", " + + javaString(entry.getValue()) + ");"); } out.println(""+indent +"}"); } diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java index b41a741909..cd18ad958f 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java @@ -80,7 +80,7 @@ public class RenderingRulesTransformer { for (int i = 0; i < nl.getLength();) { Element app = (Element) nl.item(i); String pt = app.getAttribute("pattern"); - if (!pt.equals("")) { + if (!pt.isEmpty()) { if (!patterns.containsKey(pt)) { throw new IllegalStateException("Pattern '" + pt + "' is not defined"); } diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 537e3a5f74..e6d19c1d58 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -754,21 +754,21 @@ public class GeneralRouter implements VehicleRouter { } public RouteAttributeEvalRule[] getRules() { - return rules.toArray(new RouteAttributeEvalRule[rules.size()]); + return rules.toArray(new RouteAttributeEvalRule[0]); } public String[] getParamKeys() { if(paramContext == null) { return new String[0]; } - return paramContext.vars.keySet().toArray(new String[paramContext.vars.size()]); + return paramContext.vars.keySet().toArray(new String[0]); } public String[] getParamValues() { if(paramContext == null) { return new String[0]; } - return paramContext.vars.values().toArray(new String[paramContext.vars.size()]); + return paramContext.vars.values().toArray(new String[0]); } private Object evaluate(RouteDataObject ro) { @@ -988,19 +988,19 @@ public class GeneralRouter implements VehicleRouter { public RouteAttributeExpression[] getExpressions() { - return expressions.toArray(new RouteAttributeExpression[expressions.size()]); + return expressions.toArray(new RouteAttributeExpression[0]); } public String[] getParameters() { - return parameters.toArray(new String[parameters.size()]); + return parameters.toArray(new String[0]); } public String[] getTagValueCondDefTag() { - return tagValueCondDefTag.toArray(new String[tagValueCondDefTag.size()]); + return tagValueCondDefTag.toArray(new String[0]); } public String[] getTagValueCondDefValue() { - return tagValueCondDefValue.toArray(new String[tagValueCondDefValue.size()]); + return tagValueCondDefValue.toArray(new String[0]); } public boolean[] getTagValueCondDefNot() { diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java index 17eb567813..74dceb13a1 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java @@ -918,7 +918,7 @@ public class RoutePlannerFrontEnd { private List runNativeRouting(final RoutingContext ctx, RouteSegment recalculationEnd) throws IOException { refreshProgressDistance(ctx); - RouteRegion[] regions = ctx.reverseMap.keySet().toArray(new BinaryMapRouteReaderAdapter.RouteRegion[ctx.reverseMap.size()]); + RouteRegion[] regions = ctx.reverseMap.keySet().toArray(new RouteRegion[0]); ctx.checkOldRoutingFiles(ctx.startX, ctx.startY); ctx.checkOldRoutingFiles(ctx.targetX, ctx.targetY); diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java index d7ebbaba8f..4df69c3adc 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java @@ -1717,7 +1717,7 @@ public class RouteResultPreparation { } } } - Integer[] array = possibleTurns.toArray(new Integer[possibleTurns.size()]); + Integer[] array = possibleTurns.toArray(new Integer[0]); Arrays.sort(array, new Comparator() { @Override diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java index 3bfbaec0da..584be83bb3 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java @@ -802,7 +802,7 @@ public class RoutingContext { } public BinaryMapIndexReader[] getMaps() { - return map.keySet().toArray(new BinaryMapIndexReader[map.size()]); + return map.keySet().toArray(new BinaryMapIndexReader[0]); } public int getVisitedSegments() { diff --git a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java index 7428196332..13da3748bb 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java @@ -325,9 +325,7 @@ public class TransportStopsRouteReader { // merge first part if (commonStopFirst < commonStopSecond || (commonStopFirst == commonStopSecond && firstSegment.get(0).isMissingStop())) { - for (int i = 0; i <= commonStopFirst; i++) { - firstSegment.remove(0); - } + firstSegment.subList(0, commonStopFirst + 1).clear(); for (int i = commonStopSecond; i >= 0; i--) { firstSegment.add(0, segmentToMerge.get(i)); } diff --git a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java index 2a3fc59521..09dcdc372b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java @@ -720,7 +720,7 @@ public class SearchPhrase { if (result.containsKey(currRegionName)) { result.get(currRegionName).add(r); } else { - result.put(currRegionName, new ArrayList<>(Arrays.asList(r))); + result.put(currRegionName, new ArrayList<>(Collections.singletonList(r))); } it.remove(); } diff --git a/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java b/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java index 1383f4ae4a..951ae870e2 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java @@ -62,7 +62,7 @@ public class GeoPointParserUtil { private static Map getQueryParameters(String query) { final LinkedHashMap map = new LinkedHashMap(); - if (query != null && !query.equals("")) { + if (query != null && !query.isEmpty()) { String[] params = query.split("[&/]"); for (String p : params) { String[] keyValue = p.split("="); @@ -803,10 +803,10 @@ public class GeoPointParserUtil { if (map.size() > 0) uriString += "?"; int i = 0; - for (String key : map.keySet()) { + for (Map.Entry entry : map.entrySet()) { if (i > 0) uriString += "&"; - uriString += key + "=" + map.get(key); + uriString += entry.getKey() + "=" + entry.getValue(); i++; } return uriString; diff --git a/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java b/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java index 01fee5cd9e..f87a1d4d4e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java @@ -6,6 +6,7 @@ import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -1812,7 +1813,7 @@ public class OpeningHoursParser { TokenType currentParse = TokenType.TOKEN_UNKNOWN; TokenType currentParseParent = TokenType.TOKEN_UNKNOWN; List listOfPairs = new ArrayList<>(); - Set presentTokens = new HashSet<>(); + Set presentTokens = EnumSet.noneOf(TokenType.class); Token[] currentPair = new Token[2]; listOfPairs.add(currentPair); Token prevToken = null; diff --git a/OsmAnd-telegram/res/values-sr/strings.xml b/OsmAnd-telegram/res/values-sr/strings.xml index 52c261dbe5..4220079b9b 100644 --- a/OsmAnd-telegram/res/values-sr/strings.xml +++ b/OsmAnd-telegram/res/values-sr/strings.xml @@ -267,4 +267,8 @@ Последњи одговор: %1$ Последње ажурирање из Телеграма: %1$ Грешка + Извези + Logcat бафер + Проверите и поделите детаљне записе апликације + Пошаљи извештај \ No newline at end of file diff --git a/OsmAnd/build.gradle b/OsmAnd/build.gradle index a98bd8a695..a3a613bc9a 100644 --- a/OsmAnd/build.gradle +++ b/OsmAnd/build.gradle @@ -198,8 +198,6 @@ android { buildTypes { debug { buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" signingConfig signingConfigs.development debuggable false jniDebuggable false @@ -207,8 +205,6 @@ android { } release { buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" signingConfig signingConfigs.publishing } } diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index a5ec943f6a..460356e875 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -4,7 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/custom_radio_buttons" android:layout_width="match_parent" - android:layout_height="@dimen/dialog_button_height" + android:minHeight="@dimen/dialog_button_height" + android:layout_height="wrap_content" android:layout_marginStart="@dimen/content_padding" android:layout_marginEnd="@dimen/content_padding" android:background="?attr/btn_bg_border_inactive" @@ -25,27 +26,18 @@ android:background="?attr/selectableItemBackground" android:gravity="center" android:textSize="@dimen/default_desc_text_size" + android:textColor="@drawable/radio_flat_text_selector_light" osmand:typeface="@string/font_roboto_medium" tools:text="@string/shared_string_left"/> - - + android:layout_weight="0" + android:background="?attr/divider_color"> @@ -61,8 +53,9 @@ android:layout_height="match_parent" android:background="?attr/selectableItemBackground" android:gravity="center" - android:textSize="@dimen/default_desc_text_size" + android:textColor="@drawable/radio_flat_text_selector_light" osmand:typeface="@string/font_roboto_medium" + android:textSize="@dimen/default_desc_text_size" tools:text="@string/shared_string_right"/> diff --git a/OsmAnd/res/layout/fragment_measurement_tool.xml b/OsmAnd/res/layout/fragment_measurement_tool.xml index 2fe4dc1416..82cd085ec9 100644 --- a/OsmAnd/res/layout/fragment_measurement_tool.xml +++ b/OsmAnd/res/layout/fragment_measurement_tool.xml @@ -30,22 +30,23 @@ + tools:src="@drawable/ic_action_ruler" /> + + + - - @@ -150,6 +160,11 @@ + + Utilitza mapes en línia (les tessel·les es baixen i es desen a la tarja de memòria). Mapes en línia Seleccioneu les fonts de mapes de tessel·les en línia o a la memòria cau. - "Fa disponible directament des OsmAnd les característiques d\'accessibilitat del dispositiu. Us permet, per exemple, ajustar la velocitat de la veu sintetitzada, configurar la navegació amb cursors, utilitzant un ratolí de bola per controlar el zoom o rebre notificacions amb veu sintetitzada, per exemple per anunciar automàticament la vostra posició." + Fa disponible directament des OsmAnd les característiques d\'accessibilitat del dispositiu. Us permet, per exemple, ajustar la velocitat de la veu sintetitzada, configurar la navegació amb cursors, utilitzant un ratolí de bola per controlar el zoom o rebre notificacions amb veu sintetitzada, per exemple per anunciar automàticament la vostra posició. Gestor de connectors Cerca de PDI (punt d\'interès) Gestor de connectors @@ -351,55 +351,38 @@ Carpeta d\'emmagatzematge de dades OsmAnd (OSM Automated Navigation Directions) \n -\n \nOsmAnd és una aplicació de navegació feta amb programari de codi obert amb accés a una gran varietat de dades globals d\'OSM. Totes les dades dels mapes (siguin mapes vectorials o de tessel·les), es poden desar a la targeta de memòria del telèfon pel seu en desconnexió. També calcula rutes, amb connexió o sense, incloent l\'orientació per veu. \n -\n -\nAlgunes de les característiques principals: -\n -\n- Funcionament complet en desconnexió (desa localment els mapes vectorials i de tessel·les baixats) -\n -\n- Mapes vectorials compactes de tot el món per usar en desconnexió -\n -\n- Baixada de mapes nacionals o regionals directament des de l\'aplicació -\n -\n- Diverses capes de mapes alhora, com traces GPX o de navegació, punts d\'interès, Preferits, parades de transport públic, etc. amb nivell d\'opacitat personalitzada -\n -\n- Cerca, fora de línia, d\'adreces i llocs -\n +\nAlgunes de les característiques principals: +\n- Funcionament complet en desconnexió (desa localment els mapes vectorials i de tessel·les baixats) +\n- Mapes vectorials compactes de tot el món per usar en desconnexió +\n- Baixada de mapes nacionals o regionals directament des de l\'aplicació +\n- Diverses capes de mapes alhora, com traces GPX o de navegació, punts d\'interès, Preferits, parades de transport públic, etc. amb nivell d\'opacitat personalitzada +\n- Cerca, fora de línia, d\'adreces i llocs \n- Càlcul de rutes fora de línia fins per distàncies d\'abast mitjà. +\n- Modalitats opcionals de cotxe, bicicleta i vianant +\n- Canvi automàtic de vista diürna a nocturna +\n- Escala del mapa en funció de la velocitat +\n- Orientació del mapa segons la brúixola o la direcció del moviment +\n- Indicació de carril, velocitat màxima permesa, veus enregistrades i/o sintetitzades \n -\n- Modalitats opcionals de cotxe, bicicleta i vianant +\nLimitacions d\'aquesta versió gratuïta de OsmAnd: +\n- Limitació en el nombre de mapes baixats +\n- No hi ha accés als PDIs de la Viquipèdia sense connexió \n -\n- Canvi automàtic de vista diürna a nocturna -\n -\n- Escala del mapa en funció de la velocitat -\n -\n- Orientació del mapa segons la brúixola o la direcció del moviment -\n -\n- Indicació de carril, velocitat màxima permesa, veus enregistrades i/o sintetitzades -\n -\n -\nLimitacions d\'aquesta versió gratuïta de OsmAnd: -\n -\n- Limitació en el nombre de mapes baixats -\n -\n- No hi ha accés als PDIs de la Viquipèdia sense connexió -\n -\n \nOsmAnd es desenvolupa activament i el nostre projecte i el seu progrés continu depenen de donacions pel desenvolupament i proves de noves funcions. Si us plau, considereu la compra d\'OsmAnd+ o patrocinar una nova característica concreta, o fer una donació genèrica a la pàgina https\\\\osmand.net. - "OsmAnd+ (OSM Automated Navigation Directions) + OsmAnd+ (OSM Automated Navigation Directions) \n \nL\'OsmAnd+ és un programari de navegació de codi obert amb accés a una gran varietat de dades globals de OSM. Totes les dades de mapes (mapes de tessel·les o vectorials) poden emmagatzemar-se a la targeta de memòria del telèfon pel seu ús sense connexió. També proporciona la funcionalitat de càlcul de rutes sigui amb connexió o sense, incloent orientació per veu. \n \nL\'OsmAnd+ és la versió de pagament; comprant-la esteu donant suport al projecte, financeu el desenvolupament de noves funcions i rebreu les darreres actualitzacions. \n \nAlgunes de les característiques centrals són: -\n- Funcionalitat completa fora de línia (desa en el dispositiu d\'emmagatzemament els mapes vectorials i de mosaic baixats) +\n- Funcionalitat completa fora de línia (desa en el dispositiu d\'emmagatzemament els mapes vectorials i de mosaic baixats) \n- Mapes vectorials compactes de tot el món disponibles \n- Baixada il·limitada de mapes nacionals o regionals directament des de l\'aplicació \n- Disponibilitat sense connexió dels PDI baixats prèviament de Viquipèdia, ideal per fer turisme -\n- Possibilitat de superposar diverses capes de mapes simultànies, com traces GPX o de navegació, Punts d\'interès, Favorits, corbes de nivell, parades de transport públic, mapes addicionals amb nivell de transparència ajustable +\n- Possibilitat de superposar diverses capes de mapes simultànies, com traces GPX o de navegació, Punts d\'interès, Favorits, corbes de nivell, parades de transport públic, mapes addicionals amb nivell de transparència ajustable \n \n- Cerca fora de línia d\'adreces i llocs (PDIs) \n- Càlcul de rutes fora de línia per distàncies d\'abast mitjà @@ -408,7 +391,7 @@ \n- Escala automàtica del mapa segons la velocitat \n- Orientació del mapa segons la brúixola o la direcció del moviment \n- Indicacions de carril, velocitat màxima permesa, veus enregistrades i sintetitzades -\n" +\n Seleccioneu el nivell mínim de zoom per mostrar el mapa si està disponible. Caldrà el fitxer SRTM separat: Aquest connector mostra la configuració de característiques per al desenvolupament i depuració com la verificació o simulació de rutes, el rendiment del renderitzat o les indicacions de veu. Aquestes configuracions s\'adrecen a desenvolupadors i no són d\'utilitat per a un usuari normal. En consonància amb la configuració del sistema Android @@ -578,7 +561,7 @@ Mapa superposat Temps de sincronització del mapa seguint la nova posició. Mapa de fons - Escolliu mapa de fons. + Escolliu mapa de fons Escolliu el mapa superposat Llengua de visualització de l\'aplicació (s\'actualitzarà quan reinicieu OsmAnd). ft @@ -605,7 +588,7 @@ El mateix que el dispositiu Afegir nova regla No hi ha dades PDI fora de linía per a aquesta area - "No s\'ha pogut actualitzar la llista local de PDIs" + No s\'ha pogut actualitzar la llista local de PDIs. Max. zooms en linía Servei de navegació Baixant llista de les regions disponibles… @@ -641,7 +624,7 @@ Edita el PDI Elimina el PDI Crea un PDI - "Gràcies per utilitzar l\'OsmAnd. Baixeu informació regional fora de línia a través de \'Configuració\' → \'Gestió de fitxers de mapes\' per veure mapes, situar adreces, buscar els PDIs, trobar transports públics i més." + Gràcies per utilitzar l\'OsmAnd. Baixeu informació regional fora de línia a través de \'Configuració\' → \'Gestió de fitxers de mapes\' per veure mapes, situar adreces, buscar els PDIs, trobar transports públics i més. El mapa mundial de fons necessari per les funcionalitats bàsiques està a la cua de baixades. Mostra paràmetres per activar el seguiment i la navegació en procés de fons mitjançant l\'activació periòdica del dispositiu GPS (amb la pantalla apagada). Preferències relatives a l\'accessibilitat. @@ -690,7 +673,7 @@ Seleccioneu un paquet de guiatge de veu Ajusteu el criteri de commutació entre el mode nocturn i el diürn. Aquest mapa podria no haver-se baixat - No s\'ha pogut dibuixar l\'àrea triada + No s\'ha pogut dibuixar l\'àrea triada. Utilitza la ubicació… El renderitzador s\'ha carregat No hi ha punts Preferits @@ -701,8 +684,8 @@ Transport públic Emergències Restaurants - "Permet fer contribucions a OSM com la creació o modificació de PDIs d\'OSM, obrir o comentar anotacions OSM i aportar fitxers enregistrats GPX amb OsmAnd en subministrar el vostre usuari i contrasenya. OpenStreetMap.org és un projecte gestionat per una comunitat, de domini públic i de cartografia global." - "La llengua seleccionada no està suportada per el motor de TTS (text a veu) d\'Android instal·lat, s\'usarà la llengua del TTS per defecte. Voleu buscar un altre motor TTS a la botiga\?" + Permet fer contribucions a OSM com la creació o modificació de PDIs d\'OSM, obrir o comentar anotacions OSM i aportar fitxers enregistrats GPX amb OsmAnd en subministrar el vostre usuari i contrasenya. OpenStreetMap.org és un projecte gestionat per una comunitat, de domini públic i de cartografia global. + La llengua seleccionada no està suportada per el motor de TTS (text a veu) d\'Android instal·lat, s\'usarà la llengua del TTS per defecte. Voleu buscar un altre motor TTS a la botiga\? Comparteix l\'ubicació usant Format de mapa «{0}» obsolet, no s\'admet Màxim zoom en precàrrega @@ -711,7 +694,7 @@ Resultats de transport ({0} al destí): La llibreria seleccionada de missatges de veu no està disponible Esperant el senyal… - No es pot canviar el format d\'horaris d\'obertura + No es pot canviar el format d\'horaris d\'obertura. prioritza distancia Aplicació de navegació OsmAnd Accediu a diferents tipus de mapa (anomenats de tessel·les o de bits), des de les tessel·les predefinides d\'OSM (com Mapnik) a imatges de satèl·lit i capes específiques com mapes meteorològics, climàtics, geològics, de relleu, etc. @@ -793,7 +776,7 @@ Objectiu El filtre \'%1$s\' s\'ha eliminat Les dades dels PDI s\'han actualitzat (se n\'han carregat {0}) - No s\'han pogut carregar dades del servidor + No s\'han pogut carregar dades del servidor. Acostar el zoom us permet actualitzar els PDIs Voleu actualitzar les dades locals des d\'Internet? Edificis: {0}, {1}, {2} @@ -814,7 +797,7 @@ Voleu eliminar aquest filtre\? Sense ruta Àudio de trucada telefònica (interrupció de la música Bluetooth del cotxe) - "Habiliteu el connector \"Enregistrament de ruta\" per utilitzar els serveis de registre d\'ubicació (enregistrament GPX, seguiment en directe)" + Habiliteu el connector \"Enregistrament de ruta\" per utilitzar els serveis de registre d\'ubicació (enregistrament GPX, seguiment en directe) Habiliteu el GPS a les preferències L\'aplicació ZXing Barcode Scanner no està instal·lada. La voleu cercar a Google Play? Esquema de color de carreteres @@ -875,7 +858,7 @@ peces Línies de nivell Corbes de nivell - "Carreteres " + Carreteres Mapes estàndards No mostris els límits administratius regionals (nivells 5 a 9). Límit de velocitat @@ -918,7 +901,7 @@ Espera màxima per corregir Dades d\'àudio/vídeo Esteu segur què voleu aturar la navegació? - "N\'esteu segur que voleu eliminar la vostra destinació (i les vostres fites)?" + N\'esteu segur que voleu eliminar la vostra destinació (i les vostres fites)\? Mostra Fotografia %1$s %2$s Fes una fotografia @@ -1091,9 +1074,9 @@ Info depuració FPS Ordre optimitzat de les fites de la ruta fins a la destinació. Creació d\'itineraris prement el mapa o utilitzant o modificant fitxers GPX existents, per planificar un trajecte i mesurar la distància entre punts. El resultat es pot desar com un fitxer GPX que podreu usar més endavant com una referència. - "Des de la versió 4.4 d\'Android (KitKat) no podeu baixar i actualitzar els mapes en l\'antiga carpeta (%s). Voleu copiar tots els fitxers de l\'OsmAnd a la nova destinació? -\n Nota 1: Els vostres fitxers obsolets quedaran intactes (els podeu esborrar manualment). -\n Nota 2: En el nou lloc d\'emmagatzemament no serà possible compartir fitxers entre l\'OsmAnd i l\'OsmAnd+." + Des de la versió 4.4 d\'Android (KitKat) no podeu baixar i actualitzar els mapes en l\'antiga carpeta (%s). Voleu copiar tots els fitxers de l\'OsmAnd a la nova destinació\? +\n Nota 1: Els vostres fitxers obsolets quedaran intactes (els podeu esborrar manualment). +\n Nota 2: En el nou lloc d\'emmagatzemament no serà possible compartir fitxers entre l\'OsmAnd i l\'OsmAnd+. S\'està copiant el fitxer (%s) a la nova destinació… S\'estan copiant els fitxers de dades de l\'OsmAnd a la nova destinació (%s)… S\'estan copiant fitxers de dades de l\'OsmAnd… @@ -1304,7 +1287,7 @@ Als darrers metres Edificis amb colors codificats per tipus Mida d\'imatge de la càmera - Estableix la mida de la imatge de la càmera. + Estableix la mida de la imatge de la càmera Mapa esquemàtic Cotxe Bicicleta @@ -1319,7 +1302,6 @@ Tot Aquest connector activa la funcionalitat d\'enregistrar i desar els vostres trajectes, sigui prement sobre el mapa el giny de gravació GPX, o sigui desant-los tots en un fitxer GPX automàticament. \n -\n \nLes rutes enregistrades es poden compartir amb els vostres amics o aportar-les per ser utilitzades a OSM. Els atletes poden utilitzar els seus registres per monitoritzar els seus entrenaments. Es pot fer una anàlisi bàsica de les rutes directament a OsmAnd com la durada de cada volta, velocitat mitjana, etc., i, per descomptat, es poden analitzar amb eines especialitzades de tercers. Enregistrament de trajectes h @@ -1373,7 +1355,7 @@ Amaga Activa la pantalla Activa la pantalla del dispositiu (si no ho està) en aproximar-se a un gir. - "%1$s necessita aquest permís per la funcionalitat de posar la pantalla en mode d\'estalvi d\'energia." + %1$s necessita aquest permís per la funcionalitat de posar la pantalla en mode d\'estalvi d\'energia. Mai Inici Cerca per @@ -1521,10 +1503,10 @@ No utilitzeu Adreça Aquest connector completa el mapa OsmAnd i la seva navegació en produir mapes nàutics per cabotatge, regates i altres tipus de esports d\'aigua. - -Un complement de mapa específic per OsmAnd us proporcionarà tot tipus de senyals nàutiques i símbols gràfics, per navegació interior o propera a la costa. La descripció de cada senyal de navegació us donarà els detalls que calguin per identificar-les i del seu significat (categoria, forma, color, seqüència, referència, etc.). - -Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aquest connector o canviar a com es desitgi <<Estil del Mapa>> dins <<Configuració del Mapa>>. +\n +\nUn complement de mapa específic per OsmAnd us proporcionarà tot tipus de senyals nàutiques i símbols gràfics, per navegació interior o propera a la costa. La descripció de cada senyal de navegació us donarà els detalls que calguin per identificar-les i del seu significat (categoria, forma, color, seqüència, referència, etc.). +\n +\nPer retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aquest connector o canviar a com es desitgi <<Estil del Mapa>> dins <<Configuració del Mapa>>. Aquest connector per l\'OsmAnd us proporciona els detalls de les pistes d\'esquí en baixada, de travessa i alpí així com de telefèrics i remuntadors a tot el món. Les rutes i pistes es mostren amb el codi de colors que els correspon segons la seva dificultat i amb un estil de mapa especial «Hivern» que s\'associa a un paisatge nevat. \n \nEn activar aquests canvis de visualització l\'estil del mapa canvia a «Hivern i esquí», i es mostren totes les característiques del paisatge a l\'hivern. Aquesta vista es pot revertir tant en activar-la altra cop com en canviar-la a «Estil del mapa» dins «Configuració del mapa». @@ -1712,7 +1694,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu Utilitzeu un nom de categoria que encara no existeixi. Nom de categoria Afegeix una nova categoria - "El mapa restringit a carreteres no cal, donat que ja teniu el mapa estàndard (complet). Que baixi igualment?" + El mapa restringit a carreteres no cal, donat que ja teniu el mapa estàndard (complet). Que baixi igualment\? %1$.1f de %2$.1f MB %.1f MB Actualitzeu tot (%1$s MB) @@ -1729,7 +1711,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu El mapa de %1$s està a punt per ser utilitzat. Mostra el mapa El mapa base mundial (d\'abast mundial i poc detall) no es troba o està caducat. Considereu baixar-lo per una tenir una perspectiva global. - Si es desactiva s\'engega amb la pantalla del mapa. + «Desactivat» inicia el mapa directament. Indiqueu el nom del país Pujada S\'ha creat un PDI a OSM @@ -1929,11 +1911,10 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu Marcadors actius Marcadors de mapa Marcador de mapa - El nom de fitxer inclou un caràcter il·legal + Caràcter il·legal en el nom del fitxer Afegiu els marcadors de mapa amb el mapa Aquesta subscripció permet actualitzacions horàries de tots els mapes del món. \nPart dels ingressos es retornen a la comunitat OSM en retribuir cada contribució OSM. -\n \nSi aprecieu OsmAnd i OSM i els voleu recolzar mentre l\'utilitzeu, aquesta és la via perfecta per fer-ho. Pugeu la vostra nota OSM anònimament o utilitzant el vostre perfil OpenStreetMap.org. Afegeix un lapse de temps @@ -2020,7 +2001,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu És necessari per baixar mapes. Cercant la localització… Espai lliure - "Magatzem de dades d\'OsmAnd (per mapes, fitxers GPX, etc.): %1$s." + Magatzem de dades d\'OsmAnd (per mapes, traces, etc.): %1$s. Autoritza Permet accedir a la localització Troba la meva localització @@ -2180,11 +2161,11 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu S\'ha canviat el mapa de fons a \"%s\". Codi de localització obert OLC no vàlid - +\n OLC curt -Proporcioneu el codi complet - OLC complet vàlid -Abasta l\'àrea: %1$s x %2$s +\nProporcioneu el codi complet + OLC complet vàlid +\nRepresenta l\'àrea: %1$s x %2$s Un botó per paginar la llista que segueix. Divisió automàtica de les gravacions un cop aturades Comença un nou segment desprès de 6 min d\'interrupció, una traça nova si es superen les 2 hores o un nou fitxer si encara dura més i ha canviat la data. @@ -2241,7 +2222,7 @@ Abasta l\'àrea: %1$s x %2$s \n Gaudiu del guiatge visual i de veu, representant PDIs (punts d\'interès), creant i gestionat traces GPX, activant la representació de corbes de nivell i d\'informació d\'elevació (requereix connector), optant entre els modes de conducció amb vehicle, bicicleta o com vianant, editant d\'OSM i molt més. Recupera les compres Tipus de lletra - Navegació GPS + Navegació GPS \n• Trieu el mode desconnectat (no hi hauran càrrecs de roaming si sou a l\'estranger) o el mode en línia (més àgil) \n• El guiatge de veu gir-a-gir us dirigeix pel camí (veus enregistrades i sintètiques) \n• La ruta es tornarà a calcular si us desvieu de la proposta anterior @@ -2251,7 +2232,8 @@ Abasta l\'àrea: %1$s x %2$s \n• L\'escala del mapa s\'ajusta a la vostra velocitat \n• Cerca de destinacions per adreça, tipus (p. ex.: Aparcament, restaurant, hotel, gasolinera, museu), o per les coordenades geogràfiques \n• Gestiona punts de pas en el vostre itinerari -\n• Enregistreu la vostra o baixeu una traça GPX i seguiu-la +\n• Enregistreu la vostra o baixeu una traça GPX i seguiu-la +\n Esquí \nEl connector de mapes d\'esquí d\'OsmAnd us permet veure les pistes segons la seva dificultat i d\'altres informacions addicionals, com ara la ubicació dels ascensors i altres equipaments. Ciclisme @@ -2265,11 +2247,13 @@ Abasta l\'àrea: %1$s x %2$s \n• La Viquipèdia, en el vostre idioma preferit, us pot ajudar molt visitant una ciutat \n• Parades de transport públic (autobús, tramvia, tren), incloent-hi noms de línia, suport per la navegació en una ciutat nova \n• La navegació GPS en mode vianant genera la vostra ruta per on pugueu passar -\n•Baixeu i seguiu una traça GPX o enregistreu i compartiu la vostra - "Col·laboreu amb Openstreetmap (OSM) +\n• Baixeu i seguiu una traça GPX o enregistreu i compartiu la vostra +\n + Col·laboreu amb Openstreetmap (OSM) \n• Informant de dades errònies \n• Pujant traces GPX a OSM directament des de l\'aplicació -\n• Afegint PDIs i penjar-los a OSM directament (o més tard si no esteu connectats)" +\n• Afegint PDIs i penjar-los a OSM directament (o més tard si no esteu connectats) +\n Analitza en el mapa Visible OsmAnd es de codi obert i s\'està desenvolupant activament. Tothom pot contribuir a l\'aplicació informant d\'errors, millorant traduccions o aportant codi de noves característiques. A més, el projecte es recolza en contribucions econòmiques per finançar la programació i les proves de noves funcionalitats. @@ -2329,14 +2313,16 @@ Abasta l\'àrea: %1$s x %2$s \n• Compartiu la vostra ubicació perquè els vostres amics us puguin trobar \n• Conserveu els vostres llocs més importants a \'Preferits\' \n• Us permet escollir com es mostrar els noms al mapa: en anglès, la lengua local o amb ortografia fonètica -\n• Mostra representacions especialitzades disponibles a la xarxa, imatges de satèl·lit (Bing), diferents superposicions com traces GPX d\'exploració/navegació i capes addicionals amb un grau transparència variable +\n• Mostra representacions especialitzades disponibles a la xarxa, imatges de satèl·lit (Bing), diferents superposicions com traces GPX d\'exploració/navegació i capes addicionals amb un grau transparència variable +\n Navegació \n• Funciona en línia (ràpid) o sense connexió (sense càrrecs de roaming quan sigueu a l\'estranger) \n• Indicacions de veu a cada gir (amb missatges gravats i sintetitzats) \n• Orientació opcional del carril, visualització del nom de la via i el temps estimat d\'arribada \n• Admet punts de pas intermedis \n• Revisió automàtica de la ruta quan us aparteu de la ruta proposada -\n• Cerca de llocs per adreça, tipus (per exemple: restaurant, hotel, gasolinera, museu) o coordenades geogràfiques +\n• Cerca de llocs per adreça, tipus (per exemple: restaurant, hotel, gasolinera, museu) o coordenades geogràfiques +\n OsmAnd + (OSM Automated Navigation Directions) és una aplicació per consulta de mapes i de navegació, amb accés a les dades obertes d\'OSM, d\'abast mundial i gran qualitat. \nFruïu la navegació amb indicacions visuals i de veu, mostrant PDIs (punts d\'interès), creant i gestionant traces GPX, disposant de corbes de nivell i cotes puntuals, seleccioneu la navegació per vehicle, bicicleta o com a vianant, editeu OSM i molt més. \n @@ -2367,24 +2353,25 @@ Abasta l\'àrea: %1$s x %2$s \n• Mapes vectorials compactes en local que s\'actualitzen un cop al mes, com a mínim \n \n• Opció entre dades completes d\'una regió o només la xarxa viària (Exemple: tot el Japó ocupa 700 MB però només 200 MB per a la xarxa viària) - "Característiques de seguretat + Característiques de seguretat \n• Canvi automàtic entre el mode diürn/nocturn (opcional) \n• Indicacions del límit de velocitat i notificació d\'excés (opcional) -\n• Escala en funció de la velocitat (opcional) -\n• Si compartiu la vostra ubicació, els vostres amics us podran trobar" +\n• Escala en funció de la velocitat (opcional) +\n• Si compartiu la vostra ubicació, els vostres amics us podran trobar +\n Característiques per ciclistes i vianants \n• Visualització de vies per vianants, senderisme i carrils bici, ideal per activitats a l\'aire lliure \n• Representació i navegació a mida per ciclistes i vianants \n• Indicació opcional de les parades del transport públic (autobús, tramvia, tren), incloent-hi noms de línia \n• Enregistrament opcional del trajecte en un fitxer GPX local o a un servei a la xarxa \n• Indicació opcional de la velocitat i l\'altitud • Visualització de corbes de nivell i ombrejat de relleu (requereix connector) - "Col·laboreu directament a OSM + Col·laboreu directament a OSM \n• Notifiqueu errors en les dades \n• Pugeu traces GPX directament a OSM des de l\'aplicació \n• Afegiu PDIs i pugeu-los OSM (o feu-ho més tard si no esteu connectats) -\n• Enregistrament opcional del trajecte, també en segon pla (mentre el dispositiu està bloquejat) +\n• Enregistrament opcional del trajecte, també en segon pla (mentre el dispositiu està bloquejat) \nOsmAnd és un programari de codi obert que es desenvolupa activament. Tothom pot recolzar l\'aplicació informant d\'errors, millorant traduccions o programant noves característiques. El projecte també es fonamenta en les aportacions econòmiques per patrocinar la programació i validació de noves funcionalitats. -\n" +\n Visió general Anima la pròpia posició Activa el desplaçament animat del mapa de \'La meva posició\' durant la navegació. @@ -2587,7 +2574,7 @@ Abasta l\'àrea: %1$s x %2$s Mostra una línia de direcció entre la vostra ubicació i les dels marcadors actius. Mostra una o dues fletxes indicant la direcció dels marcadors actius. Seleccioneu com indicar la distància als marcadors actius. - Indiqueu el nombre d\'indicadors de direcció: + Indiqueu el nombre d\'indicadors de direcció. Més Cercant traces amb fites Crea o modifica objectes OSM @@ -2646,14 +2633,14 @@ Abasta l\'àrea: %1$s x %2$s Copia nom d\'ubicació/PDI Ubicació sense nom Mostra notes amagades - Mostra/amaga notes OSM en el mapa. + Mostra o amaga notes OSM en el mapa. GPX - adient per exportar-lo a JOSM o a altres editors d\'OSM. OSC - adient per exportar-lo a OSM. Arxiu GPX Arxiu OSC Seleccioneu el tipus de fitxer Exportació com notes d\'OSM, PDIs o les dues coses. - "Totes les dades" + Totes les dades Notes OSM Túnel encarat Túnels @@ -2677,7 +2664,7 @@ Abasta l\'àrea: %1$s x %2$s O S N - "Nom opcional del punt " + Nom opcional del punt Rutes properes a dins A dins Introduïu el nom del fitxer. @@ -2755,7 +2742,7 @@ Abasta l\'àrea: %1$s x %2$s Viquipèdia sense connexió Mapes amb corbes de nivell i ombrejat de relleu Desbloca totes les funcions de OsmAnd - "Viquiviatges " + Viquiviatges Articles de Viquiviatges d\'arreu Obre l\'enllaç en línia de Viquipèdia L\'enllaç s\'obrirà en el vostre navegador. @@ -2865,7 +2852,7 @@ Abasta l\'àrea: %1$s x %2$s Subscripcions Només mostra imatges de 360º Arrenca - "Esteu utilitzant el mapa {0} mitjançant OsmAnd. Voleu iniciar la versió sencera d\'OsmAnd \?" + Esteu utilitzant el mapa {0} mitjançant OsmAnd. Voleu iniciar la versió sencera d\'OsmAnd \? Voleu iniciar OsmAnd\? Guaraní Un botó per canviar entre els modes diürn i nocturn d\'OsmAnd. @@ -3088,7 +3075,7 @@ Abasta l\'àrea: %1$s x %2$s Navegació de tercers Seleccioneu els perfils que voleu que es mostrin a l\'aplicació. Perfils d\'aplicació - Esquí alpí/descens + Esquí alpí i de descens Servei de baixades d\'OsmAnd Magenta Icona @@ -3157,7 +3144,7 @@ Abasta l\'àrea: %1$s x %2$s Utilitza el sensor de proximitat Bicicleta de muntanya, ciclomotor, cavall BRouter (fora de línia) - Esquí nòrdic o de fons + Esquí nòrdic i de fons Pistes per a esquí nòrdic o de fons. Permet les rutes avançades Rutes difícils, amb obstacles perillosos i seccions amb pendents fortes. @@ -3207,8 +3194,8 @@ Abasta l\'àrea: %1$s x %2$s Per defecte Occità Camioneta descoberta - "Ruta: distància %s, durada %s -\nCàlcul: %.1f s, %d vies, %d tessel·les)" + Ruta: distància %s, durada %s +\nCàlcul: %.1f s, %d vies, %d tessel·les) Dia Dies Dies @@ -3375,7 +3362,7 @@ Abasta l\'àrea: %1$s x %2$s Bescanvia %1$s i %2$s Punt d\'inici La traça s\'ha desat - No hi ha nom de fitxer + Nom de fitxer buit Reverteix Voleu netejar %1$s\? Diàlegs i notificacions @@ -3567,7 +3554,7 @@ Abasta l\'àrea: %1$s x %2$s Un botó per mostrar o amagar la capa de terreny al mapa. Mostra el terreny Amaga el terreny - Mostra/amaga el relleu + Mostra o amaga el relleu Ombrejat del relleu Llegenda Nivells de zoom @@ -3741,11 +3728,11 @@ Abasta l\'àrea: %1$s x %2$s Compres OsmAnd Perfils de navegació Amaga el transport públic - Mostra/amaga el transport públic + Mostra o amaga el transport públic Botó que mostra o oculta el transport públic al mapa. - Crea / Edita PDI + Crea o edita PDI Posicions d’aparcament - Afegeix / Edita Preferits + Afegeix o edita preferit Restableix la ordenació dels elements predeterminats Torna a l\'edició A cada instrucció de navegació s\'activarà la pantalla. @@ -3835,7 +3822,7 @@ Abasta l\'àrea: %1$s x %2$s Botó d\'activació • S\'ha actualitzat la funció Planifica una ruta: permet utilitzar diferents tipus de navegació per segments i afegir traces \n -\n • Nou menú Aspecte per les traces: seleccioneu color, gruix, representació de les fletxes de direcció, icones inici/fi +\n • Nou menú Aspecte per les traces: seleccioneu color, gruix, representació de les fletxes de direcció, icones d\'inici i final \n \n • S\'ha millorat la visibilitat dels nodes ciclistes. \n @@ -3858,7 +3845,7 @@ Abasta l\'àrea: %1$s x %2$s Desenvolupament %1$s — %2$s Canvieu el càlcul de rutes de Transport Public a Java (segur) - Icones d\'Inici/Final + Icones d\'inici i final Gràcies per comprar \'Corbes de nivell\' Evita els camins per a vianants Evita els camins per a vianants @@ -3868,7 +3855,7 @@ Abasta l\'àrea: %1$s x %2$s Inicieu la sessió mitjançant OAuth per fer servir les funcionalitats osmedit Inicieu la sessió via OAuth Neteja el testimoni OAuth d\'OpenStreetMap - La sessió s\'ha tancat correctament + Sessió tancada El fitxer ja s\'ha importat a OsmAnd Mapes locals Especial @@ -3881,4 +3868,5 @@ Abasta l\'àrea: %1$s x %2$s Discontinu Proporcioneu la llargada del vostre vehicle, pot haver-hi rutes restringides als vehicles llargs. No s\'ha generat correctament l\'arxiu GPX. Indiqueu-ho a l\'equip de suport per continuar investigant. + Enregistra automàticament la traça durant la navegació \ No newline at end of file diff --git a/OsmAnd/res/values-cs/phrases.xml b/OsmAnd/res/values-cs/phrases.xml index b0e0e22791..590ca94ca9 100644 --- a/OsmAnd/res/values-cs/phrases.xml +++ b/OsmAnd/res/values-cs/phrases.xml @@ -3850,4 +3850,10 @@ Střešní Bod GPX Radarová věž + Ambasáda + Služby občanům + Imigrační víza + Neimigrační víza + Konzulát + Ambasáda \ No newline at end of file diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index c23e4be8e6..4c4069ba02 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -2005,7 +2005,7 @@ Délka %2$s Neomezené stahování map, aktualizací a modul Wikipedie. Míle/metry Hornolužická srbština - Nemáte zatím žádné GPX soubory + Nemáte zatím žádné soubory stop Do složky můžete také přidat GPX soubory Přidat další… Vzhled @@ -2055,10 +2055,10 @@ Délka %2$s Nahrát POI Starší vyhledávání Zobrazit starší způsob vyhledávání - Povolit dálnice - Povolit jízdu po dálnicích. + Použít dálnice + Povolí jízdu po dálnicích. Články Wikipedie v okolí - Hledat město nebo oblast + Město nebo oblast Přidat starší hledání do úvodního panelu. Srbsky (latinka) Čínsky (Hong Kong) @@ -2168,7 +2168,7 @@ Zobrazená oblast: %1$s x %2$s Zohlednit převýšení terénu (data od SRTM, ASTER a EU-DEM). Styl jízdy Vyberte složku pro soubor GPX - Soubor nemůže být přesunut. + Soubor se nepodařilo přesunout. Přesunout Trasy Doba pohybu @@ -2181,7 +2181,7 @@ Zobrazená oblast: %1$s x %2$s Průměrná rychlost Přidat nový adresář Bod(y) smazán(y). - Chystáte se smazat body (%1$d). Určitě smazat? + Opravdu chcete smazat %1$d bodů\? Potřebné obraty na trase Trasové body, body zájmu, pojmenované objekty Trasa @@ -2201,34 +2201,34 @@ Zobrazená oblast: %1$s x %2$s Možnosti parkování Děkujeme vám za zakoupení placené verze OsmAnd. Zvolte kolísání výšky - Jízda po pravé straně + Pravostranný provoz Automaticky Obnovit nákupy Mapová písma Zadejte adresu - Zadejte město + Zadejte město/oblast Zadejte směrovací číslo Nejbližší města Zvolte město - Zvolte směrovací číslo + Hledání PSČ Automatické přiblížení mapy - Klepnutím na toto tlačítko zapnete/vypnete automatické přibližování mapy v závislosti na vaší rychlosti. - Zapnout automatické přiblížení mapy - Vypnout automatické přiblížení mapy - Přidat cíl + Tlačítko pro zapnutí nebo vypnutí automatického přibližování mapy podle rychlosti. + Zapnout automatické přibližování + Vypnout automatické přibližování + Zadat cíl Nahradit cíl Přidat první mezicíl Zobrazit OSM poznámky Skrýt OSM poznámky - Klepnutím na toto tlačítko zobrazíte nebo skryjete OpenStreetMap poznámky na mapě. + Tlačítko pro zobrazení nebo skrytí OpenStreetMap poznámek na mapě. Seřazeno podle vzdálenosti - Najít Oblíbené - Pro zobrazení vrstevnic a stínování kopců je potřeba stáhnout překryvnou mapu této oblasti. - Pro zobrazení vrstevnic a stínování kopců je třeba zakoupit a aktivovat modul \"Vrstevnice\" + Hledat v Oblíbených + Pro zobrazení vertikálního stínování si stáhněte překryvnou mapu stínovaných svahů. + Pro zobrazení výškových stupňů si nainstalujte modul \'Vrstevnice\'. Skrýt od úrovně přiblížení Stáhnout mapu vrstevnic tohoto regionu. Modul - Chcete-li na mapě vidět vrstevnice, musíte koupit a nainstalovat modul \'Vrstevnice\' + Pro zobrazení výškových stupňů si zakupte a nainstalujte modul \'Vrstevnice\'. Barevné schéma Zobrazit od úrovně přiblížení Povolit soukromý přístup @@ -2237,14 +2237,14 @@ Zobrazená oblast: %1$s x %2$s Název skupiny Změnit barvu Upravit název - Animovat moji polohu - Povolit animaci mapy \'Mé polohy\' při navigaci. + Animovat vlastní polohu + Zapnout animovaný posun \'Mé polohy\' na mapě během navigace. Přehled Vyberte ulici v %1$s - Stisk tohoto tlačítka přidá střed obrazovky jako nový cíl navádění, z dříve nastaveného cíle se stane poslední mezicíl. - Stisk tohoto tlačítka přidá střed obrazovky jako nový cíl navádění. Pokud byl dříve nastaven jiný cíl, bude nahrazen. - Stisk tohoto tlačítka přidá střed obrazovky jako první mezicíl. + Tlačítko pro nastavení středu obrazovky jako nového cíle trasy. Z dříve nastaveného cíle se stane poslední mezicíl. + Tlačítko pro nastavení středu obrazovky jako nového cíle. Pokud byl dříve nastaven jiný cíl, bude nahrazen. + Tlačítko pro nastavení středu obrazovky jako prvního mezicíle. Bez překryvné vrstvy Bez podkladové vrstvy Chyba @@ -2267,19 +2267,19 @@ Zobrazená oblast: %1$s x %2$s Zvětšit okruh hledání Nic nalezeno Změňte vyhledávací dotaz nebo zvětšete okruh hledání. - Přepnout zobrazení poznámek OSM + Zobrazit nebo skrýt OSM poznámky Oprávnění - OsmAnd nemůže naimportovat soubor. Prosím zkontrolujte, zda má oprávnění číst soubor z tohoto umístění. + Nepodařilo se naimportovat soubor. Prosím zkontrolujte, zda má OsmAnd oprávnění ke čtení souboru. Vzdálenost opravená Obrázek Mapillary Otevřít Mapillary Instalovat Zlepšit pokrytí fotografií s Mapillary - Nainstalujte Mapillary a přidejte jednu nebo více fotografií na toto místo v mapě. + Nainstalujte Mapillary a přidejte fotografie na toto místo v mapě. On-line fotografie Přidat fotografie - Nemáme fotografie pro toto umístění. - Přispějte vlastním pohledem na toto místo přes Mapillary z úrovně ulice. + Zde nejsou žádné fotografie. + Sdílejte svůj vlastní pohled z úrovně ulice přes Mapillary. Umožňuje rychle přispět do Mapillary. On-line fotografie z ulic pro každého. Objevte místa, spolupracujte, zachyťte svět. Fotografie z ulic pro každého. Objevte místa, spolupracujte, zachyťte svět. @@ -2307,10 +2307,10 @@ Zobrazená oblast: %1$s x %2$s Max/Min Min/Max Pozastavit/pokračovat v navigaci - Stiskněte toto tlačítko na pozastavení, nebo pokračování navigace. + Tlačítko pro pozastavení nebo pokračování navigace. Zobrazit zprávu \"Navigace ukončena\" Spustit/ukončit navigaci - Stiskněte toto tlačítko pro spuštění, nebo zastavení navigace. + Tlačítko pro spuštění nebo zastavení navigace. Průhledná růžová Prosím přidejte alespoň jeden bod. Název souboru GPX: @@ -2348,7 +2348,7 @@ Zobrazená oblast: %1$s x %2$s Indikace vzdálenosti Seřadit podle Bez animací - Zakáže animace v aplikaci. + Vypne animace mapy. Stále zobrazovat na mapě Ukončit bez uložení? Práh pro změnu orientace mapy @@ -2365,7 +2365,7 @@ Zobrazená oblast: %1$s x %2$s Posledních 7 dní Tento rok Použít umístění - Přidat svou polohu jako startovní bod do plánu ideální trasy. + Přidejte svou polohu jako počáteční bod do plánu ideální trasy. Moje poloha Dokončit Naplánovat trasu @@ -2377,24 +2377,24 @@ Zobrazená oblast: %1$s x %2$s Zobrazit vodicí čáry Zobrazit šipky na mapě Odebrat z mapových značek - sestupně - vzestupně - Datum přidání + Z-A + A-Z + Přidáno Seřadit podle: Značky Formát souřadnic Použít systémovou klávesnici - Zvolte formát souřadnicového vstupu. Můžete ho kdykoli změnit klepnutím na \'Možnosti\'. + Zvolte formát zadávání souřadnic. Můžete ho kdykoliv změnit klepnutím na \'Nastavení. Rychlé zadávání souřadnic - Vyhnout brodům a ledovým cestám - Povede trasu mimo brody a ledové cesty. + Žádné ledové cesty a brody + Vyhne se ledovým cestám a brodům. Zobrazit prošlé Skrýt prošlé - Vyberte, jak ukazovat vzdálenost a směr k mapovým značkám na obrazovce mapy: - Nepodařilo se změnit poznámku + Zvolte, jak se bude zobrazovat vzdálenost a směr k mapovým značkám na mapě: + Nepodařilo se změnit poznámku. Upravit poznámku Upravit poznámku OSM - Přidat počáteční bod také jako cíl pro vytvoření okruhu. + Přidat kopii počátečního bodu jako cíl. Vytvořit okružní trasu Může být importováno jako Oblíbené nebo jako GPX soubor. Importovat jako soubor GPX @@ -2431,7 +2431,7 @@ Zobrazená oblast: %1$s x %2$s Zobrazit vodicí čáry od vaší polohy k aktivním značkám. Zobrazit jednu nebo dvě šipky označující směr k aktivním značkám. Zvolte způsob zobrazení vzdálenosti k aktivním značkám. - Zvolte, kolik ukazatelů směru se má zobrazit. + Zadejte počet ukazatelů směru. Počet desetinných míst Vpravo Vlevo @@ -2442,19 +2442,19 @@ Zobrazená oblast: %1$s x %2$s Klepnutí na mapu přepne ovládací tlačítka a nástroje. Režim celé obrazovky Označit prošlé - Vytvořit nebo upravit OSM POI, otevřít nebo okomentovat OSM poznámky a přispět zaznamenanými GPX soubory. + Vytvořit nebo upravit body zájmu OSM, otevřít nebo okomentovat OSM poznámky a přispět zaznamenanými GPX soubory. Odstraněné Upravené Přidané Značka %s aktivována. Klepněte na značku na mapě pro její přesunutí na první místo v aktivních značkách bez otevření kontextové nabídky. Dělejte si poznámky! - Přidejte audio, video nebo fotografickou poznámku pro každý bod na mapě, pomocí nástroje nebo kontextového menu. - Poznámky podle datumu + Přidejte audio, video nebo fotografické poznámky pro libovolný bod na mapě, pomocí nástroje nebo kontextového menu. + Multimediální poznámky podle data Podle datumu Podle typu Klepnutím nebo přidržením označte \'Místa\', pak klepněte na tlačítko značky s vlajkou. - Upravit vyhledávací dotaz. + Změňte vyhledávací dotaz. Funkce \"Jedním stiskem\" je aktivní Popisky bodů Bez názvu @@ -2482,13 +2482,13 @@ Zobrazená oblast: %1$s x %2$s Počet úprav %1$s, součet %2$s mBTC Laosky Zobrazit zavřené poznámky - Zobrazit/Skrýt OpenStreetMap poznámky na mapě. + Zobrazit nebo skrýt OpenStreetMap poznámky na mapě. GPX - vhodné pro export do JOSM nebo jiných editorů OSM. - OSC - vhodné pro export do OpenStreetMap. + OSC - vhodné pro export do OSM. Soubor GPX Soubor OSC Zvolte typ souboru - Vyberte typ exportu: OSM poznámky, POI nebo obojí. + Exportujte jako OSM poznámky, body zájmu, nebo obojí. Všechny údaje OSM poznámky Zadejte název souboru. @@ -2524,8 +2524,8 @@ Zobrazená oblast: %1$s x %2$s Volitelný název bodu Nejbližší trasy v okruhu V okruhu - Vzdálenost: nejvzdálenější jako první - Vzdálenost: nejbližší jako první + Nejvzdálenější jako první + Nejbližší jako první Divoká voda GPS navigace \n• Vyberte si mezi offline režimem (bez roamingových poplatků v zahraničí) a online režimem (rychlejší) @@ -2658,7 +2658,7 @@ Zobrazená oblast: %1$s x %2$s Odemknout všechny funkce OsmAnd Vyberte si předplatné Chcete-li dostávat offline články o cestování, je třeba koupit jednu z následujících položek: - Vyberte vhodnou položku: + Vyberte vhodnou položku Nedělat Dělat Pouze na WiFi @@ -2675,7 +2675,7 @@ Zobrazená oblast: %1$s x %2$s Cestovní průvodce Wikivoyage Článek odstraněn - Vyhledávání: stát, město, kraj + Hledejte stát, město nebo kraj Číst Články v záložkách Prozkoumat @@ -2693,8 +2693,8 @@ Zobrazená oblast: %1$s x %2$s Stáhnout soubor Začít s úpravami Získejte neomezený přístup - Aktualizace map: každý měsíc - Aktualizace map: každou hodinu + Aktualizace map každý měsíc + Aktualizace map každou hodinu Stáhnout články Wikipedie pro %1$s a číst je v režimu offline. Stahování dat z Wikipedie Otevřít článek online @@ -2718,9 +2718,9 @@ Zobrazená oblast: %1$s x %2$s Upravit akce Získejte OsmAnd Live pro odemknutí všech funkcí: Denní aktulizace mapových podkladů s neomezeným počtem stahování, všechny placené moduly, propojení s Wikipedia, Wikivoyage a mnoho dalšího. Děkujeme za Vaši zpětnou vazbu - Na Váš dotaz nebylo nic nalezeno. - Žádný výsledek vyhledávání? -\nDejte nám o tom vědět, ať to můžeme zlepšit + Bod nebo cesta nebyly nalezeny. + Žádný výsledek vyhledávání\? +\nPoskytněte nám zpětnou vazbu • Navigace: Opravený indikátor průběhu, přidána možnost pro rychlé prohození začátku a konce trasy \n \n • Mapové značky: Opravena možnost zapnutí/vypnutí skupin, nově možnost skrýt značky na mapě @@ -2737,8 +2737,9 @@ Zobrazená oblast: %1$s x %2$s \n Odesílání cesty… Zvětšit okruh hledání na %1$s - Bude odeslán váš dotaz pro vyhledávání: \"%1$s\" a také vaše poloha. \n - \n Nedochází k žádnému shromažďování osobních údajů. Zaslaná data slouží pouze k vylepšení vyhledávacího algoritmu. + Váš vyhledávací dotaz a poloha budou odeslány na: \"%1$s\". +\n +\n Nedochází k žádnému shromažďování osobních údajů. Zaslaná data slouží pouze k vylepšení vyhledávacího algoritmu. Odeslat data? Celý svět Bod %1$s byl smazán @@ -2748,7 +2749,7 @@ Zobrazená oblast: %1$s x %2$s Bylo přidáno %1$s bodů. Zadejte název a klepněte na \"Uložit\". Upravený základní styl pro zvýšení kontrastu pěších a cyklistických cest. Používá starší barvy Mapnik. Záložka - Vhodný pro off-road terénní jízdu. Vhodný pro použití se zelenými satelitními snímky použitými jako podkladová vrstva. Zmenšená tloušťka hlavních cest a naopak zvětšená tloušťka polních cest, pěšin, cyklotras a dalších cest. Založeno na \"Topo\" stylu. + Pro off-road terénní jízdu, založený na stylu \'Topo\' a pro použití se zelenými satelitními snímky jako podkladovou vrstvou. Zmenšená tloušťka hlavních cest, zvětšená tloušťka polních cest, pěšin, cyklotras a dalších cest. Otevřít odkaz Wikipedia na internetu Odkaz bude otevřen v internetovém prohlížeči. Stahování Wikipedia a Wikivoyage článků pro čtení offline je dostupné pouze předplatitelům OsmAnd Live. @@ -2764,21 +2765,21 @@ Zobrazená oblast: %1$s x %2$s Čas příjezdu do mezicíle Do průjezdního bodu Klepněte na tlačítko pro vyslechnutí odpovídajícího hlasového pokynu, aby jste zjistili chybné nebo chybějící pokyny. - Plavební navigační styl. Klíčové vlastnosti: Bóje, majáky, plavební cesty, mořské cesty a značky, přístavy, námořní služby, plavební hloubka. - Zimní režim. Klíčové vlastnosti: Vykresluje sjezdovky, lyžařské vleky a další praktické objekty pro lyžaře a snowboardisty. Nedůležité objekty jsou na mapě méně výrazné. + Pro námořní navigaci. Obsahuje bóje, majáky, plavební cesty, mořské cesty a značky, přístavy, námořní služby a hloubkové vrstevnice. + Pro lyžování. Obsahuje sjezdovky, lyžařské vleky, běžkařské trasy atd. Nedůležité objekty jsou na mapě méně výrazné. Vítejte v otevřené beta verzi - Jednoduchý a kontrastní styl pro automobilovou navigaci. Příjemný na oči v nočním režimu. Klíčové vlastnosti: Vrstevnice, kontrastní oranžové silnice, druhořadé objekty jsou méně výrazné. - Kontrastní styl určený primárně pro pěší turistiku a cyklistiku v přírodě. Dobrá čitelnost při složitém venkovním osvětlením. Klíčové vlastnosti: kontrastní silnice a přírodních objekty, různé typy tras, vrstevnice s rozšířeným nastavením, více detailů při odpovídající úrovni zvětšení než ve výchozím stylu. Umožňuje rozlišit kvalitu povrchu vozovky. Nemá noční režim. - Starý styl vykreslení jako výchozí \"Mapnik\". Klíčové vlastnosti: barvy jsou podobné \"Mapnik\" stylu. - Vysoce detailní styl pro účely cestování. Obsahuje všechna nastavení z výchozího stylu a navíc zobrazuje maximum detailů, především všechny silnice, cesty a jiné způsoby cestování. Jasně rozlišuje různé typy cest, podobně jako mnohé cestovní atlasy. Vysoce kontrastní schéma pro venkovní použití, denní a noční režim. - Obecný styl. Zjednodušené vykreslování v hustě osídlených městech. Klíčové vlastnosti: vrstevnice, trasy, kvalita povrchu cest, omezení přístupu, čísla cest, značení dle SAC, objekty pro vodní sporty. + Jednoduchý styl pro automobilovou navigaci. Příjemný noční režim, vrstevnice, kontrastní oranžové silnice, druhořadé objekty jsou méně výrazné. + Pro pěší turistiku a cyklistiku v přírodě. Dobře čitelný venku. Kontrastní silnice a přírodních objekty, různé typy tras, vrstevnice s rozšířeným nastavením, více detailů. Umožňuje rozlišit kvalitu povrchu vozovky. Nemá noční režim. + Starý výchozí styl \'Mapnik\'. Barvy jsou podobné jako styl \'Mapnik\'. + Styl pro cestování s vysokým kontrastem a maximálními detaily. Obsahuje všechna nastavení ze základního stylu OsmAnd a navíc zobrazuje maximum detailů, především silnice, cesty a jiné způsoby cestování. Jasně rozlišuje různé typy cest, podobně jako cestovní atlasy. Vhodný pro použití ve dne, v noci i venku. + Obecný styl. Čisté vykreslování hustě osídlených měst. Obsahuje vrstevnice, trasy, kvalita povrchu cest, omezení přístupu, čísla cest, značení dle SAC, objekty pro vodní sporty. Stáhněte si cestovní průvodce Wikivoyage a prohlížejte články o místech po celém světě bez připojení na internet. Bezplatný cestovní průvodce, který může upravovat každý. Cestovní průvodci jsou nyní založené na Wikivoyage. Všechny jejich funkce můžete otestovat zdarma během beta testování. Poté budou zpřístupněny předplatitelům služby OsmAnd Live a uživatelům OsmAnd+. - Můžete (a měli byste) upravovat libovolný článek na Wikivoyage. Sdílejte znalosti, zkušenosti, talent a svoji pozornost + Můžete (a měli byste) upravovat libovolný článek na Wikivoyage. Sdílejte znalosti, zkušenosti, talent a svoji pozornost. Pro pokračování prosím udělte OsmAndu oprávnění pro přístup k poloze. Černá - Na této zastávce je další provoz. + Z této zastávky je možná další doprava. • Opraven pád při startu, ke kterému docházelo na některých zařízeních \n \n • Nová akce značek: zobraz značky, které již byly projety @@ -2794,7 +2795,7 @@ Zobrazená oblast: %1$s x %2$s \n• Měření vzdálenosti: tlačítko \"Měření\" přidáno do akcí v kontextovém menu \n Hledat ulici - Nejprve vyberte město + Nejprve zvolte město/oblast Obnovit Značky, přidané jako skupina oblíbených nebo GPX bodů a označené jako prošlé, zůstanou na mapě. Pokud skupina není aktivní, značky zmizí z mapy. Ponechat prošlé značky na mapě @@ -2813,8 +2814,8 @@ Zobrazená oblast: %1$s x %2$s Obnovuje se čtvrtletně Obnovuje se ročně %1$.2f %2$s - Vyberte si frekvenci plateb, která vám vyhovuje: - Část příjmů je posílána přispěvatelům OpenStreetMap. + Interval plateb: + Příspěvky pomáhají financovat tvorbu map OSM. OsmAnd Předplatné Zobrazit pouze 360° obrázky @@ -2831,9 +2832,9 @@ Zobrazená oblast: %1$s x %2$s Kapacita Šířka Výška - Přidat cíl + Zadat cíl Přidat mezicíl - Přidat počáteční bod + Zadat počáteční bod Mezicíl přestupy pěšky @@ -2845,7 +2846,7 @@ Zobrazená oblast: %1$s x %2$s Ukázat podél trasy Simulovat navigaci Vyberte soubor s trasou, kterou chcete následovat - Hlasová oznámení + Hlasové výzvy Mezicíle Příjezd v %1$s Nejdříve prosím zadejte cíl @@ -2864,12 +2865,12 @@ Zobrazená oblast: %1$s x %2$s Typy silnic Výjezd na Vyměnit - Zobrazit/skrýt GPX trasy - Klepnutím na toto tlačítko akce se zobrazí nebo skryjí vybrané GPX trasy na mapě - Skrýt GPX trasy - Zobrazit GPX trasy + Zobrazit/skrýt stopy + Tlačítko pro zobrazení nebo skrytí vybraných stop na mapě + Skrýt stopy + Zobrazit stopy %1$d přenosů - Přidat počáteční a koncový bod + Přidat počáteční a cílový bod Přidat počáteční bod Zvolit počáteční bod Nezpevněný @@ -2926,8 +2927,7 @@ Zobrazená oblast: %1$s x %2$s %s režim Vyhněte se typům dopravy… Chůze - Maximální délka názvu značky \"%s\" je 255 znaků. -\nPro pokračování zkraťte. + Zkraťte délku názvu značky \"%s\" na méně než 255 znaků. Délka hodnoty \"%s\" "• Nová obrazovka \'Pokyny\': Zobrazuje tlačítka pro cíl Domov a Práce, zkratku pro \'předchozí trasu\', seznam aktivních GPX tras a značek, historii vyhledávání \n @@ -2951,18 +2951,18 @@ Zobrazená oblast: %1$s x %2$s Miliradiány Úhlová jednotka Změní jednotku měření azimutu. - Vyhnout se tramvajím - Vyhnout se tramvajím - Vyhnout se autobusům - Vyhnout se autobusům a trolejbusům - Vyhnout se sdíleným taxi - Vyhnout se sdíleným taxi - Vyhnout se vlakům - Vyhnout se vlakům - Vyhnout se metru + Žádné tramvaje + Vyhne se tramvajím + Žádné autobusy + Vyhne se autobusům a trolejbusům + Žádná sdílená taxi + Vyhne se sdíleným taxi + Žádné vlaky + Vyhne se vlakům + Žádné metro Vyhnout se metru a lehké železniční dopravě - Vyhnout se trajektům - Vyhnout se trajektům + Žádné trajekty + Vyhne se trajektům • Zobrazování času na přestup mezi hromadnou dopravou \n \n • Upravené rozhraní detailů trasy @@ -2995,7 +2995,7 @@ Zobrazená oblast: %1$s x %2$s Určete, která data dovolíte aplikaci OsmAnd sdílet. Klepněte na „Povolit“, pokud souhlasíte s našimi %1$s Soukromí a zabezpečení - Zvolte, které údaje s námi sdílíte + Zvolte údaje ke sdílení Ne, díky Povolit Název profilu @@ -3030,12 +3030,12 @@ Zobrazená oblast: %1$s x %2$s Nejprve je třeba uložit změny profilu Odstranit profil Opravdu chcete odstranit profil „%s“ - Zvolte základní profil + Zvolte výchozí profil Vyberte typ navigace Auto, nákladní auto, motocykl Horské kolo, moped, kůň Chůze, turistika, běh - Všechny typy hromadné dopravy + Typy hromadné dopravy Loď, veslování, plachtění Letadlo, plachtění Geokódování @@ -3071,7 +3071,7 @@ Zobrazená oblast: %1$s x %2$s \n \nSvoji volbu můžete kdykoliv změnit v Nastavení > Soukromí a zabezpečení. Pomozte nám pochopit, které regiony a země jsou v mapách nejpopulárnější. - Pomozte nám pochopit, které funkce OsmAnd jsou nejpopulárnější. + Pomůže nám zjistit popularitu funkcí OsmAnd. Můžete přidat vaši vlastní upravenou verzi souboru routing.xml v ..osmand/routing Klepněte znovu pro změnu orientace mapy Min. rychlost @@ -3581,7 +3581,7 @@ Zobrazená oblast: %1$s x %2$s Přihlásit se pomocí OAuth pro použití funkcí editace OSM Přihlásit pomocí OAuth Vymazat OpenStreetMap OAuth token - Odhlášení úspěšné + Byli jste odhlášeni Soubor je již importovaný v OsmAnd Použít dvoufázový algoritmus A* pro výpočet trasy Graf @@ -3740,7 +3740,7 @@ Zobrazená oblast: %1$s x %2$s MGRS Simulovat polohu pomocí zaznamenané stopy GPX. Co je nového - Tlačítko pro určení středu obrazovky jako výchozího bodu a výpočet trasy do cíle nebo otevření dialogu pro výběr cíle. + Tlačítko pro nastavení středu obrazovky jako výchozího bodu a výpočet trasy do cíle nebo otevření dialogu pro výběr cíle. Pro jízdu na sněžném vozidle na vyhrazených cestách. Vlastní profil založte na jednom ze základních profilů. Ten určí základní nastavení jako viditelnost nástrojů, jednotky rychlosti a vzdálenosti. Toto jsou základní profily aplikace a návrhy vlastních profilů, na které mohou být rozšířeny: Ohodnotit @@ -3893,28 +3893,28 @@ Zobrazená oblast: %1$s x %2$s Tato nastavení jsou globální a platí pro všechny profily Přihlásit se do OpenStreetMap Přihlásit se do OpenStreetMap.org - Zaregistrovat se do OpenStreetMap + Přihlásit se do OpenStreetMap Můžete zobrazit své dosud neodeslané změny či chyby v OSM v %1$s. Odeslané body se již v OsmAnd nezobrazují. - Musíte se přihlásit, abyste mohli odesílat nová nebo změněná data. + Přihlaste se, abyste mohli odesílat nová nebo změněná data, \n -\nMůžete se přihlásit pomocí bezpečné metody OAuth, nebo pomocí jména a hesla. - Použít jméno a heslo +\nbuď pomocí bezpečné metody OAuth, nebo pomocí jména a hesla. + Přihlásit se pomocí jména a hesla Účet - Přihlašovací jméno + Uživatelské jméno Historie značek \"Veřejná\" znamená, že trasa je veřejně dostupná ve vašich GPS trasách, ve veřejných seznamech GPS tras a také ve veřejném seznamu stop s nezpracovanými časovými razítky. Data poskytnutá prostřednictvím API nebudou odkazovat na vaši stránku s trasou. Časová razítka bodů trasy nebudou dostupná prostřednictvím veřejného GPS API a body nebudou chronologicky seřazeny. \"Soukromá\" znamená, že trasa se neobjeví v žádném veřejném seznamu a body trasy budou dostupné prostřednictvím veřejného GPS API bez časových razítek a nebudou chronologicky seřazeny. Odeslat soubor GPX do OpenStreetMap Zadejte značky oddělené čárkou. - Sledovatelná znamená, že trasa se neobjeví v žádném veřejném seznamu, ale body trasy budou dostupné prostřednictvím veřejného GPS API s časovými razítky. Ostatní uživatelé si budou moci stáhnout zpracované body z vaší trasy, které ale nebude možné přímo spojit s vámi. - Identifikovatelná znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Data poskytnutá prostřednictvím API se budou odkazovat na vaši původní stránku s trasou. Časová razítka bodů trasy budou dostupná prostřednictvím veřejného GPS API. + \"Sledovatelná\" znamená, že trasa se neobjeví v žádném veřejném seznamu, ale zpracované body trasy s časovými razítky (které nelze přímo spojit s vámi) budou dostupné prostřednictvím veřejného GPS API. + \"Identifikovatelná\" znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Veřejná data bodů trasy s časovými razítky poskytnutá prostřednictvím GPS API se budou odkazovat na vaši původní stránku s trasou. Zavřít OSM poznámku Komentovat OSM poznámku - Můžete se přihlásit bezpečnou metodou OAuth nebo použít své přihlašovací jméno a heslo. + Přihlaste se bezpečnou metodou OAuth nebo použijte své přihlašovací jméno a heslo. Přidat fotku Zaregistrovat na \nOpenPlaceReviews.org - Fotografie poskytuje open source projekt OpenPlaceReviews.org. Před odesláním svých fotografií se musíte zaregistrovat na webové stránce. + Přihlaste se na webových stránkách open source projektu OpenPlaceReviews.org a budete moci odesílat ještě více fotografií. Vytvořit nový účet Už mám účet %1$s: %2$s @@ -3948,4 +3948,18 @@ Zobrazená oblast: %1$s x %2$s Historie vyhledávání Kajak Motorový člun + Přidat do Mapillary + Přidat do OpenPlaceReviews + OsmAnd zobrazuje fotografie z několika zdrojů: +\nOpenPlaceReviews - fotografie bodů zájmu +\nMapillary - pouliční fotografie +\nWeb / Wikimedia - fotografie bodů zájmu specifikované v OpenStreetMap datech. + Zdroje + Přibližná velikost souboru + Vyberte data k exportu do souboru. + Vyžadováno pro import + Na vašem zařízení je volných pouze %1$s. Uvolněte prosím nějaké místo nebo zrušte některé položky k exportu. + Není zde dostatek místa + Vyberte skupiny, které se mají importovat. + Vyberte položky, které se mají importovat. \ No newline at end of file diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index 9ef59f2e76..780a4d0fef 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -3264,7 +3264,7 @@ Οι φωνητικές ανακοινώσεις να γίνονται μόνο κατά την πλοήγηση. Οδηγίες πλοήγησης και ανακοινώσεις Φωνητικές ανακοινώσεις - Οπτικές προειδοποιήσεις + Προειδοποιήσεις οθόνης Ρύθμιση παραμέτρων διαδρομής Παράμετροι διαδρομής Εκτιμά τον χρόνο άφιξης αγνώστων τύπων δρόμων και περιορίζει την ταχύτητα σε όλους τους δρόμους (μπορεί να επηρεάσει τη διαδρομή) diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml index 99dda63d74..fb0ab54dc6 100644 --- a/OsmAnd/res/values-eo/phrases.xml +++ b/OsmAnd/res/values-eo/phrases.xml @@ -3843,4 +3843,34 @@ tegmento GPX-punkto Radar-turo + oficejo + honora konsulo + ĝenerala konsulejo + konsula oficejo + konsula agentejo + gvidata de konsulo + rezidejo + nunciejo + misio + sekcio de interesoj + alta komisario + delegitaro + branĉo + gvidata de ambasadestro + kvazaŭ-ambasadejo + ambaadejo + Servoj por ŝtatanoj + Vizoj enmigraj + Vizoj neenmigraj + Kvazaŭ‑ambasadejo + Konsulejo + Ambasadejo + ne + jes + ne + jes + ne + jes + subŝtata/provinca oficejo + reprezenta oficejo \ No newline at end of file diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 2de782c6c3..5e35a669e6 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -415,7 +415,7 @@ Uzantnomo kaj pasvorto al OSM Datum-konservada dosierujo Filtri laŭ nomo - Entajpu ion por serĉi + Enigu ion por serĉi A-GPS informoj Etikedoj “riparu min!” Administri @@ -749,9 +749,9 @@ Korekto de altitudo Tutmondaj maraj navigadpunktoj Elektu kategorion - Entajpu nomon - Entajpu kategorion - Entajpu priskribon. + Enigu nomon + Enigu kategorion + Enigu priskribon. Norma koloro Magneta direkto Relativa direkto @@ -1596,7 +1596,7 @@ Elekti manieron de bildigado de vektora mapo Montri retpaĝon de interesejo Montri telefonon de interesejo - entajpu tekston por filtri + enigu tekston por filtri Alta ekrandistingivo Ne etendi (kaj malklarigi) map‑kahelojn ĉe alt‑distingivaj ekranoj. Serĉi transporton publikan @@ -1651,7 +1651,7 @@ Ne povas ŝargi GPX. Sendi raporton Ne povas trovi iujn elŝutitajn mapojn en la SD-karto. - Entajpu serĉatan interesejon + Enigu serĉatan interesejon Ia Dankon al Yandex pro informoj pri trafiko. Yandex - informoj pri trafiko @@ -1805,7 +1805,7 @@ GGG:MM:SS.S Adreso Krei interesejon - Entajpu nomon de ŝatata ejo + Enigu nomon de ŝatata ejo Ŝatataj Aldonis ŝatatan punkton “{0}”. Aldoni al ŝatataj @@ -1905,7 +1905,7 @@ Senpagaj elŝutoj uzitaj Montras nombron da pluaj senpagaj elŝutoj. Bonvolu elekti kie vi volas konservi mapoj kaj aliaj datum-dosieroj. - Entajpu nomon de lando + Enigu nomon de lando Nova versio Unuaj paŝoj kun OsmAnd Ebloj @@ -1947,7 +1947,7 @@ Nombro da kontribuintoj Nombro da redaktoj Raportoj por - Dosiernomo enhavas malpermesitan signon + Malpermesata signo en dosiernomo {0} elemento(j) elektita(j) Koordinat-formo Formo de geografiaj koordinatoj. @@ -2038,7 +2038,7 @@ Subkategorioj Transliterumi nomojn Transliterumi, se nomo en %1$s mankas - Entajpu urbon, adreson aŭ nomon de interesejo + Enigu urbon, adreson aŭ nomon de interesejo Bronzkolora hela Bronzkolora malhela Kolor-skemo de nivelkurboj @@ -2366,12 +2366,12 @@ Aktivigi aŭtomatan map-skaladon Malaktivigi aŭtomatan map-skaladon Paŭzigita - Entajpu urbon aŭ lokon - Entajpu poŝtkodon + Enigu urbon aŭ lokon + Enigu poŝtkodon Proksimaj urboj Elekti urbon Serĉi poŝtkodon - Entajpu adreson + Enigu adreson Elekti straton en %1$s Sumigo @@ -2415,7 +2415,7 @@ Neniuj fotoj tie ĉi. Instali Pliigi fotan atingon de Mapillary - Instalu Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo. + Instalu la aplikaĵon Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo. Malfermi Mapillary Mapillary-foto Korektita distanco @@ -2430,7 +2430,7 @@ de Montri bildojn aldonitajn nur Dato - Entajpu uzantnomon + Enigu uzantnomon Montri nur bildojn aldonitajn de Uzantnomo Filtri bildojn laŭ alŝutinto, laŭ dato aŭ laŭ tipo; aktivaj nur je pligrandigo. @@ -2456,7 +2456,7 @@ Reprovi Esploru mapon kaj aldonu punktojn Bonvolu aldoni almenaŭ unu punkton. - GPX-dosiera nomo: + Dosiernomo de GPX: Montri sur mapo post konservi Aldoni navigadpunkton Konservi GPX‑navigadpunkton @@ -2541,7 +2541,7 @@ Vi devas aldoni almenaŭ unu markon por uzi tiun ĉi eblon. Malĝusta formo Malĝusta enigo - Entajpu novan nomon + Enigu novan nomon Reen Montri Aldonis intercelojn al mapmarkoj @@ -2634,7 +2634,7 @@ Kopii nomon de punkto Sennoma ejo Montri fermitajn rimarkojn - Montri/kaŝi OSM‑rimarkojn sur la mapo. + Montri aŭ kaŝi OSM‑rimarkojn sur la mapo. GPX - taŭga por elporti al JOSM aŭ aliaj OSM-redaktiloj. OSC - taŭga por elporti al OSM. GPX-dosiero @@ -2652,8 +2652,8 @@ Agordi kiel komencpunkton Eraro dum enporti mapon Enportis mapon - Entajpu dosiernomon. - Entajpu longitudon + Enigu dosiernomon. + Enigu longitudon Entajpu latitudon Entajpu latitudon kaj longitudon GG°MM′SS″ @@ -2772,7 +2772,7 @@ Redakti punkton Aldoni punkton Konservi kiel spuron - Vi aldonis %1$s punktojn. Entajpu dosiernomon kaj frapetu “konservi”. + Vi aldonis %1$s punktojn. Enigu dosiernomon kaj frapetu “konservi”. Forigis la punkton %1$s Mondo Ni sendos vian serĉ-peton: “%1$s” kun via pozicio. @@ -3050,7 +3050,7 @@ Ĉefa profilo Elektu specon de navigado Bonvolu elekti specon de navigo por la nova aplikaĵa profilo - Entajpu nomon por profilo + Enigu nomon por profilo Unue devas enigi nomon por profilo. Nomo neebla Jam ekzistas profilo kun la sama nomo @@ -3080,9 +3080,9 @@ Rulumu supren/malsupren por ŝanĝi pligrandigon de mapo. Eskap-klavo revenas al al aplikaĵo WunderLINQ App. Stiri per WunderLINQ Aldonu almenaŭ unu elementon al la listo en agordoj de “rapida ago” - Skiado alpa/malsuprenira + Skiado alpa kaj malsuprenira Skivojoj por skiado alpa (malsuprenira) kaj vojetoj al skitelferoj. - Skiado nordia/skikurada + Skiado nordia kaj skikurada Skivojoj por skiado nordia (skikurada). Skiado ekskursa Skivojoj ekskursaj. @@ -3261,7 +3261,7 @@ Elŝutu la detalan mapon %s, por vidi tiun ĉi areon. Ĉu movi datum‑dosierojn OsmAnd al la nova loko\? \n%1$s → %2$s - Entajpu dosier‑indikon + Enigu dosierindikon Dosierujo… Algluu dosier‑indikon por dosierujo de OsmAnd‑datumoj Ĉu ŝanĝi datum‑dosierujon OsmAnd\? @@ -3362,7 +3362,7 @@ Anstataŭigi komencpunkton per celo Simuli vian pozicion uzante registritan GPX‑kurson. Konservis kurson - Dosiernomo estas malplena + Malplena dosiernomo Malfari Butono por agordi la ekranan centron kiel komencpunkton. Sekve vi estos petita por agordi finpunkton aŭ ekos kalkulado de kurso. Montri reton de nodoj de biciklaj kursoj @@ -3572,7 +3572,7 @@ Mapklarigo Nivelombrumo %1$s el %2$s - Montri/kaŝi teren‑formon + Montri aŭ kaŝi teren‑formon Kaŝi teren‑formon Montri teren‑formon Butono por montri/kaŝi tavolon de formo de tereno sur la mapo. @@ -3690,10 +3690,10 @@ Vi povas ekigi tiujn agojn per frapeti la butonon “%1$s”. Kaŝi publikan transporton Montri publikan transporton - Montri/kaŝi publikan transporton + Montri aŭ kaŝi publikan transporton Butono por montri/kaŝi publikan transporton sur la mapo. - Krei/redakti interesejon - Aldoni/forigi ŝatatan ejojn + Krei aŭ redakti interesejon + Aldoni aŭ forigi ŝatatan ejojn Pozicioj de parkumado Restarigi implicitan ordigon de elementoj Reen al redaktado @@ -3876,7 +3876,7 @@ Refari • plibonigoj al “plani kurson”: eblo uzi diversajn specojn de navigo por ĉiu segmento aparte kaj ampleksi spurojn \n -\n• nova menuo de aspekto por spuroj: eblo elekti koloron kaj dikecon, montri sagetojn de direkto kaj vidigi markojn de komenco/fino de la spuro +\n• nova menuo de aspekto por spuroj: eblo elekti koloron kaj dikecon, montri sagetojn de direkto kaj vidigi markojn de komenco kaj fino de la spuro \n \n• plibonigita videblo de biciklaj nodoj \n @@ -3890,7 +3890,7 @@ \n \n Registri - Elektu la intervalon de registrado por la ĝenerala registrado de spuro (aktivigata per la fenestraĵo “registri spuron” sur la mapo). + Elektu la intervalon de registrado por la ĝenerala registrado de spuro (aktivigebla per la fenestraĵo “registri spuron” sur la mapo). Simpligita spuro Nur la linio de kurso estos konservita, la navigadpunktoj estos forigitaj. Dosiernomo @@ -3909,7 +3909,7 @@ \n La abono aŭtomate renoviĝos escepte se ĝi estos nuligita antaŭ la dato de renoviĝo. La pago estos prenita por la renoviĝa periodo (monato/tri monatoj/jaro) nur je la dato de renoviĝo. \n \n Vi povas administri kaj rezigni viajn abonojn per la agordoj de AppGallery. - Emblemoj komenco/fino + Emblemoj de komenco kaj fino Dankon al vi por aĉeti la kromprogramon “nivelkurboj” Abonpago prenita por la elektita periodo. VI ĉiam povas rezigni abonon ĉe AppGallery. Eviti irejojn @@ -3921,10 +3921,10 @@ Du-faza difinado de kurso por aŭtomobila navigo. Indiĝena metodo de publik-transporta navigo Aktivigi (sekuran) metodon por kalkuli kursojn de publika transporto uzante programlingvon Java - Ensaluti uzante OAuth por redakti la mapon OSM + Ensaluti per OAuth por redakti la mapon OSM Ensaluti per OAuth Forigi ĵetonon OpenStreetMap OAuth - Sukcese elsalutinta + Elsalutinta Por veturi per motorsledo sur dediĉitaj vojoj. Dosiero jam estas enportita al OsmAnd Uzi 2-fazan A* algoritmon de navigo @@ -3955,26 +3955,26 @@ Ensaluti al OpenStreetMap Ensaluti al OpenStreetMap.org Ensaluti per OpenStreetMap - Vi devas ensaluti por alŝuti novajn aŭ modifitajn ŝanĝojn. + Ensalutu por alŝuti novajn aŭ modifitajn ŝanĝojn \n -\nVi povas ensaluti per la sekura metodo OAuth aŭ per enigi uzantnomon kaj pasvorton. - Uzi uzantnomon kaj pasvorton +\naŭ per la sekura metodo OAuth aŭ per enigi uzantnomon kaj pasvorton. + Ensaluti per uzantnomo kaj pasvorto Konto Uzantnomo Historio de markoj Sendi GPX‑dosieron al OpenStreetMap Enigu etikedojn disigitajn per komo (,). - “Publika” signifas, ke la GPX‑spuro estos publika videbla en “miaj spuroj” kaj en la publika listo de spuro (GPS‑spuroj). Datumoj liverataj per la API ne ligos al paĝo de via spuro. Tempindikoj de punktoj ne estos akireblaj per la publika API GPS, kaj la punktoj ne estos ordigitaj laŭtempe. Tamen aliaj uzantoj plue povos elŝuti la nepritraktitan spuron el la publika listo de spuroj kune kun ĉiuj ampleksitaj tempindikoj. - “Privata” signifas, ke la GPX‑spuro montriĝos en neniu publika listo, sed ĝiaj punktoj plue estos akireblaj per la publika API GPS sen tempindikoj, sed tiuj punktoj estos ordigitaj laŭtempe. + “Publika” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj) kun tempindikoj kaj en nepritraktita formo. Datumoj liverataj per la API ne ligos al paĝo de via spuro. Tempindikoj de spurpunkto ne estos akireblaj per la publika API GPS, kaj spurpunktoj ne estos laŭtempe ordigitaj. + “Privata” signifas, ke la GPX‑spuro montriĝos en neniu publika listo, sed ĝiaj punktoj neordigitaj laŭtempe estos akireblaj per la publika API GPS sen tempindikoj. “Identigebla” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj), aliaj uzantoj povos elŝuti vian nepritraktitan spuron kaj ligi ĝin al via uzantnomo. Publikaj datumoj kun tempindikoj el la API GPS akireblaj per la API de spur‑punktoj indikos al originala paĝo de via spuro. “Spurebla” signifas, ke la GPX‑spuro ne montriĝos en publikaj listoj, sed pritraktitaj punktoj kun tempindikoj el ĝi (kiuj ne povos esti senpere ligitaj al vi) estos elŝuteblaj per la publika API GPS. Fermi OSM-rimarkon Komenti OSM-rimarkon - Vi povas ensaluti per la sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. + Ensalutii per la sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. Aldoni foton Registri ĉe \nOpenPlaceReviews.org - Fotoj estas liverataj de la malferm‑datuma projekto OpenPlaceReviews.org. Por alŝuti viajn fotojn, vi devas registri ĉe la retejo. + Ensaluti en la paĝon de la malferm‑datuma projekto OpenPlaceReviews.org por alŝuti fotojn. Krei novan konton Mi jam havas konton Serĉi en historio @@ -3990,4 +3990,6 @@ Necesa por enporti En via aparato estas nur %1$s da libera spaco. Liberigu iom da spaco aŭ malelektu iujn elementojn de elporto. Mankas spaco + Aldoni al Mapillary + Aldoni al OpenPlaceReviews \ No newline at end of file diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index 40f35c26d0..b9824f9d5b 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -655,7 +655,7 @@ Club Restaurant et café Artisanat - Station essence + Station service Transport individuel Alimentation en eau potable Traitement des ordures ménagères @@ -3272,8 +3272,8 @@ Source d\'énergie : biomasse н/к н/к* - - 1А* + 1A + 1A* 1Б* @@ -3844,4 +3844,8 @@ Tableau des départs : non Ascenseur Tableau des départs + Liaison + Consulat + Ambassade + Point d\'eau potable \ No newline at end of file diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 189f7afc8e..cc12531b01 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -1,7 +1,7 @@ Modifications hors-ligne - Toujours utiliser l\'édition hors-ligne. + Si le mode d\'édition hors-ligne est activé, les modifications seront enregistrées localement puis envoyées à la demande. Sinon, les modifications seront envoyées immédiatement. Les modifications de points d\'intérêt dans l\'application sont sans effet sur les cartes téléchargées, les modifications sont enregistrées dans un fichier de votre appareil. Téléversement… {0} Points d\'intérêt / Notes ont été téléversés @@ -695,8 +695,8 @@ Dès que possible Public Identifiable - Suivi - Privé + Traçable + Privée Récupérer le véhicule au parking Avertissement Un rappel pour récupérer votre véhicule a été ajouté à votre agenda. Vous pouvez modifier ou supprimer ce rappel. @@ -3951,8 +3951,8 @@ Connectez-vous pour envoyer vos modifications, \n \nsoit avec OAuth soit avec votre identifiant et mot de passe. - Vous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. - Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web. + Connectez-vous avec la méthode sécurisée OAuth ou utilisez votre identifiant et votre mot de passe. + Connectez-vous au site web du projet OpenPlaceReviews.org pour ajouter des photos. Historique de recherche Kayak Votre appareil n\'a que %1$s disponible. Veuillez libérer de l\'espace ou désélectionner l\'export pour certains éléments. @@ -3964,4 +3964,13 @@ L\'espace disponible est insuffisant Ajouter à Mapillary Ajouter à OpenPlaceReviews + OsmAnd affiche des photos de plusieurs sources : +\nOpenPlaceReviews : photos de PI ; +\nMapillary : photos de rue ; +\nWeb / Wikimedia : photos de PI réféfencés dans OpenStreetMap. + + Utiliser dev.openstreetmap.org plutôt que openstreetmap.org pour tester l\'envoi des notes OSM / Points d\'intérêt / GPX. + Utiliser dev.openstreetmap.org + + \ No newline at end of file diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index 771e934b0d..8b00e80bb6 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -3843,4 +3843,33 @@ Radartorony GPX-pont Állampolgári szolgáltatások + nincsenek + vannak + nincs + van + nincs + van + Országrész külképviselete + Emigráns kormány nem akkreditált képviselete + Nem akkreditált összekötő iroda + Tiszteletbeli konzul + Főkonzulátus + Konzuli iroda + Konzuli ügynköség + Konzulátus, élén konzullal + Rezidencia + Apostoli nunciatúra + Állandó küldöttség + Érdekképviseleti részleg + Főbiztosság (brit nemzetközösségi tag nagykövetsége) + Küldöttség + Nagykövetségi részleg + Nagykövetség, élén nagykövettel + Összekötő iroda + Követség + Bevándorlói vízum + Nem bevándorlói vízum + Összekötő iroda + Külképviselet + Konzulátus \ No newline at end of file diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index 046855440d..db7ac30daa 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -3917,7 +3917,7 @@ Az OSM-szerkesztési funkciók használatához jelentkezzék be az OAuth segítségével Bejelentkezés OAuth segítségével OpenStreetMap OAuth token törlése - Sikeresen kijelentkezett + Kijelentkezett Kétszakaszos A* útvonaltervezési algoritmus használata A fájl már importálva van az OsmAndba %1$s - %2$s @@ -3951,12 +3951,12 @@ Az OsmAnd Live-előfizetés szünetel Az OsmAnd Live-előfizetés lejárt Probléma van az előfizetésével. A fizetési mód kijavítása érdekében kattintson a gombra a Google Play előfizetési beállításaihoz történő ugráshoz. - Bejelentkezés + Felhasználónév Fiók - Fióknév és jelszó használata - Az új vagy módosított szerkesztések feltöltéséhez be kell jelentkeznie. + Bejelentkezés felhasználónévvel és jelszóval + Új vagy módosított szerkesztések feltöltéséhez jelentkezzék be \n -\nBejelentkezhet a biztonságos OAuth-módszerrel vagy használhatja fióknevét és jelszavát. +\naz OAuth segítségével vagy felhasználónevével és jelszavával. Bejelentkezés OpenStreetMap-fiókkal Bejelentkezés az OpenStreetMapre Bejelentkezés az OpenStreetMap.org-ra @@ -3966,10 +3966,22 @@ Fénykép hozzáadása Regisztráció az \nOpenPlaceReviews.org oldalon - A fényképeket a OpenPlaceReviews.org nyílt adatprojekt biztosítja. Saját fényképei feltöltéséhez be kell jelentkeznie a weboldalon. + Még több fénykép feltöltéséhez jelentkezzék be az OpenPlaceReviews.org nyílt adatprojekt weboldalára. Új fiók létrehozása Már van fiókom Motorcsónak Kajak Keresési előzmények + Források + Hozzáadás a Mapillaryhez + Hozzáadása az OpenPlaceReviewshoz + Az OsmAnd több forrásból jelenít meg fényképeket: +\nOpenPlaceReviews – POI-fotók; +\nMapillary – utcaszintű képek; +\nWeb / Wikimedia – az OpenStreetMap-adatokban meghatározott POI-fotók. + Hozzávetőleges fájlméret + Jelölje ki a fájlba exportálandó adatokat. + Szükséges az importáláshoz + A készülékén csak %1$s szabad hely van. Szabadítson fel valamennyi helyet, vagy szüntesse meg néhány exportálandó elem kijelölését. + Nincs elég hely \ No newline at end of file diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index f7bb74d54c..229d91e99f 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -3979,4 +3979,18 @@ \"Privato\" significa che la traccia non è visualizzabile in alcuna lista pubblica ma i suoi punti, in ordine non cronologico, sono disponibili attraverso le API GPS senza le informazioni temporali. \"Identificabile\" significa che la traccia è visualizzabile nelle Mie tracce GPS e nelle liste pubbliche, es. gli altri utenti potranno scaricare la traccia grezza e associarla con il tuo nome utente. I punti della traccia, con le loro informazioni temporali, saranno riconducibili, attraverso le API GPS, alla tua traccia originale. \"Tracciabile\" significa che la traccia non è visualizzabile in alcuna lista pubblica, ma solo i suoi punti, processati, con le informazioni temporali (che non possono essere direttamente associati a te) attraverso le API GPS pubbliche. + Aggiungi a Mapillary + Aggiungi a OpenPlaceReviews + OsmAnd mostra foto da più sorgenti: +\nOpenPlaceReviews - foto PDI; +\nMapillary - immagini stradali; +\nWeb / Wikimedia - foto PDI OpenStreetMap. + Risorse + Dimesione approssimativa del file + Seleziona i dati da esportare nel file. + Necessario per l\'importazione + Il tuo dispositivo ha solo %1$s liberi. Libera dello spazio i deseleziona alcune voci da esportare. + Non c\'è abbastanza spazio + Seleziona i gruppi da importare. + Seleziona gli oggetti da importare. \ No newline at end of file diff --git a/OsmAnd/res/values-lv/strings.xml b/OsmAnd/res/values-lv/strings.xml index e505fe8b91..2c392c4614 100644 --- a/OsmAnd/res/values-lv/strings.xml +++ b/OsmAnd/res/values-lv/strings.xml @@ -3212,7 +3212,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Maršruta pārrēķināšana Paziņošana Lietotāja vārds un parole - Šie iestatījumi darbosies visos profilos. + Šie iestatījumi ir globāli un darbosies visos profilos OSM rediģēšana Skatiet vēl neaugšupielādētos labojumus vai OSM kļūdas %1$s mapē. Augšupielādētie punkti vairs netiks rādīti. OSM @@ -3278,13 +3278,13 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Ārkārtas Ceļošana Nepieciešams pievienot vismaz divus punktus - Ieiet OpenStreetMap - Ieiet OpenStreetMap.org + Pierakstīties OpenStreetMap + Pierakstīties OpenStreetMap.org Pierakstīties ar OpenStreetMap Lai sūtītu labojumus vai jaunus datus, ir nepieciešams pierakstīties. \n -\nJūs varat pierakstīties, lietojot drošo OAuth metodi vai ar savu lietotāja vārdu un paroli. - Lietot pierakstīšanās datus +\nJūs varat pierakstīties, lietojot OAuth vai ar savu lietotāja vārdu un paroli. + Pierakstīties ar lietotāja vādu un paroli Konts Lietotājs Pārvaldīt abonomentu @@ -3297,10 +3297,31 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Ievadiet tagus, atdalītus ar komatu. Aizvērt OSM Note Komentēt OSM Note - Jūs varat ielogoties lietojot drošo OAuth metodi vai savu lietotāja vārdu un paroli. + Ielogojieties lietojot drošo OAuth metodi vai savu lietotāja vārdu un paroli. Pievienot foto Reģistrēties \nOpenPlaceReviews.org - Fotogrāfijas tiek piegādātas no atvērtā koda projekta OpenPlaceReviews.org. Lai pievienotu savas fotogrāfijas, nepieciešams reģistrēties šajā interneta vietnē. + Lai augšupielādētu vēl fotogrāfijas, ielogojieties atvērtā koda projekta OpenPlaceReviews.org vietnē. Izveidot jaunu kontu + Simboli + Sports + \"Privāts\" nozīmē, ka trase neparādīsies nevienā publiskā sarakstā, bet trases punkti nehronoloģiskā secībā būs pieejami caur publisko GPS API bez laika atzīmēm. + \"Identificējams\" nozīmē, ka trase būs redzama jūsu GPS trasēs un publiskajos GPS trašu sarakstos, t.i. citi lietotāji varēs lejupielādēt trasi un asociēt to ar jūsu vārdu. Publiskie trases punktu dati ar laika atzīmēm no GPS API caur trackpoints API dos referenci uz jūsu oriģinālo trases lapu. + \"Izsekojams\" nozīmē, ka pati trase neparādās publiskajos sarakstos, bet tikai apstrādātie trackpointi ar laika atzīmēm (nevar tikt asociēti konkrēti ar jums) caur lejupielādēm no publiskā GPS API. + Man jau ir konts + Meklēšanas vēsture + Kajaks + Motorlaiva + Pievienot Mapillary + Pievienot OpenPlaceReviews + OsmAnd rāda attēlus no dažādiem avotiem: +\nOpenPlaceReviews - POI bildes; +\nMapillary - ielas līmeņa attēli; +\nWeb / Wikimedia - POI bildes no OpenStreetMap datiem. + Resursi + Aptuvenais faila izmērs + Izvēlieties datus eksportēšanai failā. + Nepieciešams importam + Ierīcē ir tikai %1$s brīvās vietas. Lūdzu atbrīvojiet vietu vai izvēlieties mazāk detaļu eksportam. + Nepietiek brīvās vietas \ No newline at end of file diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index cde5e0611b..a52a317b33 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -3850,4 +3850,34 @@ Torre de radar Tapume Terraço + Não + Sim + Não + Sim + Não + Sim + Subnacional + Escritório de representação + Escritório + Consul honorário + Consulado Geral + Escritório consular + Agência consular + Chefiado por um cônsul + Residência + Nunciatura + Missão + Seção de interesses + Alto comissariado + Delegação + Seção + Chefiado por um embaixador + Ligação + Embaixada + Serviços ao cidadão + Vistos de imigrante + Vistos de não imigrante + Ligação + Consulado + Embaixada \ No newline at end of file diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 75fe84842c..87ad6154ba 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -3917,10 +3917,10 @@ Desenvolvimento de transporte público nativo Mudar para cálculo de roteamento de transporte público em Java (seguro) O que há de novo - Entre no OAuth para usar os recursos de edição do osm + Entrar com OAuth para usar os recursos osmedit Entrar via OAuth Limpar token do OpenStreetMap OAuth - Saída bem sucedida + Desconectado O arquivo já foi importado para OsmAnd Use o algoritmo de roteamento 2-phase A * Para dirigir em motos de neve com estradas e trilhas exclusivas. @@ -3948,14 +3948,14 @@ A assinatura do OsmAnd Live foi pausada A assinatura do OsmAnd Live está em espera Diferença - Entrar para OpenStreetMap + Entrar com OpenStreetMap Entrar com OpenStreetMap.org - Você precisa entrar para enviar alterações novas ou modificadas. + Entrar para carregar de alterações novas ou modificadas, \n -\nVocê pode entrar usando o método OAuth seguro ou usar sua entrada e senha. - Usar a entrada e senha +\ncom OAuth ou usando seu nome de usuário e senha. + Entrar com nome de usuário e senha Conta - Entrar + Nome de usuário Entrar com o OpenStreetMap Histórico de marcadores Enviar arquivo GPX para OpenStreetMap @@ -3966,14 +3966,26 @@ \"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de trilha processados com carimbos de data/hora (que não podem ser associados a você diretamente) são feitos por meio de downloads da API GPS pública. Fechar nota do OSM Comentário de nota do OSM - Você pode entrar usando o método OAuth seguro ou usar sua entrada e senha. + Entrar usando o método OAuth seguro ou use seu nome de usuário e senha. Adicionar foto Cadastre-se em \nOpenPlaceReviews.org - As fotos são fornecidas pelo projeto de dados abertos do OpenPlaceReviews.org. Para carregar suas fotos você precisa se inscrever no site. + Entrar no site do projeto de dados abertos OpenPlaceReviews.org para enviar ainda mais fotos. Criar nova conta Eu já tenho uma conta Histórico de busca Caiaque Lancha + Adicionar ao Mapillary + Adicionar ao OpenPlaceReviews + OsmAnd mostra fotos de várias fontes: +\nOpenPlaceReviews - fotos de POI; +\nMapillary - imagens de nível da rua; +\nWeb / Wikimedia - fotos de POI especificadas nos dados do OpenStreetMap. + Recursos + Tamanho aproximado do arquivo + Selecione os dados a serem exportados para o arquivo. + Necessário para importação + Seu dispositivo tem apenas %1$s livre. Libere espaço ou desmarque alguns itens para exportar. + Não há espaço suficiente \ No newline at end of file diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index 5cef9b374a..07c9e35cd1 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -3973,11 +3973,11 @@ Rastreável significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de rastreamento a partir dele ainda estarão disponíveis através da API pública do GPS com carimbos de tempo. Outros utilizadores só poderão descarregar pontos de rastreamento processados do seu rastreamento que não podem ser associados diretamente a si. Fechar nota do OSM Comentário de nota do OSM - Pode entrar a usar o método seguro OAuth ou usar o seu login e palavra-passe. + Faça login a usar o método seguro OAuth ou use o seu nome de utilizador e a palavra-passe. Adicionar fotos Cadastre-se em \nOpenPlaceReviews.org - As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site. + Faça login no site do projeto de dados abertos OpenPlaceReviews.org para enviar ainda mais fotos. Criar uma conta Já tenho uma conta Histórico de pesquisa @@ -3989,4 +3989,10 @@ Necessário para a importação O seu aparelho só tem %1$s livre. Por favor, libere algum espaço ou desmarque alguns itens para exportar. Não há espaço suficiente + Adicionar ao Mapillary + Adicionar ao OpenPlaceReviews + OsmAnd mostra fotos de várias fontes: +\nOpenPlaceReviews - fotos de POI; +\nMapillary - imagens ao nível da rua; +\nWeb / Wikimedia - fotos de POI especificadas nos dados do OpenStreetMap. \ No newline at end of file diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index 5998039bd6..f58e0f4dc5 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -3861,4 +3861,19 @@ Ambassada Consoladu Ambassada + Suta-natzionale + Ufìtziu de rapresentàntzia + Cònsole onoràriu + Ufìtziu consolare + Agentzia consolare + Ghiadu dae unu cònsole + Nuntziadura + Setzione de interessos + Filiale + Ghiada dae un\'ambassadore + Ufìtziu de collegamentu + Servìtzios pro sos tzitadinos + Vistos pro immigrantes + Vistos pro no immigrantes + Ufìtziu de collegamentu \ No newline at end of file diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 3a6de6cbea..c0cbb4608e 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3990,4 +3990,6 @@ Netzessàriu pro s\'importatzione Su dispositivu tuo tenet petzi %1$s a disponimentu. Lìbera unu pagu de memòria o boga s\'ischerta a unos cantos elementos de esportare. Non b\'at logu bastante + Ischerta sos grupos de importare. + Ischerta sos elementos de importare. \ No newline at end of file diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 2b246edb29..9edcd71c9a 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3922,10 +3922,10 @@ Natívna hromadná doprava (vo vývoji) Prepnúť na výpočet trasy hromadnej dopravy v Jave (bezpečné) Čo je nové - Vykonať prihlásenie cez OAuth pre použitie funkcií upravovania OSM + Prihláste sa cez OAuth pre použitie funkcií upravovania OSM Prihlásiť pomocou OAuth Vymazať token OpenStreetMap OAuth - Odhlásenie úspešné + Odhlásené Pre jazdu na snežnom vozidle po na to určených cestách. Súbor je už importovaný v OsmAnd Použiť dvojfázový algoritmus A* na výpočet trasy @@ -3953,13 +3953,13 @@ Predplatné OsmAnd Live skončilo Predplatné OsmAnd Live je pozastavené Predplatné OsmAnd Live je zablokované - Prihlásiť sa do OpenStreetMap - Prihlásiť sa do OpenStreetMap.org - Zaregistrovať sa do OpenStreetMap - Musíte sa prihlásiť pre odoslanie nových alebo zmenených údajov. + Prihlásenie pre OpenStreetMap + Prihlásenie pre OpenStreetMap.org + Prihlásiť sa do OpenStreetMap + Prihláste sa pre odoslanie nových alebo zmenených údajov, \n -\nMôžete sa prihlásiť pomocou bezpečnej metódy OAuth alebo pomocou mena a hesla. - Použiť meno a heslo +\nbuď pomocou metódy OAuth alebo pomocou mena a hesla. + Prihlásiť sa menom a heslom Účet Prihlasovacie meno História značiek @@ -3967,14 +3967,28 @@ Zadajte značky oddelené čiarkou. Zatvoriť OSM poznámku Komentovať OSM poznámku - Môžete sa prihlásiť bezpečnou metódou OAuth alebo použite meno a heslo. + Prihláste sa bezpečnou metódou OAuth alebo použite meno a heslo. Pridať foto Zaregistrovať na \nOpenPlaceReviews.org - Fotografie sú poskytované projektom OpenPlaceReviews.org s otvorenými dátami. Na odoslanie vašich fotiek sa musíte zaregistrovať na webovej stránke. + Prihláste sa na webstránke projektu OpenPlaceReviews.org s otvorenými dátami pre odoslanie ďalších fotografií. Vytvoriť nový účet Už mám účet História hľadania Kajak Motorový čln + Pridať do Mapillary + Pridať do OpenPlaceReviews + OsmAnd szobrazuje fotografie z rôznych zdrojov: +\nOpenPlaceReviews - fotografie bodov záujmu; +\nMapillary - fotografie z ulice; +\nWeb / Wikimedia - fotografie bodov záujmu špeficikované v údajoch OpenStreetMap. + Zdroje + Približná veľkosť súboru + Zvoľte údaje na export do súboru. + Potrebné pre import + Na vašom zariadení je len %1$s voľného miesta. Prosím uvoľnite miesto alebo zrušte niektoré položky z exportu. + Nie je dostatok miesta + Zvoľte skupiny, ktoré budú importované. + Zvoľte položky, ktoré budú importované. \ No newline at end of file diff --git a/OsmAnd/res/values-sr/phrases.xml b/OsmAnd/res/values-sr/phrases.xml index f764fee95c..69b1046618 100644 --- a/OsmAnd/res/values-sr/phrases.xml +++ b/OsmAnd/res/values-sr/phrases.xml @@ -3815,4 +3815,51 @@ Калдера Мар Стрелица: не + Табла одласка: не + Не + Да + Не + Да + Не + Да + Поднационални + Представништво + Канцеларија + Почасни конзулат + Генерални конзулат + Конзуларна канцеларија + Конзуларна агенција + На челу са конзулом + Резиденција + Нунцијатура + Мисија + Интересни + Висока комисија + Делегација + Подружница + На челу са амбасадором + Посредник + Амбасада + Радарски торањ + Паркинг + Паркинг + Таван + ГПКС тачка + ЛНГ + Продавница ораха + Кошница + Распоред + Стварно време + Кашњење + Да + Лифт + Мали електрични уређаји + Услуге за грађане + Имигрантске визе + Неимигрантске визе + Посредник + Конзулат + Амбасада + Табла + Доливање воде за пиће \ No newline at end of file diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index e0ac87a53f..c96a4e09e4 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -3865,8 +3865,35 @@ Промените врсту руте након Шта је ново Име фајла - + Паузирај снимање пута Додајте бар две тачке. Одјава успешна + „Приватно“ значи да се траг не појављује ни на једној јавној листи, али су тачке праћења у њему у нехронолошком редоследу доступне путем јавног ГПС АПИ-ја без временских ознака. + „Могуће је идентификовати“ значи да ће се траг јавно приказати у вашим ГПС траговима и у јавним списковима ГПС трагова, тј. други корисници ће моћи да преузму необрађени траг и повежу га са вашим корисничким именом. Јавни подаци о временским тачкама трага из ГПС АПИ-ја који се сервирају путем АПИ-ја за тачке праћења имаће референцу на вашу оригиналну страницу праћења. + „Следљиво“ значи да се траг не приказује нигде на јавним листама, али обрађене тачке праћења са временским ознакама у њима (које не могу бити директно повезане са вама) иду кроз преузимања са јавног ГПС АПИ-ја. + Затвори ОСМ белешку + Коментар ОСМ напомене + Пријавите се помоћу сигурне методе ОАутх или користите своје корисничко име и лозинку. + Додај фотографију + Региструјте се на +\nOpenPlaceReviews. + Пријавите се на веб локацију пројекта отворених података OpenPlaceReviews.орг да бисте отпремили још више фотографија. + Направите нови налог + Већ имам + Претрага + Кајак + Моторни чамац + Додај у Мапилари + Додај у ОпенПлејсРевјуз + ОсмАнд приказује фотографије из неколико извора: +\nОпенПлејсРевјуз - ПОИ фотографије; +\nМапилари - слике на нивоу улице; +\nВеб / Викимедиа - ПОИ фотографије наведене у подацима ОпенСтритМап. + Ресурси + Приближна величина датотеке + Изаберите податке за извоз у датотеку. + Потребно за увоз + Уређај има слободно само %1$s. Ослободите мало простора или поништите одабир неких предмета за извоз. + Нема довољно простора \ No newline at end of file diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index a1bda1b036..c6cd3aca26 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -2842,7 +2842,7 @@ Vänligen tillhandahåll fullständig kod Mjuk Ytfasthet %s är sparat - Öppet spår + Öppna spår Spår %s är sparat Ta bort mellanrum Överväg tillfälliga begränsningar diff --git a/OsmAnd/res/values-tr/phrases.xml b/OsmAnd/res/values-tr/phrases.xml index 45103c30c5..8489842899 100644 --- a/OsmAnd/res/values-tr/phrases.xml +++ b/OsmAnd/res/values-tr/phrases.xml @@ -3130,4 +3130,6 @@ Sütun Gölet Gölet + Konsolosluk + Büyük elçilik \ No newline at end of file diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index 0f284bf937..4ef8de0e10 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -535,7 +535,7 @@ Floresan üst katmanlar İzlenen yolları ve rotaları görüntülemek için floresan renkler kullan. Çevrim dışı düzenleme - Her zaman çevrim dışı düzenlemeyi kullanın. + Çevrim dışı düzenleme etkinleştirilirse, değişiklikler önce yerel olarak kaydedilecek ve istek üzerine karşıya yüklenecek, aksi takdirde değişiklikler hemen karşıya yüklenecek. Uygulama içinde POI değişiklikleri indirilen harita dosyalarını etkilemez, bunun yerine değişiklikler cihazınızda bir dosya olarak kaydedilir. Yükleniyor… {0} POI/not karşıya yüklendi @@ -1236,7 +1236,7 @@ Vazgeç seçili Seçimini kaldırın - Tüm Seçimleri Kaldır + Tüm seçimleri kaldır Daralt İzlenen yollar Şu anda kaydedilen yol @@ -1854,7 +1854,7 @@ Şunun için rapor Veri mevcut değil Durum - Değişiklikleri Kaydet + Değişiklikleri kaydet E-posta adresi Yeraltı nesneleri Devamını oku @@ -1943,7 +1943,7 @@ Uygulamanın şimdi harici depolamaya yazma izni var, ancak bunu yapmak için yeniden başlatılması gerekir. Tam rapor OSM kullanıcı adı ve parolası - Dosya adı geçersiz karakter içermektedir + Dosya adında geçersiz karakter 7/24 açık Bellek kartı Koordinat biçimi @@ -2805,7 +2805,7 @@ POI etiketleri Yarın şu saatte açılıyor Kapalı notları göster - Haritada OSM notlarını göster/gizle. + Haritada OSM notlarını göster veya gizle. GPX - JOSM veya diğer OSM düzenleyicilerine aktarmak için uygundur. OSC - OSM\'ye aktarmak için uygundur. OSC dosyası @@ -3156,7 +3156,7 @@ Sık Kullanılanları içe aktarın veya haritadaki noktaları işaretleyerek ekleyin. GPX dosyasını içe aktar %1$s dosyası ara noktalar içermiyor, izlenen yol olarak içe aktar\? - Hareket Noktası + Noktayı Taşı OSM alıcıları Toplam bağış kapalı @@ -3186,9 +3186,9 @@ Gündüz/gece modunu değiştir Parke veya kaldırım taşı yok \'Hızlı eylem\' ayarlarında listeye en az bir öge ekleyin - Alp/yokuş aşağı kayak + Alp ve yokuş aşağı kayak Alp veya yokuş aşağı kayak ve kayak teleferiklerine erişim için yamaçlar. - Kros/İskandinav kayak + Kros ve İskandinav kayak İskandinav veya kros kayağı pistleri. Kayak turu Kayak turu rotaları. @@ -3322,7 +3322,7 @@ Başlangıç noktası Bilinmeyen yol türleri için varış zamanını tahmin eder ve tüm yollar için hızı sınırlar (güzergahı etkileyebilir) Yol izi kaydedildi - Dosya adı boş + Boş dosya adı Eski haline döndür Ekranın, kalkış noktasını ortalamasını sağlamak için bir düğme. Daha sonra hedef belirlemeyi veya rota hesaplamasını tetiklemeyi isteyecektir. Düğüm ağı bisiklet rotalarını göster @@ -3384,7 +3384,7 @@ Kullanıcı adı ve parola Bu eklenti ayarları geneldir ve tüm profiller için geçerlidir OSM düzenleme - Yüklenmemiş tüm düzenlemelerinizi veya OSM hatalarınızı %1$s\'de görüntüleyebilirsiniz. Karşıya yüklenen noktalar OsmAnd\'da gösterilmez. + Henüz karşıya yüklenmemiş tüm düzenlemelerinizi veya OSM hatalarınızı %1$s\'de görüntüleyebilirsiniz. Karşıya yüklenen noktalar OsmAnd\'da gösterilmez. OSM Navigasyon sırasında veya harekete halindeyken gösterilen simge. Dinlenme anında gösterilen simge. @@ -3495,7 +3495,7 @@ Hepsini değiştir Her ikisini de sakla İçe aktarılan ögelere ön ek eklenecek - OsmAnd\'da içe aktarılanlarla aynı isme sahip ögeler zaten var. + OsmAnd\'da içe aktarılanlarla aynı ada sahip ögeler zaten var. \n \nBir eylem seçin. Bazı ögeler zaten var @@ -3532,7 +3532,7 @@ Güzergahtan geçerli konuma olan mesafe seçilen değerden fazla ise güzergah yeniden hesaplanacaktır. %1$s / %2$s Yamaçlar - Araziyi göster / gizle + Araziyi göster veya gizle Araziyi gizle Araziyi göster Haritada arazi katmanını göstermek veya gizlemek için bir düğme. @@ -3650,11 +3650,11 @@ Bu eylemlere “%1$s” düğmesine dokunarak erişebilirsiniz. Toplu taşıma araçlarını gizle Toplu taşıma araçlarını göster - Toplu taşıma araçlarını göster/gizle + Toplu taşıma araçlarını göster veya gizle Haritada toplu taşıma araçlarını gösteren veya gizleyen düğme. - POI Oluştur / Düzenle + POI oluştur veya düzenle Park etme alanları - Sık Kullanılan Ekle / Düzenle + Sık kullanılan ekle veya düzenle Öntanımlı öge sıralamasını geri yükle Düzenlemeye geri dön Eylem düğmesi seçilen profiller arasında geçiş yapar. @@ -3779,7 +3779,7 @@ Bitti Yolun üzerine yaz Ardından, bu seçeneği kullanmak için navigasyon profillerinizden biriyle izlenen yolunuzu izin verilen en yakın yola tutturun. - Yeni bir yol olarak kaydet + Yeni bir izleme olarak kaydet Ters güzergah Tüm yol, seçilen profil kullanılarak yeniden hesaplanacaktır. Sadece sonraki bölüm, seçilen profil kullanılarak yeniden hesaplanacaktır. @@ -3811,7 +3811,7 @@ Yol dosyası olarak kaydet %s yol dosyası seçildi (Son uygulamalar aracılığıyla) uygulama kapatıldığında yol kaydını duraklatacaktır. (OsmAnd arka plan göstergesi Android bildirim çubuğundan kaybolur.) - Genel yol kaydı için kayıt aralığını seçin (haritadaki seyahat kayıt widget\'ı aracılığıyla etkin). + Genel yol kaydı için kayıt aralığını belirtin (haritadaki \'Seyahat kaydetme\' widget\'ı aracılığıyla açıldı). Seyahat kaydetmeyi duraklat Seyahat kaydetmeyi devam ettir En yakın nokta @@ -3843,7 +3843,7 @@ Basitleştirilmiş yol • Güzergah planlama işlevi güncellendi: her bölüm için farklı navigasyon türlerinin kullanılmasına ve izlenen yolların dahil edilmesine izin veriliyor \n -\n • İzlenen yollar için yeni görünüm menüsü: renk ve kalınlık seçimi, yön oklarının gösterilmesi, başlangıç/bitiş simgeleri +\n • İzlenen yollar için yeni görünüm menüsü: renk ve kalınlık seçimi, yön oklarının gösterilmesi, başlangıç ve bitiş simgeleri \n \n • Bisiklet düğümlerinin görünürlüğü iyileştirildi. \n @@ -3859,7 +3859,7 @@ Son değiştirme İsim: Z – A İsim: A – Z - Başlangıç/bitiş simgeleri + Başlangıç ve bitiş simgeleri \'Eş yükselti eğrileri\'ni satın aldığınız için teşekkürler Abonelik seçilen dönem başına ücretlendirilir. İstediğiniz zaman AppGallery\'den iptal edin. Ödeme, satın alma onaylandığında AppGallery hesabınızdan alınacaktır. @@ -3877,10 +3877,10 @@ Yerel Toplu Taşıma geliştirme Java (güvenli) Toplu Taşıma yönlendirme hesaplamasına geçin Yenilikler - osmedit özelliklerini kullanmak için OAuth oturum açma işlemi gerçekleştirin + osmedit özelliklerini kullanmak için OAuth ile oturum açın OAuth ile oturum aç OpenStreetMap OAuth belirtecini temizle - Oturum kapatma başarılı + Oturum kapatıldı Dosya zaten OsmAnd\'da içe aktarıldı 2 aşamalı A* yönlendirme algoritması kullan Ayrılmış yollar ve parkurlarla kar arabası sürüşü için. @@ -3903,12 +3903,12 @@ Acil Seyahat En az iki nokta eklemelisiniz - OpenStreetMap\'te oturum aç - OpenStreetMap.org\'da oturum aç - Yenilikleri veya değişiklikleri karşıya yüklemek için oturum açmanız gerekir. + OpenStreetMap için oturum aç + OpenStreetMap.org için oturum aç + Yenilikleri veya değişiklikleri karşıya yüklemek için oturum açın, \n -\nGüvenli OAuth yöntemini kullanarak oturum açabilir veya kullanıcı adı ve parolanızı kullanabilirsiniz. - Kullanıcı adı ve parola kullan +\nOAuth ile oturum açabilir veya kullanıcı adı ve parolanızı kullanabilirsiniz. + Kullanıcı adı ve parola ile oturum aç Kullanıcı adı Hesap Aboneliği yönet @@ -3920,4 +3920,32 @@ İşaretleyiciler geçmişi GPX dosyasını OpenStreetMap\'e gönder Virgülle ayrılmış etiketleri girin. + \"Genel\", izlemenin GPS izlerinizde ve genel GPS izleme listelerinde herkese açık olarak ve ham biçimde zaman damgalarıyla birlikte genel izleme listesinde gösterileceği anlamına gelir. API aracılığıyla sunulan veriler, izleme sayfanızı göstermez. İzleme noktası zaman damgaları, genel GPS API\'si aracılığıyla kullanılamaz ve izleme noktaları kronolojik olarak sıralanmaz. + \"Özel\", izlemenin herkese açık herhangi bir listede gösterilmediği, ancak ondan alınan izleme noktalarının zaman damgası olmadan genel GPS API\'si aracılığıyla eşzamanlı olmayan sırada kullanılabileceği anlamına gelir. + \"Teşhis edilebilir\", izlemenin GPS izlerinizde ve genel GPS izleme listelerinde herkese açık olarak gösterileceği anlamına gelir, yani diğer kullanıcılar ham izi indirebilir ve kullanıcı adınızla ilişkilendirebilir. İzleme noktaları API\'si aracılığıyla sunulan GPS API\'sinden alınan herkese açık zaman damgalı izleme noktası verileri, orijinal izleme sayfanızı gösterecektir. + \"Takip edilebilir\", izlemenin herkese açık herhangi bir listede gösterilmediği, ancak (sizinle doğrudan ilişkilendirilemeyen) zaman damgaları olan işlenen izleme noktalarının herkese açık GPS API\'sinden indirmeler yoluyla göründüğü anlamına gelir. + OSM Notunu Kapat + OSM Notuna Yorum Yap + Güvenli OAuth yöntemini kullanarak oturum açın veya kullanıcı adınızı ve parolanızı kullanın. + Fotoğraf ekle + OpenPlaceReviews.org\'a +\nkaydolun + Daha da fazla fotoğraf yüklemek için açık veri projesi web sitesi OpenPlaceReviews.org\'da oturum açın. + Yeni hesap oluştur + Zaten bir hesabım var + Arama geçmişi + Kano + Motorlu tekne + Mapillary\'ye ekle + OpenPlaceReviews\'a ekle + OsmAnd çeşitli kaynaklardan fotoğraflar gösterir: +\nOpenPlaceReviews - POI fotoğrafları; +\nMapillary - sokak seviyesi görüntüleri; +\nİnternet / Wikimedia - OpenStreetMap verilerinde belirtilen POI fotoğrafları. + Kaynaklar + Yaklaşık dosya boyutu + Dosyaya aktarılacak verileri seçin. + İçe aktarma için gerekli + Aygıtınızda yalnızca %1$s boş alan var. Lütfen biraz alan boşaltın veya dışa aktarılacak bazı ögelerin seçimini kaldırın. + Yeterli alan yok \ No newline at end of file diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index a394ed4d31..60dbe91f88 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3989,4 +3989,6 @@ \nOpenPlaceReviews — світлини POI; \nMapillary - зображення вулиць; \nМережа / Вікімедіа — світлини POI, вказані в даних OpenStreetMap. + Виберіть групи, які буде імпортовано. + Виберіть елементи, які буде імпортовано. \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index b14a87fdbd..bb5aa58081 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,8 @@ Thx - Hardy --> + Use dev.openstreetmap.org + Switch to use "dev.openstreetmap.org" instead of "openstreetmap.org" to testing uploading OSM Note / POI / GPX. Select items that will be imported. Select groups that will be imported. There is not enough space diff --git a/OsmAnd/res/xml/osm_editing.xml b/OsmAnd/res/xml/osm_editing.xml index 469e841c36..8fd0883fc8 100644 --- a/OsmAnd/res/xml/osm_editing.xml +++ b/OsmAnd/res/xml/osm_editing.xml @@ -32,6 +32,14 @@ android:title="@string/offline_edition" tools:icon="@drawable/ic_action_offline" /> + + diff --git a/OsmAnd/src/net/osmand/AndroidNetworkUtils.java b/OsmAnd/src/net/osmand/AndroidNetworkUtils.java index d1ca9aa7ab..f8710927ef 100644 --- a/OsmAnd/src/net/osmand/AndroidNetworkUtils.java +++ b/OsmAnd/src/net/osmand/AndroidNetworkUtils.java @@ -305,8 +305,8 @@ public class AndroidNetworkUtils { try { boolean firstPrm = !urlText.contains("?"); StringBuilder sb = new StringBuilder(urlText); - for (String key : additionalParams.keySet()) { - sb.append(firstPrm ? "?" : "&").append(key).append("=").append(URLEncoder.encode(additionalParams.get(key), "UTF-8")); + for (Map.Entry entry : additionalParams.entrySet()) { + sb.append(firstPrm ? "?" : "&").append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")); firstPrm = false; } urlText = sb.toString(); diff --git a/OsmAnd/src/net/osmand/access/NavigationInfo.java b/OsmAnd/src/net/osmand/access/NavigationInfo.java index 3e087e27ae..edd296b38a 100644 --- a/OsmAnd/src/net/osmand/access/NavigationInfo.java +++ b/OsmAnd/src/net/osmand/access/NavigationInfo.java @@ -373,7 +373,7 @@ public class NavigationInfo implements OsmAndCompassListener, OsmAndLocationList dialog.cancel(); } }); - info.setItems(attributes.toArray(new String[attributes.size()]), new DialogInterface.OnClickListener() { + info.setItems(attributes.toArray(new String[0]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } diff --git a/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java b/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java index 9eeec4542b..1a80997ab3 100644 --- a/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java +++ b/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java @@ -190,14 +190,15 @@ class AppVersionUpgradeOnInit { migrateEnumPreferences(); SharedPreferences globalSharedPreferences = (SharedPreferences) settings.getGlobalPreferences(); Map globalPrefsMap = globalSharedPreferences.getAll(); - for (String key : globalPrefsMap.keySet()) { + for (Map.Entry entry : globalPrefsMap.entrySet()) { + String key = entry.getKey(); OsmandPreference pref = settings.getPreference(key); if (pref instanceof CommonPreference) { CommonPreference commonPreference = (CommonPreference) pref; if (!commonPreference.isGlobal()) { for (ApplicationMode mode : ApplicationMode.allPossibleValues()) { if (!commonPreference.isSetForMode(mode) && !commonPreference.hasDefaultValueForMode(mode)) { - settings.setPreference(key, globalPrefsMap.get(key), mode); + settings.setPreference(key, entry.getValue(), mode); } } } @@ -205,12 +206,13 @@ class AppVersionUpgradeOnInit { } SharedPreferences defaultProfilePreferences = (SharedPreferences) settings.getProfilePreferences(ApplicationMode.DEFAULT); Map defaultPrefsMap = defaultProfilePreferences.getAll(); - for (String key : defaultPrefsMap.keySet()) { + for (Map.Entry entry : defaultPrefsMap.entrySet()) { + String key = entry.getKey(); OsmandPreference pref = settings.getPreference(key); if (pref instanceof CommonPreference) { CommonPreference commonPreference = (CommonPreference) pref; if (commonPreference.isGlobal() && !commonPreference.isSet()) { - settings.setPreference(key, defaultPrefsMap.get(key)); + settings.setPreference(key, entry.getValue()); } } } diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java index d85d6ddd68..d188a7d0ee 100644 --- a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java @@ -208,7 +208,7 @@ public class ContextMenuAdapter { } items.removeAll(itemsToRemove); return new ContextMenuArrayAdapter(activity, layoutId, R.id.title, - items.toArray(new ContextMenuItem[items.size()]), app, lightTheme, changeAppModeListener); + items.toArray(new ContextMenuItem[0]), app, lightTheme, changeAppModeListener); } public class ContextMenuArrayAdapter extends ArrayAdapter { @@ -643,7 +643,7 @@ public class ContextMenuAdapter { } public static OnItemDeleteAction makeDeleteAction(final List prefs) { - return makeDeleteAction(prefs.toArray(new OsmandPreference[prefs.size()])); + return makeDeleteAction(prefs.toArray(new OsmandPreference[0])); } private static void resetSetting(ApplicationMode appMode, OsmandPreference preference, boolean profileOnly) { diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index c1db6114bc..992a0e42c6 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -261,10 +261,11 @@ public class FavouritesDbHelper { private boolean merge(Map source, Map destination) { boolean changed = false; - for (String ks : source.keySet()) { + for (Map.Entry entry : source.entrySet()) { + String ks = entry.getKey(); if (!destination.containsKey(ks)) { changed = true; - destination.put(ks, source.get(ks)); + destination.put(ks, entry.getValue()); } } return changed; @@ -360,7 +361,7 @@ public class FavouritesDbHelper { } public boolean addFavourite(FavouritePoint p, boolean saveImmediately) { - if (p.getName().equals("") && flatGroups.containsKey(p.getCategory())) { + if (p.getName().isEmpty() && flatGroups.containsKey(p.getCategory())) { return true; } if (!p.isAddressSpecified()) { @@ -369,7 +370,7 @@ public class FavouritesDbHelper { context.getSettings().SHOW_FAVORITES.set(true); FavoriteGroup group = getOrCreateGroup(p, 0); - if (!p.getName().equals("")) { + if (!p.getName().isEmpty()) { p.setVisible(group.visible); if (FavouritePoint.SpecialPointType.PARKING.equals(p.getSpecialPointType())) { p.setColor(ContextCompat.getColor(context, R.color.parking_icon_background)); @@ -712,9 +713,10 @@ public class FavouritesDbHelper { public boolean isGroupVisible(String name) { String nameLowercase = name.toLowerCase(); - for (String groupName : flatGroups.keySet()) { + for (Map.Entry entry : flatGroups.entrySet()) { + String groupName = entry.getKey(); if (groupName.toLowerCase().equals(nameLowercase) || FavoriteGroup.getDisplayName(context, groupName).equals(name)) { - return flatGroups.get(groupName).isVisible(); + return entry.getValue().isVisible(); } } return false; @@ -968,7 +970,7 @@ public class FavouritesDbHelper { p.setName(name); p.setCategory(cat); FavoriteGroup group = getOrCreateGroup(p, 0); - if (!name.equals("")) { + if (!name.isEmpty()) { p.setLatitude(query.getDouble(2)); p.setLongitude(query.getDouble(3)); group.points.add(p); @@ -1012,7 +1014,7 @@ public class FavouritesDbHelper { public boolean addFavouriteDB(FavouritePoint p) { - if (p.getName().equals("") && flatGroups.containsKey(p.getCategory())) { + if (p.getName().isEmpty() && flatGroups.containsKey(p.getCategory())) { return true; } SQLiteConnection db = openConnection(false); @@ -1022,7 +1024,7 @@ public class FavouritesDbHelper { "INSERT INTO " + FAVOURITE_TABLE_NAME + " (" + FAVOURITE_COL_NAME + ", " + FAVOURITE_COL_CATEGORY + ", " + FAVOURITE_COL_LAT + ", " + FAVOURITE_COL_LON + ")" + " VALUES (?, ?, ?, ?)", new Object[]{p.getName(), p.getCategory(), p.getLatitude(), p.getLongitude()}); //$NON-NLS-1$ //$NON-NLS-2$ FavoriteGroup group = getOrCreateGroup(p, 0); - if (!p.getName().equals("")) { + if (!p.getName().isEmpty()) { p.setVisible(group.visible); p.setColor(group.color); group.points.add(p); diff --git a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java index 2651e7b988..026987d13b 100644 --- a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java +++ b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java @@ -408,10 +408,10 @@ public class GpxSelectionHelper { boolean split = true; if (group.splitDistance > 0) { List trackSegments = r.splitByDistance(group.splitDistance, joinSegments); - as = trackSegments.toArray(new GPXTrackAnalysis[trackSegments.size()]); + as = trackSegments.toArray(new GPXTrackAnalysis[0]); } else if (group.splitTime > 0) { List trackSegments = r.splitByTime(group.splitTime, joinSegments); - as = trackSegments.toArray(new GPXTrackAnalysis[trackSegments.size()]); + as = trackSegments.toArray(new GPXTrackAnalysis[0]); } else { split = false; as = new GPXTrackAnalysis[] {GPXTrackAnalysis.segment(0, r)}; diff --git a/OsmAnd/src/net/osmand/plus/OsmAndConstants.java b/OsmAnd/src/net/osmand/plus/OsmAndConstants.java index 4e808ac947..16a5312405 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndConstants.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndConstants.java @@ -1,16 +1,21 @@ package net.osmand.plus; public interface OsmAndConstants { - - + + public int UI_HANDLER_MAP_VIEW = 3000; - + public int UI_HANDLER_MAP_CONTROLS = 4000; - + public int UI_HANDLER_LOCATION_SERVICE = 5000; public int UI_HANDLER_PROGRESS = 6000; public int UI_HANDLER_SEARCH = 7000; + String OSM_OAUTH_DEVELOPER_KEY = "v8G8r9NLJZGMV4he5lwbQlz620FNVARKjI9Bm5UJ"; + String OSM_OAUTH_DEVELOPER_SECRET = "jDvM95Ne1Bq2BDTmIfB6b3ZMxvdK87WGfp6DC07J"; + String OSM_OAUTH_CONSUMER_KEY = "Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y"; + String OSM_OAUTH_CONSUMER_SECRET = "lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM"; + } diff --git a/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java b/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java index 92bcdef9a6..3fd1aa1adc 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java @@ -63,7 +63,7 @@ public class OsmAndFormatter { private static final char WEST = 'W'; private static final char EAST = 'E'; - { + static { fixed2.setMinimumFractionDigits(2); fixed1.setMinimumFractionDigits(1); fixed1.setMinimumIntegerDigits(1); diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index 97cfeb662a..00bdd97e2d 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -412,8 +412,8 @@ public class OsmandApplication extends MultiDexApplication { if (defaultLocale == null) { defaultLocale = Locale.getDefault(); } - if (!"".equals(lang)) { - if (!"".equals(country)) { + if (!Algorithms.isEmpty(lang)) { + if (!Algorithms.isEmpty(country)) { preferredLocale = new Locale(lang, country); } else { preferredLocale = new Locale(lang); @@ -421,9 +421,9 @@ public class OsmandApplication extends MultiDexApplication { } Locale selectedLocale = null; - if (!"".equals(lang) && !config.locale.equals(preferredLocale)) { + if (!Algorithms.isEmpty(lang) && !config.locale.equals(preferredLocale)) { selectedLocale = preferredLocale; - } else if ("".equals(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { + } else if (Algorithms.isEmpty(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { selectedLocale = defaultLocale; preferredLocale = null; } @@ -807,17 +807,17 @@ public class OsmandApplication extends MultiDexApplication { } return s; } - + public void setLanguage(Context context) { if (preferredLocale != null) { Configuration config = context.getResources().getConfiguration(); String lang = preferredLocale.getLanguage(); - if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { + if (!Algorithms.isEmpty(lang) && !config.locale.getLanguage().equals(lang)) { preferredLocale = new Locale(lang); Locale.setDefault(preferredLocale); config.locale = preferredLocale; context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); - } else if("".equals(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { + } else if (Algorithms.isEmpty(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { Locale.setDefault(defaultLocale); config.locale = defaultLocale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 07ef8df985..4221ffa308 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -309,9 +309,7 @@ public class TargetPointsHelper { public List getIntermediatePointsNavigation() { List intermediatePoints = new ArrayList<>(); if (settings.USE_INTERMEDIATE_POINTS_NAVIGATION.get()) { - for (TargetPoint t : this.intermediatePoints) { - intermediatePoints.add(t); - } + intermediatePoints.addAll(this.intermediatePoints); } return intermediatePoints; } @@ -347,8 +345,7 @@ public class TargetPointsHelper { } public List getIntermediatePointsWithTarget() { - List res = new ArrayList<>(); - res.addAll(this.intermediatePoints); + List res = new ArrayList<>(this.intermediatePoints); if(pointToNavigate != null) { res.add(pointToNavigate); } diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index f818716730..97ba206fb0 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -141,7 +141,7 @@ public class UiUtilities { } public Drawable getLayeredIcon(@DrawableRes int bgIconId, @DrawableRes int foregroundIconId, - @ColorRes int bgColorId, @ColorRes int foregroundColorId) { + @ColorRes int bgColorId, @ColorRes int foregroundColorId) { Drawable background = getDrawable(bgIconId, bgColorId); Drawable foreground = getDrawable(foregroundIconId, foregroundColorId); return getLayeredIcon(background, foreground); @@ -272,11 +272,11 @@ public class UiUtilities { } public void updateLocationView(UpdateLocationViewCache cache, ImageView arrow, TextView txt, - double toLat, double toLon) { + double toLat, double toLon) { updateLocationView(cache, arrow, txt, new LatLon(toLat, toLon)); } public void updateLocationView(UpdateLocationViewCache cache, ImageView arrow, TextView txt, - LatLon toLoc) { + LatLon toLoc) { float[] mes = new float[2]; boolean stale = false; LatLon fromLoc = cache == null ? null : cache.specialFrom; @@ -390,7 +390,7 @@ public class UiUtilities { } public static void setupSnackbar(Snackbar snackbar, boolean nightMode, @ColorRes Integer backgroundColor, - @ColorRes Integer messageColor, @ColorRes Integer actionColor, Integer maxLines) { + @ColorRes Integer messageColor, @ColorRes Integer actionColor, Integer maxLines) { if (snackbar == null) { return; } @@ -451,7 +451,7 @@ public class UiUtilities { public static void updateCustomRadioButtons(Context app, View buttonsView, boolean nightMode, - CustomRadioButtonType buttonType) { + CustomRadioButtonType buttonType) { int activeColor = ContextCompat.getColor(app, nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light); @@ -478,7 +478,7 @@ public class UiUtilities { endButtonText.setTextColor(activeColor); startButtonContainer.setBackgroundDrawable(background); startButtonText.setTextColor(textColor); - } else { + } else if (buttonType == CustomRadioButtonType.END) { if (isLayoutRtl) { background.setCornerRadii(new float[]{radius, radius, 0, 0, 0, 0, radius, radius}); } else { @@ -488,6 +488,11 @@ public class UiUtilities { endButtonText.setTextColor(textColor); startButtonContainer.setBackgroundColor(Color.TRANSPARENT); startButtonText.setTextColor(activeColor); + } else if (buttonType == null) { + endButtonContainer.setBackgroundColor(Color.TRANSPARENT); + startButtonContainer.setBackgroundColor(Color.TRANSPARENT); + endButtonText.setTextColor(activeColor); + startButtonText.setTextColor(activeColor); } } @@ -502,10 +507,10 @@ public class UiUtilities { } public static void setupCompoundButton(boolean nightMode, @ColorInt int activeColor, CompoundButton compoundButton) { - if (compoundButton == null) { - return; - } - Context ctx = compoundButton.getContext(); + if (compoundButton == null) { + return; + } + Context ctx = compoundButton.getContext(); int inactiveColorPrimary = ContextCompat.getColor(ctx, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_secondary_light); int inactiveColorSecondary = getColorWithAlpha(inactiveColorPrimary, 0.45f); setupCompoundButton(compoundButton, activeColor, inactiveColorPrimary, inactiveColorSecondary); @@ -584,7 +589,7 @@ public class UiUtilities { } public static void setupSlider(Slider slider, boolean nightMode, - @ColorInt Integer activeColor, boolean showTicks) { + @ColorInt Integer activeColor, boolean showTicks) { Context ctx = slider.getContext(); if (ctx == null) { return; @@ -770,9 +775,9 @@ public class UiUtilities { } public static ListPopupWindow createListPopupWindow(Context themedCtx, - View v, int minWidth, - List items, - final AdapterView.OnItemClickListener listener) { + View v, int minWidth, + List items, + final AdapterView.OnItemClickListener listener) { int contentPadding = themedCtx.getResources().getDimensionPixelSize(R.dimen.content_padding); int contentPaddingHalf = themedCtx.getResources().getDimensionPixelSize(R.dimen.content_padding_half); int defaultListTextSize = themedCtx.getResources().getDimensionPixelSize(R.dimen.default_list_text_size); diff --git a/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java b/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java index b7b3044f97..7eb21d4ee8 100644 --- a/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java @@ -176,7 +176,7 @@ public class HelpActivity extends OsmandActionBarActivity implements AdapterView "feature_articles/osmand-3-8-released.html")); String releasedate = ""; - if (!this.getString(R.string.app_edition).equals("")) { + if (!this.getString(R.string.app_edition).isEmpty()) { releasedate = ", " + this.getString(R.string.shared_string_release).toLowerCase() + ": " + this.getString(R.string.app_edition); } String version = Version.getFullVersion(getMyApplication()) + releasedate; diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 749c5371ea..5a6a7560a5 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -1148,7 +1148,7 @@ public class MapActivityActions implements DialogProvider { items.add(getString(R.string.show_location)); items.add(getString(R.string.shared_string_show_details)); AlertDialog.Builder menu = new AlertDialog.Builder(mapActivity); - menu.setItems(items.toArray(new String[items.size()]), new DialogInterface.OnClickListener() { + menu.setItems(items.toArray(new String[0]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { dialog.dismiss(); diff --git a/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java b/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java index 5bf6c2b0a1..ff7039702e 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java +++ b/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java @@ -208,11 +208,13 @@ public class SavingTrackHelper extends SQLiteOpenHelper { Map data = collectRecordedData(); // save file - for (final String f : data.keySet()) { + for (final Map.Entry entry : data.entrySet()) { + final String f = entry.getKey(); + GPXFile gpx = entry.getValue(); log.debug("Filename: " + f); File fout = new File(dir, f + IndexConstants.GPX_FILE_EXT); - if (!data.get(f).isEmpty()) { - WptPt pt = data.get(f).findPointToShow(); + if (!gpx.isEmpty()) { + WptPt pt = gpx.findPointToShow(); String fileName = f + "_" + new SimpleDateFormat("HH-mm_EEE", Locale.US).format(new Date(pt.time)); //$NON-NLS-1$ Integer trackStorageDirectory = ctx.getSettings().TRACK_STORAGE_DIRECTORY.get(); if (!OsmandSettings.REC_DIRECTORY.equals(trackStorageDirectory)) { @@ -235,13 +237,12 @@ public class SavingTrackHelper extends SQLiteOpenHelper { } } - Exception warn = GPXUtilities.writeGpxFile(fout, data.get(f)); + Exception warn = GPXUtilities.writeGpxFile(fout, gpx); if (warn != null) { warnings.add(warn.getMessage()); return new SaveGpxResult(warnings, new ArrayList()); } - GPXFile gpx = data.get(f); GPXTrackAnalysis analysis = gpx.getAnalysis(fout.lastModified()); GpxDataItem item = new GpxDataItem(fout, analysis); ctx.getGpxDbHelper().add(item); diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java index 0c64258825..79abd4190a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java +++ b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java @@ -165,7 +165,7 @@ public class StartGPSStatus extends OsmAndAction { // if (g.activity.length() == 0) { PackageManager pm = mapActivity.getPackageManager(); try { - String appName = !g.paidAppName.equals("") && + String appName = !g.paidAppName.isEmpty() && g.installed(mapActivity, g.paidAppName) ? g.paidAppName : g.appName; intent = pm.getLaunchIntentForPackage(appName); } catch (RuntimeException e) { diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java index a1c4d466e1..6b3de30970 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java @@ -166,9 +166,7 @@ public class SearchPoiFilterFragment extends OsmAndListFragment implements Searc } }); - for (AbstractPoiType p : res) { - filters.add(p); - } + filters.addAll(res); filters.add(poiFilters.getSearchByNamePOIFilter()); if (OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) != null) { filters.add(poiFilters.getNominatimPOIFilter()); diff --git a/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java b/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java index 6a8b8a1b06..ab30a9a102 100644 --- a/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java +++ b/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java @@ -25,9 +25,9 @@ public class FileSettingsAPIImpl implements SettingsAPI { Properties props = new Properties(); FileInputStream fis = new FileInputStream(file); props.load(fis); - for (Object key : props.keySet()) { - String k = key.toString(); - map.put(k, props.get(key)); + for (Entry entry : props.entrySet()) { + String k = entry.getKey().toString(); + map.put(k, entry.getValue()); } } } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index 441600bde2..e1317fb630 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -1860,7 +1860,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { protected Recording[] getRecordingsSorted() { checkRecordings(); Collection allObjects = getAllRecordings(); - Recording[] res = allObjects.toArray(new Recording[allObjects.size()]); + Recording[] res = allObjects.toArray(new Recording[0]); Arrays.sort(res, new Comparator() { @Override diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java index 883010ea46..e976d0b4ea 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java @@ -223,7 +223,7 @@ public class DashChooseAppDirFragment { paths.add(""); types.add(OsmandSettings.EXTERNAL_STORAGE_TYPE_SPECIFIED); - editalert.setSingleChoiceItems(items.toArray(new String[items.size()]), selected, + editalert.setSingleChoiceItems(items.toArray(new String[0]), selected, new DialogInterface.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java b/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java index 20f5c4ba4a..af0f6bbbfd 100644 --- a/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -298,9 +299,7 @@ public class LogcatActivity extends ActionBarProgressActivity { LogcatActivity activity = logcatActivity.get(); if (activity != null) { boolean autoscroll = !activity.recyclerView.canScrollVertically(1); - for(String s : values) { - activity.logs.add(s); - } + activity.logs.addAll(Arrays.asList(values)); activity.adapter.notifyDataSetChanged(); if(autoscroll) { activity.recyclerView.scrollToPosition(activity.logs.size() - 1); diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java index 858f80e018..ca7382dd6e 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java @@ -404,7 +404,7 @@ public class ConfigureMapMenu { bld.setTitle(R.string.map_magnifier); bld.setNegativeButton(R.string.shared_string_dismiss, null); DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter( - values.toArray(new String[values.size()]), nightMode, i, app, selectedProfileColor, themeRes, new View.OnClickListener() { + values.toArray(new String[0]), nightMode, i, app, selectedProfileColor, themeRes, new View.OnClickListener() { @Override public void onClick(View v) { int which = (int) v.getTag(); @@ -481,7 +481,7 @@ public class ConfigureMapMenu { .createItem()); String localeDescr = activity.getMyApplication().getSettings().MAP_PREFERRED_LOCALE.get(); - localeDescr = localeDescr == null || localeDescr.equals("") ? activity.getString(R.string.local_map_names) + localeDescr = localeDescr == null || localeDescr.isEmpty() ? activity.getString(R.string.local_map_names) : localeDescr; adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_locale, activity) .setId(MAP_LANGUAGE_ID) @@ -570,7 +570,7 @@ public class ConfigureMapMenu { txtIds[index]); refreshMapComplete(activity); String localeDescr = txtIds[index]; - localeDescr = localeDescr == null || localeDescr.equals("") ? activity + localeDescr = localeDescr == null || localeDescr.isEmpty() ? activity .getString(R.string.local_map_names) : localeDescr; adapter.getItem(pos).setDescription(localeDescr); ad.notifyDataSetInvalidated(); @@ -639,7 +639,7 @@ public class ConfigureMapMenu { return mp.get(lhs).compareTo(mp.get(rhs)); } }); - return lst.toArray(new String[lst.size()]); + return lst.toArray(new String[0]); } public static String[] getMapNamesValues(Context ctx, String[] ids) { diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java b/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java index 36d2f21b85..c85d63361a 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java @@ -349,7 +349,7 @@ public class DownloadFileHelper { private int currentRead = 0; public CountingMultiInputStream(List streams) { - this.delegate = streams.toArray(new InputStream[streams.size()]); + this.delegate = streams.toArray(new InputStream[0]); } @Override diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java index 4cf4f1154a..9160160973 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java @@ -582,7 +582,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement operationTask = null; } if (operationTask != null) { - operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new LocalIndexInfo[selectedItems.size()])); + operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new LocalIndexInfo[0])); } if (actionMode != null) { actionMode.finish(); diff --git a/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java index 65baa93718..f7362edc76 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java @@ -166,12 +166,12 @@ public class UpdatesIndexFragment extends OsmAndListFragment implements Download dialog.setPositiveButton(R.string.shared_string_update, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - getMyActivity().startDownload(indexItems.toArray(new IndexItem[indexItems.size()])); + getMyActivity().startDownload(indexItems.toArray(new IndexItem[0])); } }); dialog.create().show(); } else { - getMyActivity().startDownload(indexItems.toArray(new IndexItem[indexItems.size()])); + getMyActivity().startDownload(indexItems.toArray(new IndexItem[0])); } } }); diff --git a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java index 6222663a00..da5f6359b0 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java @@ -871,7 +871,7 @@ public class ExternalApiHelper { searchTypes.add(HOUSE); searchTypes.add(STREET_INTERSECTION); } - searchSettings = searchSettings.setSearchTypes(searchTypes.toArray(new ObjectType[searchTypes.size()])); + searchSettings = searchSettings.setSearchTypes(searchTypes.toArray(new ObjectType[0])); core.search(searchQuery, false, null, searchSettings); } diff --git a/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java index a90247e644..ab40f14407 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java @@ -101,7 +101,7 @@ public class MapMarkerDialogHelper { String desc = OsmAndFormatter.getFormattedDate(app, marker.creationDate); String markerGroupName = marker.groupName; if (markerGroupName != null) { - if (markerGroupName.equals("")) { + if (markerGroupName.isEmpty()) { markerGroupName = app.getString(R.string.shared_string_favorites); } desc += " • " + markerGroupName; diff --git a/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java b/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java index 16fb083f13..09d2064284 100644 --- a/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java +++ b/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java @@ -513,10 +513,9 @@ public class ImportHelper { private File getFileToSave(final String fileName, final File importDir, final WptPt pt) { final StringBuilder builder = new StringBuilder(fileName); - if ("".equals(fileName)) { + if (Algorithms.isEmpty(fileName)) { builder.append("import_").append(new SimpleDateFormat("HH-mm_EEE", Locale.US).format(new Date(pt.time))).append(GPX_FILE_EXT); //$NON-NLS-1$ - } - if (fileName.endsWith(KML_SUFFIX)) { + } else if (fileName.endsWith(KML_SUFFIX)) { builder.replace(builder.length() - KML_SUFFIX.length(), builder.length(), GPX_FILE_EXT); } else if (fileName.endsWith(KMZ_SUFFIX)) { builder.replace(builder.length() - KMZ_SUFFIX.length(), builder.length(), GPX_FILE_EXT); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index 35db3c821e..67f53b96ea 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -367,8 +367,7 @@ public class MenuBuilder { @Override public void onFinish(List cardList) { if (!isHidden()) { - List cards = new ArrayList<>(); - cards.addAll(cardList); + List cards = new ArrayList(cardList); if (cardList.size() == 0) { cards.add(new NoImagesCard(mapActivity)); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java index 06783d6f50..28cea2eb1e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java @@ -64,6 +64,8 @@ public class HorizontalSelectionAdapter extends RecyclerView.Adapter> pointsByCategories = gpxFile.getPointsByCategories(); - for (String category : pointsByCategories.keySet()) { + for (Map.Entry> entry : pointsByCategories.entrySet()) { + String category = entry.getKey(); final BottomSheetItemWithCompoundButton[] categoryItem = new BottomSheetItemWithCompoundButton[1]; categoryItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() .setChecked(!isUpdateMode || (categories != null && categories.contains(category))) @@ -96,9 +97,9 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee } }) .setCompoundButtonColorId(activeColorResId) - .setDescription(String.valueOf(pointsByCategories.get(category).size())) + .setDescription(String.valueOf(entry.getValue().size())) .setIcon(getContentIcon(R.drawable.ic_action_folder)) - .setTitle(category.equals("") ? getString(R.string.shared_string_waypoints) : category) + .setTitle(category.isEmpty() ? getString(R.string.shared_string_waypoints) : category) .setLayoutId(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp) .setTag(category) .setOnClickListener(new View.OnClickListener() { diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java index c1e85387b3..2fa206d08f 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java @@ -131,7 +131,7 @@ public class MapMarkersActiveAdapter extends RecyclerView.Adapter it = categories.iterator(); while (it.hasNext()) { String category = it.next(); - if (category.equals("")) { + if (category.isEmpty()) { category = app.getResources().getString(R.string.shared_string_waypoints); } sb.append(category); diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java index 87d8e54303..ba407b23f9 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java @@ -145,7 +145,7 @@ public class MapMarkersHistoryAdapter extends RecyclerView.Adapter it = categories.iterator(); while (it.hasNext()) { String category = it.next(); - if (!category.equals("")) { + if (!category.isEmpty()) { sb.append(category); if (it.hasNext()) { sb.append(", "); diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index 3b70d79f11..c8a412318e 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -127,7 +127,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route private Snackbar snackbar; private String fileName; - private AdditionalInfoType currentAdditionalInfoType; + private @Nullable + AdditionalInfoType currentAdditionalInfoType; private boolean wasCollapseButtonVisible; private boolean progressBarVisible; @@ -175,6 +176,11 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route protected int getFragmentHeight() { return mainView.getHeight(); } + + @Override + public boolean shouldShowXAxisPoints() { + return false; + } } private void setEditingCtx(MeasurementEditingContext editingCtx) { @@ -264,6 +270,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route portrait = AndroidUiHelper.isOrientationPortrait(mapActivity); pointsSt = getString(R.string.shared_string_gpx_points).toLowerCase(); + int widthInPixels = getResources().getDimensionPixelOffset(R.dimen.gpx_group_button_width); View view = UiUtilities.getInflater(getContext(), nightMode) .inflate(R.layout.fragment_measurement_tool, container, false); @@ -283,6 +290,15 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route @Override public void onClick(View v) { changeAdditionalInfoType(AdditionalInfoType.POINTS); + int pointsCount = editingCtx.getPointsCount(); + if (pointsCount == 0) { + disable(upDownBtn); + collapseAdditionalInfoView(); + } else { + expandAdditionalInfoView(); + additionalInfoExpanded = true; + } + updateUpDownBtn(); } }); @@ -293,6 +309,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route @Override public void onClick(View v) { changeAdditionalInfoType(AdditionalInfoType.GRAPH); + expandAdditionalInfoView(); + updateUpDownBtn(); } }); } @@ -340,6 +358,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route View applyMovePointButton = mainView.findViewById(R.id.apply_move_point_button); UiUtilities.setupDialogButton(nightMode, applyMovePointButton, UiUtilities.DialogButtonType.PRIMARY, R.string.shared_string_apply); + applyMovePointButton.setMinimumWidth(widthInPixels); applyMovePointButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { @@ -351,6 +370,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route View applyPointBeforeAfterButton = mainView.findViewById(R.id.apply_point_before_after_point_button); UiUtilities.setupDialogButton(nightMode, applyPointBeforeAfterButton, UiUtilities.DialogButtonType.PRIMARY, R.string.shared_string_apply); + applyPointBeforeAfterButton.setMinimumWidth(widthInPixels); applyPointBeforeAfterButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { @@ -361,6 +381,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route View addPointBeforeAfterButton = mainView.findViewById(R.id.add_point_before_after_button); UiUtilities.setupDialogButton(nightMode, addPointBeforeAfterButton, UiUtilities.DialogButtonType.PRIMARY, R.string.shared_string_add); + addPointBeforeAfterButton.setMinimumWidth(widthInPixels); addPointBeforeAfterButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { @@ -416,7 +437,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route addCenterPoint(); } }); - + addPointButton.setMinimumWidth(widthInPixels); measurementLayer.setOnSingleTapListener(new MeasurementToolLayer.OnSingleTapListener() { @Override public void onAddPoint() { @@ -425,9 +446,6 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route @Override public void onSelectPoint(int selectedPointPos) { - if (additionalInfoExpanded) { - collapseAdditionalInfoView(); - } if (selectedPointPos != -1) { openSelectedPointMenu(mapActivity); } @@ -529,25 +547,36 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route return view; } - private void changeAdditionalInfoType(@NonNull AdditionalInfoType type) { + private void changeAdditionalInfoType(@Nullable AdditionalInfoType type) { if (!additionalInfoExpanded || !isCurrentAdditionalInfoType(type)) { MapActivity ma = getMapActivity(); if (ma == null) return; OsmandApplication app = ma.getMyApplication(); + View buttonsDivider = customRadioButton.findViewById(R.id.buttons_divider); if (AdditionalInfoType.POINTS == type) { visibleCard = pointsCard; + additionalInfoExpanded = true; + buttonsDivider.setVisibility(View.GONE); UiUtilities.updateCustomRadioButtons(app, customRadioButton, nightMode, START); } else if (AdditionalInfoType.GRAPH == type) { visibleCard = graphsCard; + additionalInfoExpanded = true; + buttonsDivider.setVisibility(View.GONE); UiUtilities.updateCustomRadioButtons(app, customRadioButton, nightMode, END); + } else if (null == type) { + visibleCard = null; + additionalInfoExpanded = false; + buttonsDivider.setVisibility(View.VISIBLE); + UiUtilities.updateCustomRadioButtons(app, customRadioButton, nightMode, null); } cardsContainer.removeAllViews(); - View cardView = visibleCard.getView() != null ? visibleCard.getView() : visibleCard.build(ma); - cardsContainer.addView(cardView); + if (visibleCard != null) { + View cardView = visibleCard.getView() != null ? visibleCard.getView() : visibleCard.build(ma); + cardsContainer.addView(cardView); + } currentAdditionalInfoType = type; - additionalInfoExpanded = true; updateUpDownBtn(); } } @@ -1030,7 +1059,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route @Override public void onChangeApplicationMode(ApplicationMode mode, RouteBetweenPointsDialogType dialogType, - RouteBetweenPointsDialogMode dialogMode) { + RouteBetweenPointsDialogMode dialogMode) { MeasurementToolLayer measurementLayer = getMeasurementLayer(); if (measurementLayer != null) { ChangeRouteType changeRouteType = ChangeRouteType.NEXT_SEGMENT; @@ -1465,9 +1494,10 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route private void collapseAdditionalInfoView() { if (portrait) { additionalInfoExpanded = false; - updateUpDownBtn(); additionalInfoContainer.setVisibility(View.GONE); setDefaultMapPosition(); + changeAdditionalInfoType(null); + updateUpDownBtn(); } } @@ -1866,7 +1896,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route } public static boolean showInstance(FragmentManager fragmentManager, MeasurementEditingContext editingCtx, - boolean followTrackMode) { + boolean followTrackMode) { MeasurementToolFragment fragment = new MeasurementToolFragment(); fragment.setEditingCtx(editingCtx); fragment.setMode(FOLLOW_TRACK_MODE, followTrackMode); diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java index 8feb1ecf5c..54bc3469be 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java @@ -14,26 +14,31 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import net.osmand.AndroidUtils; +import net.osmand.GPXUtilities.WptPt; import net.osmand.PlatformUtil; +import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.BottomSheetBehaviourDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.util.MapUtils; import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.List; -import static net.osmand.plus.UiUtilities.CustomRadioButtonType.START; import static net.osmand.plus.UiUtilities.CustomRadioButtonType.END; +import static net.osmand.plus.UiUtilities.CustomRadioButtonType.START; import static net.osmand.plus.measurementtool.MeasurementEditingContext.DEFAULT_APP_MODE; import static net.osmand.plus.measurementtool.SelectFileBottomSheet.BOTTOM_SHEET_HEIGHT_DP; public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBehaviourDialogFragment { + private static final Log LOG = PlatformUtil.getLog(RouteBetweenPointsBottomSheetDialogFragment.class); public static final String TAG = RouteBetweenPointsBottomSheetDialogFragment.class.getSimpleName(); public static final int STRAIGHT_LINE_TAG = -1; @@ -60,101 +65,6 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha ALL, } - private String getButtonText(RouteBetweenPointsDialogMode dialogMode) { - switch (dialogType) { - case WHOLE_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.next_segment); - case ALL: - return getString(R.string.whole_track); - } - break; - case NEXT_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.next_segment); - case ALL: - return getString(R.string.all_next_segments); - } - break; - case PREV_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.previous_segment); - case ALL: - return getString(R.string.all_previous_segments); - } - break; - } - return ""; - } - - private String getButtonDescr(RouteBetweenPointsDialogMode dialogMode) { - switch (dialogType) { - case WHOLE_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.route_between_points_next_segment_button_desc); - case ALL: - return getString(R.string.route_between_points_whole_track_button_desc); - } - break; - case NEXT_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.only_selected_segment_recalc); - case ALL: - return getString(R.string.all_next_segments_will_be_recalc); - } - break; - case PREV_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.only_selected_segment_recalc); - case ALL: - return getString(R.string.all_previous_segments_will_be_recalc); - } - break; - } - return ""; - } - - private void addDelimiterView(LinearLayout container) { - View row = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.divider, container, false); - View divider = row.findViewById(R.id.divider); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) divider.getLayoutParams(); - params.topMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); - params.bottomMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); - container.addView(row); - } - - public void setDefaultDialogMode(RouteBetweenPointsDialogMode defaultDialogMode) { - this.defaultDialogMode = defaultDialogMode; - updateModeButtons(); - } - - public void updateModeButtons() { - UiUtilities.updateCustomRadioButtons(getMyApplication(), customRadioButton, nightMode, - defaultDialogMode == RouteBetweenPointsDialogMode.SINGLE ? START : END); - btnDescription.setText(getButtonDescr(defaultDialogMode)); - } - - private void addProfileView(LinearLayout container, View.OnClickListener onClickListener, Object tag, - Drawable icon, CharSequence title, boolean check) { - View row = UiUtilities.getInflater(getContext(), nightMode) - .inflate(R.layout.bottom_sheet_item_with_radio_btn, container, false); - ((RadioButton) row.findViewById(R.id.compound_button)).setChecked(check); - ImageView imageView = row.findViewById(R.id.icon); - imageView.setImageDrawable(icon); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) imageView.getLayoutParams(); - params.rightMargin = container.getContext().getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin_large); - ((TextView) row.findViewById(R.id.title)).setText(title); - row.setOnClickListener(onClickListener); - row.setTag(tag); - container.addView(row); - } - @Override public void createMenuItems(Bundle savedInstanceState) { Bundle args = getArguments(); @@ -173,6 +83,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha .inflate(R.layout.fragment_route_between_points_bottom_sheet_dialog, null, false); customRadioButton = mainView.findViewById(R.id.custom_radio_buttons); + customRadioButton.setMinimumHeight(getResources().getDimensionPixelSize(R.dimen.route_info_control_buttons_height)); TextView singleModeButton = mainView.findViewById(R.id.left_button); singleModeButton.setText(getButtonText(RouteBetweenPointsDialogMode.SINGLE)); TextView allModeButton = mainView.findViewById(R.id.right_button); @@ -253,6 +164,137 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha super.onDestroyView(); } + private void addDelimiterView(LinearLayout container) { + View row = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.divider, container, false); + View divider = row.findViewById(R.id.divider); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) divider.getLayoutParams(); + params.topMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); + params.bottomMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); + container.addView(row); + } + + public void setDefaultDialogMode(RouteBetweenPointsDialogMode defaultDialogMode) { + this.defaultDialogMode = defaultDialogMode; + updateModeButtons(); + } + + public void updateModeButtons() { + UiUtilities.updateCustomRadioButtons(getMyApplication(), customRadioButton, nightMode, + defaultDialogMode == RouteBetweenPointsDialogMode.SINGLE ? START : END); + btnDescription.setText(getButtonDescr(defaultDialogMode)); + } + + private void addProfileView(LinearLayout container, View.OnClickListener onClickListener, Object tag, + Drawable icon, CharSequence title, boolean check) { + View row = UiUtilities.getInflater(getContext(), nightMode) + .inflate(R.layout.bottom_sheet_item_with_radio_btn, container, false); + ((RadioButton) row.findViewById(R.id.compound_button)).setChecked(check); + ImageView imageView = row.findViewById(R.id.icon); + imageView.setImageDrawable(icon); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) imageView.getLayoutParams(); + params.rightMargin = container.getContext().getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin_large); + ((TextView) row.findViewById(R.id.title)).setText(title); + row.setOnClickListener(onClickListener); + row.setTag(tag); + container.addView(row); + } + + private String getButtonText(RouteBetweenPointsDialogMode dialogMode) { + switch (dialogType) { + case WHOLE_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.next_segment); + case ALL: + return getString(R.string.whole_track); + } + break; + case NEXT_ROUTE_CALCULATION: + String nextDescr = getDescription(false, dialogMode); + switch (dialogMode) { + case SINGLE: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.next_segment), nextDescr); + case ALL: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.all_next_segments), nextDescr); + } + break; + case PREV_ROUTE_CALCULATION: + String prevDescr = getDescription(true, dialogMode); + switch (dialogMode) { + case SINGLE: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.previous_segment), prevDescr); + case ALL: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.all_previous_segments), prevDescr); + } + break; + } + return ""; + } + + private String getButtonDescr(RouteBetweenPointsDialogMode dialogMode) { + switch (dialogType) { + case WHOLE_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.route_between_points_next_segment_button_desc); + case ALL: + return getString(R.string.route_between_points_whole_track_button_desc); + } + break; + case NEXT_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.only_selected_segment_recalc); + case ALL: + return getString(R.string.all_next_segments_will_be_recalc); + } + break; + case PREV_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.only_selected_segment_recalc); + case ALL: + return getString(R.string.all_previous_segments_will_be_recalc); + } + break; + } + return ""; + } + + @NonNull + private String getDescription(boolean before, RouteBetweenPointsDialogMode dialogMode) { + MapActivity mapActivity = (MapActivity) getActivity(); + if (mapActivity == null) { + return ""; + } + MeasurementEditingContext editingCtx = mapActivity.getMapLayers().getMeasurementToolLayer().getEditingCtx(); + int pos = editingCtx.getSelectedPointPosition(); + List points = editingCtx.getPoints(); + + float dist = 0; + if (dialogMode == RouteBetweenPointsDialogMode.SINGLE) { + WptPt selectedPoint = points.get(pos); + WptPt second = points.get(before ? pos - 1 : pos + 1); + dist += MapUtils.getDistance(selectedPoint.lat, selectedPoint.lon, second.lat, second.lon); + } else { + int startIdx; + int endIdx; + if (before) { + startIdx = 1; + endIdx = pos; + } else { + startIdx = pos + 1; + endIdx = points.size() - 1; + } + for (int i = startIdx; i <= endIdx; i++) { + WptPt first = points.get(i - 1); + WptPt second = points.get(i); + dist += MapUtils.getDistance(first.lat, first.lon, second.lat, second.lon); + } + } + return OsmAndFormatter.getFormattedDistance(dist, mapActivity.getMyApplication()); + } + public static void showInstance(FragmentManager fm, Fragment targetFragment, RouteBetweenPointsDialogType dialogType, RouteBetweenPointsDialogMode defaultDialogMode, diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java index 39ff57b20c..e6cccff706 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java @@ -159,7 +159,6 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(new OptionsDividerItem(getContext())); BaseBottomSheetItem changeRouteTypeBefore = new BottomSheetItemWithDescription.Builder() - .setDescription(getDescription(true)) .setIcon(getRouteTypeIcon(true)) .setTitle(getString(R.string.plan_route_change_route_type_before)) .setLayoutId(R.layout.bottom_sheet_item_with_descr_pad_32dp) @@ -178,7 +177,6 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(changeRouteTypeBefore); BaseBottomSheetItem changeRouteTypeAfter = new BottomSheetItemWithDescription.Builder() - .setDescription(getDescription(false)) .setIcon(getRouteTypeIcon(false)) .setTitle(getString(R.string.plan_route_change_route_type_after)) .setLayoutId(R.layout.bottom_sheet_item_with_descr_pad_32dp) diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java index ec255b1bbc..e6c5f2ff1b 100644 --- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java +++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java @@ -73,7 +73,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin { super(app); liveMonitoringHelper = new LiveMonitoringHelper(app); final List am = ApplicationMode.allPossibleValues(); - ApplicationMode.regWidgetVisibility("monitoring", am.toArray(new ApplicationMode[am.size()])); + ApplicationMode.regWidgetVisibility("monitoring", am.toArray(new ApplicationMode[0])); settings = app.getSettings(); pluginPreferences.add(settings.SAVE_TRACK_TO_GPX); pluginPreferences.add(settings.SAVE_TRACK_INTERVAL); diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java index 6bac2a31ea..48c1dca711 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java @@ -554,7 +554,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement public void doAction(int actionResId) { if (actionResId == R.string.shared_string_delete) { operationTask = new DeleteGpxTask(); - operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new GpxInfo[selectedItems.size()])); + operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new GpxInfo[0])); } else { operationTask = null; } @@ -1009,7 +1009,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement List progress = new ArrayList<>(); loadGPXFolder(mapPath, result, loadTask, progress, ""); if (!progress.isEmpty()) { - loadTask.loadFile(progress.toArray(new GpxInfo[progress.size()])); + loadTask.loadFile(progress.toArray(new GpxInfo[0])); } } } @@ -1029,7 +1029,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement result.add(info); progress.add(info); if (progress.size() > 7) { - loadTask.loadFile(progress.toArray(new GpxInfo[progress.size()])); + loadTask.loadFile(progress.toArray(new GpxInfo[0])); progress.clear(); } } @@ -1475,7 +1475,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement list.add(GPXDataSetType.SLOPE); } if (list.size() > 0) { - gpxItem.chartTypes = list.toArray(new GPXDataSetType[list.size()]); + gpxItem.chartTypes = list.toArray(new GPXDataSetType[0]); } final OsmandSettings settings = app.getSettings(); settings.setMapLocationToShow(gpxItem.locationStart.lat, gpxItem.locationStart.lon, diff --git a/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java index e53b51cf39..08c68ac3e8 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java @@ -410,7 +410,7 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit tabTypeList.add(GPXTabItemType.GPX_TAB_ITEM_SPEED); } } - tabTypes = tabTypeList.toArray(new GPXTabItemType[tabTypeList.size()]); + tabTypes = tabTypeList.toArray(new GPXTabItemType[0]); Context context = tabs.getContext(); titles = new String[tabTypes.length]; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java b/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java index 1db6bd0542..a46ddb0ba1 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java @@ -222,8 +222,8 @@ public class AddPOIAction extends QuickAction { } addPoiToStringSet(getPoiTypes(activity).getOtherMapCategory(), tagKeys, valueKeys); tagKeys.addAll(EditPoiDialogFragment.BASIC_TAGS); - mAdapter.setTagData(tagKeys.toArray(new String[tagKeys.size()])); - mAdapter.setValueData(valueKeys.toArray(new String[valueKeys.size()])); + mAdapter.setTagData(tagKeys.toArray(new String[0])); + mAdapter.setValueData(valueKeys.toArray(new String[0])); Button addTagButton = (Button) view.findViewById(R.id.addTagButton); addTagButton.setOnClickListener(new View.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java index b538ccd0c5..a99afa7a22 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java @@ -89,8 +89,8 @@ public class AdvancedEditPoiFragment extends BaseOsmAndFragment addPoiToStringSet(abstractPoiType, tagKeys, valueKeys); } addPoiToStringSet(mapPoiTypes.getOtherMapCategory(), tagKeys, valueKeys); - mAdapter.setTagData(tagKeys.toArray(new String[tagKeys.size()])); - mAdapter.setValueData(valueKeys.toArray(new String[valueKeys.size()])); + mAdapter.setTagData(tagKeys.toArray(new String[0])); + mAdapter.setValueData(valueKeys.toArray(new String[0])); Button addTagButton = (Button) view.findViewById(R.id.addTagButton); addTagButton.setOnClickListener(new View.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java index ecdc776c78..55b24b7ed4 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java @@ -427,8 +427,6 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { f.setArguments(args); f.show(getChildFragmentManager(), "exceedDialog"); } else if (TextUtils.isEmpty(poiTypeEditText.getText())) { - HashSet tagsCopy = new HashSet<>(); - tagsCopy.addAll(editPoiData.getTagValues().keySet()); if (Algorithms.isEmpty(editPoiData.getTag(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue()))) { SaveExtraValidationDialogFragment f = new SaveExtraValidationDialogFragment(); Bundle args = new Bundle(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java index 8940093c19..98256d0635 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java @@ -66,33 +66,19 @@ public class OpenstreetmapRemoteUtil implements OpenstreetmapUtil { @Override public EntityInfo getEntityInfo(long id) { - if(entityInfoId != null && entityInfoId.getId().longValue() == id) { + if (entityInfoId != null && entityInfoId.getId().longValue() == id) { return entityInfo; } return null; } - private static String getSiteApi() { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - - String RETURN_API; - - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - RETURN_API = "https://api.openstreetmap.org/"; - } else { - RETURN_API = "http://api.openstreetmap.org/"; - } - - // RETURN_API = "http://api06.dev.openstreetmap.org/"; - - return RETURN_API; + private String getSiteApi() { + return settings.getOsmUrl(); } - private final static String URL_TO_UPLOAD_GPX = getSiteApi() + "api/0.6/gpx/create"; - public String uploadGPXFile(String tagstring, String description, String visibility, File f) { OsmOAuthAuthorizationAdapter adapter = new OsmOAuthAuthorizationAdapter(ctx); - String url = URL_TO_UPLOAD_GPX; + String url = getSiteApi() + "api/0.6/gpx/create"; Map additionalData = new LinkedHashMap(); additionalData.put("description", description); additionalData.put("tags", tagstring); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java index 78b356fd03..71f7f112ec 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java @@ -248,15 +248,8 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider } protected List loadingBugs(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude) { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - String SITE_API; - - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - SITE_API = "https://api.openstreetmap.org/"; - } else { - SITE_API = "http://api.openstreetmap.org/"; - } + String SITE_API = activity.getMyApplication().getSettings().getOsmUrl(); List bugs = new ArrayList<>(); StringBuilder b = new StringBuilder(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java index a6e2dd5ca8..5d6c172738 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java @@ -1,9 +1,12 @@ package net.osmand.plus.osmedit; +import com.github.scribejava.core.model.Response; + import net.osmand.PlatformUtil; import net.osmand.osm.io.Base64; import net.osmand.osm.io.NetworkUtils; +import net.osmand.osm.oauth.OsmOAuthAuthorizationClient; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.Version; @@ -19,6 +22,8 @@ import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.ExecutionException; public class OsmBugsRemoteUtil implements OsmBugsUtil { @@ -26,26 +31,12 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { private static final String GET = "GET"; private static final String POST = "POST"; - static String getNotesApi() { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - String RETURN_API; - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - RETURN_API = "https://api.openstreetmap.org/api/0.6/notes"; - } else { - RETURN_API = "http://api.openstreetmap.org/api/0.6/notes"; - } - return RETURN_API; + String getNotesApi() { + return settings.getOsmUrl() + "api/0.6/notes"; } - static String getUserDetailsApi() { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - String RETURN_API; - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - RETURN_API = "https://api.openstreetmap.org/api/0.6/user/details"; - } else { - RETURN_API = "http://api.openstreetmap.org/api/0.6/user/details"; - } - return RETURN_API; + String getUserDetailsApi() { + return settings.getOsmUrl() + "api/0.6/user/details"; } private OsmandApplication app; @@ -107,57 +98,82 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { return editingPOI(getUserDetailsApi(), GET, "validate_login", false); } - private OsmBugResult editingPOI(String url, String requestMethod, String userOperation, - boolean anonymous) { - OsmOAuthAuthorizationAdapter client = new OsmOAuthAuthorizationAdapter(app); - OsmBugResult r = new OsmBugResult(); - try { - HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url); - log.info("Editing poi " + url); - connection.setConnectTimeout(15000); - connection.setRequestMethod(requestMethod); - connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); //$NON-NLS-1$ - - if (!anonymous) { - if (client.isValidToken()) { - connection.addRequestProperty("Authorization", "OAuth " + client.getClient().getAccessToken().getToken()); - } else { - String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); //$NON-NLS-1$ - connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } + private OsmBugResult editingPOI(String url, String requestMethod, String userOperation, boolean anonymous) { + OsmOAuthAuthorizationAdapter authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); + OsmBugResult result = new OsmBugResult(); + if (authorizationAdapter.isValidToken() && !anonymous) { + try { + result = performOAuthRequest(url, requestMethod, userOperation, authorizationAdapter); + } catch (InterruptedException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (ExecutionException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (IOException e) { + log.error(e); + result.warning = e.getMessage(); } - - connection.setDoInput(true); - connection.connect(); - String msg = connection.getResponseMessage(); - boolean ok = connection.getResponseCode() == HttpURLConnection.HTTP_OK; - log.info(msg); //$NON-NLS-1$ - // populate return fields. - - StringBuilder responseBody; - if (connection.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { - responseBody = Algorithms.readFromInputStream(connection.getErrorStream()); - } else { - responseBody = Algorithms.readFromInputStream(connection.getInputStream()); + } else { + try { + result = performBasicRequest(url, requestMethod, anonymous); + } catch (FileNotFoundException | NullPointerException e) { + // that's tricky case why NPE is thrown to fix that problem httpClient could be used + String msg = app.getString(R.string.auth_failed); + log.error(msg, e); + result.warning = app.getString(R.string.auth_failed) + ""; + } catch (MalformedURLException e) { + log.error(userOperation + " " + app.getString(R.string.failed_op), e); + result.warning = e.getMessage() + ""; + } catch (IOException e) { + log.error(userOperation + " " + app.getString(R.string.failed_op), e); + result.warning = e.getMessage() + " link unavailable"; } - log.info("Response : " + responseBody); //$NON-NLS-1$ - connection.disconnect(); - if (!ok) { - r.warning = msg + "\n" + responseBody; - } - } catch (FileNotFoundException | NullPointerException e) { - // that's tricky case why NPE is thrown to fix that problem httpClient could be used - String msg = app.getString(R.string.auth_failed); - log.error(msg, e); - r.warning = app.getString(R.string.auth_failed) + ""; - } catch (MalformedURLException e) { - log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$ - r.warning = e.getMessage() + ""; - } catch (IOException e) { - log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$ - r.warning = e.getMessage() + " link unavailable"; } - return r; + return result; } -} + private OsmBugResult performBasicRequest(String url, String requestMethod, boolean anonymous) throws IOException { + OsmBugResult result = new OsmBugResult(); + HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url); + log.info("Editing poi " + url); + connection.setConnectTimeout(15000); + connection.setRequestMethod(requestMethod); + connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); + if (!anonymous) { + String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); + connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes(StandardCharsets.UTF_8))); + } + connection.setDoInput(true); + connection.connect(); + String msg = connection.getResponseMessage(); + boolean ok = connection.getResponseCode() == HttpURLConnection.HTTP_OK; + log.info(msg); + // populate return fields. + + StringBuilder responseBody; + if (connection.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { + responseBody = Algorithms.readFromInputStream(connection.getErrorStream()); + } else { + responseBody = Algorithms.readFromInputStream(connection.getInputStream()); + } + log.info("Response : " + responseBody); + connection.disconnect(); + if (!ok) { + result.warning = msg + "\n" + responseBody; + } + return result; + } + + private OsmBugResult performOAuthRequest(String url, String requestMethod, String userOperation, + OsmOAuthAuthorizationAdapter authorizationAdapter) + throws InterruptedException, ExecutionException, IOException { + OsmBugResult result = new OsmBugResult(); + OsmOAuthAuthorizationClient client = authorizationAdapter.getClient(); + Response response = client.performRequest(url, requestMethod, userOperation); + if (response.getCode() != HttpURLConnection.HTTP_OK) { + result.warning = response.getMessage() + "\n" + response.getBody(); + } + return result; + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index c590f80b95..991073c435 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -15,7 +15,6 @@ import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; -import net.osmand.PlatformUtil; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.AndroidUiHelper; @@ -31,16 +30,12 @@ import net.osmand.plus.settings.preferences.SwitchPreferenceEx; import net.osmand.plus.widgets.style.CustomTypefaceSpan; import net.osmand.util.Algorithms; -import org.apache.commons.logging.Log; - import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID; import static net.osmand.plus.osmedit.OsmEditingPlugin.OSM_EDIT_TAB; public class OsmEditingFragment extends BaseSettingsFragment implements OnPreferenceChanged, ValidateOsmLoginListener, OsmAuthorizationListener { - private static final Log log = PlatformUtil.getLog(OsmEditingFragment.class); - private static final String OSM_LOGOUT = "osm_logout"; private static final String OPEN_OSM_EDITS = "open_osm_edits"; public static final String OSM_LOGIN_DATA = "osm_login_data"; @@ -74,6 +69,7 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer setupLogoutPref(); setupOfflineEditingPref(); + setupUseDevUrlPref(); setupOsmEditsDescrPref(); setupOsmEditsPref(); } @@ -142,6 +138,13 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer offlineEditingPref.setIcon(icon); } + private void setupUseDevUrlPref() { + Drawable icon = getPersistentPrefIcon(R.drawable.ic_action_laptop); + SwitchPreferenceEx useDevUrlPref = findPreference(settings.USE_DEV_URL.getId()); + useDevUrlPref.setDescription(getString(R.string.use_dev_url_descr)); + useDevUrlPref.setIcon(icon); + } + private void setupOsmEditsDescrPref() { String menu = getString(R.string.shared_string_menu); String myPlaces = getString(R.string.shared_string_my_places); @@ -165,6 +168,18 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer createProfile.setIcon(getActiveIcon(R.drawable.ic_action_folder)); } + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + String prefId = preference.getKey(); + if (settings.USE_DEV_URL.getId().equals(prefId) && newValue instanceof Boolean) { + settings.USE_DEV_URL.set((Boolean) newValue); + osmLogout(); + authorizationAdapter = app.getOsmOAuthHelper().updateAdapter(); + return true; + } + return super.onPreferenceChange(preference, newValue); + } + @Override public boolean onPreferenceClick(Preference preference) { String prefId = preference.getKey(); @@ -185,10 +200,18 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer return true; } } else if (OSM_LOGOUT.equals(prefId)) { - if (isValidToken()) { + osmLogout(); + return true; + } + return super.onPreferenceClick(preference); + } + + private void osmLogout() { + boolean validToken = isValidToken(); + if (validToken || isLoginExists()) { + if (validToken) { settings.USER_ACCESS_TOKEN.resetToDefault(); settings.USER_ACCESS_TOKEN_SECRET.resetToDefault(); - authorizationAdapter.resetToken(); } else { settings.USER_NAME.resetToDefault(); @@ -196,13 +219,15 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer } app.showShortToastMessage(R.string.osm_edit_logout_success); updateAllSettings(); - return true; } - return super.onPreferenceClick(preference); } @Override public void onPreferenceChanged(String prefId) { + if (settings.USE_DEV_URL.getId().equals(prefId)) { + osmLogout(); + authorizationAdapter = app.getOsmOAuthHelper().updateAdapter(); + } updateAllSettings(); } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index 6382acb107..90da6cc65d 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -415,7 +415,7 @@ public class OsmEditingPlugin extends OsmandPlugin { public void onClick(DialogInterface dialog, int which) { List selectedItems = f.getSelectedItems(); sendGPXFiles(activity, f, - selectedItems.toArray(new GpxInfo[selectedItems.size()])); + selectedItems.toArray(new GpxInfo[0])); } }); return true; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 3c1733f7ac..380eeb8850 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -296,7 +296,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements ProgressDial item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - uploadItems(osmEditsSelected.toArray(new OsmPoint[osmEditsSelected.size()])); + uploadItems(osmEditsSelected.toArray(new OsmPoint[0])); mode.finish(); return true; } @@ -594,7 +594,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements ProgressDial public void onClick(int type) { List points = getPointsToExport(); new BackupOpenstreetmapPointAsyncTask(type, exportType).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, - points.toArray(new OsmPoint[points.size()])); + points.toArray(new OsmPoint[0])); } }; } @@ -684,9 +684,9 @@ public class OsmEditsFragment extends OsmAndListFragment implements ProgressDial @Override public void uploadEnded(Map loadErrorsMap) { super.uploadEnded(loadErrorsMap); - for (OsmPoint osmPoint : loadErrorsMap.keySet()) { - if (loadErrorsMap.get(osmPoint) == null) { - osmEdits.remove(osmPoint); + for (Map.Entry entry : loadErrorsMap.entrySet()) { + if (entry.getValue() == null) { + osmEdits.remove(entry.getKey()); } } recreateAdapterData(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java index 1d09b522ab..cbc37e1ea2 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java @@ -59,8 +59,8 @@ public class OsmEditsUploadListenerHelper implements OsmEditsUploadListener { } int uploaded = 0; int pointsNum = loadErrorsMap.keySet().size(); - for (OsmPoint point : loadErrorsMap.keySet()) { - if (loadErrorsMap.get(point) == null) { + for (String s : loadErrorsMap.values()) { + if (s == null) { uploaded++; } } @@ -200,13 +200,14 @@ public class OsmEditsUploadListenerHelper implements OsmEditsUploadListener { boolean[] hasErrors = new boolean[loadErrorsMap.keySet().size()]; ArrayList pointsWithErrors = new ArrayList<>(); int i = 0; - for (OsmPoint point : loadErrorsMap.keySet()) { + for (Map.Entry entry : loadErrorsMap.entrySet()) { + OsmPoint point = entry.getKey(); pointNames[i] = point.getGroup() == OsmPoint.Group.BUG ? ((OsmNotesPoint) point).getText() : ((OpenstreetmapPoint) point).getName(); pointNames[i] = TextUtils.isEmpty(pointNames[i]) ? "id:" + point.getId() : pointNames[i]; - hasErrors[i] = loadErrorsMap.get(point) != null; + hasErrors[i] = entry.getValue() != null; if (hasErrors[i]) { pointsWithErrors.add(point); } @@ -221,7 +222,7 @@ public class OsmEditsUploadListenerHelper implements OsmEditsUploadListener { new UploadingMultipleErrorDialogFragment(); Bundle bundle = new Bundle(); bundle.putSerializable(POINTS_WITH_ERRORS, - pointsWithErrors.toArray(new OsmPoint[pointsWithErrors.size()])); + pointsWithErrors.toArray(new OsmPoint[0])); bundle.putStringArray(POINT_NAMES, pointNames); bundle.putBooleanArray(HAS_ERROR, hasErrors); fragment.setArguments(bundle); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java index 53b9ce0677..4c75a384ae 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java @@ -36,7 +36,7 @@ public class PoiSubTypeDialogFragment extends DialogFragment { } else { addCategory(a, strings); } - final String[] subCats = strings.toArray(new String[strings.size()]); + final String[] subCats = strings.toArray(new String[0]); builder.setItems(subCats, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java index cdcf88fb0a..2278d8e8bd 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java @@ -31,7 +31,7 @@ public class PoiTypeDialogFragment extends DialogFragment { categories.add(category); } } - builder.setItems(vals.toArray(new String[vals.size()]), new Dialog.OnClickListener() { + builder.setItems(vals.toArray(new String[0]), new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { PoiCategory aType = categories.get(which); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index 42ba887996..6bb227c2d3 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -250,7 +250,7 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { if (modifiedItemsOutOfLimit != 0) { comment = comment.concat("; ").concat(modifiedItemsOutOfLimit + " ") .concat(getString(R.string.items_modified)).concat("."); - } else if (!comment.equals("")) { + } else if (!comment.isEmpty()) { comment = comment.concat("."); } return comment; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java index d402cdfe49..adfb8a2b60 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java @@ -84,7 +84,7 @@ public class SendPoiDialogFragment extends DialogFragment { messageLabel.setVisibility(hasPOI ? View.VISIBLE : View.GONE); messageEditText.setVisibility(hasPOI ? View.VISIBLE : View.GONE); closeChangeSetCheckBox.setVisibility(hasPOI ? View.VISIBLE : View.GONE); - closeChangeSetCheckBox.setChecked(hasPOI && !defaultChangeSet.equals("")); + closeChangeSetCheckBox.setChecked(hasPOI && !defaultChangeSet.isEmpty()); view.findViewById(R.id.osm_note_header).setVisibility(hasPOI ? View.GONE : View.VISIBLE); uploadAnonymously.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override @@ -233,7 +233,7 @@ public class SendPoiDialogFragment extends DialogFragment { } if (modifiedItemsOutOfLimit != 0) { comment = comment.concat("; ").concat(modifiedItemsOutOfLimit + " ").concat(getString(R.string.items_modified)).concat("."); - } else if (!comment.equals("")){ + } else if (!comment.isEmpty()){ comment = comment.concat("."); } return comment; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java index a224d93fa0..63ca96b968 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java @@ -8,6 +8,7 @@ import android.webkit.WebView; import androidx.annotation.NonNull; +import com.github.scribejava.core.builder.api.DefaultApi10a; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; @@ -16,7 +17,7 @@ import com.github.scribejava.core.model.Verb; import net.osmand.PlatformUtil; import net.osmand.osm.oauth.OsmOAuthAuthorizationClient; -import net.osmand.plus.BuildConfig; +import net.osmand.plus.OsmAndConstants; import net.osmand.plus.OsmandApplication; import org.apache.commons.logging.Log; @@ -31,16 +32,27 @@ public class OsmOAuthAuthorizationAdapter { private static final int THREAD_ID = 10101; private static final String OSM_USER = "user"; private static final String DISPLAY_NAME = "display_name"; - private static final String OSM_USER_DETAILS_URL = "https://api.openstreetmap.org/api/0.6/user/details"; public final static Log log = PlatformUtil.getLog(OsmOAuthAuthorizationAdapter.class); private OsmandApplication app; - private OsmOAuthAuthorizationClient client = - new OsmOAuthAuthorizationClient(BuildConfig.OSM_OAUTH_CONSUMER_KEY, BuildConfig.OSM_OAUTH_CONSUMER_SECRET); + private final OsmOAuthAuthorizationClient client; public OsmOAuthAuthorizationAdapter(OsmandApplication app) { TrafficStats.setThreadStatsTag(THREAD_ID); this.app = app; + DefaultApi10a api10a; + String key; + String secret; + if (app.getSettings().USE_DEV_URL.get()) { + api10a = new OsmOAuthAuthorizationClient.OsmDevApi(); + key = OsmAndConstants.OSM_OAUTH_DEVELOPER_KEY; + secret = OsmAndConstants.OSM_OAUTH_DEVELOPER_SECRET; + } else { + api10a = new OsmOAuthAuthorizationClient.OsmApi(); + key = OsmAndConstants.OSM_OAUTH_CONSUMER_KEY; + secret = OsmAndConstants.OSM_OAUTH_CONSUMER_SECRET; + } + client = new OsmOAuthAuthorizationClient(key, secret, api10a); restoreToken(); } @@ -162,9 +174,10 @@ public class OsmOAuthAuthorizationAdapter { return parseUserName(response); } - public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException { - return performRequest(OSM_USER_DETAILS_URL, Verb.GET.name(), null); - } + public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException { + String osmUserDetailsUrl = app.getSettings().getOsmUrl() + "api/0.6/user/details"; + return performRequest(osmUserDetailsUrl, Verb.GET.name(), null); + } public String parseUserName(Response response) throws XmlPullParserException, IOException { String userName = null; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java index f444c03030..d7ef523d8c 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java @@ -12,7 +12,7 @@ import java.util.Set; public class OsmOAuthHelper { private final OsmandApplication app; - private final OsmOAuthAuthorizationAdapter authorizationAdapter; + private OsmOAuthAuthorizationAdapter authorizationAdapter; private final Set listeners = new HashSet<>(); public OsmOAuthHelper(@NonNull OsmandApplication app) { @@ -24,6 +24,11 @@ public class OsmOAuthHelper { listeners.add(listener); } + public OsmOAuthAuthorizationAdapter updateAdapter(){ + authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); + return authorizationAdapter; + } + public void removeListener(OsmAuthorizationListener listener) { listeners.remove(listener); } diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java index d586516fc5..2e9e11c5c3 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java @@ -231,9 +231,8 @@ public class PoiFiltersHelper { public List getTopDefinedPoiFilters(boolean includeDeleted) { List top = this.cacheTopStandardFilters; if (top == null) { - top = new ArrayList<>(); // user defined - top.addAll(getUserDefinedPoiFilters(true)); + top = new ArrayList<>(getUserDefinedPoiFilters(true)); // default MapPoiTypes poiTypes = application.getPoiTypes(); for (AbstractPoiType t : poiTypes.getTopVisibleFilters()) { @@ -751,14 +750,15 @@ public class PoiFiltersHelper { } Map> types = p.getAcceptedTypes(); SQLiteStatement insertCategories = db.compileStatement("INSERT INTO " + CATEGORIES_NAME + " VALUES (?, ?, ?)"); - for (PoiCategory a : types.keySet()) { - if (types.get(a) == null) { + for (Map.Entry> entry : types.entrySet()) { + PoiCategory a = entry.getKey(); + if (entry.getValue() == null) { insertCategories.bindString(1, p.getFilterId()); insertCategories.bindString(2, a.getKeyName()); insertCategories.bindNull(3); insertCategories.execute(); } else { - for (String s : types.get(a)) { + for (String s : entry.getValue()) { insertCategories.bindString(1, p.getFilterId()); insertCategories.bindString(2, a.getKeyName()); insertCategories.bindString(3, s); diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java b/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java index 6629228696..1d3449640f 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java @@ -535,20 +535,19 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable return getName(); } StringBuilder res = new StringBuilder(); - for (PoiCategory p : acceptedTypes.keySet()) { - LinkedHashSet set = acceptedTypes.get(p); + for (Entry> entry : acceptedTypes.entrySet()) { + LinkedHashSet set = entry.getValue(); if (set == null) { if (res.length() > 0) { res.append(", "); } - res.append(p.getTranslation()); + res.append(entry.getKey().getTranslation()); } if (res.length() > chars) { return res.toString(); } } - for (PoiCategory p : acceptedTypes.keySet()) { - LinkedHashSet set = acceptedTypes.get(p); + for (LinkedHashSet set : acceptedTypes.values()) { if (set != null) { for (String st : set) { if (res.length() > 0) { @@ -616,8 +615,8 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable public boolean areAllTypesAccepted() { if (poiTypes.getCategories(false).size() == acceptedTypes.size()) { - for (PoiCategory a : acceptedTypes.keySet()) { - if (acceptedTypes.get(a) != null) { + for (LinkedHashSet strings : acceptedTypes.values()) { + if (strings != null) { return false; } } @@ -711,8 +710,9 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable } private void putAllAcceptedTypes(Map> types) { - for (PoiCategory category : types.keySet()) { - LinkedHashSet typesSet = types.get(category); + for (Entry> entry : types.entrySet()) { + PoiCategory category = entry.getKey(); + LinkedHashSet typesSet = entry.getValue(); if (acceptedTypes.containsKey(category)) { if (acceptedTypes.get(category) != null && typesSet != null) { acceptedTypes.get(category).addAll(typesSet); diff --git a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java index 8bc8d1b51a..0b07a41c4f 100644 --- a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java +++ b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java @@ -311,8 +311,9 @@ public class MapRenderRepositories { } boolean containsJapanMapData = false; boolean useLive = context.getSettings().USE_OSM_LIVE_FOR_ROUTING.get(); - for (String mapName : files.keySet()) { - BinaryMapIndexReader fr = files.get(mapName); + for (Map.Entry entry : files.entrySet()) { + String mapName = entry.getKey(); + BinaryMapIndexReader fr = entry.getValue(); if (fr != null && (fr.containsMapData(leftX, topY, rightX, bottomY, zoom) || fr.containsRouteData(leftX, topY, rightX, bottomY, zoom))) { if (!nativeFiles.contains(mapName)) { @@ -727,7 +728,7 @@ public class MapRenderRepositories { currentRenderingContext.height = requestedBox.getPixHeight(); currentRenderingContext.nightMode = nightMode; if(requestedBox.getZoom() <= zoomToOverviewLocalNames && - "".equals(prefs.MAP_PREFERRED_LOCALE.get())) { + prefs.MAP_PREFERRED_LOCALE.get() != null && prefs.MAP_PREFERRED_LOCALE.get().isEmpty()) { currentRenderingContext.preferredLocale = app.getLanguage(); currentRenderingContext.transliterate = !languagesNotTransliterateOnBasemap.contains(app.getLanguage()); diff --git a/OsmAnd/src/net/osmand/plus/render/TextRenderer.java b/OsmAnd/src/net/osmand/plus/render/TextRenderer.java index 9e338d08ec..f7bb2cd349 100644 --- a/OsmAnd/src/net/osmand/plus/render/TextRenderer.java +++ b/OsmAnd/src/net/osmand/plus/render/TextRenderer.java @@ -438,7 +438,7 @@ public class TextRenderer { String nameTag = isName ? "" : obj.getMapIndex().decodeType(tag).tag; boolean skip = false; // not completely correct we should check "name"+rc.preferredLocale - if (isName && !rc.preferredLocale.equals("") && + if (isName && !rc.preferredLocale.isEmpty() && map.containsKey(obj.getMapIndex().nameEnEncodingType)) { skip = true; } diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index a87d5004bd..8e7857b33a 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -486,7 +486,7 @@ public class ResourceManager { try { progress.startTask(context.getString(R.string.installing_new_resources), -1); AssetManager assetManager = context.getAssets(); - boolean isFirstInstall = context.getSettings().PREVIOUS_INSTALLED_VERSION.get().equals(""); + boolean isFirstInstall = context.getSettings().PREVIOUS_INSTALLED_VERSION.get().isEmpty(); unpackBundledAssets(assetManager, applicationDataDir, progress, isFirstInstall || forceUpdate); context.getSettings().PREVIOUS_INSTALLED_VERSION.set(fv); copyRegionsBoundaries(); @@ -1100,7 +1100,7 @@ public class ResourceManager { } } } - return readers.toArray(new BinaryMapIndexReader[readers.size()]); + return readers.toArray(new BinaryMapIndexReader[0]); } public BinaryMapIndexReader[] getTransportRoutingMapFiles() { @@ -1114,7 +1114,7 @@ public class ResourceManager { } } } - return readers.toArray(new BinaryMapIndexReader[readers.size()]); + return readers.toArray(new BinaryMapIndexReader[0]); } public BinaryMapIndexReader[] getQuickSearchFiles() { @@ -1129,7 +1129,7 @@ public class ResourceManager { } } } - return readers.toArray(new BinaryMapIndexReader[readers.size()]); + return readers.toArray(new BinaryMapIndexReader[0]); } public Map getIndexFileNames() { diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java index 7257e2ec00..7c70ba8dfb 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java @@ -651,7 +651,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { ((FavouritePoint) item).getSpecialPointType().getIconId(app), iconColor)); favoriteViewHolder.description.setText(point.getDescription()); } else { - if (point.getCategory().equals("")) { + if (point.getCategory().isEmpty()) { favoriteViewHolder.description.setText(R.string.shared_string_favorites); } else { favoriteViewHolder.description.setText(point.getCategory()); diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java index a21b8898e6..37bb29d148 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java +++ b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java @@ -121,7 +121,7 @@ public class RouteProvider { list.add(r); } } - return list.toArray(new RouteService[list.size()]); + return list.toArray(new RouteService[0]); } } diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index a574e0d0fd..065fd2113a 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -1133,6 +1133,17 @@ public class OsmandSettings { // this value boolean is synchronized with settings_pref.xml preference offline POI/Bugs edition public final OsmandPreference OFFLINE_EDITION = new BooleanPreference(this, "offline_osm_editing", true).makeGlobal().makeShared(); + public final OsmandPreference USE_DEV_URL = new BooleanPreference(this, "use_dev_url", false).makeGlobal().makeShared(); + + public String getOsmUrl() { + String osmUrl; + if (USE_DEV_URL.get()) { + osmUrl = "https://master.apis.dev.openstreetmap.org/"; + } else { + osmUrl = "https://api.openstreetmap.org/"; + } + return osmUrl; + } // this value string is synchronized with settings_pref.xml preference name public final CommonPreference DAYNIGHT_MODE = diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 969c59d8c1..4553cf805f 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -55,6 +55,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.EnumMap; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -820,7 +821,7 @@ public class SettingsHelper { } public static Map> getSettingsToOperate(List settingsItems, boolean importComplete) { - Map> settingsToOperate = new HashMap<>(); + Map> settingsToOperate = new EnumMap<>(ExportSettingsType.class); List profiles = new ArrayList<>(); List quickActions = new ArrayList<>(); List poiUIFilters = new ArrayList<>(); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java index f34d6938fb..3730833d4d 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java @@ -59,9 +59,9 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet { final BooleanPreference pref = (BooleanPreference) preference; CharSequence summaryOn = switchPreference.getSummaryOn(); CharSequence summaryOff = switchPreference.getSummaryOff(); - final String on = summaryOn == null || summaryOn.toString().equals("") + final String on = summaryOn == null || summaryOn.toString().isEmpty() ? getString(R.string.shared_string_enabled) : summaryOn.toString(); - final String off = summaryOff == null || summaryOff.toString().equals("") + final String off = summaryOff == null || summaryOff.toString().isEmpty() ? getString(R.string.shared_string_disabled) : summaryOff.toString(); final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic); final int disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java index 6a3cc193b2..10c09021b9 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java @@ -158,7 +158,7 @@ public class SelectFolderBottomSheet extends BasePreferenceBottomSheet { Fragment fragment = getTargetFragment(); if (fragment instanceof BaseSettingsFragment) { String newPath = editText.getText().toString().trim(); - if (!newPath.equals("")) { + if (!newPath.isEmpty()) { boolean pathChanged = !newPath.equals(currentPath); Bundle bundle = new Bundle(); bundle.putBoolean(TAG, true); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java index 842b53e2fa..de95eaeade 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java @@ -241,7 +241,7 @@ public class DataStorageFragment extends BaseSettingsFragment implements DataSto divider.setVisibility(View.VISIBLE); secondPart.setVisibility(View.VISIBLE); String space = getSpaceDescription(item.getDirectory()); - if (!space.equals("")) { + if (!space.isEmpty()) { space = space.replaceAll(" • ", " • "); tvSummary.setText(space); tvSummary.setVisibility(View.VISIBLE); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java index 9476470969..a6f7dd73fd 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java @@ -76,6 +76,7 @@ import org.apache.commons.logging.Log; import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -201,7 +202,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } adapter = new ExportImportSettingsAdapter(app, nightMode, true); - Map> itemsMap = new HashMap<>(); + Map> itemsMap = new EnumMap<>(ExportSettingsType.class); if (settingsItems != null) { itemsMap = SettingsHelper.getSettingsToOperate(settingsItems, false); adapter.updateSettingsList(itemsMap); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java index bc3092d963..8e4dfc14c0 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java @@ -897,7 +897,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment { } private boolean nameIsEmpty() { - return changedProfile.name.trim().equals(""); + return changedProfile.name.trim().isEmpty(); } private void disableSaveButtonWithErrorMessage(String errorMessage) { diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java index 7035a18863..a8dc02135b 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java @@ -137,9 +137,9 @@ public class SRTMPlugin extends OsmandPlugin { public boolean init(@NonNull final OsmandApplication app, Activity activity) { OsmandSettings settings = app.getSettings(); CommonPreference pref = settings.getCustomRenderProperty("contourLines"); - if (pref.get().equals("")) { + if (pref.get().isEmpty()) { for (ApplicationMode m : ApplicationMode.allPossibleValues()) { - if (pref.getModeValue(m).equals("")) { + if (pref.getModeValue(m).isEmpty()) { pref.setModeValue(m, "13"); } } @@ -456,7 +456,7 @@ public class SRTMPlugin extends OsmandPlugin { List possibleValuesList = new ArrayList<>(Arrays.asList(p.getPossibleValues())); possibleValuesList.remove(CONTOUR_LINES_DISABLED_VALUE); - final String[] possibleValues = possibleValuesList.toArray(new String[possibleValuesList.size()]); + final String[] possibleValues = possibleValuesList.toArray(new String[0]); int i = possibleValuesList.indexOf(pref.get()); if (i >= 0) { diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java index b58dc807a8..4ffab5f7c7 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java @@ -114,12 +114,13 @@ public class TerrainLayer extends MapTileLayer { } private void indexNonCachedResources(Map fileModified, Map rs) { - for(String filename : fileModified.keySet()) { + for(Map.Entry entry : fileModified.entrySet()) { + String filename = entry.getKey(); try { log.info("Indexing " + type + " file " + filename); ContentValues cv = new ContentValues(); cv.put("filename", filename); - cv.put("date_modified", fileModified.get(filename)); + cv.put("date_modified", entry.getValue()); SQLiteTileSource ts = rs.get(filename); QuadRect rt = ts.getRectBoundary(ZOOM_BOUNDARY, 1); if (rt != null) { diff --git a/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java b/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java index b43cab4492..9408ec5537 100644 --- a/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java +++ b/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java @@ -86,7 +86,7 @@ public class AddGpxPointBottomSheetHelper implements OnDismissListener { } public void setTitle(String title) { - if (title.equals("")) { + if (title.isEmpty()) { if (pointDescription.isWpt()) { title = mapActivity.getString(R.string.waypoint_one); } else if (pointDescription.isRte()) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java index 580f0c3490..df110a14cb 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java @@ -181,7 +181,7 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider } if (imageRequests.size() > 0) { - executeTaskInBackground(new PointImageReaderTask(this), imageRequests.toArray(new String[imageRequests.size()])); + executeTaskInBackground(new PointImageReaderTask(this), imageRequests.toArray(new String[0])); } } mapTextLayer.putData(this, displayedPoints); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java index 7a8690fe2d..9ba3ee5f46 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java @@ -232,20 +232,22 @@ public class ContextMenuLayer extends OsmandMapLayer { if (!pressedLatLonSmall.isEmpty() || !pressedLatLonFull.isEmpty()) { textScale = activity.getMyApplication().getSettings().TEXT_SCALE.get(); } - for (LatLon latLon : pressedLatLonSmall.keySet()) { + for (Entry entry : pressedLatLonSmall.entrySet()) { + LatLon latLon = entry.getKey(); int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude()); - BackgroundType background = pressedLatLonSmall.get(latLon); + BackgroundType background = entry.getValue(); Bitmap pressedBitmapSmall = background.getTouchBackground(activity, true); Rect destRect = getIconDestinationRect( x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), textScale); canvas.drawBitmap(pressedBitmapSmall, null, destRect, paint); } - for (LatLon latLon : pressedLatLonFull.keySet()) { + for (Entry entry : pressedLatLonFull.entrySet()) { + LatLon latLon = entry.getKey(); int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude()); - BackgroundType background = pressedLatLonFull.get(latLon); + BackgroundType background = entry.getValue(); Bitmap pressedBitmap = background.getTouchBackground(activity, false); int offsetY = background.getOffsetY(activity, textScale); Rect destRect = getIconDestinationRect( diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java index 6a4cf344c7..9a24d0aba6 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java @@ -1387,7 +1387,7 @@ public class MapControlsLayer extends OsmandMapLayer { } bld.setTitle(R.string.map_magnifier); - bld.setSingleChoiceItems(values.toArray(new String[values.size()]), i, + bld.setSingleChoiceItems(values.toArray(new String[0]), i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java index 991bed0d55..fe9d82fe99 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java @@ -61,7 +61,8 @@ public class MapTextLayer extends OsmandMapLayer { @Override public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { TIntHashSet set = new TIntHashSet(); - for (OsmandMapLayer l : textObjects.keySet()) { + for (Map.Entry> entry : textObjects.entrySet()) { + OsmandMapLayer l = entry.getKey(); MapTextProvider provider = (MapTextProvider) l; if (!view.isLayerVisible(l) || !provider.isTextVisible()) { continue; @@ -69,7 +70,7 @@ public class MapTextLayer extends OsmandMapLayer { updateTextSize(); paintTextIcon.setFakeBoldText(provider.isFakeBoldText()); - for (Object o : textObjects.get(l)) { + for (Object o : entry.getValue()) { LatLon loc = provider.getTextLocation(o); String name = provider.getText(o); if (loc == null || TextUtils.isEmpty(name)) { diff --git a/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java b/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java index fe17c52ab5..b0b0be8baf 100644 --- a/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java +++ b/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java @@ -222,7 +222,7 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat @Override public List execute(List listCmd){ - Struct list = new Struct(listCmd.toArray(new Term[listCmd.size()])); + Struct list = new Struct(listCmd.toArray(new Term[0])); Var result = new Var("RESULT"); //$NON-NLS-1$ List files = new ArrayList(); if(prologSystem == null) { diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java index 8ed755cf50..df591f4020 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java @@ -216,7 +216,7 @@ public class TravelDbHelper { } query += ") "; if (params.size() > 0) { - SQLiteCursor cursor = conn.rawQuery(query, params.toArray(new String[params.size()])); + SQLiteCursor cursor = conn.rawQuery(query, params.toArray(new String[0])); if (cursor != null) { if (cursor.moveToFirst()) { do { @@ -468,7 +468,7 @@ public class TravelDbHelper { params.add(lang); } } - SQLiteCursor cursor = conn.rawQuery(query.toString(), params.toArray(new String[params.size()])); + SQLiteCursor cursor = conn.rawQuery(query.toString(), params.toArray(new String[0])); if (cursor != null && cursor.moveToFirst()) { do { WikivoyageSearchResult rs = new WikivoyageSearchResult(); diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java index bedaa96810..88e814773b 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java @@ -341,7 +341,7 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv res.add(item); } } - return res.toArray(new IndexItem[res.size()]); + return res.toArray(new IndexItem[0]); } @NonNull diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java index e490925754..9be931434e 100644 --- a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java @@ -128,7 +128,7 @@ public class CurrentPositionHelper { } private void initCtx(SampleApplication app, List checkReaders) { - BinaryMapIndexReader[] rs = checkReaders.toArray(new BinaryMapIndexReader[checkReaders.size()]); + BinaryMapIndexReader[] rs = checkReaders.toArray(new BinaryMapIndexReader[0]); if (rs.length > 0) { RoutingConfiguration defCfg = RoutingConfiguration.getDefault().build("geocoding", 10, new HashMap()); diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java index 9397f5ea7d..6a340aa528 100644 --- a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java @@ -23,7 +23,7 @@ public class SampleFormatter { public final static float FEET_IN_ONE_METER = YARDS_IN_ONE_METER * 3f; private static final DecimalFormat fixed2 = new DecimalFormat("0.00"); private static final DecimalFormat fixed1 = new DecimalFormat("0.0"); - { + static { fixed2.setMinimumFractionDigits(2); fixed1.setMinimumFractionDigits(1); fixed1.setMinimumIntegerDigits(1);