diff --git a/OsmAnd/res/values-be/bidforfix.xml b/OsmAnd/res/values-be/bidforfix.xml new file mode 100644 index 0000000000..32364fd42e --- /dev/null +++ b/OsmAnd/res/values-be/bidforfix.xml @@ -0,0 +1,5 @@ + +Загрузка + %1$d падтрымала + сабрана: %d%% + diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index a6dfbf41c5..68cd2d2e53 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -101,8 +101,8 @@ хуткасьць вышыня Кропка - Імя GPX-файла - GPX файл паспяхова захаваны ў {0} + Назва GPX файлу + GPX файл пасьпяхова захаваны ў {0} Ствараць шляхі (ці выкарыстоўваць/рэдагаваць існуючыя файлы GPX) каб мераць адлегласьць паміж кропкамі. Захоўваць у GPX і потым карыстацца каб плянаваць шлях па GPX. Прылада для разьліку адлегласьцей й плянаваньня * Націсніце , каб адзначыць кропку.\n * Націсьніце і ўтрымлівайце на мапе, каб выдаліць папярэднюю кропку.\n * Націсьніце і ўтрымлівайце на кропцы, каб паглядзець і прыкласьці апісаньне.\n * Націсніце на віджэце вымярэньня, каб убачыць больш дзеяньняў. @@ -1242,11 +1242,11 @@ OsmAnd мае адкрыты зыходны код і актыўна разві SD карта даступная толькі для чытання.\nВы не можаце сьцягнуць мапы з Інтэрнэту. Файл распакоўваецца… Паварочвайце направа і рухайцеся - Паварочвайце рэзка направа і рухайцеся - Паварочвайце трохі направа і рухайцеся + Рэзка паварочвайце направа і рухайцеся + Павольна паварочвайце направа і рухайцеся Паварочвайце налева і рухайцеся - Паварочвайце рэзка налева і рухайцеся - Паварочвайце трохі налева і рухайцеся + Рэзка паварочвайце налева і рухайцеся + Павольна паварочвайце налева і рухайцеся Развярніцеся і рухайцеся Рухайцеся Далей @@ -1846,11 +1846,14 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Частак сьледу: %1$s Выберыце інтэрвал нарэзкі выбрана - Пад\ʼём вышыні: %1$s + Пад\ʼём/спад: %1$s Загрузка %1$s… Бягучы час Кропка шляху \n\nНацісьніце і ўтрымлівайце, каб убачыць на мапе Пачаць навігацыю з затрымкай Перапад вышынь: %1$s - + Захаваць як групу упадабаных + Абраць кропкі шляху + Тэкставыя пазнакі + diff --git a/OsmAnd/res/values-bs/strings.xml b/OsmAnd/res/values-bs/strings.xml index 17e88ec684..3b2013aa07 100644 --- a/OsmAnd/res/values-bs/strings.xml +++ b/OsmAnd/res/values-bs/strings.xml @@ -1,4 +1,5 @@ -"Promjene u 0.8.1 : " + +"Promjene u 0.8.1 : " Što prije Sačuvajte put kao GPX datoteku Kružni tok : idite %1$d izlaz i idite @@ -124,4 +125,6 @@ OpenMaps EU Spasi\n…trenutnu GPX traku GPS status - \ No newline at end of file + Ne + Da + diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index cd53fc7a5f..4fe57ec79d 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -1847,4 +1847,7 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània, %1$s \nPunts %1$s \nTraça %2$s Traça actual en gravació + Guarda com grup de preferits + Selecciona punts de pas + Etiquetes de text diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index fd858a1204..2c3283eec1 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -139,8 +139,8 @@ Navigace Nastavení způsobu navigace Obecná nastavení - Offline data - Spravovat offline data (mapy, trasy, hlasová data…) + Spravovat mapové soubory + Stáhnout a spravovat offline mapy uložené ve vašem zařízení Obecné Nastavení displeje, jazyka, zvuku a dalších parametrů Jméno uživatele @@ -151,15 +151,15 @@ Umožní běh aplikace při vypnutém displeji Natočení mapy - Stahování dokončeno.\n\t\n\tNa vektorové mapy můžete přepnout v menu (Mapová data -> Zdroj map -> Vektorové mapy OSM). + "Stahování dokončeno.\n\t\n\tNa vektorové mapy můžete přepnout v menu (Mapová data -> Zdroj map -> Vektorové mapy OSM). " Denní/noční režim Vylepšování Openstreetmap - \t OsmAnd využívá mapy založené na datech Openstreetmap.org (OSM). Program krom navigace umožňuje také přispívání k projektu Openstreetmap. Několika kliknutími tak můžete snadno vytvářet nové body zájmu (POI) nebo hlášení o chybách OSM.\n\t Pro začátek je pouze potřeba zadat přihlašovací informace v \'Nastavení\'->\'Obecné\'->\'OSM editace\'. + "OsmAnd využívá mapy založené na datech Openstreetmap.org (OSM). Program krom navigace umožňuje také přispívání k projektu Openstreetmap. Několika kliknutími tak můžete snadno vytvářet nové body zájmu (POI) nebo hlášení o chybách OSM.\n\t Pro začátek je pouze potřeba zadat přihlašovací informace v \'Nastavení\'->\'Obecné\'->\'OSM editace\'. \n\t Nové POI zadáte volbou \'Vytvořit POI\' v kontextovém menu mapy. Pak můžete zadat informace o novém POI a stisknutím tlačítka ho odeslat. \n\t Pokud v mapě najdete chybu, můžete ji nahlásit a přispět tak k jejímu rychlejšímu opravení. \n\t OSM chybu nahlásíte pomocí volby \'Otevřít chybu OSM\' v kontextovém menu mapy. Tím se otevře dialog, kde můžete zadat detailní popis problému. Chybu odešlete tlačítkem \'Přidat\'. -\n\t Pro zmíněné funkce je nutné internetové připojení. +\n\t Pro zmíněné funkce je nutné internetové připojení. " Nedostatek místa pro stažení %1$s MB dat (volné: %2$s). Volné místo: {2} MB. Stáhnout {0} soubor(y) ({1} MB)? @@ -291,7 +291,7 @@ Školství Pomoc v nouzi Zábava - Finance + Peníze Geocache Zdravotnictví Historie @@ -406,7 +406,7 @@ Režim aplikace Navigace - \t Pro zapnutí navigace musíte nejprve vybrat cílový bod. Poté vyberte \'Menu\'->\'Navigace\' na mapě a vyberte typ navigování. + "Pro zapnutí navigace musíte nejprve vybrat cílový bod. Poté vyberte \'Menu\'->\'Navigace\' na mapě a vyberte typ navigování. " Vyhledávání \tMůžete vyhledat místo přímo na mapě, podle adresy, umístění, jako bod zájmu (POI), nebo v seznamu oblíbených. \n\t Vyhledávání se otevře stisknutím \'Hledat\'. Nalezené místo pak můžete nechat zobrazit na mapě, nebo ho použít jako cílový bod. @@ -574,8 +574,7 @@ Jeďte rovně Pokračujte Stáhnout regiony - Děkujeme, že jste si zvolili OsmAnd. -\n Abyste mohli využívat všech možností aplikace, potřebujete soubory s mapami a hlasem, které si můžete stáhnout (Nastavení -> Data) nebo připravit sami. Poté budete moci hledat podle adres, hledat body zájmu (POI) a spojení veřejnou dopravou. + Děkujeme, že jste si zvolili OsmAnd. Abyste mohli využívat všech možností aplikace, potřebujete soubory s mapami a hlasem, které si můžete stáhnout (Nastavení → Spravovat mapové soubory) nebo připravit sami. Poté budete moci hledat podle adres, hledat body zájmu (POI) a spojení veřejnou dopravou. Hledám signál… Hledat poblíž poslední polohy Hledat poblíž @@ -736,7 +735,7 @@ Konec Mapa Nastavení - Oblíbené + Moje místa Hledat Hledat Zvolit POI @@ -827,7 +826,7 @@ Offline navigace v OsmAnd je dočasně nedostupná. Levostranný provoz Zvolte pokud jste v zemi, kde se jezdí vlevo - Klikněte zde pro stažení nebo aktualizaci offline dat.\nKlikněte na položku pro zobrazení více detailů, dlouze stiskněte pro deaktivaci nebo smazání.\nMnožství offline dat v zařízení (%1$s volného místa): + Klikněte zde pro stažení nebo aktualizaci offline map.\nKlikněte na položku pro zobrazení více detailů, dlouze stiskněte pro deaktivaci nebo smazání.\nMnožství offline dat v zařízení (%1$s volného místa): Startovní bod navigace ještě není zvolen Chcete přerušit stahování souboru? Pro správnou funkci aplikace je třeba základní mapa. Proto byla automaticky vybrána ke stažení. @@ -863,7 +862,7 @@ Všeobecná nastavení Jméno Kategorie - Správce offline dat + Správce mapových souborů SSS.SSSSS SSS MM.MMMMM SSS MM ss.sssss @@ -1022,7 +1021,7 @@ Mezicíl Cíl je příliš daleko od nejbližší cesty. Přidat označení -Pokročilé… +Pokročilý režim… \tOsmAnd podporuje několik konfigurovatelných profilů pro různé způsoby dopravy. \t\nProfil můžete změnit tlačítkem v levém dolním rohu mapové obrazovky (ikona auta, kola nebo chodce) nebo při zadávání navigace. @@ -1096,13 +1095,14 @@ Ostatní mapy Máte nainstalovanou starou verzi modulu OsMoDroid, která potřebuje být aktualizována. "\tVětšina přijímačů GPS měří výškové souřadnice v systému WGS84. Převod z něj do lokálního systému vyžaduje korekci závislou na pozici. -\n\tLepší aproximace k těmro lokálním systémům je systém EGM96. OsmAnd nyní podporuje automatické zobrazení nadmořské výšky v tomto systému.\n\tPro zobrazení výšky v systému EGM96 stáhněte soubor WW15MGH.DAC ve Správci offline dat (originál souboru je na http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC). " +\n\tLepší aproximace k těmro lokálním systémům je systém EGM96. OsmAnd nyní podporuje automatické zobrazení nadmořské výšky v tomto systému.\n\tPro zobrazení výšky v systému EGM96 stáhněte soubor WW15MGH.DAC ve Správci offline dat (originál souboru je na http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC). " + Modul OsMoDroid je rozšíření OsmAnd pro použití s aplikací OsModroid pro přímý přenos pozice. Informace o službě OsModroid jsou dostupné na http://esya.ru. Modul OsMoDroid Modul zvukové/video poznámky - Tento modul umožňuje stáhnout mapy vrstevnic (Stáhnout mapy -> Menu -> Ostatní mapy) pro určitou oblast a použít je s offline mapami. + Tento modul umožňuje stáhnout mapy vrstevnic (Nastavení → Správce mapových souborů → Vyberte požadovaný typ map). Modul vrstevnice Vrstevnice GPS pozice pro záznam zvukové poznámky ještě není známa. Pokud chcete použít specifickou lokaci použijte \"Možnosti bodu\" @@ -1520,7 +1520,7 @@ s často kladenými otázkami. Relace není k dispozici, prosím zkontrolujte že je zapnuta volba \'Odesílat pozice\'. Sdílet relaci Relace URL k sledování zařízení (%1$s) - Aby bylo možné připojit cílové zařízení %2$s, klikněte na link %3$s nebo určete ID sledovacího zařízení (%1$s) + Aby bylo možné připojit cílové zařízení %2$s, klikněte na link %3$s nebo určete ID sledovaného zařízení (%1$s) Interval logování Vyberte časový interval odesílání polohy dnů @@ -1570,7 +1570,7 @@ s často kladenými otázkami. Uložit Sdílet Oblíbené sdílené přes OsmAnd - Neplatný formát : %s + Neplatný formát: %s Sledovat Přihlásit se Aby bylo možné vytvořit skupiny musíte být registrovaným uživatelem OsMo. @@ -1622,4 +1622,8 @@ s často kladenými otázkami. Právě nahrávaná trasa Bod na trase \n\nStiskněte a podržte pro zobrazení na mapě - + Uložit jako skupinu oblíbených + Vybrat body na trase + Textové popisky + Online OSM mapová klasifikace s obrázky + diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index bdf0713eb9..0311c9f1a5 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -1879,9 +1879,9 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, Gennemsnitshastighed: %1$s Maks hastighed: %1$s Gennemsnitshøjde: %1$s - Højdeforskel: %1$s - Højdestigninger: %1$s - Periode: %1$s + Højdeinterval: %1$s + Op/ned: %1$s + Tidsrum: %1$s Tid i bevægelse: %1$s Segment %1$s punkter @@ -1890,7 +1890,7 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, %1$s \nRutepunkter %2$s %1$s\nPunkter %1$s\nSpor %2$s - Aktuel optager spor + Aktuelt optagelsesspor Underspor: %1$s Aktuel tid Rutepunkt @@ -1899,4 +1899,7 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, valgt Vælg opdelingsinterval Indlæser %1$s… + Gem som en gruppe af favoritter + Vælg rutepunkter + Tekstetiketter diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 5eab9acd58..86bf3ca961 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -149,7 +149,7 @@ Höhenlinien anzeigen Erhöht den dargestellten Detailgrad der Karte Mehr Details in Karte - Aktivieren Sie das Online-Karten-Plugin, um andere Kartenquellen nutzen zu können. + Aktivieren Sie das Online-Karten-Plugin, um andere Kartenquellen nutzen zu können Online- und Kachel-Karten Online-Karten verwenden (lädt Kacheln aus dem Internet und speichert diese auf der SD-Karte) Online-Karten @@ -392,7 +392,7 @@ Nie Nachführung nur bei aktiver Navigation Kartennachführung erfolgt nur während Navigation. - Kartennachführung aktiv + Kartennachführung aktiv. Vektor Renderer spezif. Optionen Overlay / Underlay Einstellungen Kartenquelle @@ -793,7 +793,7 @@ Sprachpaket für Navigation auswählen (Sprachcodes siehe ISO 639-1) Sprachansagen Sprachansagen werden initialisiert… - Sprachpaket-Version wird nicht unterstützt. + Sprachpaket-Version wird nicht unterstützt Sprachpaket ist defekt Das aktuelle Sprachpaket ist nicht verfügbar @@ -839,8 +839,8 @@ Navigationsanwendung OsmAnd POI-Daten wurden erfolgreich aktualisiert ({0} wurden geladen) Fehler beim aktualisieren der Offline-Daten - Fehler beim Herunterladen der Daten vom Server. - Für dieses Gebiet sind keine POI gespeichert. + Fehler beim Herunterladen der Daten vom Server + Für dieses Gebiet sind keine POI gespeichert Aktualisierung von POI ist für kleine Zoomeinstellungen nicht verfügbar POI aktualisieren Wollen Sie die Daten via Internet aktualisieren? @@ -870,7 +870,7 @@ Offline Daten für {0} existieren schon ({1}). Wollen Sie die überschreiben ({2})? Adresse Daten erfolgreich heruntergeladen - I/O Fehler aufgetreten. + I/O Fehler aufgetreten Herunterladen… Die Liste der verfügbaren Regionen wird geladen… @@ -1431,7 +1431,7 @@ Version : Über Versionsinfo, Lizenz, Projekt Mitglieder - Tips + Tipps Änderungen in 1.6: \n\t* Unterstützung von Full-HD Geräten \n\t* Unterstützung von transparentem Kartenhintergrund diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 1c740220e7..b79d1474ff 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -1784,4 +1784,7 @@ Afganistán, Albania, Alemania, Andorra, Angola, Anguila, Antigua y Barbuda, Ant Descendido/ascendido: %1$s Tiempo actual Punto de ruta + Seleccionar puntos de ruta + Etiquetas de texto + Guardar como grupo de favoritos diff --git a/OsmAnd/res/values-eu/strings.xml b/OsmAnd/res/values-eu/strings.xml index ab2185ce93..d7e5120df8 100644 --- a/OsmAnd/res/values-eu/strings.xml +++ b/OsmAnd/res/values-eu/strings.xml @@ -266,7 +266,7 @@ ⏎\n⇥⇥OsmAnd (OSM Automated Navigation Directions)⏎\n⏎\n⇥⇥OsmAnd kode irekiko nabigaziorako aplikazioa da, OpenStreetMapeko (OSM) mota askotako munduko mapetara sarbidearekin. Mapa guztiak (bektore edo tesela mapak) telefonoaren memoria txartelean gorde daitezke, lineaz kanpoko erabilpena bermatzeko. OsmAndek ere lineaz kanpoko eta sareko ibilbideak eskaintzen ditu, txandakako ahots gidaritzarekin.⏎\n⏎\n⇥⇥Ezaugarri nagusi batzuk:⏎\n⇥⇥- Lineaz kanpoko erabateko erabilpena (bektore edo tesela mapak gorde ondoren aukeratu daitezken karpetetan)⏎\n⇥⇥- Lineaz kanpoko mundu guztiko mapa konpaktuak eskuragarri⏎\n⇥⇥- Muga gabeko herrialde edo eskualdeetako mapen deskarga, aplikaziotik zuzenean⏎\n⇥⇥- Lineaz kanpoko WIkipediako erabilpena (deskargatu Wikipediako POIak), turismorako erabilgarriak⏎\n⇥⇥- Gain-geruza desberdin asko ikusi daitezke, GPX edo ibilbide bidea, interes puntuak (POI), gogokoenak, sestra-kurbak, garraio publikoaren geltokiak, geruza gardeneko mapa gehigarriak.⏎\n⇥⇥- Lineaz kanpoko helbide eta lekuen bilatzailea (POIak)⏎\n⇥⇥- Lineaz kanpoko ibilbide motzetarako jarraipena (esperimentala)⏎\n⇥⇥- Kotxea, txirrinda eta oinezkoentzat modua:⏎\n⇥⇥- aukerazko egun/gau ikuspegi automatizatua⏎\n⇥⇥- aukerazko abiaduraren araberako maparen zooma⏎\n⇥⇥- aukerazko maparen alineazioa, iparrorratzaren edo norabidearen araberakoa⏎\n⇥⇥- aukerazko errei gidaritza, abiadura muga bistaratzea, grabaketa edo TTS (ahots bihurgailua) motorra⏎\n⏎\n⇥⇥OsmAndeko dohaineko bertsioaren mugak:⏎\n⇥⇥- Mapa kopuruak deskargatzeko muga⏎\n⇥⇥- Wikipediako POIetara lineaz kanpoko sarbiderik ez⏎\n⏎\n⇥⇥OsmAnd aktiboki garatua izaten ari da eta proiektuaren prozesuak dituen garatze, programatze eta funtzionalitate berrien probak egiteko behar den finantziazio laguntzetan ere oinarritzen da. OsmAnd+ erosiz gero, aplikazioa are zirraragarria izatea laguntzen duzu! Ezaugarri berriak finantzatzea edo dohaintza orokor bat egitea posible da osman.net-en ⏎\nOsmAnd (OSM Automated Navigation Directions) mapa eta nabigaziorako aplikazioa da, OpenStreetMapeko (OSM) aske, mundu osoko eta kalitate handiko datuetara sarbidearekin. Mapen datu guztiak zure gailuaren memoria txartelean gorde daiteke lineaz kanpoko erabilpena eduki dezazun. Zure gailuaren GPSaren bitartez, OsmAnd-ek nabigazioa eskaintzen dizu, ikusmenezko edo entzutezko gidaritzarekin, kotxe, txirrinda edo oinezkoentzat. Funtzionalitate guztiak bai sarean bai lineaz kanpo funtzionatzen dute (ez dago interneten beharrik).⏎\n⏎\nEzaugarri nagusi batzuk:⏎\n⏎\nNabigazioa⏎\n- Sarean (azkar) edo lineaz kanpo (atzerrian zaudenean roaming kargarik gabe) funtzionatzen du⏎\n- Txandakako ahozko gidaritza (grabatutako eta sintetizatutako ahotsak)⏎\n- Aukerako bide gidaritza, kaleen izenak, eta estimatutako iritsiera ordua⏎\n- Ibilbidearen erdian geldiuneak jarri daitezke⏎\n- Ibilbidetik desbideratzen bazara, automatikoki birkalkulatuko du ibilbidea⏎\n- Leku bilatzailea helbidearen, motaren (adibidez: jatetxea, hotel, gasolindegia, museoa) edo koordenaden arabera⏎\n⏎\nMapen ikuspena⏎\n- Zure kokapena eta orientazioa agertzen da⏎\n- Aukeraz, mapa iparrorratzarekin edo zure norabidearekin mugituko da⏎\n- Gorde zure leku garrantzitsuenak Gogokoetan⏎\n- Zure inguruko POIak (Interes puntuak) ikustea⏎\n- Tesela bereziak ikusi daitezke sarean⏎\n- Satelite irudiak (Bingetik) ikusi daitezke⏎\n- Gain-geruza desberdinak ikusi daitezke, ibilbidea/nabigazioaren GPX bidea eta mapa garden gehigarriak⏎\n- Leku izenak ingelesez, tokiko hizkuntzan edo fonetikoki idatzia ikusteko aukera dago⏎\n⏎\nOpenStreetMap eta Wikipediako datuen erabilpena:⏎\n- Munduko proiektu kolaboratibo hoberenen kalitate handiko informazioa⏎\n- OpenStreetMapeko munduko mapak, herrialde edo eskualde bakoitza eskuragarri dago⏎\n- Wikipediako POIak, turismorako onak (dohaineko bertsioan ez daude erabilgarri)⏎\n- Muga gabeko dohaineko deskarga, aplikaziotik zuzenean (dohaineko bertsioan 16 mapa fitxategiko muga)⏎\n- Mapa eguneratuak beti (gutxienez eguneraketa bat hilabetean)⏎\n- Lineaz kanpoko bektore mapa konpaktuak⏎\n- Mapa osoa edo errepide sarea bakarrik aukeratu daiteke (Adibidez: Japonia guztia 700 MB dira, edo errepide sarea 200 MB bakarrik)⏎\n- Sareko edo katxeatutako tesela mapak jasaten ditu ere⏎\n⏎\nSegurtasun ezaugarriak⏎\n- Aukerazko eguna/gaua ikuspegi kommutazio automatikoa⏎\n- Aukerazko abiadura mugak agertzea, gainditzerakoan abisatzen dizuna⏎\n- Aukerazko abiaduraren araberako mapa zooma⏎\n- Partekatu zure kokapena, zure lagunek uneoro jakin dezaten non zauden⏎\n⏎\nTxirrinda eta oinezkoen ezaugarriak⏎\n- Mapek oinezko, mendiko eta txirrinda bideak dakartzate, kanpo jardueretako aproposa.⏎\n- Ibilbide eta ikuspegi bereziak txirrinda eta oinezkoentzako⏎\n- Aukerazko garraio publikoaren geltokiak (autobus, tranbia, trena) autobus-linien izenak barne⏎\n- Aukerazko bidaiaren grabaketa GPX fitxategi batera edo sareko zerbitzu batera⏎\n- Abiadura eta altuera azaltzeko aukera⏎\n- Sestra-kurbak eta mendi itzalak (plugin gehigarri batez) erakusteko aukera⏎\n⏎\nOpenStreetMapera zuzeneko laguntza⏎\n- Mapetako akatsak salatu⏎\n- GPX bideak igo aplikaziotik OSMra zuzenean⏎\n- POIak gehitu eta zuzenean OSMra igo (edo geroago lineaz kanpo egon ezkero)⏎\n- Aukerazko bidai grabaketa atzeko planoan bada ere (gailua esekituta dagoen bitartean)⏎\n⏎\nOsmAnd kode irekiko proiektua da, eta aktiboki garatua izaten ari da. Edozeinek lagundu dezake aplikazioarekin, erroreak salatzen, itzulitakoa hobetzen, edo ezaugarri berriak programatzen. Proiektua hobetzeko etengabeko egoeran dago garatzaileen eta erabiltzaileen interakzio modu hauei esker. Era berean, proiektuaren prozesuak dituen garatze, programatze eta funtzionalitate berrien probak egiteko behar den finantziazio laguntzetan ere oinarritzen da. OsmAnd+ erosiz gero, aplikazioa are zirraragarria izatea laguntzen duzu! Ezaugarri berriak finantzatzea edo dohaintza orokor bat egitea posible da osman.net-en.⏎\n⏎\n⏎\nGutxi gorabeherako mapa estaldura eta kalitatea:⏎\n- Mendebaldeko Europa: ****⏎\n- Ekialdeko Europa: ***⏎\n- Errusia: ***⏎\n- Ipar Amerika: ***⏎\n- Hego Amerika: **⏎\n- Asia: **⏎\n- Japonia & Korea: ***⏎\n- Ekialde hurbila: **⏎\n- Afrika: **⏎\n- Antartika: *⏎\n⏎\nJasandako herrialdeen lista (funtsean mundu osoa!):⏎\nAfganistan, Albania, Aljeria, Andorra, Angola, Aingira, Antigua eta Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamak, Bahrein, Bangladesh, Barbados, Bielorrusia, Belgika, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Bosnia eta Herzegovina, Botswana, Brasil, Birjina britainiar uharteak, Brunei, Bulgaria, Burkina Faso, Burundi, Kanbodia, Kamerun, Kanada, Kabo Berde, Afrika Erdiko Errepublika, Txad, Txile, Txina, Kolonbia, Komoreak, Kongo, Kosta Rika, Boli Kosta, Kroazia, Kuba, Curaçao, Txipre, Txekia, Danimarka, Djibuti, Dominika, Errepublika Dominikarra, Ekuador, Egipto, El Salvador, Ekuatorial Ginea, Eritrea, Estonia, Etiopia, Euskal Herria, Fiji, Finlandia, Frantzia, Guyana Frantsesa, Polinesia Frantsesa, Gabon, Gambia, Georgia, Alemania, Ghana, Gibraltar, Grezia, Groenlandia, Grenada, Guadalupe, Guam, Guatemala, Guernesey, Ginea, Ginea-Bissau, Guyana, Haiti, Vatikano, Honduras, Hong Kong, Hungaria, Islandia, India, Indonesia, Iran, Irak, Irlanda, Man, Israel, Italia, Jamaika, Japonia, Jersey, Jordania, Kazakhstan, Kenya, Kiribati, Ipar Korea eta Hego Korea, Kuwait, Kirgizistan, Laos, Letpmoa, Libano, Lesotho, Liberia, Libia, Liechtenstein, Lituania, Luxenburgo, Makao, Mazedonia, Madagaskar, Malawi, Malaysia, Maldivak, Mali, Malta, Martinika, Mauritania, Maurizio, Mayotte, Mexiko, Mikronesia, Moldavia, Monako, Mongolia, Montenegro, Montserrat, Maroko, Mozambike, Myanmar, Namibia, Nauru, Nepal, Herbehereak, Antilla herbeheretarrak, Kaledonia Berria, Zeelanda Berria, Nikaragua, Niger, Nigeria, Norvegia, Oman, Pakistan, Palau, Palestina, Panama, Papua Ginea Berria, Paraguai, Peru, Filipinak, Polonia, Portugal, Puerto Rico, Qatar, Errumania, Errusia, Ruanda, San Bartolome, Santa Elena, Saint Kitts eta Nevis, Santa Lucia, San Martin, Saint Pierre eta Mikelune, Saint Vincent eta Grenadinak, Samoa, San Marino, Saudi Arabia, Senegal, Serbia, Seychelleak, Sierra Leona, Singapur, Eslovakia, Eslovenia, Somalia, Hego Africa, Hego Georgia, Hego Sudan, Espainia, Sri Lanka, Sudan, Surinam, Swazilandia, Suedia, Suitza, Siria, Taiwan, Tadjikistan, Tanzania, Tailandia, Timor-Leste, Togo, Tokelau, Tonga, Trinidad eta Tobago, Tunisia, Turkia, Turkmenistan, Tuvalu, Uganda, Ukraina, Arabiar Emirerri Batuak, Erresuma Batua, Ameriketako Estatu Batuak, Uruguai, Uzbekistan, Vanuatu, Venezuela, Vietnam, Wallis eta Futuna, Sahara, Yemen, Zambia, Zimbabwe.⏎\n⇥ OsmAnd+ Mapak & Nabigazioa - Lineaz Kanpoko eta Sare Bidezko OSM Mapetarako Mapa Ikusle eta Nabigatzaile Mugikor Globala\n + Lineaz Kanpoko eta Sare Bidezko OSM Mapetarako Mapa Ikusle eta Nabigatzaile Mugikor Globala ⏎\n⇥⇥OsmAnd+ (OSM Automated Navigation Directions)⏎\n⏎\n⇥⇥OsmAnd+ kode irekiko nabigaziorako aplikazioa da, OpenStreetMapeko (OSM) mota askotako munduko mapetara sarbidearekin. Mapa guztiak (bektore edo tesela mapak) telefonoaren memoria txartelean gorde daitezke, lineaz kanpoko erabilpena bermatzeko. OsmAndek ere lineaz kanpoko eta sareko ibilbideak eskaintzen ditu, txandakako ahots gidaritzarekin.⏎\n⏎\n⇥⇥OsmAnd+ aplikazioaren ordaindutako bertsioa da, hau erosiz gero proiektua aurrera eramaten laguntzen ari zara, ezaugarri berrien garapena finantzatzen, eta gainera, azken eguneraketak jasoko dituzu.⏎\n⏎\n⇥⇥Ezaugarri nagusi batzuk:⏎\n⇥⇥- Lineaz kanpoko erabateko erabilpena (bektore edo tesela mapak gorde ondoren aukeratu daitezken karpetetan)⏎\n⇥⇥- Lineaz kanpoko mundu guztiko mapa konpaktuak eskuragarri⏎\n⇥⇥- Muga gabeko herrialde edo eskualdeetako mapen deskarga, aplikaziotik zuzenean⏎\n⇥⇥- Lineaz kanpoko WIkipediako erabilpena (deskargatu Wikipediako POIak), turismorako erabilgarriak⏎\n⇥⇥- Gain-geruza desberdin asko ikusi daitezke, GPX edo ibilbide bidea, interes puntuak (POI), gogokoenak, sestra-kurbak, garraio publikoaren geltokiak, geruza gardeneko mapa gehigarriak.⏎\n⇥⇥- Lineaz kanpoko helbide eta lekuen bilatzailea (POIak)⏎\n⇥⇥- Lineaz kanpoko ibilbide motzetarako jarraipena (esperimentala)⏎\n⇥⇥- Kotxea, txirrinda eta oinezkoentzat modua:⏎\n⇥⇥- aukerazko egun/gau ikuspegi automatizatua⏎\n⇥⇥- aukerazko abiaduraren araberako maparen zooma⏎\n⇥⇥- aukerazko maparen alineazioa, iparrorratzaren edo norabidearen araberakoa⏎\n⇥⇥- aukerazko errei gidaritza, abiadura muga bistaratzea, grabaketa edo TTS (ahots bihurgailua) motorra⏎\n⇥ ⏎\nOsmAnd (OSM Automated Navigation Directions) mapa eta nabigaziorako aplikazioa da, OpenStreetMapeko (OSM) aske, mundu osoko eta kalitate handiko datuetara sarbidearekin. Mapen datu guztiak zure gailuaren memoria txartelean gorde daiteke lineaz kanpoko erabilpena eduki dezazun. Zure gailuaren GPSaren bitartez, OsmAnd-ek nabigazioa eskaintzen dizu, ikusmenezko edo entzutezko gidaritzarekin, kotxe, txirrinda edo oinezkoentzat. Funtzionalitate guztiak bai sarean bai lineaz kanpo funtzionatzen dute (ez dago interneten beharrik).⏎\n⏎\nEzaugarri nagusi batzuk:⏎\n⏎\nNabigazioa⏎\n- Sarean (azkar) edo lineaz kanpo (atzerrian zaudenean roaming kargarik gabe) funtzionatzen du⏎\n- Txandakako ahozko gidaritza (grabatutako eta sintetizatutako ahotsak)⏎\n- Aukerako bide gidaritza, kaleen izenak, eta estimatutako iritsiera ordua⏎\n- Ibilbidearen erdian geldiuneak jarri daitezke⏎\n- Ibilbidetik desbideratzen bazara, automatikoki birkalkulatuko du ibilbidea⏎\n- Leku bilatzailea helbidearen, motaren (adibidez: jatetxea, hotel, gasolindegia, museoa) edo koordenaden arabera⏎\n⏎\nMapen ikuspena⏎\n- Zure kokapena eta orientazioa agertzen da⏎\n- Aukeraz, mapa iparrorratzarekin edo zure norabidearekin mugituko da⏎\n- Gorde zure leku garrantzitsuenak Gogokoetan⏎\n- Zure inguruko POIak (Interes puntuak) ikustea⏎\n- Tesela bereziak ikusi daitezke sarean⏎\n- Satelite irudiak (Bingetik) ikusi daitezke⏎\n- Gain-geruza desberdinak ikusi daitezke, ibilbidea/nabigazioaren GPX bidea eta mapa garden gehigarriak⏎\n- Leku izenak ingelesez, tokiko hizkuntzan edo fonetikoki idatzia ikusteko aukera dago⏎\n⏎\nOpenStreetMap eta Wikipediako datuen erabilpena:⏎\n- Munduko proiektu kolaboratibo hoberenen kalitate handiko informazioa⏎\n- OpenStreetMapeko munduko mapak, herrialde edo eskualde bakoitza eskuragarri dago⏎\n- Wikipediako POIak, turismorako onak (dohaineko bertsioan ez daude erabilgarri)⏎\n- Muga gabeko dohaineko deskarga, aplikaziotik zuzenean (dohaineko bertsioan 16 mapa fitxategiko muga)⏎\n- Mapa eguneratuak beti (gutxienez eguneraketa bat hilabetean)⏎\n- Lineaz kanpoko bektore mapa konpaktuak⏎\n- Mapa osoa edo errepide sarea bakarrik aukeratu daiteke (Adibidez: Japonia guztia 700 MB dira, edo errepide sarea 200 MB bakarrik)⏎\n- Sareko edo katxeatutako tesela mapak jasaten ditu ere⏎\n⏎\nSegurtasun ezaugarriak⏎\n- Aukerazko eguna/gaua ikuspegi kommutazio automatikoa⏎\n- Aukerazko abiadura mugak agertzea, gainditzerakoan abisatzen dizuna⏎\n- Aukerazko abiaduraren araberako mapa zooma⏎\n- Partekatu zure kokapena, zure lagunek uneoro jakin dezaten non zauden⏎\n⏎\nTxirrinda eta oinezkoen ezaugarriak⏎\n- Mapek oinezko, mendiko eta txirrinda bideak dakartzate, kanpo jardueretako aproposa.⏎\n- Ibilbide eta ikuspegi bereziak txirrinda eta oinezkoentzako⏎\n- Aukerazko garraio publikoaren geltokiak (autobus, tranbia, trena) autobus-linien izenak barne⏎\n- Aukerazko bidaiaren grabaketa GPX fitxategi batera edo sareko zerbitzu batera⏎\n- Abiadura eta altuera azaltzeko aukera⏎\n- Sestra-kurbak eta mendi itzalak (plugin gehigarri batez) erakusteko aukera⏎\n⏎\nOpenStreetMapera zuzeneko laguntza⏎\n- Mapetako akatsak salatu⏎\n- GPX bideak igo aplikaziotik OSMra zuzenean⏎\n- POIak gehitu eta zuzenean OSMra igo (edo geroago lineaz kanpo egon ezkero)⏎\n- Aukerazko bidai grabaketa atzeko planoan bada ere (gailua lo moduan dagoen bitartean)⏎\n⏎\nOsmAnd kode irekiko proiektua da, eta aktiboki garatua izaten ari da. Edozeinek lagundu dezake aplikazioarekin, erroreak salatzen, itzulitakoa hobetzen, edo ezaugarri berriak programatzen. Proiektua hobetzeko etengabeko egoeran dago garatzaileen eta erabiltzaileen interakzio modu hauei esker. Era berean, proiektuaren prozesuak dituen garatze, programatze eta funtzionalitate berrien probak egiteko behar den finantziazio laguntzetan ere oinarritzen da. OsmAnd+ erosiz gero, aplikazioa are zirraragarria izatea laguntzen duzu! Ezaugarri berriak finantzatzea edo dohaintza orokor bat egitea posible da osman.net-en.⏎\n⏎\n⏎\nGutxi gorabeherako mapa estaldura eta kalitatea:⏎\n- Mendebaldeko Europa: ****⏎\n- Ekialdeko Europa: ***⏎\n- Errusia: ***⏎\n- Ipar Amerika: ***⏎\n- Hego Amerika: **⏎\n- Asia: **⏎\n- Japonia & Korea: ***⏎\n- Ekialde hurbila: **⏎\n- Afrika: **⏎\n- Antartika: *⏎\n⏎\nJasandako herrialdeen lista (funtsean mundu osoa!):⏎\nAfghanistan, Albania, Aljeria, Andorra, Angola, Aingira, Antigua eta Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamak, Bahrein, Bangladesh, Barbados, Bielorrusia, Belgika, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Bosnia eta Herzegovina, Botswana, Brasil, Birjina britainiar uharteak, Brunei, Bulgaria, Burkina Faso, Burundi, Kanbodia, Kamerun, Kanada, Kabo Berde, Afrika Erdiko Errepublika, Txad, Txile, Txina, Kolonbia, Komoreak, Kongo, Kosta Rika, Boli Kosta, Kroazia, Kuba, Curaçao, Txipre, Txekia, Danimarka, Djibuti, Dominika, Errepublika Dominikarra, Ekuador, Egipto, El Salvador, Ecuatorial Ginea, Eritrea, Estonia, Etiopia, Euskal Herria, Fiji, Finlandia, Frantzia, Guyana Frantsesa, Polinesia Frantsesa, Gabon, Ganbia, Georgia, Alemania, Ghana, Gibraltar, Grezia, Groenlandia, Grenada, Guadalupe, Guam, Guatemala, Guernsey, Ginea, Ginea-Bissau, Guyana, Haiti, Vatikano, Honduras, Hong Kong, Hungaria, Island, India, Indonesia, Iran, Irak, Irlanda, Man, Israel, Italia, Jamaica, Japonia, Jersey, Jordania, Kazakhstan, Kenia, Kiribati, Ipar Korea eta Hego Korea, Kuwait, Kirgizstan, Laos, Letpmoa, Libano, Lesotho, Liberia, Libia, Liechtenstein, Lituania, Luxenburgo, Makao, Mazedonia, Madagaskar, Malawi, Malaysia, Maldivak, Mali, Malta, Martinika, Mauritania, Maurizio, Mayotte, Mexico, Micronesia, Moldavia, Monako, Mongolia, Montenegro, Montserrat, Maroko, Mozambike, Myanmar, Namibia, Nauru, Nepal, Herbeherak, Antilla herbeheretarrak, Caledonia Berria, Zelanda Berria, Nikaragua, Niger, Nigeria, Norbegia, Oman, Pakistan, Palau, Palestina, Panama, Papua Ginea Berria, Paraguai, Peru, Filipinak, Polonia, Portugal, Puerto Rico, Qatar, Errumania, Errusia, Ruanda, San Bartolome, Santa Elena, Saint Kitts eta Nevis, Santa Lucia, San Martin, Saint Pierre eta Mikelune, Saint Vincent eta Grenadinak, Samoa, San Marino, Saudi Arabia, Senegal, Serbia, Seychelleak, Sierra Leona, Singapur, Eslovakia, Eslovenia, Somalia, Hego Africa, Hego Georgia, Hego Sudan, Espainia, Sri Lanka, Sudan, Surinam, Swazilandia, Suegia, Suiza, Siria, Taiwan, Tajikistan, Tanzania, Tailandia, Timor-Leste, Togo, Tokelau, Tonga, Trinidad eta Tobago, Tunisia, Turkia, Turkmenistan, Tuvalu, Uganda, Ukraina, Arabiar Emirerri Batuak, Erresuma Batua, Ameriketako Estatu Batuak, Uruguai, Uzbekistan, Vanuatu, Venezuela, Vietnam, Wallis eta Futuna, Sahara, Yemen, Zambia, Zimbabwe.⏎\n⇥ Lineaz kanpoko Datuak Eguneratu @@ -1217,4 +1217,4 @@ Ibilbide laburra Ibilbide laburra erabili - \ No newline at end of file + diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index c984db3646..1110661b4f 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -1,4 +1,5 @@ -پشتیبان‌گیری از تغییرات OsmAnd ناموفق بود + +پشتیبان‌گیری از تغییرات OsmAnd ناموفق بود زمان دقت سرعت @@ -173,7 +174,7 @@ تفییر شفافیت (0-شفاف، 255-کدر) آیا می خواهید دانلود را متوقف کنید؟ نقشه های آفلاین (بُرداری) - نقشه را دانلود کنید و داده های آفلاین را بر روی گوشی خود مدیریت کنید + نقشه را دانلود کنید و نقشه های آفلاین را بر روی گوشی خود مدیریت کنید افزونه نقشه های آنلاین را فعال کنید تا منابع مختلف نقشه را انتخاب کنید تنظیمات نقشه پشتیبان‌گیری به عنوان تغییرات OsmAnd @@ -295,7 +296,7 @@ خروج نقشه تنظیمات - علاقمندیها + مکانهای من جستجو جستجو انتخاب POI @@ -357,7 +358,7 @@ قبلی تغییر واحد طول و سرعت واحد اندازه گیری - مدیریت داده‌ها + مدیریت نقشه ها فعال سازی غیرفعال کردن حذف @@ -406,7 +407,7 @@ فایلی با نام مشابه از قبل وجود دارد. مسیر GPX جستجو براساس نام - مدیریت داده‌ها + مدیریت نقشه ها عمومی تعیین نحوه نمایش و تنظیمات کلی برنامه تنظیمات کلی برنامه @@ -556,7 +557,7 @@ تصحیح ارتفاع بیشتر دستگاههای جی‌پی‌اس مقدار ارتفاع را براساس سیستم مرجع WGS84 هذلولی نشان میدهند که تبدیل آن به سیستمهای مورد استفاده محلی نیازمند تصحیح موقعیت میباشد. \n\nمرجع (EGM96 (geoid نزدیکترین سیستم به این سیستم محلی میباشد. - \n\nبرنامه OsmAnd نیز ارتفاع محل شما را در سیستم EGM96 نشان میدهد در صورتیکه فایل \'تصحیح ارتفاع جهان\' (WW15MGH.DAC) را از طریق \'تنظیمات\'->\'مدیریت داده ها\' دانلود کنید. (فایل اصلی در http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC وجود دارد.) + \n\nبرنامه OsmAnd نیز ارتفاع محل شما را در سیستم EGM96 نشان میدهد در صورتیکه فایل \'تصحیح ارتفاع جهان\' (WW15MGH.DAC) را از طریق \'تنظیمات\'->\'مدیریت نقشه ها\' دانلود کنید. (فایل اصلی در http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/binary/WW15MGH.DAC وجود دارد.) @@ -584,8 +585,8 @@ نقشه های +OsmAnd و مسیریابی نمایش نقشه های همراه و مسیریابی نقشه های OSM به صورت آنلاین و آفلاین به روز رسانی نقشه های آفلاین - داشتن نقشه های به روز برای دیدن آفلاین نقشه، جستجوی آدرس یا POI و مسیریابی آفلاین الزامی است. OsmAnd یک سیستم مدیریت داده برای دانلود این نقشه ها (و سایر فایلهای داده) و بررسی به روز رسانی های جدید دارد. - \n\nبرای دانلود نقشه ها به \'تنظیمات\'->\'مدیریت داده ها\'->\'دانلود داده های آفلاین\' بروید. + داشتن نقشه های به روز برای مشاهده آفلاین نقشه، جستجوی آدرس یا POI و مسیریابی آفلاین الزامی است. OsmAnd دارای سیستم مدیریت نقشه برای دانلود نقشه های جدید و دریافت روز رسانی های آنها می باشد. + \n\nبرای دانلود نقشه ها به \'تنظیمات\'->\'مدیریت نقشه ها\'->\'دانلود داده های آفلاین\' بروید. \n\nپس از بازیابی لیست نواحی از اینترنت، میتوانید روی هر مورد کلیک کنید تا دانلود یا بروز رسانی شود. دقت کنید که انتخابگر نوع فایل بالای صفحه نوع دانلودی را که میخواهید نشان میدهد (نقشه عادی، لایه های تپه سایه و غیره). \n\nمیتوانید لیست را با نوشتن چند حرف از اسم آن فیلتر کنید و یا با انتخاب \'تنظیمات\'->\'فیلتر دانلود شده ها\' فقط به روز رسانی برای داده هایی که از قبل روی دستگاه شما موجود است را ببینید. \n\n\t* مدخل \'سبز\' رنگ نشاندهنده این است که فایلهای داده بر روی سرور و دستگاه شما یکی هستند. @@ -727,7 +728,7 @@ تنظیم نمایش نقشه نقشه های بُرداری سریعتر نمایش داده میشوند. ممکن است روی یرخی دستگاهها خوب کار نکند. امتحان اعلانهای صوتی - هیچ نقشه بُرداری آفلاینی برای این محل وجود ندارد. میتوانید یکی را از قسمت تنظیمات (مدیریت داده‌ها) دانلود کنید یا اینکه از نقشه‌های آنلاین استفاده کنید. + هیچ نقشه بُرداری آفلاینی برای این محل وجود ندارد. میتوانید نقشه مورد نظر خود را از قسمت تنظیمات (مدیریت نقشه ها) دانلود کنید یا اینکه از نقشه‌های آنلاین استفاده کنید (برای این کار افزونه نقشه های آنلاین را فعال نمایید). بدون اطلاعات در جهت عقربه های ساعت (۱۲ بخشی) نوع جهت گیری @@ -918,8 +919,8 @@ \n\t* بسته سایه تپه برای افزونه منحنی‌های هم‌تراز \n\t* رفع اشکال (بهینه سازی مسیریابی) - این افزونه، منحنی‌های هم‌تراز را که در نقشه‌های آفلاین OsmAnd نمایش داده میشوند فراهم میکند. داده‌های جهانی (بین 70 درجه شمالی و 70 درجه جنوبی) در این زمینه براساس اندازه گیری‌های SRTM (مأموریت توپوگرافی رادار شاتل) و ASTER (رادیومتر انعکاسی و پرتویی حرارتی هوایی پیشرفته)، یک ابزار تصویربرداری پردازنده ترا و ماهواره فوق پیشرفته سیستم نظارتی زمین ناسا مییباشند. ASTER محصول تلاش مشترک میان ناسا، وزارت اقتصاد ژاپن، صنعت و تجارت (متی)، و سیستم های فضایی ژاپن (جی-اسپیس سیستم) است. - تسهیل دانلود خطوط هم‌تراز و سایه تپه (\'تنظیمات\'->\'مدیریت داده‌ها\'->\'دانلود\'->\'انتخاب نوع نقشه\' مورد نظر). + این افزونه، منحنی‌های هم‌تراز را که در نقشه‌های آفلاین OsmAnd نمایش داده میشوند فراهم میکند. داده‌های جهانی (بین 70 درجه شمالی و 70 درجه جنوبی) در این زمینه براساس اندازه گیری‌های SRTM (مأموریت توپوگرافی رادار شاتل) و ASTER (رادیومتر انعکاسی و پرتویی حرارتی هوایی پیشرفته)، یک ابزار تصویربرداری پردازنده ترا و ماهواره فوق پیشرفته سیستم نظارتی زمین ناسا مییباشند. ASTER محصول تلاش مشترک میان ناسا، وزارت اقتصاد ژاپن، صنعت و تجارت (متی)، و سیستم های فضایی ژاپن (جی-اسپیس سیستم) است. + تسهیل دانلود خطوط هم‌تراز و سایه تپه (\'تنظیمات\'->\'مدیریت نقشه ها\'->\'دانلود\'->\'انتخاب نوع نقشه\' مورد نظر). جی پی ایکس محو کردن همه عوارض زمین روی نقشه مخفی کردن چندضلعی ها @@ -1077,8 +1078,8 @@ برنامه OsmAnd یک برنامه مسیریابی با ویژگیهای متعدد است. \n\nبرای آشنایی مفدماتی، تعدادی فوت و فن کاربردی در صفحه اصلی از طریق \'منو\'->\'ترفندها\' قرار داده شده است - برای دانلود یا به روز رسانی داده های آفلاین اینجا کلیک کنید. \nبر روی هر مورد کلیک کنید تا جرئیات بیشتری ببینید، بزنید و نگه دارید تا غیرفعال کنید یا حذف کنید. داده های موجود روی دستگاه در حال حاضر (%1$s آزاد): - از شما به خاطر استفاده از OsmAnd متشکریم. برای استفاده از ویژگیهای بیشتر برنامه به داده‌های آفلاین منطقه‌ای نیاز است که میتوانید آنها را از طریق \'تنظیمات\'←\'مدیریت داده ها\' دانلود کنید. پس از آن قادر خواهید بود تا نقشه‌ها را نگاه کنید، آدرس را پیدا کنید، در POIها جستجو کنید و یا مسیرهای حمل و نقل عمومی را پیدا کنید. + برای دانلود یا به روز رسانی نقشه های آفلاین اینجا کلیک کنید. \nبر روی هر مورد کلیک کنید تا جرئیات بیشتری ببینید، بزنید و نگه دارید تا غیرفعال کنید یا حذف کنید. داده های موجود روی دستگاه در حال حاضر (%1$s آزاد): + از شما به خاطر استفاده از OsmAnd متشکریم. برای استفاده از ویژگیهای بیشتر برنامه به داده‌های آفلاین منطقه‌ای نیاز است که میتوانید آنها را از طریق \'تنظیمات\'←\'مدیریت نقشه ها\' دانلود کنید. پس از آن قادر خواهید بود تا نقشه‌ها را نگاه کنید، آدرس را پیدا کنید، در POIها جستجو کنید و یا مسیرهای حمل و نقل عمومی را پیدا کنید. حافظه اجرایی کافی برای نشان دادن ناحیه مورد نظر وجود ندارد لایه های فلورسنت POIها/اشکالات ذخیره شده محلی @@ -1460,7 +1461,7 @@ OsmAnd منبع باز است و فعالانه در حال توسعه است. نقاطی که زیاد استفاده میشوند را میتوان به این طریق به عنوان علاقمندی ها ذخیره کرد: \n\nبرای ذخیره یک نقطه به منوی نقشه بروید، مورد \'اضافه کردن به علاقمندیها\' را انتخاب کنید و سپس یک اسم به آن بدهید. - \n\nپس از ذخیره یک علاقمندی، از طریق \'صفحه اصلی\'->\'علاقمندیها\' میتوان به آن دسترسی پیدا کرد. + \n\nپس از ذخیره یک علاقمندی، از طریق \'صفحه اصلی\'->\'مکانهای من\' میتوان به آن دسترسی پیدا کرد. \n\nبرای نشان دادن تمام نقاط مورد علاقه به طور مستقیم بر روی نقشه، در صفحه نمایش نقشه لایه \'علاقمندیها\' را فعال کنید. هدف جغرافیایی \'%s\' قابل تجزیه نیست @@ -1662,7 +1663,7 @@ OsmAnd منبع باز است و فعالانه در حال توسعه است. \n\t* مهم: نقشه‌ها باید جدیدتر از فوریه ۲۰۱۴ باشند. \n\t* سیستم مسیریابی کاملاً به‌روزرسانی شد (از لحاظ سرعت و دقت)- \n\t* صفحه جدید برای برنامه‌ریزی مسیر سفر (بسیار زیباتر و موثرتر) - \n\t** نکته: فایل‌های GPX از طریق دکمه تنظیمات قابل دستیابی هستند. + \n\t** نکته: فایل‌های GPX از طریق دکمه تنظیمات قابل دستیابی هستند. \n\t* دکمه‌ها در حالت مسیریابی به صورت خودکار مخفی میشوند. \n\t* محاسبه مسیر آفلاین بسته به اولین نقطه مسیر GPX \n\t* شبیه‌سازی فعال در داخل تونلها @@ -1774,6 +1775,9 @@ OsmAnd منبع باز است و فعالانه در حال توسعه است. * محاسبه بین مسیر فایل gpx↵ * تغییر طرح دانلود کشورها (حمایت برای جستجوی نام های محلی)↵ * پشتیبانی از فرمت های GPX/KML(تبدیل از KML به GPX)↵ + * انتقال فایل های GPX به\'اطلاعات من\'↵ + * مشاهده مسیرهای ذخیره شده(GPX) بر اساس بیشترین ، کمترین و متوسط سرعت و ارتفاع↵ + * شروع خودکار مسیریابی بعد از وقفه زمانی مشخص↵ محاسبه مسیر بین دو نقطه راه اندازی مجدد osmo وارد کنید @@ -1830,13 +1834,40 @@ OsmAnd منبع باز است و فعالانه در حال توسعه است. ذخیره به عنوان فایل GPX و یا واردات به مورد علاقه های شما؟ ذخیره GPX مسیر خالی است - مسیر + انتخاب مسیر همه مسیرها علاقه مندی های من - داده های اطلاعات من - داده های اطلاعات من + مکان های من + مکان های من کاربر %1$s تاریخ عضویت %2$s کاربر %1$s گروه چپ %2$s نمایش اطلاعیه های گروه نمایش پیام ها از زمانی که کاربر به گروه پیوسته و یا گروه را ترک کرده - \ No newline at end of file + بارگزاری %1$s … + هم اکنون + ایستگاه بین راه + \n\n برای نمایش بر روی نقشه انگشت خود را چند لحظه بر روی صفحه نگه دارید + شروع مسیریابی در زمان دیگر + انتخاب + انتخاب بازه زمانی + مسیر فرعی: %1$s + ایستگاههای بین راه: %1$s + فاصله: %1$s (%2$s points) + زمان شروع: %1$tF, %1$tT + زمان اتمام: %1$tF, %1$tT + سرعت متوسط: %1$s + بیشترین سرعت: %1$s + میانگین ارتفاع: %1$s + ارتفاع: %1$s + فرود/صعود: %1$s + مدت زمان: %1$s + زمان حرکت: %1$s + بخش + %1$s نقاط + نقطه %1$s + ثبت + %1$s \nنقاط مسیر %2$s + %1$s \n نقاط + %1$s \n مسیر %2$s + ثبت مسیر فعلی + diff --git a/OsmAnd/res/values-hy/strings.xml b/OsmAnd/res/values-hy/strings.xml index e6daf8c958..433483d2b4 100644 --- a/OsmAnd/res/values-hy/strings.xml +++ b/OsmAnd/res/values-hy/strings.xml @@ -1,4 +1,5 @@ -Տարածքի ռելիեֆ + +Տարածքի ռելիեֆ Տարածքի մգեցված ռելիեֆով քարտեզներ Սկիզբ Ձայնա/Տեսանյութեր @@ -146,4 +147,5 @@ Կշիռ Կշռի սահմանափակման նշում Ստեղծել ուղիներ (կամ օգտագործել/փոփոխել առկա GPX ֆայլերը) կետեռի միջև հեռավորության չափման համար։ Պահպանել որպես GPX, որը կարող է օգտագործվել GPX ուղիների պլանավորման համար։ - \ No newline at end of file + No + diff --git a/OsmAnd/res/values-id/strings.xml b/OsmAnd/res/values-id/strings.xml index cf4690b139..46c7e14a91 100644 --- a/OsmAnd/res/values-id/strings.xml +++ b/OsmAnd/res/values-id/strings.xml @@ -1,4 +1,5 @@ -Mencari alamat + +Mencari alamat Koordinat Mencari transportasi Mencari favorit @@ -64,4 +65,6 @@ Info versi, lisensi, anggota Tip Dapat di download: %1$s - \ No newline at end of file + No + Yes + diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index a2c6245ad0..fefdb17a99 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1872,7 +1872,7 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz Tappe del percorso: $1%s Distanza: %1$s (%2$s punti) Orario di arrivo: %1$tF, %1$tT - Differenza di altitudine: %1$s + Dislivello: %1$s Salite: %1$s Intervallo di tempo: %1$s Tempo in movimento: %1$s @@ -1891,4 +1891,7 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz \n\nTieni premuto per vederlo sulla mappa Avvia la navigazione con ritardo Orario attuale + Salva come gruppo di preferiti + Scegli le tappe + Etichette di testo diff --git a/OsmAnd/res/values-ko/strings.xml b/OsmAnd/res/values-ko/strings.xml index de35758803..f59268e84e 100644 --- a/OsmAnd/res/values-ko/strings.xml +++ b/OsmAnd/res/values-ko/strings.xml @@ -2069,4 +2069,14 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z %1$s\n 포인트 %1$s\n 트랙 %2$s 현재 트랙 기록 - \ No newline at end of file + %1$s 불러오는 중… + 현재 시간 + 중간 지점 + \n\n지도를 보려면 누르고 계십시요 + 지연 탐색을 시작 + 선택됨 + 분할 간격을 선택 + "중간지점: %1$s " + 하강/상승: %1$s + + diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 00058742aa..54753ec937 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -1821,8 +1821,8 @@ Afganistan, Afryka Południowa, Albania, Algieria, Andora, Angola, Anguilla, Ant Prędkość średnia: %1$s Prędkość maksymalna: %1$s Średnia wysokość: %1$s - Różnica wysokości: %1$s - Wysokość wzniesień: %1$s + Zakres wysokości: %1$s + Zjazd/podjazd: %1$s Okres czasu: %1$s Czas w ruchu: %1$s Odcinek @@ -1840,4 +1840,7 @@ Afganistan, Afryka Południowa, Albania, Algieria, Andora, Angola, Anguilla, Ant Ładowanie %1$s … Aktualny czas Punkt trasy + Zapisz jako grupę ulubionych + Wybierz punkty + Etykiety tekstowe diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index c6136bc834..86ba608790 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -1776,4 +1776,4 @@ Afeganistão , Albânia, Argélia , Andorra, Angola , Anguilla, Antígua e Barbu Partilhar Favoritos partilhados via OsmAnd Formato inválido: %s - \ No newline at end of file + diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index f2ad7fbc42..c71dfb5b22 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1601,8 +1601,8 @@ OsmAnd - открытый источник и активно развается. Избранные точки расшаренные через OsmAnd Рассчитать маршрут между точками Имя пользователя - - + Войти в группу + Следить за устройством Устройства Управление OsMo Подключиться к устройству @@ -1710,4 +1710,10 @@ OsmAnd - открытый источник и активно развается. Путевая точка Выбрать интервал разбиения Старт навигации по тайм-ауту - + Сохранить как группу избранных + Выбрать путевые точки + Текстовые метки + \n\nНажать и удерживать для просмотра на карте + выбранные + Путевые точки: %1$s + diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index a49682f14a..b8693c84b8 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -1872,8 +1872,8 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda, Priemerná rýchlosť: %1$s Maximálna rýchlosť: %1$s Priemerná výška: %1$s - Výškový rozdiel: %1$s - Výškové výstupy: %1$s + Výškový rozsah: %1$s + Zostup/výstup: %1$s Časový úsek: %1$s Čas pohybu: %1$s Úsek diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index eae25def7b..02b3d54b3f 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -1560,7 +1560,7 @@ Aktuella data på enheten (%1$s ledigt): Aktuell tid Waypoint \n\nTryck och håll för att se på karta - Start navigering med fördröjning + Starta navigering med fördröjning valda Välj split-intervall Underspår: %1$s @@ -1583,4 +1583,7 @@ Aktuella data på enheten (%1$s ledigt): %1$s \nPunkter %1$s \nSpår %2$s Aktuellt inspelningsspår + Spara som grupp med favoriter + Välj waypoints + Textetiketter diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index 147deb7e92..062d01e26c 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -1205,4 +1205,4 @@ \n\t* Yeniden tasarlanmış arayüz↵ →→\n\t* Ashklat düzeltmek ↵ - \ No newline at end of file + diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index b0fb9c156c..1565a52214 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -1875,4 +1875,7 @@ OsmAnd 是開放原始碼,而且正在積極的開發。應用程式從報告 海拔高度範圍:%1$s 中途點 中途點:%1$s - + 另存為我的最愛群組 + 選擇中途點 + 文字標籤 + diff --git a/OsmAnd/res/values/colors.xml b/OsmAnd/res/values/colors.xml index 727f344a18..26db37c054 100644 --- a/OsmAnd/res/values/colors.xml +++ b/OsmAnd/res/values/colors.xml @@ -7,7 +7,7 @@ #0080FF #00000000 - + #eecc22 #A5A5A5 diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 27e83e16a9..e019180fad 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,9 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Save as group of favorites + Select waypoints + Text labels Loading %1$s … Current time Waypoint @@ -1234,7 +1237,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A Village Town City - POI labels + Stop simulation Start simulation Changes in 0.6.8: diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 8c7d6df754..95ebb492e7 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -31,7 +31,6 @@ public class FavouritesDbHelper { public static final String FILE_TO_SAVE = "favourites.gpx"; //$NON-NLS-1$ public static final String FILE_TO_BACKUP = "favourites_bak.gpx"; //$NON-NLS-1$ - private List favoritePointsFromGPXFile = null; private List cachedFavoritePoints = new ArrayList(); private Map> favoriteGroups = null; private final OsmandApplication context; @@ -111,9 +110,7 @@ public class FavouritesDbHelper { addCategoryQuery(context.getString(R.string.favorite_default_category), db); } - public List getFavoritePointsFromGPXFile() { - return favoritePointsFromGPXFile; - } + diff --git a/OsmAnd/src/net/osmand/plus/OsmandPlugin.java b/OsmAnd/src/net/osmand/plus/OsmandPlugin.java index 43fee487d5..2a65f6b05b 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandPlugin.java +++ b/OsmAnd/src/net/osmand/plus/OsmandPlugin.java @@ -325,5 +325,9 @@ public abstract class OsmandPlugin { } } + public static boolean isDevelopment() { + return getEnabledPlugin(OsmandDevelopmentPlugin.class) != null; + } + } diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 180524edc6..910120c03f 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -133,7 +133,7 @@ public class TargetPointsHelper { updateRouteAndReferesh(updateRoute); } - private void updateRouteAndReferesh(boolean updateRoute) { + public void updateRouteAndReferesh(boolean updateRoute) { if(updateRoute && ( routingHelper.isRouteBeingCalculated() || routingHelper.isRouteCalculated() || routingHelper.isFollowingMode() || routingHelper.isRoutePlanningMode())) { updateRoutingHelper(); @@ -141,7 +141,7 @@ public class TargetPointsHelper { updateListeners(); } - public void updateRoutingHelper() { + private void updateRoutingHelper() { LatLon start = settings.getPointToStart(); Location lastKnownLocation = ctx.getLocationProvider().getLastKnownLocation(); if((routingHelper.isFollowingMode() && lastKnownLocation != null) || start == null) { diff --git a/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java index 4519964017..8ae0b9d8b3 100644 --- a/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java @@ -360,6 +360,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { Builder b = new AlertDialog.Builder(getActivity()); if(f.exists()){ final EditText editText = new EditText(getActivity()); + editText.setPadding(7, 3, 7, 3); editText.setText(f.getName()); b.setView(editText); b.setPositiveButton(R.string.default_buttons_save, new DialogInterface.OnClickListener() { diff --git a/OsmAnd/src/net/osmand/plus/activities/FavouritesListFragment.java b/OsmAnd/src/net/osmand/plus/activities/FavouritesListFragment.java index ae01075207..14f9075bdb 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavouritesListFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavouritesListFragment.java @@ -176,7 +176,7 @@ public class FavouritesListFragment extends SherlockListFragment implements Sear TextView label = (TextView) row.findViewById(R.id.favourite_label); ImageView icon = (ImageView) row.findViewById(R.id.favourite_icon); final FavouritePoint model = getItem(position); - icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(activity, 0)); + icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(activity, model.getColor())); String distance = ""; if (location != null) { int dist = (int) (MapUtils.getDistance(model.getLatitude(), model.getLongitude(), location.getLatitude(), location diff --git a/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java b/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java index cb0024da7d..6da9373458 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java @@ -28,6 +28,7 @@ import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; +import net.osmand.plus.TargetPointsHelper; import net.osmand.plus.base.FavoriteImageDrawable; import net.osmand.util.MapUtils; import android.app.Activity; @@ -37,6 +38,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.os.AsyncTask; +import android.support.v4.app.FragmentActivity; import android.text.Spannable; import android.text.style.ForegroundColorSpan; import android.view.LayoutInflater; @@ -59,7 +61,6 @@ import com.actionbarsherlock.view.ActionMode.Callback; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; -import com.actionbarsherlock.view.MenuItem.OnActionExpandListener; import com.actionbarsherlock.widget.SearchView; import com.actionbarsherlock.widget.SearchView.OnQueryTextListener; @@ -71,12 +72,14 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { public static final int DELETE_ID = 2; public static final int DELETE_ACTION_ID = 3; public static final int SHARE_ID = 4; + public static final int SELECT_DESTINATIONS_ID = 5; + public static final int SELECT_DESTINATIONS_ACTION_MODE_ID = 6; private FavouritesAdapter favouritesAdapter; private FavouritesDbHelper helper; private boolean selectionMode = false; - private Set favoritesToDelete = new LinkedHashSet(); + private Set favoritesSelected = new LinkedHashSet(); private Set groupsToDelete = new LinkedHashSet(); private Comparator favoritesComparator; private ActionMode actionMode; @@ -131,11 +134,11 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { @Override protected String doInBackground(Void... params) { - for (FavouritePoint fp : favoritesToDelete) { + for (FavouritePoint fp : favoritesSelected) { helper.deleteFavourite(fp); publishProgress(fp); } - favoritesToDelete.clear(); + favoritesSelected.clear(); for (String group : groupsToDelete) { helper.deleteGroup(group); publishProgress(group); @@ -156,8 +159,20 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { // Sort Favs by distance on Search tab, but sort alphabetically here favouritesAdapter.sort(favoritesComparator); + if(favouritesAdapter.getGroupCount() > 0 && + "".equals(favouritesAdapter.getGroup(0))) { + getListView().expandGroup(0); + } } + + private void updateSelectionMode(ActionMode m) { + if(favoritesSelected.size() > 0) { + m.setTitle(favoritesSelected.size() + " " + getMyApplication().getString(R.string.selected)); + } else{ + m.setTitle(""); + } + } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { @@ -166,10 +181,11 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { FavouritePoint model = favouritesAdapter.getChild(groupPosition, childPosition); ch.setChecked(!ch.isChecked()); if (ch.isChecked()) { - favoritesToDelete.add(model); + favoritesSelected.add(model); } else { - favoritesToDelete.remove(model); + favoritesSelected.remove(model); } + updateSelectionMode(actionMode); } else { final QuickAction qa = new QuickAction(v); final OsmandSettings settings = getMyApplication().getSettings(); @@ -276,6 +292,9 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { } else if (item.getItemId() == IMPORT_ID) { importFile(); return true; + } else if (item.getItemId() == SELECT_DESTINATIONS_ID) { + selectDestinations(); + return true; } else if (item.getItemId() == SHARE_ID) { shareFavourites(); return true; @@ -290,6 +309,30 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { } } + private void selectDestinations() { + final TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper(); + if (targetPointsHelper.getIntermediatePoints().size() > 0) { + final FragmentActivity act = getActivity(); + Builder builder = new AlertDialog.Builder(act); + builder.setTitle(R.string.new_directions_point_dialog); + builder.setItems( + new String[] { act.getString(R.string.keep_intermediate_points), + act.getString(R.string.clear_intermediate_points)}, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == 1) { + targetPointsHelper.clearPointToNavigate(false); + } + enterIntermediatesMode(); + } + }); + builder.show(); + } else { + enterIntermediatesMode(); + } + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem mi = createMenuItem(menu, SEARCH_ID, R.string.export_fav, R.drawable.ic_action_search_light, @@ -325,15 +368,18 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { // } // }); if (!mi.isActionViewExpanded()) { - createMenuItem(menu, EXPORT_ID, R.string.export_fav, R.drawable.ic_action_gsave_light, - R.drawable.ic_action_gsave_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); createMenuItem(menu, SHARE_ID, R.string.share_fav, R.drawable.ic_action_gshare_light, R.drawable.ic_action_gshare_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); + createMenuItem(menu, SELECT_DESTINATIONS_ID, R.string.select_destination_and_intermediate_points, R.drawable.ic_action_flage_light, + R.drawable.ic_action_flage_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); + createMenuItem(menu, DELETE_ID, R.string.default_buttons_delete, R.drawable.ic_action_delete_light, + R.drawable.ic_action_delete_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); + createMenuItem(menu, EXPORT_ID, R.string.export_fav, R.drawable.ic_action_gsave_light, + R.drawable.ic_action_gsave_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); createMenuItem(menu, IMPORT_ID, R.string.import_fav, R.drawable.ic_action_grefresh_light, R.drawable.ic_action_grefresh_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); - createMenuItem(menu, DELETE_ID, R.string.default_buttons_delete, R.drawable.ic_action_delete_light, - R.drawable.ic_action_delete_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); + } } @@ -344,6 +390,61 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { public void hideProgressBar() { getSherlockActivity().setSupportProgressBarIndeterminateVisibility(false); } + + private void enterIntermediatesMode() { + actionMode = getSherlockActivity().startActionMode(new Callback() { + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + selectionMode = true; + createMenuItem(menu, SELECT_DESTINATIONS_ACTION_MODE_ID, R.string.select_destination_and_intermediate_points, + R.drawable.ic_action_flage_light, R.drawable.ic_action_flage_dark, + MenuItem.SHOW_AS_ACTION_IF_ROOM); + favoritesSelected.clear(); + groupsToDelete.clear(); + favouritesAdapter.notifyDataSetInvalidated(); + updateSelectionMode(mode); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + selectionMode = false; + favouritesAdapter.notifyDataSetInvalidated(); + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (item.getItemId() == SELECT_DESTINATIONS_ACTION_MODE_ID) { + mode.finish(); + selectDestinationImpl(); + } + return true; + } + }); + + } + + private void selectDestinationImpl() { + if(!favoritesSelected.isEmpty()) { + final TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper(); + for(FavouritePoint fp : favoritesSelected) { + targetPointsHelper.navigateToPoint(new LatLon(fp.getLatitude(), fp.getLongitude()), false, + targetPointsHelper.getIntermediatePoints().size() + 1, + getString(R.string.favorite) + ": " + fp.getName()); + } + if(getMyApplication().getRoutingHelper().isRouteCalculated()) { + targetPointsHelper.updateRouteAndReferesh(true); + } + IntermediatePointsDialog.openIntermediatePointsDialog(getActivity(), getMyApplication(), false); + //MapActivity.launchMapActivityMoveToTop(getActivity()); + } + } private void enterDeleteMode() { actionMode = getSherlockActivity().startActionMode(new Callback() { @@ -354,9 +455,10 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { createMenuItem(menu, DELETE_ACTION_ID, R.string.default_buttons_delete, R.drawable.ic_action_delete_light, R.drawable.ic_action_delete_dark, MenuItem.SHOW_AS_ACTION_IF_ROOM); - favoritesToDelete.clear(); + favoritesSelected.clear(); groupsToDelete.clear(); favouritesAdapter.notifyDataSetInvalidated(); + updateSelectionMode(mode); return true; } @@ -374,6 +476,7 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (item.getItemId() == DELETE_ACTION_ID) { + mode.finish(); deleteFavoritesAction(); } return true; @@ -384,10 +487,10 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { } private void deleteFavoritesAction() { - if (groupsToDelete.size() + favoritesToDelete.size() > 0) { + if (groupsToDelete.size() + favoritesSelected.size() > 0) { Builder b = new AlertDialog.Builder(getActivity()); - b.setMessage(getString(R.string.favorite_delete_multiple, favoritesToDelete.size(), groupsToDelete.size())); + b.setMessage(getString(R.string.favorite_delete_multiple, favoritesSelected.size(), groupsToDelete.size())); b.setPositiveButton(R.string.default_buttons_delete, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -561,6 +664,7 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { Map> favoriteGroups = new LinkedHashMap>(); List groups = new ArrayList(); Filter myFilter; + public void setFavoriteGroups(Map> favoriteGroups) { this.sourceFavoriteGroups = favoriteGroups; @@ -657,7 +761,7 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { adjustIndicator(groupPosition, isExpanded, row); TextView label = (TextView) row.findViewById(R.id.category_name); final String model = getGroup(groupPosition); - label.setText(model); + label.setText(model.length() == 0? getString(R.string.favourites_activity) : model); final CheckBox ch = (CheckBox) row.findViewById(R.id.check_item); if (selectionMode) { @@ -671,12 +775,13 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { groupsToDelete.add(model); List fvs = helper.getFavoriteGroups().get(model); if (fvs != null) { - favoritesToDelete.addAll(fvs); + favoritesSelected.addAll(fvs); } favouritesAdapter.notifyDataSetInvalidated(); } else { groupsToDelete.remove(model); } + updateSelectionMode(actionMode); } }); } else { @@ -698,7 +803,7 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { ImageView icon = (ImageView) row.findViewById(R.id.favourite_icon); final FavouritePoint model = (FavouritePoint) getChild(groupPosition, childPosition); row.setTag(model); - icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), 0)); + icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), model.getColor())); LatLon lastKnownMapLocation = getMyApplication().getSettings().getLastKnownMapLocation(); int dist = (int) (MapUtils.getDistance(model.getLatitude(), model.getLongitude(), lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude())); @@ -710,21 +815,22 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { final CheckBox ch = (CheckBox) row.findViewById(R.id.check_item); if (selectionMode) { ch.setVisibility(View.VISIBLE); - ch.setChecked(favoritesToDelete.contains(model)); + ch.setChecked(favoritesSelected.contains(model)); row.findViewById(R.id.favourite_icon).setVisibility(View.GONE); ch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (ch.isChecked()) { - favoritesToDelete.add(model); + favoritesSelected.add(model); } else { - favoritesToDelete.remove(model); + favoritesSelected.remove(model); if (groupsToDelete.contains(model.getCategory())) { groupsToDelete.remove(model.getCategory()); favouritesAdapter.notifyDataSetInvalidated(); } } + updateSelectionMode(actionMode); } }); } else { diff --git a/OsmAnd/src/net/osmand/plus/activities/IntermediatePointsDialog.java b/OsmAnd/src/net/osmand/plus/activities/IntermediatePointsDialog.java index 50420ea3e0..9befcfe438 100644 --- a/OsmAnd/src/net/osmand/plus/activities/IntermediatePointsDialog.java +++ b/OsmAnd/src/net/osmand/plus/activities/IntermediatePointsDialog.java @@ -43,7 +43,7 @@ public class IntermediatePointsDialog { openIntermediatePointsDialog(mapActivity, (OsmandApplication) mapActivity.getApplication(), false); } - public static void openIntermediatePointsDialog(final MapActivity activity, + public static void openIntermediatePointsDialog(final Activity activity, final OsmandApplication app, final boolean changeOrder){ TargetPointsHelper targets = app.getTargetPointsHelper(); final List intermediates = targets.getIntermediatePointsWithTarget(); @@ -105,20 +105,20 @@ public class IntermediatePointsDialog { } }); - if (!changeOrder && intermediates.size()>1) { + if (!changeOrder && intermediates.size() > 1) { builder.setNeutralButton(R.string.intermediate_points_change_order, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { openIntermediatePointsDialog(activity, app, true); } }); - } else if(intermediates.size()>1) { - builder.setNeutralButton(R.string.intermediate_items_sort_by_distance, new Dialog.OnClickListener() { - @Override - public void onClick(DialogInterface d, int which) { - //Do nothing here. We override the onclick - } - }); + } else if (intermediates.size() > 1) { + builder.setNeutralButton(R.string.intermediate_items_sort_by_distance, new Dialog.OnClickListener() { + @Override + public void onClick(DialogInterface d, int which) { + // Do nothing here. We override the onclick + } + }); } AlertDialog dlg = builder.create(); if (changeOrder) { @@ -127,7 +127,7 @@ public class IntermediatePointsDialog { dlg.show(); } - private static void applySortTargets(AlertDialog dlg, final MapActivity activity, final List intermediates, + private static void applySortTargets(AlertDialog dlg, final Activity activity, final List intermediates, final TIntArrayList originalPositions, final List names, final ArrayAdapter listadapter, final ProgressBar pb, final TextView textInfo) { dlg.setOnShowListener(new OnShowListener() { @@ -146,7 +146,12 @@ public class IntermediatePointsDialog { protected int[] doInBackground(Void[] params) { ArrayList lt = new ArrayList(intermediates); - LatLon start = new LatLon(activity.getMapView().getLatitude(), activity.getMapView().getLongitude()); + LatLon start ; + if(activity instanceof MapActivity) { + start = new LatLon(((MapActivity) activity).getMapView().getLatitude(), ((MapActivity) activity).getMapView().getLongitude()); + } else { + start = lt.get(0); + } LatLon end = lt.remove(lt.size() - 1); return new TspAnt().readGraph(lt, start, end).solve(); }; @@ -284,7 +289,7 @@ public class IntermediatePointsDialog { app.getTargetPointsHelper().removeWayPoint(cnt == 0, i); } } - // FIXME + // FIXME delete location when point is removed // if(mapActivity instanceof MapActivity) { // ((MapActivity) mapActivity).getMapLayers().getContextMenuLayer().setLocation(null, ""); // } diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 5a3c1dbf33..18d2358dce 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -290,7 +290,7 @@ public class MapActivity extends AccessibleActivity { !Algorithms.objectEquals(targets.getPointToNavigate(), routingHelper.getFinalLocation() )|| !Algorithms.objectEquals(targets.getIntermediatePoints(), routingHelper.getIntermediatePoints()) )) { - targets.updateRoutingHelper(); + targets.updateRouteAndReferesh(true); } app.getLocationProvider().resumeAllUpdates(); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 23cdd0e9d1..3966a35c91 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -545,7 +545,7 @@ public class MapActivityActions implements DialogProvider { // then set gpx setGPXRouteParams(gpxFile); // then update start and destination point - targets.updateRoutingHelper(); + targets.updateRouteAndReferesh(true); mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); mapActivity.getMapView().refreshMap(true); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java index ae7ac7e9dd..fabe8200c5 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java @@ -4,7 +4,6 @@ package net.osmand.plus.activities; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import net.osmand.CallbackWithObject; @@ -17,7 +16,6 @@ import net.osmand.map.TileSourceManager.TileSourceTemplate; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.Item; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; -import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.OsmAndFormatter; @@ -46,6 +44,7 @@ import net.osmand.plus.views.POIMapLayer; import net.osmand.plus.views.PointLocationLayer; import net.osmand.plus.views.PointNavigationLayer; import net.osmand.plus.views.RouteLayer; +import net.osmand.plus.views.MapTextLayer; import net.osmand.plus.views.TransportInfoLayer; import net.osmand.plus.views.TransportStopsLayer; import android.app.AlertDialog; @@ -87,6 +86,7 @@ public class MapActivityLayers { private PointLocationLayer locationLayer; private PointNavigationLayer navigationLayer; private MapInfoLayer mapInfoLayer; + private MapTextLayer mapTextLayer; private ContextMenuLayer contextMenuLayer; private MapControlsLayer mapControlsLayer; private DownloadedRegionsLayer downloadedRegionsLayer; @@ -104,7 +104,10 @@ public class MapActivityLayers { OsmandApplication app = (OsmandApplication) getApplication(); RoutingHelper routingHelper = app.getRoutingHelper(); - + // first create to make accessible + mapTextLayer = new MapTextLayer(); + // 5.95 all labels + mapView.addLayer(mapTextLayer, 5.95f); // mapView.addLayer(underlayLayer, -0.5f); mapTileLayer = new MapTileLayer(true); mapView.addLayer(mapTileLayer, 0.0f); @@ -135,8 +138,9 @@ public class MapActivityLayers { // 5.5 transport info layer transportInfoLayer = new TransportInfoLayer(TransportRouteHelper.getInstance()); mapView.addLayer(transportInfoLayer, 5.5f); + // 5.95 all text labels // 6. point location layer - locationLayer = new PointLocationLayer(activity.getMapViewTrackingUtilities()); + locationLayer = new PointLocationLayer(MapActivity.getMapViewTrackingUtilities()); mapView.addLayer(locationLayer, 6); // 7. point navigation layer navigationLayer = new PointNavigationLayer(activity); @@ -248,9 +252,8 @@ public class MapActivityLayers { selectPOIFilterLayer(mapView); } settings.SHOW_POI_OVER_MAP.set(isChecked); - } else if(itemId == R.string.layer_poi_label){ + } else if(itemId == R.string.layer_amenity_label){ settings.SHOW_POI_LABEL.set(isChecked); - } else if(itemId == R.string.layer_favorites){ settings.SHOW_FAVORITES.set(isChecked); } else if(itemId == R.string.layer_gpx_layer){ @@ -276,7 +279,7 @@ public class MapActivityLayers { // String appMode = " [" + settings.getApplicationMode().toHumanString(view.getApplication()) +"] "; adapter.item(R.string.layer_poi).selected(settings.SHOW_POI_OVER_MAP.get() ? 1 : 0) .icons(R.drawable.ic_action_info_dark, R.drawable.ic_action_info_light).reg(); - adapter.item(R.string.layer_poi_label).selected(settings.SHOW_POI_LABEL.get() ? 1 : 0) + adapter.item(R.string.layer_amenity_label).selected(settings.SHOW_POI_LABEL.get() ? 1 : 0) .icons(R.drawable.ic_action_text_dark, R.drawable.ic_action_text_light).reg(); adapter.item(R.string.layer_favorites).selected(settings.SHOW_FAVORITES.get() ? 1 : 0) .icons(R.drawable.ic_action_fav_dark, R.drawable.ic_action_fav_light).reg(); @@ -611,6 +614,11 @@ public class MapActivityLayers { public FavoritesLayer getFavoritesLayer() { return favoritesLayer; } + + public MapTextLayer getMapTextLayer() { + return mapTextLayer; + } + public PointLocationLayer getLocationLayer() { return locationLayer; } diff --git a/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java b/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java index 2cac5083db..3204de31fa 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java @@ -2,10 +2,14 @@ package net.osmand.plus.activities; import gnu.trove.list.array.TIntArrayList; +import java.io.File; import java.text.Collator; import java.util.ArrayList; import java.util.List; +import net.osmand.access.AccessibleToast; +import net.osmand.data.FavouritePoint; +import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; @@ -14,6 +18,7 @@ import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings.MetricsConstants; import net.osmand.plus.R; +import net.osmand.plus.activities.AvailableGPXFragment.LoadGpxTask; import net.osmand.plus.base.FavoriteImageDrawable; import net.osmand.util.Algorithms; import android.app.Activity; @@ -26,11 +31,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; +import android.widget.EditText; import android.widget.ExpandableListView; import android.widget.Filter; import android.widget.ImageView; import android.widget.SectionIndexer; import android.widget.TextView; +import android.widget.Toast; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; @@ -85,6 +92,40 @@ public class SelectedGPXFragment extends OsmandExpandableListFragment { public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { return super.onOptionsItemSelected(item); } + + protected void saveAsFavorites(final GpxDisplayGroup model) { + Builder b = new AlertDialog.Builder(getActivity()); + final EditText editText = new EditText(getActivity()); + String name = model.getName(); + if(name.indexOf('\n') > 0) { + name = name.substring(0, name.indexOf('\n')); + } + editText.setText(name); + editText.setPadding(7, 3, 7, 3); + b.setTitle(R.string.save_as_favorites_points); + b.setView(editText); + b.setPositiveButton(R.string.default_buttons_save, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + saveFavoritesImpl(model.getModifiableList(), editText.getText().toString()); + + } + }); + b.setNegativeButton(R.string.default_buttons_cancel, null); + b.show(); + } + + protected void saveFavoritesImpl(List modifiableList, String category) { + FavouritesDbHelper fdb = getMyApplication().getFavorites(); + for(GpxDisplayItem i : modifiableList) { + if (i.locationStart != null) { + FavouritePoint fp = new FavouritePoint(i.locationStart.lat, i.locationStart.lon, i.locationStart.name, + category); + fdb.addFavourite(fp); + } + } + } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { @@ -345,9 +386,8 @@ public class SelectedGPXFragment extends OsmandExpandableListFragment { final GpxDisplayGroup model = getGroup(groupPosition); label.setText(model.getGroupName()); final ImageView ch = (ImageView) row.findViewById(R.id.check_item); - if(model.getType() != GpxDisplayItemType.TRACK_SEGMENT) { - ch.setVisibility(View.INVISIBLE); - } else { + + if(model.getType() == GpxDisplayItemType.TRACK_SEGMENT) { ch.setVisibility(View.VISIBLE); ch.setImageDrawable(getActivity().getResources().getDrawable( app.getSettings().isLightContent() ? R.drawable.ic_action_settings_light @@ -359,11 +399,27 @@ public class SelectedGPXFragment extends OsmandExpandableListFragment { } }); + } else if(model.getType() == GpxDisplayItemType.TRACK_POINTS || + model.getType() == GpxDisplayItemType.TRACK_ROUTE_POINTS) { + ch.setVisibility(View.VISIBLE); + ch.setImageDrawable(getActivity().getResources().getDrawable( + app.getSettings().isLightContent() ? R.drawable.ic_action_fav_light + : R.drawable.ic_action_fav_dark)); + ch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + saveAsFavorites(model); + } + + }); + } else { + ch.setVisibility(View.INVISIBLE); } return row; } + @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { diff --git a/OsmAnd/src/net/osmand/plus/base/FailSafeFuntions.java b/OsmAnd/src/net/osmand/plus/base/FailSafeFuntions.java index 09b0796b43..0eca4bcbfd 100644 --- a/OsmAnd/src/net/osmand/plus/base/FailSafeFuntions.java +++ b/OsmAnd/src/net/osmand/plus/base/FailSafeFuntions.java @@ -174,7 +174,7 @@ public class FailSafeFuntions { app.getTargetPointsHelper().setStartPoint(null, false, null); app.getSettings().FOLLOW_THE_ROUTE.set(true); routingHelper.setFollowingMode(true); - app.getTargetPointsHelper().updateRoutingHelper(); + app.getTargetPointsHelper().updateRouteAndReferesh(true); app.initVoiceCommandPlayer(ma); } diff --git a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java index ffbc4cd4a6..1d04a5d913 100644 --- a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java +++ b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java @@ -11,6 +11,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; +import android.graphics.RectF; import android.graphics.Paint.Style; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -26,8 +27,8 @@ public class FavoriteImageDrawable extends Drawable { private Drawable drawable; private float density; private Bitmap bmp; - private int bmpSize; private Paint paintBmp; + private RectF bmpDest; public FavoriteImageDrawable(Context ctx, int color) { @@ -39,7 +40,7 @@ public class FavoriteImageDrawable extends Drawable { density = dm.density; drawable = getResources().getDrawable(R.drawable.ic_action_fav_dark); bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_fav_light); - bmpSize = bmp.getWidth(); + bmpDest = new RectF(); paintOuter = new Paint(); paintOuter.setColor(0x88555555); paintOuter.setAntiAlias(true); @@ -50,7 +51,7 @@ public class FavoriteImageDrawable extends Drawable { paintBmp.setDither(true); paintInnerCircle = new Paint(); paintInnerCircle.setStyle(Style.FILL_AND_STROKE); - paintInnerCircle.setColor(color == 0 || color == Color.BLACK ? getResources().getColor(R.color.color_distance) : color); + paintInnerCircle.setColor(color == 0 || color == Color.BLACK ? getResources().getColor(R.color.color_favorite) : color); paintInnerCircle.setAntiAlias(true); } @@ -96,13 +97,12 @@ public class FavoriteImageDrawable extends Drawable { drawable.draw(canvas); } - public void drawBitmapInCenter(Canvas canvas, int x, int y) { - int min = (int) (bmpSize + 4 * density); - int r = (int) (min / 2); - int rs = (int) (min / 2 - 2 * density); - canvas.drawCircle(x, density + y, r, paintOuter); - canvas.drawCircle(x, density + y, rs, paintInnerCircle); - canvas.drawBitmap(bmp, x - bmpSize / 2, y - bmpSize / 2 , paintBmp); + public void drawBitmapInCenter(Canvas canvas, int x, int y, float density) { + float bmpRad = 10 * density; + bmpDest.set(x - bmpRad, y - bmpRad, x + bmpRad, y + bmpRad); + canvas.drawCircle(x, density + y, bmpRad + 3 * density, paintOuter); + canvas.drawCircle(x, density + y, bmpRad + 2 * density, paintInnerCircle); + canvas.drawBitmap(bmp, null, bmpDest, paintBmp); } @Override diff --git a/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java b/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java index bdd000db44..7eb2f3938a 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java +++ b/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java @@ -4,6 +4,7 @@ package net.osmand.plus.osmo; import java.util.List; import net.osmand.access.AccessibleToast; +import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.SettingsBaseActivity; import net.osmand.plus.activities.actions.ShareDialog; @@ -56,15 +57,17 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { MINUTES, 1000, R.string.osmo_track_interval, R.string.osmo_track_interval_descr)); CheckBoxPreference showGroupNotifiations = createCheckBoxPreference(settings.OSMO_SHOW_GROUP_NOTIFICATIONS); - sendLocationsref.setTitle(R.string.osmo_show_group_notifications); - sendLocationsref.setSummary(R.string.osmo_show_group_notifications_descr); - grp.addPreference(sendLocationsref); + showGroupNotifiations.setTitle(R.string.osmo_show_group_notifications); + showGroupNotifiations.setSummary(R.string.osmo_show_group_notifications_descr); + grp.addPreference(showGroupNotifiations); - debugPref = new Preference(this); - debugPref.setTitle(R.string.osmo_settings_debug); - debugPref.setOnPreferenceClickListener(this); - updateDebugPref(); - grp.addPreference(debugPref); + if (OsmandPlugin.isDevelopment()) { + debugPref = new Preference(this); + debugPref.setTitle(R.string.osmo_settings_debug); + debugPref.setOnPreferenceClickListener(this); + updateDebugPref(); + grp.addPreference(debugPref); + } } private void updateDebugPref() { diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index 079d27b611..416982c1af 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -290,7 +290,7 @@ public class RoutingHelper { recalculateRouteInBackground(false, currentLocation, finalLocation, intermediatePoints, currentGPXRoute, previousRoute.isCalculated() ? previousRoute : null); } - double projectDist = mode.hasFastSpeed() ? posTolerance : posTolerance / 2; + double projectDist = mode != null && mode.hasFastSpeed() ? posTolerance : posTolerance / 2; if(returnUpdatedLocation && locationProjection != null && currentLocation.distanceTo(locationProjection) < projectDist) { return locationProjection; } else { diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java index 1a80f0217e..432555d259 100644 --- a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java +++ b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java @@ -242,7 +242,7 @@ public class SherpafyCustomization extends OsmAndAppCustomization { @Override public void prepareLayerContextMenu(MapActivity activity, ContextMenuAdapter adapter) { - filter(adapter, R.string.layer_poi, R.string.layer_poi_label, R.string.layer_favorites); + filter(adapter, R.string.layer_poi, R.string.layer_amenity_label, R.string.layer_favorites); } @Override diff --git a/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java b/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java index e391a99f70..bfa1c26549 100644 --- a/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java @@ -13,6 +13,7 @@ import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.R; import net.osmand.plus.base.FavoriteImageDrawable; +import net.osmand.plus.views.MapTextLayer.MapTextProvider; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; @@ -22,19 +23,18 @@ import android.graphics.Paint; import android.graphics.PointF; import android.widget.Toast; -public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { +public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider, MapTextProvider { private static final int startZoom = 6; private OsmandMapTileView view; private Paint paint; private FavouritesDbHelper favorites; + private List cache = new ArrayList(); + private MapTextLayer textLayer; // private Bitmap d; - public FavoritesLayer(){ - } - @Override public void initLayer(OsmandMapTileView view) { @@ -45,6 +45,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.I paint.setDither(true); favorites = view.getApplication().getFavorites(); + textLayer = view.getLayerByClass(MapTextLayer.class); // favoriteIcon = BitmapFactory.decodeResource(view.getResources(), R.drawable.poi_favourite); @@ -74,6 +75,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.I @Override public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { + cache.clear(); if (tileBox.getZoom() >= startZoom) { // request to load final QuadRect latLonBounds = tileBox.getLatLonBounds(); @@ -81,15 +83,19 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.I if (o.getLatitude() >= latLonBounds.bottom && o.getLatitude() <= latLonBounds.top && o.getLongitude() >= latLonBounds.left && o.getLongitude() <= latLonBounds.right ) { + cache.add(o); int x = (int) tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude()); int y = (int) tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude()); FavoriteImageDrawable fid = FavoriteImageDrawable.getOrCreate(view.getContext(), o.getColor()); - fid.drawBitmapInCenter(canvas, x, y); + fid.drawBitmapInCenter(canvas, x, y, tileBox.getDensity()); // canvas.drawBitmap(favoriteIcon, x - favoriteIcon.getWidth() / 2, // y - favoriteIcon.getHeight(), paint); } } } + if(textLayer.isVisible()) { + textLayer.putData(this, cache); + } } @@ -115,7 +121,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.I public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { List favs = new ArrayList(); getFavoriteFromPoint(tileBox, point, favs); - if(!favs.isEmpty()){ + if(!favs.isEmpty() && (tileBox.getZoom() > 14 || favs.size() < 6)){ StringBuilder res = new StringBuilder(); int i = 0; for(FavouritePoint fav : favs) { @@ -188,6 +194,21 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.I R.drawable.ic_action_delete_light).listen(listener).reg(); } } + + @Override + public LatLon getTextLocation(FavouritePoint o) { + return new LatLon(o.getLatitude(), o.getLongitude()); + } + + @Override + public int getTextShift(FavouritePoint o, RotatedTileBox rb) { + return (int) (16 * rb.getDensity()); + } + + @Override + public String getText(FavouritePoint o) { + return o.getName(); + } } diff --git a/OsmAnd/src/net/osmand/plus/views/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/GPXLayer.java index 9e43a0c002..8b4c641e3e 100644 --- a/OsmAnd/src/net/osmand/plus/views/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/GPXLayer.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import net.osmand.access.AccessibleToast; -import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; import net.osmand.data.QuadRect; import net.osmand.data.RotatedTileBox; @@ -13,6 +12,7 @@ import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; import net.osmand.plus.R; import net.osmand.plus.base.FavoriteImageDrawable; +import net.osmand.plus.views.MapTextLayer.MapTextProvider; import net.osmand.render.RenderingRuleSearchRequest; import net.osmand.render.RenderingRulesStorage; import android.graphics.Canvas; @@ -24,7 +24,8 @@ import android.graphics.Path; import android.graphics.PointF; import android.widget.Toast; -public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { +public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider, + MapTextProvider{ private OsmandMapTileView view; @@ -40,6 +41,9 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex private GpxSelectionHelper selectedGpxHelper; private Paint paintBmp; + private List cache = new ArrayList(); + private MapTextLayer textLayer; + // private Drawable favoriteIcon; @@ -57,6 +61,8 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex paintBmp.setAntiAlias(true); paintBmp.setFilterBitmap(true); paintBmp.setDither(true); + + textLayer = view.getLayerByClass(MapTextLayer.class); //favoriteIcon = BitmapFactory.decodeResource(view.getResources(), R.drawable.poi_favourite); } @@ -90,6 +96,8 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { List selectedGPXFiles = selectedGpxHelper.getSelectedGPXFiles(); int clr = getColor(settings); + cache.clear(); + int pointColor = view.getResources().getColor(R.color.gpx_track); if (!selectedGPXFiles.isEmpty()) { for (SelectedGpxFile g : selectedGPXFiles) { List> points = g.getPointsToDisplay(); @@ -102,14 +110,15 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex final QuadRect latLonBounds = tileBox.getLatLonBounds(); for (SelectedGpxFile g : selectedGPXFiles) { List pts = g.getGpxFile().points; - int fcolor = g.getColor() == 0 ? clr : g.getColor(); + int fcolor = g.getColor() == 0 ? pointColor : g.getColor(); FavoriteImageDrawable fid = FavoriteImageDrawable.getOrCreate(view.getContext(), fcolor); for (WptPt o : pts) { if (o.lat >= latLonBounds.bottom && o.lat <= latLonBounds.top && o.lon >= latLonBounds.left && o.lon <= latLonBounds.right) { + cache.add(o); int x = (int) tileBox.getPixXFromLatLon(o.lat, o.lon); int y = (int) tileBox.getPixYFromLatLon(o.lat, o.lon); - fid.drawBitmapInCenter(canvas, x, y); + fid.drawBitmapInCenter(canvas, x, y, tileBox.getDensity()); // canvas.drawBitmap(favoriteIcon, x - favoriteIcon.getWidth() / 2, // y - favoriteIcon.getHeight(), paint); } @@ -117,6 +126,9 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex } } } + if(textLayer.isVisible()) { + textLayer.putData(this, cache); + } } private void drawSegments(Canvas canvas, RotatedTileBox tileBox, List> points) { @@ -188,12 +200,12 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex @Override public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { - List favs = new ArrayList(); - getWptFromPoint(tileBox, point, favs); - if(!favs.isEmpty()){ + List gpxPoints = new ArrayList(); + getWptFromPoint(tileBox, point, gpxPoints); + if(!gpxPoints.isEmpty() && (tileBox.getZoom() > 14 || gpxPoints.size() < 6)){ StringBuilder res = new StringBuilder(); int i = 0; - for(WptPt fav : favs) { + for(WptPt fav : gpxPoints) { if (i++ > 0) { res.append("\n\n"); } @@ -229,8 +241,8 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex @Override public LatLon getObjectLocation(Object o) { - if(o instanceof FavouritePoint){ - return new LatLon(((FavouritePoint)o).getLatitude(), ((FavouritePoint)o).getLongitude()); + if(o instanceof WptPt){ + return new LatLon(((WptPt)o).lat, ((WptPt)o).lon); } return null; } @@ -250,6 +262,21 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex return false; } + @Override + public LatLon getTextLocation(WptPt o) { + return new LatLon(((WptPt)o).lat, ((WptPt)o).lon); + } + + @Override + public int getTextShift(WptPt o, RotatedTileBox rb) { + return (int) (16 * rb.getDensity()); + } + + @Override + public String getText(WptPt o) { + return o.name; + } + diff --git a/OsmAnd/src/net/osmand/plus/views/MapTextLayer.java b/OsmAnd/src/net/osmand/plus/views/MapTextLayer.java new file mode 100644 index 0000000000..c7d709839c --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/views/MapTextLayer.java @@ -0,0 +1,196 @@ +package net.osmand.plus.views; + +import gnu.trove.set.hash.TIntHashSet; + +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.osmand.data.LatLon; +import net.osmand.data.RotatedTileBox; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Align; +import android.graphics.Paint.Style; + +public class MapTextLayer extends OsmandMapLayer { + + private Map> textObjects = new LinkedHashMap>(); + public static final int TEXT_WRAP = 15; + public static final int TEXT_LINES = 3; + private Paint paintTextIcon; + private OsmandMapTileView view; + + + public interface MapTextProvider { + + LatLon getTextLocation(T o); + + int getTextShift(T o, RotatedTileBox rb); + + String getText(T o); + } + + public void putData(OsmandMapLayer ml, List objects) { + if(objects == null || objects.isEmpty()) { + textObjects.remove(ml); + } else { + if(ml instanceof MapTextProvider) { + textObjects.put(ml, objects); + } else { + throw new IllegalArgumentException(); + } + } + } + + public boolean isVisible() { + return view.getSettings().SHOW_POI_LABEL.get(); + } + + @SuppressWarnings("unchecked") + @Override + public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { + if (!view.getSettings().SHOW_POI_LABEL.get()) { + return; + } + TIntHashSet set = new TIntHashSet(); + for (OsmandMapLayer l : textObjects.keySet()) { + if (view.isLayerVisible(l)) { + for (Object o : textObjects.get(l)) { + LatLon location = ((MapTextProvider) l).getTextLocation(o); + int x = (int) tileBox.getPixXFromLatLon(location.getLatitude(), location + .getLongitude()); + int y = (int) tileBox.getPixYFromLatLon(location.getLatitude(), location + .getLongitude()); + int tx = tileBox.getPixXFromLonNoRot(location.getLongitude()); + int ty = tileBox.getPixYFromLatNoRot(location.getLatitude()); + String name = ((MapTextProvider) l).getText(o); + if (name != null && name.length() > 0) { + int lines = 0; + while (lines < TEXT_LINES) { + if (set.contains(division(tx, ty, 0, lines)) || set.contains(division(tx, ty, -1, lines)) + || set.contains(division(tx, ty, +1, lines))) { + break; + } + lines++; + } + if (lines == 0) { + // drawWrappedText(canvas, "...", paintTextIcon.getTextSize(), x, y + r + 2 + + // paintTextIcon.getTextSize() / 2, 1); + } else { + int r = ((MapTextProvider) l).getTextShift(o, tileBox); + drawWrappedText(canvas, name, paintTextIcon.getTextSize(), x, + y + r + 2 + paintTextIcon.getTextSize() / 2, lines); + while (lines > 0) { + set.add(division(tx, ty, 1, lines - 1)); + set.add(division(tx, ty, -1, lines - 1)); + set.add(division(tx, ty, 0, lines - 1)); + lines--; + } + } + } + } + } + } + } + + private int division(int x, int y, int sx, int sy) { + // make numbers positive + return ((((x + 10000) >> 4) + sx) << 16) | (((y + 10000) >> 4) + sy); + } + + private void drawWrappedText(Canvas cv, String text, float textSize, float x, float y, int lines) { + if(text.length() > TEXT_WRAP){ + int start = 0; + int end = text.length(); + int lastSpace = -1; + int line = 0; + int pos = 0; + int limit = 0; + while(pos < end && (line < lines)){ + lastSpace = -1; + limit += TEXT_WRAP; + while(pos < limit && pos < end){ + if(!Character.isLetterOrDigit(text.charAt(pos))){ + lastSpace = pos; + } + pos++; + } + if(lastSpace == -1 || (pos == end)){ + drawShadowText(cv, text.substring(start, pos), x, y + line * (textSize + 2)); + start = pos; + } else { + String subtext = text.substring(start, lastSpace); + if (line + 1 == lines) { + subtext += ".."; + } + drawShadowText(cv, subtext, x, y + line * (textSize + 2)); + + start = lastSpace + 1; + limit += (start - pos) - 1; + } + + line++; + + + } + } else { + drawShadowText(cv, text, x, y); + } + } + + private void drawShadowText(Canvas cv, String text, float centerX, float centerY) { + int c = paintTextIcon.getColor(); + paintTextIcon.setStyle(Style.STROKE); + paintTextIcon.setColor(Color.WHITE); + paintTextIcon.setStrokeWidth(2); + cv.drawText(text, centerX, centerY, paintTextIcon); + // reset + paintTextIcon.setStrokeWidth(2); + paintTextIcon.setStyle(Style.FILL); + paintTextIcon.setColor(c); + cv.drawText(text, centerX, centerY, paintTextIcon); + } + + @Override + public void initLayer(OsmandMapTileView v) { + this.view = v; + paintTextIcon = new Paint(); + paintTextIcon.setTextSize(13 * v.getDensity()); + paintTextIcon.setTextAlign(Align.CENTER); + paintTextIcon.setAntiAlias(true); + Map> textObjectsLoc = new TreeMap>(new Comparator() { + + @Override + public int compare(OsmandMapLayer lhs, OsmandMapLayer rhs) { + if(view != null) { + float z1 = view.getZorder(lhs); + float z2 = view.getZorder(rhs); + return Float.compare(z1, z2); + + } + return 0; + } + }); + textObjectsLoc.putAll(this.textObjects); + this.textObjects = textObjectsLoc; + } + + @Override + public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { + } + + @Override + public void destroyLayer() { + } + + @Override + public boolean drawInScreenPixels() { + return false; + } + +} diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java index ef432a2197..bf89537d5a 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java @@ -236,6 +236,18 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall public boolean onKeyDown(int keyCode, KeyEvent event) { return application.accessibilityEnabled() ? false : super.onKeyDown(keyCode, event); } + + public boolean isLayerVisible(OsmandMapLayer layer) { + return layers.contains(layer); + } + + public float getZorder(OsmandMapLayer layer) { + Float z = zOrders.get(layer); + if(z == null) { + return 10; + } + return z; + } public synchronized void addLayer(OsmandMapLayer layer, float zOrder) { int i = 0; diff --git a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java index ec8cdc2563..1009798533 100644 --- a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java @@ -1,7 +1,5 @@ package net.osmand.plus.views; -import gnu.trove.set.hash.TIntHashSet; - import java.util.ArrayList; import java.util.List; @@ -21,6 +19,7 @@ import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.render.RenderingIcons; import net.osmand.plus.resources.ResourceManager; +import net.osmand.plus.views.MapTextLayer.MapTextProvider; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; @@ -29,43 +28,40 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Paint.Align; import android.graphics.Paint.Style; import android.graphics.PointF; import android.net.Uri; import android.widget.Toast; -public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { +public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider, + MapTextProvider { private static final int startZoom = 10; - public static final int TEXT_WRAP = 15; - public static final int TEXT_LINES = 3; + public static final org.apache.commons.logging.Log log = PlatformUtil.getLog(POIMapLayer.class); - - + private Paint pointAltUI; private Paint paintIcon; - private Paint paintTextIcon; private Paint point; private OsmandMapTileView view; private List objects = new ArrayList(); private final static int MAXIMUM_SHOW_AMENITIES = 5; - + private ResourceManager resourceManager; private PoiFilter filter; + private MapTextLayer mapTextLayer; public POIMapLayer(MapActivity activity) { } - public PoiFilter getFilter() { return filter; } - + public void setFilter(PoiFilter filter) { this.filter = filter; } - - public void getAmenityFromPoint(RotatedTileBox tb, PointF point, List am){ + + public void getAmenityFromPoint(RotatedTileBox tb, PointF point, List am) { if (objects != null) { int ex = (int) point.x; int ey = (int) point.y; @@ -87,13 +83,12 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon } } } - @Override public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { List am = new ArrayList(); getAmenityFromPoint(tileBox, point, am); - if(!am.isEmpty()){ + if (!am.isEmpty()) { StringBuilder res = new StringBuilder(); for (int i = 0; i < MAXIMUM_SHOW_AMENITIES && i < am.size(); i++) { Amenity n = am.get(i); @@ -108,57 +103,51 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon return false; } - private StringBuilder buildPoiInformation(StringBuilder res, Amenity n) { - String format = OsmAndFormatter.getPoiSimpleFormat(n, view.getApplication(), view.getSettings().USE_ENGLISH_NAMES.get()); + String format = OsmAndFormatter.getPoiSimpleFormat(n, view.getApplication(), + view.getSettings().USE_ENGLISH_NAMES.get()); res.append(" " + format + "\n" + OsmAndFormatter.getAmenityDescriptionContent(view.getApplication(), n, true)); return res; } - - + @Override public void initLayer(OsmandMapTileView view) { this.view = view; pointAltUI = new Paint(); pointAltUI.setColor(view.getApplication().getResources().getColor(R.color.poi_background)); pointAltUI.setStyle(Style.FILL); - + paintIcon = new Paint(); - - paintTextIcon = new Paint(); - paintTextIcon.setTextSize(12 * view.getDensity()); - paintTextIcon.setTextAlign(Align.CENTER); - paintTextIcon.setAntiAlias(true); - + point = new Paint(); point.setColor(Color.GRAY); point.setAntiAlias(true); point.setStyle(Style.STROKE); resourceManager = view.getApplication().getResourceManager(); + mapTextLayer = view.getLayerByClass(MapTextLayer.class); } - - public int getRadiusPoi(RotatedTileBox tb){ + + public int getRadiusPoi(RotatedTileBox tb) { int r = 0; final float zoom = tb.getZoom() + tb.getZoomScale(); - if(zoom < startZoom){ + if (zoom < startZoom) { r = 0; - } else if(zoom <= 15){ + } else if (zoom <= 15) { r = 10; - } else if(zoom <= 16){ + } else if (zoom <= 16) { r = 14; - } else if(zoom <= 17){ + } else if (zoom <= 17) { r = 16; } else { r = 18; } return (int) (r * tb.getDensity()); } - + @Override public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { - + objects.clear(); if (tileBox.getZoom() >= startZoom) { - objects.clear(); final QuadRect latLonBounds = tileBox.getLatLonBounds(); resourceManager.searchAmenitiesAsync(latLonBounds.top, latLonBounds.left, latLonBounds.bottom, latLonBounds.right, tileBox.getZoom(), filter, objects); @@ -174,114 +163,23 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon MapRenderingTypes.getDefault().getAmenityTagValue(o.getType(), o.getSubType(), tag, value); if (RenderingIcons.containsIcon(tag + "_" + value)) { id = tag + "_" + value; - } else if(RenderingIcons.containsIcon(tag.toString())){ + } else if (RenderingIcons.containsIcon(tag.toString())) { id = tag.toString(); - } - if(id != null){ + } + if (id != null) { Bitmap bmp = RenderingIcons.getIcon(view.getContext(), id); - if(bmp != null){ + if (bmp != null) { canvas.drawBitmap(bmp, x - bmp.getWidth() / 2, y - bmp.getHeight() / 2, paintIcon); } } } - - if (view.getSettings().SHOW_POI_LABEL.get()) { - TIntHashSet set = new TIntHashSet(); - for (Amenity o : objects) { - int x = (int) tileBox.getPixXFromLatLon(o.getLocation().getLatitude(), o.getLocation().getLongitude()); - int y = (int) tileBox.getPixYFromLatLon(o.getLocation().getLatitude(), o.getLocation().getLongitude()); - int tx = tileBox.getPixXFromLonNoRot(o.getLocation().getLongitude()); - int ty = tileBox.getPixYFromLatNoRot(o.getLocation().getLatitude()); - String name = o.getName(view.getSettings().USE_ENGLISH_NAMES.get()); - if (name != null && name.length() > 0) { - int lines = 0; - while (lines < TEXT_LINES) { - if (set.contains(division(tx, ty, 0, lines)) || - set.contains(division(tx, ty, -1, lines)) || set.contains(division(tx, ty, +1, lines))) { - break; - } - lines++; - } - if (lines == 0) { - // drawWrappedText(canvas, "...", paintTextIcon.getTextSize(), x, y + r + 2 + paintTextIcon.getTextSize() / 2, 1); - } else { - drawWrappedText(canvas, name, paintTextIcon.getTextSize(), x, y + r + 2 + paintTextIcon.getTextSize() / 2, - lines); - while (lines > 0) { - set.add(division(tx, ty, 1, lines - 1)); - set.add(division(tx, ty, -1, lines - 1)); - set.add(division(tx, ty, 0, lines - 1)); - lines--; - } - } + } + mapTextLayer.putData(this, objects); - } - } - } - } - } - - + @Override - public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {} - - private int division(int x, int y, int sx, int sy) { - // make numbers positive - return ((((x + 10000) >> 4) + sx) << 16) | (((y + 10000) >> 4) + sy); - } - - private void drawWrappedText(Canvas cv, String text, float textSize, float x, float y, int lines) { - if(text.length() > TEXT_WRAP){ - int start = 0; - int end = text.length(); - int lastSpace = -1; - int line = 0; - int pos = 0; - int limit = 0; - while(pos < end && (line < lines)){ - lastSpace = -1; - limit += TEXT_WRAP; - while(pos < limit && pos < end){ - if(!Character.isLetterOrDigit(text.charAt(pos))){ - lastSpace = pos; - } - pos++; - } - if(lastSpace == -1 || (pos == end)){ - drawShadowText(cv, text.substring(start, pos), x, y + line * (textSize + 2)); - start = pos; - } else { - String subtext = text.substring(start, lastSpace); - if (line + 1 == lines) { - subtext += ".."; - } - drawShadowText(cv, subtext, x, y + line * (textSize + 2)); - - start = lastSpace + 1; - limit += (start - pos) - 1; - } - - line++; - - - } - } else { - drawShadowText(cv, text, x, y); - } - } - - private void drawShadowText(Canvas cv, String text, float centerX, float centerY) { - int c = paintTextIcon.getColor(); - paintTextIcon.setStyle(Style.STROKE); - paintTextIcon.setColor(Color.WHITE); - paintTextIcon.setStrokeWidth(2); - cv.drawText(text, centerX, centerY, paintTextIcon); - // reset - paintTextIcon.setStrokeWidth(2); - paintTextIcon.setStyle(Style.FILL); - paintTextIcon.setColor(c); - cv.drawText(text, centerX, centerY, paintTextIcon); + public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { } @Override @@ -292,9 +190,10 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon public boolean drawInScreenPixels() { return true; } + @Override public void populateObjectContextMenu(Object o, ContextMenuAdapter adapter) { - if(o instanceof Amenity) { + if (o instanceof Amenity) { final Amenity a = (Amenity) o; OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override @@ -302,7 +201,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon if (itemId == R.string.poi_context_menu_call) { try { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("tel:"+a.getPhone())); //$NON-NLS-1$ + intent.setData(Uri.parse("tel:" + a.getPhone())); //$NON-NLS-1$ view.getContext().startActivity(intent); } catch (RuntimeException e) { log.error("Failed to invoke call", e); //$NON-NLS-1$ @@ -311,7 +210,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon } else if (itemId == R.string.poi_context_menu_website) { try { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(a.getSite())); + intent.setData(Uri.parse(a.getSite())); view.getContext().startActivity(intent); } catch (RuntimeException e) { log.error("Failed to invoke call", e); //$NON-NLS-1$ @@ -322,44 +221,46 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon } } }; - if(OsmAndFormatter.getAmenityDescriptionContent(view.getApplication(), a, false).length() > 0){ + if (OsmAndFormatter.getAmenityDescriptionContent(view.getApplication(), a, false).length() > 0) { adapter.item(R.string.poi_context_menu_showdescription) - .icons(R.drawable.ic_action_note_dark,R.drawable.ic_action_note_light) - .listen(listener).reg(); + .icons(R.drawable.ic_action_note_dark, R.drawable.ic_action_note_light).listen(listener).reg(); } - if(a.getPhone() != null){ - adapter.item(R.string.poi_context_menu_call).icons(R.drawable.ic_action_call_dark, R.drawable.ic_action_call_light).listen(listener).reg(); + if (a.getPhone() != null) { + adapter.item(R.string.poi_context_menu_call) + .icons(R.drawable.ic_action_call_dark, R.drawable.ic_action_call_light).listen(listener).reg(); } - if(a.getSite() != null){ + if (a.getSite() != null) { adapter.item(R.string.poi_context_menu_website) - .icons( R.drawable.ic_action_globus_dark, R.drawable.ic_action_globus_light).listen(listener).reg(); + .icons(R.drawable.ic_action_globus_dark, R.drawable.ic_action_globus_light).listen(listener) + .reg(); } } } private void showDescriptionDialog(Amenity a) { Builder bs = new AlertDialog.Builder(view.getContext()); - bs.setTitle(OsmAndFormatter.getPoiSimpleFormat(a, view.getApplication(), view.getSettings().USE_ENGLISH_NAMES.get())); - if(a.getType() == AmenityType.OSMWIKI) { + bs.setTitle(OsmAndFormatter.getPoiSimpleFormat(a, view.getApplication(), + view.getSettings().USE_ENGLISH_NAMES.get())); + if (a.getType() == AmenityType.OSMWIKI) { bs.setMessage(a.getDescription()); } else { bs.setMessage(OsmAndFormatter.getAmenityDescriptionContent(view.getApplication(), a, false)); } bs.show(); } - + @Override public String getObjectDescription(Object o) { - if(o instanceof Amenity){ + if (o instanceof Amenity) { return buildPoiInformation(new StringBuilder(), (Amenity) o).toString(); } return null; } - + @Override public String getObjectName(Object o) { - if(o instanceof Amenity){ - return ((Amenity)o).getName(); //$NON-NLS-1$ + if (o instanceof Amenity) { + return ((Amenity) o).getName(); //$NON-NLS-1$ } return null; } @@ -371,10 +272,25 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon @Override public LatLon getObjectLocation(Object o) { - if(o instanceof Amenity){ - return ((Amenity)o).getLocation(); + if (o instanceof Amenity) { + return ((Amenity) o).getLocation(); } return null; } + @Override + public LatLon getTextLocation(Amenity o) { + return o.getLocation(); + } + + @Override + public int getTextShift(Amenity o, RotatedTileBox rb) { + return getRadiusPoi(rb); + } + + @Override + public String getText(Amenity o) { + return o.getName(view.getSettings().USE_ENGLISH_NAMES.get()); + } + } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java b/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java index b0f1f4bab1..821e83806c 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java @@ -183,7 +183,7 @@ public class MapRoutePreferencesControl extends MapControls { update = true; } if(update) { - tg.updateRoutingHelper(); + tg.updateRouteAndReferesh(true); } } } else if (gpxParam.id == R.string.gpx_option_calculate_first_last_segment) { @@ -361,7 +361,7 @@ public class MapRoutePreferencesControl extends MapControls { @Override public boolean processResult(GPXFile[] result) { mapActivity.getMapActions().setGPXRouteParams(result[0]); - mapActivity.getMyApplication().getTargetPointsHelper().updateRoutingHelper(); + mapActivity.getMyApplication().getTargetPointsHelper().updateRouteAndReferesh(true); updateSpinnerItems(gpxSpinner); updateParameters(); mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange(); diff --git a/plugins/Osmand-ParkingPlugin/res/values-be/strings.xml b/plugins/Osmand-ParkingPlugin/res/values-be/strings.xml new file mode 100644 index 0000000000..ba9e431786 --- /dev/null +++ b/plugins/Osmand-ParkingPlugin/res/values-be/strings.xml @@ -0,0 +1,4 @@ + +Так + Не +