diff --git a/OsmAnd/res/drawable-hdpi/ic_action_type_add_16.png b/OsmAnd/res/drawable-hdpi/ic_action_type_add_16.png new file mode 100644 index 0000000000..ff4d2d7400 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_action_type_add_16.png differ diff --git a/OsmAnd/res/drawable-hdpi/ic_action_type_delete_16.png b/OsmAnd/res/drawable-hdpi/ic_action_type_delete_16.png new file mode 100644 index 0000000000..1df427fe41 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_action_type_delete_16.png differ diff --git a/OsmAnd/res/drawable-hdpi/ic_action_type_edit_16.png b/OsmAnd/res/drawable-hdpi/ic_action_type_edit_16.png new file mode 100644 index 0000000000..8f02b07001 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_action_type_edit_16.png differ diff --git a/OsmAnd/res/drawable-mdpi/ic_action_type_add_16.png b/OsmAnd/res/drawable-mdpi/ic_action_type_add_16.png new file mode 100644 index 0000000000..db1826da8b Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_action_type_add_16.png differ diff --git a/OsmAnd/res/drawable-mdpi/ic_action_type_delete_16.png b/OsmAnd/res/drawable-mdpi/ic_action_type_delete_16.png new file mode 100644 index 0000000000..4cd6c72dd2 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_action_type_delete_16.png differ diff --git a/OsmAnd/res/drawable-mdpi/ic_action_type_edit_16.png b/OsmAnd/res/drawable-mdpi/ic_action_type_edit_16.png new file mode 100644 index 0000000000..a33538c185 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_action_type_edit_16.png differ diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_type_add_16.png b/OsmAnd/res/drawable-xhdpi/ic_action_type_add_16.png new file mode 100644 index 0000000000..9713bfff68 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_action_type_add_16.png differ diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_type_delete_16.png b/OsmAnd/res/drawable-xhdpi/ic_action_type_delete_16.png new file mode 100644 index 0000000000..9cc3481cb0 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_action_type_delete_16.png differ diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_type_edit_16.png b/OsmAnd/res/drawable-xhdpi/ic_action_type_edit_16.png new file mode 100644 index 0000000000..f568e5b24f Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_action_type_edit_16.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_type_add_16.png b/OsmAnd/res/drawable-xxhdpi/ic_action_type_add_16.png new file mode 100644 index 0000000000..aacd481d4f Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_action_type_add_16.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_type_delete_16.png b/OsmAnd/res/drawable-xxhdpi/ic_action_type_delete_16.png new file mode 100644 index 0000000000..4995ad3158 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_action_type_delete_16.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_type_edit_16.png b/OsmAnd/res/drawable-xxhdpi/ic_action_type_edit_16.png new file mode 100644 index 0000000000..f00b70c66e Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_action_type_edit_16.png differ diff --git a/OsmAnd/res/layout/fragment_reports.xml b/OsmAnd/res/layout/fragment_reports.xml index cc94f46c20..84e6564ccb 100644 --- a/OsmAnd/res/layout/fragment_reports.xml +++ b/OsmAnd/res/layout/fragment_reports.xml @@ -275,6 +275,64 @@ android:background="?attr/dashboard_divider"/> + + + + + + + + + + + + + + + + + + + + android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground" + android:minHeight="@dimen/bottom_sheet_selected_item_title_height"> diff --git a/OsmAnd/res/layout/route_info_layout.xml b/OsmAnd/res/layout/route_info_layout.xml index 08685ae667..822b7c87fd 100644 --- a/OsmAnd/res/layout/route_info_layout.xml +++ b/OsmAnd/res/layout/route_info_layout.xml @@ -107,7 +107,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:src="@drawable/ic_action_polygom_dark"/> + android:src="@drawable/ic_action_route_distance"/> Depósito - +Buzón + diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index 0d72195610..a517261396 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -106,7 +106,7 @@ Tour de télécommunication Station de gonflage des pneumatiques Confiserie - Voie ferrée en construction + Construction Épicerie Service de photocopies et d\'impression Magasin de cosmétiques @@ -3085,7 +3085,7 @@ Période historique: classique (époque IV, 374 ap. JC - 900 ap. JC) Période historique: impériale (époque V, 900 ap. JC - 1200 ap. JC) - Type: croix de conciliation + Type : croix de conciliation Terrassement Date de l\'explosion (UTC) Heure de l\'explosion (UTC) @@ -3116,4 +3116,10 @@ Médecin généraliste Médecine palliative + Type : blason + + Réservation : oui + Réservation : non + Réservation : membres uniquement + diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index 0bfdcd2a93..21c0886fd7 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -2484,4 +2484,22 @@ הפעלת הנפשת גלישת מפה של המיקום שלי במהלך ניווט. ב־%1$s ניתן לגעת בסמן על המפה כדי להעביר אותו לראש הסמנים הפעילים מבלי לפתוח את תפריט ההקשר. + \\022 זיהוי של שלטי עצור מתחשב בכיוון הניווט +\n +\n • אלגוריתם חדש מספק ערכים בעלי משמעות לעלייה/ירידה למסלולי GPX +\n +\n • זמן הטיול (כלל נייסמית׳) מודע לתוואי הדרך (עלייה) +\n +\n + הפעלה בנגיעה אחת + נא לבחור להלן באיזו מהירות כיוון המפה יתחלף ממצב ‚לפי כיוון התנועה’ למצב ‚לפי מצפן’. + נקודות עומק ימיות בחצי הכדור הדרומי + נקודות עומק ימיות בחצי הכדור הצפוני + ב־OsmAnd נאסף מידע על אילו חלקים ביישומון משמשים אותך. המיקום שלך אף פעם לא נשלח, גם לא הקלט שלך ביישומון או פרטים על אזורים בהם צפית, חיפשת או הורדת. + הכרזה מחודשת של הנחיות הניווט במרווחי זמן קבועים. + חזרה על הנחיות הניווט + אחרים + לשמור את הנתונים כקובץ GPX ולייבא את נקודות הדרך למועדפים? + מועדפים משותפים דרך OsmAnd + ישנה בחירה חדשה לשלוט ביישומון באופן עיקרי באמצעות לוח המחוונים הגמיש או התפריט הסטטי. ניתן לשנות את בחירתך בהגדרות לוח המחוונים. diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index ec396ceb05..82afa6fee2 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -288,7 +288,7 @@ Horgászfelszerelés Képkeretbolt Bútorbolt - Vegyesbolt + Egyéb bolt Üveges Hallókészülékbolt Vadászfelszerelés diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index e5c41dc44f..3c26f37065 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -2866,4 +2866,6 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka. Rodyti rodykles žemėlapyje Rodyti praeitą Slėpti praeitą + Užrašai pagal datą + Išvaizda žemėlapyje diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index 0ffa3e6968..76be10798b 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -886,7 +886,7 @@ Falochron Ostroga brzegowa - Basen + Zbiornik wodny Obszar chroniony Dźwig @@ -1361,7 +1361,7 @@ Typ: kurchan Typ: mauzoleum Skarpetki - Koszulki + Koszule Zabytkowy kamień milowy Skóra @@ -1449,7 +1449,7 @@ Tajski Erotyczny Chiński - Tterapeutyczny + Terapeutyczny Poręcz: tak Poręcz: nie @@ -1675,7 +1675,7 @@ Specjalnych miejsc dla niepełnosprawnych Ze specjalnymi miejscami dla kobiet Bez specjalnych miejsc dla kobiet - Specjalnych miejsc dla kobiet + Ze specjalnymi miejscami dla kobiet Specjalnych miejsc dla uczniów Specjalnych miejsc dla nauczycieli Ze specjalnymi miejscami dla rodziców @@ -2545,7 +2545,7 @@ Szafki Wieszak rowerowy - Pół-otwarty stojak + Półotwarty stojak Słona woda Słodka woda @@ -3172,7 +3172,7 @@ Ciasta Naleśniki Spaghetti i makarony - Szybkie żarcie + Fast-food Soki Soba (makaron z mąki gryczanej) Ekskluzywne dania @@ -3229,7 +3229,7 @@ Tak Tak - Bez-laktozowa + Bezlaktozowa Halal Koszerne potrawy Bezglutenowa @@ -3672,4 +3672,12 @@ Stacja ładowania +Skrzynka na listy + Ulica + Numer budynku + Mieszkania + + Centrum płatności + Przelew pieniędzy + diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 880ec1a05d..4e34e16cfa 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -9,7 +9,7 @@ Zasoby mapy Ustawienia mapy wektorowej Automatyczne środkowanie mapy - Ustala opóźnienie synchronizacji mapy z aktualnym położeniem + Ustala opóźnienie synchronizacji mapy z aktualnym położeniem. Automatyczne podążanie za położeniem Włącz podążanie za pozycją tylko w trybie nawigacji. @@ -99,7 +99,7 @@ Dane użytecznych miejsc Głos syntezowany Nowe wyszukiwanie - Wybierz rozmiar tekstu dla nazw na mapie + Wybierz rozmiar tekstu dla nazw na mapie. Rozmiar tekstu Informacje o diagnozowaniu błędów renderowania Wyświetla informacje o wydajności renderowania @@ -122,7 +122,7 @@ \tAby jej użyć, proszę wybrać „Menu” → „Skonfiguruj mapę” → „Zasób mapy…” → „Wektorowe mapy offline”. Wyjście dźwięku nawigacji głosowej - Określa głośnik do odtwarzania nawigacji głosowej + Określa głośnik do odtwarzania nawigacji głosowej. Kanał głosowy (także przerywa odtwarzanie muzyki z głośników) Kanał powiadomień Kanał media/music @@ -153,7 +153,7 @@ Nie można przetworzyć „%s” Wyszukaj adres korzystając z map offline Systemowy - Wybiera język interfejsu (po zmianie należy uruchomić program ponownie) + Wybiera język interfejsu (po zmianie należy uruchomić program ponownie). Język interfejsu @@ -238,7 +238,7 @@ Nocny Wschód/zachód Słońca Czujnik światła - Zdefiniuj kryterium przełączania trybu dzień/noc + Zdefiniuj kryterium przełączania trybu dzień/noc. Tryb dzienny/nocny Pobrać {0} plik(ów) ({1} MB)? zaznaczono {0} element(ów) @@ -253,7 +253,7 @@ Tryb działania w tle Działanie aplikacji, gdy ekran jest wygaszony Najszybsza trasa - Wyznacza najszybszą trasę zamiast ekonomicznej + Wyznacza najszybszą trasę zamiast ekonomicznej. Do pobrania {1} kafelków na poziomie {0} ({2} MB) Pobierz mapę Proszę wybrać maksymalne przybliżenie do pobrania @@ -297,7 +297,7 @@ Względem kompasu Względem kierunku ruchu Bez obracania (północ na górze) - Wybiera sposób obracania mapy + Wybiera sposób obracania mapy. Orientacja mapy Szczegóły trasy Zaimportowano ulubione @@ -323,9 +323,9 @@ Warstwy mapy Szukaj Miejsc - Umożliwia przesuwanie mapy za pomocą trackballa + Umożliwia przesuwanie mapy za pomocą trackballa. Używanie trackballa - Czas oczekiwania na poprawne położenie GPS + Czas oczekiwania na poprawne położenie GPS. Czas oczekiwania Gdzie jestem? @@ -348,7 +348,7 @@ Filtr Wyłącz dźwięk Włącz dźwięk - Wybiera głos komunikatów nawigatora + Wybiera głos komunikatów nawigatora. Głos komunikatów Inicjowanie danych głosowych… Niewspierana wersja danych głosowych @@ -366,7 +366,7 @@ Skręć łagodnie w lewo i jedź Zawróć i jedź Prosto - Kontynuuj + Następnie Pobierz region Dziękujemy za korzystanie z OsmAnd. Większość funkcjonalności programu wymaga danych o wybranym regionie, które można pobrać w menu „Ustawienia„” → „Zarządzaj mapami”. Dzięki nim będzie można przeglądać mapy, wyszukiwać adresy, użyteczne miejsca i transport publiczny. Wyszukiwanie sygnału… @@ -392,7 +392,7 @@ Długość rozkładu jazdy Transport publiczny Zatwierdź - Wyświetla na mapie przystanki transportu publicznego + Wyświetla na mapie przystanki transportu publicznego. Pokaż przystanki Program do nawigacji satelitarnej OsmAnd Uaktualniono dane użytecznych miejsc (wczytano {0}) @@ -421,7 +421,7 @@ Maks. zoom online Wybierz maksymalny poziom przybliżenia mapy dla pobierania kafelków map online Całkowity dystans %1$s, czas podróży %2$d h %3$d min. - Wybiera usługę nawigacyjną online lub offline + Wybiera usługę nawigacyjną online lub offline. Usługa nawigacyjna Katalog przechowywania danych na karcie SD jest niedostępny! Pobrać {0} - {1} ? @@ -483,10 +483,10 @@ Dane Edytowanie OSM - Automatycznie przybliża mapę w zależności od prędkości (dopóki mapa zsynchronizowana jest z aktualnym położeniem) + Automatycznie przybliża mapę w zależności od prędkości (dopóki mapa zsynchronizowana jest z aktualnym położeniem). Automatyczne przybliżanie mapy Dodatkowe ustawienia - Ustala domyślny profil widoku mapy i ustawień nawigacji + Ustala domyślny profil widoku mapy i ustawień nawigacji. Domyślny profil Ustawienia Zapisuje bieżący ślad do pliku GPX na karcie SD @@ -715,7 +715,7 @@ Jestem tutaj Zmienia stopień przybliżenia mapy poziomymi ruchami trackballa Przybliżanie mapy za pomocą trackballa - Ustawienia ułatwień dostępu + Ustawienia ułatwień dostępu. Ułatwienia dostępu Odblaskowe nakładki Użyj odblaskowych kolorów do wyświetlania ścieżek i tras @@ -783,15 +783,15 @@ Wyszukiwanie transportu publicznego Wyszukaj w ulubionych - "Ukryj wszystkie elementy mapy będące terenami ziemnymi" + Ukryj wszystkie elementy mapy będące terenami ziemnymi. Wielokąty Tryb renderowania Optymalizuj mapę dla Wyświetlanie od stopnia przybliżenia (wymaga danych poziomic): Poziomice - Zwiększ ilość detali pokazywanych na mapie + Zwiększ liczbę szczegółów pokazywanych na mapie. Wyświetl więcej szczegółów na mapie - Rondo: wybierz %1$d zjazd + Na rondzie wybierz %1$d zjazd Trzymaj się lewej strony Trzymaj się prawej strony @@ -836,7 +836,7 @@ Miejsce parkowania oraz czas można znaleźć na karcie w panelu oraz na widżec Godziny Minuty Zaparkowano samochód o - Użyj kompasu, gdy nie zostanie wykryty kierunek + Użyj kompasu, gdy nie zostanie wykryty kierunek. Użyj kompasu Trasa zostanie wyznaczona po określeniu aktualnego położenia Poprzednia trasa nie została ukończona. Kontynuować ją? (%1$s sekund) @@ -881,9 +881,9 @@ Miejsce parkowania oraz czas można znaleźć na karcie w panelu oraz na widżec Dróg nieutwardzonych Promów Omijanie… - Wyznacza trasy omijając drogi płatne, nieutwardzone, promy + Wyznacza trasy omijając drogi płatne, nieutwardzone, promy. Wyświetlanie ostrzeżeń… - Wyświetla ostrzeżenia ruchu drogowego, ostrzeżenia o fotoradarach i informacje o pasach + Wyświetla ostrzeżenia ruchu drogowego, ostrzeżenia o fotoradarach i informacje o pasach ruchu. Mapy dla całego świata i nawigacja działająca w oparciu o stacjonarne jak i sieciowe mapy OSM @@ -913,7 +913,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej " OsmAnd to aplikacja open source do nawigacji obsługująca mapy offline i online Autostrad - Przyciąga położenie do dróg podczas nawigowania + Przyciąga położenie do dróg podczas nawigowania. Przyciąganie do drogi Informacja o dniu/nocy @@ -1091,7 +1091,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej OpenMaps EU brak - Preferuj autostrady + Preferuj autostrady. Preferuj autostrady Preferuj… Mapa @@ -1195,7 +1195,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Ostrzeżenia o ruchu Hasło OSM (opcjonalne) Zapowiadanie… - Konfiguruje zapowiadanie nazw ulic, ostrzeżeń o ruchu (przymusowe przystanki, progi zwalniające), fotoradarów, ograniczeń prędkości + Konfiguruje zapowiadanie nazw ulic, ostrzeżeń o ruchu (przymusowe przystanki, progi zwalniające), fotoradarów, ograniczeń prędkości. Nazwy ulic (syntezowane) Punkty śladu GPX @@ -1204,7 +1204,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Stany Zjednoczone Europa i Azja, Ameryka Łaciński i podobne Wielka Brytania, Indie i inne - Wybiera region poruszania się: Stany Zjednoczone, Europa, Wielka Brytania, Azja oraz inne + Wybiera region poruszania się: Stany Zjednoczone, Europa, Wielka Brytania, Azja oraz inne. Region ruchu Kanada Diagnozowanie błędów FPS @@ -1262,14 +1262,14 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Samolot Renderowanie Profile programu - Wybiera używane profile widoczne w programie + Wybiera używane profile widoczne w programie. Żeglugowy znak orientacyjny - Określa tempo odtwarzania syntezowanych komunikatów głosowych + Określa tempo odtwarzania syntezowanych komunikatów głosowych. Szybkość mowy - Wyłącza 2-etapowe wyznaczanie trasy dla nawigacji samochodowej + Wyłącza 2-etapowe wyznaczanie trasy dla nawigacji samochodowej. "Nie udało się szybko wyznaczyć trasę (%s). Przełączanie na tryb powolny." Wyłączenie złożonego wyznaczania trasy Ustawienia nawigacji @@ -1283,19 +1283,19 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej \n Uwaga 1: stare pliki pozostaną nienaruszone (mogą być usunięte ręcznie). \n Uwaga 2: w nowym położeniu nie będzie możliwe współdzielenie tych samych plików pomiędzy OsmAnd i OsmAnd+." Preferowanie autostrad - Preferowanie autostrad + Preferuj autostrady. Omijanie płatnych dróg - Omijanie płatnych dróg + Omijaj płatne drogi. Omijanie nieutwardzonych dróg - Omijanie nieutwardzonych dróg + Omijaj nieutwardzone drogi. Omijanie przepraw promowych - Omijanie przepraw promowych + Omijaj przeprawy promowe. Omijanie autostrad - Omijanie autostrad + Omijaj autostrady. Ograniczenie wagi - Określa maksymalną, dozwoloną masę pojazdu + Określa maksymalną, dozwoloną masę pojazdu. Wybierz ślad GPX… Wybierz cel trasy Wskaż na mapie @@ -1359,7 +1359,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Adresy krajowe Podstawowa mapa świata Światowa mapa tras narciarskich - Całkowicie wstrzymuje odtwarzanie muzyki podczas komunikatów (nie tylko ją przycisza) + Całkowicie wstrzymuje odtwarzanie muzyki podczas komunikatów (nie tylko ją przycisza). Przerywanie muzyki Zawsze wyśrodkowane położenie Głos @@ -1378,7 +1378,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Monitoring OpenStreetMap OsMo Tylko ręcznie (naciśnij strzałkę) - Powtarza instrukcje nawigacji w regularnych odstępach czasu + Powtarza instrukcje nawigacji w regularnych odstępach czasu. Powtarzanie instrukcji Powiadomienia osiągnięcia celu Określa moment powiadamiania o osiągnięciu celu @@ -1504,7 +1504,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Wybierz cele docelowe Etykiety punktów - Wyświetla przyciski zbliżania i oddalania podczas nawigacji + Wyświetla przyciski zbliżania i oddalania podczas nawigacji. Przyciski zbliżania Sortuj wg odległości Sortuj wg nazwy @@ -1538,7 +1538,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Włącz tryb działania GPS w tle Częstość wybudzania GPS Wyłączyć tryb działania GPS w tle? - Preferowany język dla etykiet na mapie (jeśli niedostępny, zostanie wybrany język angielski lub lokalna nazwa) + Preferowany język dla etykiet na mapie (jeśli niedostępny, zostanie wybrany język angielski lub lokalna nazwa). Preferowany język map Nazwy lokalne Suahili @@ -1656,7 +1656,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Skonfiguruj mapę W odległości Włączanie ekranu - Włącza ekran urządzenia podczas zbliżania się do zakrętu + Włącza ekran urządzenia podczas zbliżania się do zakrętu. Omijanie dróg… Linie tramwajowe i kolejowe @@ -1698,9 +1698,9 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Amerykański atlas drogowy Bez reguł wyznaczania tras z wersji 1.9 Nie używa reguł wyznaczania tras wprowadzonych w wersji 1.9 - Linia współrzędnych y\" + Linia współrzędnych \"y\" Przystanki transportu miejskiego - Linia współrzędnych x\" + Linia współrzędnych \"x\" Pobrane Pobieranie niemożliwe. Proszę sprawdzić połączenie internetowe. Komunikaty głosowe @@ -1756,7 +1756,7 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej Symulowanie położenia Szerokość %1$s Długość %2$s - Wyświetla najczęściej zadawane pytania, ostatnie zmiany i inne + Wyświetla najczęściej zadawane pytania, ostatnie zmiany i inne. Ustawienia nawigacji Ustawienia ogólne @@ -1856,11 +1856,11 @@ Długość %2$s Numery budynków Pamięć użytkownika - Omija przejścia graniczne z innym państwem + Omijaj przejścia graniczne z innym państwem. Ograniczenie wysokości - Określa maksymalną, dozwoloną wysokość pojazdu + Określa maksymalną, dozwoloną wysokość pojazdu. Inteligentne przeliczanie trasy - Wyznacza ponownie tylko początkową część trasy dla długich podróży + Wyznacza ponownie tylko początkową część trasy dla długich podróży. Wyloguj się Udostępnianie położenia Linia w kolorze oznakowania OSMC @@ -1991,7 +1991,7 @@ Długość %2$s Drogi Dodaj nową Wybór kategorii - Definiuje jednostki prędkości + Definiuje jednostki prędkości. Jednostki prędkości Mile morskie Mm @@ -2051,7 +2051,7 @@ Długość %2$s Prześlij Utworzone użyteczne miejsce OSM - Ustala flagę wskazującą pierwsze uruchomienie programu zachowując wszystkie pozostałe ustawienia + Ustala flagę wskazującą pierwsze uruchomienie programu zachowując wszystkie pozostałe ustawienia. geo: Pobrać mapę samochodową, nawet jeśli pobrano już zwykłą mapę? Wyświetla ilość zużytych darmowych pobrań @@ -2064,8 +2064,8 @@ Długość %2$s Inne Wtyczki Pierwsze użycie - Jak pobrać mapy, ustawić podstawowe ustawienia - Konfiguracja nawigacja + Jak pobrać mapy, ustawić podstawowe opcje. + Konfiguracja nawigacji. Planowanie podróży Częste pytania Często zadawane pytania @@ -2078,7 +2078,7 @@ Długość %2$s Kontakt z nami Legenda mapy Zapisać użyteczne miejsce bez określonego rodzaju? - Wyświetla kokpit zamiast menu + Wyświetla kokpit zamiast menu. Dostęp z mapy Skopiowane do schowka \\u2022 Nowe menu kontekstowe, przystosowane do wybierania lokacji na mapie oraz na innych ekranach @@ -2115,7 +2115,7 @@ Długość %2$s Używaj menu To jest nowy wybór podstawowej kontroli aplikacja za pomocą konfigurowalnego panelu lub statycznego menu. Wybór zawsze można zmienić w ustawieniach panelu. Zapisz lokalnie - Proszę określić rodzaj użytecznego miejsca lub pominąć go + Proszę określić rodzaj użytecznego miejsca lub pominąć go. Zmodyfikowane użyteczne miejsce OSM Usunięto użyteczne miejce OSM Otwarto ponownie notatkę OSM @@ -2138,14 +2138,14 @@ Długość %2$s Najniższa jakość Najwyższa jakość Jakość wideo - Wybiera jakość wyjściowego nagrania wideo + Wybiera jakość nagrania wideo. Format dźwięku - Wybiera format wyjściowego nagrania dźwięku + Wybiera format wyjściowego nagrania dźwięku. Przepływność dźwięku Określa wartość przepływności dźwięku Obok Omijanie schodów - Omijanie schodów + Omijaj schody. Omijanie przejść granicznych Szlaki konne Brak określonego adresu @@ -2159,8 +2159,8 @@ Długość %2$s Wyszukiwanie adresu Program nie posiada uprawnień do użycia karty SD Wybór komunikatów głosowych - Proszę wybrać lub pobrać komunikaty głosowe właściwe dla danego języka - Wskazuje drogi, których należy unikać podczas nawigowania + Proszę wybrać lub pobrać komunikaty głosowe właściwe dla danego języka. + Wskazuje drogi, których należy unikać podczas nawigowania. Dźwięk Program nie ma uprawnień dostępu do danych o położeniu. Program nie ma uprawnień dostępu do aparatu. @@ -2216,7 +2216,7 @@ Długość %2$s Dodaj znacznik mapy Wybierz znacznik mapy Odwróć kolejność - Aktywuje funkcję znaczników mapy + Aktywuje funkcję znaczników mapy. Usunąć wszystkie aktywne znaczniki? Wyczyścić historię znaczników mapy? Aktywne znaczniki @@ -2340,7 +2340,7 @@ Długość %2$s Węgierski (formalny) Kannada Format współrzędnych - Ustala format współrzędnych geograficznych + Ustala format współrzędnych geograficznych. Karta pamięci Otwarte teraz Otwarte 24/7 @@ -2378,7 +2378,7 @@ Długość %2$s Zmień Rozpocznij Ekonomiczna trasa - Wyznacza ekonomiczną trasę (zwykle najkrótszą) + Wyznacza ekonomiczną trasę (zwykle najkrótszą). Zastąpić ulubiony punkt %1$s? Pomiń pobieranie map Otrzymuj wskazówki dojazdu i odkrywaj nowe miejsca bez połączenia z Internetem @@ -2597,12 +2597,12 @@ Reprezentuje obszar: %1$s x %2$s \n • Mnóstwo innych ulepszeń i poprawek \n \n i więcej… - Wyświetla kontury i punkty głębi + Wyświetla kontury i punkty głębi. Mapy batymetryczne Więcej równin lub więcej wzgórz Użyj danych wysokościowych - Używa danych wysokościowych dostarczanych przez SRTM, ASTER i EU-DEM + Używa danych wysokościowych dostarczanych przez SRTM, ASTER i EU-DEM. Wysokość trasy Zjazdy @@ -2633,7 +2633,7 @@ Reprezentuje obszar: %1$s x %2$s Dodaj nowy katalog Nachylenie Berberyjski - Preferuj teren: płaski lub górzysty + Preferuj teren: płaski lub górzysty. Górzysty Mniej górzysty Płaski @@ -2661,7 +2661,7 @@ Reprezentuje obszar: %1$s x %2$s Wyłącz automatyczne przybliżanie mapy Przełącz automatyczne przybliżanie Dodaj pierwszy pośredni cel trasy - Przełącza automatyczne przybliżanie mapy zależne od prędkości ruchu. + Włącza/wyłącza automatyczne przybliżanie mapy zależne od prędkości ruchu. Ustala cel trasy w położeniu na środku ekranu a poprzednio ustalony cel zamienia na ostatni cel pośredni. Zastępuje cel trasy położeniem na środku ekranu. Ustala pierwszy cel pośredni trasy w położeniu na środku ekranu. @@ -2690,7 +2690,7 @@ Reprezentuje obszar: %1$s x %2$s w %1$s Podsumowanie Animowanie położenia - Włącza animację aktualnego położenia na mapie + Włącza animację aktualnego położenia na mapie. " Nawigacja GPS • Możesz wybrać pomiędzy trybem offline (brak kosztów roamingu za granicą) lub online (szybciej) @@ -2711,7 +2711,7 @@ Reprezentuje obszar: %1$s x %2$s Zestaw kolorów Wyświetlanie od stopnia przybliżenia Uwzględnianie prywatnych obszarów - Zezwala na dostęp do prywatnych obszarów + Zezwala na dostęp do prywatnych obszarów. Ta trasa może być zbyt długa do wyznaczenia. Prosimy dodać punkty pośrednie, jeżeli nie otrzymasz wyniku w ciągu 10 minut. Nazwa zawiera zbyt wiele wielkich liter. Czy chcesz kontynuować? Wtyczka @@ -2731,7 +2731,7 @@ Reprezentuje obszar: %1$s x %2$s Rozpocznij ponownie wyszukiwanie Zwiększ promień wyszukiwania Nic nie odnaleziono :( - Proszę zmienić zapytanie lub zwiększyć promień wyszukiwania + Proszę zmienić zapytanie lub zwiększyć promień wyszukiwania. Cel podróży jest położony na obszarze o charakterze prywatnym. Umożliwić dostęp do prywatnych dróg dla tej trasy? Szukaj ulubionych Mapillary @@ -2834,7 +2834,7 @@ Reprezentuje obszar: %1$s x %2$s Wyświetlanie na mapie Zakończyć bez zapisywania? Wyłączenie animacji - Wyłącza animacje w programie + Wyłącza animacje w aplikacji. Przenieś wszystkie do historii Wyznacz trasę Wskaźnik odległości @@ -2842,7 +2842,7 @@ Reprezentuje obszar: %1$s x %2$s Opcje znacznika Proszę wybrać w jaki sposób wskazywać odległość i kierunek do znaczników mapy na ekranie: Próg zmiany orientacji mapy - Wybiera prędkość, poniżej której orientacja mapy zmieni się z „względem kierunku ruchu” na „względem kompasu” + Wybiera prędkość, poniżej której orientacja mapy zmieni się z „względem kierunku ruchu” na „względem kompasu”. Wszystkie znaczniki mapy przeniesiono do historii Znacznik mapy przeniesiono do historii Znacznik mapy przeniesiono do aktywnych @@ -2934,4 +2934,5 @@ Reprezentuje obszar: %1$s x %2$s Zmodyfikowane Dodane Tworzenie lub modyfikowanie obiektów OSM + Zmień nazwę znacznika diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index 76e5404332..6b35312d6e 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -2792,4 +2792,82 @@ Dificuldade da pista Preparação de pista Fumantes + Comida para levar + Coquetéis + Microcervejaria + Resíduos aceitos + Lareira + Característica da água + Dieta + Especialidade de saúde + Tipo de massagem + Barracas + Máquina de lavar roupa + Trailer + Fonte de energia + Sistema médico + Visita domiciliar + Prato + Tipo de pagamento (transporte) + Tipo + Grupo-alvo + Ar comprimido + Aspirador de pó + Característica + Cafetaria + Tipo + Serviços + Tipo de motocicleta + Animais aceitos + Finalidade + Barcos alugados + Estado operacional + Tipo de abastecimento de água + Purificação de água + Acesso a local com água + +Infraestrutura de emergência + Loja de especiarias + Loja de materiais artísticos + Posto de gasolina para embarcações + Eclusa + Altura livre + Altura livre (fechada) + Altura livre (aberta) + Largura livre + + Acesso para cadeira de rodas + Animais selvagens + Cavalos + Mamíferos + Peixes + + Vegetariano + Vegano + Livre de glúten + Kosher + Halal + Livre de lactose + Sim + Sim + Sim + Cobrança: sim + Cobrança: não + Estação de auto-reparo de bicicletas + + Sim + Medicina paliativa + + Voo livre (esporte) + + Torneira de água + Operado por botões: sim + Operado por botões: não + + Decolagem + Pouso + Treinamento + Oficial: sim + Oficial: não + Parapente diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 8dbb292cb6..fbd6238e5f 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -2265,7 +2265,7 @@ Pôr do Sol: %2$s Suprime a exibição de descontos do aplicativo e mensagens de eventos locais especiais. Registro Velocidade mínima para registro - Acuidade mínima para registro + Precisão mínima para registro Formato para as coordenadas geográficas. Voltar Ver @@ -2413,7 +2413,7 @@ Pôr do Sol: %2$s Sem dados Esquema de cores das curvas de nível Filtro: Definir velocidade mínima para um ponto ser registrado. - Deslocamento mínimo de registo + Deslocamento mínimo de registro Filtro: Definir a distância mínima da última posição para o ponto ser registrado. Filtro: Definir precisão mínima para um ponto ser registrado. POI de Natal @@ -2427,4 +2427,23 @@ Pôr do Sol: %2$s Transliterar nomes Arquivo %1$s não possui pontos de passagem, importe-o como uma trilha? Adicionar a uma trilha GPX - +Adicionar nota de áudio, vídeo ou foto para cada ponto no mapa, usando o widget ou o menu de contexto. + Tocando no botão de ação adicionará um destino na localização do centro da tela. O destino anteriormente definido se torna o último destino intermediário. + Tocando no botão de ação substituirá o destino com a localização do centro da tela. + Tocando no botão de ação adicionará um primeiro ponto intermédio na localização do centro da tela. + Se inscreva na nossa lista de e-mail sobre descontos do app e obtenha mais 3 downloads de mapa! + OsmAnd coleta informações sobre quais partes do aplicativo você abrir. A sua localização nunca é enviada, nem qualquer coisa digitada no aplicativo ou detalhes das áreas que você visualizar, pesquisar ou baixar. + Autodividir gravações após um intervalo + Iniciar novo segmento após intervalo de 6 min, um novo trajeto após intervalo de 2 h, ou um novo arquivo depois de um longo intervalo se a data foi alterada. + Você pode enviar sua nota de OSM anonimamente ou usando seu perfil OpenStreetMap.org. + Exiba uma notificação de sistema que permite iniciar a gravação de viagem. + Antecipando os feriados de Natal e ano novo, você pode optar por exibir o POI associado com o Natal: árvores de Natal, mercados, etc. + Assinatura será cobrada mensalmente. Você pode cancelar sua assinatura no Google Play a qualquer momento. + Parte de sua doação será enviada aos usuários OSM que enviam alterações ao OpenStreetMap. O custo da inscrição permanece o mesmo. + Assinatura permite atualizações a cada hora, diariamente e semanais, e downloads ilimitados para todos os mapas globalmente. + Adquira já + Adquira por %1$s + Adquira por %1$s mês + Obter downloads ilimitados de mapa e atualizações de mapas mais de uma vez por mês: por hora, diária ou semanal. + Tocando o botão de ação adicionará um ponto de passagem de GPX na localização do centro da tela. + diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 0b504a603f..a6be4c71c7 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1,5 +1,7 @@ + Файл GPX с координатами и данными выбранных заметок. + Файл GPX с координатами и данными всех заметок. Место Ваш пункт назначения находится на частной территории. Вы хотите разрешить доступ к частным дорогам для этой поездки? Искать снова @@ -432,7 +434,7 @@ Пользовательские Файл с избранными уже существует. Вы хотите его заменить? Настройка профиля - Профиль + Профиль по умолчанию Выберите профиль работы приложения (в каждом профиле настройки хранятся отдельно). Общие настройки Общие настройки приложения diff --git a/OsmAnd/res/values-sl/phrases.xml b/OsmAnd/res/values-sl/phrases.xml index 1b298d56c4..0c58823a3f 100644 --- a/OsmAnd/res/values-sl/phrases.xml +++ b/OsmAnd/res/values-sl/phrases.xml @@ -380,7 +380,7 @@ Internetni dostop: storitev Samostan - Turistične informacije + Informacije Ura Potovalna agencija Razgledna točka @@ -414,7 +414,7 @@ Glavni vhod Vhod Pohodniške poti - Vrsta + Vrsta goriva Vrsta Način plačila Vrsta dostopa do interneta diff --git a/OsmAnd/res/values-sl/strings.xml b/OsmAnd/res/values-sl/strings.xml index 2cf7fda636..0cb8c66ce8 100644 --- a/OsmAnd/res/values-sl/strings.xml +++ b/OsmAnd/res/values-sl/strings.xml @@ -2967,10 +2967,10 @@ Koda predstavlja območje: %1$s x %2$s \n • OsmAnd Live: odprava hroščev, posodobitve, ki so samodejno vključene v navigacijo, se objavljajo vsakih 30 minut \n \n - \\022 Zaznava znakov STOP po novem vpliva na usmerjanje vožnje -\n -\n • Z novim algoritmom so vrednosti spustov in vzponov na sledeh GPX bolj smiselne -\n + \\022 Zaznava znakov STOP po novem vpliva na usmerjanje vožnje +\n +\n • Z novim algoritmom so vrednosti spustov in vzponov na sledeh GPX bolj smiselne +\n \n • Čas hoje upošteva tudi vrsto terena (vzpon) po Naismithovem pravilu \n \n diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 0952a47d7e..bb1b048ded 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -22,6 +22,8 @@ Will be opened at Will be opened on Additional actions + GPX file with coordinates and data of the selected notes. + GPX file with coordinates and data of all notes. \u2022 Detection of stop signs now considers driving direction\n\n \u2022 New algorithm providing meaningful ascent/descent values for GPX tracks\n\n @@ -569,6 +571,7 @@ Donations Number of recipients Edits %1$s, rank %2$s, total edits %3$s + Edits %1$s, sum %2$s mBTC OSM Editors ranking OsmAnd Live subscription Subscribe @@ -2834,4 +2837,6 @@ File %1$s does not contain waypoints, import it as a track? Move Point Add to a GPX track + OSM Recipients + Total Donations diff --git a/OsmAnd/res/xml/paths.xml b/OsmAnd/res/xml/paths.xml index 78a4755a05..90217e4c1f 100644 --- a/OsmAnd/res/xml/paths.xml +++ b/OsmAnd/res/xml/paths.xml @@ -3,6 +3,9 @@ + path="share"/> + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/activities/ShowRouteInfoDialogFragment.java b/OsmAnd/src/net/osmand/plus/activities/ShowRouteInfoDialogFragment.java index 42cf8163ea..599d867829 100644 --- a/OsmAnd/src/net/osmand/plus/activities/ShowRouteInfoDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/ShowRouteInfoDialogFragment.java @@ -118,7 +118,7 @@ public class ShowRouteInfoDialogFragment extends DialogFragment { }); ((ImageView) view.findViewById(R.id.distance_icon)) - .setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_polygom_dark)); + .setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_route_distance)); ((ImageView) view.findViewById(R.id.time_icon)) .setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_time_span)); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index 379fb7339f..f811b6abc6 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -481,6 +481,15 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { return date + " • " + sz + " • " + getDuration(ctx, false); } + public String getTypeWithDuration(Context ctx) { + StringBuilder res = new StringBuilder(getType(ctx)); + if (isAudio() || isVideo()) { + updateInternalDescription(); + res.append(", ").append(getDuration(ctx, false)); + } + return res.toString(); + } + public String getPlainDuration(boolean accessibilityEnabled) { updateInternalDescription(); if (duration > 0) { diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index c43e4fb721..b7091cba4f 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -10,6 +10,7 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; +import android.support.v4.content.FileProvider; import android.support.v7.app.AlertDialog; import android.support.v7.view.ActionMode; import android.view.LayoutInflater; @@ -453,16 +454,17 @@ public class NotesFragment extends OsmAndListFragment { } private void shareItems(Set selected) { - ArrayList files = new ArrayList<>(); + ArrayList uris = new ArrayList<>(); for (Recording rec : selected) { File file = rec == SHARE_LOCATION_FILE ? generateGPXForRecordings(selected) : rec.getFile(); if (file != null) { - files.add(Uri.parse(file.getAbsolutePath())); + uris.add(FileProvider.getUriForFile(getContext(), getActivity().getPackageName() + ".fileprovider", file)); } } + Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); intent.setType("*/*"); - intent.putExtra(Intent.EXTRA_STREAM, files); + intent.putExtra(Intent.EXTRA_STREAM, uris); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if (Build.VERSION.SDK_INT > 18) { intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); @@ -470,16 +472,18 @@ public class NotesFragment extends OsmAndListFragment { startActivity(Intent.createChooser(intent, getString(R.string.share_note))); } - @Nullable - private File generateGPXForRecordings(Set selected) { - File externalCacheDir = getActivity().getExternalCacheDir(); - if (externalCacheDir == null) { - return null; + private Set getRecordingsForGpx(Set selected) { + if (selected.size() == 1 && selected.contains(SHARE_LOCATION_FILE)) { + return new HashSet<>(plugin.getAllRecordings()); } - File tmpFile = new File(externalCacheDir, "share/noteLocations.gpx"); + return selected; + } + + private File generateGPXForRecordings(Set selected) { + File tmpFile = new File(getActivity().getCacheDir(), "share/noteLocations.gpx"); tmpFile.getParentFile().mkdirs(); GPXFile file = new GPXFile(); - for (Recording r : selected) { + for (Recording r : getRecordingsForGpx(selected)) { if (r != SHARE_LOCATION_FILE) { String desc = r.getDescriptionName(r.getFileName()); if (desc == null) { @@ -492,6 +496,7 @@ public class NotesFragment extends OsmAndListFragment { wpt.link = r.getFileName(); wpt.time = r.getFile().lastModified(); wpt.category = r.getSearchHistoryType(); + wpt.desc = r.getTypeWithDuration(getContext()); getMyApplication().getSelectedGpxHelper().addPoint(wpt, file); } } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index fa7f286156..1fe1548665 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -205,7 +205,7 @@ public class NotesAdapter extends ArrayAdapter { setupBackground(holder.view); if (recording == NotesFragment.SHARE_LOCATION_FILE) { holder.title.setText(R.string.av_locations); - holder.description.setText(R.string.av_locations_descr); + holder.description.setText(getLocationsDescId()); } else { holder.title.setText(recording.getName(app, true)); holder.description.setText(recording.getExtendedDescription(app)); @@ -255,6 +255,13 @@ public class NotesAdapter extends ArrayAdapter { }); } + private int getLocationsDescId() { + if (selected.contains(NotesFragment.SHARE_LOCATION_FILE)) { + return selected.size() == 1 ? R.string.av_locations_all_desc : R.string.av_locations_selected_desc; + } + return R.string.av_locations_descr; + } + private void setupBackground(View view) { if (!portrait) { view.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.color_transparent)); diff --git a/OsmAnd/src/net/osmand/plus/liveupdates/Protocol.java b/OsmAnd/src/net/osmand/plus/liveupdates/Protocol.java index f7e41e3f62..5be7ad064d 100644 --- a/OsmAnd/src/net/osmand/plus/liveupdates/Protocol.java +++ b/OsmAnd/src/net/osmand/plus/liveupdates/Protocol.java @@ -23,6 +23,9 @@ public final class Protocol { public int regionCount; public float regionPercentage; public float btc; + public float eur; + public float eurRate; + public Recipient[] rows; } public static class UserRankingByMonth { @@ -48,5 +51,13 @@ public final class Protocol { public int users; public int changes; } - + + public static class Recipient { + String osmid; + int changes; + String btcaddress; + int rank; + int weight; + float btc; + } } diff --git a/OsmAnd/src/net/osmand/plus/liveupdates/ReportsFragment.java b/OsmAnd/src/net/osmand/plus/liveupdates/ReportsFragment.java index 049fccb5c0..ffb7762a7b 100644 --- a/OsmAnd/src/net/osmand/plus/liveupdates/ReportsFragment.java +++ b/OsmAnd/src/net/osmand/plus/liveupdates/ReportsFragment.java @@ -18,6 +18,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; @@ -52,6 +53,8 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect private static final Log LOG = PlatformUtil.getLog(ReportsFragment.class); public static final String OSM_LIVE_URL = "https://osmand.net/osm_live"; + public static final String EDITS_FRAGMENT = "NumberOfEditsFragment"; + public static final String RECIPIENTS_FRAGMENT = "RecipientsFragment"; private TextView contributorsTextView; private TextView editsTextView; @@ -70,11 +73,15 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect private ImageView numberOfEditsIcon; private ImageView donationsIcon; private ImageView numberOfRecipientsIcon; + private ImageView donationsTotalIcon; + private TextView donationsTotalTitle; + private TextView donationsTotalTextView; private TextView numberOfContributorsTitle; private TextView numberOfEditsTitle; private TextView numberOfRecipientsTitle; private TextView donationsTitle; private ProgressBar progressBar; + private LinearLayout donationsTotalLayout; private int inactiveColor; private int textColorPrimary; @@ -129,15 +136,17 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect String countryUrlString = selectedCountryItem.getDownloadName(); if (countryUrlString.length() > 0) { Bundle bl = new Bundle(); + boolean isRecipientsReport = v.getId() == R.id.numberOfRecipientsLayout; bl.putString(UsersReportFragment.URL_REQUEST, - String.format(USERS_RANKING_BY_MONTH, monthUrlString, countryUrlString)); + String.format(isRecipientsReport ? RECIPIENTS_BY_MONTH : USERS_RANKING_BY_MONTH, monthUrlString, countryUrlString)); userReportFragment.setArguments(bl); - userReportFragment.show(getChildFragmentManager(), "NumberOfEditsFramgnet"); + userReportFragment.show(getChildFragmentManager(), isRecipientsReport ? RECIPIENTS_FRAGMENT : EDITS_FRAGMENT); } } }; view.findViewById(R.id.numberOfContributorsLayout).setOnClickListener(listener); view.findViewById(R.id.numberOfEditsLayout).setOnClickListener(listener); + view.findViewById(R.id.numberOfRecipientsLayout).setOnClickListener(listener); countrySelectionFragment.initCountries(getMyApplication()); selectedCountryItem = countrySelectionFragment.getCountryItems().get(0); @@ -155,9 +164,11 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect numberOfEditsIcon = (ImageView) view.findViewById(R.id.numberOfEditsIcon); numberOfRecipientsIcon = (ImageView) view.findViewById(R.id.numberOfRecipientsIcon); donationsIcon = (ImageView) view.findViewById(R.id.donationsIcon); + donationsTotalIcon = (ImageView) view.findViewById(R.id.donationsTotalIcon); setThemedDrawable(numberOfContributorsIcon, R.drawable.ic_action_group2); setThemedDrawable(numberOfRecipientsIcon, R.drawable.ic_group); setThemedDrawable(donationsIcon, R.drawable.ic_action_bitcoin); + setThemedDrawable(donationsTotalIcon, R.drawable.ic_action_bitcoin); setThemedDrawable(numberOfEditsIcon, R.drawable.ic_map); @@ -165,6 +176,10 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect numberOfEditsTitle = (TextView) view.findViewById(R.id.numberOfEditsTitle); donationsTitle = (TextView) view.findViewById(R.id.donationsTitle); numberOfRecipientsTitle = (TextView) view.findViewById(R.id.numberOfRecipientsTitle); + donationsTotalLayout = (LinearLayout) view.findViewById(R.id.donationsTotal); + donationsTotalTitle = (TextView) view.findViewById(R.id.donationsTotalTitle); + donationsTotalTextView = (TextView) view.findViewById(R.id.donationsTotalTextView); + progressBar = (ProgressBar) view.findViewById(R.id.progress); @@ -203,7 +218,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect tryUpdateData(monthUrlString, countryUrlString); } - private void tryUpdateData(String monthUrlString, String regionUrlString) { + private void tryUpdateData(String monthUrlString, final String regionUrlString) { GetJsonAsyncTask.OnResponseListener onResponseListener = new GetJsonAsyncTask.OnResponseListener() { @Override @@ -251,24 +266,32 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect recipientsTextView.setText(String.valueOf(response.regionCount)); } if (donationsTextView != null) { - donationsTextView.setText(String.format("%.3f", response.regionBtc*1000.0) + " mBTC"); + donationsTextView.setText(String.format("%.3f", response.regionBtc*1000f) + " mBTC"); + } + if (donationsTotalLayout != null && + donationsTotalTextView != null) { + donationsTotalLayout.setVisibility(regionUrlString.isEmpty() ? View.VISIBLE : View.GONE); + donationsTotalTextView.setText(String.format("%.3f", response.btc*1000f) + " mBTC"); } } disableProgress(); } }; recChangesByMontAsyncTask.setOnResponseListener(recResponseListener); + clearTextViewResult(recipientsTextView); + clearTextViewResult(donationsTextView); + clearTextViewResult(donationsTotalTextView); - if (recipientsTextView != null) { - recipientsTextView.setText("-"); - } - if (donationsTextView != null) { - donationsTextView.setText("-"); - } String recfinalUrl = String.format(RECIPIENTS_BY_MONTH, monthUrlString, regionUrlString); recChangesByMontAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, recfinalUrl); } + private void clearTextViewResult(TextView textView) { + if (textView != null) { + textView.setText("-"); + } + } + @Override public void onSearchResult(CountryItem item) { selectedCountryItem = item; @@ -364,16 +387,19 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect numberOfEditsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_map, inactiveColor)); numberOfRecipientsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_group, inactiveColor)); donationsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_bitcoin, inactiveColor)); + donationsTotalIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_bitcoin, inactiveColor)); numberOfContributorsTitle.setTextColor(inactiveColor); numberOfEditsTitle.setTextColor(inactiveColor); numberOfRecipientsTitle.setTextColor(inactiveColor); donationsTitle.setTextColor(inactiveColor); + donationsTotalTitle.setTextColor(inactiveColor); progressBar.setVisibility(View.VISIBLE); contributorsTextView.setTextColor(inactiveColor); donationsTextView.setTextColor(inactiveColor); + donationsTotalTextView.setTextColor(inactiveColor); recipientsTextView.setTextColor(inactiveColor); editsTextView.setTextColor(inactiveColor); } @@ -383,17 +409,20 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect numberOfEditsIcon.setImageDrawable(getContentIcon(R.drawable.ic_map)); numberOfRecipientsIcon.setImageDrawable(getContentIcon(R.drawable.ic_group)); donationsIcon.setImageDrawable(getContentIcon(R.drawable.ic_action_bitcoin)); + donationsTotalIcon.setImageDrawable(getContentIcon(R.drawable.ic_action_bitcoin)); numberOfContributorsTitle.setTextColor(textColorSecondary); numberOfEditsTitle.setTextColor(textColorSecondary); numberOfRecipientsTitle.setTextColor(textColorSecondary); donationsTitle.setTextColor(textColorSecondary); + donationsTotalTitle.setTextColor(textColorSecondary); progressBar.setVisibility(View.INVISIBLE); contributorsTextView.setTextColor(textColorPrimary); editsTextView.setTextColor(textColorPrimary); donationsTextView.setTextColor(textColorPrimary); + donationsTotalTextView.setTextColor(textColorPrimary); recipientsTextView.setTextColor(textColorPrimary); } diff --git a/OsmAnd/src/net/osmand/plus/liveupdates/UsersReportFragment.java b/OsmAnd/src/net/osmand/plus/liveupdates/UsersReportFragment.java index b9c19676f1..9d03c3ccf8 100644 --- a/OsmAnd/src/net/osmand/plus/liveupdates/UsersReportFragment.java +++ b/OsmAnd/src/net/osmand/plus/liveupdates/UsersReportFragment.java @@ -1,7 +1,5 @@ package net.osmand.plus.liveupdates; -import java.util.Arrays; - import net.osmand.plus.R; import net.osmand.plus.base.BaseOsmAndDialogFragment; import net.osmand.plus.liveupdates.Protocol.RankingUserByMonthResponse; @@ -32,27 +30,48 @@ public class UsersReportFragment extends BaseOsmAndDialogFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.fragment_simple_list, container, false); ListView listView = (ListView) view.findViewById(android.R.id.list); - final ArrayAdapter adapter = new ListAdapter(getListItemIcon()); + final ArrayAdapter adapter = new ListAdapter(getListItemIcon()); String url = getArguments().getString(URL_REQUEST); //String reg = getArguments().getString(REGION_NAME); view.findViewById(R.id.progress).setVisibility(View.VISIBLE); - ((TextView)view.findViewById(R.id.titleTextView)).setText(R.string.osm_editors_ranking); - GetJsonAsyncTask task = new GetJsonAsyncTask<>(RankingUserByMonthResponse.class); - task.setOnResponseListener(new OnResponseListener() { + if (getTag().equals(ReportsFragment.EDITS_FRAGMENT)) { + ((TextView) view.findViewById(R.id.titleTextView)).setText(R.string.osm_editors_ranking); + GetJsonAsyncTask task = new GetJsonAsyncTask<>(RankingUserByMonthResponse.class); + task.setOnResponseListener(new OnResponseListener() { - @Override - public void onResponse(RankingUserByMonthResponse response) { - if (response != null && response.rows != null) { - for (UserRankingByMonth rankingByMonth : response.rows) { - adapter.add(rankingByMonth); + @Override + public void onResponse(RankingUserByMonthResponse response) { + if (response != null && response.rows != null) { + for (UserRankingByMonth rankingByMonth : response.rows) { + if (rankingByMonth != null) { + adapter.add(rankingByMonth); + } + } } + view.findViewById(R.id.progress).setVisibility(View.GONE); } - view.findViewById(R.id.progress).setVisibility(View.GONE); - } - }); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url); + }); + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url); + } else if (getTag().equals(ReportsFragment.RECIPIENTS_FRAGMENT)) { + ((TextView)view.findViewById(R.id.titleTextView)).setText(R.string.osm_recipients_label); + GetJsonAsyncTask task = new GetJsonAsyncTask<>(Protocol.RecipientsByMonth.class); + task.setOnResponseListener(new OnResponseListener() { + + @Override + public void onResponse(Protocol.RecipientsByMonth response) { + if (response != null && response.rows != null) { + for (Protocol.Recipient recipient : response.rows) { + if (recipient != null) { + adapter.add(recipient); + } + } + } + view.findViewById(R.id.progress).setVisibility(View.GONE); + } + }); + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url); + } listView.setAdapter(adapter); - ImageButton clearButton = (ImageButton) view.findViewById(R.id.closeButton); //setThemedDrawable(clearButton, R.drawable.ic_action_remove_dark); clearButton.setOnClickListener(new View.OnClickListener() { @@ -74,7 +93,7 @@ public class UsersReportFragment extends BaseOsmAndDialogFragment { super.onDetach(); } - private class ListAdapter extends ArrayAdapter { + private class ListAdapter extends ArrayAdapter { private final Drawable drawableLeft; @ColorInt private final int textColor; @@ -93,22 +112,28 @@ public class UsersReportFragment extends BaseOsmAndDialogFragment { } @Override - public View getView(int position, View convertView, ViewGroup parent) { - UserRankingByMonth item = getItem(position); - View v = convertView; + public View getView(int position, View v, ViewGroup parent) { if (v == null) { - LayoutInflater inflater = getActivity().getLayoutInflater(); - v = inflater.inflate(android.R.layout.simple_list_item_2, parent, false); + v = getActivity().getLayoutInflater().inflate(android.R.layout.simple_list_item_2, parent, false); } TextView text1 = (TextView) v.findViewById(android.R.id.text1); TextView text2 = (TextView) v.findViewById(android.R.id.text2); - text1.setText(item.user); - text2.setText(getString(R.string.osm_user_stat, - String.valueOf(item.changes), String.valueOf(item.rank), String.valueOf(item.globalchanges))); text1.setTextColor(textColor); text2.setTextColor(textSecondaryColor); text1.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, null, null, null); text1.setCompoundDrawablePadding(getResources().getDimensionPixelSize(R.dimen.list_content_padding)); + Object item = getItem(position); + if (item instanceof UserRankingByMonth) { + UserRankingByMonth rankingByMonth = (UserRankingByMonth) item; + text1.setText(rankingByMonth.user); + text2.setText(getString(R.string.osm_user_stat, + String.valueOf(rankingByMonth.changes), String.valueOf(rankingByMonth.rank), String.valueOf(rankingByMonth.globalchanges))); + } else if (item instanceof Protocol.Recipient){ + Protocol.Recipient recipient = (Protocol.Recipient) item; + text1.setText(recipient.osmid); + text2.setText(getString(R.string.osm_recipient_stat, + String.valueOf(recipient.changes), String.format("%.4f", (recipient.btc*1000f)))); + } return v; } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java index 990da169d1..19c62eeecd 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java @@ -201,9 +201,11 @@ public class AdvancedEditPoiFragment extends BaseOsmAndFragment if (!hasFocus) { if (!editPoiData.isInEdit()) { String s = tagEditText.getText().toString(); - editPoiData.removeTag(previousTag[0]); - editPoiData.putTag(s.toString(), valueEditText.getText().toString()); - previousTag[0] = s.toString(); + if (!previousTag[0].equals(s)) { + editPoiData.removeTag(previousTag[0]); + editPoiData.putTag(s, valueEditText.getText().toString()); + previousTag[0] = s; + } } } else { tagAdapter.getFilter().filter(tagEditText.getText()); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java index 146ec426f2..df1b6971b1 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java @@ -37,7 +37,7 @@ public class EditPoiData { category = app.getPoiTypes().getOtherPoiCategory(); entity = node; initTags(node); - updateTypeTag(getPoiTypeString()); + updateTypeTag(getPoiTypeString(), false); } public Map getAllTranslatedSubTypes() { @@ -109,15 +109,18 @@ public class EditPoiData { public Map getTagValues() { return Collections.unmodifiableMap(tagValues); } - + public void putTag(String tag, String value) { checkNotInEdit(); - try { + try { isInEdit = true; tagValues.remove(REMOVE_TAG_PREFIX+tag); + String oldValue = tagValues.get(tag); + if (oldValue == null || !oldValue.equals(value)) { + changedTags.add(tag); + } tagValues.put(tag, value); - changedTags.add(tag); notifyDatasetChanged(tag); } finally { isInEdit = false; @@ -193,9 +196,11 @@ public class EditPoiData { return hasChangesBeenMade; } - public void updateTypeTag(String string) { + public void updateTypeTag(String string, boolean userChanges) { tagValues.put(POI_TYPE_TAG, string); - changedTags.add(POI_TYPE_TAG); + if (userChanges) { + changedTags.add(POI_TYPE_TAG); + } retrieveType(); PoiType pt = getPoiTypeDefined(); if(pt != null) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java index 01c5e57447..663faba576 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java @@ -258,6 +258,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { poiNameEditText.setText(editPoiData.getTag(OSMSettings.OSMTagKey.NAME.getValue())); poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout); poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText); + poiTypeEditText.setText(editPoiData.getPoiTypeString()); poiTypeEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -270,7 +271,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { @Override public void afterTextChanged(Editable s) { if (!getEditPoiData().isInEdit()) { - getEditPoiData().updateTypeTag(s.toString()); + getEditPoiData().updateTypeTag(s.toString(), true); if (!getMyApplication().isApplicationInitializing()) { poiTypeTextInputLayout.setHint(editPoiData.getPoiCategory().getTranslation()); } @@ -279,7 +280,6 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { }); poiNameEditText.setOnEditorActionListener(mOnEditorActionListener); poiTypeEditText.setOnEditorActionListener(mOnEditorActionListener); - poiTypeEditText.setText(editPoiData.getPoiTypeString()); poiTypeEditText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(final View v, MotionEvent event) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java index a03185e54f..fa8a086283 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java @@ -37,6 +37,7 @@ import java.io.StringWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.text.MessageFormat; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -330,11 +331,20 @@ public class OpenstreetmapRemoteUtil implements OpenstreetmapUtil { EntityId id = new Entity.EntityId(EntityType.NODE, nodeId); Node entity = (Node) st.getRegisteredEntities().get(id); // merge non existing tags - for (String rtag : entity.getTagKeySet()) { - if (!deletedTag(n, rtag) && (!containsTag(n, rtag) || !tagChanged(n, rtag))) { - n.putTagNoLC(rtag, entity.getTag(rtag)); + Map updatedTags = new HashMap<>(); + for (String tagKey : entity.getTagKeySet()) { + if (tagKey != null && !deletedTag(n, tagKey)) { + addIfNotNull(tagKey, entity.getTag(tagKey), updatedTags); } } + if (n.getChangedTags() != null) { + for (String tagKey : n.getChangedTags()) { + if (tagKey != null) { + addIfNotNull(tagKey, n.getTag(tagKey), updatedTags); + } + } + } + n.replaceTags(updatedTags); if(MapUtils.getDistance(n.getLatLon(), entity.getLatLon()) < 10) { // avoid shifting due to round error n.setLatitude(entity.getLatitude()); @@ -353,18 +363,16 @@ public class OpenstreetmapRemoteUtil implements OpenstreetmapUtil { return null; } + private void addIfNotNull(String key, String value, Map tags) { + if (value != null) { + tags.put(key, value); + } + } + private boolean deletedTag(Node node, String tag) { return node.getTagKeySet().contains(EditPoiData.REMOVE_TAG_PREFIX + tag); } - private boolean containsTag(Node node, String tag) { - return node.getTagKeySet().contains(tag); - } - - private boolean tagChanged(Node node, String tag) { - return node.getChangedTags() != null && node.getChangedTags().contains(tag); - } - @Override public Node loadNode(Amenity n) { if (n.getId() % 2 == 1) {