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 c8f84796b9..f9015ec48d 100644
--- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java
+++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java
@@ -696,6 +696,7 @@ public class BinaryMapIndexReader {
private void readMapIndex(MapIndex index, boolean onlyInitEncodingRules) throws IOException {
int defaultId = 1;
int oldLimit;
+ int encodingRulesSize = 0;
while (true) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
@@ -712,10 +713,14 @@ public class BinaryMapIndexReader {
break;
case OsmandOdb.OsmAndMapIndex.RULES_FIELD_NUMBER :
if (onlyInitEncodingRules) {
+ if(encodingRulesSize == 0) {
+ encodingRulesSize = codedIS.getTotalBytesRead();
+ }
int len = codedIS.readInt32();
oldLimit = codedIS.pushLimit(len);
readMapEncodingRule(index, defaultId++);
codedIS.popLimit(oldLimit);
+ index.encodingRulesSizeBytes = (codedIS.getTotalBytesRead() - encodingRulesSize);
} else {
skipUnknownField(t);
}
@@ -1829,10 +1834,13 @@ public class BinaryMapIndexReader {
public int onewayReverseAttribute = -1;
public TIntHashSet positiveLayers = new TIntHashSet(2);
public TIntHashSet negativeLayers = new TIntHashSet(2);
+ public int encodingRulesSizeBytes;
// to speed up comparision
private MapIndex referenceMapIndex;
+
+
public Integer getRule(String t, String v) {
Map m = encodingRules.get(t);
if (m != null) {
diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapRouteReaderAdapter.java b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapRouteReaderAdapter.java
index c98ec6396f..8431df7244 100644
--- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapRouteReaderAdapter.java
+++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapRouteReaderAdapter.java
@@ -292,6 +292,7 @@ public class BinaryMapRouteReaderAdapter {
public static class RouteRegion extends BinaryIndexPart {
public int regionsRead;
public List routeEncodingRules = new ArrayList();
+ public int routeEncodingRulesBytes = 0;
public Map decodingRules = null;
List subregions = new ArrayList();
List basesubregions = new ArrayList();
@@ -614,6 +615,7 @@ public class BinaryMapRouteReaderAdapter {
protected void readRouteIndex(RouteRegion region) throws IOException {
int routeEncodingRule = 1;
+ int routeEncodingRulesSize = 0;
while(true){
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
@@ -626,10 +628,13 @@ public class BinaryMapRouteReaderAdapter {
break;
case OsmandOdb.OsmAndRoutingIndex.RULES_FIELD_NUMBER: {
int len = codedIS.readInt32();
+ if(routeEncodingRulesSize == 0) {
+ routeEncodingRulesSize = codedIS.getTotalBytesRead();
+ }
int oldLimit = codedIS.pushLimit(len);
readRouteEncodingRule(region, routeEncodingRule++);
- codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
codedIS.popLimit(oldLimit);
+ region.routeEncodingRulesBytes = codedIS.getTotalBytesRead() - routeEncodingRulesSize;
} break;
case OsmandOdb.OsmAndRoutingIndex.ROOTBOXES_FIELD_NUMBER :
case OsmandOdb.OsmAndRoutingIndex.BASEMAPBOXES_FIELD_NUMBER :{
diff --git a/OsmAnd/res/drawable/ic_action_import_to.xml b/OsmAnd/res/drawable/ic_action_import_to.xml
new file mode 100644
index 0000000000..14f6451032
--- /dev/null
+++ b/OsmAnd/res/drawable/ic_action_import_to.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/OsmAnd/res/layout/fragment_show_all_routes.xml b/OsmAnd/res/layout/fragment_show_all_routes.xml
index 86ac60d4c5..e15df6947f 100644
--- a/OsmAnd/res/layout/fragment_show_all_routes.xml
+++ b/OsmAnd/res/layout/fragment_show_all_routes.xml
@@ -249,51 +249,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginLeft="@dimen/fab_margin_right"
+ android:layout_marginEnd="@dimen/fab_margin_right"
+ android:layout_marginRight="@dimen/fab_margin_right" />
\ No newline at end of file
diff --git a/OsmAnd/res/layout/map_hud_bottom.xml b/OsmAnd/res/layout/map_hud_bottom.xml
index acdcc33e56..1fbe5167b0 100644
--- a/OsmAnd/res/layout/map_hud_bottom.xml
+++ b/OsmAnd/res/layout/map_hud_bottom.xml
@@ -145,94 +145,18 @@
tools:src="@drawable/ic_action_remove_dark"
android:contentDescription="@string/snap_to_road" />
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/layout/map_ruler.xml b/OsmAnd/res/layout/map_ruler.xml
new file mode 100644
index 0000000000..62f2b1cca4
--- /dev/null
+++ b/OsmAnd/res/layout/map_ruler.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/layout/track_appearance.xml b/OsmAnd/res/layout/track_appearance.xml
index a302486a39..0afdd53155 100644
--- a/OsmAnd/res/layout/track_appearance.xml
+++ b/OsmAnd/res/layout/track_appearance.xml
@@ -90,6 +90,17 @@
+
+
تخصيص
اتجاه الأسهم
صلب
+ التعديل الأخير
+ استيراد المسار
+ فتح المسار الموجود
+ إنشاء مسار جديد
+ حدد ملف المسار للفتح.
+ تم
\ No newline at end of file
diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml
index d4f0b2a6e7..808f6ce1e1 100644
--- a/OsmAnd/res/values-eo/phrases.xml
+++ b/OsmAnd/res/values-eo/phrases.xml
@@ -1192,7 +1192,7 @@
sen pumpilo
jes
minerala
- Akvospeco: sediment-riĉa
+ sediment-riĉa
sulfat(VI)-oza
Akvoĉerpejo
Vojmontrilo
@@ -1859,7 +1859,7 @@
benzino 100-oktannombra plumba
naftogaso likva (LPG) por aviadiloj
Jet A-1 brulaĵo
- AdBlue (akvosolvaĵo de ureo) aldonaĵo
+ AdBlue (akvosolvaĵo de ureo)
Brulaĵo: ligno
Brulaĵo: lignokarbo
Brulaĵo: karbo
@@ -3029,7 +3029,7 @@
Manĝaĵo
Benzinejo por boatoj
Bestonutrejo
- Provizadoj por aranĝoj
+ Okazaĵaj-provizoj-vendejo
Elektraĵ-vendejo
Seruristejo
Prilumigad-aparata vendejo
@@ -3780,7 +3780,7 @@
Fantombiciklo
Farbopafado
Stacio de montara savservo
- Vendejo de sekuriloj
+ Sekuril-vendejo
Kegloludejo
Referenc‑numero de skivojo
bazo de ĉasistoj
diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml
index 4d47baaff2..abc772d98d 100644
--- a/OsmAnd/res/values-eo/strings.xml
+++ b/OsmAnd/res/values-eo/strings.xml
@@ -3820,4 +3820,22 @@
Rulseĝo (klinita)
Gokarto
Fermita OSM‑rimarko
+ La aldonita punkto ne estos videbla sur la mapo, ĉar la elektita grupo estas kaŝita, vi povas trovi ĝin en “%s”.
+ Necesas enigi tagojn de malfermo por pluigi
+ Kurso inter punktoj
+ Plani kurson
+ Aldoni al spuro
+ Montri markojn de komenco/fino
+ Elekti larĝon
+ Antaŭaj
+ Elektu tempon/distancon je kiu markoj sur la spuro estos montrataj.
+ Elektu preferatan manieron de divido: laŭ tempo aŭ laŭ distanco.
+ Propra
+ Sagetoj de direkto
+ Plena
+ Enporti spuron
+ Malfermi ekzistan spuron
+ Krei novan kurson
+ Elekti dosieron de spuro por malfermi.
+ Farita
\ No newline at end of file
diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml
index 5e9d8b5c82..a4f25135f7 100644
--- a/OsmAnd/res/values-es-rAR/phrases.xml
+++ b/OsmAnd/res/values-es-rAR/phrases.xml
@@ -69,7 +69,7 @@
Colchonería;Muebles de dormitorio
Boutique de moda
Alfombras
- Negocio benéfico
+ Tienda de caridad
Higiene personal y del hogar
Tienda de ropa
Infantil
@@ -1175,7 +1175,7 @@
Automática
Sin bomba
Mineralizada
- Característica del agua: lodosa
+ Lodazal
Sulfúrica
Toma de agua
Especie
@@ -1868,7 +1868,7 @@
100LL (con plomo, para aviones)
Autogas (Etanol libre de plomo)
Jet A-1 (diésel)
- AdBlue
+ Aditivo para escapes de Diesel (AdBlue)
Combustible: madera
Combustible: carbón vegetal
Combustible: carbón
diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml
index 12950a51a5..6a4d446d06 100644
--- a/OsmAnd/res/values-es-rAR/strings.xml
+++ b/OsmAnd/res/values-es-rAR/strings.xml
@@ -3095,10 +3095,10 @@
Geocodificación
Línea recta
BRouter (sin conexión)
- Enrutamiento de OsmAnd
- Perfil de enrutamiento personalizado
- Enrutamiento especial
- Enrutamiento de terceros
+ Navegación de OsmAnd
+ Perfil de navegación personalizado
+ Navegación especial
+ Navegación de terceros
Perfiles que serán visibles en la aplicación.
Perfiles de la aplicación
Cambia el zoom del mapa desplazando la rueda hacia arriba y abajo. La tecla «Escape» retrocede a la aplicación WunderLINQ.
@@ -3346,13 +3346,13 @@
\n
\n • Arreglos en el modo nocturno
\n
-\n • Se corrigieron algunos problemas de enrutamiento en todo el mundo
+\n • Se corrigieron algunos problemas de navegación en todo el mundo
\n
\n • Se ha actualizado el mapa base con más detalles en la red de caminos.
\n
\n • Se corrigieron las zonas inundadas en todo el mundo
\n
-\n • Enrutamiento de esquí: perfil de elevación y complejidad de la ruta añadidos a los detalles de la ruta
+\n • Navegación de esquí: perfil de elevación y complejidad de la ruta añadidos a los detalles de la ruta
\n
\n • Otras correcciones de errores
\n
@@ -3534,7 +3534,7 @@
\nEl complemento permanecerá en el dispositivo después de desinstalar OsmAnd.
Menú
%1$s → %2$s → %3$s
- Enrutamiento
+ Navegación
Incluir datos adicionales
El perfil importado contiene datos adicionales. Pulsa en «Importar» para importar sólo datos de perfil o marca datos adicionales.
Puedes marcar datos adicionales para exportar junto con el perfil.
@@ -3829,4 +3829,12 @@
Ruta entre puntos
Crear una ruta
Añadir a una traza
+ El punto añadido no será visible en el mapa, ya que el grupo elegido está oculto, se puede encontrar en «%s».
+ Mostrar los iconos de inicio y fin
+ Elegir la anchura
+ Marca el intervalo en el que se mostrarán las marcas con distancia o tiempo en la traza.
+ Marca la opción de división deseada: por tiempo o por distancia.
+ Personalizado
+ Flechas de dirección
+ Sólido
\ No newline at end of file
diff --git a/OsmAnd/res/values-es-rUS/phrases.xml b/OsmAnd/res/values-es-rUS/phrases.xml
index 7f0a081326..20402278df 100644
--- a/OsmAnd/res/values-es-rUS/phrases.xml
+++ b/OsmAnd/res/values-es-rUS/phrases.xml
@@ -69,7 +69,7 @@
Colchonería;Muebles de dormitorio
Boutique de moda
Alfombras
- Negocio benéfico
+ Tienda de caridad
Higiene personal y del hogar
Tienda de ropa
Infantil
@@ -1175,7 +1175,7 @@
Automática
Sin bomba
Mineralizada
- Característica del agua: lodosa
+ Lodazal
Sulfúrica
Toma de agua
Especie
@@ -1868,7 +1868,7 @@
100LL (con plomo, para aviones)
Autogas (Etanol libre de plomo)
Jet A-1 (diésel)
- AdBlue
+ Aditivo para escapes de Diesel (AdBlue)
Combustible: madera
Combustible: carbón vegetal
Combustible: carbón
diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml
index 0f3ef1ff1b..9f1df61511 100644
--- a/OsmAnd/res/values-es-rUS/strings.xml
+++ b/OsmAnd/res/values-es-rUS/strings.xml
@@ -2078,7 +2078,7 @@
Grabar
Sin datos
Activar la grabación rápida
- Muestra una notificación del sistema que permite la grabación del viaje.
+ Muestra una notificación del sistema que permite iniciar la grabación del viaje.
Notificaciones
Sin archivos GPX aún
También puedes añadir archivos GPX a la carpeta
@@ -2644,7 +2644,7 @@
Archivo GPX con coordenadas y datos de todas las notas.
Acciones
Marcador
- \'%1$s ediciones, suman %2$s mBTC\'
+ %1$s ediciones, suman %2$s mBTC
Destinatarios de OSM
Total de donaciones
Sin nombre
@@ -3095,10 +3095,10 @@
Geocodificación
Línea recta
BRouter (sin conexión)
- Enrutamiento de OsmAnd
- Perfil de enrutamiento personalizado
- Enrutamiento especial
- Enrutamiento de terceros
+ Navegación de OsmAnd
+ Perfil de navegación personalizado
+ Navegación especial
+ Navegación de terceros
Perfiles que serán visibles en la aplicación.
Perfiles de la aplicación
Cambia el zoom del mapa desplazando la rueda hacia arriba y abajo. La tecla «Escape» retrocede a la aplicación WunderLINQ.
@@ -3346,16 +3346,16 @@
\n
\n • Arreglos en el modo nocturno
\n
-\n • Se corrigieron algunos problemas de enrutamiento en todo el mundo
+\n • Se corrigieron algunos problemas de navegación en todo el mundo
\n
\n • Se ha actualizado el mapa base con más detalles en la red de caminos.
\n
\n • Se corrigieron las zonas inundadas en todo el mundo
\n
-\n • Enrutamiento de esquí: perfil de elevación y complejidad de la ruta añadidos a los detalles de la ruta
-\n
-\n • Otras correcciones de errores
+\n • Navegación de esquí: perfil de elevación y complejidad de la ruta añadidos a los detalles de la ruta
\n
+\n • Otras correcciones de errores
+\n
\n
Puedes aplicar este cambio a todos los perfiles o sólo al marcado.
Compartido
@@ -3534,7 +3534,7 @@
\nEl complemento permanecerá en el dispositivo después de desinstalar OsmAnd.
Menú
%1$s → %2$s → %3$s
- Enrutamiento
+ Navegación
Incluir datos adicionales
El perfil importado contiene datos adicionales. Pulsa en «Importar» para importar sólo datos de perfil o marca datos adicionales.
Puedes marcar datos adicionales para exportar junto con el perfil.
@@ -3818,4 +3818,20 @@
Proporciona la longitud del vehículo, se pueden aplicar algunas restricciones de rutas para vehículos largos.
Motoneta (motor)
Motocicleta de enduro
+ Mostrar los iconos de inicio y fin
+ Sólido
+ Personalizado
+ Debes definir los días laborales para continuar
+ Elegir la anchura
+ Ruta entre puntos
+ Crear una ruta
+ Nota de OSM cerrada
+ Marca la opción de división deseada: por tiempo o por distancia.
+ Marca el intervalo en el que se mostrarán las marcas con distancia o tiempo en la traza.
+ Flechas de dirección
+ Silla de ruedas (hacia adelante)
+ Silla de ruedas
+ Go-kart
+ Añadir a una traza
+ El punto añadido no será visible en el mapa, ya que el grupo elegido está oculto, se puede encontrar en «%s».
\ No newline at end of file
diff --git a/OsmAnd/res/values-fa/phrases.xml b/OsmAnd/res/values-fa/phrases.xml
index 492377da9a..eba643a4f9 100644
--- a/OsmAnd/res/values-fa/phrases.xml
+++ b/OsmAnd/res/values-fa/phrases.xml
@@ -1451,4 +1451,5 @@
دسترسی کاروان
دسترسی اتوبوس
بله
+ منطقهٔ حفاظتشده
\ No newline at end of file
diff --git a/OsmAnd/res/values-gl/phrases.xml b/OsmAnd/res/values-gl/phrases.xml
index 355af7af55..88f562e0ac 100644
--- a/OsmAnd/res/values-gl/phrases.xml
+++ b/OsmAnd/res/values-gl/phrases.xml
@@ -1739,7 +1739,7 @@
Dispensa receitas médicas
Campamento de exploradores
Acampada libre
- Conducir por dentro
+ Compra dende o coche
Servizo no automóbil
Cervexaría artesanal
Estacional
@@ -1996,7 +1996,7 @@
Peixes
Respaldo: non
Sen saída
- Trazos da auga: lama
+ Lama
Marcaxe do camiño
Marcaxe de ruta
Portaxe ou peaxe para camións
@@ -2382,7 +2382,7 @@
Combustíbel 100LL
Autogas
Combustíbel Jet A-1
- Combustíbel AdBlue
+ Aditivo para escapes de diesel
Combustíbel: madeira
Combustíbel: carbón vexetal
Combustíbel: carbón
diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml
index 7a3b144f51..ea17f33034 100644
--- a/OsmAnd/res/values-gl/strings.xml
+++ b/OsmAnd/res/values-gl/strings.xml
@@ -3851,4 +3851,12 @@ Lon %2$s
Ruta entre puntos
Planificar unha ruta
Engadir a unha pista
+ O punto engadido non será visíbel no mapa, xa que o grupo escollido está agochado, pódese atopar en \"%s\".
+ Amosar iconas de comezo e final
+ Seleccionar largura
+ Selecciona o intre no cal as marcas con distancia ou tempo na pista serán amosadas.
+ Selecciona a opción de división desexada: por tempo ou por distancia.
+ Personalizado
+ Frechas de dirección
+ Sólido
\ No newline at end of file
diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml
index 1eb7abb563..e9439c7af2 100644
--- a/OsmAnd/res/values-it/strings.xml
+++ b/OsmAnd/res/values-it/strings.xml
@@ -2984,7 +2984,7 @@
\n
Attiva le modifiche al trasporto pubblico in tempo reale con OsmAnd Live.
In %1$s
- Scendi a
+ Esci a
Sali alla fermata
Inverti
Questo pulsante mostra o nasconde le tracce GPX selezionate sulla mappa
@@ -3765,7 +3765,7 @@
Lombardo
Colori personalizzati
Cerca in base al PDI
- Puoi Esportare o importare le azioni veloci con i profili dell\'applicazione.
+ Puoi esportare o importare le azioni veloci con i profili dell\'applicazione.
Cancellare tutto\?
Sei sicuro di volere cancellare definitivamente %d le azioni rapide\?
Tempo del blocco schermo
@@ -3778,13 +3778,13 @@
Mappa notturna
toni
Aggiungi sorgente online
- Applicando questi cambiamenti i dati memorizzati nella cache verranno cancellati per questa sorgente di mattonelle
+ Applicando questi cambiamenti, i dati memorizzati nella cache verranno cancellati per questa sorgente di mattonelle
Imposta l\'altezza dell\'imbarcazione
Puoi mpostare l\'altezza dell\'imbarcazione per evitare ponti bassi. Ricorda che, se il ponte è mobile, useremo la sua altezza da aperto.
Imposta l\'altezza dell\'imbarcazione per evitare ponti bassi. Ricorda che, se il ponte è mobile, useremo la sua altezza da aperto.
Imposta la larghezza della\"imbarcazione per evitare i ponti stretti
Mostra/nascondi Mapillary
- Nascondi Mapilly
+ Nascondi Mapillary
Mostra Mapillary
Un pulsante per visualizzare nella mappa o nascondere il livello Mapillary .
Fornisci la lunghezza del tuo veicolo, alcune restrizioni di percorso potrebbero essere applicate per veicoli.
@@ -3800,10 +3800,10 @@
\nScegliendo %2$s. Tutti i dati relativi agli autovelox: avvisi, notifiche, PDI saranno cancellati fino a che OsmAnd non sarà completamente reinstallato.
Mantieni attivo
Disinstalla
- Gli avvisi sulla presenza di autovelox in alcuni paesi è proibita dalla legge.
+ Gli avvisi sulla presenza di autovelox in alcuni paesi sono proibiti dalla legge.
Specifica la lunghezza del veicolo permessa nei percorsi.
Lunghezza massima
- Bussola
+ Direzione
%1$s cancellato
Il riavvio è necessario per cancellare completamente i dati degli autovelox.
Disinstalla e Riavvia
@@ -3821,5 +3821,23 @@
Sedia a rotelle
Go-kart
Chiudi la nota OSM
- Sedia a rotelle
+ Sedia a rotelle in avanti
+ Il punto aggiunto non sarà visibile sulla mappa, dato che il gruppo selezionato è nascosto, puoi trovarlo in \"%s\".
+ Percorso tra i punti
+ Mostra le icone di inizio e fine
+ Personalizzato
+ Solido
+ Devi impostare i giorni lavorativi per continuare
+ Pianifica un percorso
+ Aggiungi ad una Traccia
+ Seleziona l\'intervallo a cui i segnaposti con distanza o orario sulla traccia verranno mostrati.
+ Seleziona l\'opzione desiderata per la divisione: per tempo o per distanza.
+ Frecce delle direzioni
+ Seleziona larghezza
+ Ultima modificata
+ Importa una traccia
+ Apri una traccia esistente
+ Crea un nuovo percorso
+ Scegli il file di una traccia da aprire.
+ Fatto
\ No newline at end of file
diff --git a/OsmAnd/res/values-lv/strings.xml b/OsmAnd/res/values-lv/strings.xml
index 33b8d8415a..a837a8252b 100644
--- a/OsmAnd/res/values-lv/strings.xml
+++ b/OsmAnd/res/values-lv/strings.xml
@@ -594,7 +594,7 @@
Izvēlieties reģionu
Izvēlēties krustojumu
Tuvākie pakalpojumi
- Atvērt karti
+ Skatīt karti
Auto
Velobraucējs
Gājējs
@@ -1014,7 +1014,7 @@
Lietotāja režīmi
Izvēlētos lietotāja režīmus varēs lietot aplikācijā
Iet kājām
- Ūdens transports
+ Peldlīdzekļi
Tiks izdzēsti %1$d osm labojumi. Vai turpināt?
Nav automātiskais mērogs
OpenMaps Eiropa
@@ -1037,7 +1037,7 @@
Atskaņot skaņu fotografējot
Izvēlieties vai atskaņot skaņu, nospiežot fotografēšanas pogu
Bojas
- Aviācija
+ Lidošana
Derīgums (minūtēs): %1$s
Attēlu dati: %1$s
Attēlu avots %1$s ir saglabāts
@@ -1220,7 +1220,7 @@
Braucieni
Visi
Ceļapunkti
- Atvērt karti
+ Skatīt karti
Auto
Velobraucējs
Gājējs
@@ -1311,7 +1311,7 @@
Labā puse
Kreisā puse
Rādīt
- Kartes detaļas
+ Kartes detalizācija
Anonīms lietotājs
Anonīms lietotājs nevar:
- izveidot grupas
@@ -1642,7 +1642,7 @@
QR-kods
Karte ir lejupielādēta
%1$s karte ir lejupielādēta un gatava lietošanai.
- Atvērt karti
+ Kartes pārlūks
Liek aplikācijai palaisties kā pirmo reizi pēc instalācijas, saglabājot visus iestatījumus.
Simulēt pirmo palaišanu
ģeo:
@@ -2480,7 +2480,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
OsmAnd apvienos punktus ar maršrutiem izvēlētajam profilam.
Saglabā punktus kā maršruta punktus vai kā līniju.
Pārlūkojiet karti un pievienojiet punktus
- Mērīt attālumu
+ Attāluma mērīšana
Pieskāriens uz kartes ieslēdz pogas un logrīkus.
Pilnekrāna režīms
Atzīmēt izietos
@@ -2596,9 +2596,9 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
Bezceļa
Profila iestatīšana
Katram profilam ir atsevišķi iestatījumi
- Iestatiet noklusētās kartes opcijas profilam
- Iestatiet noklusētās ekrāna opcijas profilam
- Iestatiet noklusētos navigācijas iestatījumus profilam
+ izvēlieties kartes iestatījumus profilam
+ Izvēlieties ekrāna iestatījumus profilam
+ Izvēlieties navigācijas iestatījumus profilam
Norādiet maksimālo daudzumu izmaiņām
Izmaiņu daudzums
Pamodināt pagriezienos
@@ -2820,19 +2820,19 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
Lietotāja režīms, iegūts no: %s
Slēpes
Veids: %s
- Pamata profils
+ Bāzes profils
Izvēlieties navigācijas veidu
Lūdzu izvēlieties navigācijas veidu jaunajam lietotnes profilam
Ievadiet profila vārdu
Profila vārds nedrīkst būt tukšs!
Dublikāts
Šāds profils jau eksistē
- Jūs nevarat izdzēst OsmAnd pamata profilus
+ Jūs nevarat dzēst OsmAnd bāzes profilus
Saglabāt izmaiņas
Pirms turpināšanas vispirms saglabājiet izmaiņas profilā
Izdzēst profilu
Vai esiet pārliecināts, ka vēlaties izdzēst %s profilu
- Atzīmējiet pamata profilu
+ Izvēlieties sākuma profilu
Balstiet savu profilu uz vienu no noklusētajiem profiliem, kas definēs tādus pamata iestatījumus kā logrīku redzamību un attāluma vai ātruma mērvienības. Šie ir noklusētie lietotnes profili, kopā ar lietotāja veidotajiem profiliem tie var tikt paplašināti uz:
Izvēlieties navigācijas veidu
"Auto, kravas auto, motocikls"
@@ -2861,7 +2861,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
Savienot pārrāvumus
Treileris
Autofurgons
- Ņemt vērā īslaicīgus ierobežojumus
+ Ņemt vērā īslaicīgos ierobežojumus
Standarta
Pikaps
Diena
@@ -3186,7 +3186,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
Mainīt profilu
Valoda un izvade
Atiestatīt uz noklusējumiem
- Veidot, importēt un labot profilus
+ Veidot, importēt un rediģēt profilus
Pārvaldīt lietotnes profilus…
Ietekmē visu aplikāciju
OsmAnd iestatījumi
@@ -3285,4 +3285,10 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
Pievienot profilu, atverot tā failu ar OsmAnd.
%1$s importēšanas kļūda: %2$s
%1$s importēti.
+ Atjaunot
+ Rediģēt profilu sarakstu
+ Rediģēt profilus
+ "OsmAnd pamata profilus nevar izdzēst, bet atspējot (no iepriekšējā ekrāna) vai pārkārtot uz leju."
+ Izvēlētais profils
+ Nekas nav izvēlēts
\ 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 e8061944ee..f976e9d9d7 100644
--- a/OsmAnd/res/values-pt-rBR/phrases.xml
+++ b/OsmAnd/res/values-pt-rBR/phrases.xml
@@ -66,7 +66,7 @@
Loja de roupa de cama
Butique
Loja de tapetes
- Brechó beneficente
+ Loja de caridade
Drogaria
Loja de roupas
Vestuário infantil
@@ -1171,7 +1171,7 @@
Elétrica
Sem bomba
Mineral
- Característica d\'água: barrenta
+ Lama
Sulfurosa
Ponto de água
Torre de resfriamento
@@ -1881,7 +1881,7 @@
Combustível 100LL
Autogás (GPL)
Combustível Jet A-1
- Combustível AdBlue
+ Fluido de escape diesel
Cultivo: grama
Cultivo: milho
Cultivo: cereais
diff --git a/OsmAnd/res/values-pt/phrases.xml b/OsmAnd/res/values-pt/phrases.xml
index eb9e32712b..ddfebf39c0 100644
--- a/OsmAnd/res/values-pt/phrases.xml
+++ b/OsmAnd/res/values-pt/phrases.xml
@@ -286,7 +286,7 @@
Taxa
Fumar
Entrega
- Drive - in
+ Drive-in
Drive - through
Serviço de take-away
Cocktails
@@ -1386,7 +1386,7 @@
Sem bomba
Sim
Mineral
- Característica d\'água: barrenta
+ Lama
Sulfurosa
Ponto de água
Poste com direções
@@ -1785,7 +1785,7 @@
Koshinto
Placa azul
Jizo
- Cruzeiro
+ Em forma cruzada
Veículo
Stolpersteine
Obelisco
@@ -2069,7 +2069,7 @@
Combustível 100LL
Autogás (GPL)
Combustível Jet A-1
- Combustível AdBlue
+ Fluido de escape diesel
Combustível: madeira
Combustível: carvão vegetal
Combustível: carvão
@@ -3814,4 +3814,7 @@
Vibração: não
Seta
Vibração
+ Quarteirão
+ Bairro
+ Give-box
\ No newline at end of file
diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml
index 13a9737fe6..db7fad15b5 100644
--- a/OsmAnd/res/values-pt/strings.xml
+++ b/OsmAnd/res/values-pt/strings.xml
@@ -41,15 +41,15 @@
Lendo cache de imagens…
O índice \'\'{0}\'\' não coube na memória
A versão do índice \'\'{0}\'\' não é suportada
- Não existe orientação vocal disponível, aceda a \"Definições\" → \"Definições de navegação\" → \"Orientação vocal\" e selecione ou descarregue um pacote de instruções vocais.
- Nenhum dado de voz especificado
+ Não existe orientação vocal disponível, aceda a \"Definições\" → \"Definições de navegação\", selecione o perfil → \"Orientação vocal\" e selecione ou descarregue um pacote de instruções vocais.
+ Selecione um pacote de avisos de voz
Mostrar o desempenho da renderização.
Mostrar velocidade de renderização
Dia
Noite
Nascer/Pôr-do-Sol
Sensor de luz
- Selecione a lógica para alternar entre o modo nocturno e diurno.
+ Ajuste alternar entre o modo noturno e diurno.
Modo Dia/Noite
Gostaria de descarregar {0} ficheiros ({1} MB)\?
{0} objetos estão selecionados
@@ -66,17 +66,17 @@
Ativar para calcular a rota mais rápida ou desativar para a rota de poupança de combustível.
Ampliação {0}: descarregar {1} quadrículas ({2} MB)
Descarregar mapa
- Zoom máximo para decarregar
+ Ampliação máxima a pré-carregar
Não é possível descarregar este mapa
Processamento contínuo
Mostrar processamento contínuo ao invés de imagem inteira de uma vez.
- Não foi possível desenhar a área selecionada
+ Não foi possível desenhar a área selecionada.
Não há memória suficiente para mostrar a área selecionada
Usar localização…
O motor de renderização foi carregado
- Não foi possível carregar o renderizador
+ Não foi possível carregar o renderizador.
Renderizadores de vetor
- Escolha a aparência dos mapas vetoriais.
+ Escolha a aparência de renderização
Veja o site do POI
Mostrar o número de telefone do POI
Site
@@ -94,7 +94,7 @@
Caminho reverso
Nenhum ficheiro GPX encontrado na pasta tracks
Ficheiros GPX…
- Não foi possível ler dados GPX
+ Não foi possível ler os dados de GPX.
Mapas vetoriais offline
Procurar transporte na paragem
Modificar POI
@@ -102,7 +102,7 @@
Direção da bússola
Direção de movimento
Sem rotação (norte sempre para cima)
- Selecione como o mapa deve ser girado.
+ Alinhamento do mapa:
Rotação do mapa
Mostrar rota
Favoritos importados
@@ -110,7 +110,7 @@
Favoritos guardados em {0}
Nenhum ponto favorito para guardar
Importar
- Erro ao carregar o ficheiro GPX
+ Não foi possível carregar o GPX.
Enviar o relatório
Não foi possível encontrar mapas descarregados no cartão de memória.
Digite para encontrar um POI
@@ -123,7 +123,7 @@
Sobreposição de POI…
Fonte dos mapas…
Camada de mapa
- Encontre um Ponto de Interesse
+ Busca por POI
Utilize um aparelho trackball para mover o mapa.
Use o cursor
Definir o tempo limite para determinar a localização.
@@ -134,9 +134,9 @@
GPS
segundos
min.
- Escolha um intervalo de atualização da sua posição no serviço em segundo plano.
+ Intervalo de ativar usado pelo serviço de fundo:
Intervalo de posição GPS
- Escolha um provedor de localização para o serviço em segundo plano.
+ Método de localização utilizado pelo serviço de fundo:
Provedor de localização
Rastreia a sua posição enquanto o ecrã está desligado.
Executar OsmAnd em segundo plano
@@ -153,7 +153,7 @@
Inicializando dados de voz…
Os dados de voz utilizam uma versão não suportada
Dados de voz corrompidos
- Dados de voz selecionados não estão acessíveis
+ O pacote de avisos de voz selecionado não está acessível
O cartão de memória está inacessível.
\nSerá impossível ver mapas ou procurar coisas.
Cartão de memória está disponível só para leitura.
@@ -178,7 +178,7 @@
Paisagem
Orientação do mapa
Retrato, paisagem ou aparelho.
- O formato do horário de abertura não pode ser alterado
+ Não é possível alterar o formato do horário de abertura.
Adicionar uma nova regra
Rotas
Paragem
@@ -197,8 +197,8 @@
Mostrar paragens de transportes públicos
Aplicação de navegação OsmAnd
Atualização dos dados de POI ({0} foram carregados)
- Não foi possível atualizar a lista de POIs locais
- Não foi possível carregar dados do servidor
+ Não foi possível atualizar a lista de POIs locais.
+ Não foi possível carregar dados do servidor.
Não há dados offline para esta região
A ampliação permite-lhe atualizar os POIs
Atualizar pontos de interesse
@@ -222,9 +222,9 @@
Nível de zoom máx
Não navegar em mapas on-line para níveis de ampliação além deste.
Distância total %1$s, tempo de viagem %2$d h %3$d min.
- Escolha um serviço de navegação online ou offline.
+ Serviço de navegação on-line ou off-line.
Serviço de navegação
- A pasta de armazenamento de dados no cartão de memória não está acessível!
+ A pasta de armazenamento não está acessível no cartão de memória!
Quer descarregar {0} - {1} \?
Já existem dados offline para {0} ({1}). Atualizá-los ({2})\?
Endereço
@@ -238,7 +238,7 @@
Mostrar rota
Iniciar orientação
Meio de transporte:
- Por favor, primeiro selecione um destino
+ Por favor, define o destino primeiro
Navegação
A aplicação do estado do GPS não está instalada. Pesquisar na loja de aplicações\?
Horas de abertura
@@ -254,14 +254,14 @@
Carregando ruas…
Carregando cidades…
POI
- Não foi possível guardar o ficheiro GPX
- Não foi possível calcular a rota
- Não foi possível calcular a rota
- A rota calculada está vazia
+ Não foi possível gravar o ficheiro GPX.
+ Não foi possível calcular a rota.
+ Não foi possível calcular a rota.
+ A rota calculada está vazia.
Nova rota calculada, distância
- Chegou ao seu destino
+ Chegou.
Coordenadas inválidas
- Voltar ao mapa do OsmAnd
+ Voltar ao mapa
Fechar
Carregando dados…
Lendo dados locais…
@@ -271,7 +271,7 @@
Utilize a Internet para calcular uma rota.
Utilizar navegação online
A sua palavra-passe no OSM
- Especifique as configurações de OpenStreetMap.org (OSM) necessárias para envios OSM.
+ Especifique as configurações de OpenStreetMap.org (OSM) necessárias para envios ao OSM.
Especifique o idioma, descarregar/enviar dados.
Dados
OSM
@@ -283,7 +283,7 @@
Configurações
Guardar agora o trilho atual num ficheiro GPX.
Guardar o trilho atual
- Escolher o intervaloentre posições nas trilhas durante a navegação.
+ Escolher o intervalo entre posições nas trilhas durante a navegação
Intervalo de gravação durante a navegação
O trilho GPX é guardado automaticamente na pasta \'tracks\' durante a navegação.
Gravar trilha durante a navegação
@@ -304,7 +304,7 @@
Mostrar ângulo de visão
Ativar a visualização em 3D do mapa.
Visualização em 3D
- Mostrar a camada superior últimamente selecionada de POI no mapa.
+ Mostrar a sobreposição ultimamente selecionada do POI.
Mostrar camada superior de POI
Escolha a fonte de imagens de mapa online ou offline.
Fonte de imagens
@@ -322,9 +322,9 @@
Pesquisa progressiva de cidade. Para encontrar cidades/código postal, insira pelo menos os três primeiros caracteres
Pesquisa progressiva das ruas
Pesquisa progressiva dos edificios
- Escolher uma região na lista
- Escolher a rua transversal
- Locais mais próximos
+ Selecione a região da lista
+ Selecione a rua transversal
+ Comodidades mais próximas
Explorar mapa
Condução
Ciclismo
@@ -335,7 +335,7 @@
Latitude
Longitude
Mostrar no mapa
- Escolher endereço
+ Endereço
Região
Cidade
Rua
@@ -359,14 +359,14 @@
Mensagem
Autor
Comentário adicionado
- Não foi possível adicionar um comentário
+ Não foi possível adicionar um comentário.
Editar POI
Criar POI
Nó não pode ser encontrado ou POI não é um único nó
Eliminar {0} (comentário)\?
Eliminar POI
Apagar
- POI eliminado
+ Eliminado
Adicionar
Modificar
Ação {0} sucedida.
@@ -381,9 +381,9 @@
Apagar
Filtro
Guardar como
- Eliminar o filtro selecionado\?
+ Eliminar este filtro\?
Filtro %1$s eliminado
- Filtro %1$s foi criado
+ Filtro \'%1$s\' foi criado
Informação de Percurso
Format
Pesquisar POI (ponto de interesse)
@@ -394,7 +394,7 @@
Navegação OsmAnd offline está temporariamente indisponível.
Circulação pela esquerda
Para países onde as pessoas conduzem do lado esquerdo da estrada.
- O ponto de partida ainda não foi determinado
+ O ponto de partida ainda não foi determinado.
Definir a transparência (0 - transparente, 255 - opaco)
Cancelar o descarregamento\?
O mapa base, necessário para fornecer funcionalidade básica, está na fila de descarregamentos.
@@ -615,7 +615,7 @@
Preparando novos dados…
A navegação online não funciona offline.
Idioma não suportado
- O idioma selecionado não é suportado pelo mecanismo Android TTS (texto para voz) instalado. Quer procurar outro mecanismo TTS na loja de aplicações\? Caso contrário, será usado o idioma predefinido do TTS.
+ O idioma selecionado não é suportado pelo motor TTS (text-to-speech) do Android instalado, o TTS predefinido do seu idioma será utilizado no seu lugar. Procure por outro motor TTS no mercado\?
Faltam dados de voz TTS
Ir ao mercado para descarregar o idioma selecionado\?
Usar destino atual
@@ -623,22 +623,22 @@
Mapa vetorial Offline disponível para esta localização.
\n\t\n\t Para usar, ative \'Menu\' -> \'Definir Vista\' -> \'Origem de Mapa…\' -> \'Mapas Vetoriais Offline\'.
Saída para orientação por voz
- Selecione o narrador para reproduzir as instruções de voz.
- Áudio de chamada telefônica (para interromper os aparelhos de som BT do carro)
+ Selecione o altifalante para orientação por voz.
+ Áudio de chamada telefónica (para interromper os aparelhos de som Bluetooth do carro)
Áudio de Notificação
- Áudio de Media/GPS
+ Áudio de mídia/navegação
A aplicação não conseguiu descarregar a camada do mapa %1$s, se a tornar a instalar pode resolver o problema.
- Modificar a transparência da sobreposição.
+ Ajustar a transparência da sobreposição.
Transparência da Sobreposição
- Modificar a transparência do mapa base.
+ Ajustar a transparência do mapa base.
Transparência do mapa base
Mapa de camada inferior…
Mapa de camada inferior
- Escolha a mapa da camada inferior.
+ Escolha o mapa da sub-camada
Mapa da camada superior…
Nenhum
Mapa da camada superior
- Escolha o mapa da camada superior.
+ Escolha o mapa da sobreposição
Mapa previamente instalado, as \"Configurações\" serão atualizadas.
Selecione (telhas de) mapas para instalar ou atualizar.
Não é possível executar a operação sem uma conexão com a Internet.
@@ -649,7 +649,7 @@
Não foi possível executar a pesquisa offline.
Pesquisa por localização geográfica
Sistema
- Selecione o idioma de visualização (surte efeito só de pois de reiniciar o OsmAnd).
+ Idioma de exibição da aplicação (usado após OsmAnd ser reiniciado).
Linguagem
Próximo
Anterior
@@ -673,7 +673,7 @@
Navegação OsmAnd off-line ainda é uma função experimental e não funciona em distâncias superiores a cerca de 20 km.
\n
\nO serviço de navegação está temporariamente mudado para CloudMade on-line.
- Não é possível encontrar a pasta especificada.
+ Não foi possível encontrar a pasta especificada.
Local de armazenamento
Todos os dados offline na aplicação instalada antiga serão suportados pela nova aplicação, mas os pontos Favoritos devem ser exportados da aplicação antiga e depois importados na nova aplicação.
Build {0} foi instalado ({1}).
@@ -681,11 +681,11 @@
Instalar OsmAnd - {0} de {1} {2} MB \?
A busca da lista de OsmAnd builds falhou
Carregando OsmAnd builds…
- Selecione uma compilação OsmAnd para instalar
+ Selecione a compilação OsmAnd para instalar
Instalar versão
- DDD.DD
- DDD MM.MM
- DDD MM SS.SS
+ GGG.GGGGG
+ GGG MM.MMM
+ GGG MM SS.S
Fazer todas as características de terreno no mapa transparente.
Polígonos
Modo de Visualização
@@ -763,8 +763,8 @@
Definir intervalo para ativar:
Toque no ícone de cadeado para desbloquear
Desbloquear
- Desligar
- modo oculto
+ Executar
+\n a app em segundo plano
Parar
\n modo segundo plano
Mostrar alertas…
@@ -865,7 +865,7 @@
Formato de saída de vídeo
Usar gravador externo
Definir configurações de áudio e vídeo.
- "Definições de áudio e vídeo "
+ Definições de áudio e vídeo
A gravação falhou
Câmara não disponível
Áudio/vídeo está a ser gravado. Para parar toque no AV widget.
@@ -920,10 +920,11 @@
Este suplemento disponibiliza \'Curvas de Nível\' e \'Sombras de relevo\', que podem ser aplicadas nos mapas standard do OsmAnd.
\nEstas funcionalidades podem ser apreciadas por atletas, caminhantes, e qualquer pessoa interessada na informação de relevo de uma paisagem.
\n
+\n
\nOs dados globais (entre as latitudes 70° norte e 70° sul) são baseados nas medições do SRTM (Shuttle Radar Topography Mission) e do ASTER (Advanced Spaceborn Thermal Emission and Reflection Radiometer), um instrumento de imagens no \'Terra\', o satélite principal do Sistema de Observação da Terra da NASA. O ASTER é um esforço conjunto da NASA, do Ministério da Economia, Comércio e Indústria do Japão e do Sistema Espacial Japonês (J-spacesystems).
Este suplemento disponibiliza \'Curvas de Nível\' e \'Sombras de relevo\', que podem ser aplicadas nos mapas padrão do OsmAnd.
\nEstas funcionalidades podem ser apreciadas por atletas, caminhantes, e qualquer pessoa interessada na informação de relevo de uma paisagem.
-\n
+\n
\nOs dados globais (entre as latitudes 70° norte e 70° sul) são baseados nas medições do SRTM (Shuttle Radar Topography Mission) e do ASTER (Advanced Spaceborn Thermal Emission and Reflection Radiometer), um instrumento de imagens no \'Terra\', o satélite principal do Sistema de Observação da Terra da NASA. O ASTER é um esforço conjunto da NASA, do Ministério da Economia, Comércio e Indústria do Japão e do Sistema Espacial Japonês (J-spacesystems).
Curvas de nível
Outros mapas
@@ -1020,18 +1021,18 @@
GPX
Mapas OsmAnd & Navegação
Mapas OsmAnd+ & Navegação
- A descarregar
+ A descarregar…
Palavra-passe no OSM (opcional)
Tipo de focagem da câmara
- Selecione o tipo de focagem da câmara interna.
- Auto foco
+ Modo de focagem da câmara:
+ Auto-foco
Foco hiperfocal
Profundidade de visão estendida
- Foco está definido no infinito
+ O foco está definido como infinito
Foco Macro (close-up)
A câmara tenta focar continuadamente
- Emita som ao tirar foto
- Escolha se pretende reproduzir um som ao tirar fotografias.
+ Reproduzir o som do obturador da câmara
+ Definir som ou silêncio para o obturador de fotos.
Canadá
Versão:
Sobre
@@ -1138,7 +1139,7 @@
Sem estradas com portagem
Evita estradas com portagem
Sem estradas não pavimentadas
- Evita estradas não pavimentadas.
+ Evita estradas não pavimentadas
Sem balsas
Evita balsas
Sem autoestradas
@@ -1237,7 +1238,7 @@
Iniciar a orientação passo a passo automaticamente
selecionado
Intervalo de divisão
- "ponto de rota: %1$s "
+ Ponto de rota: %1$s
Distância: %1$s (%2$s pontos )
Hora de início: %1$tF, %1$tT
Hora de fim: %1$tF, %1$tT
@@ -1269,7 +1270,6 @@
Rotas de autocarros e tróleibus
Este suplemento ativa a funcionalidade para gravar e guardar os seus trajetos manualmente, tocando no widget de gravação GPX no ecrã do mapa, ou fazendo também automaticamente o registo de todas as suas rotas de navegação para um ficheiro GPX.
\n
-\n
\nOs trajetos gravados podem ser partilhados com os seus amigos, ou serem usados para contribuições no OpenStreetMap. Os atletas podem usar trajetos gravados para controlar os seus treinos. Podem ser feitas algumas análises básicas do trajeto diretamente no OsmAnd, como tempos de volta, velocidade média, etc. E claro, os trajetos também podem ser analisados mais tarde em ferramentas externas.
Gravação de viagem
h
@@ -1322,7 +1322,7 @@
Rotas
Detalhes
Elementos restantes
- Tem de estar conectado à Internet para instalar este suplemento.
+ Tem de estar on-line para instalar esta extensão.
Para refletir corretamente seus sinais e regras de trânsito, por favor, selecione a região onde conduz:
Números de porta
Mover os ficheiros de dados OsmAnd para o novo destino\?
@@ -1427,8 +1427,8 @@
Pistas de esqui
Livre %1$s
Memória do aparelho
- Para mostrar mapas de esqui, tem de descarregar o mapa offline especial
- Para mostrar mapas náuticos, tem de descarregar o mapa offline especial
+ Para mostrar mapas de esqui, tem de descarregar o mapa off-line especial.
+ Para mostrar mapas náuticos, tem de descarregar o mapa off-line especial.
Editar grupo
Vaga de estacionamento
Compilações
@@ -1547,7 +1547,7 @@
Ficheiro GPX com posições.
Localizações
Extensões
- Evitar transporte de comboio
+ Sem transporte de comboio
Evitar usar transporte de comboio
Perigo
Contorno em negrito
@@ -1642,7 +1642,7 @@
Utilizador anónimo
Ligado como %1$s
Não selecionado
- Escolha Mês e País
+ Mês e país:
Tamanho das atualizações
Modificar edição OSM
Usar painel de controlo
@@ -1696,7 +1696,7 @@
Nome público
Não mostrar o meu nome nos relatórios
Região de suporte
- Nome do ficheiro contém um carácter inválido
+ O nome do ficheiro contém um carácter inválido
Relatório para
Número de colaboradores
Número de edições
@@ -2511,7 +2511,7 @@
Excursões
Todos
Descarregar mapas que faltam %1$s (%2$d MB)\?
- "Explorar o mapa "
+ Explorar o mapa
Carro
Bicicleta
A pé
@@ -2555,7 +2555,7 @@
Sérvio (latino)
Chinês (simplificado)
Chinês (Hong Kong)
- "Chinês (tradicional) "
+ Chinês (tradicional)
Sem escadas
Evita escadas
Sem passagens por fronteiras
@@ -2634,12 +2634,12 @@
\n
\nAlgumas das características principais:
Navegação
-\n• Funciona on-line (rápido) ou off-line (sem custos de roaming quando estiver no estrangeiro).
-\n• Orientação por voz passo a passo (vozes gravadas e sintetizadas).
-\n• Orientação de trajetos opcionais, visualização do nome da rua e tempo estimado de chegada.
-\n• Suporta pontos intermediários do seu itinerário.
-\n• Correção automática da rota sempre que sair da rota.
-\n• Procure lugares por endereço, pelo tipo (por exemplo: restaurante, hotel, posto de gasolina, museu...) ou por coordenadas geográficas.
+\n• Funciona on-line (rápido) ou off-line (sem custos de roaming quando estiver no estrangeiro)
+\n• Orientação por voz passo a passo (vozes gravadas e sintetizadas)
+\n• Orientação de trajetos opcionais, visualização do nome da rua e tempo estimado de chegada
+\n• Suporta pontos intermediários do seu itinerário
+\n• Correção automática da rota sempre que sair da rota
+\n• Procure lugares por endereço, pelo tipo (por exemplo: restaurante, hotel, posto de gasolina, museu...) ou por coordenadas geográficas
Visualização de mapa
\n • Veja a sua posição e orientação.
\n • Oriente opcionalmente o ecrã de acordo com a bússola ou a direção do seu movimento.
@@ -2649,13 +2649,13 @@
\n • Veja opcionalmente nomes de lugares em inglês, na língua local ou grafia fonética.
\n
Use dados do OpenStretMap e da Wikipédia
-\n • Informações de alta qualidade dos melhores projetos colaborativos do mundo.
-\n • Dados do OSM disponíveis por país ou região.
-\n • POIs da Wikipédia, ótimo para passeios turísticos.
-\n • Descarregamentos grátis ilimitados, diretamente da aplicação.
-\n • Mapas offline vetoriais compactos e atualizados mensalmente
-\n
-\n • Escolha entre região completa ou apenas a rede rodoviária (exemplo: o Japão inteiro tem 700 MB e a rede rodoviária tem apenas 200 MB).
+\n • Informações de alta qualidade dos melhores projetos colaborativos do mundo
+\n • Dados do OSM disponíveis por país ou região
+\n • POIs da Wikipédia, ótimo para passeios turísticos
+\n • Descarregamentos grátis ilimitados, diretamente da aplicação
+\n • Mapas off-line vetoriais compactos e atualizados mensalmente
+\n
+\n • Escolha entre região completa ou apenas a rede rodoviária (exemplo: o Japão inteiro tem 700 MB e a rede rodoviária tem apenas 200 MB)
Recursos de segurança
\n• Mudança da visualização automática para dia/noite opcional
\n• Visualização do limite de velocidade (opcional), com lembrete se o ultrapassar
@@ -2700,22 +2700,22 @@
Europa - Países Baixos
Outros
Lançado
- Instruções de voz
+ Avisos de voz
Adicionar Favorito
eliminar
Reabrir
Tamanho da foto
- Selecionar tamanho de imagem da foto.
+ Definir o tamanho da imagem da câmara
Obter
Recálculo de rota inteligente
Recalcular apenas a parte inicial da rota para viagens longas.
Está a gostar do OsmAnd\?
- A sua opinião e o seu comentário são importantes para nós.
+ A sua opinião e o seu feedback são importantes.
Avalie esta aplicação
Por favor, avalie o OsmAnd no Google Play
Diga-nos porquê.
- Por favor, diga-nos o que gostaria de alterar nesta aplicação.
- Falha no envio
+ Por favor, envie-nos as suas sugestões.
+ Não foi possível enviar
Eliminar alteração
Enviado {0}/{1}
Tentar novamente
@@ -2778,22 +2778,22 @@
Tem a certeza de que quer eliminar a ação \"%s\"\?
Mostrar diálogo Favoritos
Nome do preset
- Tocar no botão de ação adicionará um marcador de mapa no local do centro do ecrã.
- Tocar no botão de ação adicionará um ponto de rota GPX no local do centro do ecrã.
- Tocar no botão de ação adicionará uma notificação de áudio no local do centro do ecrã.
- Tocar no botão de ação adicionará uma notificação de vídeo no local do centro do ecrã.
- Tocar no botão de ação adicionará uma notificação de foto no local do centro do ecrã.
- Tocar no botão de ação adicionará uma notificação OSM no local do centro do ecrã.
- Tocar no botão de ação adicionará um POI no local do centro do ecrã.
- Tocar no botão de ação irá ativar ou desativar a orientação por voz durante a navegação.
- Tocar no botão de ação adicionará um lugar de estacionamento no local do centro do ecrã.
+ O botão é para adicionar um marcador de mapa no local do centro do ecrã.
+ Um botão para adicionar um ponto de rota GPX no local do centro do ecrã.
+ Um botão para adicionar uma notificação de áudio no local do centro do ecrã.
+ Um botão para adicionar uma notificação de vídeo no local do centro do ecrã.
+ Um botão para adicionar uma notificação de foto no local do centro do ecrã.
+ Um botão para adicionar uma notificação OSM no local do centro do ecrã.
+ Um botão para adicionar um POI no local do centro do ecrã.
+ Um botão para ativar ou desativar a orientação por voz durante a navegação.
+ Um botão para adicionar um lugar de estacionamento no local do centro do ecrã.
Mostrar um diálogo intermediário
- " está guardado em "
+ " gravado para "
Lugar
- Nome de ação rápida especificada já está em uso, foi mudado para %1$s para evitar uma duplicação.
+ Ação rápida renomeada para %1$s para evitar duplicação.
Nome de ação rápida duplicado
- Tocar neste botão de ação mostra ou esconde os pontos favoritos no mapa.
- Tocar neste botão de ação mostra ou esconde POIs no mapa.
+ Uma alternância para mostrar ou ocultar os pontos favoritos no mapa.
+ Uma alternância para mostrar ou ocultar PIs no mapa.
Mostrar/esconder favoritos
Mostrar Favoritos
Esconder favoritos
@@ -2807,19 +2807,19 @@
Deixe em branco para automaticamente usar o endereço ou nome de lugar.
Esta mensagem está incluída no campo de comentário.
Mensagem
- Selecione a categoria onde guardar o favorito.
- Selecione uma categoria opcional.
+ Categoria para a qual gravar o Favorito:
+ Escolhe uma categoria opcional.
Lista de POIs
Adicione uma ou mais categorias de POI para mostrar no mapa.
- Tocar no botão de ação irá percorrer a lista abaixo.
+ Um botão para percorrer a lista abaixo.
Adicionar um estilo de mapa
Parâmetros não podem ficar em branco
Estilos de mapa
Mudar camada superior de mapa
Camada superior de mapa
Adicionar sobreposição
- A camada superior de mapa foi alterada para \"%s\".
- A camada inferior de mapa foi alterada para \"%s\".
+ A sobreposição de mapa foi alterada para \"%s\".
+ A sub-camada de mapa foi alterada para \"%s\".
Mudar camada inferior de mapa
Camadas inferiores de mapa
Adicionar camada inferior
@@ -2830,19 +2830,19 @@
Mudar posição do botão
Segure e arraste o botão para mudar a sua posição no ecrã.
Nome da ação
- Tem de estar conectado à Internet para ver as fotos do Mapillary.
+ As fotos do Mapillary só estão disponíveis on-line.
Repetir
Adicionar Pontos de Rota
Adicionar Ponto de Passagem
Adicionar Linha
Guardar ponto de passagem GPX
- Guardar ponto de rota
+ Gravar ponto de rota
Ponto de Passagem 1
Ponto de Rota 1
Adicione ficheiros GPX
Importe ficheiros GPX ou grave trilhas.
Adicione Favoritos
- Importe Favoritos ou adicione novos marcando pontos do mapa.
+ Importe Favoritos ou adicione-os marcando pontos do mapa.
Importar ficheiro GPX
Ficheiro %1$s não possui pontos de rota, importe-o como uma trilha\?
Mover Ponto
@@ -2853,7 +2853,7 @@
Inverno e esqui
Vista de turismo
Náutico
- Copiar nome de Ponto/POI
+ Copiar local/nome de POI
Local sem nome
Túnel à frente
Túneis
@@ -2865,17 +2865,17 @@
Procurando o artigo wiki correspondente
Artigo não encontrado
Como se abre artigos da Wikipédia\?
- Toque num botão e ouça a correspondente voz de comando para identificar os comandos faltantes ou com falha.
+ Toque num botão e ouça a mensagem de voz dele correspondente para ouvir se está ausente ou avariado
Por OsmAnd
Código de localização aberto
Assinaturas
Mostrar apenas imagens de 360°
Lançar
Guarani
- Tocar neste botão de ação alterna entre os modos Dia e Noite para OsmAnd
- Modo de Dia
- Modo Nocturno
- Mudar de modo Dia/Nocturno
+ Uma alternância para alternar entre os modos Dia e Noite para OsmAnd.
+ Modo de dia
+ Modo noturno
+ Mudar modo de dia/noturno
Está a usar o mapa {0} que funciona com o OsmAnd. Quer abrir a versão completa do OsmAnd\?
Lançar OsmAnd\?
m³
@@ -3021,8 +3021,8 @@
Superfície
Lisura
Inclinação
- Evitar paralelepípedo
- Evitar paralelepípedo
+ Sem paralelepípedos ou pavimentos
+ Evita paralelepípedo e pavimentos
Enviar registo
Embarque na paragem
%1$d ficheiros movidos (%2$s).
@@ -3088,12 +3088,12 @@
Selecionar o perfil para começar
Basê seu perfil personalizado num dos perfis de app predefinido, para definir a configuração básica, como a visibilidade predefinida de widgets e unidades de velocidade e distância. Estes são os perfis de app predefinidos, juntamente com exemplos de perfis personalizados para os quais eles podem ser estendidos:
Selecione o tipo de navegação
- Carro, caminhão, motocicleta
+ Carro, camião, motocicleta
Mountain bike, ciclomotor, cavalo
Andar, caminhar, correr
Categorias de transportes públicos
Navio, remar, navegar
- Avião, asa-Delta
+ Avião, asa-delta
Geocodificação
Linha reta
BRouter (offline)
@@ -3105,7 +3105,7 @@
Perfis de app
Alterar o zoom do mapa deslocando a roda para cima e para baixo. Escapar devolve-o à aplicação WunderLINQ.
Usar WunderLINQ para controle
- Você deve adicionar pelo menos um Item para listar nas Configurações de Ação Rápida
+ Adicione pelo menos um item à lista nas configurações de \'Ação rápida\'
Esqui alpino/downhill
Pistas para esqui alpino ou downhill e acesso a teleféricos de esqui.
Cross Country/esqui nórdico
@@ -3127,7 +3127,7 @@
Dificuldade preferida
Preferir rotas desta dificuldade, embora o roteamento sobre pistas mais difíceis ou mais fáceis ainda seja possível se for mais curto.
Fora de pista
- Freerides e fora da pista são rotas e passagens não oficiais. Tipicamente sem serem preparados, sem maquiagem pelos funcionários e não verificados à noite. Entrar por conta e risco próprios.
+ \'Freerides\' e \'fora da pista\' são rotas e passagens não oficiais. Tipicamente sem serem preparados, sem manutenção e não verificados à noite. Entre por conta e risco próprios.
Serviço de descarregamento OsmAnd
Magenta
Ícone
@@ -3723,7 +3723,7 @@
Pressionando o botão de ligar o aparelho ligará o ecrã com OsmAnd acima do ecrã de bloqueio.
Botão de ligar
Sensor de proximidade
- Selecione o tempo limite do ecrã após acordar. (\"%1$s\" não aplica tempo limite).
+ Selecione o tempo limite do ecrã após acordar. (\"%1$s\" não aplica tempo limite.)
Manter o ecrã ligado
Manter o ecrã desligado
Se \"%1$s\" está ativado, o tempo da atividade vai depender dele.
@@ -3832,4 +3832,12 @@
Rota entre pontos
Planejar uma rota
Adicionar ao trilho
+ O ponto adicionado não será visível no mapa, já que o grupo selecionado está escondido, pode encontrá-lo em \"%s\".
+ Mostrar ícones de início e fim
+ Selecione a largura
+ Selecione o intervalo em que as marcas com distância ou tempo no trilho serão exibidas.
+ Selecione a opção de divisão desejada: por tempo ou por distância.
+ Personalizado
+ Setas de direção
+ Sólido
\ No newline at end of file
diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml
index 977539c77f..da85dfc64a 100644
--- a/OsmAnd/res/values-ru/phrases.xml
+++ b/OsmAnd/res/values-ru/phrases.xml
@@ -626,7 +626,7 @@
Заповедник
Пролив
Остров
- Остров (небольшой)
+ Островок
Якорная стоянка
Якорный причал
Бакен
diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml
index 9c2b30c752..644216cf35 100644
--- a/OsmAnd/res/values-ru/strings.xml
+++ b/OsmAnd/res/values-ru/strings.xml
@@ -227,7 +227,7 @@
Подкатегории
Выбранные категории
Создать настраиваемый фильтр
- Настроить поиск
+ Настраиваемый поиск
Фильтры
Применить фильтры
Сохранить фильтр
@@ -2366,7 +2366,7 @@
Редактировать линию
Добавить точку перед
Добавить точку после
- Функции
+ Опции
OsmAnd соединит точки с маршрутом для выбранного профиля.
Сохранить точки, как точки маршрута или как линию.
Выберите профиль навигации
@@ -3831,4 +3831,10 @@
Выберите ширину
Стрелки направления
Сплошной
+ Последнее изменение
+ Импортировать трек
+ Открыть существующий трек
+ Создать новый маршрут
+ Выберите файл трека для открытия.
+ Готово
\ No newline at end of file
diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml
index 4c1a4284c8..1c81c4d8ce 100644
--- a/OsmAnd/res/values-sk/strings.xml
+++ b/OsmAnd/res/values-sk/strings.xml
@@ -3822,4 +3822,12 @@
Trasa medzi bodmi
Naplánovať trasu
Pridať do stopy
+ Pridaný bod nebude viditeľný na mape, pretože zvolená skupina je skrytá. Môžete ho nájsť v \"%s\".
+ Zobraziť ikony štartu a cieľa
+ Zvoľte šírku
+ Zvoľte interval, po ktorom budú na stope zobrazené značky so vzdialenosťou alebo časom.
+ Zvoľte spôsob rozdeľovania: podľa času alebo podľa vzdialenosti.
+ Vlastné
+ Smerové šípky
+ Plné
\ No newline at end of file
diff --git a/OsmAnd/res/values-sr/phrases.xml b/OsmAnd/res/values-sr/phrases.xml
index 7502639336..0cfea8d9e7 100644
--- a/OsmAnd/res/values-sr/phrases.xml
+++ b/OsmAnd/res/values-sr/phrases.xml
@@ -27,7 +27,7 @@
Накнада
Пушење
Достава
- Драјв ин
+ Драјв-ин
За понети
Коктели
Микропивара
@@ -1034,7 +1034,7 @@
Без пумпе
Да
Минерална
- Карактеристика воде: муљ
+ Блато
Сумпорна
Карта
Канцеларија
@@ -1337,7 +1337,7 @@
Стела
Биста
Кошинто
- Крст
+ Крстолик
Возило
Камен спотицања
Обелиск
@@ -2097,7 +2097,7 @@
100ЛЛ гориво
Аутогас
Авионско А-1 гориво
- Едблу гориво
+ Адитив дизел гасова
Гориво: дрво
Гориво: ћумур
Гориво: угаљ
diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml
index 75c9b5a7d8..8d723fb154 100644
--- a/OsmAnd/res/values-sr/strings.xml
+++ b/OsmAnd/res/values-sr/strings.xml
@@ -3821,4 +3821,12 @@
Рута између тачака
Планирај руту
Додајте стази
+ Изаберите ширину
+ Изаберите интервал на коме ће се приказивати ознаке са раздаљином или временом на стази.
+ Изаберите жељену опцију поделе: по времену или по удаљености.
+ Прилагођен
+ Стрелице смера
+ Чврст
+ Додата тачка неће бити видљива на мапи, пошто је одабрана група сакривена, можете је пронаћи у „%s“.
+ Прикажи почетно крајне иконе
\ No newline at end of file
diff --git a/OsmAnd/res/values-zh-rCN/strings.xml b/OsmAnd/res/values-zh-rCN/strings.xml
index 6b996b4940..eaa040c241 100644
--- a/OsmAnd/res/values-zh-rCN/strings.xml
+++ b/OsmAnd/res/values-zh-rCN/strings.xml
@@ -70,7 +70,7 @@
连续
要解锁屏幕按锁图标
配置屏幕
- 锁屏
+ 锁定
我在哪里
指南针
重置为默认
@@ -81,8 +81,8 @@
海拔
剩余时间
下一个转弯
- 锁屏
- 解锁屏幕
+ 锁定
+ 解锁
屏幕被锁定
高速摄像机
交通警示
@@ -125,17 +125,17 @@
北
北北东
东北
- 东 - 北 - 东
+ 东北东
东
- 东 - 南 - 东
+ 东南东
东南
- 南 - 南 - 东
+ 南南东
南
- 南 - 南 - 西
+ 南南西
西南
- 西 - 南 - 西
+ 西南西
西部
- 西 - 北西
+ 西北西
西北
北北西
前
@@ -237,7 +237,7 @@
营养
旅游
运输
- I / O错误发生
+ I/O错误
千米
公里/小时
米
@@ -286,9 +286,9 @@
此前路线
完成搜索
确定
-
+ 收藏
全部清除
- 下载成功
+ 已下载
更换
显示路线
开始导航
@@ -306,7 +306,7 @@
使用在线导航
,指定Openstreetmap.org(OSM)OSM提交所需的设置
数据
- OSM编辑
+ OpenStreetMap 编辑
保存当前轨迹
导航时自动记录轨迹
启用3D的地图视图
@@ -324,7 +324,7 @@
底部
纬度
经度
- 选择地址
+ 地址
地区
城市
街道
@@ -420,7 +420,7 @@
选择应用程序主题
应用程序主题
可用性选项
- 选择地址
+ 指定地址
选择收藏
OSM 改动
更多动作
@@ -451,7 +451,7 @@
OsmAnd 的离线等高线插件
距离测量
等高线
- 等高线插件
+ 等高线
仅包含道路的地图
不显示区域(行政区划级别5-9)的边界。
选择何时显示仅包含道路的地图:
@@ -768,7 +768,7 @@
搜索更多
从列表中选择区域
用选中的格式输入纬度和经度(D - 度,M - 分,S - 秒)
- DDD.DD
+ DDD.DDDDD
DDD MM.MM
DDD MM SS.SS
在地图上显示
@@ -784,7 +784,7 @@
OSM 密码 (可选)
消息
作者名称
- 评论添加成功
+ 评论已添加
发生异常:备注未能添加
编辑兴趣点
创建兴趣点
@@ -802,7 +802,7 @@
是否删除选中的过滤器?
过滤器 %1$s 已被删除
过滤器 %1$s 已创建
- 自动聚焦
+ 自动对焦
清除中途点
保持中途点
您已经有中途点集了。
@@ -820,8 +820,8 @@
请通过地图添加地图标记
未发现路径点
报告
- 上移
- 下移
+ 上移 ↑
+ 下移 ↓
导航完成
避开道路
共享内存
@@ -933,7 +933,7 @@
已创建 OSM 兴趣点
QR码
地图已下载
- 返回地图
+ 显示地图
模拟首次启动应用
地理:
分享位置
@@ -957,14 +957,14 @@
分钟/公里
分钟/英里
海里/小时 (节)
- 浬里/时
-
+ 节
+ 分钟每米
分/公里
米/秒
导航
在后台运行
GPS 唤醒间隔
- 我的最爱信息
+ 收藏信息
停止模拟您的位置。
使用计算得到的路线或者一条 GPX 记录模拟您的位置。
查询地址
@@ -1006,7 +1006,7 @@
书面挪威语
阿根廷西班牙语
泰卢固语
- 新挪威语 (尼诺斯克语)
+ 新挪威语
马来西亚语
海地语
加利西亚语
@@ -1073,8 +1073,8 @@
已选择
已选择
总不
-
-
+ 与
+ 或
在地图上选择
取消选中
全部取消
@@ -1481,9 +1481,9 @@
火车
当前轨迹
移动地图要更改标记的位置
- 方向的音频反馈
+ 音频方向
通过声音指示目标点方向。
- 方向触觉反馈
+ 触觉方向
由振动指示目标点方向。
启用导航时由 OsmAnd 实时服务提供的更新。
未设置目的地
@@ -1513,7 +1513,7 @@
排序
已选择 %s GPX 文件
精细
- 细的
+ 细
中等
加粗
匿名用户不能:
@@ -1680,7 +1680,7 @@
有轨电车线路
分享出租车线路
无轨电车线路
-
+ 运输
剩余的元素
之间
选择速限容许余裕界限,超过时您将会收到语音警告。
@@ -1694,7 +1694,7 @@
交通稳静化
测速摄像机
交通警告
- 附近的收藏夹
+ 收藏附近
附近的 POI
交通警告
停止 GPS 背景模式吗?
@@ -1849,7 +1849,7 @@
拉脱维亚语
立陶宛语
马拉地语
- 挪威语
+ 书面挪威语
波斯语
波兰语
葡萄牙语
@@ -1893,7 +1893,7 @@
汽车导航时禁用双阶段路线
禁用复杂路线
航标
- 在应用程序中选择使用的配置文件
+ 选择显示的配置文件
应用程序配置文件
徒步
摩托车
@@ -1920,7 +1920,7 @@
使用磁传感器来确定罗盘值而不是方向传感器。
使用磁传感器
透过周期性的唤醒 GPS 设备,在背景模式下(屏幕关闭)显示设置,以启用追踪与导航。
- 在请求时选择
+ 根据要求?
使用系统录音机
从已指定的录音开始播放音频。
\n%1$s
@@ -2248,7 +2248,7 @@
每周
早上
晚上
- 选择月份和国家
+ 月份和国家
贡献者人数
编辑次数
报告
@@ -2592,7 +2592,7 @@
编辑活动
你增加了%1$s 个目标。输入文件名后点击\"保存\"。
请在允许OsmAnd获取定位信息后继续。
- 光滑度
+ 平顺度
坡度
更改默认风格以突出显示人行道和非机动车道,使用旧版Mapnik配色。
你正在使用基于 OsmAnd 的 {0}。是否启动完整版 OsmAnd?
@@ -2865,7 +2865,7 @@
正轴等角圆柱投影
储存格式
删除所有\?
- 卸载测速摄像
+ 卸载测速摄像头
合法
测速摄像兴趣点
卸载
@@ -2920,4 +2920,193 @@
公共交通类型
在地图上显示低排放区。不影响路线规划。
显示低排放区
+ 冰路
+ 语音提示
+ 放弃更改
+ 切换配置文件
+ 偏好难度
+ 等级 5
+ 等级 4
+ 等级 3
+ 等级 2
+ 等级 1
+ 个人运输工具
+ 新配置文件
+ 已搜集资料
+ 滑雪旅游
+ 应用程序配置文件
+ 第三方路线规划
+ 特殊路线规划
+ OsmAnd 路线规划
+ 直线
+ 飞机、滑翔
+ 删除配置文件
+ 重复的名称
+ 基本配置文件
+ 模式:%s
+ 选择图标
+ 配置文件名称
+ 已下载地图
+ 旅行指南
+ 旅游指南
+ 旅行指南
+ GPX 文件
+ 中转时间
+ 有更新可用
+ 选择规划
+ 图片缓存
+ 已删除文章
+ 已存书签文章
+ 群组已删除
+ 激流运动
+ 旅游风景
+ OSM 收件人
+ 重命名标记
+ 已经过标记
+ 往返行程
+ 路线已计算
+ 暗黄色
+ 规划路线
+ 隐藏已经过
+ 显示已经过
+ 添加线路
+ 编辑线路
+ 航点 1
+ 添加航点
+ 正在准备
+ 南极洲
+ 路线
+ 点对点
+ %1$s/%2$s
+ 通知
+ OSM
+ 公告
+ 个人
+ 还原
+ 共享
+ 地图
+ 图块
+ 空中航线
+ 未定义
+ 极端
+ 自由滑雪
+ 专家
+ 高级
+ 中等
+ 简单
+ 新手
+ 北欧风
+ 下坡
+ 道路
+ 转移
+ 瓜拉尼语
+ 启动
+ 查看
+ 做
+ 内容
+ 读取
+ 探索
+ 结果
+ 总是
+ 恢复
+ 收藏
+ 约鲁巴语
+ 乌兹别克语
+ 乌尔都语
+ 鞑靼语
+ 塔吉克语
+ 苏格兰语
+ 西西里语
+ 旁遮普语
+ 尼泊尔语
+ 那不勒斯语
+ 缅甸语
+ 蒙古语
+ 米南卡保语
+ 马达加斯加语
+ 柯尔克孜语
+ 哈萨克语
+ 爪哇语
+ 古吉拉特语
+ 楚瓦什语
+ 车臣语
+ 巴伐利亚语
+ 巴什基尔语
+ 阿拉贡语
+ 伦巴第语
+ 滑雪旅行
+ 分隔符
+ 已隐藏
+ 项目
+ 地形阴影
+ 坡度
+ 正在导入
+ 个人资料
+ 度度.度度度度度°
+ 度度°分分.分分分分\'
+ 度度°分分.分分分\'
+ 连接
+ 远足
+ 雪橇
+ 分析
+ 示例
+ 年
+ 年
+ 年
+ 月
+ 月
+ 月
+ 周
+ 周
+ 周
+ 日
+ 日
+ 旅行车
+ 露营车
+ 松软
+ 键盘
+ 无
+ 越野
+ 踏板车
+ 单轮
+ UFO
+ 图标
+ 越野滑雪
+ 雪橇
+ 地理编码
+ 评分
+ 切换
+ 度度.度度度度度度°
+ 度度°分分′秒秒″
+ 航海
+ 关闭
+ 老挝语
+ 标记
+ 完成
+ 新增
+ 群组
+ 列表
+ 线路
+ 若“%1$s”开启,活动时间将取决于它。
+ 默认屏幕超时
+ 色调
+ 米
+ 夜晚地图
+ 应用这些更改将清除此图块源的缓存数据
+ 指定路线上允许的车辆长度。
+ 长度限制
+ 方向
+ 轮椅向前
+ 添加到轨迹
+ 显示开始于结束图标
+ 选择宽度
+ 屏幕超时
+ 耐力赛摩托车
+ 小型摩托车
+ 卡丁车
+ 找不到任何内容:
+ 保持活跃
+ 方向箭头
+ 自定义
+ 粗
\ No newline at end of file
diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml
index d3dc318221..48e5cb5654 100644
--- a/OsmAnd/res/values-zh-rTW/phrases.xml
+++ b/OsmAnd/res/values-zh-rTW/phrases.xml
@@ -1178,7 +1178,7 @@
動力泵浦
無泵浦
礦泉水
- 水的特質:泥漿
+ 泥漿
硫酸
供水點
美食
@@ -1868,7 +1868,7 @@
100LL 燃料
液化石油氣
Jet A-1 燃料
- AdBlue 燃料
+ 柴油排氣液
燃料:木材
燃料:木炭
燃料:煤
diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml
index 3119eb2fcc..aa1224c044 100644
--- a/OsmAnd/res/values-zh-rTW/strings.xml
+++ b/OsmAnd/res/values-zh-rTW/strings.xml
@@ -2891,7 +2891,7 @@
切換日間/夜間模式
道路類型
路面
- 光滑度
+ 平順度
坡度
新增住家
新增工作地點
diff --git a/OsmAnd/src/net/osmand/plus/GPXDatabase.java b/OsmAnd/src/net/osmand/plus/GPXDatabase.java
index 5403c814ca..c010b2964e 100644
--- a/OsmAnd/src/net/osmand/plus/GPXDatabase.java
+++ b/OsmAnd/src/net/osmand/plus/GPXDatabase.java
@@ -188,7 +188,7 @@ public class GPXDatabase {
private boolean showAsMarkers;
private boolean joinSegments;
private boolean showArrows;
- private boolean showStartFinish;
+ private boolean showStartFinish = true;
public GpxDataItem(File file, GPXTrackAnalysis analysis) {
this.file = file;
diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java
index 2da7cbaac2..f3d4089040 100644
--- a/OsmAnd/src/net/osmand/plus/UiUtilities.java
+++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java
@@ -134,12 +134,13 @@ public class UiUtilities {
public Drawable getLayeredIcon(@DrawableRes int bgIconId, @DrawableRes int foregroundIconId,
@ColorRes int bgColorId, @ColorRes int foregroundColorId) {
- Drawable b = getDrawable(bgIconId, bgColorId);
- Drawable f = getDrawable(foregroundIconId, foregroundColorId);
- Drawable[] layers = new Drawable[2];
- layers[0] = b;
- layers[1] = f;
- return new LayerDrawable(layers);
+ Drawable background = getDrawable(bgIconId, bgColorId);
+ Drawable foreground = getDrawable(foregroundIconId, foregroundColorId);
+ return getLayeredIcon(background, foreground);
+ }
+
+ public static Drawable getLayeredIcon(Drawable... icons) {
+ return new LayerDrawable(icons);
}
public Drawable getThemedIcon(@DrawableRes int id) {
@@ -214,13 +215,11 @@ public class UiUtilities {
@ColorInt
public static int getColorWithAlpha(@ColorInt int color, float ratio) {
- int newColor = 0;
int alpha = Math.round(Color.alpha(color) * ratio);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
- newColor = Color.argb(alpha, r, g, b);
- return newColor;
+ return Color.argb(alpha, r, g, b);
}
@ColorInt
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index adee1d5417..77753d691c 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -1244,6 +1244,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
mapRouteInfoMenu.updateMenu();
MapRouteInfoMenu.showLocationOnMap(this, latLonToShow.getLatitude(), latLonToShow.getLongitude());
} else if (toShow instanceof GPXFile) {
+ hideContextAndRouteInfoMenues();
+
Bundle args = new Bundle();
args.putString(TRACK_FILE_PATH, ((GPXFile) toShow).path);
args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuController.MenuState.HALF_SCREEN);
diff --git a/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java
index adc82783a6..c33b183b65 100644
--- a/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java
@@ -48,7 +48,7 @@ public abstract class BottomSheetDialogFragment extends DialogFragment {
public abstract View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
@Override
- public void onAttach(Context context) {
+ public void onAttach(@NonNull Context context) {
super.onAttach(context);
if (context instanceof OnDialogFragmentResultListener) {
dialogFragmentResultListener = (OnDialogFragmentResultListener) context;
@@ -82,10 +82,10 @@ public abstract class BottomSheetDialogFragment extends DialogFragment {
}
@Nullable
- protected Drawable getIcon(@DrawableRes int drawableRes, @ColorRes int color) {
+ protected Drawable getIcon(@DrawableRes int drawableRes, @ColorRes int colorRes) {
OsmandApplication app = getMyApplication();
if (app != null) {
- return app.getUIUtilities().getIcon(drawableRes, color);
+ return app.getUIUtilities().getIcon(drawableRes, colorRes);
} else {
return null;
}
diff --git a/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java
index 2ed487f736..45f5fe3ff4 100644
--- a/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java
+++ b/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java
@@ -8,6 +8,7 @@ import android.util.Log;
import android.view.Surface;
import android.view.View;
+import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import net.osmand.PlatformUtil;
@@ -92,6 +93,15 @@ public class AndroidUiHelper {
}
return false;
}
+
+ public static void setVisibility(@NonNull Activity activity, int visibility, @IdRes int... widgets) {
+ for (int widget : widgets) {
+ View view = activity.findViewById(widget);
+ if (view != null && view.getVisibility() != visibility) {
+ view.setVisibility(visibility);
+ }
+ }
+ }
public static boolean isXLargeDevice(@NonNull Activity ctx) {
int lt = (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK);
diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java
index 8050da14d9..8cdee993c1 100644
--- a/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java
+++ b/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java
@@ -38,13 +38,11 @@ import net.osmand.TspAnt;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
-import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;
-import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
@@ -57,6 +55,8 @@ import net.osmand.plus.mapmarkers.adapters.MapMarkersListAdapter;
import net.osmand.plus.measurementtool.SnapToRoadBottomSheetDialogFragment;
import net.osmand.plus.measurementtool.SnapToRoadBottomSheetDialogFragment.SnapToRoadFragmentListener;
import net.osmand.plus.routing.RoutingHelper;
+import net.osmand.plus.settings.backend.ApplicationMode;
+import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.MapMarkersLayer;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
@@ -623,11 +623,11 @@ public class PlanRouteFragment extends BaseOsmAndFragment implements OsmAndLocat
markersLayer.setInPlanRouteMode(true);
mapActivity.disableDrawer();
- mark(portrait ? View.INVISIBLE : View.GONE,
+ AndroidUiHelper.setVisibility(mapActivity, portrait ? View.INVISIBLE : View.GONE,
R.id.map_left_widgets_panel,
R.id.map_right_widgets_panel,
R.id.map_center_info);
- mark(View.GONE,
+ AndroidUiHelper.setVisibility(mapActivity, View.GONE,
R.id.map_route_info_button,
R.id.map_menu_button,
R.id.map_compass_button,
@@ -694,7 +694,7 @@ public class PlanRouteFragment extends BaseOsmAndFragment implements OsmAndLocat
mapActivity.hideTopToolbar(toolbarController);
}
- mark(View.VISIBLE,
+ AndroidUiHelper.setVisibility(mapActivity, View.VISIBLE,
R.id.map_left_widgets_panel,
R.id.map_right_widgets_panel,
R.id.map_center_info,
@@ -778,18 +778,6 @@ public class PlanRouteFragment extends BaseOsmAndFragment implements OsmAndLocat
}
}
- private void mark(int status, int... widgets) {
- MapActivity mapActivity = getMapActivity();
- if (mapActivity != null) {
- for (int widget : widgets) {
- View v = mapActivity.findViewById(widget);
- if (v != null) {
- v.setVisibility(status);
- }
- }
- }
- }
-
private void showHideMarkersList() {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null && portrait) {
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
index 965c43b3b5..89b3319334 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
@@ -1138,7 +1138,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
mapActivity.showTopToolbar(toolBarController);
}
markGeneralComponents(enable ? View.GONE : View.VISIBLE);
- mark(enable ? View.VISIBLE : View.GONE,
+ AndroidUiHelper.setVisibility(mapActivity, enable ? View.VISIBLE : View.GONE,
R.id.move_point_text,
R.id.move_point_controls);
mainIcon.setImageDrawable(getActiveIcon(enable
@@ -1158,7 +1158,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
mapActivity.showTopToolbar(toolBarController);
}
markGeneralComponents(enable ? View.GONE : View.VISIBLE);
- mark(enable ? View.VISIBLE : View.GONE,
+ AndroidUiHelper.setVisibility(mapActivity,enable ? View.VISIBLE : View.GONE,
R.id.add_point_before_after_text,
R.id.add_point_before_after_controls);
if (!enable) {
@@ -1167,12 +1167,15 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
}
private void markGeneralComponents(int status) {
- mark(status,
- R.id.measurement_distance_text_view,
- R.id.measurement_points_text_view,
- R.id.distance_to_center_text_view,
- R.id.up_down_button,
- R.id.measure_mode_controls);
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null) {
+ AndroidUiHelper.setVisibility(mapActivity, status,
+ R.id.measurement_distance_text_view,
+ R.id.measurement_points_text_view,
+ R.id.distance_to_center_text_view,
+ R.id.up_down_button,
+ R.id.measure_mode_controls);
+ }
}
private void addInitialPoint() {
@@ -1649,11 +1652,11 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
mapActivity.refreshMap();
mapActivity.disableDrawer();
- mark(portrait ? View.INVISIBLE : View.GONE,
+ AndroidUiHelper.setVisibility(mapActivity, portrait ? View.INVISIBLE : View.GONE,
R.id.map_left_widgets_panel,
R.id.map_right_widgets_panel,
R.id.map_center_info);
- mark(View.GONE,
+ AndroidUiHelper.setVisibility(mapActivity, View.GONE,
R.id.map_route_info_button,
R.id.map_menu_button,
R.id.map_compass_button,
@@ -1683,7 +1686,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
measurementLayer.setInMeasurementMode(false);
mapActivity.enableDrawer();
- mark(View.VISIBLE,
+ AndroidUiHelper.setVisibility(mapActivity, View.VISIBLE,
R.id.map_left_widgets_panel,
R.id.map_right_widgets_panel,
R.id.map_center_info,
@@ -1703,18 +1706,6 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
}
}
- private void mark(int status, int... widgets) {
- MapActivity mapActivity = getMapActivity();
- if (mapActivity != null) {
- for (int widget : widgets) {
- View v = mapActivity.findViewById(widget);
- if (v != null) {
- v.setVisibility(status);
- }
- }
- }
- }
-
public void quit(boolean hidePointsListFirst) {
if (editingCtx.getOriginalPointToMove() != null) {
cancelMovePointMode();
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/NewGpxData.java b/OsmAnd/src/net/osmand/plus/measurementtool/NewGpxData.java
index 9da060fdee..e5325da933 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/NewGpxData.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/NewGpxData.java
@@ -1,7 +1,8 @@
package net.osmand.plus.measurementtool;
+import net.osmand.GPXUtilities.GPXFile;
+import net.osmand.GPXUtilities.TrkSegment;
import net.osmand.data.QuadRect;
-import net.osmand.GPXUtilities;
public class NewGpxData {
@@ -12,19 +13,19 @@ public class NewGpxData {
OVERWRITE_SEGMENT
}
- private GPXUtilities.GPXFile gpxFile;
- private GPXUtilities.TrkSegment trkSegment;
+ private GPXFile gpxFile;
+ private TrkSegment trkSegment;
private QuadRect rect;
private ActionType actionType;
- public NewGpxData(GPXUtilities.GPXFile gpxFile, QuadRect rect, ActionType actionType, GPXUtilities.TrkSegment trkSegment) {
+ public NewGpxData(GPXFile gpxFile, QuadRect rect, ActionType actionType, TrkSegment trkSegment) {
this.gpxFile = gpxFile;
this.rect = rect;
this.actionType = actionType;
this.trkSegment = trkSegment;
}
- public GPXUtilities.GPXFile getGpxFile() {
+ public GPXFile getGpxFile() {
return gpxFile;
}
@@ -36,7 +37,7 @@ public class NewGpxData {
return actionType;
}
- public GPXUtilities.TrkSegment getTrkSegment() {
+ public TrkSegment getTrkSegment() {
return trkSegment;
}
}
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java
index 44d2c259eb..92eb175ffc 100644
--- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java
+++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java
@@ -474,7 +474,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
}
((FavoritesActivity) getActivity()).updateListViewFooter(footerView);
- // TODO Rewrite without ContextMenuAdapter
+ // To do Rewrite without ContextMenuAdapter
optionsMenuAdapter = new ContextMenuAdapter(app);
ItemClickListener listener = new ContextMenuAdapter.ItemClickListener() {
@Override
@@ -746,7 +746,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
private void collectDirs(File dir, List dirs, File exclDir) {
File[] listFiles = dir.listFiles();
if (listFiles != null) {
- Arrays.sort(listFiles);
for (File f : listFiles) {
if (f.isDirectory()) {
if (!exclDir.equals(f)) {
@@ -922,7 +921,8 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
for (GpxInfo v : values) {
allGpxAdapter.addLocalIndexInfo(v);
}
- allGpxAdapter.sort();
+ // disable sort
+ // allGpxAdapter.sort();
allGpxAdapter.notifyDataSetChanged();
}
@@ -933,7 +933,8 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
for (GpxInfo v : result) {
allGpxAdapter.addLocalIndexInfo(v);
}
- allGpxAdapter.sort();
+ // disable sort
+ // allGpxAdapter.sort();
allGpxAdapter.refreshSelected();
allGpxAdapter.notifyDataSetChanged();
onPostExecute(result);
@@ -957,7 +958,18 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
if (listFiles == null) {
return new File[0];
}
- Arrays.sort(listFiles);
+ // This file could be sorted in different way for folders
+ // now folders are also sorted by last modified date
+ Arrays.sort(listFiles, new Comparator() {
+ @Override
+ public int compare(File f1, File f2) {
+ // here we could guess date from file name '2017-08-30 ...' - first part date
+ if (f1.lastModified() == f2.lastModified()) {
+ return -f1.getName().compareTo(f2.getName());
+ }
+ return -Long.compare(f1.lastModified(), f2.lastModified());
+ }
+ });
return listFiles;
}
@@ -1115,6 +1127,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
data.get(category.get(found)).add(info);
}
+ // disable sort
public void sort() {
Collections.sort(category, new Comparator() {
@Override
@@ -1622,7 +1635,8 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
for (GpxInfo i : ((List) results.values)) {
allGpxAdapter.addLocalIndexInfo(i);
}
- allGpxAdapter.sort();
+ // disable sort
+ // allGpxAdapter.sort();
allGpxAdapter.refreshSelected();
}
allGpxAdapter.notifyDataSetChanged();
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/TrackActivityFragmentAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/TrackActivityFragmentAdapter.java
index 504686054e..66b212960d 100644
--- a/OsmAnd/src/net/osmand/plus/myplaces/TrackActivityFragmentAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/myplaces/TrackActivityFragmentAdapter.java
@@ -53,17 +53,21 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.TrackActivity;
+import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.measurementtool.NewGpxData;
-import net.osmand.plus.track.SplitTrackAsyncTask;
-import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener;
import net.osmand.plus.settings.backend.OsmandSettings;
+import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
import net.osmand.plus.track.GpxSplitType;
+import net.osmand.plus.track.SplitIntervalCard;
+import net.osmand.plus.track.SplitTrackAsyncTask;
+import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
import net.osmand.plus.widgets.tools.CropCircleTransformation;
import net.osmand.plus.wikipedia.WikiArticleHelper;
import net.osmand.plus.wikivoyage.WikivoyageUtils;
import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment;
import net.osmand.plus.wikivoyage.data.TravelArticle;
+import net.osmand.render.RenderingRulesStorage;
import java.util.ArrayList;
import java.util.List;
@@ -71,6 +75,8 @@ import java.util.Map;
import gnu.trove.list.array.TIntArrayList;
+import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_COLOR_ATTR;
+
public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
private OsmandApplication app;
@@ -308,9 +314,9 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
}
});
+ splitColorView.setVisibility(View.GONE);
if (showMapOnly) {
splitIntervalView.setVisibility(View.GONE);
- splitColorView.setVisibility(View.GONE);
appearanceView.setVisibility(View.GONE);
divider.setVisibility(View.GONE);
bottomDivider.setVisibility(View.VISIBLE);
@@ -354,17 +360,16 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
}
});
appearanceView.setVisibility(View.VISIBLE);
- splitColorView.setVisibility(View.VISIBLE);
divider.setVisibility(View.VISIBLE);
} else {
appearanceView.setVisibility(View.GONE);
- splitColorView.setVisibility(View.GONE);
divider.setVisibility(View.GONE);
}
}
+ updateTrackColor();
}
- private void showTemporaryObjectOnMap(Object toShow){
+ private void showTemporaryObjectOnMap(Object toShow) {
TrackActivity activity = getTrackActivity();
GpxDataItem gpxDataItem = getGpxDataItem();
GPXFile gpx = getGpx();
@@ -708,6 +713,27 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
return Math.max(position, 0);
}
+ private void updateTrackColor() {
+ int color = getGpxDataItem() != null ? getGpxDataItem().getColor() : 0;
+ GPXFile gpxFile = getGpx();
+ if (color == 0 && gpxFile != null) {
+ if (gpxFile.showCurrentTrack) {
+ color = app.getSettings().CURRENT_TRACK_COLOR.get();
+ } else {
+ color = gpxFile.getColor(0);
+ }
+ }
+ if (color == 0) {
+ RenderingRulesStorage renderer = app.getRendererRegistry().getCurrentSelectedRenderer();
+ CommonPreference prefColor = app.getSettings().getCustomRenderProperty(CURRENT_TRACK_COLOR_ATTR);
+ color = GpxAppearanceAdapter.parseTrackColor(renderer, prefColor.get());
+ }
+ TrackBitmapDrawer trackDrawer = getTrackBitmapDrawer();
+ if (trackDrawer != null) {
+ trackDrawer.setTrackColor(color);
+ }
+ }
+
public List flatten(List groups) {
ArrayList list = new ArrayList<>();
for (GpxDisplayGroup g : groups) {
@@ -756,7 +782,7 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
if (activity != null && gpxSplitType != null && gpxFile != null) {
int timeSplit = 0;
double distanceSplit = 0;
- if (!gpxFile.showCurrentTrack) {
+ if (gpxSplitType != GpxSplitType.NO_SPLIT && !gpxFile.showCurrentTrack) {
timeSplit = this.timeSplit.get(selectedSplitInterval);
distanceSplit = this.distanceSplit.get(selectedSplitInterval);
}
@@ -804,20 +830,14 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
if (model.size() > 0) {
if (distance) {
double dvalue = OsmAndFormatter.calculateRoundedDist(value, app);
- options.add(OsmAndFormatter.getFormattedDistance((float) dvalue, app));
+ options.add(SplitIntervalCard.getFormattedDistanceInterval(app, value));
distanceSplit.add(dvalue);
timeSplit.add(-1);
if (Math.abs(model.get(0).getSplitDistance() - dvalue) < 1) {
selectedSplitInterval = distanceSplit.size() - 1;
}
} else {
- if (value < 60) {
- options.add(value + " " + app.getString(R.string.int_seconds));
- } else if (value % 60 == 0) {
- options.add((value / 60) + " " + app.getString(R.string.int_min));
- } else {
- options.add((value / 60f) + " " + app.getString(R.string.int_min));
- }
+ options.add(SplitIntervalCard.getFormattedTimeInterval(app, value));
distanceSplit.add(-1d);
timeSplit.add(value);
if (model.get(0).getSplitTime() == value) {
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/ExportOptionsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/ExportOptionsBottomSheetDialogFragment.java
index 93345a81c7..0b1086bfc5 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/ExportOptionsBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/ExportOptionsBottomSheetDialogFragment.java
@@ -58,7 +58,7 @@ public class ExportOptionsBottomSheetDialogFragment extends MenuBottomSheetDialo
BaseBottomSheetItem osmNotesItem = new BottomSheetItemWithDescription.Builder()
.setDescription(String.valueOf(osmNotesCount))
- .setIcon(getContentIcon(R.drawable.ic_action_osm_note_add))
+ .setIcon(getContentIcon(R.drawable.ic_action_osm_note))
.setTitle(getString(R.string.osm_notes))
.setLayoutId(R.layout.bottom_sheet_item_with_right_descr)
.setDisabled(!(osmNotesCount > 0))
diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java
index 1b51b80e19..a6ea74f36d 100644
--- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java
@@ -21,30 +21,33 @@ import net.osmand.data.FavouritePoint;
import net.osmand.data.FavouritePoint.SpecialPointType;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
-import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
-import net.osmand.plus.settings.backend.OsmandSettings;
-import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.dashboard.tools.DashFragmentData;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.quickaction.QuickActionType;
+import net.osmand.plus.settings.backend.ApplicationMode;
+import net.osmand.plus.settings.backend.OsmandSettings;
+import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.plus.views.MapInfoLayer;
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.mapwidgets.TextInfoWidget;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Date;
import java.util.List;
+import java.util.Locale;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_MARK_AS_PARKING_LOC;
@@ -523,18 +526,13 @@ public class ParkingPositionPlugin extends OsmandPlugin {
}
String getFormattedTime(long timeInMillis) {
- StringBuilder timeStringBuilder = new StringBuilder();
Time time = new Time();
time.set(timeInMillis);
- timeStringBuilder.append(time.hour);
- timeStringBuilder.append(":");
- int minute = time.minute;
- timeStringBuilder.append(minute < 10 ? "0" + minute : minute);
+ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm dd.MM.yyyy", Locale.getDefault());
if (!DateFormat.is24HourFormat(app)) {
- timeStringBuilder.append(time.hour >= 12 ? app.getString(R.string.osmand_parking_pm) : app
- .getString(R.string.osmand_parking_am));
+ sdf = new SimpleDateFormat("hh:mm a dd.MM.yyyy", Locale.getDefault());
}
- return timeStringBuilder.toString();
+ return sdf.format(new Date(time.toMillis(false)));
}
String getFormattedTimeInterval(long timeInMillis, Activity ctx) {
diff --git a/OsmAnd/src/net/osmand/plus/quickaction/CreateEditActionDialog.java b/OsmAnd/src/net/osmand/plus/quickaction/CreateEditActionDialog.java
index d82ace3da6..81476161f9 100644
--- a/OsmAnd/src/net/osmand/plus/quickaction/CreateEditActionDialog.java
+++ b/OsmAnd/src/net/osmand/plus/quickaction/CreateEditActionDialog.java
@@ -31,6 +31,7 @@ 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.osmedit.AddPOIAction;
import java.util.List;
@@ -232,6 +233,10 @@ public class CreateEditActionDialog extends DialogFragment
@Override
public void onClick(View view) {
+ if (action instanceof AddPOIAction) {
+ saveFirstTagWithEmptyValue();
+ }
+
if (action.fillParams(((ViewGroup) root.findViewById(R.id.container)).getChildAt(0), (MapActivity) getActivity())) {
if (quickActionRegistry.isNameUnique(action, getContext())) {
@@ -272,6 +277,10 @@ public class CreateEditActionDialog extends DialogFragment
Toast.makeText(getContext(), R.string.quick_action_empty_param_error, Toast.LENGTH_SHORT).show();
}
}
+
+ private void saveFirstTagWithEmptyValue() {
+ ((ViewGroup) root.findViewById(R.id.container)).getChildAt(0).requestFocus();
+ }
});
}
diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java
index f9d43df2d2..66985df348 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java
@@ -253,10 +253,10 @@ public class RouteProvider {
}
if (OSMAND_ROUTER_V2.equals(file.author)) {
route = parseOsmAndGPXRoute(points, file);
- addMissingTurns = false;
+ addMissingTurns = route.isEmpty();
} else if (file.isCloudmadeRouteFile() || OSMAND_ROUTER.equals(file.author)) {
directions = parseOsmAndGPXRoute(points, file, OSMAND_ROUTER.equals(file.author), builder.leftSide, 10);
- if (OSMAND_ROUTER.equals(file.author)) {
+ if (OSMAND_ROUTER.equals(file.author) && file.hasRtePt()) {
// For files generated by OSMAND_ROUTER use directions contained unaltered
addMissingTurns = false;
}
diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
index 78524a4d74..7d1c9696d2 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
@@ -857,10 +857,9 @@ public class RoutingHelper {
l.newRouteIsCalculated(newRoute, showToast);
}
}
- if (showToast.value && OsmandPlugin.isDevelopment()) {
+ if (showToast.value && newRoute && OsmandPlugin.isDevelopment()) {
String msg = app.getString(R.string.new_route_calculated_dist_dbg,
OsmAndFormatter.getFormattedDistance(res.getWholeDistance(), app),
-
((int)res.getRoutingTime()) + " sec",
res.getCalculateTime(), res.getVisitedSegments(), res.getLoadedTiles());
app.showToastMessage(msg);
diff --git a/OsmAnd/src/net/osmand/plus/track/DirectionArrowsCard.java b/OsmAnd/src/net/osmand/plus/track/DirectionArrowsCard.java
index f7ce7bacc6..0fa14c14c4 100644
--- a/OsmAnd/src/net/osmand/plus/track/DirectionArrowsCard.java
+++ b/OsmAnd/src/net/osmand/plus/track/DirectionArrowsCard.java
@@ -42,6 +42,11 @@ public class DirectionArrowsCard extends BaseCard {
compoundButton.setChecked(checked);
trackDrawInfo.setShowArrows(checked);
mapActivity.refreshMap();
+
+ CardListener listener = getListener();
+ if (listener != null) {
+ listener.onCardPressed(DirectionArrowsCard.this);
+ }
}
});
}
diff --git a/OsmAnd/src/net/osmand/plus/track/SplitIntervalBottomSheet.java b/OsmAnd/src/net/osmand/plus/track/SplitIntervalBottomSheet.java
index e062483739..e8728d6003 100644
--- a/OsmAnd/src/net/osmand/plus/track/SplitIntervalBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/track/SplitIntervalBottomSheet.java
@@ -1,6 +1,5 @@
package net.osmand.plus.track;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -27,7 +26,6 @@ import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
import net.osmand.plus.helpers.AndroidUiHelper;
-import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
import org.apache.commons.logging.Log;
@@ -190,7 +188,7 @@ public class SplitIntervalBottomSheet extends MenuBottomSheetDialogFragment {
private void addDistanceOptionSplit(int value, @NonNull List displayGroups) {
if (displayGroups.size() > 0) {
double dvalue = OsmAndFormatter.calculateRoundedDist(value, app);
- String formattedDist = OsmAndFormatter.getFormattedDistance((float) dvalue, app);
+ String formattedDist = SplitIntervalCard.getFormattedDistanceInterval(app, value);
distanceSplitOptions.put(formattedDist, dvalue);
if (Math.abs(displayGroups.get(0).getSplitDistance() - dvalue) < 1) {
selectedDistanceSplitInterval = distanceSplitOptions.size() - 1;
@@ -200,14 +198,7 @@ public class SplitIntervalBottomSheet extends MenuBottomSheetDialogFragment {
private void addTimeOptionSplit(int value, @NonNull List model) {
if (model.size() > 0) {
- String time;
- if (value < 60) {
- time = value + " " + getString(R.string.int_seconds);
- } else if (value % 60 == 0) {
- time = (value / 60) + " " + getString(R.string.int_min);
- } else {
- time = (value / 60f) + " " + getString(R.string.int_min);
- }
+ String time = SplitIntervalCard.getFormattedTimeInterval(app, value);
timeSplitOptions.put(time, value);
if (model.get(0).getSplitTime() == value) {
selectedTimeSplitInterval = timeSplitOptions.size() - 1;
@@ -311,24 +302,10 @@ public class SplitIntervalBottomSheet extends MenuBottomSheetDialogFragment {
int timeSplit = new ArrayList<>(timeSplitOptions.values()).get(selectedTimeSplitInterval);
double distanceSplit = new ArrayList<>(distanceSplitOptions.values()).get(selectedDistanceSplitInterval);
- SplitTrackListener splitTrackListener = new SplitTrackListener() {
-
- @Override
- public void trackSplittingStarted() {
-
- }
-
- @Override
- public void trackSplittingFinished() {
- if (selectedGpxFile != null) {
- List groups = getDisplayGroups();
- selectedGpxFile.setDisplayGroups(groups, app);
- }
- }
- };
- List groups = getDisplayGroups();
- new SplitTrackAsyncTask(app, selectedSplitType, groups, splitTrackListener, trackDrawInfo.isJoinSegments(),
- timeSplit, distanceSplit).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ Fragment target = getTargetFragment();
+ if (target instanceof TrackAppearanceFragment) {
+ ((TrackAppearanceFragment) target).applySplit(selectedSplitType, timeSplit, distanceSplit);
+ }
}
@NonNull
diff --git a/OsmAnd/src/net/osmand/plus/track/SplitIntervalCard.java b/OsmAnd/src/net/osmand/plus/track/SplitIntervalCard.java
index 44b4d75b0c..377185e714 100644
--- a/OsmAnd/src/net/osmand/plus/track/SplitIntervalCard.java
+++ b/OsmAnd/src/net/osmand/plus/track/SplitIntervalCard.java
@@ -1,19 +1,31 @@
package net.osmand.plus.track;
+import android.graphics.Typeface;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
+import net.osmand.AndroidUtils;
+import net.osmand.plus.OsmAndFormatter;
+import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.helpers.AndroidUiHelper;
+import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
+import net.osmand.plus.widgets.style.CustomTypefaceSpan;
public class SplitIntervalCard extends BaseCard {
- public SplitIntervalCard(@NonNull MapActivity mapActivity) {
+ private TrackDrawInfo trackDrawInfo;
+
+ public SplitIntervalCard(@NonNull MapActivity mapActivity, @NonNull TrackDrawInfo trackDrawInfo) {
super(mapActivity);
+ this.trackDrawInfo = trackDrawInfo;
}
@Override
@@ -28,6 +40,17 @@ public class SplitIntervalCard extends BaseCard {
TextView titleView = view.findViewById(R.id.title);
titleView.setText(R.string.gpx_split_interval);
+ Typeface typeface = FontCache.getFont(app, app.getString(R.string.font_roboto_medium));
+ int secondaryTextColor = AndroidUtils.getColorFromAttr(view.getContext(), R.attr.active_color_basic);
+
+ String splitInterval = getSplitInterval();
+ SpannableStringBuilder spannableSplitInterval = new SpannableStringBuilder(splitInterval);
+ spannableSplitInterval.setSpan(new ForegroundColorSpan(secondaryTextColor), 0, spannableSplitInterval.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ spannableSplitInterval.setSpan(new CustomTypefaceSpan(typeface), 0, spannableSplitInterval.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ TextView descriptionView = view.findViewById(R.id.description);
+ descriptionView.setText(spannableSplitInterval);
+
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -38,4 +61,32 @@ public class SplitIntervalCard extends BaseCard {
}
});
}
+
+ private String getSplitInterval() {
+ String intervalStr = "";
+ int splitInterval = (int) trackDrawInfo.getSplitInterval();
+ if (splitInterval == 0) {
+ intervalStr = GpxSplitType.NO_SPLIT.getHumanString(app);
+ } else if (trackDrawInfo.getSplitType() == GpxSplitType.DISTANCE.getType()) {
+ intervalStr = getFormattedDistanceInterval(app, trackDrawInfo.getSplitInterval());
+ } else if (trackDrawInfo.getSplitType() == GpxSplitType.TIME.getType()) {
+ intervalStr = getFormattedTimeInterval(app, splitInterval);
+ }
+ return intervalStr;
+ }
+
+ public static String getFormattedTimeInterval(OsmandApplication app, double interval) {
+ if (interval < 60) {
+ return interval + " " + app.getString(R.string.int_seconds);
+ } else if (interval % 60 == 0) {
+ return (interval / 60) + " " + app.getString(R.string.int_min);
+ } else {
+ return (interval / 60f) + " " + app.getString(R.string.int_min);
+ }
+ }
+
+ public static String getFormattedDistanceInterval(OsmandApplication app, double interval) {
+ double roundedDist = OsmAndFormatter.calculateRoundedDist(interval, app);
+ return OsmAndFormatter.getFormattedDistance((float) roundedDist, app);
+ }
}
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
index ef578f90f2..faaa96cf52 100644
--- a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
+++ b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
@@ -1,5 +1,7 @@
package net.osmand.plus.track;
+import android.Manifest;
+import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
@@ -9,29 +11,41 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
+import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.ActivityCompat;
+import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import net.osmand.AndroidUtils;
import net.osmand.GPXUtilities.GPXFile;
+import net.osmand.Location;
import net.osmand.PlatformUtil;
+import net.osmand.data.QuadRect;
+import net.osmand.data.RotatedTileBox;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
+import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.ContextMenuFragment;
+import net.osmand.plus.base.ContextMenuFragment.ContextMenuFragmentListener;
import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.routepreparationmenu.cards.BaseCard.CardListener;
import net.osmand.plus.settings.backend.OsmandSettings;
+import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
+import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.render.RenderingRulesStorage;
import net.osmand.util.Algorithms;
@@ -42,9 +56,11 @@ import java.util.ArrayList;
import java.util.List;
import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_COLOR_ATTR;
+import static net.osmand.plus.dialogs.GpxAppearanceAdapter.TRACK_WIDTH_BOLD;
+import static net.osmand.plus.dialogs.GpxAppearanceAdapter.TRACK_WIDTH_MEDIUM;
import static net.osmand.plus.track.TrackDrawInfo.TRACK_FILE_PATH;
-public class TrackAppearanceFragment extends ContextMenuFragment implements CardListener {
+public class TrackAppearanceFragment extends ContextMenuFragment implements CardListener, ContextMenuFragmentListener {
public static final String TAG = TrackAppearanceFragment.class.getName();
@@ -57,12 +73,15 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
private SelectedGpxFile selectedGpxFile;
private List displayGroups;
- private ImageView appearanceIcon;
-
private int menuTitleHeight;
private long modifiedTime = -1;
private TrackWidthCard trackWidthCard;
+ private SplitIntervalCard splitIntervalCard;
+
+ private ImageView appearanceIcon;
+ private View zoomButtonsView;
+ private ImageButton myLocButtonView;
@Override
public int getMainLayoutId() {
@@ -136,6 +155,7 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
View view = super.onCreateView(inflater, container, savedInstanceState);
if (view != null) {
appearanceIcon = view.findViewById(R.id.appearance_icon);
+ setListener(this);
if (isPortrait()) {
updateCardsLayout();
@@ -149,6 +169,8 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
params.gravity = Gravity.BOTTOM | Gravity.START;
view.findViewById(R.id.control_buttons).setLayoutParams(params);
}
+ buildZoomButtons(view);
+ enterTrackAppearanceMode();
runLayoutListener();
}
return view;
@@ -174,6 +196,21 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
updateStatusBarColor();
}
+ @Override
+ public void onContextMenuYPosChanged(@NonNull ContextMenuFragment fragment, int y, boolean needMapAdjust, boolean animated) {
+ updateZoomButtonsPos(fragment, y, animated);
+ }
+
+ @Override
+ public void onContextMenuStateChanged(@NonNull ContextMenuFragment fragment, int menuState) {
+ updateZoomButtonsVisibility(menuState);
+ }
+
+ @Override
+ public void onContextMenuDismiss(@NonNull ContextMenuFragment fragment) {
+
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -192,6 +229,40 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
}
}
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ adjustMapPosition(getHeight());
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ exitTrackAppearanceMode();
+ }
+
+ private void enterTrackAppearanceMode() {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null) {
+ boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
+ AndroidUiHelper.setVisibility(mapActivity, portrait ? View.INVISIBLE : View.GONE,
+ R.id.map_left_widgets_panel,
+ R.id.map_right_widgets_panel,
+ R.id.map_center_info);
+ }
+ }
+
+ private void exitTrackAppearanceMode() {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null) {
+ AndroidUiHelper.setVisibility(mapActivity, View.VISIBLE,
+ R.id.map_left_widgets_panel,
+ R.id.map_right_widgets_panel,
+ R.id.map_center_info,
+ R.id.map_search_button);
+ }
+ }
+
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
@@ -240,6 +311,10 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
if (trackWidthCard != null) {
trackWidthCard.updateItems();
}
+ } else if (card instanceof TrackWidthCard) {
+ updateAppearanceIcon();
+ } else if (card instanceof DirectionArrowsCard) {
+ updateAppearanceIcon();
}
}
}
@@ -249,11 +324,183 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
}
+ @Override
+ protected int applyPosY(int currentY, boolean needCloseMenu, boolean needMapAdjust, int previousMenuState, int newMenuState, int dZoom, boolean animated) {
+ int y = super.applyPosY(currentY, needCloseMenu, needMapAdjust, previousMenuState, newMenuState, dZoom, animated);
+ if (needMapAdjust) {
+ adjustMapPosition(y);
+ }
+ return y;
+ }
+
+ private void buildZoomButtons(@NonNull View view) {
+ OsmandApplication app = requireMyApplication();
+ this.zoomButtonsView = view.findViewById(R.id.map_hud_controls);
+ ImageButton zoomInButtonView = (ImageButton) view.findViewById(R.id.map_zoom_in_button);
+ ImageButton zoomOutButtonView = (ImageButton) view.findViewById(R.id.map_zoom_out_button);
+ AndroidUtils.updateImageButton(app, zoomInButtonView, R.drawable.ic_zoom_in, R.drawable.ic_zoom_in,
+ R.drawable.btn_circle_trans, R.drawable.btn_circle_night, isNightMode());
+ AndroidUtils.updateImageButton(app, zoomOutButtonView, R.drawable.ic_zoom_out, R.drawable.ic_zoom_out,
+ R.drawable.btn_circle_trans, R.drawable.btn_circle_night, isNightMode());
+ zoomInButtonView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ doZoomIn();
+ }
+ });
+ zoomOutButtonView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ doZoomOut();
+ }
+ });
+
+ myLocButtonView = (ImageButton) view.findViewById(R.id.map_my_location_button);
+ myLocButtonView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null) {
+ if (OsmAndLocationProvider.isLocationPermissionAvailable(mapActivity)) {
+ mapActivity.getMapViewTrackingUtilities().backToLocationImpl();
+ } else {
+ ActivityCompat.requestPermissions(mapActivity,
+ new String[] {Manifest.permission.ACCESS_FINE_LOCATION},
+ OsmAndLocationProvider.REQUEST_LOCATION_PERMISSION);
+ }
+ }
+ }
+ });
+ updateMyLocation();
+
+ zoomButtonsView.setVisibility(View.VISIBLE);
+ }
+
+ private void updateMyLocation() {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity == null) {
+ return;
+ }
+ OsmandApplication app = mapActivity.getMyApplication();
+ Location lastKnownLocation = app.getLocationProvider().getLastKnownLocation();
+ boolean enabled = lastKnownLocation != null;
+ boolean tracked = mapActivity.getMapViewTrackingUtilities().isMapLinkedToLocation();
+
+ ImageButton myLocButtonView = this.myLocButtonView;
+ if (myLocButtonView != null) {
+ if (!enabled) {
+ myLocButtonView.setImageDrawable(getIcon(R.drawable.ic_my_location, R.color.icon_color_default_light));
+ AndroidUtils.setBackground(app, myLocButtonView, isNightMode(), R.drawable.btn_circle, R.drawable.btn_circle_night);
+ myLocButtonView.setContentDescription(mapActivity.getString(R.string.unknown_location));
+ } else if (tracked) {
+ myLocButtonView.setImageDrawable(getIcon(R.drawable.ic_my_location, R.color.color_myloc_distance));
+ AndroidUtils.setBackground(app, myLocButtonView, isNightMode(), R.drawable.btn_circle, R.drawable.btn_circle_night);
+ } else {
+ myLocButtonView.setImageResource(R.drawable.ic_my_location);
+ AndroidUtils.setBackground(app, myLocButtonView, isNightMode(), R.drawable.btn_circle_blue, R.drawable.btn_circle_blue);
+ myLocButtonView.setContentDescription(mapActivity.getString(R.string.map_widget_back_to_loc));
+ }
+ if (app.accessibilityEnabled()) {
+ myLocButtonView.setClickable(enabled && !tracked && app.getRoutingHelper().isFollowingMode());
+ }
+ }
+ }
+
+ public void updateZoomButtonsPos(@NonNull ContextMenuFragment fragment, int y, boolean animated) {
+ View zoomButtonsView = this.zoomButtonsView;
+ if (zoomButtonsView != null) {
+ int zoomY = y - getZoomButtonsHeight();
+ if (animated) {
+ fragment.animateView(zoomButtonsView, zoomY);
+ } else {
+ zoomButtonsView.setY(zoomY);
+ }
+ }
+ }
+
+ private int getZoomButtonsHeight() {
+ View zoomButtonsView = this.zoomButtonsView;
+ return zoomButtonsView != null ? zoomButtonsView.getHeight() : 0;
+ }
+
+ public void doZoomIn() {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null) {
+ OsmandMapTileView map = mapActivity.getMapView();
+ if (map.isZooming() && map.hasCustomMapRatio()) {
+ mapActivity.changeZoom(2, System.currentTimeMillis());
+ } else {
+ mapActivity.changeZoom(1, System.currentTimeMillis());
+ }
+ }
+ }
+
+ public void doZoomOut() {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null) {
+ mapActivity.changeZoom(-1, System.currentTimeMillis());
+ }
+ }
+
+ private void updateZoomButtonsVisibility(int menuState) {
+ View zoomButtonsView = this.zoomButtonsView;
+ if (zoomButtonsView != null) {
+ if (menuState == MenuState.HEADER_ONLY) {
+ if (zoomButtonsView.getVisibility() != View.VISIBLE) {
+ zoomButtonsView.setVisibility(View.VISIBLE);
+ }
+ } else {
+ if (zoomButtonsView.getVisibility() == View.VISIBLE) {
+ zoomButtonsView.setVisibility(View.INVISIBLE);
+ }
+ }
+ }
+ }
+
private void updateAppearanceIcon() {
- Drawable icon = getPaintedContentIcon(R.drawable.ic_action_gpx_width_bold, trackDrawInfo.getColor());
+ Drawable icon = getTrackIcon(app, trackDrawInfo.getWidth(), trackDrawInfo.isShowArrows(), trackDrawInfo.getColor());
appearanceIcon.setImageDrawable(icon);
}
+ private void adjustMapPosition(int y) {
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null && mapActivity.getMapView() != null) {
+ GPXFile gpxFile = selectedGpxFile.getGpxFile();
+ QuadRect r = gpxFile.getRect();
+
+ RotatedTileBox tb = mapActivity.getMapView().getCurrentRotatedTileBox().copy();
+ int tileBoxWidthPx = 0;
+ int tileBoxHeightPx = 0;
+
+ if (!isPortrait()) {
+ tileBoxWidthPx = tb.getPixWidth() - getWidth();
+ } else {
+ int fHeight = getViewHeight() - y - AndroidUtils.getStatusBarHeight(mapActivity);
+ tileBoxHeightPx = tb.getPixHeight() - fHeight;
+ }
+ if (r.left != 0 && r.right != 0) {
+ mapActivity.getMapView().fitRectToMap(r.left, r.right, r.top, r.bottom, tileBoxWidthPx, tileBoxHeightPx, 0);
+ }
+ }
+ }
+
+ public Drawable getTrackIcon(OsmandApplication app, String widthAttr, boolean showArrows, @ColorInt int color) {
+ int widthIconId = getWidthIconId(widthAttr);
+ Drawable widthIcon = app.getUIUtilities().getPaintedIcon(widthIconId, color);
+
+ int strokeIconId = getStrokeIconId(widthAttr);
+ int strokeColor = UiUtilities.getColorWithAlpha(Color.BLACK, 0.7f);
+ Drawable strokeIcon = app.getUIUtilities().getPaintedIcon(strokeIconId, strokeColor);
+
+ Drawable arrows = null;
+ if (showArrows) {
+ int arrowsIconId = getArrowsIconId(widthAttr);
+ int contrastColor = UiUtilities.getContrastColor(app, color, false);
+ arrows = app.getUIUtilities().getPaintedIcon(arrowsIconId, contrastColor);
+ }
+ return UiUtilities.getLayeredIcon(widthIcon, strokeIcon, arrows);
+ }
+
private void updateCardsLayout() {
View mainView = getMainView();
if (mainView != null) {
@@ -289,7 +536,10 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
@Override
public void onClick(View v) {
discardChanges();
- dismiss();
+ FragmentActivity activity = getActivity();
+ if (activity != null) {
+ activity.onBackPressed();
+ }
}
});
@@ -336,27 +586,38 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
if (splitType == null) {
splitType = GpxSplitType.NO_SPLIT;
}
- SplitTrackAsyncTask.SplitTrackListener splitTrackListener = new SplitTrackAsyncTask.SplitTrackListener() {
-
- @Override
- public void trackSplittingStarted() {
-
- }
-
- @Override
- public void trackSplittingFinished() {
- if (selectedGpxFile != null) {
- List groups = getGpxDisplayGroups();
- selectedGpxFile.setDisplayGroups(groups, app);
- }
- }
- };
- List groups = getGpxDisplayGroups();
- new SplitTrackAsyncTask(app, splitType, groups, splitTrackListener, trackDrawInfo.isJoinSegments(),
- timeSplit, distanceSplit).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ applySplit(splitType, timeSplit, distanceSplit);
}
}
+ void applySplit(GpxSplitType splitType, int timeSplit, double distanceSplit) {
+ if (splitIntervalCard != null) {
+ splitIntervalCard.updateContent();
+ }
+ SplitTrackListener splitTrackListener = new SplitTrackListener() {
+
+ @Override
+ public void trackSplittingStarted() {
+
+ }
+
+ @Override
+ public void trackSplittingFinished() {
+ if (selectedGpxFile != null) {
+ List groups = getGpxDisplayGroups();
+ selectedGpxFile.setDisplayGroups(groups, app);
+ }
+ MapActivity mapActivity = getMapActivity();
+ if (mapActivity != null && AndroidUtils.isActivityNotDestroyed(mapActivity)) {
+ mapActivity.refreshMap();
+ }
+ }
+ };
+ List groups = getGpxDisplayGroups();
+ new SplitTrackAsyncTask(app, splitType, groups, splitTrackListener, trackDrawInfo.isJoinSegments(),
+ timeSplit, distanceSplit).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+
private void saveGpx(final GPXFile gpxFile) {
new SaveGpxAsyncTask(gpxFile, new SaveGpxAsyncTask.SaveGpxListener() {
@Override
@@ -379,11 +640,12 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
ViewGroup cardsContainer = getCardsContainer();
cardsContainer.removeAllViews();
- SplitIntervalCard splitIntervalCard = new SplitIntervalCard(mapActivity);
+ splitIntervalCard = new SplitIntervalCard(mapActivity, trackDrawInfo);
splitIntervalCard.setListener(this);
cardsContainer.addView(splitIntervalCard.build(mapActivity));
DirectionArrowsCard directionArrowsCard = new DirectionArrowsCard(mapActivity, trackDrawInfo);
+ directionArrowsCard.setListener(this);
cardsContainer.addView(directionArrowsCard.build(mapActivity));
TrackColoringCard trackColoringCard = new TrackColoringCard(mapActivity, trackDrawInfo);
@@ -391,6 +653,7 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
cardsContainer.addView(trackColoringCard.build(mapActivity));
trackWidthCard = new TrackWidthCard(mapActivity, trackDrawInfo);
+ trackWidthCard.setListener(this);
cardsContainer.addView(trackWidthCard.build(mapActivity));
}
}
@@ -433,4 +696,34 @@ public class TrackAppearanceFragment extends ContextMenuFragment implements Card
return false;
}
}
+
+ public static int getWidthIconId(String widthAttr) {
+ if (TRACK_WIDTH_BOLD.equals(widthAttr)) {
+ return R.drawable.ic_action_track_line_bold_color;
+ } else if (TRACK_WIDTH_MEDIUM.equals(widthAttr)) {
+ return R.drawable.ic_action_track_line_medium_color;
+ } else {
+ return R.drawable.ic_action_track_line_thin_color;
+ }
+ }
+
+ public static int getStrokeIconId(String widthAttr) {
+ if (TRACK_WIDTH_BOLD.equals(widthAttr)) {
+ return R.drawable.ic_action_track_line_bold_stroke;
+ } else if (TRACK_WIDTH_MEDIUM.equals(widthAttr)) {
+ return R.drawable.ic_action_track_line_medium_stroke;
+ } else {
+ return R.drawable.ic_action_track_line_thin_stroke;
+ }
+ }
+
+ public static int getArrowsIconId(String widthAttr) {
+ if (TRACK_WIDTH_BOLD.equals(widthAttr)) {
+ return R.drawable.ic_action_track_line_bold_direction;
+ } else if (TRACK_WIDTH_MEDIUM.equals(widthAttr)) {
+ return R.drawable.ic_action_track_line_medium_direction;
+ } else {
+ return R.drawable.ic_action_track_line_thin_direction;
+ }
+ }
}
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java b/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java
index 65ccad6b73..7dc668e3d6 100644
--- a/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java
+++ b/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java
@@ -195,6 +195,11 @@ public class TrackWidthCard extends BaseCard {
updateHeader();
updateCustomWidthSlider();
+
+ CardListener listener = getListener();
+ if (listener != null) {
+ listener.onCardPressed(TrackWidthCard.this);
+ }
}
});
}
@@ -207,7 +212,7 @@ public class TrackWidthCard extends BaseCard {
iconId = R.drawable.ic_action_settings;
color = AndroidUtils.getColorFromAttr(holder.itemView.getContext(), R.attr.active_color_basic);
} else {
- iconId = GpxAppearanceAdapter.getWidthIconId(item.getValue());
+ iconId = TrackAppearanceFragment.getWidthIconId(item.getValue());
}
holder.icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconId, color));
}
diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java
index ea5cf50027..848ad6ec3e 100644
--- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java
@@ -57,6 +57,7 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.MapActivityActions;
+import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.controllers.TransportStopController;
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
@@ -454,7 +455,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
mInGpxDetailsMode = true;
activity.disableDrawer();
- mark(View.INVISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(activity, View.INVISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
@@ -469,7 +470,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
public void exitGpxDetailsMode() {
mInGpxDetailsMode = false;
activity.enableDrawer();
- mark(View.VISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(activity, View.VISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
@@ -480,7 +481,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
private void quitMovingMarker() {
mInChangeMarkerPositionMode = false;
- mark(View.VISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(activity, View.VISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
@@ -491,7 +492,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
public void quitAddGpxPoint() {
mInAddGpxPointMode = false;
- mark(View.VISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(activity, View.VISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
@@ -508,7 +509,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
mInAddGpxPointMode = true;
mAddGpxPointBottomSheetHelper.show(newGpxPoint);
- mark(View.INVISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(activity, View.INVISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
@@ -541,7 +542,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
mInChangeMarkerPositionMode = true;
mMoveMarkerBottomSheetHelper.show(menu.getRightIcon());
- mark(View.INVISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(activity, View.INVISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
@@ -555,15 +556,6 @@ public class ContextMenuLayer extends OsmandMapLayer {
view.refreshMap();
}
- private void mark(int status, int... widgets) {
- for (int widget : widgets) {
- View v = activity.findViewById(widget);
- if (v != null) {
- v.setVisibility(status);
- }
- }
- }
-
public void cancelMovingMarker() {
cancelApplyingNewMarkerPosition = true;
quitMovingMarker();
diff --git a/OsmAnd/src/net/osmand/plus/views/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/GPXLayer.java
index 1f77a5e52f..922fbba961 100644
--- a/OsmAnd/src/net/osmand/plus/views/GPXLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/GPXLayer.java
@@ -94,6 +94,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
private Drawable startPointIcon;
private Drawable finishPointIcon;
+ private Drawable startAndFinishIcon;
private LayerDrawable selectedPoint;
private TrackDrawInfo trackDrawInfo;
private TrackChartPoints trackChartPoints;
@@ -190,6 +191,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
UiUtilities iconsCache = view.getApplication().getUIUtilities();
startPointIcon = iconsCache.getIcon(R.drawable.map_track_point_start);
finishPointIcon = iconsCache.getIcon(R.drawable.map_track_point_finish);
+ startAndFinishIcon = iconsCache.getIcon(R.drawable.map_track_point_start_finish);
contextMenuLayer = view.getLayerByClass(ContextMenuLayer.class);
@@ -545,8 +547,12 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
WptPt start = segment.points.get(0);
WptPt end = segment.points.get(segment.points.size() - 1);
- drawPoint(canvas, tileBox, start, startPointIcon);
- drawPoint(canvas, tileBox, end, finishPointIcon);
+ if (start.equals(end)) {
+ drawPoint(canvas, tileBox, start, startAndFinishIcon);
+ } else {
+ drawPoint(canvas, tileBox, start, startPointIcon);
+ drawPoint(canvas, tileBox, end, finishPointIcon);
+ }
}
}
}
diff --git a/OsmAnd/src/net/osmand/plus/views/MapQuickActionLayer.java b/OsmAnd/src/net/osmand/plus/views/MapQuickActionLayer.java
index 18aaa84bf2..97e9f64f2d 100644
--- a/OsmAnd/src/net/osmand/plus/views/MapQuickActionLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/MapQuickActionLayer.java
@@ -311,7 +311,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
view.setLatLon(lat, lon);
inMovingMarkerMode = true;
- mark(View.INVISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(mapActivity, View.INVISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = mapActivity.findViewById(R.id.map_collapse_button);
@@ -349,7 +349,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
}
inMovingMarkerMode = false;
- mark(View.VISIBLE, R.id.map_ruler_layout,
+ AndroidUiHelper.setVisibility(mapActivity, View.VISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = mapActivity.findViewById(R.id.map_collapse_button);
@@ -359,15 +359,6 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
view.refreshMap();
}
- private void mark(int status, int... widgets) {
- for (int widget : widgets) {
- View v = mapActivity.findViewById(widget);
- if (v != null) {
- v.setVisibility(status);
- }
- }
- }
-
@Override
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
if (isInMovingMarkerMode() && !pressedQuickActionWidget(point.x, point.y)) {
diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java
index 5b209060f5..30b73e7299 100644
--- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java
+++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java
@@ -1275,6 +1275,7 @@ public class MapInfoWidgetsFactory {
public boolean updateInfo() {
boolean visible = settings.SHOW_COORDINATES_WIDGET.get() && map.getContextMenu().shouldShowTopControls()
&& map.getMapRouteInfoMenu().shouldShowTopControls() && !map.isTopToolbarActive()
+ && !map.getMapLayers().getGpxLayer().isInTrackAppearanceMode()
&& !MapRouteInfoMenu.chooseRoutesVisible && !MapRouteInfoMenu.waypointsVisible;
updateVisibility(visible);
diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java
index 4f1ebd953d..1ddd521fc9 100644
--- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java
+++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java
@@ -191,6 +191,7 @@ public class MapMarkersWidgetsFactory {
|| addressTopBar.getVisibility() == View.VISIBLE
|| map.isTopToolbarActive()
|| !map.getContextMenu().shouldShowTopControls()
+ || map.getMapLayers().getGpxLayer().isInTrackAppearanceMode()
|| map.getMapLayers().getMapMarkersLayer().isInPlanRouteMode()) {
updateVisibility(false);
return;