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); } }