diff --git a/OsmAnd/res/drawable-hdpi/ic_arrow_left_16.png b/OsmAnd/res/drawable-hdpi/ic_arrow_left_16.png
new file mode 100644
index 0000000000..674f960de5
Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_arrow_left_16.png differ
diff --git a/OsmAnd/res/drawable-hdpi/ic_arrow_right_16.png b/OsmAnd/res/drawable-hdpi/ic_arrow_right_16.png
new file mode 100644
index 0000000000..389ef827ba
Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_arrow_right_16.png differ
diff --git a/OsmAnd/res/drawable-mdpi/ic_arrow_left_16.png b/OsmAnd/res/drawable-mdpi/ic_arrow_left_16.png
new file mode 100644
index 0000000000..cc33dfd2bc
Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_arrow_left_16.png differ
diff --git a/OsmAnd/res/drawable-mdpi/ic_arrow_right_16.png b/OsmAnd/res/drawable-mdpi/ic_arrow_right_16.png
new file mode 100644
index 0000000000..f518ede074
Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_arrow_right_16.png differ
diff --git a/OsmAnd/res/drawable-xhdpi/ic_arrow_left_16.png b/OsmAnd/res/drawable-xhdpi/ic_arrow_left_16.png
new file mode 100644
index 0000000000..b04dd1ce43
Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_arrow_left_16.png differ
diff --git a/OsmAnd/res/drawable-xhdpi/ic_arrow_right_16.png b/OsmAnd/res/drawable-xhdpi/ic_arrow_right_16.png
new file mode 100644
index 0000000000..77b6be87f9
Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_arrow_right_16.png differ
diff --git a/OsmAnd/res/drawable-xxhdpi/ic_arrow_left_16.png b/OsmAnd/res/drawable-xxhdpi/ic_arrow_left_16.png
new file mode 100644
index 0000000000..b113b016c2
Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_arrow_left_16.png differ
diff --git a/OsmAnd/res/drawable-xxhdpi/ic_arrow_right_16.png b/OsmAnd/res/drawable-xxhdpi/ic_arrow_right_16.png
new file mode 100644
index 0000000000..ec01d2ef33
Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_arrow_right_16.png differ
diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml
index f4a25309bc..28f2567f20 100644
--- a/OsmAnd/res/values-ca/strings.xml
+++ b/OsmAnd/res/values-ca/strings.xml
@@ -585,7 +585,7 @@ Memòria proporcional %4$s MB (límit de l\'Android %5$s MB, Dalvik %6$s MB).Especifiqueu l\'idioma, baixada/recàrrega de dades.
Utilitza la navegació en línia
Desa la traça actual a la SD ara mateix.
- Afegeix a Preferits
+ Afegeix a \'Preferits\'
Trieu el país
Trieu el carrer
Trieu la ciutat o el codi postal
@@ -1813,7 +1813,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu
Trieu on voleu desar els fitxers de mapes i d\'altres dades.
Codi QR
Mapa baixat
- S\'ha baixat el mapa de %1$s, ja el podeu començar a utilitzar.
+ El mapa de %1$s està a punt per ser utilitzat.
Mostra el mapa
El mapa base mundial (d\'abast mundial i poc detall) no es troba o està caducat. Considereu baixar-lo per una tenir una perspectiva global.
Si es desactiva s\'engega amb la pantalla del mapa.
@@ -2032,7 +2032,8 @@ L\'espai disponible és només de {2} MB.
Subscripció a OsmAnd Live
Per informar-vos d\'aportacions.
Zona de suport
- Us agraïm haver-vos subscrit a les actualitzacions en directe
+ Us agraïm el vostre recolçament a OsmAnd
+\nPer activar totes les noves funcionalitats us caldrà reiniciar OsmAnd.
Una part del vostre donatiu s\'enviarà als usuaris d\'OSM que enviïn modificacions del mapa a aquesta regió.
Primer heu de comprar una subscripció a OsmAnd Live
@@ -2397,7 +2398,7 @@ Abasta l\'àrea: %1$s x %2$s
El(s) punt(s) s\'ha(n) esborrat.
Esteu eliminant %1$d punt(s). Ho confirmeu?
Canvis de direcció a la ruta
- Punts destacables en aquesta ruta
+ Fites, punts d\'interès, elements famosos
Afegeix a una carpeta nova
Pista
Berber
@@ -2587,9 +2588,9 @@ Abasta l\'àrea: %1$s x %2$s
Escolliu el perfil de navegació
Afegeix punts de la ruta
Afegeix una línia
- Afegeix i enregistra traces
+ Afegiu i enregistreu traces
Enregistra o importa traces per veure.
- Afegeix als preferits
+ Afegiu als preferits
Afegiu preferits al mapa o importeu-los.
Importa traça
El fitxer %1$s no conté fites, voleu importar-lo com una traça?
@@ -2723,8 +2724,16 @@ Abasta l\'àrea: %1$s x %2$s
Per data
Per tipus
Modifica la consulta de cerca.
- \\022
-\n
+ \\022 Nou menú Viatge: consulta articles de Viquiviatges sense internet
+\n
+\n• Viquipèdia: nova imatge, enllaços actius, imatges
+\n
+\n• IU de rutes Open Track: mostra grups de fites
+\n
+\n• Marcadors de mapa: importa determinats grups dels fitxers GPX, nou aspecte de l\'introducció de coordenades
+\n
+\n• La subscripció OsmAnd Live ara inclou totes les característiques d\'OsmAnd
+\n
\n
S\'activa amb un toc
El que hi ha aquí:
@@ -2811,7 +2820,7 @@ Abasta l\'àrea: %1$s x %2$s
S
N
"Nom opcional del punt "
- Rutes properes a
+ Rutes prou properes
A prop
Introduïu el nom del fitxer.
Error d\'importació del mapa
@@ -2843,7 +2852,7 @@ Abasta l\'àrea: %1$s x %2$s
Memòria cau d\'imatges
Esborra l\'historial de cerca
Mostra les imatges
- Mapes de viatge
+ Guies de viatge
Article esborrat
Seleccioneu un pla
Compreu un dels elements següents per llegir articles de viatge sense connexió:
@@ -2908,4 +2917,10 @@ Abasta l\'àrea: %1$s x %2$s
Buscant el corresponent article a la wiki
Adreça d\'interès
Dissenyat per un ús alternatiu en conducció. Pensat per posar imatges de satèl·lit com un mapa de fons. Principals característiques: gruix reduit de les carreteres principals, augment del gruix de pistes, camins, vies ciclistes i altres vies. Basat en l\'estil Topo.
+ Estil contrastat dissenyat principalment per senderisme, excursionisme i ciclisme de natura. Força llegible amb il·luminació ambient extrema. Principals característiques: Contrast de vies i objectes naturals, diferents tipus de rutes, corbes de nivell amb configuració avançada, més detallat que l\'estil normal i ajustat al nivell de zoom. L\'opció d\'integritat de superfície permet distingir el tipus de superfície de la via. No hi ha mode nocturn.
+ Estil de renderitzat per defecte de l\'antic \'Mapnik\'. Principals característiques: colors semblants als de l\'estil \'Mapnik\'.
+ Estil molt detallat per fer turisme. Inclou totes les opcions de configuració de l\'estil per defecte, afegint: Pantalles amb el màxim detall, en particular totes les carreteres, camins, i altres maneres de viatjar. Distinció visual clara entre tots els tipus diferents de via, semblant al de molts atles de viatge. Paleta de colors d\'alt contrast per utilitzar a l\'exterior, mode diürn i nocturn.
+ Estil de propòsit general. Renderitzat simplificat i més clar dins les ciutats densament poblades. Principals característiques: Corbes de nivell, vies, tipus de superfície, restriccions d\'accés, codis de les carreteres, camins representats segons l\'escala de SAC, característiques per esports aquàtics.
+ Temps de pas
+ Temps de pas
diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml
index 2df9a1e888..0881824788 100644
--- a/OsmAnd/res/values-el/strings.xml
+++ b/OsmAnd/res/values-el/strings.xml
@@ -1839,7 +1839,7 @@
Κρατήστε σημειώσεις!
Προσθήκη ήχου, βίντεο ή σημείωση φωτογραφίας για κάθε σημείο στο χάρτη, χρησιμοποιώντας το widget ή το συναφές μενού.
Σημειώσεις κατά ημερομηνία
- Ταξιδιωτικοί χάρτες
+ Ταξιδιωτικοί οδηγοί
Το άρθρο αφαιρέθηκε
Αναζήτηση: Χώρα, πόλη, επαρχία
Ανάγνωση
@@ -2129,7 +2129,7 @@
Διαγράφηκαν σημεία.
Πρόκειται να διαγράψετε %1$d σημεία. Είσαστε σίγουρος;
Στροφές για προσπέραση σε αυτό το δρομολόγιο
- Σημαντικά σημεία σε αυτό το δρομολόγιο
+ Σημεία διαδρομής, σημεία ενδιαφέροντος, επώνυμα χαρακτηριστικά
Ίχνος
Μέγιστη ταχύτητα
Μέση ταχύτητα
@@ -3152,4 +3152,6 @@
Σελιδοδείκτης
Κατάλληλο για χρήση κατά την οδήγηση εκτός δρόμου. Κατάλληλο για χρήση με πράσινες εικόνες δορυφόρου ως χάρτης υποστρώματος. Βασικά σημεία: μειωμένο πάχος κύριου δρόμου, αυξημένο πάχος ιχνών, διαδρομών, ποδηλάτων και άλλων διαδρομών. Βασισμένο σε μορφή \'τοπογραφική\'.
Μορφή υψηλών λεπτομερειών για τουριστικούς σκοπούς. Περιλαμβάνει όλες τις επιλογές διαμόρφωσης της προεπιλεγμένης μορφής και επιπλέον: Εμφανίζει τη μεγαλύτερη δυνατή λεπτομέρεια, ιδιαίτερα σε δρόμους, διαδρομές και άλλους τρόπους ταξιδιού. Καθαρή οπτική διάκριση μεταξύ όλων των διαφορετικών τύπων δρόμου, που θυμίζει πολλούς τουριστικούς άτλαντες. Χρωματικός συνδυασμός υψηλής αντίθεσης για εξωτερική χρήση, κατάσταση μέρας και νύχτας.
+ Ενδιάμεσος χρόνος άφιξης
+ Ενδιάμεσος χρόνος
diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml
index 0768508156..92e569ff0a 100644
--- a/OsmAnd/res/values-eo/phrases.xml
+++ b/OsmAnd/res/values-eo/phrases.xml
@@ -3861,4 +3861,8 @@
stampilo
kodo
memorkajero
-
+ demandaro
+ elektronika ilo
+ Ekskurso
+
+
diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml
index 93deb22290..d3ef1036c0 100644
--- a/OsmAnd/res/values-fa/strings.xml
+++ b/OsmAnd/res/values-fa/strings.xml
@@ -3257,4 +3257,6 @@
نشانک
مناسب رانندگی برونجادهای (آفرود). بهتر است با زیرلایهٔ سبزرنگ از تصاویر ماهوارهای استفاده شود.
\nویژگیهای اصلی: ضخامت کمتر برای راههای اصلی. ضخامت بیشتر برای trackها، pathها، مسیرهای دوچرخه و سایر مسیرها. بر پایهٔ سبک Topo است.
+ زمان متوسط رسیدن
+ زمان متوسط
diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml
index 1d4335f7ba..958064829b 100644
--- a/OsmAnd/res/values-he/strings.xml
+++ b/OsmAnd/res/values-he/strings.xml
@@ -3153,4 +3153,6 @@
סימנייה
מתאים לנהיגת שטח. מתאים לשימוש עם תמונות לוויין ירוקות כמפה בשכבה שמתחת. נקודות מפתח: דרכים ראשיות צרות יותר, המסלולים, דרכי הגישה, מסלולי האופניים ודרכים נוספות עבים יותר.
סגנון פירוט מדויק לטובת תיירות. כולל את כל אפשרויות התצוגה של בררת המחדל, בנוסף: מציג כמה שיותר פרטים ככל הניתן, במיוחד את כל הדרכים, השבילים ודרכי טיול נוספות. הבחנה חזותית ברורה בין כל סוגי הדרכים השונים, העלאת זכרונות בתצורת אטלסים לתיירות. ערכת צבעים בניגודיות גבוהה לשימוש בחוץ לצד מצבי יום ולילה.
+ זמן הגעה לנקודת ביניים
+ זמן ביניים
diff --git a/OsmAnd/res/values-hy/strings.xml b/OsmAnd/res/values-hy/strings.xml
index 0afab3632a..b8fa420f17 100644
--- a/OsmAnd/res/values-hy/strings.xml
+++ b/OsmAnd/res/values-hy/strings.xml
@@ -251,7 +251,7 @@
Առցանց լուսանկարներ
Ավելացնել լուսանկարներ
Այս վայրի համար լուսանկարներ չունենք։
- Նպաստել այս դիրքի համար ձեր սեփական փողոցային դիտարկումներով Mapillary- ի միջոցով:
+ Նպաստել այս դիրքի համար ձեր սեփական փողոցային դիտարկումներով Mapillary-ի միջոցով:
Mapillary վիջեթը
Թույլ է տալիս արագորեն նպաստել Mapillary-ին։
Առցանց փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը:
@@ -332,7 +332,7 @@
Ավելացնել նոր թղթապանակ
Կետ(եր)ը ջնջված է:
Դուք մտադիր եք ջնջել կետ(եր)ը: Համոզված եք?
- Հայտնի կետեր այս երթուղու վրա
+ Ճանապարհային կետեր, POI, հատկանիշներ
Տրեկ
Առավելագույն արագություն
Միջին արագությունը
@@ -427,7 +427,7 @@
Ազատ տեղ
OsmAnd-ը կպահպանի տվյալները (քարտեզներ, երթուղիներ և այլն) %1$s։
Տալ թույլտվություն
- "Միացնել Իմ Դիրքի անիմացումը քարտեզի համայնապատկերում նավիգացիայի ժամանակ։"
+ "Միացնել \"Իմ Դիրքի\" անիմացումը քարտեզի համայնապատկերում նավիգացիայի ժամանակ։"
Ծովային խորության կետերը հարավային կիսագնդում
Ծովային խորության կետերը հյուսիսային կիսագնդում
OsmAnd հավաքում է միայն այն տեղեկատվությունները, որոնք վերաբերվում են հավելվածին օգտագործման։ Ձեր գտնվելու վայրը երբեք չի ուղարկվի, ոչ էլ այն, ինչ դուք մուտք եք գործել հավեվածում կամ ձեր դիտած, որոնման և ներբեռնելու տարածքների մանրամասները:
@@ -488,7 +488,7 @@
Նպատակակետը սահմանված չէ
Մագնիսական կրող
Երթուղին դադարեցնելուց հետո երթուղու վերահաշվարկ չի կատարվում
- Կանխել երթուղու ավտոմատ վերահաշվարկը երթուղին դադարեցնելուց հետո։
+ Կանխել երթուղու վերահաշվարկը երթուղուց շեղվելու դեպքում։
Չվերահաշվարկել երթուղին հակառակ ուղղության համար
Կանխել երթուղու ավտոմատ վերահաշվարկը հակառակ ողղությամբ շարժվելու ժամանակ։
Smart ավտո-հայտարարում
@@ -504,7 +504,7 @@
Մուտքագրեք անուն
Մուտքագրեք կատեգորիան
Մուտքագրեք նկարագրություն:
- Քարտեզը կապված է գտնվելու վայրի հետ
+ "Քարտեզ կցված է գտնվելու վայրին"
Փակել ցանկը
Ընդլայնված ցուցակ
Դատարկ ցուցակ
@@ -522,10 +522,10 @@
Խնդրում ենք ավելացնել մարկերներ քարտեզի վրա
Ոչ մի ճանապարհային նշան չի գտնվել
- Անանուն օգտվողը չի կարող՝
-\n-ստեղծել խմբեր;
-\n-խմբերի և սարքերի համաժամեցում սերվերի հետ;
-\n-կառավարել խմբերը և սարքերը անձնական էջում:
+ Անանուն օգտվողը չի կարող՝
+\n-Ստեղծել խմբեր;
+\n-Խմբերի և սարքերի համաժամեցում սերվերի հետ;
+\n-Կառավարել խմբերը և սարքերը անձնական էջում:
Հաշվետվությունում
@@ -538,9 +538,9 @@
- "Այժմ ծրագիրը իրավունք ունի մուտթագրել տվյալներ արտաքին պահեստավորման սարքի վրա։ Պահանջվում է վերագործարկել ծրագիրը."
- Տեղափոխել վերև
- Տեղափոխել ներքև
+ "Այժմ ծրագիրը իրավունք ունի մուտթագրել տվյալներ արտաքին պահեստավորման սարքի վրա։ Պահանջվում է վերագործարկել ծրագիրը։"
+ Տեղափոխել ↑
+ Տեղափոխել ↓
"Ավարտել նավարկությունը"
Խուսափել ճանապարհներից
Տվյալների պահպանման համար ընտրված թղթապանակը միայն կարդալու է: Փոխարենը ժամանակավորապես կկիրառվի ներքին հիշողությունը: Խնդրում ենք ընտրել համապատասխան պահպանման վայր:
diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml
index 05847a224c..3814ca0ea5 100644
--- a/OsmAnd/res/values-nb/strings.xml
+++ b/OsmAnd/res/values-nb/strings.xml
@@ -3124,4 +3124,6 @@
Bokmerk
Nytt for bruk under villmarkskjøring. Nyttig for bruk med grønne satellittbilder som underlagskart. Nøkkelpunkter: Redusert tykkelse for hovedveier, økt tykkelse for småveier, stier, sykkel- og andre -ruter.
\nBasert på Topo-stil.
+ Mellomliggende ankomsttid
+ Mellomliggende tid
diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml
index cb335e279f..090f8f3e00 100644
--- a/OsmAnd/res/values-pl/strings.xml
+++ b/OsmAnd/res/values-pl/strings.xml
@@ -2442,7 +2442,7 @@ Długość %2$s
\n
\n i więcej…
Aktywuj szybkie rejestrowanie
- Wyświetl powiadomienie systemowe z opcją rozpoczęcia rejestrowania śladu.
+ Wyświetl powiadomienie systemowe z opcję rozpoczęcia rejestrowania śladu.
Powiadomienia
@@ -2720,7 +2720,7 @@ Reprezentuje obszar: %1$s x %2$s
Pozwala na szybkie udostępnianie do Mapillary.
Udostępnia zdjęcia w widoku ulicznym. Pozwala na odkrywanie miejsc, współpracę nad uchwyceniem świata.
Zdjęcia w sieci
- Nie ma zdjęć tego położenia.
+ Nie ma zdjęć dla tego położenia.
Udostępnia zdjęcia w widoku ulicznym. Pozwala na odkrywanie miejsc, współpracę nad uchwyceniem świata.
Zainstaluj
Zwiększ pokrycie zdjęć Mapillary
@@ -2742,7 +2742,7 @@ Reprezentuje obszar: %1$s x %2$s
Wyświetl tylko dodane obrazy
Proszę wprowadzić nazwę użytkownika
Można filtrować obrazy według nazwy użytkownika lub daty. Filtry mają zastosowanie dla większych przybliżeń.
- "Wyświetla obrazy dodane przez "
+ Wyświetl obrazy dodane tylko przez
Ślady w miesięcznych katalogach
Przechowuje zarejestrowane ślady w podkatalogach odpowiadającym miesiącom (np. 2018-01).
Wyczyść
@@ -2829,7 +2829,7 @@ Reprezentuje obszar: %1$s x %2$s
Znacznik mapy przeniesiono do aktywnych
Lista
Grupy
- Ostatnio użyty: %1$s
+ Ostatnio użyte: %1$s
Uaktywnij
Dzisiaj
Wczoraj
@@ -2844,14 +2844,14 @@ Reprezentuje obszar: %1$s x %2$s
Porządkowanie według:
Pokaż linie przewodnie
Strzałki na mapie
- Wyświetl datę
- Ukryj datę
+ Wyświetl ominięte
+ Ukryj ominięte
Wprowadź współrzędne
Znaczniki
Format współrzędnych
Proszę wybrać format współrzędnych. Zawsze można go zmienić za naciskając \"Opcje\".
Omijanie lodowych dróg i brodów
- Omija lodowe drogi i brody.
+ Omijaj drogi lodowe i brody.
Użyj położenia
Aktualne położenie
Koniec trasy
@@ -3075,9 +3075,9 @@ Reprezentuje obszar: %1$s x %2$s
Popularne cele podróży
Aplikacja płatna
Wtyczka płatna
- Dostępne są nowe dane Wikipodróży, zaktualizuj je, aby cieszyć się nimi.
+ Dostępne są nowe dane Wikipodróży. Proszę je uaktualnić, aby z nich korzystać.
Pobierz te przewodniki podróży Wikipodróże, aby wyświetlić artykuły o miejscach na całym świecie bez połączenia z Internetem.
- Aktualizacja jest dostępna
+ Dostępne uaktualnienie
Pobierz plik
Bezpłatny przewodnik po świecie, który każdy może edytować.
Podróże oparte są na Wikivoyage. Podczas otwartych beta-testów masz możliwość oceny wszystkich funkcji za darmo. Po zakończeniu okresu beta, Podróże będą dostępne dla subskrybentów OsmAnd Unlimited oraz posiadaczy OsmAnd+
@@ -3138,7 +3138,13 @@ Reprezentuje obszar: %1$s x %2$s
Anulowano subskrypcję OsmAnd Live
Proszę przedłużyć subskrypcję, aby kontynuować korzystanie z wszystkich funkcji:
- Na podstawie zapisanych artykułów, zalecamy pobranie poniższych map:
- Mapy, które potrzebujesz
+ Zalecamy pobranie poniższych map, na podstawie zapisanych artykułów:
+ Potrzebne mapy
Zespół OsmAnd
+ Pobierz wszystkie
+ Zakładka
+ Ukryj pełny opis
+ Wyświetl pełny opis
+ Odnośnik zostanie otwarty w przeglądarce internetowej.
+ Jak otwierać odnośniki?
diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml
index e4e6732f18..58632ce775 100644
--- a/OsmAnd/res/values-pt-rBR/strings.xml
+++ b/OsmAnd/res/values-pt-rBR/strings.xml
@@ -784,7 +784,7 @@ Pôr do Sol: %2$s
Camada de gravação
Gravação não pode ser reproduzida
Apagar gravação
- Ouvir
+ Tocar
Gravando %1$s %3$s %2$s
Gravando
Notas de áudio/vídeo
diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml
index 8d82b18646..3e7ee14a2c 100644
--- a/OsmAnd/res/values-ru/phrases.xml
+++ b/OsmAnd/res/values-ru/phrases.xml
@@ -3809,4 +3809,8 @@
Электронный
Маршрут
+ Камень
+
+ Дата закрытия
+
diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml
index 56f237a82b..9c2afcb0ec 100644
--- a/OsmAnd/res/values-sv/strings.xml
+++ b/OsmAnd/res/values-sv/strings.xml
@@ -2909,7 +2909,7 @@ Vänligen tillhandahåll fullständig kod
Forsränning
OsmAnd är open-source och är utvecklas aktivt. Alla kan bidra till programmet genom att rapportera buggar, förbättra översättningar eller programmera nya funktioner. Projektet är i ett dynamiskt tillstånd av kontinuerlig förbättring av alla dessa former genom utvecklare och interaktion med användare. Projektet är också beroende av ekonomiska bidrag för att finansiera kodning och testning av nya funktioner. Ungefärlig karttäckning och kvalitet: • Västeuropa: **** • Östeuropa: *** • Ryssland: *** • Nordamerika: *** • Sydamerika: ** • Asien: ** • Japan & Korea: *** • Mellanöstern: ** • Afrika: ** • Antarktis: * De flesta länder runt om i världen finns tillgängliga för nedladdning! Få en tillförlitlig navigator i ditt land - det kan vara Tyskland, Frankrike, Mexiko, Storbritannien, Spanien, Nederländerna, USA, Ryssland, Brasilien eller något annat.
OsmAnd+ (OSM Automated Navigation Directions) OsmAnd+ är ett open source-navigationsprogram med tillgång till ett brett utbud av global OpenStreetMap(OSM)-data. Alla kartdata (vektor- eller rasterkartor) kan sparas på telefonens minneskort för användning offline. OsmAnd erbjuder även offline och online-ruttunktioner, inklusive turn-by-turn röstguidning. OsmAnd+ är den betalda appversionen, genom att köpa det stödjer du projektet, finansierar utveckling av nya funktioner, och får de senaste uppdateringarna. Några av de centrala funktionerna: - Komplett offline-funktionalitet (spara vektor- eller rasterkartor i enhetens lagring) - Kompakta offline vektorkartor för hela världen finns tillgängliga - Obegränsad nedladdning av land- eller regionkartor direkt från appen - Offline Wikipedia-artiklar (ladda ner Wikipedia POI), utmärkt för sightseeing - Överlagring av flera kartskikt är möjligt, som GPX eller navigeringsspår, Punkter av Intresse, favoriter, höjdkurvor, hållplatser för kollektivtrafiken, fler kartor med anpassningsbar genomskinlighet- Offlinesökning efter adresser och intressepunkter (POI) - Offline routing för mediumdistansavstånd - Bil-, cykel- och fotgängarelägen med: - tillval automatiskt byte av dag/nattläge - valfri hastighetsbunden kartzoom - valfri kartjustering enligt kompass eller riktning - som tillval körfältsguide, hastighetsgräns visas, inspelade- och TTS-röster
- Vi kunde inte hitta något i radien:
+ Kunde inte hitta något inom:
Du kan lägga till alla spårens vägpunkter, eller välj separata kategorier.
Totalt
OsmAnd+ (OSM Automated Navigation Directions) är en kartnavigationsapp med tillgång till gratis världsomfattande och högkvalitativa OpenStreetMap(OSM)-data. Njut av röst- och visuell navigation, visning av POI(points of interest - intressepunkter), att skapa och hantera GPX-spår, se höjdkurvor och höjdinfo, välja mellan bil-cykel- och fotgängarlägen, OSM-redigering och mycket mer. OsmAnd+ är en betald version av appen. Genom att köpa den, stödjer du projektet, finansierar utveckling av nya funktioner, och får de senaste uppdateringarna. Några av de viktigaste funktionerna:
@@ -2935,13 +2935,163 @@ Vänligen tillhandahåll fullständig kod
Knackning på åtgärdsknappen visar eller döljer Intressepunkter på kartan.
Lämna tomt för att automatiskt använda adressen eller platsens namn.
Tunnlar
-Sök: Land, Stad, Region
+Sök: Land, stad, region
Läs
- Sparade artiklar
+ Bokmärkta artiklar
Utforska
Resultat
- Använd två siffror longitud
+ Använd tvåsiffrig longitud
Resor
Waypoints tas bort från kartmarkörer
Donationer totalt
-
+ Bokmärke
+ Dölj fullständig beskrivning
+ Visa fullständig beskrivning
+ Lämplig för användning vid off-road körning. Lämplig för användning med gröna satellitbilder som ett underlagskarta. Viktiga egenskaper: minskad tjocklek på stora vägar, ökad tjocklek av spår, stigar, cykelvägar och andra stigar. Baserat på \'Topo\' stil.
+ Nautisk navigeringsstil. Viktiga funktioner: bojar, fyrar, vattendrag, farleder och märken, hamnar, sjömärken, djupkonturer.
+ Skidåkningsstil. Viktiga funktioner: Renderar pister, skidliftar och andra skidanläggningar på ett bekvämt sätt. Mindre distraherande sekundära kartobjekt.
+ Enkel och kontrastrik stil för navigering med bil. Skonsam mot ögonen under natten. Viktiga funktioner: höjdkurvor, kontrastrik orange stil på vägar, mindre störande sekundära kartobjekt.
+ Kontraststil utformad främst för vandring, trekking och cykling i naturen. Bra läsbarhet vid komplex extern belysning. Viktiga funktioner: kontrastrika vägar och naturliga objekt, olika typer av rutter, höjdkurvor med avancerade inställningar för mer detaljer på motsvarande zoomnivåer än standard. Ytläge-alternativet kan skilja vägens ytkvalitet. Inget nattläge.
+ Gamla \"Mapnik\'-stil standardrendering. Viktiga funktioner: Färger som liknar \"Mapnik\" stil.
+ Högsdetaljsstil för touringändamål. Innehåller alla inställningar av standardstilen, men även: Visar så mycket information som möjligt, i synnerhet alla vägar, stigar och andra sätt att resa. Tydliga visuella skillnader mellan olika vägtyper, påminnande av många atlaser. Högkontrastfärger för användning utomhus, dag- och nattläge.
+ Stil för allmänna ändamål. Förenklad återgivning i tätbefolkade städer. Viktiga funktioner: höjdkurvor, rutter, ytkvalitet, tillträdeskontroll, farthinder, stigrendering enligt SAC-skala, vattensporter.
+ Öppna Wikipedia-länk på nätet
+ Länken kommer att öppnas i en webbläsare.
+ Skaffa OsmAnd Live-prenumeration för att läsa Wikipedia och Wikipedia-artiklar offline.
+ Hur man öppnar länken?
+ Läs Wikipedia offline
+ Ladda ner alla
+ Starta om
+ Visa bilder
+ Du har annullerat ditt OsmAnd Live-abonnemang
+ Förnya abonnemanget för att fortsätta använda alla funktioner:
+
+ Baserat på de artiklar som du bokmärkt, följande kartor rekommenderas för dig att ladda ner:
+ Kartor du behöver
+ OsmAnd team
+ Populära destinationer
+ Betald app
+ Betald plugin
+ Nya Wikivoyage-data tillgängliga, uppdatera för att njuta.
+ Ladda ner dessa Wikivoyage-reseguider för att visa artiklar om platser runt om i världen utan en internetanslutning.
+ Uppdatering tillgänglig
+ Ladda ned fil
+ Den fria, världsomspännande reseguiden som alla kan redigera.
+ Resor är baserade på Wikivoyage. Testa alla funktioner under öppnen beta-testning gratis. Efteråt kommer resor att vara tillgängliga för prenumeranter av OsmAnd Obegränsad och ägare av OsmAnd+
+ Du kan och borde redigera en artikel på Wikivoyage. Dela med sig av kunskap, erfarenhet, talang och din kännedom
+ Börja redigera
+ Få obegränsad tillgång
+ Välkommen till öppen beta
+ Reseguiden Wikivoyage
+ Guider till de mest intressanta platserna i världen, inuti OsmAnd, utan en internetanslutning.
+ Kartuppdateringar: Varje månad
+ Kartuppdateringar: Varje timme
+ Köp i app
+ Engångsbetalning
+ När det väl är köpt, blir det permanent tillgängligt för dig.
+ Köp - %1$s
+ Prenumerera - %1$s
+
+ Wikivoyage offline
+
+ Obegränsat antal nedladdningar
+ Wikipedia offline
+ Höjdkurvor & höjdreliefer
+ Låsa upp alla OsmAnd-funktioner
+
+ Välj abonnemang
+ Köp något av följande för att läsa researtiklar offline:
+ Välj lämpligt val:
+ Gör inte
+ Gör
+ Endast på Wi-Fi
+ Hämta bilder
+ Bilder från artiklar kan laddas ner för användning offline.
+\nDu kan alltid ändra inställningen i \"Utforska\" → \"Alternativ\".
+ Endast på Wi-Fi
+ Välj resebok
+ Resebok
+ Sidan endast tillgänglig online. Öppna i webbläsare?
+ Bildcache
+ Ta bort sökhistorik
+ Visa bilder
+ Reseguider
+ Wikivoyage
+ Artikeln borttagen
+ Innehåll
+ Världsomspännande Wikivoyage-artiklar
+ Mellanliggande ankomsttid
+ Mellanliggande tid
+ Använda OSM-Data och Wikipedia
+\n• Högkvalitetsinformation från de bästa samarbetsprojekten i världen
+\n• OSM-data som är tillgängliga per land eller region
+\n• Wikipedia Intressepunkter, perfekt för sightseeing
+\n• Obegränsat antal gratis nedladdningar, direkt från appen
+\n• Kompakt offline vektorkartor uppdateras minst en gång i månaden
+\n
+\n• Val mellan hela regionen data och bara vägnätet (Exempel: Hela Japan är 700 MB eller endast vägnätet för 200 MB)
+ Säkerhetsfunktioner • Valfri växling mellan dag-/nattläge • Valfri visning av hastighet, med en påminnelse om du överskrider den • Valfri hastighetsbaserad zoomning • Dela din position så att dina vänner kan hitta dig
+ Funktioner för cykel och gående • Se vägar för gående och cyklande samt vandringsstigar, utmärkta för utomhusaktiviteter • Speciella ruttval och visningsläge för cykel och gående • Valfria kollektivtrafiksplatser (buss, spårvagn, tåg) inklusive linjenamn • Valfri reseinspelning till lokal GPX-fil eller onlinetjänst • Valfri visning av hastighet och höjd • Visa konturlinjer och höjdreliefer (via separat plugin)
+ Bidra direkt till OSM
+\n• Rapportera databuggar
+\n• Ladda upp GPX-spår till OSM direkt från appen
+\n• Lägg till Intressepunkter och ladda upp dem direkt till OSM (eller senare om offline)
+\n• Valfri reseinspelning i bakgrundsläge (när enheten är i strömsparläge)
+\nOsmAnd utvecklas aktivt med öppen källkod. Alla kan bidra till appen genom att rapportera buggar, förbättra översättningar eller koda nya funktioner. Dock är projektet beroende av ekonomiska bidrag för att finansiera kodning och testning av nya funktioner.
+\n
+ Ungefärlig karttäckning och kvalitet:
+\n• Västeuropa: ****
+\n• Östreuropa: ***
+\n• Ryssland: ***
+\n• Nordamerika: ***
+\n• Sydamerika: **
+\n• Asien: **
+\n• Japan & Korea: ***
+\n• Mellanöstern: **
+\n• Afrika: **
+\n• Antarktis: *
+\nDe flesta länder runt om i världen finns som nedladdningar
+\nFrån Afghanistan till Zimbabwe, från Australien till USA. Argentina, Brasilien, Kanada, Frankrike, Tyskland, Mexiko, Storbritannien, Spanien, ...
+\n
+ Detta meddelande ingår i kommentarsfältet.
+ Välj kategorin du vill spara favoriten i.
+ Välj en valfri kategori.
+ POI-lista
+ Lägga till en eller flera POI-kategorier som ska visas på kartan.
+ Lägg till en kartstil
+ Fyll i alla parametrar
+ Kartstilar
+ Ändra kartöversikt
+ Du måste vara ansluten till Internet för att visa foton från Mapillary.
+ Lägg till ruttpunkter
+ Lägg till vägpunkt
+ Lägg till rad
+ Spara GPX-Waypoint
+ Spara ruttpunkt
+ Vägpunkt 1
+ Ruttpunkt 1
+ Lägg till och spela in spår
+ Spela in eller importera spår för att visa.
+ Lägg Till Favoriter
+ Importera eller markera favoriter på kartan.
+ Importera spår
+ Filen %1$s innehåller inte vägpunkter, importera det som ett spår?
+ Flytta punkt
+ Lägg till i ett GPX-spår
+ OSM-mottagare
+ av
+ Vinter och skidor
+ Touringvy
+ Nautisk
+ Kopia punkt/POI namn
+ Ej namngiven plats
+ Tunnel framför
+ Hämta Wikipedia-artiklar om %1$s för att läsa dem offline.
+ Hämta Wikipedia-data
+ Öppna artikeln online
+ Visa artikeln i en webbläsare.
+ denna region
+ Söka efter motsvarande wiki-artikel
+ Artikeln hittades inte
+ Hur man öppnar Wikipedia-artiklar?
+
diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml
index 642e8edbaf..5fa74d0755 100644
--- a/OsmAnd/res/values/phrases.xml
+++ b/OsmAnd/res/values/phrases.xml
@@ -3832,4 +3832,8 @@
Electronic
Course
+ Rock
+
+ End date
+
diff --git a/OsmAnd/src/net/osmand/plus/activities/EditFavoriteGroupDialogFragment.java b/OsmAnd/src/net/osmand/plus/activities/EditFavoriteGroupDialogFragment.java
index ef40e119ad..3d463dafab 100644
--- a/OsmAnd/src/net/osmand/plus/activities/EditFavoriteGroupDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/activities/EditFavoriteGroupDialogFragment.java
@@ -1,5 +1,6 @@
package net.osmand.plus.activities;
+import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -13,10 +14,13 @@ import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
+import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.TextView;
import net.osmand.AndroidUtils;
@@ -66,26 +70,35 @@ public class EditFavoriteGroupDialogFragment extends MenuBottomSheetDialogFragme
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- AlertDialog.Builder b = new AlertDialog.Builder(getContext());
- b.setTitle(R.string.favorite_group_name);
- final EditText nameEditText = new EditText(getContext());
- nameEditText.setText(group.name);
- b.setView(nameEditText);
- b.setNegativeButton(R.string.shared_string_cancel, null);
- b.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- String name = nameEditText.getText().toString();
- boolean nameChanged = !Algorithms.objectEquals(group.name, name);
- if (nameChanged) {
- app.getFavorites()
- .editFavouriteGroup(group, name, group.color, group.visible);
- updateParentFragment();
+ Activity activity = getActivity();
+ if (activity != null) {
+ AlertDialog.Builder b = new AlertDialog.Builder(activity);
+ b.setTitle(R.string.favorite_group_name);
+ final EditText nameEditText = new EditText(activity);
+ nameEditText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+ nameEditText.setText(group.name);
+ LinearLayout container = new LinearLayout(activity);
+ int sidePadding = AndroidUtils.dpToPx(activity, 24f);
+ int topPadding = AndroidUtils.dpToPx(activity, 4f);
+ container.setPadding(sidePadding, topPadding, sidePadding, topPadding);
+ container.addView(nameEditText);
+ b.setView(container);
+ b.setNegativeButton(R.string.shared_string_cancel, null);
+ b.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String name = nameEditText.getText().toString();
+ boolean nameChanged = !Algorithms.objectEquals(group.name, name);
+ if (nameChanged) {
+ app.getFavorites()
+ .editFavouriteGroup(group, name, group.color, group.visible);
+ updateParentFragment();
+ }
+ dismiss();
}
- dismiss();
- }
- });
- b.show();
+ });
+ b.show();
+ }
}
})
.create();
@@ -102,35 +115,38 @@ public class EditFavoriteGroupDialogFragment extends MenuBottomSheetDialogFragme
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- final ListPopupWindow popup = new ListPopupWindow(getActivity());
- popup.setAnchorView(changeColorView);
- popup.setContentWidth(AndroidUtils.dpToPx(app, 200f));
- popup.setModal(true);
- popup.setDropDownGravity(Gravity.END | Gravity.TOP);
- if (AndroidUiHelper.isOrientationPortrait(getActivity())) {
- popup.setVerticalOffset(AndroidUtils.dpToPx(app, 48f));
- } else {
- popup.setVerticalOffset(AndroidUtils.dpToPx(app, -48f));
- }
- popup.setHorizontalOffset(AndroidUtils.dpToPx(app, -6f));
- final FavoriteColorAdapter colorAdapter = new FavoriteColorAdapter(getActivity());
- popup.setAdapter(colorAdapter);
- popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- Integer color = colorAdapter.getItem(position);
- if (color != null) {
- if (color != group.color) {
- app.getFavorites()
- .editFavouriteGroup(group, group.name, color, group.visible);
- updateParentFragment();
- }
- }
- popup.dismiss();
- dismiss();
+ Activity activity = getActivity();
+ if (activity != null) {
+ final ListPopupWindow popup = new ListPopupWindow(activity);
+ popup.setAnchorView(v);
+ popup.setContentWidth(AndroidUtils.dpToPx(app, 200f));
+ popup.setModal(true);
+ popup.setDropDownGravity(Gravity.END | Gravity.TOP);
+ if (AndroidUiHelper.isOrientationPortrait(activity)) {
+ popup.setVerticalOffset(AndroidUtils.dpToPx(app, 48f));
+ } else {
+ popup.setVerticalOffset(AndroidUtils.dpToPx(app, -48f));
}
- });
- popup.show();
+ popup.setHorizontalOffset(AndroidUtils.dpToPx(app, -6f));
+ final FavoriteColorAdapter colorAdapter = new FavoriteColorAdapter(activity);
+ popup.setAdapter(colorAdapter);
+ popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ Integer color = colorAdapter.getItem(position);
+ if (color != null) {
+ if (color != group.color) {
+ app.getFavorites()
+ .editFavouriteGroup(group, group.name, color, group.visible);
+ updateParentFragment();
+ }
+ }
+ popup.dismiss();
+ dismiss();
+ }
+ });
+ popup.show();
+ }
}
})
.create();
@@ -244,7 +260,7 @@ public class EditFavoriteGroupDialogFragment extends MenuBottomSheetDialogFragme
private final OsmandApplication app;
- FavoriteColorAdapter(Context context) {
+ public FavoriteColorAdapter(Context context) {
super(context, R.layout.rendering_prop_menu_item);
this.app = (OsmandApplication) getContext().getApplicationContext();
init();
diff --git a/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java b/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java
index f775fb0ac0..8a10653d99 100644
--- a/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java
@@ -258,7 +258,8 @@ public class TrackActivity extends TabActivity {
viewPager = (LockableViewPager) findViewById(R.id.pager);
viewPager.setSwipeLocked(true);
setViewPagerAdapter(viewPager, new ArrayList());
- new GPXFileLoaderTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
+
+ loadGpx();
}
@Override
@@ -269,6 +270,10 @@ public class TrackActivity extends TabActivity {
}
}
+ public void loadGpx() {
+ new GPXFileLoaderTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
+ }
+
public OsmandApplication getMyApplication() {
return (OsmandApplication) getApplication();
}
@@ -276,6 +281,9 @@ public class TrackActivity extends TabActivity {
@Override
protected void onPause() {
super.onPause();
+ if (viewPager.getCurrentItem() == 1) {
+ openPointsTab = true;
+ }
}
@Override
@@ -387,7 +395,7 @@ public class TrackActivity extends TabActivity {
}
}
OsmandFragmentPagerAdapter pagerAdapter = (OsmandFragmentPagerAdapter) viewPager.getAdapter();
- if (pagerAdapter != null) {
+ if (pagerAdapter != null && pagerAdapter.getCount() == 0) {
pagerAdapter.addTab(getTabIndicator(R.string.gpx_track, TrackSegmentFragment.class));
if (hasWayPoints() || hasRoutePoints()) {
pagerAdapter.addTab(getTabIndicator(R.string.points, TrackPointFragment.class));
diff --git a/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java
index 314725cdab..782c8f94b7 100644
--- a/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java
+++ b/OsmAnd/src/net/osmand/plus/helpers/AndroidUiHelper.java
@@ -4,6 +4,7 @@ import net.osmand.PlatformUtil;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
+import android.support.annotation.NonNull;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Surface;
@@ -14,7 +15,7 @@ import android.view.View;
*/
public class AndroidUiHelper {
- public static int getScreenOrientation(Activity activity) {
+ public static int getScreenOrientation(@NonNull Activity activity) {
int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
@@ -90,12 +91,12 @@ public class AndroidUiHelper {
return false;
}
- public static boolean isXLargeDevice(Activity ctx) {
+ public static boolean isXLargeDevice(@NonNull Activity ctx) {
int lt = (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK);
return lt == Configuration.SCREENLAYOUT_SIZE_XLARGE;
}
- public static boolean isOrientationPortrait(Activity ctx) {
+ public static boolean isOrientationPortrait(@NonNull Activity ctx) {
int orientation = AndroidUiHelper.getScreenOrientation(ctx);
return orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ||
orientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java
new file mode 100644
index 0000000000..ebbf0f4646
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java
@@ -0,0 +1,309 @@
+package net.osmand.plus.myplaces;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.ListPopupWindow;
+import android.text.TextUtils;
+import android.view.ContextThemeWrapper;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.AdapterView;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import net.osmand.AndroidUtils;
+import net.osmand.plus.GPXUtilities;
+import net.osmand.plus.GPXUtilities.GPXFile;
+import net.osmand.plus.GPXUtilities.WptPt;
+import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
+import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
+import net.osmand.plus.MapMarkersHelper;
+import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.R;
+import net.osmand.plus.activities.EditFavoriteGroupDialogFragment.FavoriteColorAdapter;
+import net.osmand.plus.activities.SavingTrackHelper;
+import net.osmand.plus.activities.TrackActivity;
+import net.osmand.plus.base.MenuBottomSheetDialogFragment;
+import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
+import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
+import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
+import net.osmand.plus.helpers.AndroidUiHelper;
+import net.osmand.util.Algorithms;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+import java.util.List;
+
+public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment {
+ public static final String TAG = EditTrackGroupDialogFragment.class.getSimpleName();
+
+ private GpxDisplayGroup group;
+
+ @Override
+ public void createMenuItems(Bundle savedInstanceState) {
+ final OsmandApplication app = getMyApplication();
+ if (group == null) {
+ return;
+ }
+ items.add(new TitleItem(getCategoryName(app, group.getName())));
+
+ BaseBottomSheetItem editNameItem = new SimpleBottomSheetItem.Builder()
+ .setIcon(getContentIcon(R.drawable.ic_action_edit_dark))
+ .setTitle(getString(R.string.edit_name))
+ .setLayoutId(R.layout.bottom_sheet_item_simple)
+ .setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Activity activity = getActivity();
+ if (activity != null) {
+ AlertDialog.Builder b = new AlertDialog.Builder(activity);
+ b.setTitle(R.string.favorite_group_name);
+ final EditText nameEditText = new EditText(activity);
+ nameEditText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+ nameEditText.setText(group.getName());
+ LinearLayout container = new LinearLayout(activity);
+ int sidePadding = AndroidUtils.dpToPx(activity, 24f);
+ int topPadding = AndroidUtils.dpToPx(activity, 4f);
+ container.setPadding(sidePadding, topPadding, sidePadding, topPadding);
+ container.addView(nameEditText);
+ b.setView(container);
+ b.setNegativeButton(R.string.shared_string_cancel, null);
+ b.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String name = nameEditText.getText().toString();
+ boolean nameChanged = !Algorithms.objectEquals(group.getName(), name);
+ if (nameChanged) {
+ TrackActivity trackActivity = getTrackActivity();
+ if (trackActivity != null) {
+ new UpdateGpxCategoryTask(trackActivity, group, name)
+ .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ }
+ dismiss();
+ }
+ });
+ b.show();
+ }
+ }
+ })
+ .create();
+ items.add(editNameItem);
+
+ final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
+ final View changeColorView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
+ R.layout.change_fav_color, null);
+ ((ImageView) changeColorView.findViewById(R.id.change_color_icon))
+ .setImageDrawable(getContentIcon(R.drawable.ic_action_appearance));
+ updateColorView((ImageView) changeColorView.findViewById(R.id.colorImage));
+ BaseBottomSheetItem changeColorItem = new BaseBottomSheetItem.Builder()
+ .setCustomView(changeColorView)
+ .setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Activity activity = getActivity();
+ if (activity != null) {
+ final ListPopupWindow popup = new ListPopupWindow(activity);
+ popup.setAnchorView(v);
+ popup.setContentWidth(AndroidUtils.dpToPx(app, 200f));
+ popup.setModal(true);
+ popup.setDropDownGravity(Gravity.END | Gravity.TOP);
+ if (AndroidUiHelper.isOrientationPortrait(activity)) {
+ popup.setVerticalOffset(AndroidUtils.dpToPx(app, 48f));
+ } else {
+ popup.setVerticalOffset(AndroidUtils.dpToPx(app, -48f));
+ }
+ popup.setHorizontalOffset(AndroidUtils.dpToPx(app, -6f));
+
+ final FavoriteColorAdapter colorAdapter = new FavoriteColorAdapter(activity);
+ popup.setAdapter(colorAdapter);
+ popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ Integer color = colorAdapter.getItem(position);
+ if (color != null) {
+ if (color != group.getColor()) {
+ TrackActivity trackActivity = getTrackActivity();
+ if (trackActivity != null) {
+ new UpdateGpxCategoryTask(trackActivity, group, color)
+ .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ }
+ }
+ popup.dismiss();
+ dismiss();
+ }
+ });
+ popup.show();
+ }
+ }
+ })
+ .create();
+ items.add(changeColorItem);
+
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (group == null) {
+ dismiss();
+ }
+ }
+
+ @Nullable
+ private TrackActivity getTrackActivity() {
+ Activity activity = getActivity();
+ if (activity != null && activity instanceof TrackActivity) {
+ return (TrackActivity) activity;
+ }
+ return null;
+ }
+
+ private static String getCategoryName(@NonNull Context ctx, String category) {
+ return Algorithms.isEmpty(category) ? ctx.getString(R.string.waypoints) : category;
+ }
+
+ private void updateColorView(ImageView colorImageView) {
+ int color = (group.getColor() == 0 ? getResources().getColor(R.color.gpx_color_point) : group.getColor()) | 0xff000000;
+ if (color == 0) {
+ colorImageView.setImageDrawable(getContentIcon(R.drawable.ic_action_circle));
+ } else {
+ colorImageView.setImageDrawable(getMyApplication().getIconsCache().getPaintedIcon(R.drawable.ic_action_circle, color));
+ }
+ }
+
+ public static void showInstance(FragmentManager fragmentManager, GpxDisplayGroup group) {
+ EditTrackGroupDialogFragment f = (EditTrackGroupDialogFragment) fragmentManager
+ .findFragmentByTag(EditTrackGroupDialogFragment.TAG);
+ if (f == null ) {
+ f = new EditTrackGroupDialogFragment();
+ f.group = group;
+ f.show(fragmentManager, EditTrackGroupDialogFragment.TAG);
+ }
+ }
+
+ private static class UpdateGpxCategoryTask extends AsyncTask {
+
+ private OsmandApplication app;
+ private WeakReference activityRef;
+
+ private GpxDisplayGroup group;
+
+ private String newCategory;
+ private Integer newColor;
+
+ private ProgressDialog progressDialog;
+ private boolean wasUpdated = false;
+
+ private UpdateGpxCategoryTask(@NonNull TrackActivity activity, @NonNull GpxDisplayGroup group) {
+ this.app = (OsmandApplication) activity.getApplication();
+ activityRef = new WeakReference<>(activity);
+
+ this.group = group;
+ }
+
+ UpdateGpxCategoryTask(@NonNull TrackActivity activity, @NonNull GpxDisplayGroup group,
+ @NonNull String newCategory) {
+ this(activity, group);
+ this.newCategory = newCategory;
+ }
+
+ UpdateGpxCategoryTask(@NonNull TrackActivity activity, @NonNull GpxDisplayGroup group,
+ @NonNull Integer newColor) {
+ this(activity, group);
+ this.newColor = newColor;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ TrackActivity activity = activityRef.get();
+ if (activity != null) {
+ progressDialog = new ProgressDialog(activity);
+ progressDialog.setTitle(EditTrackGroupDialogFragment.getCategoryName(app, group.getName()));
+ progressDialog.setMessage(newCategory != null ? "Changing name" : "Changing color");
+ progressDialog.setCancelable(false);
+ progressDialog.show();
+
+ GPXFile gpxFile = group.getGpx();
+ if (gpxFile != null) {
+ SavingTrackHelper savingTrackHelper = app.getSavingTrackHelper();
+ List items = group.getModifiableList();
+ String prevCategory = group.getName();
+ boolean emptyCategory = TextUtils.isEmpty(prevCategory);
+ for (GpxDisplayItem item : items) {
+ WptPt wpt = item.locationStart;
+ if (wpt != null) {
+ boolean update = false;
+ if (emptyCategory) {
+ if (TextUtils.isEmpty(wpt.category)) {
+ update = true;
+ }
+ } else if (prevCategory.equals(wpt.category)) {
+ update = true;
+ }
+ if (update) {
+ wasUpdated = true;
+ String category = newCategory != null ? newCategory : wpt.category;
+ int color = newColor != null ? newColor : wpt.colourARGB;
+ if (gpxFile.showCurrentTrack) {
+ savingTrackHelper.updatePointData(wpt, wpt.getLatitude(), wpt.getLongitude(),
+ System.currentTimeMillis(), wpt.desc, wpt.name, category, color);
+ } else {
+ gpxFile.updateWptPt(wpt, wpt.getLatitude(), wpt.getLongitude(),
+ System.currentTimeMillis(), wpt.desc, wpt.name, category, color);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ GPXFile gpxFile = group.getGpx();
+ if (gpxFile != null && !gpxFile.showCurrentTrack && wasUpdated) {
+ GPXUtilities.writeGpxFile(new File(gpxFile.path), gpxFile, app);
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ GPXFile gpxFile = group.getGpx();
+ if (gpxFile != null && wasUpdated) {
+ syncGpx(gpxFile);
+ }
+
+ if (progressDialog != null && progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+
+ TrackActivity activity = activityRef.get();
+ if (activity != null) {
+ activity.loadGpx();
+ }
+ }
+
+ private void syncGpx(GPXFile gpxFile) {
+ MapMarkersHelper markersHelper = app.getMapMarkersHelper();
+ MapMarkersGroup group = markersHelper.getMarkersGroup(gpxFile);
+ if (group != null) {
+ markersHelper.runSynchronization(group);
+ }
+ }
+ }
+}
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java
index f24339421f..6e78b2f0fb 100644
--- a/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java
+++ b/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java
@@ -11,6 +11,7 @@ import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
+import android.support.v4.app.FragmentActivity;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog;
@@ -38,6 +39,8 @@ import android.widget.ListView;
import android.widget.TextView;
import net.osmand.AndroidUtils;
+import net.osmand.Collator;
+import net.osmand.OsmAndCollator;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
@@ -68,7 +71,6 @@ import net.osmand.util.Algorithms;
import java.io.File;
import java.lang.ref.WeakReference;
-import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -681,8 +683,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
Comparator comparator;
PointGPXAdapter() {
- final Collator collator = Collator.getInstance();
- collator.setStrength(Collator.SECONDARY);
+ final Collator collator = OsmAndCollator.primaryCollator();
comparator = new Comparator() {
@Override
public int compare(String s1, String s2) {
@@ -773,6 +774,9 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
break;
}
}
+ List headerGroupItems = headerGroup.getModifiableList();
+ headerGroupItems.clear();
+ headerGroupItems.addAll(values);
itemGroups.put(headerGroup, values);
groups.add(headerGroup);
} else {
@@ -925,9 +929,9 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- Activity activity = getActivity();
+ FragmentActivity activity = getActivity();
if (activity != null) {
- // todo
+ EditTrackGroupDialogFragment.showInstance(activity.getSupportFragmentManager(), group);
}
}
});
@@ -1011,7 +1015,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
options.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_overflow_menu_white));
}
if (childPosition == 0) {
- row.findViewById(R.id.divider).setVisibility(View.VISIBLE);
+ row.findViewById(R.id.divider).setVisibility(View.GONE);
row.findViewById(R.id.list_divider).setVisibility(View.GONE);
} else {
row.findViewById(R.id.divider).setVisibility(View.GONE);
@@ -1146,7 +1150,8 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
for (GpxDisplayItem i : g.getModifiableList()) {
if (i.name.toLowerCase().contains(cs)) {
filter.add(i);
- } else if (i.locationStart != null && cs.equals(i.locationStart.category)) {
+ } else if (i.locationStart != null && !TextUtils.isEmpty(i.locationStart.category)
+ && i.locationStart.category.toLowerCase().contains(cs)) {
filter.add(i.locationStart.category);
}
}