diff --git a/OsmAnd-java/src/net/osmand/data/FavouritePoint.java b/OsmAnd-java/src/net/osmand/data/FavouritePoint.java index 5eb38e8c58..fb151c4d57 100644 --- a/OsmAnd-java/src/net/osmand/data/FavouritePoint.java +++ b/OsmAnd-java/src/net/osmand/data/FavouritePoint.java @@ -2,7 +2,7 @@ package net.osmand.data; import java.io.Serializable; -public class FavouritePoint implements Serializable { +public class FavouritePoint implements Serializable, LocationPoint { private static final long serialVersionUID = 729654300829771466L; private String name; private String category = ""; @@ -16,6 +16,8 @@ public class FavouritePoint implements Serializable { public FavouritePoint(){ } + + public FavouritePoint(double latitude, double longitude, String name, String category) { this.latitude = latitude; this.longitude = longitude; diff --git a/OsmAnd-java/src/net/osmand/data/LocationPoint.java b/OsmAnd-java/src/net/osmand/data/LocationPoint.java new file mode 100644 index 0000000000..f09512a055 --- /dev/null +++ b/OsmAnd-java/src/net/osmand/data/LocationPoint.java @@ -0,0 +1,16 @@ +package net.osmand.data; + +/** + * Created by Натали on 01.08.2014. + */ +public interface LocationPoint { + + public double getLatitude(); + + public double getLongitude(); + + public String getName(); + + public int getColor(); + +} diff --git a/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java b/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java index e29e09146c..07c07ef240 100644 --- a/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java +++ b/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java @@ -243,8 +243,17 @@ public class MapRenderingTypes { return getRuleType(tag, val, true); } + private String lc(String a) { + if(a != null) { + return a.toLowerCase(); + } + return a; + } + protected MapRulType getRuleType(String tag, String val, boolean poi) { Map types = getEncodingRuleTypes(); + tag = lc(tag); + val = lc(val); MapRulType rType = types.get(constructRuleKey(tag, val)); if (rType == null || (!rType.isPOI() && poi) || (!rType.isMap() && !poi)) { rType = types.get(constructRuleKey(tag, null)); @@ -417,8 +426,8 @@ public class MapRenderingTypes { } protected MapRulType parseBaseRuleType(XmlPullParser parser, String poiParentCategory, String poiParentPrefix, String parentOrder, boolean filterOnlyMap) { - String tag = parser.getAttributeValue("", "tag"); - String value = parser.getAttributeValue("", "value"); + String tag = lc(parser.getAttributeValue("", "tag")); + String value = lc(parser.getAttributeValue("", "value")); String additional = parser.getAttributeValue("", "additional"); if (value != null && value.length() == 0) { //$NON-NLS-1$ value = null; @@ -486,9 +495,9 @@ public class MapRenderingTypes { rtype.poiPrefix = poiPrefix; } - if (!rtype.isAdditional() && !rtype.isText()) { - rtype.onlyPoint = Boolean.parseBoolean(parser.getAttributeValue("", "point")); //$NON-NLS-1$ - rtype.relation = Boolean.parseBoolean(parser.getAttributeValue("", "relation")); //$NON-NLS-1$ + rtype.onlyPoint = Boolean.parseBoolean(parser.getAttributeValue("", "point")); //$NON-NLS-1$ + rtype.relation = Boolean.parseBoolean(parser.getAttributeValue("", "relation")); //$NON-NLS-1$ + if (!rtype.isAdditional() && !rtype.isText()) { rtype.namePrefix = parser.getAttributeValue("", "namePrefix"); //$NON-NLS-1$ if (rtype.namePrefix == null) { rtype.namePrefix = ""; diff --git a/OsmAnd/project.properties b/OsmAnd/project.properties index da75a72a89..fa5a5c7730 100644 --- a/OsmAnd/project.properties +++ b/OsmAnd/project.properties @@ -11,5 +11,5 @@ split.density=false # Project target. target=android-19 -android.library.reference.1=../SherlockBar dex.force.jumbo=true +android.library.reference.1=../SherlockBar diff --git a/OsmAnd/res/drawable-hdpi/ic_action_core_overflow_dark.png b/OsmAnd/res/drawable-hdpi/ic_action_core_overflow_dark.png new file mode 100644 index 0000000000..a074c10d05 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_action_core_overflow_dark.png differ diff --git a/OsmAnd/res/drawable-mdpi/ic_action_core_overflow_dark.png b/OsmAnd/res/drawable-mdpi/ic_action_core_overflow_dark.png new file mode 100644 index 0000000000..b6d614fcaf Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_action_core_overflow_dark.png differ diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_core_overflow_dark.png b/OsmAnd/res/drawable-xhdpi/ic_action_core_overflow_dark.png new file mode 100644 index 0000000000..7be3c2a4f1 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_action_core_overflow_dark.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_core_overflow_dark.png b/OsmAnd/res/drawable-xxhdpi/ic_action_core_overflow_dark.png new file mode 100644 index 0000000000..a0cb8a4182 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_action_core_overflow_dark.png differ diff --git a/OsmAnd/res/layout/list_menu_item.xml b/OsmAnd/res/layout/list_menu_item.xml index f2bf19d569..59c76e0f15 100644 --- a/OsmAnd/res/layout/list_menu_item.xml +++ b/OsmAnd/res/layout/list_menu_item.xml @@ -48,7 +48,6 @@ android:layout_marginRight="2dip" android:button="@drawable/ic_btn_wocheckbox" android:focusable="false" - android:clickable="false" /> diff --git a/OsmAnd/res/layout/list_menu_item_native.xml b/OsmAnd/res/layout/list_menu_item_native.xml index a4676522cf..e4c0daf796 100644 --- a/OsmAnd/res/layout/list_menu_item_native.xml +++ b/OsmAnd/res/layout/list_menu_item_native.xml @@ -46,8 +46,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="2dip" - android:focusable="false" - android:clickable="false"/> + android:focusable="false"/> \ No newline at end of file diff --git a/OsmAnd/res/layout/waypoint_reached.xml b/OsmAnd/res/layout/waypoint_reached.xml new file mode 100644 index 0000000000..0613ff603e --- /dev/null +++ b/OsmAnd/res/layout/waypoint_reached.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 3330a5e06c..a66b5d2f17 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -134,7 +134,7 @@ Зьмены ў версіі 1.3: \n\t* Перапісана падтрымка планшэтаў і вялікіх эканаў \n\t* Тэма Holo (налады) \n\t* Дадатковыя налады для стабілізацыі компасу \n\t* Верхняя левая кнопка на экране мапы замяняе кнопку Меню Запіс сьледу - Налады запісу сьледу і рэжыму сну + Налады запісу сьледу Дазволіць адсочваньне месцазнаходжаньня і навігацыю ў рэжыме сну (калі экран выключаны) шляхам пэрыядычнага абуджэньня GPS прыймача. Паказаць налады запісу вандровак ў лякальныя GPX файлы ці ў сеткавы вэб-сэрвіс. Запіс сьледу @@ -1913,4 +1913,23 @@ OsmAnd мае адкрыты зыходны код і актыўна разві кітайская традыцыйная сардынская Рэжым метро - + Каляровыя будынкі + Запрасiць… + Хочаце пакінуць групу %1$s? + Калі ласка, увядзіце ID + Працягваць навігацыю + Прыпыніць навігацыю + Пешы горны турызм + Візуалізацыя шляху па шкале SAC + Накладаньне знакаў пешага турызму + Візуалізацыя шляху згодна трасам OSMC + + Раней + Звычайна + Пазьней + На апошніх метрах + Памер фота + Памер выявы для убудаванага фатаграфаваньня + Выдаліць усе + Абвяшчаць бліжэйшыя выбраныя кропкі + diff --git a/OsmAnd/res/values-bg/strings.xml b/OsmAnd/res/values-bg/strings.xml index 0c67586d8c..b27fb54bf4 100644 --- a/OsmAnd/res/values-bg/strings.xml +++ b/OsmAnd/res/values-bg/strings.xml @@ -12,8 +12,6 @@ Упътвания към Упътвания от Карта: - Ширина %1$.3f, Дължина %2$.3f - Текуща позиция За: През: От: diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index e7830dca1c..fd9106abe5 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -1249,7 +1249,7 @@ Millor autopistes cap Dades de les corbes de nivell - Podeu configurar com enregistrar els recorreguts i habilitar el mode en suspensió + Configurar com enregistrar els recorreguts Serveis d\'enregistrament Usa l\\\'aplicació del sistema per a les fotografies Usa l\\\'aplicació de la càmera @@ -1819,7 +1819,7 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània, Traces seleccionades Totes les pistes El meus favorits - Les meus llocs + Els meus llocs Els meus llocs L\'usuari %1$s s\'ha unit al grup %2$s L\'usuari %1$s ha deixat el grup %2$s @@ -1864,25 +1864,25 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània, No seleccionat Selecciona per veure Res per descarregar, verifiqui la connexió a internet. - Punts OsMo %1$s descarregats. - Connectar automàticament amb el servei desprès d\'iniciar l\'aplicació - Auto-connexió + S\'han baixat %1$s punts OsMo. + Connecta automàticament amb el servei desprès d\'iniciar l\'aplicació + Connexió automàtica Servei OsMo - Traça OsMo %1$s descarregada. - Inici sessió OsMo erroni + S\'ha baixat la traça OsMo %1$s. + Ha fallat l\'inici de sessió OsMo Entreu per convidar " - Tots els grups creats són públics! Si es vol ser anònim, afegiu directament els aparells via identificació de Tracker.\n - Dins el grup es poden registrar fins un màxim de 16 persones.\n - Cas d\'inactivitat o d\'activitat d\'una sola persona durant 2 setmanes, el grup serà esborrat.\n - Es pot restringir l\'entrada al grup, a només per invitació, però per controlar el grup es necessitarà accedir a la consola d\'administració.\n - Si us cal crear un grup, però amb altres condicions, contacteu http://osmo.mobi" - Si us plau, llegiu abans de crear un grup! - Autorització fallida - Trobat error OsMo d\'autorització : %1$s.\n Podria ser una caiguda temporal del servei o l\'expiració del teu usuari.\n Vols procedir a crear un nou usuari? - Amaga edificis - Amaga vies sense circulació de vehicles - Amaga text + Cal que ho llegiu abans de crear un grup! + Ha fallat l\'autorització + S\'ha trobat un error d\'autorització OsMo: %1$s.\n Pot ser per una caiguda temporal del servei o bé pel venciment del vostre usuari.\n Voleu crear un nou usuari nou? + Oculta els edificis + Oculta les vies sense circulació de vehicles + Oculta el text Amaga tipus de vegetació Representació d\'edificis al detall 15 de zoom Més detallat Menys detallat - Amaga el tipus d\'accés + Oculta el tipus d\'accés Mostra el tipus d\'accés Mostra la qualitat de les vies Mostra el tipus de superfície de les vies @@ -1897,37 +1897,42 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània, Endavant Punt inicial Envia registre de traces a un servei web específic si s\'ha activat la gravació GPX. - Registre de traça online (cal GPX) - Inicia registre de traça online - Atura el registre de traça online + Registre de traça en línia (cal GPX) + Inicia un registre de traça en línia + Atura el registre de traça en línia Inicia gravació GPX Atura gravació GPX - Inicia nou segment + Inicia un segment nou Persa Mantenir Aturar Activar mode baixa activitat - Interval d\'activació GPS - Mantenir GPS activat? + Interval d\'activació del GPS + Mantenir GPS actiu? Albanés Àrab Sard Serbi Xinès simplificat Xinès tradicional - Mode subsol - Continuar Navegació - Interrompre Navegació + Mode soterrat + Continua la navegació + Interrompre la navegació Perspectiva senderista Representar els camins segons l\'escala SAC Sobreposar simbologia senderista Representar els camins segons les traces OSMC Convida… - Realment vols deixar el grup %1$s? - Especifiqui id + Voleu deixar el grup %1$s? + Especifiqueu l\'ID Aviat Normal Tard Als darrers metres - + Edificis amb colors + Mida d\'imatge de la càmera + Triar la mida d\'imatge de la càmera interna + Esborra tot + Indica preferits propers + diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 6be544cfe2..2c2918ee07 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -1204,14 +1204,14 @@ \n\t* Další nastavení pro stabilizaci kompasu \n\t* Tlačítko vlevo nahoře na mapové obrazovce nahrazuje tlačítko Menu - Záznamy tras a služby na pozadí - Záznamy tras a služby na pozadí + Záznamové služby + Záznamové služby Volby usnadnění Vybrat adresu Vybrat oblíbené Editace OSM Další akce - Konfigurace záznamů cest a spouštění služeb na pozadí + Konfigurace záznamů cest Instalovat plnou verzi Zastavit navigaci Použít Kalmanův filtr k zabránění odchylek kompasu @@ -1496,11 +1496,7 @@ s často kladenými otázkami. * Můžete rozdělit GPX trasu podle vzdálenosti a kontrolovat výškový rozdíl/rychlost * Automatický start navigace po uplynutí času - OpenStreetMap-Monitorování - Pokročilé monitorování. Poskytuje možnost sledování jiných zařízení nebo být sledován. - Vytvořte anonymní skupiny, sdílejte vzájemně polohu a komunikujte. Různé možnosti nastavení krátkodobého nebo trvalého sledování. - Anonymní skupiny jsou omezeny na počet dní a některými vlastnostmi, například nemají dálkové ovládání a skupinového správce. - Plně funkční skupiny se vytvářejí na webstránce a jsou přístupné pouze pro registrované uživatele. - Prosím čtěte více na http://osmo.mobi. + "OpenStreetMap pokročilé online monitorování, podívejte se na http://osmo.mobi. Poskytuje možnost sledování jiných zařízení nebo být sledován. Vytvořte anonymní skupiny, sdílejte vzájemně polohu a komunikujte. Různé možnosti nastavení krátkodobého nebo trvalého sledování. Anonymní skupiny jsou omezeny na počet dní a některými vlastnostmi, například nemají dálkové ovládání a skupinového správce. Plně funkční skupiny se vytvářejí na webstránce a jsou přístupné pouze pro registrované uživatele. " červená růžová oranžová @@ -1684,4 +1680,26 @@ s často kladenými otázkami. Chcete opustit skupinu %1$s? Prosím určete id Barevné budovy - + Svahilština (Kiswahili) + Hebrejština + Albánština + Arabština + Perština + Sardština + Srbština + Zjednodušená čínština + Tradiční čínština + Vysokohorská turistika + Vykreslovat cesty podle stupnice SAC + Zobrazovat turistické značky + Vykreslovat cesty podle OSMC značení + + Brzy + Normálně + Později + V posledních metrech + Velikost fotografie + Vyberte velikost obrázku interního fotoaparátu + Odstranit všechny + Oznamovat oblíbená místa v blízkosti + diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 5f6efce41f..5f8772227f 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -1457,7 +1457,7 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, \n* Nederste venstre knap på kortskærmen erstatter menuknappen Logningstjenester - Indstil, hvordan ture optages og dvaletilstand aktiveres + Indstil, hvordan ture optages Logningstjenester OSM modifikationer Flere handlinger @@ -1900,7 +1900,7 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, Tilslut med invitation " -Alle grupper der oprettes er offentlige! Hvis de skal være anonyme, tilsluttes enheder direkte via sporings-id\'er.\n -Op til 16 personer kan registreres i gruppen.\n -I tilfælde af inaktivitet eller aktivitet af kun 1 person i 2 uger, vil gruppen blive slettet.\n -Du kan begrænse adgangen til gruppen, til kun med invitation, men for at kontrollere gruppen skal man bruge administrationskonsollen.\n -Hvis du har brug at oprette en gruppe, men med andre betingelser, kontakt http://osmo.mobi" Autorisation fejlede - "OsMo autorisation fejl: %$s.\nDet kan være at tjenesten midlertidig er nede eller din registrering er udløbet.\nVil du fortsætte med en ny registrering." + "OsMo autorisation fejl: %$s.\nDet kan være at tjenesten midlertidig er nede eller din registrering er udløbet.\nVil du fortsætte med en ny registrering?" Skjul bygninger Skjul gang- og cykelstier Skjul tekst @@ -1940,11 +1940,11 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, Kinesisk, traditionelt Sardisk Metrotilstand - Fortsæt navigationen - Pause navigationen + Fortsæt navigation + Pause navigation Alpin vandringsvisning Generer stier efter SAC skala - Vandretur symbol overlejring + Vandresymbol overlejring Generer stier efter OSMC spor Inviter… @@ -1953,6 +1953,10 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, Tidligt Normalt Sent - Ved sidste meter + Ved de sidste meter Farvede bygninger - + Fjern alle +Kamera billedstørrelse + Vælg billedstørrelse for intern kamera + Meddel om favoritter i nærheden + diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 23e5eedd7a..4725e6b843 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1,5 +1,23 @@ - -Die Route ist wahrscheinlich zu lang um vom OsmAnd-Offline-Router berechnet zu werden. Offline-Routing ist bis ungefähr 200 km Abstand zwischen einzelnen Punkten möglich. Bitte einen oder mehrere Zwischenpunkte setzen um die Route berechnen zu können. + + + Kamera-Bildgröße + Interne Kamera-Bildgröße auswählen + Nahe gelegene Favoriten ansagen + Gefärbte Gebäude + Navigation fortsetzen + Navigation pausieren + Aktiv lassen + Anhalten + Schlafmodus aktivieren + Alpinwanderung Ansicht + Wege entsprechend der SAC-Wanderskala darstellen + Wandersymbole anzeigen + Wandersymbole anzeigen (OSMC) + Früh + Normal + Spät + Auf den letzten Metern + Die Route ist wahrscheinlich zu lang um vom OsmAnd-Offline-Router berechnet zu werden. Offline-Routing ist bis ungefähr 200 km Abstand zwischen einzelnen Punkten möglich. Bitte einen oder mehrere Zwischenpunkte setzen um die Route berechnen zu können. Kein Auto-Zoom Auf Nahbereich Auf Mittelbereich @@ -587,7 +605,7 @@ Profil verwenden OsmAnd unterstützt verschiedene (individuell anpassbare) Profile für unterschiedliche Einsatzzwecke. - \n\nDas Profil kann mit dem Profilknopf links unten (Bild Auto, Fahrrad, oder Fußgänger) auf dem Kartenbildschirm gewählt werden, oder auch beim Berechnen einer Route (Transportmittel). + \n\nDas Profil kann mit dem Profilknopf links unten (Bild Auto, Fahrrad oder Fußgänger) auf dem Kartenbildschirm gewählt werden, oder auch beim Berechnen einer Route (Transportmittel). Suchen Um bestimmte Orte zu finden, können Sie entweder auf der Landkarte über das \'Verwende Position\'-Kontextmenü \'In der Nähe suchen\' aufrufen, oder den Suchbildschirm über \'Menü\' → \'Suche\' erreichen. @@ -1321,10 +1339,10 @@ Änderungen in 1.3: \n\t * Holo-Theme (Anpassung des Theme) - Tracking & Schlaf-Modus - Tracking-Einstellungen und Konfiguration des Hintergrundmodus + Aufzeichnungs-Dienste + Konfiguration der Aufzeichnungs-Dienste Aktivieren Sie Tracking und die Navigation im Schlaf-Modus (Bildschirm aus). Das GPS-Gerät wird regelmäßig aktiviert. Zeigt Ihre Einstellungen zum Aufzeichnen Ihrer Wege als lokale GPX-Datei oder online bei einem Web-Service. - Tracking & Schlaf-Modus + Aufzeichnungs-Dienste Theme der Anwendung auswählen Eingabehilfen-Einstellungen Adresse auswählen @@ -1460,8 +1478,6 @@ Wähle vorhandene… Name Definieren/Bearbeiten… - Basis-Weltkarte - Karten-Lupe und oder GPS Status @@ -1867,7 +1883,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an ausgewählte als Favoriten-Gruppe speichern Wegpunkte auswählen - Trennungs-Intervall wählen + Trennungs-Intervall "Spurteile: %1$s " Darstellungsfarbe Sortieren nach Entfernung @@ -1893,7 +1909,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Straßenoberfläche anzeigen Fahrrad-Routen anzeigen Anmeldung fehlgeschlagen - Fehler bei der OsMo-Anmeldung: %1$s.\n Möglicherweise ist der Dienst nicht verfügbar, oder deine Anmeldung ist abgelaufen.\n Fortsetzen mit einer neuen Registrierung? + Fehler bei der OsMo-Anmeldung: %1$s.\n Möglicherweise ist der Dienst nicht verfügbar oder deine Anmeldung ist abgelaufen.\n Fortsetzen mit einer neuen Registrierung? Auf Einladung beitreten " - Alle angelegten Gruppen sind öffentlich! Für eine anonyme Verbindung bitte direkt mittels Tracker-ID verbinden.\n - In einer Gruppe können sich bis zu 16 Mitglieder anmelden.\n - Bei Inaktivität oder nur einem einzigen Mitglied über 2 Wochen wird die Gruppe gelöscht.\n - Der Zugang zu einer Gruppe kann beschränkt werden: \"nur auf Einladung\". Zur Steuerung der Gruppe benötigt man Zugang zur Admin-Konsole.\n - Zum Erstellen einer Gruppe mit abweichenden Bedingungen bitte Kontakt aufnehmen unter http://osmo.mobi" Bitte vor dem Erstellen von Gruppen beachten! @@ -1919,12 +1935,22 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Hebräisch Sende Verfolgungsdaten zu einem festgelegten Internet Dienst, wenn GPX-Aufzeichnung aktiviert ist. Online Verfolgung (benötigt GPX) - Starte online Verfolgung + Starte Online-Verfolgung + Stoppe Online-Verfolgung Starte GPX-Aufzeichnung Stoppe GPX-Aufzeichnung Starte neues Segment Sardinisch U-Bahn-Modus - GPS Aufwach Intervall + GPS Aufwach-Intervall GPS aktiv lassen? - + Einladen ... + Die Gruppe %1$s verlassen? + Weiter + Bewegliches Ziel abbrechen + Als bewegliches Ziel auswählen + Bildgröße der Kamera + interne Größe der Kamerabilder bestimmen + alle löschen + Ansage von Favoriten in den Nähe + diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index 7c55366d95..a3bbb2b97e 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -1,4 +1,4 @@ - + Προσθήκη Ετικέτας Λειτουργία για προχωρημένους… Στάθμευση @@ -1262,7 +1262,7 @@ Οδός Αριθμός σπιτιού Υπηρεσίες καταγραφής - Διαμορφώστε πως θα καταγράφονται τα ταξίδια και ενεργοποίηση της κατάστασης νάρκης + Διαμορφώστε πως θα καταγράφονται τα ταξίδια Υπηρεσίες καταγραφής Επιλογή θέματος εφαρμογής Θέμα Εφαρμογής @@ -1615,4 +1615,33 @@ Εμφάνιση του είδους πρόσβασης Εμφάνιση της ποιότητας των δρόμων Αποτυχία εξουσιοδότησης - + Έγχρωμα κτίρια + Προσκαλέστε… + Θέλετε να φύγετε από την ομάδα %1$s? + Συνέχιση της Πλοήγησης + Παύση Πλοήγησης + Διατήρηση + Ενεργοποίηση κατάστασης νάρκης + Διάστημα αφύπνισης GPS + Απόκρυψη μη αμαξιτών δρόμων + Εμφάνιση οδοστρωμάτων + Είσοδος με πρόσκληση + Παρακαλώ διαβάστε πριν τη δημιουργία μιας ομάδας! + Τίποτα προς λήψη, ελέγξτε τη σύνδεση στο internet. + Επανεκκίνηση της συνόδου OsMo + Εκκίνηση συνόδου OsMo + Πληροφορίες αποσφαλμάτωσης + Αλβανικά + Αραβικά + Περσικά + Σερβικά + Απλοποιημένα Κινέζικα + Παραδοσιακά κινέζικα + Νωρίς + Κανονικά + Αργά + Στα τελευταία μέτρα + Επανάληψη οδηγιών πλοήγησης σε τακτά χρονικά διαστήματα + Αφαίρεση όλων + Ανακοίνωση κοντινών αγαπημένων + diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 7abed2a70c..125e294e9f 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -1285,7 +1285,7 @@ La lista de países incluídos (¡básicamente todo el mundo!): Afganistán, Alb "Cambio en 1.5:\n\t* Tema Holo (personalización de tema) " Servicios de registro - Configura la forma de registrar los recorridos y activar el modo reposo + Configura la forma de registrar los recorridos Activa el seguimiento y la navegación en modo suspensión (pantalla apagada) despertando periódicamente el dispositivo GPS. Muestra opciones que permiten registrar tus recorridos en archivos GPX locales o en línea mediante un servicio web. Servicios de registro Elije el tema, el aspecto, de la aplicación @@ -1805,16 +1805,16 @@ Afganistán, Albania, Alemania, Andorra, Angola, Anguila, Antigua y Barbuda, Ant Mantener Parar Habilita modo reposo - Intervalo despertar GPS + Intervalo para despertar GPS ¿Mantener el GPS encendido? - Lenguaje preferido para las etiquetas en el mapa (si no está disponible se cambiará a Ingles o a los nombres locales) - Lenguaje preferido del mapa + Idioma preferido para las etiquetas en el mapa (si no se indica se cambiará a inglés o a nombres locales) + Idioma preferido del mapa Nombres locales Swahili Hebreo Siguiente Casa - Enviar seguimiento a un servicio web específico si la grabación GPS está habilitada. + Enviar seguimiento a un servicio web específico si la grabación GPX está habilitada. Seguimiento online (requiere GPX) Iniciar seguimiento online Parar seguimiento online @@ -1828,7 +1828,7 @@ Afganistán, Albania, Alemania, Andorra, Angola, Anguila, Antigua y Barbuda, Ant Serbio Chino Simplificado Chino Tradicional - Modo subterráneo + Modo Metro Continuar Navegación Pausar Navegación Vista senderismo Alpino @@ -1844,4 +1844,8 @@ Afganistán, Albania, Alemania, Andorra, Angola, Anguila, Antigua y Barbuda, Ant Tarde En los últimos metros Edificios de colores - + Quitar todos +Tamaño de foto + Selecciona el tamaño interno de la foto + Anunciar favoritos cercanos + diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 69056aeae7..138b646ae1 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -62,7 +62,7 @@ Navigation Configurer les options de navigation Paramètres globaux - Données hors-ligne + Gérer les données hors-ligne Obtenir ou mettre à jour les données pour l\'utilisation hors-ligne Général Configurer divers paramètres d\'ordre général @@ -75,7 +75,7 @@ Permet d\'utiliser OsmAnd pendant que l\'écran est désactivé Orientation de la carte - Vous n\'avez pas actuellement de carte vectorielle pour cet emplacement.\n\t\n\tVous pouvez en télécharger dans \'Paramètres\' → \'Données hors-ligne\', ou basculer sur les cartes en ligne via \'Paramètres\' → \'Sources de carte\'. + Vous n\'avez pas actuellement de carte vectorielle pour cet emplacement.\n\t\n\tVous pouvez en télécharger dans \'Paramètres\' → \'Données hors-ligne\', ou basculer sur les cartes en ligne via \'Paramètres\' → \'Sources de carte\' en activant le greffon des cartes en ligne. Téléchargement réussi.\n\t\n\tPour l\'utiliser, allez dans \'Menu\' → \'Couches\' → \'Source de la carte…\' → \'Cartes vectorielles OSM\'. Mode jour/nuit @@ -192,7 +192,7 @@ %1$d sur %2$d éléments restaurés. Pas d\'éléments à %1$s Vous allez %1$s %2$s éléments. Continuer ? - Gestionnaire de données hors-ligne + Gérer les données hors-ligne Restaurer Sauvegarder Supprimer @@ -277,8 +277,8 @@ \nSélectionnez alors le mode de partage parmi : courriel, SMS, ou copie vers le presse-papier. Lieux favoris - "\tLes points utilisés fréquemment peuvent être enregistrés en tant que favoris. -\n\tPour créer un favori, allez dans le menu contextuel de la carte, sélectionnez l\'option \'Ajouter aux favoris\' et saisissez un nom adapté. Après enregistrement, ce lieu est facilement accessible dans \'Menu\' → \'Favoris\'. + "Les points utilisés fréquemment peuvent être enregistrés en tant que favoris. +\n\tPour créer un favori, allez dans le menu contextuel de la carte, sélectionnez l\'option \'Ajouter aux favoris\' et saisissez un nom adapté. Après enregistrement, ce lieu est facilement accessible dans \'Menu\' → \'Mes lieux\'. \n\tUn appui court sur un favori dans le menu \'Favoris\' permet de créer un itinéraire pour s\'y rendre. \n\tPour afficher tous les favoris sur la carte, activez la couche \'Favoris\' dans \'Menu\' → \'Couches\'. " OSM en ligne classification des cartes en images @@ -1108,7 +1108,7 @@ Le greffon OsMoDroid est une extension OsmAnd pour l\'application OsMoDroid qui permet la création de traces. Pour plus d\'information à propos du service, consulter le site http://esya.ru. Greffon OsMoDroid Courbes de niveau - Ce greffon permet de télécharger les courbes de niveaux pour une région spécifique (\'Paramètres\' → \'Données hors-ligne\' → \'Télécharger des données hors-ligne\', puis sélectionner \'Courbes de niveau\' dans le menu), et de les utiliser avec les cartes hors-ligne. + Ce greffon permet de télécharger les courbes de niveaux et les reliefs de montagne pour une région spécifique (\'Paramètres\' → \'Données hors-ligne\' → \'Télécharger des données hors-ligne\', puis sélectionner le type de carte désiré), et de les utiliser avec les cartes hors-ligne. Courbes de niveau Autres cartes Courbes de niveau @@ -1217,10 +1217,10 @@ Numéro de bâtiment "Changements en 1.5:\n\t* Thème Holo (personnalisation de thème) " - Services de suivi et service d\'arrière-plan - Configurer l\'enregistrement des traces et le service d\'arrière-plan + Services de suivi + Configurer l\'enregistrement des traces Ce greffon permet d\'activer le suivi et la navigation en arrière-plan (écran éteint) en réveillant périodiquement le dispositif GPS. Affiche les paramètres facilitant l\'enregistrement de vos traces vers des fichiers GPX locaux, ou en ligne via un service Web. - Services de suivi et service d\'arrière-plan + Services de suivi Choisir le thème de l\'application Thème de l\'application Options d\'accessibilité @@ -1474,9 +1474,9 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Désactiver le routage complexe Paramètres de navigation Paramètres d\'itinéraire - Depuis Android KitKat (4.4), vous ne pouvez plus télécharger et mettre à jour la carte dans l\'ancien emplacement de sauvegarde. Voulez-vous changer pour en autoriser un nouveau et y copier l\'ensemble des fichiers ? - \n Note : Les anciens fichiers ne seront pas touchés - \n Note : Il ne sera pas possible de partager des fichiers entre OsmAnd et OsmAnd+. + "Depuis Android KitKat (4.4), vous ne pouvez plus télécharger et mettre à jour la carte dans l\'ancien emplacement de sauvegarde (%s). Voulez-vous changer pour en autoriser un nouveau et y copier l\'ensemble des fichiers ? +\n Note : Les anciens fichiers ne seront pas touchés +\n Note : Il ne sera pas possible de partager des fichiers entre OsmAnd et OsmAnd+. " OsmAnd peut essayer de déplacer les données vers la nouvelle destinaion. Voulez-vous essayer ? Copie des fichiers (%s) vers la nouvelle destination... Copie des fichiers OsmAnd vers la nouvelle destination (%s) @@ -1486,7 +1486,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Privilégier les autoroutes Privilégier les autoroutes Itinéraire le plus court - Utiliser l\'itinéraire le plus court + Emprunter l\'itinéraire le plus court Éviter les péages Éviter les péages Éviter les voies non revêtues @@ -1579,11 +1579,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Itinéraire partagé via OsmAnd Identifiant unique de l\'appareil Configurer les paramètres de suivi et définir son canal de suivi personnel - OpenStreetMap-Monitoring - Suivi en temps réel. Ce système offre la possibilité de suivre d\'autres appareils ou d\'être suivi. - Créer des groupes anonymes, partager sa position et communiquer avec d\'autres. Il y a différents paramètres pour le suivi de la session courante ou pour un suivi permanent. - Les groupes anonymes sont limités à quelques jours et leurs fonctionnalités restreintes, ainsi, pas de contrôle à distance et pas d\'administrateur de groupe. - Des groupes totalement fonctionnels peuvent être créés via le site web et seuls les utilisateurs enregistrés y ont accès. - Pour en savoir plus: http://osmo.mobi + "Suivi avancé OpenStreetMap en temps réel, voir http://osmo.mobi. Ce système offre la possibilité de suivre d\'autres appareils ou d\'être suivi. Créer des groupes anonymes, partager sa position et communiquer avec d\'autres. Il y a différents paramètres pour le suivi de la session courante ou pour un suivi permanent. Les groupes anonymes sont limités à quelques jours et leurs fonctionnalités restreintes, ainsi, pas de contrôle à distance et pas d\'administrateur de groupe. Des groupes totalement fonctionnels peuvent être créés via le site web et seuls les utilisateurs enregistrés y ont accès. " OsMo (Suivi en temps réel) OSMo OpenStreetMap Monitoring (beta) @@ -1606,7 +1602,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Répéter les instructions de navigation Format invalide : %s Annonce de l\'arrivée -Choisir à quel moment est annoncée l\'arrivée à destination +À quel moment voulez-vous annoncer l\'arrivée à destination ? Partager Favoris partagés via OsmAnd Calculer un intinéraire entre des points @@ -1621,7 +1617,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et heures avant minutes avant secondes avant - Nom de l\'appareil + Nom de l\'utilisateur Lier à l\'appareil @@ -1727,7 +1723,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Destination Afficher les boutons de zoom pendant la navigation Afficher les boutons de zoom - Visible + Voir sur la carte Trier par distance Trier par nom Rien à télécharger, veuillez vérifier votre connexion Internet. @@ -1744,7 +1740,7 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Trace OsMo %1$s téléchargée. Admission sur invitation Échec de l\'autorisation - Erreur d\\\'autorisation OsMo : %1$s.\n Le service est temporairement hors-service ou votre inscription a expiré.\n Voulez-vous procéder à nouvelle inscription? + Erreur d\\\'autorisation OsMo : %1$s.\n Le service est momentanément inutilisable ou votre inscription a expiré.\n Voulez-vous procéder à une nouvelle inscription ? Garder Stop Activer le mode veille @@ -1794,4 +1790,13 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et Surcouche de symboles de rando Afficher les chemins selon les traces OSMC - + Bâtiments en couleur + Tôt + Normal + Tard + Dans les derniers mètres + Dimensions de la photo + Sélectionner les dimensions de la photo + Supprimer tout + Annoncer les favoris à proximité + diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index 5eb8186c0f..bd34c4c0d5 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -1,4 +1,4 @@ - + "A 0.7.2 kiadás változásai: \n\t- Natív renderelő minden eszközre \n\t- Offline POI szerkesztés @@ -1230,7 +1230,7 @@ Utca Házszám Rögzítési szolgáltatások - Az útvonalak felvételének és az alvó állapotú használat beállításai + Útvonalak felvételének beállításai Útvonalrögzítés és navigáció alvó (kikapcsolt képernyős) módban az eszköz GPS vevőjének periodikus felébresztésével. Megjeleníti azokat a beállításokat, amik megkönnyítik az útvonal rögzítését GPX fájlba, vagy online webszolgáltatásra. Rögzítési szolgáltatások Alkalmazástéma kiválasztása @@ -1690,4 +1690,26 @@ Azonosítás sikertelen Kezdőlap perzsa - + Színezett épületek + Meghívás… + Navigáció folytatása + Navigáció szüneteltetése + Metró nézet + albán + arab + szárd + szerb + egyszerűsített kínai + hagyományos kínai + Alpesi túra nézet + Ösvények SAC nehézségi skála szerint + Turistajelzések + Korán + Normál + Későn + Utolsó métereken + Kamera képméret + A beépített kamera képmérete + Összes eltávolítása + Közeli kedvencek bemondása + diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 0b28b5e57f..37442d36eb 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1949,4 +1949,13 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz Strato simboli escursionistici Disegna i sentieri in base alle tracce OSMC - + Edifici colorati + Presto + Normale + Tardi + Agli ultimi metri + Cancellali tutti +Dimensione foto + Seleziona la dimensione delle foto scattate + Annuncia i preferiti nelle vicinanze + diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 51811e6110..3b8b9d4fcb 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -1189,13 +1189,13 @@ POIの更新は利用できません または ルートがOsmAndオフラインルート検索によって検索されるには長すぎる可能性があります。 平均的なオフラインルート検索では、200km程度まで検索可能です。ルートを検索する場合はひとつ以上の経由点を追加して下さい。 - オートズームオフ - 近距離 - 中距離 - 遠距離 + 自動ズームしない + ズーム 大 + ズーム 中 + ズーム 小 写真撮影時に撮影音を鳴らします フォーカスは無限遠にセットされます - マクロ(近距離)フォーカスモード + マクロ(近距離)フォーカスモード このプラグインはOsmAndオフラインマップ上に等高線を表示する機能を提供します。このグローバルデータ(北緯70°から南緯70°の間)はSRTM(スペースシャトル立体地形データ)とASTER(資源探査用将来型センサ)、NASAの地球観測システムである、テラ上のオンボードイメージング機器をベースにしたものです。 ASTERはNASAと日本の経済産業省(METI)、そして宇宙システム開発利用推進機構(J-spacesystems)の共同作業によるものです。 ノートに関連付ける場所が未定義です。 指定された場所にメモをとるためには\"場所を利用 …\"を利用します diff --git a/OsmAnd/res/values-ko/strings.xml b/OsmAnd/res/values-ko/strings.xml index 78bd0be018..5d5efbe5bc 100644 --- a/OsmAnd/res/values-ko/strings.xml +++ b/OsmAnd/res/values-ko/strings.xml @@ -36,7 +36,7 @@ 접근성(내게 필요한 옵션) 기능을 켭니다 접근성 켜기 접근성 끄기 - 전체 시스템 설정에 따름 + 글로벌 시스템 설정에 따름 메뉴로 돌아감 줌아웃(축소) @@ -92,7 +92,7 @@ 온라인 트래킹 시간 간격 온라인 트래킹할 웹 주소를 지정합니다. 매개변수 형식 : 위도={0}, 경도={1}, 시간={2}, hdop={3}, 고도={4}, 속도={5}, bearing={6} 온라인 트래킹 웹 주소 - \'Log track to GPX 파일\' 설정을 활성화하세요. + \'트랙을 GPX 파일에 기록\' 설정을 활성화 하세요. 현재의 GPX트랙을 보여줍니다 0.7.0 버전에 대한 변경 사항들 : \n\t- 오프라인 위키피디아 기사 포함 데이터 @@ -124,17 +124,17 @@ 이전에 익스포트한 즐겨찾기에 대한 파일이 이미 존재합니다. 이 파일을 대체하시겠습니까? 특정 설정 프로필 기본 프로필 - 각 프로필마다 지도보기 와 길안내 설정을 기억합니다. 여기에 기본 프로필을 설정합니다. + 각 프로필마다 지도보기 와 경로탐색 설정을 기억합니다. 여기에 기본 프로필을 설정합니다. - 길안내 - 길안내를 위한 옵션을 지정합니다 - 전체 설정 + 경로탐색 + 경로탐색을 위한 옵션을 지정합니다 + 글로벌 설정 지도 관리 기기에 저장된 오프라인 지도를 다운로드하고 관리합니다 일반 앱에 대한 디스플레이와 일반 설정을 구성합니다 - 전체 앱 설정 + 글로벌 앱 설정 OSM 사용자 이름 http://openstreetmap.org 에 데이터 제출을 위해 필요합니다 OSM 패스워드 @@ -226,7 +226,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 파일 이름을 바꿀 수 없습니다. 같은 이름을 가진 파일이 이미 존재합니다. - GPX 루트 + GPX 경로 이름으로 검색한 POI에 해당하는 몇몇 카테고리를 찾았습니다 : 검색한 POI에 대한 로컬 데이터가 존재하지 않습니다. 이름으로 검색 @@ -262,8 +262,8 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 \n\t- TTS 엔진 개선 (정확한 거리 안내, 마일 가능) \n\t- 버그 픽스 - 루트를 GPX 트랙으로 저장 - 루트가 \'%1$s\'로 성공적으로 저장되었습니다. + 경로를 GPX트랙으로 저장 + 경로가 \'%1$s\'로 성공적으로 저장되었습니다. 파일 이름 : 같은 이름의 파일이 이미 존재합니다. 저장 @@ -335,7 +335,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 \n\t- UI 개선 및 큰 버그 수정 " 사용하지 않음 새로운 데이터 풀기(Unpacking)… - 온라인 길안내 서비스가 선택되었지만 인터넷 연결이 되지 않습니다. + 온라인 경로탐색 서비스가 선택되었지만 인터넷 연결이 되지 않습니다. 지원되지 않은 언어 선택한 언어는 설치된 안드로이드 TTS (text-to-speech) 엔진이 지원되지 않습니다. 다른 TTS 엔진을 찾기 위해 구글마켓으로 가시겠습니까? 아니면 미리설정된 TTS 언어가 사용될 것입니다. 누락된 데이터 @@ -343,7 +343,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 GPX 길안내 반대로 가기 현재 목적지 사용 - 전체 GPX트랙을 따라 이동 + 전체 경로를 따라 이동 이 위치에 대해 존재하는 오프라인 벡터 맵. \n\t\n\t사용하려면 \'메뉴\'->\'지도레이어\'->\'맵 소스…\'->\'오프라인 벡터 맵\' 을 활성화합니다. 음성 안내 출력 @@ -421,7 +421,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 프로필 사용하기 - 길안내 + 경로탐색 "To get directions to a place, either directly long-click on it on the map, (then tap its description marker and select \'Directions to\'), or select \'Directions\' after tapping any entry in a search results list or favorite list. 길안내를 시작하기 전에 목적지를 선택하여야 합니다. 그런 다음 맵 상에서 \'메뉴\' -> \'방향\' 을 누르고 네비게이션 종류를 선택합니다. \n\nThe destination is marked as an orange target flag marker on the map and OsmAnd displays the distance to it and the direction to it (orange triangle). \n\nYou may chose either \'Start navigation\', which means that OsmAnd would live-guide you, give you voice instructions (if enabled), etc. Or you can select \'Display route\', resulting in static route without any live-guideance or adjustments as you move. @@ -429,15 +429,13 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 \n\nIf you use \'Directions from\' together with \'Start navigation\', OsmAnd will switch to your actual position as soon as it is found (so this can be used to jump-start routing before the position is found), while \'Directions from\' in combination with \'Display route\' just shows you the route from any arbitrary point you had selected without subsequent updates. " 검색 중 - [위치 사용] 메뉴 + \"위치 사용\" 메뉴 "The \'Use location\' context menu contains all actions referring to a point (location). \n\nIt is available by long-pressing any point on the map (then tapping its marker), or by pressing the trackball button, or by selecting \'Menu\' → \'Use location\' (the last two ways take the map center as reference). \n\nA marker box can be hidden again by long-clicking on it. " 팁과 트릭 - OsmAnd는 많은 기능을 가진 네비게이션 앱입니다. - 기본적인 소개로서, 몇 가지 유용한 팁과 트릭을 주 메뉴 화면에 링크합니다. - + "OsmAnd는 많은 기능을 가진 네비게이션 앱입니다. 기본적인 소개로서, 몇 가지 유용한 팁과 트릭을 메인 메뉴 화면에 링크합니다. " 다음 이전 @@ -498,9 +496,9 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 인덱스 \'\'{0}\'\' 가 메모리에 적합하지 않습니다 인덱스 \'\'{0}\'\' 버전은 지원되지 않습니다 - OsmAnd 길안내>20km - 20km 이상 긴 거리를 위해 CloudMade 대신에 OsmAnd 오프라인 길안내 (실험적)를 사용합니다 - OsmAnd 오프라인 길안내는 실험적인 기능이며 20 km 이상의 거리에서는 동작하지 않습니다.\n\n길안내 서비스는 일시적으로 온라인 CloudMade로 변경합니다. + OsmAnd 경로탐색>20km + 20km 이상 긴 거리를 위해 CloudMade 대신에 OsmAnd 오프라인 경로탐색 (실험적)을 사용합니다 + OsmAnd 오프라인 경로탐색은 실험적인 기능이며 20 km 이상의 거리에서는 동작하지 않습니다.\n\n경로탐색 서비스는 일시적으로 온라인 CloudMade로 변경합니다. 지정한 폴더를 찾을 수 없습니다. 저장 폴더 @@ -532,9 +530,8 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 모두 선택 새로고침 - 가장 빠른 루트 - 가장 빠른 루트를 활성화하거나 or -가장 짧은 루트를 비활성화합니다 + 가장 빠른 경로 + "가장 빠른 경로를 활성화하거나 or 가장 짧은 경로를 비활성화합니다 " 줌에서 {0} 다운로드 {1} 타일 ({2} MB) 맵 다운로드 가시 영역을 미리 로드하기 위한 최대 줌 선택 @@ -584,7 +581,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 회전 안함 지도 화면 정렬 방식을 선택합니다 지도 방향 - 루트 상세정보 + 경로 상세정보 즐겨찾기를 성공적으로 임포트하였습니다 즐겨찾기를 포함한 GPX 파일을 {0} 에서 찾을 수 없습니다 즐겨찾기가 성공적으로 {0} 에 저장되었습니다 @@ -597,10 +594,10 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 POI를 찾는 검색어를 입력하세요 어떤 - 대중교통 루트 + 대중교통 경로 교통 정보를 위해 Yandex 를 이용합니다. Yandex 트래픽 - 루트 + 경로 즐겨찾기 OSM 버그들(온라인) 대중교통 정류소 @@ -666,18 +663,18 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 세로, 가로, 자동 오프닝 시간 형식은 편집을 지원하지 않습니다 새로운 규칙 추가 - 루트 + 경로 정류소 정류소들 - 다음 루트 - 이전 루트 + 다음 경로 + 이전 경로 검색 종료 하차할 정류소 선택 이전 거리 이후 거리 경유할 정류소들 - 루트 거리 + 경로 거리 대중교통 OK 대중교통 정류소를 지도에 표시합니다 @@ -709,7 +706,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 최대 온라인 줌 다운로드할 최대 줌 레벨을 선택하세요 전체거리 %1$s, 여행시간 %2$d h %3$d m. - 온라인 또는 오프라인 길안내 서비스를 선택합니다 + 온라인 또는 오프라인 경로탐색 서비스를 선택합니다 길안내 서비스 저장할 SD 카드 디렉토리에 접근할 수 없습니다 {0} - {1} 을 다운로드할까요? @@ -726,7 +723,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 즐겨찾기 포인트가 수정되었습니다 즐겨찾기 포인트가 하나도 존재하지 않습니다 대체 - 루트 표시하기 + 경로 표시하기 길안내 시작 전송 모드 : 먼저 목적지 포인트를 선택하세요 @@ -747,10 +744,10 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 POI GPX를 저장하는 도중 오류가 발생하였습니다 - 루트를 찾는 도중 오류 - 루트를 찾는 도중 오류가 발생하였습니다 - 루트를 찾지 못하였습니다 - 새로운 루트를 찾았습니다, 거리 + 경로를 찾는 도중 오류 + 경로를 찾는 도중 오류가 발생하였습니다 + 경로를 찾지 못하였습니다 + 새로운 경로를 찾았습니다, 거리 목적지에 도착하였습니다 좌표가 유효하지 않습니다! OsmAnd 맵으로 되돌아감 @@ -764,22 +761,22 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 오프라인 데이터 재적재 오프라인 용 데이터를 인터넷으로부터 다운로드합니다 오프라인 데이터 다운로드 - 루트를 찾기위해 인터넷을 사용합니다 - 온라인 길안내 사용 + 경로를 찾기위해 인터넷을 사용합니다 + 온라인 경로탐색 사용 OSM 로그인에 필요한 OSM 설정을 지정합니다 언어를 지정하고, 데이터를 다운로드/재로드 합니다 데이터 - 맵 설정을 지정합니다: 맵 소스, 회전, 마커 위치, 스크린 방향 + 지도 설정을 지정합니다: 지도 소스, 회전, 마커 위치, 스크린 방향 OSM 편집 속도에 따라 자동으로 지도 줌(zoom)을 합니다 자동 맵 줌 추가 설정 설정 - 현재 트랙을 SD 카드에 저장합니다 - 현재의 GPX 트랙을 저장합니다 + 현재의 GPX트랙을 SD 카드에 저장합니다 + 현재의 GPX트랙을 저장합니다 GPX트랙을 저장하는 시간 주기를 선택합니다 트랙로깅 간격 - GPX트랙이 날짜 단위로 구분된 폴더에 저장됩니다 + 경로는 날짜 단위로 구분된 폴더에 저장됩니다 트랙을 GPX파일로 저장 맵 업데이트 타일 재로드 @@ -807,19 +804,19 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 POI 표시 온라인소스 또는 캐시된 맵 타일 소스를 선택합니다 타일 맵 소스 - 맵 소스 + 지도 소스 인터넷 사용 위치 표시 지도 설정 - 맵에 GPS 좌표 표시 + 지도에 GPS 좌표 표시 누락된 맵 타일을 다운로드하기 위해 인터넷을 사용합니다 네비게이션 앱 종료 지도 설정 -즐겨찾기 +내 장소 검색 검색 @@ -854,7 +851,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 교차로 위치 즐겨찾기에 추가 -맵 업데이트 +지도 업데이트 OSM 버그 열기 POI 생성 @@ -912,7 +909,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 POI 바꾸기 모든 다른 태그는 보존된다 반영 -초기화 +재설정 필터 삭제 다른이름으로 저장 @@ -961,15 +958,15 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 북미 - 캐나다 유럽 - 이탈리아 유럽 - 영국 - 인터넷 연결없이 OsmAnd 루트구간 계산 - 첫번째와 마지막 루트구간 계산 - 길안내를 위해 맵뷰어에 표시된 GPX트랙을 사용하시겠습니까? + 인터넷 연결없이 OsmAnd 경로 구간 계산 + 첫번째와 마지막 경로 구간 계산 + 경로탐색을 위해 맵뷰어에 표시된 경로를 사용하시겠습니까? 목적지로 추가 GPX파일 선택… 목적지 선택 지도에서 선택… 즐겨찾기… - 루트 정보 + 경로 정보 전용도로 선호 전용도로 선호 최단 길 @@ -992,12 +989,12 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 새 목적지로 파일(%s)을 복사중... 새로운 목적지에 OsmAnd 파일을 복사중 (%s) OsmAnd 파일을 복사중 - OsmAnd 오프라인 루트 계산하기 + OsmAnd 오프라인 경로 계산하기 트럭 길찾기 선호도 TTS에 대한 음성속도를 지정합니다 음성 속도 - 빠른 루트 계산 실패(%s), 느린 계산으로 돌아감. + 빠른 경로 계산 실패(%s), 느린 계산으로 돌아감. 복잡한 라우팅 사용불능 Seamark 앱 프로필 @@ -1009,8 +1006,8 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 자주 묻는 질문을 보려면 https://code.google.com/p/osmand/wiki/FAQ 를 방문하세요. 자주 묻는 질문 (FAQ) 모두 삭제하기 - 먼저 루트를 계산하세요 - "계산된 루트를 이용하여 모의주행하기 " + 먼저 경로를 계산하세요 + "탬색된 경로를 이용하여 모의주행하기 " GPX트랙을 이용하여 모의주행하기 내 선택을 기억하기 GPS status @@ -1022,7 +1019,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 지도 스타일 버전: 버전 정보, 라이센스, 프로젝트 멤버 - Tips (도움말) + 도움말 소개 다운로드된 줌 : %1$s 만료(분) : %1$s @@ -1065,9 +1062,9 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 포르투갈어 슬로베니아어 웨일스어 - 루트 선호도 - 길안내 선호도 - 자동차 길안내에 대한 2길 라우팅 사용불능 + 경로 선호도 + 경로탐색 선호도 + 자동차 경로탐색에 대한 2길 라우팅 사용불능 앱에서 볼 수있는 사용자 프로필를 선택합니다 나머지 요소 : %1$d OSM 변경 사항을 삭제하려고 합니다. 확실합니까? @@ -1126,8 +1123,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵 포인트 GPX 파일 이름 GPX 파일이 성공적으로 {0} 에 저장 - 포인트 사이의 거리를 측정하기 위해 경로(path) 생성 (또는 기존 GPX 파일을 수정/사용하여). -GPX로 저장하여, GPX 루트를 계획할 수 있습니다. + 포인트 사이의 거리를 측정하기 위해 경로(또는 기존 GPX 파일을 수정/사용)를 생성합니다. GPX로 저장하여, GPX 경로를 이용할 수 있습니다. 거리 계산 및 플래닝 도구 다시 표시하지 않음 편집 시작 @@ -1145,8 +1141,8 @@ GPX로 저장하여, GPX 루트를 계획할 수 있습니다. 기타 %1$d 파일 남음 정식 버전 - 루트 해제 - 길안내 정지 + 경로 해제 + 경로탐색 중지 목적지 지우기 현재 와이파이가 연결되어 있지 않습니다. 현재의 인터넷 연결(3G)을 통해서 계속 다운로드 하시겠습니까? 거리 @@ -1158,10 +1154,10 @@ GPX로 저장하여, GPX 루트를 계획할 수 있습니다.          \n\t* 지도 화면에서 좌상단 버튼는 메뉴버튼을 대체 로깅 서비스 - 트랙을 기록하는 방법을 구성하고 절전 모드를 활성화합니다 - 절전모드(스크린 끄기)에서 트래킹 및 길안내 활성화, 주기적으로 GPS 장치가 작동중일 때 . 표시 설정은 로컬 GPX 파일이나 웹 서비스를 사용하는 온라인에 트랙을 기록하는 설비 가능. + 트랙을 기록하는 방법을 구성합니다 + 절전모드(스크린 끄기)에서 트래킹 및 경로탐색 활성화, 주기적으로 GPS 장치가 작동중일 때 . 표시 설정은 로컬 GPX 파일이나 웹 서비스를 사용하는 온라인에 트랙을 기록하는 설비 가능. 로깅 서비스 - 주기적으로 GPS 장치를 깨어 절전모드(스크린 끄기)에서 트랙 및 길안내를 가능하게 하는 설정 표시. + 주기적으로 GPS 장치를 깨어 절전모드(스크린 끄기)에서 트래킹 및 경로탐색을 가능하게 하는 설정 표시. 앱 테마(색상)를 선택 앱 테마 접근성(내게 필요한) 옵션 @@ -1186,22 +1182,22 @@ GPX로 저장하여, GPX 루트를 계획할 수 있습니다. 등고선 데이터 오디오/비디오 데이터 - 길안내를 중지하시겠습니까 ? + 경로탐색을 중지하시겠습니까 ? 목적지를 취소하시겠습니까? - 고장 없이 정확한 루트를 계산할 수 있습니다(여전히 거리 제한 하고 느린 속도로). + 고장 없이 정확한 경로를 탐색할 수 있습니다(여전히 거리 제한하고 느린 속도로). 정확한 길찾기:라우팅 (알파) 표시 사진 %1$s of %2$s 사진 찍기 사진 찍기 - 드롭박스 플러그인은 드롭박스 계정으로 GPX트랙과 오디오/비디오 메모를 동기화 할 수 있습니다 . + Dropbox 플러그인은 Dropbox 계정으로 GPX트랙과 오디오/비디오 메모를 동기화 할 수 있습니다 . 드롭박스 플러그인 순서 변경 등고선 추가 개발을 지원하기 위해 구글시장에서 플러그인을 구입하시기 바랍니다 . 등고선 플러그인 요청에 대한 선택 - 비디오 기록 - 오디오 기록 + 비디오 녹화 + 오디오 녹음 기본 위젯의 동작을 선택합니다 기본 위젯 작업 비디오 출력 형식 선택 @@ -1273,11 +1269,11 @@ GPX로 저장하여, GPX 루트를 계획할 수 있습니다. 도로 색상을 선택합니다: 도로 색상 목적지 길안내 표시 - 위치로깅서비스(GPX 기록, 온라인 트래킹)를 사용하여 트래킹 플러그인을 활성화 - 장거리를 가능하게 하는 비최적 루트 계산 + 트랙로깅 서비스(GPX 기록, 온라인 트래킹)를 사용하여 트래킹 플러그인을 활성화 + 장거리를 가능하게 하는 비-최적 경로 계산 설정에서 GPS를 활성화하십시오 로깅 서비스 - 어떠한 루트도 없음 + 어떠한 경로도 없음 포인트 제거 포인트 %1$s 포인트 %1$s @@ -1311,10 +1307,10 @@ GPX로 저장하여, GPX 루트를 계획할 수 있습니다. 길안내할 동안 차량을 도로에 밀착시킴 도로에 밀착 OsmAnd 지도 및 네비게이션 - 글로벌 모바일 지도 보기 및 오프라인 및 온라인 OSM지도를 위한 길안내 + 글로벌 모바일 지도 보기 및 오프라인 및 온라인 OSM지도를 위한 경로탐색 " OsmAnd (OSM 자동 길안내 시스템) OsmAnd 글로벌 OpenStreetMap의 다양한 데이터에 접근할 수 있는 오픈 소스 탐색 응용 프로그램입니다. 모든 지도 데이터(벡터 맵 또는 타일 맵 ) 는 오프라인 사용을 위하여 휴대 전화 메모리 카드에 저장할 수 있습니다. OsmAnd는 또한 턴-바이-턴 음성 안내 등의 오프라인 및 온라인 라우팅(길찾기) 기능을 제공합니다. 핵심 기능 중 일부 : - 전체 오프라인 기능 (선택한 폴더에 저장, 벡터지도 또는 타일지도 다운로드 가능) - 컴팩트한 오프라인 벡터는 전 세계에서 사용가능 - 국가 또는 지역의 다운로드는 앱에서 직접 매핑 - GPX 또는 탐색 트랙, 관광 명소 등 가능한 여러 지도 레이어의 중첩, 즐겨 찾기, 등고선, 대중 교통 정류장, 사용자 정의 투명성 추가 - 주소 및 장소에 대한 오프라인 검색 장소(POI) - 짧은 거리를 위한 오프라인 라우팅 - 자동차, 자전거, 보행자 모드 : - 옵션으로 자동 주간/야간 지도 전환 - 옵션으로 속도에 따라 지도 줌레벨 변경 - 옴션으로 나침반이나 방향에 따라 맵 정렬 - 옴션으로 차선 안내, 속도제한 표시, 녹음음성 및 TTS음성 OsmAnd 무료 버전 제한 사항 : - 지도 다운로드 수 10회로 제한 - 위키 백과 또는 오프라인 관심 장소에 액세스할 수 없음. OsmAnd 는 적극적으로 개발하고 우리의 프로젝트와 프로젝트의 추가 진행은 개발 자금을 재정 지원에 의존하고 새로운 기능을 testdriving 하고있다. OsmAnd+ 를 구입, 또는 특정 새로운 기능에 자금을 지원하거나 osmand.net 에 일반 후원을 부탁드립니다. " OsmAnd+ 지도 및 네비게이션 - 글로벌 모바일 지도보기 및 오프라인 및 온라인 OSM지도를 위한 탐색 + 글로벌 모바일 지도보기 및 오프라인 및 온라인 OSM지도를 위한 경로탐색 OsmAnd + (OSM 자동 탐색 길안내 ) @@ -1424,7 +1420,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A 뱃길 회피 회피하기… 유료도로, 비포장, 뱃길 회피하기 - 형광색상 루트 + 형광색상 경로 축척(Ruler) 방향 보기 투명 스킨 @@ -1453,7 +1449,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A 다음 턴 다음 턴(작은 아이콘) 두번째 다음 턴 - 미니 루트지도 + 미니 경로 지도 화면 잠금 화면 잠금해제 화면이 잠김 @@ -1462,19 +1458,19 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A 트래픽 경고 표시 유료 도로 회피 이전 길안내는 아직 끝나지 안났습니다. 계속 길안내를 받으시겠습니까? (%1$s 초) - 위치가 확정되면 루트를 찾을 것입니다 + 위치가 확정되면 경로를 찾을 것입니다 시간 자동차를 ~에 주차했습니다 : "Changes in 0.8.1: -\n\t* 더욱 정밀한 루트 찾기(좀 더 느려짐) More precise routes (a bit slower) -\n\t* 스마트 하고 빠른 루트 계산. Smart and fast Route recalculation +\n\t* 더욱 정밀한 경로 찾기(좀 더 느려짐) More precise routes (a bit slower) +\n\t* 스마트 하고 빠른 경로 계산. Smart and fast Route recalculation \n\t* 좁은 길로 길안내. Direction by lanes \n\t* 속도 제한 정보, 속도 카메라, 속도위반에 관한 정보. \n\t* 고속도로에서 향상된 음성안내. Improved voice guidance on highways \n\t* 주차 플러그인. Parking plugin (\'Where is my car parked at?\') \n\t* 트랙로깅 위젯 활성화/비활성화. Enable/disable logging widget " - 루트 시뮬레이션의 속도를 선택합니다 + 경로 시뮬레이션의 속도를 선택합니다 할당된 메모리 %1$s MB (안드로이드 메모리 제한 %2$s MB, Dalvik %3$s MB). 할당된 메모리 앱에 의해 할당된 전체 기본 메모리 %1$s MB (Dalvik %2$s MB, other %3$s MB). @@ -1509,7 +1505,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A 추적 가능 개인 가능한 빨리 - GPX 파일로 루트를 저장 + 경로를 GPX 파일로 저장 변곡점: take %1$d exit and go 왼쪽을 유지하고 가기 오른족을 유지하고 가기 @@ -1529,7 +1525,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A 교통 검색 즐겨 찾기 검색 검색한 기록 - OsmAnd 오프라인 길안내는 일시적으로 사용할 수 없습니다. + OsmAnd 오프라인 경로탐색은 일시적으로 사용할 수 없습니다. 왼쪽좌석 운전 왼쪽좌석 운전 국가를 선택합니다 오프라인 데이터를 다운로드 하거나 업데이트 하려면 여기를 클릭하십시오. 세부정보를 보려면 기존 아이템을 클릭하세요, 비활성화 하거나 삭제하려면 길게 누르세요. 기기에 남아있는 현재 데이터는 (%1$s free): @@ -1547,7 +1543,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A 고급 설정 로컬 GPX 파일이나 온라인 웹 서비스를 사용하는 온라인을 기록하기 위해 설정기능을 표시합니다. 고급 지도 구성(지도 상세보기) 및 일부 장치 특성에 대한 설정을 표시합니다. - 루트 시뮬레이션 이나 렌더링 성능 표시와 같은 개발 및 디버깅 기능에 대한 설정을 표시합니다. + 경로 시뮬레이션 이나 렌더링 성능 표시와 같은 개발 및 디버깅 기능에 대한 설정을 표시합니다. 플러그인 활성화 또는 비활성화 하기위해 플러그인을 터치합니다.(OsmAnd는 재시작해야 합니다) 플러그인은 고급설정 및 추가기능을 활성화합니다 @@ -1633,7 +1629,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A "Fixes in 1.2.1: \n\t*Fix Geo Intent (Foursquare, c:geo) 지오 인텐트 고정 -\n\t*Fix screen tremble during navigation 길안내중 화면 떨림 고정 +\n\t*Fix screen tremble during navigation 경로탐색중 화면 떨림 고정 \n\t*Other small fixes 다른 사소한 고정 \n\nChanges in 1.2: \n\t* Bug fixes (tuned routing, search, AV recording, voice prompts, some display improvements) @@ -1663,12 +1659,12 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A \n\t* 버그 수정 \n\t* 지도 세부정보아 함께 지도 스타일 옵션, 새 도로 스타일, \n\t* EGM96 geoid 오프셋 보정, GPS 고도 읽기 " - 노트와 연결할 위치는 아직 정의되지 않았습니다. 지정된 위치에 노트를 할당하려면 \" 위치 사용…\" + 노트와 연결할 위치는 아직 정의되지 않았습니다. 지정된 위치에 노트를 할당하려면 \"위치 사용…\" "Changes in 0.8.3: \n\t* 포인트 -\n\t* 향상된 루트 안내 -\n\t* 루트를 만드는 동안 전용도로를 회피하는 것을 허락하는 설정을 추가 -\n\t* 지도(Cycleway=트랙)에 자전거 도로의 유형을 추가 +\n\t* 향상된 경로 안내 +\n\t* 경로를 생성하는 동안 전용도로를 회피하는 것을 허락하는 설정을 추가 +\n\t* 지도에 자전거 도로의 유형을 추가 \n\t* 버그 수정 " Changes in 0.8.2: \n\t* Improved Routing @@ -1873,13 +1869,13 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z "OpenStreetMap 고급 실시간 모니터링. 이에 대해서는 http://osmo.mobi를 참조 하십시오. 다른 장치를 추적하고 추적받는 가능성을 제공 합니다. 익명 그룹을 만들고, 서로의 위치를 공유하고 소통한다. 세션 트래킹 또는 영구 트래킹에 대한 다양한 설정을 합니다. 익명그룹는 수많은 날에 제한되며 일부 기능 즉, 원격 제어 및 그룹 관리자는 제한된다. 완벽하게 기능적인 그룹은 웹사이트에 생성하고 그들에게 등록된 사용자만 액세스할 수 있습니다. " OsMo (실시간 친구위치 공유) OsMo (실시간 친구찾기) - GPX 파일로 루트 공유 - OsmAnd 통해 공유된 루트 + 경로를 GPX 파일로 공유 + OsmAnd 통해 공유된 경로 도착 알림 도착 알림을 원하세요 ? 결코 - 정기적으로 탐색 지시를 다시 발표 - 길안내 명령을 반복 + 정기적인 간격으로 경로탐색 지시를 다시 실행 + 경로탐색 명령을 반복 잘못된 포맷 : %s "OsMo 연결 문제 : " @@ -1906,7 +1902,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 위치 전송 %1$d (in buffer %2$d) 설정된 연결 : %1$s "Changes in 1.8: * Calculate route between route points of GPX track * Changed layout of countries for downloads (support local names search) * Supports GPX/KML import (convert from KML to GPX) * GPX tracks has moved to \'My Data\' * You can split GPX track by distance and check altitude difference/ speed * Auto start navigation after delay " - 포인트 사이의 루트를 계산 + 포인트 사이의 경로를 계산 OsMo 세션 재시작 디버그 정보 정보 @@ -2004,7 +2000,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 포인트 레이블 길안내중에 줌 버튼 보기 줌 버튼 보이기 - "선택한 GPX 파일 없음. 이용 가능한 경로를 선택 하려면 누르고 있어요." + "선택한 GPX 파일 없음. 이용 가능한 GPX트랙을 선택 하려면 누르고 있어요." 선택을 취소합니다. 보이기위해 선택 거리로 정렬 @@ -2013,7 +2009,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z \t 아무것도 다운로드 되지 않았다면, 인터넷 연결을 확인 하십시오. 인증 실패 - OsMo 인증 오류가 발생 했습니다: %1$s.\n임시로 서비스가 다운되었거나 또는 등록 만료가 되었습니다.\n신규 등록을 진행 하시겠습니까?. + OsMo 인증 오류가 발생 했습니다: %1$s.\n임시로 서비스가 다운되었거나 또는 등록 만료가 되었습니다.\n신규 등록을 진행 하시겠습니까? 메시지를 입력하세요 " -모든 그룹은 공용입니다! 익명으로 하려면 트랙커 id 통해 직접 장치를 연결 합니다.\n -그룹는 16 명까지 등록 할 수 있습니다.\n -비활동적인 그룹이나 또는 2 주 동안 단 1 사람만 활동한 경우, 그룹는 삭제 됩니다.\n -컨트롤 그룹으로 그룹 입구를 제한할 수 있습니다. 관리 콘솔에 가는 것이 필요합니다. \n -그룹을 만들고 싶으면 http://osmo.mobi 에 접속하세요" @@ -2035,7 +2031,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 액세스 유형 보이기 도로의 품질 표시 도로 표면 표시 - 자전거 루트 표시 + 자전거 경로 표시 계속 중지 절전 모드 활성화 @@ -2049,7 +2045,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 앞으로 GPX 기록이 활성화 될때, 지정된 웹 서비스에 트래킹을 전송합니다. - 온라인 트래킹 (GPX트랙 파일 필요) + 온라인 트래킹 (GPX파일 필요) 온라인 트래킹 시작 온라인 트래킹 중지 GPX 기록 시작 @@ -2064,7 +2060,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 중국어 번체 지하철 모드 길안내 계속 - 길안내 일시중지 + 경로탐색 일시중지 알파인 하이킹 보기 SAC scale에 따라 경로 렌더링 하이킹 심볼 오버레이 @@ -2078,4 +2074,8 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 일반적으로 늦게 마지막 미터 - + 모든 포인트 숨기기 +카메라 사진 크기 + 내부 카메라 사진 크기 선택 + 가까운 즐겨찾기 알리기 + diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index 27ae329838..e65c9a8b45 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -1306,7 +1306,7 @@ OsmAnd yra aktyviai tobulinama ir mūsų projektas bei jo tolesnis progresas pri \n\t* Žemėlapio viršutiniame kairiame kampe esantis mygtukas pakeičia Meniu mygtuką Sekimo paslaugos - Nustatykite kaip įrašinėti maršrutus ir įjungti miego režimą + Nustatykite kaip įrašinėti maršrutus Įjunkite sekimą ir navigaciją miego režime (išjungus ekraną) periodiškai pažadinant GPC įrenginį. Koreguokite nustatymus, kurie reikalingi įrašant jūsų maršrutus į GPX failą ar sekant interneto pagalba. Stebėjimo paslaugos Pasirinkite išvaizdos temą @@ -1801,8 +1801,12 @@ OsmAnd yra aktyviai tobulinama ir mūsų projektas bei jo tolesnis progresas pri Anksti Normaliai Vėlai - Pastaruosius metrus + Paskutiniuose metruose Spalvoti pastatai Kalnų žygiai Padengimas žygių simboliais - + Pašalinti visus +Nuotraukos dydis + Pasirinkti vidinės kameros nuotraukos dydį + Pranešti apie artimiausias įsimintas vietas + diff --git a/OsmAnd/res/values-lv/strings.xml b/OsmAnd/res/values-lv/strings.xml index 5446305a6e..5ff738f465 100644 --- a/OsmAnd/res/values-lv/strings.xml +++ b/OsmAnd/res/values-lv/strings.xml @@ -1,5 +1,6 @@ -Spraudņu pārvaldnieks - Atzīmējiet spraudni, lai to aktivizētu vai deaktivizētu. (Iespējams OsmAnd vajadzēs restartēt.) + +Spraudņu pārvaldnieks + Atzīmējiet spraudni, lai to aktivizētu (varētu būt nepieciešams OsmAnd restarts) Spraudņi iespējo aplikācijas papildus funkcijas un uzstādījumus kā piemēram sekošana, enerģijas taupīšana, pieejamība un daudzas citas Spraudņi Izmaiņas 0.8.0: @@ -91,7 +92,7 @@ Lietot objektu vārdus Ar pieejamību saistītās izvēles Pieejamība - Nepietiek procesa atmiņas, lai attēlotu izvēlēto apgabalu + Nepietiek atmiņas, lai attēlotu izvēlēto apgabalu Fluorescenti slāņi Lietot flurescentās krāsas, lai attēlotu maršruta ceļus Bezsaistes rediģēšana @@ -184,9 +185,9 @@ Automātiski centrēt karti Laiks līdz karte sinhronizējas ar tekošo pozīciju Nekad - Autocentrēt pārvietojoties maršrutā - Autocentrēt karti tikai navigācijas laikā. - Autocentrēt karti uz atrašanās vietu. + Autocentrēt maršruta laikā + Navigācijas laikā atrodoties kustībā, automātiski centrēt karti. + Autocentrēt karti atrašanās vietā. Vektoru renderētāja opcijas Pārklājs / paklājs Kartes avota uzstādījumi @@ -1484,7 +1485,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A Izvairīties no automaģistrālēm Izvairīties no automaģistrālēm jeb ātrgaitas šosejām Maksimālais svars - Norādīt transporta kravas maksimālā svara robežas + Norādīt transportlīdzekļa maksimālā svara ierobežojumus Atzīmēt GPX… Atlasīt galamērķi Atzīmēt no kartes… @@ -1591,12 +1592,8 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A Ierīces identifikators Konfigurēt monitoringa uzstādījumus un personīgo monitoringa kanālu - OpenStreetMap-Monitoring - iespējām bagāts reālā laika monitorings ar attālinātu sekošanu savienotām ierīcēm. -………Izveidojiet anonīmas grupas, kopīgojiet atrašanās vietas un komunicējiet savā starpā, ar dažādiem uzstādījumiem sesijas vai patstāvīgai sekošanai. -……Anonīmās grupas ir ierobežotas līdz dienu skaitam un dažām iespējām, kā piemēram, nav attālinātās kontroles un grupas administratora. -……Pilnībā funkcionējošas grupas var tikt izveidotas tīmekļa lapā un tām var piekļūt tikai reģistrētie lietotāji. -……Vairāk lasiet http://osmo.mobi. - OsMo (reālā laika monitorings) + "Sekojiet viens otram reālajā laikā, veidojot anonīmas grupas, komunicējiet savā starpā, kopīgojiet vietas, iespējojiet patstāvīgu vai sesiju sekošanu utt., vairāk lasiet http://osmo.mobi lapā, t.sk. lai reģistrētos grupu pilnvērtīgākai darbībai (attālināta vadība un kontrole utt.). " + OsMo (tiešsaistes monitorings) OSMo OpenStreetMap Monitorings (beta) Izmaiņas uz 1.6: … …\n\t* Full HD ierīču atbalsts @@ -1623,15 +1620,15 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A Pārtraukt mūziku Maršruts kopīgots caur OsmAnd - Atbraukšanas paziņojums - Kad paziņot par ierašanos galapunktā? + Ierašanās paziņojums + Kad ziņot par ierašanos galamērķī? Nekad - Atkārtot navigācijas norādījumus caur regulāriem intervāliem + Noteikt intervālu navigācijas norādījumu atkārtošanai Atkārtot navigācijas norādījumus Nepareizs formāts: %s Paziņojumu laikā pārtraukt mūzikas atskaņošanu Koplietot maršrutu kā GPX failu - Problēma ar OSMo savienojumu: + "OsMo savienojuma problēma: " Apturēt OSMo sesiju Sākt OSMo sesiju @@ -1671,7 +1668,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A OsMO servera darbības kļūda Osm Monitorings Sūtīt manas atrašanās vietas - OsMo ātrā pieejamība + OsMo ātrā piekļuve stundas atpakaļ minūtes atpakaļ Savienotās ierīces @@ -1770,4 +1767,10 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A Saglabāt kā izlases grupu Atlasīt ceļapunktus Punktu nosaukumi - \ No newline at end of file + Normāli + Vēlāk + Pēdējos metros + Agrāk + Rādīt tālummaiņas pogas + Rādīt navigācijas laikā uz kartes + diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 3c20735169..d00f3e03ba 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -1431,7 +1431,7 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A \n\t* Menuknop vervangen door knop linksboven in het kaartvenster Logboek registratie - Stel in hoe lokaal of via online tracking reizen op te nemen + Bepaal hoe trips op te nemen Activeren van tracking en navigatie in slaapmodus (scherm uit). De GPS gaat dan regelmatig aan. Toon de instellingen om uw reis vast te leggen als GPX-bestand of online via een webdienst. Straat Logboek registratie @@ -1881,7 +1881,7 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A Kon niet inloggen op OsMo Alleen toegang met uitnodiging Aanmelding mislukt - OsMo aanmeldings fout: %1$s.\nMogelijk is de service tijdelijk niet beschikbaar of is uw registratie verlopen.\nWilt u verder gaan met een nieuwe registratie. + OsMo aanmeldings fout: %1$s.\nMogelijk is de service tijdelijk niet beschikbaar of is uw registratie verlopen.\nWilt u verder gaan met een nieuwe registratie? Verberg gebouwen Verberg voetpaden Verberg tekst @@ -1928,4 +1928,16 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A Wandelsymbolen laag Render paden volgens OSMC sporen - + Gekleurde gebouwen + Uitnodiging voor… + Wil je de groep %1$s verlaten? + Specificeer je tracker-id alsjeblieft + Vroegtijdig + Normaal + Laat + Als bijna bereikt + Verwijder alle +Camera Beeldformaat + Selecteer interne camera beeldformaat + Meld favorieten in de buurt + diff --git a/OsmAnd/res/values-nn/strings.xml b/OsmAnd/res/values-nn/strings.xml new file mode 100644 index 0000000000..c416934318 --- /dev/null +++ b/OsmAnd/res/values-nn/strings.xml @@ -0,0 +1,299 @@ + +Farga bygningar + Inviter … + Ønskjer du å forlata gruppa %1$s? + Oppgje ID + Hald fram navigering + Stopp navigering mellombels + T-banemodus + Behald + Stopp + Bruk søvnmodus + Oppvakingsintervall for GPS + Hald GPS-en påslått? + Føretrekt språk for tekst på kartet (lokale eller engelske namn vert brukte om språket ikkje er tilgjengeleg) + Føretrekt kartspråk + Lokale namn + Swahili + Hebraisk + Fram + Heim + Start GPS-opptak + Stopp GPS-opptak + Gøym bygningar + Gøym vegar som ikkje er for køyretøy + Gøym tekst + Gøym skog og kratt + Bygningar ved zoomnivå 15 + Meir detaljert + Mindre detaljert + Gøym tilgangstype + Vis tilgangstype + Vis vegkvalitet + Vis vegdekke + Vis sykkelruter + Kopla til automatisk + OsMo-teneste + OsMo-spor %1$s lasta ned. + Sorter etter avstand + Sorter etter namn + Vis på kartet + Vis forstørringsknappar ved navigering + Vis forstørringsknappar + Lagra som favorittgruppe + Lastar %1$s … + Gjeldande klokkeslett + Vegpunkt + \n\nHald inne for å sjå på kartet + valt + \n\nHald inne for å sjå val + Delspor: %1$s + Vegpunkt: %1$s + Avstand: %1$s (%2$s punkt) + Gjennomsnittsfart: %1$s + Høgste fart: %1$s + Gjennomsnittshøgd: %1$s + Stigning: %1$s + Tid i rørsle: %1$s + %1$s punkt + Punkt %1$s + GPS-sporet er tomt + Alle spor + Mine favorittar + Mine stadar + Mine stadar + Følg + Logg inn + Kallenamnet mitt + Brukarnamn + raud + rosa + oransje + brun + gul + lyseblå + blå + grøn + + Endra brukareigenskapar + Vis fargar + Info + OsMo-gruppe + Del økt + Loggeintervall + dagar + Kopla til + Skildring + Brukar + Kinesisk + Portugisisk (Brasil) + Engelsk + Afrikaans + Albansk + Arabisk + Armensk + Baskisk + Kviterussisk + Bosnisk + Bulgarsk + Katalansk + Kroatisk + Tsjekkisk + Dansk + Nederlandsk + Finsk + Fransk + Georgisk + Tysk + Gresk + Hebraisk + Hindi + Ungarsk + Indonesisk + Italiensk + Japansk + Koreansk + Latvisk + Litauisk + Marathi + Norsk + Persisk + Polsk + Portugisisk + Rumensk + Russisk + Sardisk + Serbisk + Kinesisk – forenkla + Slovakisk + Slovensk + Spansk + Svensk + Kinesisk – tradisjonell + Tyrkisk + Ukrainsk + Vietnamesisk + Walisisk + Nord-Amerika – Canada + Europa – Italia + Europa – Storbritannia + Vel GPX-fil … + Vel mål + Vel på kartet … + Favoritt … + Ruteinformasjon + Kortaste veg + Bruk kortaste veg + Unngår ferjer + Unngå ferjer + Maksvekt + Kopierer OsmAnd-filer + Lastebil + Navigasjonsval + Sjømerke + Programprofilar + Kartvising: + Fottur + Motorsykkel + Båt + Fly + Ofte spurde spørsmål + Slett alt + og + eller + GPS-status + Globalt grunnkart + Kartstilar + Versjon: + Om + Tips + Maksforstørring + Minste forstørring + Adresse + Namn + Definer/rediger … + Japan + USA + Canada + Europa og Asia + Stopp OsMoDroid + Start OsMoDroid + Oppdater kanalar + Kart: + Gjeldande posisjon + Til: + Via: + Frå: + + Vis kart + Standardprofil + Mål %1$s + Vel først by eller gate + tid + presisjon + fart + høgd og havet + Punkt + GPS-filnamn + Ikkje vis på nytt + Start redigering + Fullfør redigering + Fjern alle punkta + Lagra som GPX-fil + Opna GPX-fil + Bruk Kalman-filter + Bruk magnetisk sensor + Annan + %1$d filer att + %1$d filer tilgjengeleg for nedlasting + Full versjon + Stopp navigering + Fjern mål + Gate + Husnummer + Nettside + Telefonnummer + Programtema + Vel programtema + Versjon installert + Vel adresse + Vel favoritt + OSM-endringar + Andre handlingar + Fjellskugge-lag + GPS-info + Kart + Føretrekker motorvegar + Føretrekk … + Føretrekk motorvegar + ingen + OpenMaps EU + Fjellskugge + Fjellskugge-lag + Start + + Høgdekurvedata + Vis + Foto %1$s av %2$s + Ta eit foto + Ta eit foto + Videoopptak + Lydopptak + Bruk systemopptakar + Bruk kamera-app + Kameraet er ikkje tilgjengeleg + ikkje tilgjengeleg + Ta lydnotat + Ta videonotat + Opptakslag + Slett opptak + Spel av + Opptak %1$s %2$s av %3$s + opptak + Stopp + Start + Lyd-/video-notat + Avstandsmåling + Stopp + Lydnotat + Ta lyd- eller videonotat under turen + Lyd-/videonotat + delar + Høgdkurver + Andre kart + Høgdekurve-tillegg + Berre vegar + Høgdekurver + Vanlege kart + Kart med berre vegar + Fjellturkart + Gøym grenser + OsMoDroid-tillegg + Høgdekorrigeringar + Fartsgrense + GPX + Fann ingen bygningar. + Kart med berre vegar + Sikkermodus + Lukk endringssett + Vegfargetema + Avansert modus … + Parkering + Nødhjelp + Kollektivtransport + Underhaldning + Losji + Restaurantar + + Matbutikk + For turistar + Drivstoff + Vis alarmar … + Bruk kompasset + Unngå motorvegar + Lås på veg + Avbryt musikk + OsmAnd+ kart og navigering + Transportmodus + Merk vegpunkt + diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 95d583835a..f24d093c97 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1322,6 +1322,8 @@ Постоянная фокусировка Звук затвора Проигрывать звук при фотографировании + Размер фото + Размер изображения для встроенного приложения фотографирования Сообщать о превышении скорости Сообщать о камерах @@ -1539,9 +1541,9 @@ Поделиться маршрутом используя файл GPX Ключ доступа Настройка параметров мониторинга и установка персонального канала мониторинга - OpenStreetMap-Monitoring - продвинутый живой мониторинг с множеством средств удалённого контроля http://osmo.mobi + OpenStreetMap Monitoring - продвинутый живой мониторинг с множеством средств удалённого контроля http://osmo.mobi OsMo (Продвинутый онлайн-мониторинг) - OpenStreetMap-Мониторинг + OpenStreetMap Мониторинг Неправильный формат: %s Маршрут предоставленный через OsmAnd @@ -1654,8 +1656,6 @@ OsmAnd - открытый источник и активно развается. жёлтый голубой синий - - зелёный Чтобы создавать группы Вы должны быть зарегистрированным пользователем OsMo. Войти Вы уверены в необходимости регенерации персональных ID? Все устройства, соединённые с Вами, больше не смогут отследить Вас. @@ -1786,7 +1786,10 @@ OsmAnd - открытый источник и активно развается. Обычно Попозже На последних метрах - " - Все созданные группы являются открытыми! Если вы хотите сохранить анонимность, подключите устройства непосредственно через ID трекера.\n - В группе могут быть зарегистрированы до 16 человек.\n - За бездействие или деятельность только 1 человека за 2 недели группа будет удалена.\n - Вы можете ограничить вход в группу, сделать только по приглашениям, но для управления группой вы должны войти в консоль администратора.\n - Если вам нужно создать группу, но с другими условиями, пожалуйста, свяжитесь с http://osmo.mobi" + " - Все созданные группы являются открытыми! Если вы хотите сохранить анонимность, подключите устройства непосредственно через ID трекера.\n - В группе могут состоять до 16 человек.\n - Если в группе не будет активным хотя бы 1 человек в течении 2-х недель группа будет удалена.\n - Вы можете ограничить вход в группу, только по приглашениям, но для управления группой вы должны войти в консоль администратора.\n - Если вам нужно создать группу, но с другими условиями, пожалуйста, свяжитесь со службой поддержки http://osmo.mobi Пеший горный туризм Наложение символов пешего туризма - + Цветные здания + Удалить все + Объявлять ближайшие избранные + diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 2be1d21dc5..42ae9cfc79 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -729,7 +729,7 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres PDI Wikipedia mondiale S\'agiornamentu de sos PDI non est disponìbile pro livellos de zoom bassos "Mapas agiorndas sunt fundamentales pro sa visione sena lìnia, pro sa chirca tramite PDI/indiritzu, e pro su nàvigu sena lìnia. OsmAnd frunidi unu gestore de sas mapas pro las isgarrigare e pro chircare pro agiornamentos. -\n\nPro isgarrigare mapas bae in \'Impostaduras\' → \'Manage map files\' → \'Isgàrriga\'. +\n\nPro isgarrigare mapas bae in \'Impostaduras\' → \'Gesti documentos mapas\' → \'Isgàrriga\'. \n\nA pustis chi sa lista globale de sas regiones at a èssere istada isgarrigada, carca in supra de unu ogetu pro isgarrigare o carrigare unu documentu. Pro piaghere nota s\'isseberadore de tiou de documentu in sa parte arta de s\'ischermu pro ischertare su tipu de isgarrigamentu chi boles (mapas regulares, umbraduras de sos rilievos, etc.). \n\nPodes filtrare sa lista de sas regiones iscrivende carchi lètera, o ischertande s\'optzione \'Impostaduras\' → \'Filtra isgarrigadas \' pro bìere agiornamentos pro petzi sos datos chi tenes giai in su dispositivu. \n\n\t* Boghes in \'birde\' indicana documentos de datos identicos in su dispositivu e in su server @@ -951,4 +951,69 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres Esistit giai unu documentu cun su matessi numene. Sarba Sarba diretziones + Edifìtzios coloraos + Invita... + Boles essire dae su grupu %1$s? + Pro piaghere dislinda s\'id + Sighi cun su nàvigu + Pone in pasu su nàvigu + Bisura pro alpinismu + Disinna sas camineras basandeti in supra de s\'iscala SAC + Istratu sìmbulos escursionisticos + Disinna sas camineras sighinde sas rastas OSMC + + Boles remòvere sa positzione de sa màchina parchegiada? + Burra su marcadore de parchègiu + Recùpera sa màchina pro sas: + Burra unu marcadore de parchègiu + Rutunda: piga sa %1$d essida e sighi + Otimizza sas mapas pro + Ammustra dae su livellu de zoom (serbint sos datos de sas lìnias de livellu): + Ammustra prus minujas in sa mapa + Cronologia chircas + Carcare inoghe pro iscarrigare o carrigare documentos de mapas sena lìnia. +\nCarca un\'elementu esistente pro bìdere prus minujos, carca e mantène carcau pro deativare o cantzellare. Datos currentes in su dispositivu (%1$s lìberos): + Iscàrriga e gesti sas mapas sena lìnia sarbadas in su dispositivu + Abìlita su plugin pro sas mapas sena lìnia pro ammustrare àteras mitzas + Ammustra sas impostaduras pro fatzilitare sa registratzione in unu documentu GPX o in lìnia impreande uu servìtziu web. + Burralos totus +Ischerta totu + Burra + Filtru + Mudadura PDI + Totu sas etichetas sunt sarbadas + Cummentu + Nùmene + Informatziones relatas a su nodu non carrigadas + Errore de I/O durante s\'esecutzione de s\'atzione {0}. + Atzione {0} reseddida cumpridamente. + Gratzias pro s\'impreu de OsmAnd. Pro meda de sas caraterìsticas de s\'àplicu tènes bisongiu de datos locales sena lìnia, chi podent èssere icarrigadas dae \'Impostaduras\'→\'Gesti sos documentos mapas\'. A pustis at a èssere possìbile ammustrare mapas, chircare indirìtzos, PDI, e agatare trasportos pùblicos. + Sa mapa de base est pedida pro su funtzionamentu curretu de s\'àplicu e est idada ischertada pro s\'iscarrigamentu. + Ammustra sas impostaduras pro sa cunfiguratzione avantzada de sa mapa (comente aumentare sos minujos) e calicunas de dispositivos dislindados. + Ammustra impostaduras pro funtzionalidades in isvilupu e debug comente su nàvigu animadu o ammustrare sa prestatzione de su rendering. + Sas mapas vetoriales diat dèpere apàrrere in manera prus lestra. In carchi dispositivu diat podere funtzionare male. + Pretzdentemente est istada annangada a su tzeravallu/calendàriu tuo sa notìfica pro recuperare sa màchina. At a abarrare finas a cando non l\'as a burrare manualmente. + Faghe divènnere transparentes totu sas caraterìsticas de sas àreas de su terrinu + Aumenta sa cantidade ammustrada de minujos de sa mapa + Ammustra sas impostaduras pro cunfigurare una variedade de mapas in lìnia o a tasseddos in cache comente mapa de base pro sas mapas subrapostas/de sutafondu. Custas mapas podent èssere fintzas ammaniadas sena lìnia e copiadas in sa cartella de OsmAnd. + + "Mudas in sa 0.8.0: +\n\t- *Funtzionalidade a plugin* +\n\t - Medas de sas funtzionalidades sunt afiotadas pro carateristicas e podent èssere abilitadas/disabilitadas in sas impostaduras de su plugin. Podes abilitare mitzas pro mapas a tasseddos (in lìnia o in cache), impostaduras pro s\'arrastamentu, e meda àteras funtziones noas e giai esistentes. +\n\t- *Suportu nou pro sas mapas sena lìnia* +\n\t - Su rendering de sas mapas diventada prus lestru e prus pretzisu (sos problemas pro sas lìnias de costa e sas areas allagadas sunt istados acontzados). +\n\t - Depes icarrigare totu datos sena lìnia noos (sos betzos no ant a èssere prus suportados) +\n\t- *Càlculu de s\'àndala sena lìnia* +\n\t - Su càlculu de sas àndala divènnidi prus sòlidu\n\t *Megioramentos impreabilidade e UI* +\n\t - Megioramentos in medas àreas " + Ammustra sasimpostaduras netzessàrias pro cuntribuire ad OSM comente sa regorta/mudadura de sos PDI de OSM, apèrrere/cummentare errores de OSM e inviare documentos GPX registrados (rechedet sas credentziales de OSM). + Riprodui sos cumandos de sa boghe como seletzionada + Proa sos cumandos vocales + Peruna mapa vetoriale est disponìbile pro custa positzione. Ne podes iscarrigare una in Impostaduras (Gesti sos datos mapas), o colare a sas mapas in lìnia (abìlita sas mapas in lìnia pro lu fàghere). + "Mudas in sa 0.7.2: +\n\t- Disinnu nativu pro totu sos dispositivos +\n\t- Creatzione sena lìnia de sos PDI +\n\t- Atzessibilidade +\n\t- Medas curretziones de errores " + Faghe una donatzione pro tènnere funtzionalidades noas inmplementadas in s\'àplicu diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 174cf2a448..7f75b5bc19 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -1274,7 +1274,7 @@ Ulica Číslo domu Logovacie služby - Konfiguruje ako sa majú zaznamenať trasy a povoliť režim spánku + Konfigurovať ako sa majú zaznamenať trasy Logovacie služby Výber témy pre aplikáciu Téma aplikácie @@ -1899,7 +1899,7 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda, OsMo stopa %1$s stiahnutá. Prihlásenie k OsMo zlyhalo Autorizácia zlyhala - Chyba pri autorizácii OsMo : %1$s.\n Možno je služba dočasne nedostupná alebo vám skončila registrácia.\n Chcete pokračovať v novej registrácii. + Chyba pri autorizácii OsMo : %1$s.\n Možno je služba dočasne nedostupná alebo vám skončila registrácia.\n Chcete pokračovať v novej registrácii? Vstúpiť pozvaním " - Všetky vytvorené skupiny sú verejné! Ak chcete byť anonymný, pripojte zariadenia priamo cez Tracker id.\n - Skupina môže zaregistrovať až do 16 ľudí.\n - Skupina bude zrušená v prípade nečinnosti alebo aktivity len jednej osoby počas 2 týždňov.\n - Môžete obmedziť vstup do skupiny len na pozvánky, ale pre ovládanie skupiny musíte použiť administračnú konzolu.\n - Ak potrebujete vytvoriť skupinu s inými podmienkami, kontaktujte http://osmo.mobi" Prosím prečítajte si pred vytváraním skupiny! @@ -1949,4 +1949,16 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda, Zobraziť turistické značky Kresliť chodníky podľa značenia OSMC - + Farebné budovy + Pozvať... + Chcete opustiť skupinu %1$s? + Prosím zadajte ID + Skoro + Normálne + Neskoro + V posledných metroch + Odstrániť všetky +Veľkosť fotografie + Zvoľte veľkosť obrázka interného fotoaparátu + Oznamovať obľúbené miesta v blízkosti + diff --git a/OsmAnd/res/values-sl/strings.xml b/OsmAnd/res/values-sl/strings.xml index d4731db43e..f683f910ab 100644 --- a/OsmAnd/res/values-sl/strings.xml +++ b/OsmAnd/res/values-sl/strings.xml @@ -1328,7 +1328,7 @@ Pomembnejše lastnosti: Način dostopnosti: prosim, najprej izberite cilj Namesto senzorja usmerjenosti, za določanje vrednosti kompasa uporabljaj magnetni senzor Opusti pot - Določite, kako lahko snemate potovanja in omogočite način v pripravljenosti + Določite, kako naj se snemajo potovanja Omogoči sledenje in navigacijo v načinu pripravljenosti (izklopljen zaslon) preko rednega zbujanja GPS naprave. Pokaže nastavitve, ki omogočajo snemanje potovanj v lokalne GPX datoteke ali na splet z uporabo spletnih storitev. Izbira teme programa Tema aplikacije @@ -1890,4 +1890,13 @@ Seznam držav (praktično ves svet!): Afganistan, Albanija, Alžirija, Andora, A Način podzemne železnice Nadaljuj navigacijo Planinski zamljevid + Povabite... + Prosim, določite ID + Zgodaj + Običajno + Pozno + V zadnjih metrih + Odstrani vse +Pobarvane stavbe + Ali želite zapustiti skupino %1$s? diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index e368b495a7..1c440bc24c 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -1164,7 +1164,7 @@ Gata Husnummer Loggningstjänster - Konfigurera inspelning av resa och aktivera viloläge + Konfigurera inspelning av resa Loggningstjänster Ändringar i 1.3: \n\t* Implementera stöd för plattor och stora skärmar @@ -1202,7 +1202,7 @@ \n\t* Stöd för OSM-anteckningar Sök gator i grannstäder - Platser ordnade för att bilda en optimal rutt från positionen på kartan till destinationen. + Mellanliggande waypoints ordnade för att bilda en optimal rutt från positionen på kartan till destinationen. Sortera (dörr-till-dörr) Säkerhetskopieringen av OSM-ändringar misslyckades Säkerhetskopiera som OSM-förändring @@ -1465,14 +1465,14 @@ Starta OsMo-session Beräkna rutt mellan punkter "Förändringar i 1.8: * Beräkna rutt mellan ruttpunkter i GPX-spår * Ändrat utseende vid nedladdning av länder (stöd för sökning med lokala namn) * Stöder GPX-/KML-import (konvertera fråm KML till GPX) * GPX-spår har flyttat till \'Mina data\' * Du kan dela upp GPX-spår efter sträcka och kolla höjdskillnad/hastighet * Autostarta navigering efter fördröjning " - Starta trackersessionen automatiskt och sänd platser sedan appen startats + Starta trackersessionen automatiskt och skicka positioner när appen startats Starta trackersessionen automatiskt Personligt tracker-id Klicka för att visa eller dela ut tracker-id. Med tracker-id kommer anslutna enheter att kunna följa denna enhets alla rörelser! För att koppla ifrån, välj alternativet Återskapa... Sessionstoken: %1$s Väntar på autentisering... - Platser skickade %1$d (i buffer %2$d) + "Positioner skickade %1$d (i buffert %2$d) " Anslutning upprättad: %1$s timmar sedan minuter sedan @@ -1489,7 +1489,7 @@ För att ansluta till gruppen %2$s, ange grupp-id (%1$s) eller klicka på %3$s. Följ denna enhet permanent Dela aktuell session i webbläsaren - Sessionen inte tillgänglig. Kolla att \'Skicka platser\' är på. + Sessionen inte tillgänglig. Kolla att \'Skicka positioner\' är på. Dela session Sessions-URL för att spåra enhet (%1$s) För att ansluta till målenheten %2$s, klicka på länken %3$s eller ange tracker-id (%1$s) @@ -1507,7 +1507,7 @@ Skapa grupp OsMo-server operation misslyckades OpenStreetMap-bevakning - Skicka mina platser + Skicka mina positioner OsMo snabbåtkomst Starta om OsMo-session Avbuggningsinformation @@ -1573,7 +1573,7 @@ Aktuellt inspelningsspår Spara som grupp med favoriter Välj waypoints - Punktetiketter + Namn på punkter Visa zoom-knappar under navigering Visa zoom-knappar grön @@ -1603,7 +1603,7 @@ "Kartkälla och kartlager som ska visas ändras via \'Meny\' → \'Kartlager\'.\n\nUnder \'Kartkälla...\' kan du välja mellan de förladdade offline vektorkartorna (standard, krävs också för offline-navigering), eller fördefinierade (online eller cachade offline) kartbitskällor (aktivera insticksmodulen \'Online-kartor\' under \'Inställningar\'→ \'Plugin\' för detta), eller kartor skapade manuellt med t.ex. OsmaAndMapCreator på en PC.\n\nOsmAnd stöder också egna källor. " Inloggningen till OsMo misslyckades Anslut via inbjudan - " - Alla skapade grupper är offentliga! Om du vill vara anonym, anslut enheter direkt via Tracker-id-\n- Upp till 16 personer kan vara registrerade i gruppen.\n- Grupper tas bort i fall av inaktivitet eller aktivitet av endast 1 person på 2 veckor.\n- Du kan begränsa inträde i grupp men för att kontrollera gruppen måste du gå till adminkonsollen.\n- Om du behöver skapa en grupp, men i övrigt kontakta http://osmo.mobi" + " - Alla skapade grupper är offentliga! Om du vill vara anonym, anslut enheter direkt via Tracker-id-\n- Upp till 16 personer kan vara registrerade i gruppen.\n- Grupper tas bort i fall av inaktivitet eller aktivitet av endast 1 person under två veckor.\n- Du kan begränsa inträde i grupp (som t.ex. endast via inbjudan) men för att kontrollera gruppen måste du gå till adminkonsollen.\n- Om du behöver skapa en grupp med andra villkor kontakta http://osmo.mobi" Läs detta innan du skapar en grupp! Behåll Stoppa @@ -1661,4 +1661,8 @@ Normalt Sent De sista metrarna - + Ta bort alla +Fotostorlek + Välj fotostorlek för intern kamera + Meddela om favoriter i närheten + diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index c8a1efcdac..123f40e93b 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -1074,7 +1074,7 @@ 街道 門牌號碼 日誌記錄服務 - 組態如何記錄行程和啟用休眠模式 + 組態如何記錄行程 透過週期性地喚醒 GPS 裝置,在休眠模式下(螢幕關閉)啟用追蹤和導航。 顯示設定便於去記錄您在當地的行程到裝置端 GPX 檔案或在線上使用網路服務。 日誌記錄服務 @@ -1879,9 +1879,9 @@ OsmAnd 是開放原始碼,而且正在積極的開發。應用程式從報告 請在建立群組之前,仔細閱讀! OsMo 登入失敗 授權失敗 - OsMo 授權時遇到錯誤:%1$s。\n這可能是服務臨時當機或是您的註冊已過期。\n您想要繼續跟新的註冊。 + OsMo 授權時遇到錯誤:%1$s。\n這可能是服務臨時當機或是您的註冊已過期。\n您想要繼續進行和新的註冊嗎? 隱藏建築物 - 隱藏非車輛的高速公路 + 隱藏非車輛的公路 隱藏文字 隱藏樹木和灌樹叢 在 15 級下縮放建築物 @@ -1935,4 +1935,8 @@ OsmAnd 是開放原始碼,而且正在積極的開發。應用程式從報告 稍遲 最後一米 有色彩的建築物 - + 全部移除 +相機照片的大小 + 選擇內部相機照片的大小 + 通報鄰近我的最愛 + diff --git a/OsmAnd/res/values/sherpafy.xml b/OsmAnd/res/values/sherpafy.xml index 281ea9d08f..3b53dcc85d 100644 --- a/OsmAnd/res/values/sherpafy.xml +++ b/OsmAnd/res/values/sherpafy.xml @@ -42,4 +42,5 @@ Start tour Download tour Sherpafy + See waypoint information diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 1a59dc27b6..c32a65f305 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -15,8 +15,7 @@ Please specify id Continue Navigation Pause Navigation - Keep - Subway mode + Subway mode Keep Stop Enable sleep mode @@ -51,7 +50,7 @@ Authorization failed OsMo authorization error encountered : %1$s.\n It could be a temporary service down or your registration expired.\n - Do you want to proceed with new registration. + Do you want to proceed with new registration? Enter by invite - All created groups are public! If you want to be anonymous, connect devices directly via Tracker ids.\n @@ -215,7 +214,6 @@ World bitcoin payments World overview map World ski map - Croatian Chinese Portuguese (Brazil) English @@ -492,7 +490,7 @@ \n\t* Top left button on the map screen replaces Menu button Logging services - Configure how to record trips and enable sleep mode + Configure how to record trips Enable tracking and navigation in sleep (screen off) mode via periodically waking up the GPS device. Show settings facilitating to record your trips to local GPX files or online using a web service. Logging services @@ -1163,9 +1161,9 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A Accessibility related preferences Accessibility Early - Normally + Normal Late - At last metres + In the last meters Arrival announcement How soon do you want the arrival announcement? Not enough process memory to display selected area @@ -1940,5 +1938,9 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A The camera continuously tries to focus Play sound on photo shot Choose whether to play a sound when shooting photos + Camera Picture Size + Select internal camera Picture Size Invalid format: %s + Remove all + Announce nearby favorites diff --git a/OsmAnd/res/xml/navigation_settings.xml b/OsmAnd/res/xml/navigation_settings.xml index 0ec24414e1..375e595b88 100644 --- a/OsmAnd/res/xml/navigation_settings.xml +++ b/OsmAnd/res/xml/navigation_settings.xml @@ -19,10 +19,10 @@ android:key="keep_informing" android:title="@string/keep_informing" android:summary="@string/keep_informing_descr" /> - + diff --git a/OsmAnd/src/net/osmand/plus/GPXUtilities.java b/OsmAnd/src/net/osmand/plus/GPXUtilities.java index b82e5d2457..dd0717287d 100644 --- a/OsmAnd/src/net/osmand/plus/GPXUtilities.java +++ b/OsmAnd/src/net/osmand/plus/GPXUtilities.java @@ -29,6 +29,7 @@ import java.util.TimeZone; import net.osmand.Location; import net.osmand.PlatformUtil; +import net.osmand.data.LocationPoint; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -81,7 +82,7 @@ public class GPXUtilities { } - public static class WptPt extends GPXExtensions { + public static class WptPt extends GPXExtensions implements LocationPoint { public double lat; public double lon; public String name = null; @@ -95,7 +96,26 @@ public class GPXUtilities { public WptPt() { } - + + @Override + public int getColor() { + return getColor(0); + } + + @Override + public double getLatitude() { + return lat; + } + + @Override + public double getLongitude() { + return lon; + } + + @Override + public String getName() { + return name; + } public WptPt(double lat, double lon, long time, double ele, double speed, double hdop) { this.lat = lat; diff --git a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java index 86e83784fc..6cfaa1c3ad 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java @@ -1,16 +1,16 @@ package net.osmand.plus; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import android.widget.ListView; import net.osmand.GeoidAltitudeCorrection; import net.osmand.PlatformUtil; import net.osmand.access.NavigationInfo; import net.osmand.binary.RouteDataObject; import net.osmand.data.LatLon; +import net.osmand.data.LocationPoint; import net.osmand.data.QuadPoint; import net.osmand.plus.OsmandSettings.OsmandPreference; import net.osmand.plus.routing.RoutingHelper; @@ -66,9 +66,7 @@ public class OsmAndLocationProvider implements SensorEventListener { private float[] mGravs = new float[3]; private float[] mGeoMags = new float[3]; private float previousCorrectionValue = 360; - - - + private static final boolean USE_KALMAN_FILTER = true; private static final float KALMAN_COEFFICIENT = 0.04f; @@ -104,8 +102,126 @@ public class OsmAndLocationProvider implements SensorEventListener { private float[] mRotationM = new float[9]; private OsmandPreference USE_MAGNETIC_FIELD_SENSOR_COMPASS; private OsmandPreference USE_FILTER_FOR_COMPASS; - - + + private static final int NOT_ANNOUNCED = 0; + private static final int ANNOUNCED_ONCE = 1; + + private ConcurrentHashMap locationPointsStates = new ConcurrentHashMap(); + private List visibleLocationPoints = new CopyOnWriteArrayList(); + private long locationPointsModified; + + public List getVisibleLocationPoints() { + return visibleLocationPoints; + } + + public void setVisibleLocationPoints(List points) { + locationPointsStates.clear(); + visibleLocationPoints.clear(); + if (points == null) { + return; + } + for (LocationPoint p : points) { + locationPointsStates.put(p, NOT_ANNOUNCED); + visibleLocationPoints.add(p); + } + sortVisibleLocationPoints(); + + } + + public void addVisibleLocationPoint(LocationPoint lp) { + this.locationPointsStates.put(lp, NOT_ANNOUNCED); + this.locationPointsModified = System.currentTimeMillis(); + sortVisibleLocationPoints(); + } + + public void clearAllVisiblePoints() { + this.locationPointsStates.clear(); + this.visibleLocationPoints.clear(); + this.locationPointsModified = System.currentTimeMillis(); + } + + public void sortVisibleLocationPoints() { + net.osmand.Location lastLocation = getLastKnownLocation(); + if (lastLocation != null) { + Object[] loc = visibleLocationPoints.toArray(); + Arrays.sort(loc, getComparator(lastLocation)); + visibleLocationPoints.clear(); + for (Object aLoc : loc) { + visibleLocationPoints.add((LocationPoint) aLoc); + } + locationPointsModified = System.currentTimeMillis(); + } + } + + private Comparator getComparator(final net.osmand.Location lastLocation){ + return new Comparator() { + @Override + public int compare(Object locationPoint, Object locationPoint2) { + double d1 = MapUtils.getDistance(lastLocation.getLatitude(), lastLocation.getLongitude(), + ((LocationPoint)locationPoint).getLatitude(), ((LocationPoint)locationPoint).getLongitude()); + double d2 = MapUtils.getDistance(lastLocation.getLatitude(), lastLocation.getLongitude(), + ((LocationPoint)locationPoint2).getLatitude(), ((LocationPoint)locationPoint2).getLongitude()); + return Double.compare(d1, d2); + } + + }; + } + + public long getLocationPointsModified() { + return locationPointsModified; + } + + public void removeVisibleLocationPoint(LocationPoint lp) { + this.visibleLocationPoints = removeFromList(visibleLocationPoints, lp); + this.locationPointsStates.remove(lp); + this.locationPointsModified = System.currentTimeMillis(); + } + + private void announceVisibleLocations() { + final net.osmand.Location lastLocation = getLastKnownLocation(); + if (lastLocation != null && app.getRoutingHelper().isFollowingMode()) { + String nameToAnnounce = null; + List approachPoints = new ArrayList(); + List announcePoints = new ArrayList(); + for (LocationPoint point : locationPointsStates.keySet()) { + double d1 = MapUtils.getDistance(lastLocation.getLatitude(), lastLocation.getLongitude(), + point.getLatitude(), point.getLongitude()); + int state = locationPointsStates.get(point); + if (state <= ANNOUNCED_ONCE && app.getRoutingHelper().getVoiceRouter().isDistanceLess(lastLocation.getSpeed(), d1, 150)) { + nameToAnnounce = (nameToAnnounce == null ? "" : ", ") + point.getName(); + locationPointsStates.remove(point); + this.locationPointsModified = System.currentTimeMillis(); + app.getMapActivity().getMapLayers().getMapControlsLayer().getWaypointDialogHelper().updateDialog(); + announcePoints.add(point); + } else if (state == NOT_ANNOUNCED && app.getRoutingHelper().getVoiceRouter().isDistanceLess(lastLocation.getSpeed(), d1, 500)) { + locationPointsStates.put(point, state + 1); + this.locationPointsModified = System.currentTimeMillis(); + app.getMapActivity().getMapLayers().getMapControlsLayer().getWaypointDialogHelper().updateDialog(); + approachPoints.add(point); + } + } + if (!announcePoints.isEmpty()) { + app.getRoutingHelper().getVoiceRouter().announceWaypoint(announcePoints); + } + if (!approachPoints.isEmpty()) { + app.getRoutingHelper().getVoiceRouter().approachWaypoint(lastLocation, approachPoints); + } + + } + } + + public List removeFromList(List items, Object item){ + List newArray = new ArrayList(); + Object[] oldArray = items.toArray(); + for (int i=0; i(newArray); + } + public class SimulationProvider { private int currentRoad; private int currentSegment; @@ -518,6 +634,11 @@ public class OsmAndLocationProvider implements SensorEventListener { private void updateLocation(net.osmand.Location loc ) { + if (app.getSettings().ANNOUNCE_NEARBY_FAVORITES.get() && app.getRoutingHelper().isFollowingMode()){ + sortVisibleLocationPoints(); + app.getMapActivity().getMapLayers().getMapControlsLayer().getWaypointDialogHelper().updateDialog(); + announceVisibleLocations(); + } for(OsmAndLocationListener l : locationListeners){ l.updateLocation(loc); } diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index dfeb05a2b3..0ad4ab0c07 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -19,6 +19,7 @@ import net.osmand.access.AccessibleAlertBuilder; import net.osmand.access.AccessibleToast; import net.osmand.plus.access.AccessibilityMode; import net.osmand.plus.activities.DayNightHelper; +import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.SavingTrackHelper; import net.osmand.plus.activities.SettingsActivity; import net.osmand.plus.api.SQLiteAPI; @@ -77,7 +78,7 @@ public class OsmandApplication extends Application { public static final String EXCEPTION_PATH = "exception.log"; //$NON-NLS-1$ private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(OsmandApplication.class); - + ResourceManager resourceManager = null; PoiFiltersHelper poiFilters = null; RoutingHelper routingHelper = null; @@ -104,10 +105,11 @@ public class OsmandApplication extends Application { private boolean applicationInitializing = false; private Locale preferredLocale = null; - + SQLiteAPI sqliteAPI; BRouterServiceConnection bRouterServiceConnection; + MapActivity mapActivity; @Override public void onCreate() { long timeToStart = System.currentTimeMillis(); @@ -838,4 +840,12 @@ public class OsmandApplication extends Application { getNavigationService().addUsageIntent(intent); } } + + public MapActivity getMapActivity() { + return mapActivity; + } + + public void setMapActivity(MapActivity mapActivity) { + this.mapActivity = mapActivity; + } } diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 8f2369723a..882b96fb20 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -818,8 +818,8 @@ public class OsmandSettings { public final OsmandPreference GPX_CALCULATE_RTEPT = new BooleanPreference("gpx_routing_calculate_rtept", true).makeGlobal().cache(); public final OsmandPreference GPX_SPEAK_WPT = new BooleanPreference("speak_gpx_wpt", true).makeGlobal().cache(); public final OsmandPreference GPX_ROUTE_CALC = new BooleanPreference("calc_gpx_route", false).makeGlobal().cache(); - - + + public final OsmandPreference ANNOUNCE_NEARBY_FAVORITES = new BooleanPreference("announce_nearby_favorites", false).makeGlobal().cache(); public final OsmandPreference AVOID_TOLL_ROADS = new BooleanPreference("avoid_toll_roads", false).makeProfile().cache(); public final OsmandPreference AVOID_MOTORWAY = new BooleanPreference("avoid_motorway", false).makeProfile().cache(); diff --git a/OsmAnd/src/net/osmand/plus/PoiFilter.java b/OsmAnd/src/net/osmand/plus/PoiFilter.java index a6521f7a11..2c167177fb 100644 --- a/OsmAnd/src/net/osmand/plus/PoiFilter.java +++ b/OsmAnd/src/net/osmand/plus/PoiFilter.java @@ -14,9 +14,6 @@ import net.osmand.ResultMatcher; import net.osmand.data.Amenity; import net.osmand.data.AmenityType; import net.osmand.util.MapUtils; - -import org.apache.http.client.protocol.ClientContext; - import android.content.Context; public class PoiFilter { @@ -173,9 +170,8 @@ public class PoiFilter { protected List searchAmenities(double lat, double lon, double topLatitude, double bottomLatitude, double leftLongitude, double rightLongitude, final ResultMatcher matcher) { - return app.getResourceManager().searchAmenities(this, - topLatitude, leftLongitude, bottomLatitude, rightLongitude, lat, lon, matcher); + topLatitude, leftLongitude, bottomLatitude, rightLongitude, -1, matcher); } public List searchAgain(double lat, double lon) { diff --git a/OsmAnd/src/net/osmand/plus/SearchOnTheRouteHelper.java b/OsmAnd/src/net/osmand/plus/SearchOnTheRouteHelper.java new file mode 100644 index 0000000000..63260d110e --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/SearchOnTheRouteHelper.java @@ -0,0 +1,54 @@ +package net.osmand.plus; + +import java.io.IOException; +import java.util.HashMap; + +import net.osmand.Location; +import net.osmand.binary.RouteDataObject; +import net.osmand.plus.routing.RouteCalculationResult; +import net.osmand.router.RoutePlannerFrontEnd; +import net.osmand.router.RoutingConfiguration; +import net.osmand.router.BinaryRoutePlanner.RouteSegment; +import net.osmand.router.GeneralRouter.GeneralRouterProfile; +import net.osmand.util.MapUtils; + +public class SearchOnTheRouteHelper { + + private OsmandApplication app; + private PoiFilter filter; + private Thread calculatingThread; + + public SearchOnTheRouteHelper(OsmandApplication app) { + this.app = app; + } + + public void searchOnTheRoute(RouteCalculationResult route) { + scheduleRouteSegmentFind(route); + } + + + private void scheduleRouteSegmentFind(final RouteCalculationResult route){ + } + + private static double getOrthogonalDistance(RouteDataObject r, Location loc){ + double d = 1000; + if (r.getPointsLength() > 0) { + double pLt = MapUtils.get31LatitudeY(r.getPoint31YTile(0)); + double pLn = MapUtils.get31LongitudeX(r.getPoint31XTile(0)); + for (int i = 1; i < r.getPointsLength(); i++) { + double lt = MapUtils.get31LatitudeY(r.getPoint31YTile(i)); + double ln = MapUtils.get31LongitudeX(r.getPoint31XTile(i)); + double od = MapUtils.getOrthogonalDistance(loc.getLatitude(), loc.getLongitude(), pLt, pLn, lt, ln); + if (od < d) { + d = od; + } + pLt = lt; + pLn = ln; + } + } + return d; + } + + + +} diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 910120c03f..68cbe0eaaa 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -2,11 +2,15 @@ package net.osmand.plus; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import net.osmand.Location; import net.osmand.StateChangedListener; import net.osmand.data.LatLon; +import net.osmand.data.LocationPoint; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.routing.RouteProvider.RouteService; import net.osmand.util.MapUtils; @@ -21,7 +25,7 @@ public class TargetPointsHelper { private RoutingHelper routingHelper; private List> listeners = new ArrayList>(); private OsmandApplication ctx; - + public TargetPointsHelper(OsmandApplication ctx){ this.ctx = ctx; this.settings = ctx.getSettings(); @@ -62,7 +66,10 @@ public class TargetPointsHelper { public List getIntermediatePoints() { return intermediatePoints; } - + + + + public List getIntermediatePointsWithTarget() { List res = new ArrayList(); res.addAll(intermediatePoints); @@ -71,7 +78,7 @@ public class TargetPointsHelper { } return res; } - + public List getIntermediatePointNamesWithTarget() { List res = new ArrayList(); res.addAll(intermediatePointNames); @@ -87,7 +94,7 @@ public class TargetPointsHelper { } return null; } - + /** * Clear the local and persistent waypoints list and destination. */ @@ -108,8 +115,8 @@ public class TargetPointsHelper { */ public void makeWayPointDestination(boolean updateRoute, int index){ pointToNavigate = intermediatePoints.remove(index); - settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), - intermediatePointNames.remove(index)); + settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), + intermediatePointNames.remove(index)); settings.deleteIntermediatePoint(index); updateRouteAndReferesh(updateRoute); } @@ -122,13 +129,13 @@ public class TargetPointsHelper { if(sz > 0) { settings.deleteIntermediatePoint(sz- 1); pointToNavigate = intermediatePoints.remove(sz - 1); - settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), + settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), intermediatePointNames.remove(sz - 1)); } } else { settings.deleteIntermediatePoint(index); intermediatePoints.remove(index); - intermediatePointNames.remove(index); + intermediatePointNames.remove(index); } updateRouteAndReferesh(updateRoute); } @@ -153,7 +160,7 @@ public class TargetPointsHelper { settings.getIntermediatePoints(), loc); } } - + private Location wrap(LatLon l) { if(l == null) { @@ -164,12 +171,12 @@ public class TargetPointsHelper { loc.setLongitude(l.getLongitude()); return loc; } - + public void addListener(StateChangedListener l) { listeners.add(l); } - - + + private void updateListeners() { for(StateChangedListener l : listeners) { l.stateChanged(null); @@ -184,15 +191,15 @@ public class TargetPointsHelper { readFromSettings(settings); updateRouteAndReferesh(updateRoute); } - + public void clearStartPoint(boolean updateRoute) { settings.clearPointToStart(); readFromSettings(settings); updateRouteAndReferesh(updateRoute); } - - - public void reorderAllTargetPoints(List point, + + + public void reorderAllTargetPoints(List point, List names, boolean updateRoute){ settings.clearPointToNavigate(); if (point.size() > 0) { @@ -206,8 +213,8 @@ public class TargetPointsHelper { readFromSettings(settings); updateRouteAndReferesh(updateRoute); } - - + + public boolean hasTooLongDistanceToNavigate() { if(settings.ROUTER_SERVICE.get() != RouteService.OSMAND) { return false; @@ -227,24 +234,24 @@ public class TargetPointsHelper { } return false; } - + public void navigateToPoint(LatLon point, boolean updateRoute, int intermediate){ navigateToPoint(point, updateRoute, intermediate, null); } - + public void navigateToPoint(LatLon point, boolean updateRoute, int intermediate, String historyName){ if(point != null){ if(intermediate < 0 || intermediate > intermediatePoints.size()) { if(intermediate > intermediatePoints.size()) { LatLon pn = getPointToNavigate(); if(pn != null) { - settings.insertIntermediatePoint(pn.getLatitude(), pn.getLongitude(), getPointNavigateDescription(), + settings.insertIntermediatePoint(pn.getLatitude(), pn.getLongitude(), getPointNavigateDescription(), intermediatePoints.size()); } } settings.setPointToNavigate(point.getLatitude(), point.getLongitude(), historyName); } else { - settings.insertIntermediatePoint(point.getLatitude(), point.getLongitude(), historyName, + settings.insertIntermediatePoint(point.getLatitude(), point.getLongitude(), historyName, intermediate); } } else { @@ -254,7 +261,7 @@ public class TargetPointsHelper { readFromSettings(settings); updateRouteAndReferesh(updateRoute); } - + public void setStartPoint(LatLon startPoint, boolean updateRoute, String name) { if(startPoint != null) { settings.setPointToStart(startPoint.getLatitude(), startPoint.getLongitude(), name); @@ -264,7 +271,7 @@ public class TargetPointsHelper { readFromSettings(settings); updateRouteAndReferesh(updateRoute); } - + public boolean checkPointToNavigate(){ if(pointToNavigate == null){ ctx.showToastMessage(R.string.mark_final_location_first); @@ -272,7 +279,7 @@ public class TargetPointsHelper { } return true; } - + public boolean checkPointToNavigateShort(){ if(pointToNavigate == null){ ctx.showShortToastMessage(R.string.mark_final_location_first); @@ -284,6 +291,4 @@ public class TargetPointsHelper { public Location getPointToStartLocation() { return wrap(getPointToStart()); } - - } diff --git a/OsmAnd/src/net/osmand/plus/activities/FavouritesActivity.java b/OsmAnd/src/net/osmand/plus/activities/FavouritesActivity.java index 6f24115a79..c8e290e32c 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavouritesActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavouritesActivity.java @@ -6,6 +6,7 @@ package net.osmand.plus.activities; import java.io.File; import java.util.ArrayList; +import android.content.Intent; import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; @@ -36,6 +37,10 @@ public class FavouritesActivity extends SherlockFragmentActivity { private static final String FAVOURITES_INFO = "FAVOURITES_INFO"; private static final String TRACKS = "TRACKS"; private static final String SELECTED_TRACK = "SELECTED_TRACK"; + public static int FAVORITES_TAB = 0; + public static int GPX_TAB = 1; + public static int SELECTED_GPX_TAB = 2; + public static String TAB_PARAM = "TAB_PARAM"; private TabsAdapter mTabsAdapter; private TabSpec selectedTrack; private TabHost tabHost; @@ -85,7 +90,15 @@ public class FavouritesActivity extends SherlockFragmentActivity { AvailableGPXFragment.class, null); selectedTrack = mTabsAdapter.addTab(tabHost.newTabSpec(SELECTED_TRACK).setIndicator(getString(R.string.selected_track)), SelectedGPXFragment.class, null); - tabHost.setCurrentTab(tab); + Intent intent = getIntent(); + if(intent != null) { + int tt = intent.getIntExtra(TAB_PARAM, -1); + if(tt >= 0) { + tabHost.setCurrentTab(tt); + } + } else { + tabHost.setCurrentTab(tab); + } updateSelectedTracks(); } } diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index ff2e996ee6..fd14fabdfc 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -301,6 +301,7 @@ public class MapActivity extends AccessibleActivity { } settings.MAP_ACTIVITY_ENABLED.set(true); + app.setMapActivity(this); checkExternalStorage(); showAndHideMapPosition(); @@ -559,6 +560,7 @@ public class MapActivity extends AccessibleActivity { settings.setLastKnownMapZoom(mapView.getZoom()); settings.MAP_ACTIVITY_ENABLED.set(false); + app.setMapActivity(null); app.getResourceManager().interruptRendering(); app.getResourceManager().setBusyIndicator(null); OsmandPlugin.onMapActivityPause(this); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 6cb301f648..99acc6552b 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -642,6 +642,7 @@ public class MapActivityActions implements DialogProvider { mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); mapActivity.getMapView().refreshMap(true); + mapActivity.getMapLayers().getMapControlsLayer().showDialog(); if(targets.hasTooLongDistanceToNavigate()) { app.showToastMessage(R.string.route_is_too_long); } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index b477a2cc53..b70017d007 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -113,6 +113,10 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { public static final int AV_DEFAULT_ACTION_TAKEPICTURE = 2; public static final int AV_DEFAULT_ACTION_CHOOSE = -1; + // camera picture size: + public static final int AV_PHOTO_SIZE_DEFAULT = -1; + public static int cameraPictureSizeDefault = 0; + // camera focus type public static final int AV_CAMERA_FOCUS_AUTO = 0; public static final int AV_CAMERA_FOCUS_HIPERFOCAL = 1; @@ -124,10 +128,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { private static int shotId = 0; private SoundPool sp = null; + public final CommonPreference AV_CAMERA_PICTURE_SIZE; public final CommonPreference AV_CAMERA_FOCUS_TYPE; - public final CommonPreference AV_DEFAULT_ACTION; - public final OsmandPreference SHOW_RECORDINGS; private DataTileManager recordings = new DataTileManager(14); @@ -341,6 +344,8 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { AV_EXTERNAL_PHOTO_CAM = settings.registerBooleanPreference("av_external_cam", true).makeGlobal(); AV_VIDEO_FORMAT = settings.registerIntPreference("av_video_format", VIDEO_OUTPUT_MP4).makeGlobal(); AV_DEFAULT_ACTION = settings.registerIntPreference("av_default_action", AV_DEFAULT_ACTION_CHOOSE).makeGlobal(); + // camera picture size: + AV_CAMERA_PICTURE_SIZE = settings.registerIntPreference("av_camera_picture_size", AV_PHOTO_SIZE_DEFAULT).makeGlobal(); // camera focus type: AV_CAMERA_FOCUS_TYPE = settings.registerIntPreference("av_camera_focus_type", AV_CAMERA_FOCUS_AUTO).makeGlobal(); // camera sound: @@ -758,8 +763,34 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public void surfaceCreated(SurfaceHolder holder) { try { + // load sound befor shot: + if (AV_PHOTO_PLAY_SOUND.get()) { + if (sp == null) + sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); + log.info("Play sound on photo"); + if (shotId == 0) { + shotId = sp.load(app.getAssets().openFd("sounds/camera_click.ogg"), 1); + log.debug("loaded file sound ID: " + shotId); + } + } + Parameters parameters = cam.getParameters(); + // camera picture size: + List psps = parameters.getSupportedPictureSizes(); + int index = AV_CAMERA_PICTURE_SIZE.get(); + log.debug("takePhotoWithCamera() index=" + index ); + if(index == AV_PHOTO_SIZE_DEFAULT) + { + index = cameraPictureSizeDefault; + log.debug("takePhotoWithCamera() Default value of picture size. Set index to cameraPictureSizeDefault. Now index=" + + index ); + } + Camera.Size selectedCamPicSize = psps.get(index); + parameters.setPictureSize(selectedCamPicSize.width, selectedCamPicSize.height); + log.debug("takePhotoWithCamera() set Picture size: width=" + selectedCamPicSize.width + + " height=" + selectedCamPicSize.height ); + // camera focus type: boolean autofocus = true; // boolean autofocus = !Boolean.parseBoolean(parameters.get("auto-exposure-lock-supported")); @@ -797,16 +828,6 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { // parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED); // parameters.set("auto-exposure-lock", "true"); // } - // load sound befor shot: - if (AV_PHOTO_PLAY_SOUND.get()) { - if (sp == null) - sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); - log.info("Play sound on photo"); - if (shotId == 0) { - shotId = sp.load(app.getAssets().openFd("sounds/camera_click.ogg"), 1); - log.debug("loaded file sound ID: " + shotId); - } - } parameters.setWhiteBalance(Parameters.WHITE_BALANCE_AUTO); parameters.setFlashMode(Parameters.FLASH_MODE_AUTO); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java b/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java index 2622fef45b..dee0b2ebd3 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java @@ -6,6 +6,9 @@ import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.AV_DEFAULT_ACTION import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.AV_DEFAULT_ACTION_VIDEO; import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.VIDEO_OUTPUT_3GP; import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.VIDEO_OUTPUT_MP4; +// camera picture size: +import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.cameraPictureSizeDefault; +import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.AV_PHOTO_SIZE_DEFAULT; // support camera focus select: import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.AV_CAMERA_FOCUS_AUTO; import static net.osmand.plus.audionotes.AudioVideoNotesPlugin.AV_CAMERA_FOCUS_HIPERFOCAL; @@ -52,10 +55,80 @@ public class SettingsAudioVideoActivity extends SettingsBaseActivity { // camera type settings: grp.addPreference(createCheckBoxPreference(p.AV_EXTERNAL_PHOTO_CAM, R.string.av_use_external_camera, R.string.av_use_external_camera_descr)); - // focus mode settings: - // show in menu only suppoted modes: Parameters parameters = cam.getParameters(); + + // Photo picture size + // get supported sizes: + List psps = parameters.getSupportedPictureSizes(); + // list of megapixels of each resolution: + List mpix = new ArrayList(); + // list of index each resolution in list, returned by getSupportedPictureSizes(): + List picSizesValues = new ArrayList(); + // fill lists for sort: + for (int index = 0; index < psps.size(); index++) { + mpix.add( (psps.get(index)).width*(psps.get(index)).height ); + picSizesValues.add(index); + } + // sort list for max resolution in begining of list: + for (int i=0; i < mpix.size(); i++ ) + { + for (int j=0; j < mpix.size() - i - 1; j++ ) + { + if ( mpix.get(j) < mpix.get( j + 1 ) ) + { + // change elements: + int tmp=mpix.get( j + 1 ); + mpix.set( j + 1, mpix.get( j ) ); + mpix.set( j, tmp ); + + tmp=picSizesValues.get( j + 1 ); + picSizesValues.set( j + 1, picSizesValues.get( j ) ); + picSizesValues.set( j, tmp ); + } + } + } + // set default photo size to max resolution (set index of element with max resolution in List, returned by getSupportedPictureSizes() ): + cameraPictureSizeDefault = picSizesValues.get(0); + log.debug("onCreate() set cameraPictureSizeDefault=" + cameraPictureSizeDefault); + + List itemsPicSizes = new ArrayList(); + String prefix; + for (int index = 0; index < psps.size(); index++) { + float px=(float)((psps.get( picSizesValues.get(index) )).width*(psps.get( picSizesValues.get(index) )).height); + if(px>102400) // 100 K + { + px=px/1048576; + prefix="Mpx"; + } + else + { + px=px/1024; + prefix="Kpx"; + } + + itemsPicSizes.add( (psps.get( picSizesValues.get(index) )).width + + "x" + + (psps.get( picSizesValues.get(index) )).height + + " ( " + + String.format("%.2f", px ) + + " " + + prefix + + " )"); + } + log.debug("onCreate() set default size: width=" + psps.get( cameraPictureSizeDefault ).width + " height=" + + psps.get( cameraPictureSizeDefault ).height + " index in ps=" + cameraPictureSizeDefault ); + + entries = itemsPicSizes.toArray(new String[itemsPicSizes.size()]); + intValues = picSizesValues.toArray(new Integer[picSizesValues.size()]); + if (entries.length > 0) { + ListPreference camSizes = createListPreference(p.AV_CAMERA_PICTURE_SIZE, entries, intValues, R.string.av_camera_pic_size, + R.string.av_camera_pic_size_descr); + grp.addPreference(camSizes); + } + + // focus mode settings: + // show in menu only suppoted modes: List sfm = parameters.getSupportedFocusModes(); List items = new ArrayList(); List itemsValues = new ArrayList(); @@ -88,9 +161,11 @@ public class SettingsAudioVideoActivity extends SettingsBaseActivity { R.string.av_camera_focus_descr); grp.addPreference(camFocus); } + // play sound on success photo: grp.addPreference(createCheckBoxPreference(p.AV_PHOTO_PLAY_SOUND, R.string.av_photo_play_sound, R.string.av_photo_play_sound_descr)); + cam.release(); } // video settings: diff --git a/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepository.java b/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepository.java index 9182c1c088..439e498bc9 100644 --- a/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepository.java +++ b/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepository.java @@ -20,17 +20,5 @@ public interface AmenityIndexRepository { public List searchAmenities(int stop, int sleft, int sbottom, int sright, int zoom, PoiFilter filter, List amenities, ResultMatcher matcher); - - public void clearCache(); - - public boolean checkCachedAmenities(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, int zoom, - String filterId, List toFill, boolean fillFound); - - public void evaluateCachedAmenities(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, int zoom, - PoiFilter filter, ResultMatcher matcher); - - public boolean hasChange(); - - public void clearChange(); } diff --git a/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepositoryBinary.java b/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepositoryBinary.java index 46d0014437..82a41ece38 100644 --- a/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepositoryBinary.java +++ b/OsmAnd/src/net/osmand/plus/resources/AmenityIndexRepositoryBinary.java @@ -2,7 +2,6 @@ package net.osmand.plus.resources; import java.io.IOException; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -15,9 +14,7 @@ import net.osmand.binary.BinaryMapIndexReader.SearchPoiTypeFilter; import net.osmand.binary.BinaryMapIndexReader.SearchRequest; import net.osmand.data.Amenity; import net.osmand.data.AmenityType; -import net.osmand.data.LatLon; import net.osmand.plus.PoiFilter; -import net.osmand.util.Algorithms; import net.osmand.util.MapUtils; import org.apache.commons.logging.Log; @@ -40,17 +37,6 @@ public class AmenityIndexRepositoryBinary implements AmenityIndexRepository { } } - - @Override - public boolean hasChange() { - return false; //no change ever - } - - @Override - public void clearChange() { - //nothing to do - } - @Override public boolean checkContains(double latitude, double longitude) { return index.containsPoiData(latitude, longitude); @@ -62,7 +48,7 @@ public class AmenityIndexRepositoryBinary implements AmenityIndexRepository { } - public Map> searchAmenityCategoriesByName(String query, Map> map) { + public synchronized Map> searchAmenityCategoriesByName(String query, Map> map) { try { return index.searchPoiCategoriesByName(query, map); } catch (IOException e) { @@ -72,7 +58,7 @@ public class AmenityIndexRepositoryBinary implements AmenityIndexRepository { } - public List searchAmenitiesByName(int x, int y, int l, int t, int r, int b, String query, ResultMatcher resulMatcher) { + public synchronized List searchAmenitiesByName(int x, int y, int l, int t, int r, int b, String query, ResultMatcher resulMatcher) { long now = System.currentTimeMillis(); List amenities = Collections.emptyList(); SearchRequest req = BinaryMapIndexReader.buildSearchPoiRequest(x, y, query, l, r, t, b,resulMatcher); @@ -95,7 +81,7 @@ public class AmenityIndexRepositoryBinary implements AmenityIndexRepository { } @Override - public List searchAmenities(int stop, int sleft, int sbottom, int sright, int zoom, + public synchronized List searchAmenities(int stop, int sleft, int sbottom, int sright, int zoom, final PoiFilter filter, final List amenities, ResultMatcher matcher) { long now = System.currentTimeMillis(); SearchPoiTypeFilter poiTypeFilter = new SearchPoiTypeFilter(){ @@ -119,71 +105,5 @@ public class AmenityIndexRepositoryBinary implements AmenityIndexRepository { } return amenities; } - - - - - - // Work with cache (for map copied from AmenityIndexRepositoryOdb) - private String cFilterId; - protected List cachedObjects = new ArrayList(); - protected double cTopLatitude; - protected double cBottomLatitude; - protected double cLeftLongitude; - protected double cRightLongitude; - protected int cZoom; - - @Override - public synchronized boolean checkCachedAmenities(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, - int zoom, String filterId, List toFill, boolean fillFound){ - boolean inside = cTopLatitude >= topLatitude && cLeftLongitude <= leftLongitude && cRightLongitude >= rightLongitude - && cBottomLatitude <= bottomLatitude && zoom == cZoom; - boolean noNeedToSearch = inside && Algorithms.objectEquals(filterId, cFilterId); - if((inside || fillFound) && toFill != null && Algorithms.objectEquals(filterId, cFilterId)){ - for(Amenity a : cachedObjects){ - LatLon location = a.getLocation(); - if (location.getLatitude() <= topLatitude && location.getLongitude() >= leftLongitude && location.getLongitude() <= rightLongitude - && location.getLatitude() >= bottomLatitude) { - toFill.add(a); - } - } - } - return noNeedToSearch; - } - - @Override - public void clearCache() { - cachedObjects.clear(); - cTopLatitude = 0; - cBottomLatitude = 0; - cRightLongitude = 0; - cLeftLongitude = 0; - cZoom = 0; - cFilterId = null; - } - - @Override - public void evaluateCachedAmenities(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, int zoom, - PoiFilter filter, ResultMatcher matcher) { - cTopLatitude = topLatitude ; - cBottomLatitude = bottomLatitude ; - cLeftLongitude = leftLongitude ; - cRightLongitude = rightLongitude ; - cFilterId = filter == null ? null : filter.getFilterId(); - cZoom = zoom; - // first of all put all entities in temp list in order to not freeze other read threads - ArrayList tempList = new ArrayList(); - int sleft = MapUtils.get31TileNumberX(cLeftLongitude); - int sright = MapUtils.get31TileNumberX(cRightLongitude); - int sbottom = MapUtils.get31TileNumberY(cBottomLatitude); - int stop = MapUtils.get31TileNumberY(cTopLatitude); - searchAmenities(stop, sleft, sbottom, sright, zoom, filter, tempList, matcher); - synchronized (this) { - cachedObjects.clear(); - cachedObjects.addAll(tempList); - } - - } - } diff --git a/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java b/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java index 5ef820490f..5a7192b0c3 100644 --- a/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java +++ b/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java @@ -8,16 +8,12 @@ import java.util.Stack; import net.osmand.PlatformUtil; import net.osmand.ResultMatcher; -import net.osmand.data.Amenity; import net.osmand.data.RotatedTileBox; import net.osmand.data.TransportStop; import net.osmand.map.ITileSource; import net.osmand.map.MapTileDownloader.DownloadRequest; import net.osmand.map.MapTileDownloader.IMapDownloaderCallback; import net.osmand.plus.BusyIndicator; -import net.osmand.plus.OsmAndFormatter; -import net.osmand.plus.PoiFilter; -import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -37,7 +33,6 @@ public class AsyncLoadingThread extends Thread { private Handler asyncLoadingTransport; Stack requests = new Stack(); - AmenityLoadRequest poiLoadRequest = null; TransportLoadRequest transportLoadRequest = null; @@ -68,8 +63,6 @@ public class AsyncLoadingThread extends Thread { progress = BusyIndicator.STATUS_ORANGE; } else if (!requests.isEmpty()) { progress = BusyIndicator.STATUS_BLACK; - } else if (poiLoadRequest != null && poiLoadRequest.isRunning()) { - progress = BusyIndicator.STATUS_BLACK; } else if (transportLoadRequest != null && transportLoadRequest.isRunning()) { progress = BusyIndicator.STATUS_BLACK; } @@ -96,18 +89,6 @@ public class AsyncLoadingThread extends Thread { if (req instanceof TileLoadDownloadRequest) { TileLoadDownloadRequest r = (TileLoadDownloadRequest) req; tileLoaded |= resourceManger.getRequestedImageTile(r) != null; - } else if (req instanceof AmenityLoadRequest) { - if (!amenityLoaded) { - if (poiLoadRequest == null || asyncLoadingPoi == null) { - startPoiLoadingThread(); - poiLoadRequest = (AmenityLoadRequest) req; - asyncLoadingPoi.post(poiLoadRequest.prepareToRun()); - } else if (poiLoadRequest.recalculateRequest((AmenityLoadRequest) req)) { - poiLoadRequest = (AmenityLoadRequest) req; - asyncLoadingPoi.post(poiLoadRequest.prepareToRun()); - } - amenityLoaded = true; - } } else if (req instanceof TransportLoadRequest) { if (!transportLoaded) { if (transportLoadRequest == null || asyncLoadingTransport == null) { @@ -155,10 +136,6 @@ public class AsyncLoadingThread extends Thread { requests.push(req); } - public void requestToLoadAmenities(AmenityLoadRequest req) { - requests.push(req); - } - public void requestToLoadMap(MapLoadRequest req) { requests.push(req); } @@ -240,72 +217,7 @@ public class AsyncLoadingThread extends Thread { } - protected class AmenityLoadRequest extends MapObjectLoadRequest { - private final List res; - private final PoiFilter filter; - private final int zoom; - private String filterByName; - - public AmenityLoadRequest(List repos, int zoom, PoiFilter filter, String nameFilter) { - super(); - this.res = repos; - this.zoom = zoom; - this.filter = filter; - this.filterByName = nameFilter; - if(this.filterByName != null) { - this.filterByName = this.filterByName.toLowerCase().trim(); - } - } - - @Override - public boolean publish(Amenity object) { - if(filterByName == null || filterByName.length() == 0) { - return true; - } else { - String lower = OsmAndFormatter.getPoiStringWithoutType(object, resourceManger.getContext().getSettings().usingEnglishNames()).toLowerCase(); - return lower.indexOf(filterByName) != -1; - } - } - - public Runnable prepareToRun() { - final double ntopLatitude = topLatitude + (topLatitude - bottomLatitude) / 2; - final double nbottomLatitude = bottomLatitude - (topLatitude - bottomLatitude) / 2; - final double nleftLongitude = leftLongitude - (rightLongitude - leftLongitude) / 2; - final double nrightLongitude = rightLongitude + (rightLongitude - leftLongitude) / 2; - setBoundaries(ntopLatitude, nleftLongitude, nbottomLatitude, nrightLongitude); - return new Runnable() { - @Override - public void run() { - start(); - try { - for (AmenityIndexRepository repository : res) { - repository.evaluateCachedAmenities(ntopLatitude, nleftLongitude, nbottomLatitude, nrightLongitude, zoom, - filter, AmenityLoadRequest.this); - } - } finally { - finish(); - } - } - }; - } - - private boolean repoHasChange() { - for (AmenityIndexRepository r : res) { - if (r.hasChange()) { - r.clearChange(); - return true; - } - } - return false; - } - public boolean recalculateRequest(AmenityLoadRequest req) { - if (this.zoom != req.zoom || !Algorithms.objectEquals(this.filter, req.filter) || req.repoHasChange()) { - return true; - } - return !isContains(req.topLatitude, req.leftLongitude, req.bottomLatitude, req.rightLongitude); - } - - } + protected class TransportLoadRequest extends MapObjectLoadRequest { private final List repos; diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index 8a98629300..36b92ae011 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -1,6 +1,8 @@ package net.osmand.plus.resources; +import gnu.trove.list.array.TIntArrayList; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -36,6 +38,7 @@ import net.osmand.map.MapTileDownloader.DownloadRequest; import net.osmand.map.OsmandRegions; import net.osmand.plus.BusyIndicator; import net.osmand.plus.NameFinderPoiFilter; +import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.PoiFilter; @@ -45,7 +48,6 @@ import net.osmand.plus.SearchByNameFilter; import net.osmand.plus.Version; import net.osmand.plus.render.MapRenderRepositories; import net.osmand.plus.render.NativeOsmandLibrary; -import net.osmand.plus.resources.AsyncLoadingThread.AmenityLoadRequest; import net.osmand.plus.resources.AsyncLoadingThread.MapLoadRequest; import net.osmand.plus.resources.AsyncLoadingThread.TileLoadDownloadRequest; import net.osmand.plus.resources.AsyncLoadingThread.TransportLoadRequest; @@ -702,17 +704,57 @@ public class ResourceManager { } ////////////////////////////////////////////// Working with amenities //////////////////////////////////////////////// + public boolean checkNameFilter(Amenity object, String filterByName) { + boolean publish = false; + if (filterByName == null || filterByName.length() == 0) { + publish = true; + } else { + String lower = OsmAndFormatter.getPoiStringWithoutType(object, context.getSettings().usingEnglishNames()) + .toLowerCase(); + publish = lower.indexOf(filterByName) != -1; + } + return publish; + } + public List searchAmenities(PoiFilter filter, - double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, - double lat, double lon, ResultMatcher matcher) { - List amenities = new ArrayList(); - for (AmenityIndexRepository index : amenityRepositories) { - if (index.checkContains(topLatitude, leftLongitude, bottomLatitude, rightLongitude)) { - index.searchAmenities(MapUtils.get31TileNumberY(topLatitude), MapUtils.get31TileNumberX(leftLongitude), - MapUtils.get31TileNumberY(bottomLatitude), MapUtils.get31TileNumberX(rightLongitude), -1, filter, amenities, matcher); + double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, int zoom, final ResultMatcher matcher) { + final List amenities = new ArrayList(); + if(filter instanceof NameFinderPoiFilter || filter instanceof SearchByNameFilter){ + List tempResults = filter instanceof NameFinderPoiFilter ? + ((NameFinderPoiFilter) filter).getSearchedAmenities() :((SearchByNameFilter) filter).getSearchedAmenities() ; + for(Amenity a : tempResults){ + LatLon l = a.getLocation(); + if(l != null && l.getLatitude() <= topLatitude && l.getLatitude() >= bottomLatitude && l.getLongitude() >= leftLongitude && l.getLongitude() <= rightLongitude){ + if(matcher.publish(a) ){ + amenities.add(a); + } + } + } + } else { + final String filterByName = filter.getFilterByName(); + for (AmenityIndexRepository index : amenityRepositories) { + if (index.checkContains(topLatitude, leftLongitude, bottomLatitude, rightLongitude)) { + index.searchAmenities(MapUtils.get31TileNumberY(topLatitude), + MapUtils.get31TileNumberX(leftLongitude), MapUtils.get31TileNumberY(bottomLatitude), + MapUtils.get31TileNumberX(rightLongitude), -1, filter, amenities, + new ResultMatcher() { + + @Override + public boolean publish(Amenity object) { + if (checkNameFilter(object, filterByName)) { + return matcher.publish(object); + } + return false; + } + + @Override + public boolean isCancelled() { + return matcher.isCancelled(); + } + }); + } } } - return amenities; } @@ -772,31 +814,31 @@ public class ResourceManager { return map; } - public void searchAmenitiesAsync(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude, int zoom, PoiFilter filter, List toFill){ - if(filter instanceof NameFinderPoiFilter || filter instanceof SearchByNameFilter){ - List amenities = filter instanceof NameFinderPoiFilter ? - ((NameFinderPoiFilter) filter).getSearchedAmenities() :((SearchByNameFilter) filter).getSearchedAmenities() ; - for(Amenity a : amenities){ - LatLon l = a.getLocation(); - if(l != null && l.getLatitude() <= topLatitude && l.getLatitude() >= bottomLatitude && l.getLongitude() >= leftLongitude && l.getLongitude() <= rightLongitude){ - toFill.add(a); - } - } - } else { - String filterId = filter == null ? null : filter.getFilterId(); + public void searchAmenitiesOnTheArea(TIntArrayList tiles16z, PoiFilter filter, ResultMatcher results) { + if (tiles16z.size() > 0) { + int z = 16; + int x = tiles16z.get(0) >> z; + int y = tiles16z.get(0) & ((1 << z) - 1); List repos = new ArrayList(); + double topLatitude = MapUtils.getLatitudeFromTile(z, y); + double bottomLatitude = MapUtils.getLatitudeFromTile(z, y + 1); + double leftLongitude = MapUtils.getLongitudeFromTile(z, x); + double rightLongitude = MapUtils.getLongitudeFromTile(z, x + 1); + for (int k = 1; k < tiles16z.size(); k++) { + topLatitude = Math.max(topLatitude, MapUtils.getLatitudeFromTile(z, y)); + bottomLatitude = Math.min(bottomLatitude, MapUtils.getLatitudeFromTile(z, y + 1)); + leftLongitude = Math.min(leftLongitude, MapUtils.getLongitudeFromTile(z, x)); + rightLongitude = Math.max(rightLongitude, MapUtils.getLongitudeFromTile(z, x + 1)); + } for (AmenityIndexRepository index : amenityRepositories) { if (index.checkContains(topLatitude, leftLongitude, bottomLatitude, rightLongitude)) { - if (!index.checkCachedAmenities(topLatitude, leftLongitude, bottomLatitude, rightLongitude, zoom, filterId, toFill, - true)) { - repos.add(index); - } + repos.add(index); } } - if(!repos.isEmpty()){ - AmenityLoadRequest req = asyncLoadingThread.new AmenityLoadRequest(repos, zoom, filter, filter.getFilterByName()); - req.setBoundaries(topLatitude, leftLongitude, bottomLatitude, rightLongitude); - asyncLoadingThread.requestToLoadAmenities(req); + if (!repos.isEmpty()) { + for(AmenityIndexRepository r : repos) { +// r.searchAmenities(stop, sleft, sbottom, sright, zoom, filter, amenities, matcher) + } } } } @@ -811,6 +853,7 @@ public class ResourceManager { return addressMap.values(); } + ////////////////////////////////////////////// Working with transport //////////////////////////////////////////////// public List searchTransportRepositories(double latitude, double longitude) { List repos = new ArrayList(); @@ -950,9 +993,6 @@ public class ResourceManager { public void onLowMemory() { log.info("On low memory : cleaning tiles - size = " + cacheOfImages.size()); //$NON-NLS-1$ clearTiles(); - for(AmenityIndexRepository r : amenityRepositories){ - r.clearCache(); - } for(RegionAddressRepository r : addressMap.values()){ r.clearCache(); } diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java index 93a2fab224..5810d31ad6 100644 --- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java +++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java @@ -4,29 +4,24 @@ import java.io.File; import java.util.*; import android.content.Context; +import android.content.Intent; import android.view.Gravity; import android.view.LayoutInflater; import android.widget.Button; import android.widget.FrameLayout; import android.widget.TextView; import net.osmand.data.LatLon; -import net.osmand.plus.ApplicationMode; -import net.osmand.plus.GPXUtilities; +import net.osmand.plus.*; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.Route; import net.osmand.plus.GPXUtilities.WptPt; -import net.osmand.plus.OsmAndFormatter; -import net.osmand.plus.OsmandApplication; -import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.R; -import net.osmand.plus.TargetPointsHelper; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.sherpafy.WaypointDialogHelper; import net.osmand.plus.views.MapInfoLayer; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.mapwidgets.TextInfoWidget; import net.osmand.util.MapUtils; -import android.content.Intent; import android.graphics.Paint; import android.os.AsyncTask; import android.text.format.DateFormat; @@ -242,6 +237,8 @@ public class RoutePointsPlugin extends OsmandPlugin { routeStepsControl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { +// FavouritesDbHelper fp = map.getMyApplication().getFavorites(); +// app.getTargetPointsHelper().addVisibleLocationPoint(fp.getFavouritePoints().get(new Random().nextInt(fp.getFavouritePoints().size()))); Intent intent = new Intent(app, RoutePointsActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); app.startActivity(intent); @@ -252,6 +249,7 @@ public class RoutePointsPlugin extends OsmandPlugin { return routeStepsControl; } + public class RoutePoint { boolean isNextNavigate; int gpxOrder; diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java b/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java index 15f0151e37..b23ee8ebf1 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java +++ b/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java @@ -1,5 +1,6 @@ package net.osmand.plus.routing; +import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; import gnu.trove.list.array.TIntArrayList; import java.util.ArrayList; @@ -13,6 +14,7 @@ import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; import net.osmand.data.DataTileManager; import net.osmand.data.LatLon; +import net.osmand.data.LocationPoint; import net.osmand.plus.ApplicationMode; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.R; @@ -30,15 +32,14 @@ public class RouteCalculationResult { private final List directions; private final List segments; private final List alarmInfo; - private final List waypoints; private final String errorMessage; private final int[] listDistance; private final int[] intermediatePoints; - private final int[] waypointIndexes; private final float routingTime; protected int cacheCurrentTextDirectionInfo = -1; protected List cacheAgreggatedDirections; + protected List locationPoints = new ArrayList(); // Note always currentRoute > get(currentDirectionInfo).routeOffset, // but currentRoute <= get(currentDirectionInfo+1).routeOffset @@ -58,12 +59,9 @@ public class RouteCalculationResult { this.listDistance = new int[0]; this.directions = new ArrayList(); this.alarmInfo = new ArrayList(); - this.waypointIndexes = new int[0]; - this.waypoints = new ArrayList(); } - public RouteCalculationResult(List list, List directions, RouteCalculationParams params, - DataTileManager waypointsTm) { + public RouteCalculationResult(List list, List directions, RouteCalculationParams params) { this.routingTime = 0; this.errorMessage = null; this.intermediatePoints = new int[params.intermediates == null ? 0 : params.intermediates.size()]; @@ -89,13 +87,14 @@ public class RouteCalculationResult { calculateIntermediateIndexes(params.ctx, this.locations, params.intermediates, localDirections, this.intermediatePoints); this.directions = Collections.unmodifiableList(localDirections); updateDirectionsTime(this.directions, this.listDistance); - this.waypoints = new ArrayList(); - this.waypointIndexes = calculateWaypointIndexes(list, waypointsTm, waypoints); } public RouteCalculationResult(List list, Location start, LatLon end, List intermediates, - Context ctx, boolean leftSide, float routingTime) { + Context ctx, boolean leftSide, float routingTime, List waypoints) { this.routingTime = routingTime; + if(waypoints != null) { + this.locationPoints.addAll(waypoints); + } List computeDirections = new ArrayList(); this.errorMessage = null; this.intermediatePoints = new int[intermediates == null ? 0 : intermediates.size()]; @@ -113,35 +112,12 @@ public class RouteCalculationResult { this.directions = Collections.unmodifiableList(computeDirections); updateDirectionsTime(this.directions, this.listDistance); this.alarmInfo = Collections.unmodifiableList(alarms); - this.waypointIndexes = new int[0]; - this.waypoints = new ArrayList(); } - - public List getWaypointsToAnnounce(Location loc) { - if (currentWaypointGPX != lastWaypointGPX && loc != null) { - ArrayList points = new ArrayList(); - Location next = locations.get(currentRoute); - float dist = loc.distanceTo(next); - while (currentWaypointGPX < lastWaypointGPX) { - WptPt w = waypoints.get(currentWaypointGPX); - if(MapUtils.getDistance(w.lat, w.lon, next.getLatitude(), next.getLongitude()) > dist + 50) { - currentWaypointGPX++; - } else { - break; - } - } - while (currentWaypointGPX < lastWaypointGPX) { - WptPt w = waypoints.get(currentWaypointGPX); - if(MapUtils.getDistance(w.lat, w.lon, loc.getLatitude(), next.getLongitude()) < 60) { - currentWaypointGPX++; - points.add(w); - } - } - return points; - } - return Collections.emptyList(); + + public List getLocationPoints() { + return locationPoints; } - + private static void calculateIntermediateIndexes(Context ctx, List locations, List intermediates, List localDirections, int[] intermediatePoints) { if(intermediates != null && localDirections != null) { @@ -519,27 +495,27 @@ public class RouteCalculationResult { * PREPARATION * */ - private int[] calculateWaypointIndexes(List list, DataTileManager waypointsTm, List waypoints) { + private int[] calculateWaypointIndexes(List list, DataTileManager waypointsTm, List waypoints) { if(waypointsTm == null || waypointsTm.isEmpty() || list.size() == 0) { return new int[0]; } TIntArrayList ls = new TIntArrayList(); Location loc = list.get(0); Location ploc = list.get(0); - Set added = new HashSet(); + Set added = new HashSet(); int prev31x = MapUtils.get31TileNumberX(loc.getLatitude()); int prev31y = MapUtils.get31TileNumberY(loc.getLongitude()); for(int j = 1; j < list.size(); j++) { loc = list.get(j); int t31x = MapUtils.get31TileNumberX(loc.getLatitude()); int t31y = MapUtils.get31TileNumberY(loc.getLongitude()); - List ws = waypointsTm.getObjects(Math.min(prev31x, t31x) - Math.abs(t31x - prev31x) / 4, + List ws = waypointsTm.getObjects(Math.min(prev31x, t31x) - Math.abs(t31x - prev31x) / 4, Math.min(prev31y, t31y) - Math.abs(t31y - prev31y) / 4, Math.max(prev31x, t31x) + Math.abs(t31x - prev31x) / 4, Math.max(prev31y, t31y) + Math.abs(t31y - prev31y) / 4); - for(WptPt w : ws) { + for(LocationPoint w : ws) { if (added.contains(w)) { - double ds = MapUtils.getOrthogonalDistance(w.lat, w.lon, ploc.getLatitude(), ploc.getLongitude(), loc.getLatitude(), + double ds = MapUtils.getOrthogonalDistance(w.getLatitude(), w.getLongitude(), ploc.getLatitude(), ploc.getLongitude(), loc.getLatitude(), loc.getLongitude()); if (ds < 160) { ls.add(j); @@ -755,9 +731,6 @@ public class RouteCalculationResult { while (nextAlarmInfo < alarmInfo.size() && alarmInfo.get(nextAlarmInfo).locationIndex < currentRoute) { nextAlarmInfo++; } - while(lastWaypointGPX < waypointIndexes.length && waypointIndexes[lastWaypointGPX] <= currentRoute) { - lastWaypointGPX++; - } while(nextIntermediate < intermediatePoints.length) { RouteDirectionInfo dir = directions.get(intermediatePoints[nextIntermediate]); if(dir.routePointOffset < currentRoute) { diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java index ea0ca48abd..26c3948fea 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java +++ b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java @@ -22,11 +22,14 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; +import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; import net.osmand.Location; import net.osmand.PlatformUtil; import net.osmand.binary.BinaryMapIndexReader; import net.osmand.data.DataTileManager; +import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; +import net.osmand.data.LocationPoint; import net.osmand.plus.ApplicationMode; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; @@ -201,12 +204,12 @@ public class RouteProvider { public static class GPXRouteParams { List points = new ArrayList(); List directions; - DataTileManager wpt; boolean calculateOsmAndRoute; boolean passWholeRoute; boolean calculateOsmAndRouteParts; boolean useIntermediatePointsRTE; - + private List wpt; + public List getPoints() { return points; } @@ -242,6 +245,9 @@ public class RouteProvider { useIntermediatePointsRTE = builder.useIntermediatePointsRTE; boolean announceWaypoints = builder.announceWaypoints; builder.calculateOsmAndRoute = false; // Disabled temporary builder.calculateOsmAndRoute; + if(announceWaypoints && !file.points.isEmpty()) { + wpt = new ArrayList(file.points ); + } if(file.isCloudmadeRouteFile() || OSMAND_ROUTER.equals(file.author)){ directions = parseOsmAndGPXRoute(points, file, OSMAND_ROUTER.equals(file.author), builder.leftSide, 10); if(reverse){ @@ -271,14 +277,6 @@ public class RouteProvider { Collections.reverse(points); } } - wpt = null; - if(announceWaypoints && !file.points.isEmpty()) { - wpt = new DataTileManager(17); - for(WptPt w : file.points ) { - wpt.registerObjectXY(MapUtils.get31TileNumberX(w.lon), - MapUtils.get31TileNumberY(w.lat),w) ; - } - } return this; } @@ -356,7 +354,7 @@ public class RouteProvider { locs = findStartAndEndLocationsFromRoute(locs, params.start, params.end, startI, endI); List directions = calcDirections(startI, endI, rcr.getRouteDirections()); insertInitialSegment(params, locs, directions, true); - res = new RouteCalculationResult(locs, directions, params, null); + res = new RouteCalculationResult(locs, directions, params); } catch (RuntimeException e) { e.printStackTrace(); } @@ -390,7 +388,7 @@ public class RouteProvider { info.distance = 0; info.afterLeftTime = 0; } - RouteCalculationResult res = new RouteCalculationResult(gpxRoute, gpxDirections, routeParams, gpxParams.wpt); + RouteCalculationResult res = new RouteCalculationResult(gpxRoute, gpxDirections, routeParams); return res; } @@ -624,7 +622,7 @@ public class RouteProvider { } } params.intermediates = null; - return new RouteCalculationResult(res, null, params, null); + return new RouteCalculationResult(res, null, params); } protected RouteCalculationResult findVectorMapsRoute(final RouteCalculationParams params, boolean calcGPXRoute) throws IOException { @@ -775,8 +773,8 @@ public class RouteProvider { // something really strange better to see that message on the scren return emptyResult(); } else { - RouteCalculationResult res = new RouteCalculationResult(result, params.start, params.end, - params.intermediates, params.ctx, params.leftSide, ctx.routingTime); + RouteCalculationResult res = new RouteCalculationResult(result, params.start, params.end, + params.intermediates, params.ctx, params.leftSide, ctx.routingTime, params.gpxRoute == null? null: params.gpxRoute.wpt); return res; } } catch (RuntimeException e) { @@ -993,7 +991,7 @@ public class RouteProvider { } } params.intermediates = null; - return new RouteCalculationResult(res, null, params, null); + return new RouteCalculationResult(res, null, params); } public GPXFile createOsmandRouterGPX(RouteCalculationResult srcRoute, OsmandApplication ctx){ @@ -1138,7 +1136,7 @@ public class RouteProvider { res.add(createLocation(pt)); } params.intermediates = null; - return new RouteCalculationResult(res, null, params, null); + return new RouteCalculationResult(res, null, params); } @@ -1214,7 +1212,7 @@ public class RouteProvider { } catch (Exception e) { return new RouteCalculationResult("Exception calling BRouter: " + e); //$NON-NLS-1$ } - return new RouteCalculationResult(res, null, params, null); + return new RouteCalculationResult(res, null, params); } private RouteCalculationResult findStraightRoute(RouteCalculationParams params) { @@ -1240,7 +1238,7 @@ public class RouteProvider { location.setLatitude(lats[1]); location.setLongitude(lons[1]); dots.add(location); - return new RouteCalculationResult(dots,null,params,null); + return new RouteCalculationResult(dots,null,params); } } diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index eae91e3be7..fd56ad6b3a 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -10,14 +10,15 @@ import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; import net.osmand.binary.RouteDataObject; import net.osmand.data.LatLon; +import net.osmand.data.LocationPoint; import net.osmand.plus.ApplicationMode; import net.osmand.plus.GPXUtilities.GPXFile; -import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.NavigationService; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; +import net.osmand.plus.SearchOnTheRouteHelper; import net.osmand.plus.OsmandSettings.MetricsConstants; import net.osmand.plus.R; import net.osmand.plus.TargetPointsHelper; @@ -76,6 +77,7 @@ public class RoutingHelper { //private long wrongMovementDetected = 0; private RouteCalculationProgressCallback progressRoute; + private SearchOnTheRouteHelper searchOnTheRouteHelper; // private ProgressBar progress; // private Handler progressHandler; @@ -87,8 +89,13 @@ public class RoutingHelper { public RoutingHelper(OsmandApplication context, CommandPlayer player){ this.app = context; settings = context.getSettings(); + searchOnTheRouteHelper = new SearchOnTheRouteHelper(context); voiceRouter = new VoiceRouter(this, settings, player); } + + public SearchOnTheRouteHelper getSearchOnTheRouteHelper() { + return searchOnTheRouteHelper; + } public boolean isFollowingMode() { return isFollowingMode; @@ -268,7 +275,6 @@ public class RoutingHelper { // 5. Update Voice router if (isFollowingMode) { // don't update in route planing mode - announceGpxWaypoints(currentLocation); boolean inRecalc = calculateRoute || isRouteBeingCalculated(); if (!inRecalc && !wrongMovementDirection) { voiceRouter.updateStatus(currentLocation, false); @@ -315,24 +321,6 @@ public class RoutingHelper { } } - - private void announceGpxWaypoints(Location currentLocation) { - if (currentLocation != null) { - List wpt = route.getWaypointsToAnnounce(currentLocation); - if (wpt.size() > 0) { - String s = ""; - for (WptPt w : wpt) { - if(!Algorithms.isEmpty(w.name)) { - s = w.name +","; - } - } - if(!Algorithms.isEmpty(s)) { - voiceRouter.announceWaypoint(s); - } - } - } - } - private static double getOrthogonalDistance(Location loc, Location from, Location to) { return MapUtils.getOrthogonalDistance(loc.getLatitude(), loc.getLongitude(), from.getLatitude(), from.getLongitude(), @@ -534,6 +522,12 @@ public class RoutingHelper { } private synchronized void setNewRoute(RouteCalculationResult res, Location start){ + ArrayList locationPoints = new ArrayList(); + if (app.getSettings().ANNOUNCE_NEARBY_FAVORITES.get()){ + locationPoints.addAll(app.getFavorites().getFavouritePoints()); + } + locationPoints.addAll(res.getLocationPoints()); + app.getLocationProvider().setVisibleLocationPoints(locationPoints); final boolean newRoute = !this.route.isCalculated(); route = res; if (isFollowingMode) { @@ -565,6 +559,8 @@ public class RoutingHelper { voiceRouter.newRouteIsCalculated(newRoute); } } + + searchOnTheRouteHelper.searchOnTheRoute(route); app.runInUIThread(new Runnable() { @Override diff --git a/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java b/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java index 8e285bc654..692eb11dd2 100644 --- a/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java +++ b/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java @@ -3,7 +3,10 @@ package net.osmand.plus.routing; import net.osmand.Location; import net.osmand.binary.RouteDataObject; +import net.osmand.data.FavouritePoint; +import net.osmand.data.LocationPoint; import net.osmand.plus.ApplicationMode; +import net.osmand.plus.GPXUtilities; import net.osmand.plus.OsmandSettings; import net.osmand.plus.routing.AlarmInfo.AlarmInfoType; import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo; @@ -16,6 +19,9 @@ import net.osmand.util.Algorithms; import alice.tuprolog.Struct; import alice.tuprolog.Term; import android.content.Context; +import net.osmand.util.MapUtils; + +import java.util.List; public class VoiceRouter { @@ -154,7 +160,7 @@ public class VoiceRouter { } } - protected boolean isDistanceLess(float currentSpeed, double dist, double etalon){ + public boolean isDistanceLess(float currentSpeed, double dist, double etalon){ if(currentSpeed <= 0) { currentSpeed = DEFAULT_SPEED; } @@ -216,11 +222,76 @@ public class VoiceRouter { lastAnnouncedOffRoute = ms; } } - - public void announceWaypoint(String w) { + + public void announceWaypoint(List points) { CommandBuilder p = getNewCommandPlayerToPlay(); - if(p != null) { - p.arrivedAtWayPoint(getSpeakablePointName(w)).play(); + if (p == null){ + return; + } + String favoritesWaypoints = null; + String gpxWaypoints = null; + String poiWaypoints = null; + for (LocationPoint point : points) { + if (point instanceof GPXUtilities.WptPt) { + gpxWaypoints = (favoritesWaypoints == null ? "" : ", ") + point.getName(); + } else if (point instanceof FavouritePoint) { + favoritesWaypoints = (favoritesWaypoints == null ? "" : ", ") + point.getName(); + } else { + poiWaypoints = (favoritesWaypoints == null ? "" : ", ") + point.getName(); + } + } + if (gpxWaypoints != null){ + p.arrivedAtWayPoint(gpxWaypoints).play(); + } + if (favoritesWaypoints != null){ + p.arrivedAtFavorite(favoritesWaypoints).play(); + } + if (poiWaypoints != null){ + p.arrivedAtPoi(poiWaypoints).play(); + } + } + + public void approachWaypoint(Location location, List points){ + CommandBuilder p = getNewCommandPlayerToPlay(); + if (p == null){ + return; + } + String favoritesWaypoints = null; + String gpxWaypoints = null; + String poiWaypoints = null; + double favDistance = -1; + double gpxDistance = -1; + double poiDistance = -1; + for (LocationPoint point : points) { + if (point instanceof GPXUtilities.WptPt) { + gpxWaypoints = (favoritesWaypoints == null ? "" : ", ") + point.getName(); + //need to calculate distance to nearest point + if (favDistance == -1){ + favDistance = MapUtils.getDistance(location.getLatitude(), location.getLongitude(), + point.getLatitude(), point.getLongitude()); + } + } else if (point instanceof FavouritePoint) { + favoritesWaypoints = (favoritesWaypoints == null ? "" : ", ") + point.getName(); + if (gpxDistance == -1){ + gpxDistance = MapUtils.getDistance(location.getLatitude(), location.getLongitude(), + point.getLatitude(), point.getLongitude()); + } + } else { + poiWaypoints = (favoritesWaypoints == null ? "" : ", ") + point.getName(); + if (poiDistance == -1){ + poiDistance = MapUtils.getDistance(location.getLatitude(), location.getLongitude(), + point.getLatitude(), point.getLongitude()); + } + } + } + if (gpxWaypoints != null){ + p.goAhead(gpxDistance, null).andArriveAtWayPoint(gpxWaypoints).play(); + } + if (favoritesWaypoints != null) { + p.goAhead(favDistance, null).andArriveAtFavorite(favoritesWaypoints).play(); + } + if (poiWaypoints != null){ + p.goAhead(poiDistance, null).andArriveAtPoiWaypoint(poiWaypoints).play(); } } diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/WaypointDialogHelper.java b/OsmAnd/src/net/osmand/plus/sherpafy/WaypointDialogHelper.java new file mode 100644 index 0000000000..eb8ead13fa --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/sherpafy/WaypointDialogHelper.java @@ -0,0 +1,263 @@ +package net.osmand.plus.sherpafy; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.os.AsyncTask; +import android.os.SystemClock; +import android.text.Spannable; +import android.text.style.ForegroundColorSpan; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.*; +import net.osmand.Location; +import net.osmand.data.LocationPoint; +import net.osmand.plus.*; +import net.osmand.plus.activities.FavouritesActivity; +import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.base.FavoriteImageDrawable; +import net.osmand.plus.views.MapControlsLayer; +import net.osmand.util.MapUtils; + +import java.util.List; + +/** + * Created by Denis on 25.07.2014. + */ +public class WaypointDialogHelper { + private MapActivity mapActivity; + private OsmandApplication app; + private FrameLayout mainLayout; + private OsmAndLocationProvider locationProvider; + + public static boolean OVERLAP_LAYOUT = true; + private long uiModified; + private View closePointDialog; + + public WaypointDialogHelper(MapActivity mapActivity) { + this.app = mapActivity.getMyApplication(); + locationProvider = this.app.getLocationProvider(); + this.mapActivity = mapActivity; + this.mainLayout = (FrameLayout) ((FrameLayout) mapActivity.getLayout()).getChildAt(0); + } + + public void updateDialog() { + List vlp = locationProvider.getVisibleLocationPoints(); + long locationPointsModified = locationProvider.getLocationPointsModified(); + if (locationPointsModified != uiModified) { + uiModified = locationPointsModified; + if (vlp.isEmpty()) { + removeDialog(); + } else { + final LocationPoint point = vlp.get(0); + boolean created = false; + if (closePointDialog == null) { + created = true; + final LayoutInflater vi = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + closePointDialog = vi.inflate(R.layout.waypoint_reached, null); + } + + updatePointInfoView(closePointDialog, point); + closePointDialog.setBackgroundColor(mapActivity.getResources().getColor(R.color.color_black)); + ((TextView)closePointDialog.findViewById(R.id.waypoint_text)).setTextColor(Color.WHITE); + View all = closePointDialog.findViewById(R.id.all_points); + all.setVisibility(vlp.size() <= 1 ? View.GONE : View.VISIBLE); + all.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showAllDialog(); + } + }); + + View btnN = closePointDialog.findViewById(R.id.info_close); + btnN.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + locationProvider.removeVisibleLocationPoint(point); + updateDialog(); + } + }); + + if (created) { + mainLayout.addView(closePointDialog, getDialogLayoutParams()); + waitBeforeLayoutIsResized(closePointDialog); + } + } + } + } + + private void updatePointInfoView(View localView, final LocationPoint point) { + TextView text = (TextView) localView.findViewById(R.id.waypoint_text); + text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + itemClick(point); + } + }); + + ((ImageView) localView.findViewById(R.id.waypoint_icon)).setImageDrawable(FavoriteImageDrawable.getOrCreate(mapActivity, point.getColor())); + Location lastKnownMapLocation = app.getLocationProvider().getLastKnownLocation(); + String distance; + if (lastKnownMapLocation != null) { + int dist = (int) (MapUtils.getDistance(point.getLatitude(), point.getLongitude(), + lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude())); + distance = OsmAndFormatter.getFormattedDistance(dist, app) + " "; + } else { + distance = ""; + } + text.setText(distance + point.getName(), TextView.BufferType.SPANNABLE); + if (distance.length() > 0) { + ((Spannable) text.getText()).setSpan( + new ForegroundColorSpan(mapActivity.getResources().getColor(R.color.color_distance)), 0, distance.length() - 1, + 0); + } + } + + private void itemClick(LocationPoint point) { + final Intent favorites = new Intent(mapActivity, app.getAppCustomization().getFavoritesActivity()); + favorites.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + favorites.putExtra(FavouritesActivity.TAB_PARAM, + point instanceof GPXUtilities.WptPt ? FavouritesActivity.GPX_TAB : FavouritesActivity.FAVORITES_TAB); + mapActivity.startActivity(favorites); + } + + public void removeDialog() { + if (closePointDialog != null) { + mainLayout.removeView(closePointDialog); + closePointDialog = null; + shiftButtons(0); + } + } + + private FrameLayout.LayoutParams getDialogLayoutParams() { + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); + params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; + return params; + } + + private boolean checkIfDialogExists() { + if (mainLayout == null) { + return true; + } + + if (mainLayout.findViewById(R.id.package_delivered_layout) != null) { + return false; + } + return true; + } + + private void shiftButtons(int height) { + MapControlsLayer mapControls = mapActivity.getMapLayers().getMapControlsLayer(); + if (mapControls != null) { + mapControls.shiftLayout(height); + } + } + + + private void waitBeforeLayoutIsResized(View reachedView) { + //this async task is needed because layout height is not set + // right after you add it so we need to w8 some time + new AsyncTask() { + int height; + + @Override + protected Void doInBackground(View... params) { + for (int i = 0; i < 10; i++) { + SystemClock.sleep(50); + height = params[0].getHeight(); + if (params[0].getHeight() > 0) { + break; + } + } + return null; + } + + protected void onPostExecute(Void result) { + if (height > 0 && OVERLAP_LAYOUT) { + shiftButtons(height); + } + } + }.execute(reachedView); + } + + public void showAllDialog(){ + final List visibleLocationPoints = locationProvider.getVisibleLocationPoints(); + final ArrayAdapter listAdapter = new ArrayAdapter(mapActivity, R.layout.waypoint_reached, R.id.title, + visibleLocationPoints) { + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // User super class to create the View + View v = convertView; + if (v == null) { + v = mapActivity.getLayoutInflater().inflate(R.layout.waypoint_reached, null); + int vl = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, mapActivity.getResources() + .getDisplayMetrics()); + final LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(vl, vl); + ll.setMargins(vl / 4, vl / 4, vl / 4, vl / 4); + v.findViewById(R.id.waypoint_icon).setLayoutParams(ll); + } + updatePointInfoView(v, getItem(position)); + TextView text = (TextView) v.findViewById(R.id.waypoint_text); + text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showOnMap(visibleLocationPoints.get(position)); + } + }); + + View remove = v.findViewById(R.id.info_close); + ((ImageButton) remove).setImageDrawable(mapActivity.getResources().getDrawable( + app.getSettings().isLightContent()? R.drawable.ic_action_gremove_light: + R.drawable.ic_action_gremove_dark)); + remove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + LocationPoint point = locationProvider.getVisibleLocationPoints().get(position); + remove(point); + locationProvider.removeVisibleLocationPoint(point); + notifyDataSetChanged(); + } + }); + + return v; + } + }; + + ListView listView = new ListView(mapActivity); + listView.setAdapter(listAdapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + showOnMap(visibleLocationPoints.get(i)); + } + }); + +// Dialog dlg = new Dialog(mapActivity); +// dlg.setContentView(listView); +// dlg.show(); + AlertDialog.Builder builder = new AlertDialog.Builder(mapActivity); + builder.setView(listView); + builder.setPositiveButton(R.string.default_buttons_ok, null); + builder.setNegativeButton(mapActivity.getString(R.string.hide_all_waypoints), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + locationProvider.clearAllVisiblePoints(); + updateDialog(); + } + }); + builder.show(); + } + + private void showOnMap(LocationPoint locationPoint) { + // AnimateDraggingMapThread thread = mapActivity.getMapView().getAnimatedDraggingThread(); + int fZoom = mapActivity.getMapView().getZoom() < 15 ? 15 : mapActivity.getMapView().getZoom(); + // thread.startMoving(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), fZoom, true); + mapActivity.getMapView().setIntZoom(fZoom); + mapActivity.getMapView().setLatLon(locationPoint.getLatitude(), locationPoint.getLongitude()); + } +} diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index 28355c9398..226838829d 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -3,12 +3,14 @@ package net.osmand.plus.views; import java.util.ArrayList; import java.util.List; +import android.view.ViewParent; import net.osmand.data.RotatedTileBox; import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings.CommonPreference; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.routing.RoutingHelper; +import net.osmand.plus.sherpafy.WaypointDialogHelper; import net.osmand.plus.views.controls.MapRoutePlanControl; import net.osmand.plus.views.controls.MapRoutePreferencesControl; import net.osmand.plus.views.controls.MapCancelControl; @@ -59,10 +61,12 @@ public class MapControlsLayer extends OsmandMapLayer { private LinearLayout transparencyBarLayout; private static CommonPreference settingsToTransparency; private OsmandSettings settings; + private WaypointDialogHelper waypointDialogHelper; public MapControlsLayer(MapActivity activity){ this.mapActivity = activity; settings = activity.getMyApplication().getSettings(); + waypointDialogHelper = new WaypointDialogHelper(activity); } @Override @@ -176,7 +180,8 @@ public class MapControlsLayer extends OsmandMapLayer { checkVisibilityAndDraw(showRouteCalculationControls, zoomSideControls, canvas, tileBox, nightMode); // the last one to check other controls visibility - int vmargin = mapNavigationControl.isVisible() || zoomControls.isVisible() ? zoomControls.getHeight() : 0; + int vmargin = mapNavigationControl.isVisible() || zoomControls.isVisible() ? + (zoomControls.getHeight() + zoomControls.getTotalVerticalMargin()): 0; rulerControl.setVerticalMargin(vmargin); checkVisibilityAndDraw(true, rulerControl, canvas, tileBox, nightMode); } @@ -189,7 +194,7 @@ public class MapControlsLayer extends OsmandMapLayer { private void checkVisibilityAndDraw(boolean visibility, MapControls controls, Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode) { - if(visibility != controls.isVisible()){ + if(visibility != controls.isVisible() ){ if(visibility) { controls.show((FrameLayout) mapActivity.getMapView().getParent()); } else { @@ -298,6 +303,27 @@ public class MapControlsLayer extends OsmandMapLayer { transparencyBarLayout.setVisibility(View.GONE); settingsToTransparency = null; } - } + } + public void shiftLayout(int height) { + FrameLayout parent = (FrameLayout) mapActivity.getMapView().getParent(); + parent.requestLayout(); + for(MapControls mc : allControls) { + if(mc.isBottom()){ + mc.setExtraVerticalMargin(height); + if( mc.isVisible()) { + mc.forceHide(parent); + mc.show(parent); + } + } + } + } + + public void showDialog(){ + mapInfoNavigationControl.setShowDialog(); + } + + public WaypointDialogHelper getWaypointDialogHelper() { + return waypointDialogHelper; + } } diff --git a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java index 5fc8358c88..451917d8a1 100644 --- a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java @@ -1,9 +1,11 @@ package net.osmand.plus.views; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import net.osmand.PlatformUtil; +import net.osmand.ResultMatcher; import net.osmand.access.AccessibleToast; import net.osmand.data.Amenity; import net.osmand.data.AmenityType; @@ -43,14 +45,46 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon private Paint paintIcon; 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; + + /// cache for displayed POI + // Work with cache (for map copied from AmenityIndexRepositoryOdb) + private MapLayerData> data; + public POIMapLayer(MapActivity activity) { + data = new OsmandMapLayer.MapLayerData>() { + { + ZOOM_THRESHOLD = 0; + } + + @Override + public boolean isInterrupted() { + return super.isInterrupted(); + } + + @Override + protected List calculateResult(RotatedTileBox tileBox) { + QuadRect latLonBounds = tileBox.getLatLonBounds(); + return resourceManager.searchAmenities(filter, latLonBounds.top, latLonBounds.left, + latLonBounds.bottom, latLonBounds.right, tileBox.getZoom(), new ResultMatcher() { + + @Override + public boolean publish(Amenity object) { + return true; + } + + @Override + public boolean isCancelled() { + return isInterrupted(); + } + }); + } + }; } public PoiFilter getFilter() { @@ -59,9 +93,11 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon public void setFilter(PoiFilter filter) { this.filter = filter; + data.clearCache(); } public void getAmenityFromPoint(RotatedTileBox tb, PointF point, List am) { + List objects = data.getResults(); if (objects != null) { int ex = (int) point.x; int ey = (int) point.y; @@ -126,6 +162,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon resourceManager = view.getApplication().getResourceManager(); mapTextLayer = view.getLayerByClass(MapTextLayer.class); } + public int getRadiusPoi(RotatedTileBox tb) { int r = 0; @@ -146,30 +183,33 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon @Override public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { - objects.clear(); + List objects = Collections.emptyList(); if (tileBox.getZoom() >= startZoom) { - final QuadRect latLonBounds = tileBox.getLatLonBounds(); - resourceManager.searchAmenitiesAsync(latLonBounds.top, latLonBounds.left, latLonBounds.bottom, - latLonBounds.right, tileBox.getZoom(), filter, objects); - int r = getRadiusPoi(tileBox); - 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()); - canvas.drawCircle(x, y, r, pointAltUI); - canvas.drawCircle(x, y, r, point); - String id = null; - StringBuilder tag = new StringBuilder(); - StringBuilder value = new StringBuilder(); - MapRenderingTypes.getDefault().getAmenityTagValue(o.getType(), o.getSubType(), tag, value); - if (RenderingIcons.containsIcon(tag + "_" + value)) { - id = tag + "_" + value; - } else if (RenderingIcons.containsIcon(tag.toString())) { - id = tag.toString(); - } - if (id != null) { - Bitmap bmp = RenderingIcons.getIcon(view.getContext(), id); - if (bmp != null) { - canvas.drawBitmap(bmp, x - bmp.getWidth() / 2, y - bmp.getHeight() / 2, paintIcon); + data.queryNewData(tileBox); + objects = data.getResults(); + if (objects != null) { + int r = getRadiusPoi(tileBox); + 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()); + canvas.drawCircle(x, y, r, pointAltUI); + canvas.drawCircle(x, y, r, point); + String id = null; + StringBuilder tag = new StringBuilder(); + StringBuilder value = new StringBuilder(); + MapRenderingTypes.getDefault().getAmenityTagValue(o.getType(), o.getSubType(), tag, value); + if (RenderingIcons.containsIcon(tag + "_" + value)) { + id = tag + "_" + value; + } else if (RenderingIcons.containsIcon(tag.toString())) { + id = tag.toString(); + } + if (id != null) { + Bitmap bmp = RenderingIcons.getIcon(view.getContext(), id); + if (bmp != null) { + canvas.drawBitmap(bmp, x - bmp.getWidth() / 2, y - bmp.getHeight() / 2, paintIcon); + } } } } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapControls.java b/OsmAnd/src/net/osmand/plus/views/controls/MapControls.java index 27bd4571e2..71f0ba45e1 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapControls.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapControls.java @@ -1,7 +1,9 @@ package net.osmand.plus.views.controls; import net.osmand.data.RotatedTileBox; +import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.sherpafy.WaypointDialogHelper; import net.osmand.plus.views.OsmandMapLayer.DrawSettings; import android.content.Context; import android.graphics.Canvas; @@ -24,60 +26,64 @@ public abstract class MapControls { protected int shadowColor; private boolean visible; private long delayTime; - + protected int gravity = Gravity.BOTTOM | Gravity.RIGHT; protected int margin; protected int vmargin; protected int width; protected int height; protected Runnable notifyClick; - + private int extraVerticalMargin; + public MapControls(MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) { this.mapActivity = mapActivity; this.showUIHandler = showUIHandler; this.scaleCoefficient = scaleCoefficient; } - - + + public void setGravity(int gravity) { this.gravity = gravity; } - + public void setMargin(int margin) { this.margin = margin; } public void setVerticalMargin(int vmargin) { this.vmargin = vmargin; } - + protected ImageButton addImageButton(FrameLayout parent, int stringId, int resourceId) { Context ctx = mapActivity; ImageButton button = new ImageButton(ctx); applyAttributes(ctx, parent, button, stringId, resourceId, 0); return button; } - + + public int getTotalVerticalMargin() { + return extraVerticalMargin + vmargin; + } + protected Button addButton(FrameLayout parent, int stringId, int resourceId) { return addButton(parent, stringId, resourceId, 0); } - - protected Button addButton(FrameLayout parent, int stringId, int resourceId, int extraMargin) { + protected Button addButton(FrameLayout parent, int stringId, int resourceId, int extraMargin) { Context ctx = mapActivity; Button button = new Button(ctx); applyAttributes(ctx, parent, button, stringId, resourceId, extraMargin); return button; } - + public void setNotifyClick(Runnable notifyClick) { this.notifyClick = notifyClick; } - + protected void notifyClicked() { if(notifyClick != null) { notifyClick.run(); } } - + private void applyAttributes(Context ctx, FrameLayout parent, View button, int stringId, int resourceId, int extraMargin) { @@ -92,15 +98,20 @@ public abstract class MapControls { params.rightMargin = margin + extraMargin; } if((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) { - params.bottomMargin = vmargin; + params.bottomMargin = vmargin + extraVerticalMargin; } else { - params.topMargin = vmargin; + params.topMargin = vmargin + extraVerticalMargin; } - parent.addView(button, params); + button.setLayoutParams(params); + parent.addView(button); button.setEnabled(true); mapActivity.accessibleContent.add(button); } - + + public int getGravity() { + return gravity; + } + protected void removeButton(FrameLayout layout, View b) { layout.removeView(b); mapActivity.accessibleContent.remove(b); @@ -113,12 +124,12 @@ public abstract class MapControls { public final void init(FrameLayout layout) { initControls(layout); } - + public final void show(FrameLayout layout) { visible = true; showControls(layout); } - + public final void showWithDelay(final FrameLayout layout, final long delay) { this.delayTime = System.currentTimeMillis() + delay; if(!visible) { @@ -147,50 +158,58 @@ public abstract class MapControls { } }, delay); } - + public final void hide(FrameLayout layout) { if(this.delayTime == 0) { visible = false; hideControls(layout); } } - + public final void forceHide(FrameLayout layout) { delayTime = 0; visible = false; hideControls(layout); mapActivity.getMapView().refreshMap(); } - + public boolean isVisible() { return visible; } - + protected boolean isLeft() { return (Gravity.LEFT & gravity) == Gravity.LEFT; } - protected boolean isBottom() { + public boolean isBottom() { return (Gravity.BOTTOM & gravity) == Gravity.BOTTOM; } - - + + protected void initControls(FrameLayout layout) { } protected abstract void hideControls(FrameLayout layout); - + protected abstract void showControls(FrameLayout layout); - + public abstract void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode); - - + + public boolean onTouchEvent(MotionEvent event, RotatedTileBox tileBox) { return false; } - + public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { return false; } + + public void setExtraVerticalMargin(int extraVerticalMargin) { + this.extraVerticalMargin = extraVerticalMargin; + } + + public int getExtraVerticalMargin() { + return this.extraVerticalMargin; + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapNavigateControl.java b/OsmAnd/src/net/osmand/plus/views/controls/MapNavigateControl.java index 430dadda5c..1e2c292136 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapNavigateControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapNavigateControl.java @@ -193,7 +193,8 @@ public class MapNavigateControl extends MapControls { private void drawCount(Canvas canvas, RotatedTileBox tb) { - if (navigateShadow.getBounds().width() == 0 && navigateButton.getWidth() > 0) { + if ((navigateShadow.getBounds().width() == 0 && navigateButton.getWidth() > 0 )|| + navigateShadow.getBounds().bottom != navigateButton.getBottom()) { navigateShadow.setBounds(navigateButton.getLeft() - 2, navigateButton.getTop() - (int) (18 * scaleCoefficient), navigateButton.getRight(), navigateButton.getBottom()); } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java b/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java index b43bc3763e..2c3e74aaa5 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java @@ -3,6 +3,9 @@ package net.osmand.plus.views.controls; import java.util.ArrayList; import java.util.List; +import android.graphics.Point; +import android.os.SystemClock; +import android.view.*; import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; import net.osmand.data.RotatedTileBox; @@ -31,10 +34,6 @@ import android.graphics.Canvas; import android.graphics.PointF; import android.graphics.drawable.Drawable; import android.os.Handler; -import android.view.Gravity; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; @@ -56,9 +55,10 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio private AlertDialog favoritesDialog; private boolean selectFromMapTouch; private boolean selectFromMapForTarget; - - - public MapRouteInfoControl(ContextMenuLayer contextMenu, + + private boolean showDialog = false; + + public MapRouteInfoControl(ContextMenuLayer contextMenu, MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) { super(mapActivity, showUIHandler, scaleCoefficient); this.contextMenu = contextMenu; @@ -86,6 +86,12 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio @Override public void showControls(FrameLayout parent) { infoButton = addButton(parent, R.string.route_info, R.drawable.map_btn_signpost); + if (showDialog){ + if (getTargets().getPointToNavigate() == null){ + showDialog(); + } + showDialog = false; + } controlVisible = true; infoButton.setOnClickListener(new View.OnClickListener() { @Override @@ -98,9 +104,6 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio } } }); - if(getTargets().getPointToNavigate() == null) { - showDialog(); - } } private Dialog createDialog() { @@ -131,7 +134,7 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.gravity = Gravity.BOTTOM; - lp.y = (int) (infoButton.getBottom() - infoButton.getTop() + scaleCoefficient * 5); + lp.y = (int) (infoButton.getBottom() - infoButton.getTop() + scaleCoefficient * 5 + getExtraVerticalMargin()); dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setAttributes(lp); @@ -248,6 +251,7 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio @Override public void hideControls(FrameLayout layout) { removeButton(layout, infoButton); + hideDialog(); controlVisible = false; } @@ -455,4 +459,8 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio infoButton.setBackgroundResource(R.drawable.map_btn_signpost); } } + + public void setShowDialog() { + showDialog = true; + } } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java b/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java index 3ba34e2e86..918b880e31 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapRoutePreferencesControl.java @@ -202,7 +202,7 @@ public class MapRoutePreferencesControl extends MapControls { settings.GPX_ROUTE_CALC.set(selected); rp.setCalculateOsmAndRoute(selected); updateParameters(); - } + } } if (gpxParam.id == R.string.calculate_osmand_route_without_internet) { settings.GPX_ROUTE_CALC_OSMAND_PARTS.set(selected); @@ -210,11 +210,16 @@ public class MapRoutePreferencesControl extends MapControls { if (gpxParam.id == R.string.fast_route_mode) { settings.FAST_ROUTE_MODE.set(selected); } + if (gpxParam.id == R.string.announce_nearby_favorites){ + settings.ANNOUNCE_NEARBY_FAVORITES.set(selected); + } } private List getRoutingParameters(ApplicationMode am) { List list = new ArrayList(); + list.add(new OtherLocalRoutingParameter(R.string.announce_nearby_favorites, + mapActivity.getString(R.string.announce_nearby_favorites), settings.ANNOUNCE_NEARBY_FAVORITES.get())); GPXRouteParamsBuilder rparams = mapActivity.getRoutingHelper().getCurrentGPXRoute(); boolean osmandRouter = settings.ROUTER_SERVICE.get() == RouteService.OSMAND ; if(!osmandRouter) { @@ -255,6 +260,7 @@ public class MapRoutePreferencesControl extends MapControls { list.add(rp); } } + return list; } private String getString(int id) { diff --git a/OsmAnd/src/net/osmand/plus/voice/CommandBuilder.java b/OsmAnd/src/net/osmand/plus/voice/CommandBuilder.java index 7da15d5ef6..11e2656626 100644 --- a/OsmAnd/src/net/osmand/plus/voice/CommandBuilder.java +++ b/OsmAnd/src/net/osmand/plus/voice/CommandBuilder.java @@ -28,7 +28,11 @@ public class CommandBuilder { protected static final String C_AND_ARRIVE_INTERMEDIATE = "and_arrive_intermediate"; //$NON-NLS-1$ protected static final String C_REACHED_INTERMEDIATE = "reached_intermediate"; //$NON-NLS-1$ protected static final String C_AND_ARRIVE_WAYPOINT = "and_arrive_waypoint"; //$NON-NLS-1$ + protected static final String C_AND_ARRIVE_FAVORITE = "and_arrive_favorite"; //$NON-NLS-1$ + protected static final String C_AND_ARRIVE_POI_WAYPOINT = "and_arrive_poi"; //$NON-NLS-1$ protected static final String C_REACHED_WAYPOINT = "reached_waypoint"; //$NON-NLS-1$ + protected static final String C_REACHED_FAVORITE = "reached_favorite"; //$NON-NLS-1$ + protected static final String C_REACHED_POI = "reached_poi"; //$NON-NLS-1$ protected static final String C_THEN = "then"; //$NON-NLS-1$ protected static final String C_SPEAD_ALARM = "speed_alarm"; //$NON-NLS-1$ protected static final String C_ATTENTION = "attention"; //$NON-NLS-1$ @@ -190,9 +194,13 @@ public class CommandBuilder { public CommandBuilder arrivedAtWayPoint(String name) { return addCommand(C_REACHED_WAYPOINT, name); } - - public CommandBuilder andArriveAtWayPoint(String name){ - return addCommand(C_AND_ARRIVE_WAYPOINT, name); + + public CommandBuilder arrivedAtFavorite(String name) { + return addCommand(C_REACHED_FAVORITE, name); + } + + public CommandBuilder arrivedAtPoi(String name) { + return addCommand(C_REACHED_POI, name); } public CommandBuilder bearLeft(Term streetName){ @@ -223,8 +231,6 @@ public class CommandBuilder { return alt(prepareStruct(C_ROUTE_RECALC, dist, time), prepareStruct(C_ROUTE_RECALC, dist)); } - - public void play(){ this.commandPlayer.playCommands(this); } @@ -234,8 +240,15 @@ public class CommandBuilder { return this.commandPlayer.execute(listStruct); } - + public CommandBuilder andArriveAtWayPoint(String name){ + return addCommand(C_AND_ARRIVE_WAYPOINT, name); + } + public CommandBuilder andArriveAtPoiWaypoint(String name) { + return addCommand(C_AND_ARRIVE_POI_WAYPOINT, name); + } - + public CommandBuilder andArriveAtFavorite(String name) { + return addCommand(C_AND_ARRIVE_FAVORITE, name); + } } \ No newline at end of file diff --git a/plugins/Osmand-ParkingPlugin/res/values-ko/strings.xml b/plugins/Osmand-ParkingPlugin/res/values-ko/strings.xml new file mode 100644 index 0000000000..6a47113e9b --- /dev/null +++ b/plugins/Osmand-ParkingPlugin/res/values-ko/strings.xml @@ -0,0 +1,7 @@ + +아니오 + + OsmAnd는 설치되어 있지 않습니다. + OsmAnd 주차장 + OsmAnd 주차 플러그인은 OsmAnd 설정에서 설치되고 활성화 되었습니다. +