diff --git a/OsmAnd-java/.classpath b/OsmAnd-java/.classpath index 731f61c822..ad207c04e2 100644 --- a/OsmAnd-java/.classpath +++ b/OsmAnd-java/.classpath @@ -1,6 +1,7 @@ + @@ -11,5 +12,8 @@ + + + diff --git a/OsmAnd-java/build.xml b/OsmAnd-java/build.xml index 2af488526d..3851c79f4c 100644 --- a/OsmAnd-java/build.xml +++ b/OsmAnd-java/build.xml @@ -10,6 +10,11 @@ + + + + + @@ -18,6 +23,18 @@ + + + + + + + + + + + + @@ -27,6 +44,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -62,7 +106,7 @@ - + @@ -83,14 +127,14 @@ - + - + @@ -111,6 +155,9 @@ + + + diff --git a/OsmAnd-java/test-libs/gson-2.6.2.jar b/OsmAnd-java/test-libs/gson-2.6.2.jar new file mode 100644 index 0000000000..9d78626d85 Binary files /dev/null and b/OsmAnd-java/test-libs/gson-2.6.2.jar differ diff --git a/OsmAnd-java/test-libs/hamcrest-core-1.3.jar b/OsmAnd-java/test-libs/hamcrest-core-1.3.jar new file mode 100644 index 0000000000..9d5fe16e3d Binary files /dev/null and b/OsmAnd-java/test-libs/hamcrest-core-1.3.jar differ diff --git a/OsmAnd-java/test-libs/junit-4.12.jar b/OsmAnd-java/test-libs/junit-4.12.jar new file mode 100644 index 0000000000..3a7fc266c3 Binary files /dev/null and b/OsmAnd-java/test-libs/junit-4.12.jar differ diff --git a/OsmAnd-java/test/java/net/osmand/router/RouteResultPreparationTest.java b/OsmAnd-java/test/java/net/osmand/router/RouteResultPreparationTest.java new file mode 100644 index 0000000000..d56cc69f4b --- /dev/null +++ b/OsmAnd-java/test/java/net/osmand/router/RouteResultPreparationTest.java @@ -0,0 +1,146 @@ +package net.osmand.router; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.osmand.PlatformUtil; +import net.osmand.binary.BinaryMapIndexReader; +import net.osmand.data.LatLon; +import org.apache.commons.logging.Log; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.*; +import java.util.*; + +/** + * Created by yurkiss on 04.03.16. + */ + +@RunWith(Parameterized.class) +public class RouteResultPreparationTest { + + private static RoutePlannerFrontEnd fe; + private static RoutingContext ctx; + + private String testName; + private LatLon startPoint; + private LatLon endPoint; + private Map expectedResults; + + private Log log = PlatformUtil.getLog(RouteResultPreparationTest.class); + + public RouteResultPreparationTest(String testName, LatLon startPoint, LatLon endPoint, Map expectedResults) { + this.testName = testName; + this.startPoint = startPoint; + this.endPoint = endPoint; + this.expectedResults = expectedResults; + } + + @BeforeClass + public static void setUp() throws Exception { + String fileName = "../../resources/Turn_lanes_test.obf"; + + File fl = new File(fileName); + + RandomAccessFile raf = new RandomAccessFile(fl, "r"); + + fe = new RoutePlannerFrontEnd(false); + RoutingConfiguration.Builder builder = RoutingConfiguration.getDefault(); + Map params = new LinkedHashMap(); + params.put("car", "true"); + params.put("short_way", "true"); + RoutingConfiguration config = builder.build("car", RoutingConfiguration.DEFAULT_MEMORY_LIMIT * 3, params); + BinaryMapIndexReader[] binaryMapIndexReaders = {new BinaryMapIndexReader(raf, fl)}; + ctx = fe.buildRoutingContext(config, null, binaryMapIndexReaders, + RoutePlannerFrontEnd.RouteCalculationMode.NORMAL); + ctx.leftSideNavigation = false; + RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true; + + } + + @Parameterized.Parameters(name = "{index}: {0}") + public static Collection data() throws IOException { + + InputStream inputStream = RouteResultPreparationTest.class.getResourceAsStream("test_routes.json"); + Reader reader = new InputStreamReader(inputStream); + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + TestEntry[] testEntries = gson.fromJson(reader, TestEntry[].class); + ArrayList twoDArray = new ArrayList(); + for (int i = 0; i < testEntries.length; ++i) { + Object[] arr = new Object[]{ + testEntries[i].getTestName(), + testEntries[i].getStartPoint(), + testEntries[i].getEndPoint(), + testEntries[i].getExpectedResults() + }; + twoDArray.add(arr); + } + reader.close(); + return twoDArray; + + } + + @Test + public void testLanes() throws Exception { + + List routeSegments = fe.searchRoute(ctx, startPoint, endPoint, null); + + int prevSegment = -1; + for (int i = 0; i <= routeSegments.size(); i++) { + if (i == routeSegments.size() || routeSegments.get(i).getTurnType() != null) { + if (prevSegment >= 0) { + String lanes = getLanesString(routeSegments.get(prevSegment)); + String name = routeSegments.get(prevSegment).getDescription(); + + long segmentId = routeSegments.get(prevSegment).getObject().getId(); + String expectedResult = expectedResults.get(segmentId); + if (expectedResult != null) { + Assert.assertEquals("Segment " + segmentId, expectedResult, lanes); + } else { + //TODO: action if needed when expectedResults is null + } + + System.out.println("segmentId: " + segmentId + " description: " + name); + + } + prevSegment = i; + } + } + + } + + + String getLanesString(RouteSegmentResult segment) { + String turn = segment.getTurnType().toString(); + final int[] lns = segment.getTurnType().getLanes(); + if (lns != null) { + String s = ""; + for (int h = 0; h < lns.length; h++) { + if (h > 0) { + s += ", "; + } + if (lns[h] % 2 == 1) { + s += "+"; + } + int pt = TurnType.getPrimaryTurn(lns[h]); + if (pt == 0) { + pt = 1; + } + s += TurnType.valueOf(pt, false).toXmlString(); + int st = TurnType.getSecondaryTurn(lns[h]); + if (st != 0) { + s += ";" + TurnType.valueOf(st, false).toXmlString(); + } + + } + s += ""; + turn += s; + return s; + } + return null; + } + +} diff --git a/OsmAnd-java/test/java/net/osmand/router/TestEntry.java b/OsmAnd-java/test/java/net/osmand/router/TestEntry.java new file mode 100644 index 0000000000..71a07800c2 --- /dev/null +++ b/OsmAnd-java/test/java/net/osmand/router/TestEntry.java @@ -0,0 +1,51 @@ +package net.osmand.router; + +import net.osmand.data.LatLon; + +import java.util.Map; + +/** + * Created by User on 07.03.2016. + */ +public class TestEntry { + + private String testName; + private LatLon startPoint; + private LatLon endPoint; + private Map expectedResults; + + public LatLon getStartPoint() { + return startPoint; + } + + public void setStartPoint(LatLon startPoint) { + this.startPoint = startPoint; + } + + public LatLon getEndPoint() { + return endPoint; + } + + public void setEndPoint(LatLon endPoint) { + this.endPoint = endPoint; + } + + public Map getExpectedResults() { + return expectedResults; + } + + public void setExpectedResults(Map expectedResults) { + this.expectedResults = expectedResults; + } + + public String getTestName() { + return testName; + } + + public TestEntry(String testName, LatLon startPoint, LatLon endPoint, Map expectedResults) { + this.testName = testName; + this.startPoint = startPoint; + this.endPoint = endPoint; + this.expectedResults = expectedResults; + } +} diff --git a/OsmAnd-java/test/java/net/osmand/router/test_routes.json b/OsmAnd-java/test/java/net/osmand/router/test_routes.json new file mode 100644 index 0000000000..5f440230f4 --- /dev/null +++ b/OsmAnd-java/test/java/net/osmand/router/test_routes.json @@ -0,0 +1,34 @@ +[ + { + "testName": "Amstelveenseweg", + "startPoint": { + "longitude": 35.51630312204361, + "latitude": 45.6971206184178 + }, + "endPoint": { + "longitude": 35.51303619146347, + "latitude": 45.6952846638807 + }, + "expectedResults": { + "-94361": "TL, TL, TL, C, TR, TR", + "-96062": "+TL, +TL, +TL, +C, TR, TR", + "-96063": "+TL, +TL, +TL, +C, TR, TR" + } + }, + { + "testName": "Amstelveenseweg2", + "startPoint": { + "longitude": 35.51630312204361, + "latitude": 45.6971206184178 + }, + "endPoint": { + "longitude": 35.51303619146347, + "latitude": 45.6952846638807 + }, + "expectedResults": { + "-96061": "+TL, +TL, +TL, +C, TR, TR", + "-96062": "+TL, +TL, +TL, C, TR, TR", + "-96063": "+TL, +TL, +TL, +C, TR, TR" + } + } +] diff --git a/OsmAnd/res/values-bg/strings.xml b/OsmAnd/res/values-bg/strings.xml index dc1c2d47de..e60b98ab1e 100644 --- a/OsmAnd/res/values-bg/strings.xml +++ b/OsmAnd/res/values-bg/strings.xml @@ -2118,4 +2118,9 @@ Пълен доклад OpenStreetMap потребителско име и парола Името на файла съдържа неправилен символ - +Понастоящем, избраната от Вас папка за съхранение е само за четене. Временно папката за съхранение е прехвърлена във вътрешната памет на устройството. Моля, изберете валидна папка за запис. + Част от вашето дарение ще бъде изпратено до други потребители на OSM, които са допринесли за картата в този район + Този абонамент позволява актуализиране на всички карти на всеки час. Голяма част от прихода отива за общността на OSM, за потребителите които са допринесли за картата. В случай че харесвате OsmAnd и OSM и искате да помогнете, това е перфектният начин да го сторите. + + Показване на прозрачна лента + diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 65994096e3..c274628acd 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -1307,8 +1307,7 @@ Skrýt lesy a křoviny Zobrazit povrch cesty Prosím čtěte před vytvářením skupiny! - " - Všechny vytvořené skupiny jsou veřejné! Pokud chcete být anonymní, připojte zařízení přímo přes ID.\n - Soukromé skupiny jsou omezené na 8 lidí. -\n - V případě neaktivity nebo aktivity pouze jedné osoby v průběhu dvou týdnů, bude skupina zrušena.\n - Můžete omezit vstup do skupiny pozvánkami, ale pro ovládání skupiny musíte použít administrátorskou konzoli.\n - Pokud potřebujete vytvořit skupinu s jinými podmínkami prosím kontaktujte http://osmo.mobi" + " - Vyplňte jméno a popis skupiny při vytvoření\n- From the application group are created only with Simple type, read more on the website https://osmo.mobi/g/new\n- Skupiny můžete spravovat přes webové stránky, umísťování tras a bodů je k dispozici všem\n- Nepodporujeme použití skupiny pouze jedním uživatelem, pokud to není POI skupina\n- Soukromé skupiny jsou omezené na 8 lidí.\n- Detailní pravidla a podmínky jsou vždy na stránkách OsMo.mobi\n- Pokud potřebujete zvláštní podmínky, prosím kontaktujte podporu: osmo.mobi@gmail.com " Chyba při autorizaci OsMo: %1$s.\n Služba může být dočasně nedostupná nebo vám vypršela registrace. \n Chcete pokračovat v nové registraci? Autorizace selhala @@ -1343,7 +1342,7 @@ Pokračování v navigaci Pozvat… Chcete opustit skupinu %1$s? - Prosím určete id + Prosím určete ID Barvy budov podle typu Svahilština (Kiswahili) Hebrejština @@ -1407,8 +1406,8 @@ Tolerance překročení rychlosti Zvolte toleranci překročení povolené rychlosti, po které uslyšíte hlasové varování. Zařízení nenalezeno - Služba OsMo není k dispozici:\n- zkontrolujte připojení;\n- zkontrolujte nastavení;\n- podívejte se na náš Twitter: https://twitter.com/OsMomobi - Anonymní uživatel nemůže:\n- vytvářet skupiny;\n- synchronizovat skupiny a zařízení se serverem;\n- spravovat soukromé skupiny a zařízení. + Nelze se připojit k serveru OsMo:\n- zkontrolujte své internetové připojení;\n- zkontrolujte nastavení;\n- podívejte se na náš Twitter: https://twitter.com/OsMomobi + Anonymní uživatel nemůže:\n- vytvářet skupiny;\n- synchronizovat skupiny a zařízení se serverem;\n- spravovat skupiny a zařízení v osobním ovládacím panelu na webových stránkách. Anonymní uživatel Přihlášen jako %1$s Detaily @@ -1929,7 +1928,7 @@ Najít parkování Stav Uložit změny - Číst více + Více... Vyberte mapovou značku Ostatní značky Nahrát anonymně @@ -1989,4 +1988,5 @@ Je doporučeno vypnout zobrazování polygonů. Zobrazit trasy pro horská kola Nyní aplikace umožňuje zapisovat na externí úložiště. Je potřeba provést ruční restart aplikace. - + Název souboru obsahuje nepovolené znaky + diff --git a/OsmAnd/res/values-da/phrases.xml b/OsmAnd/res/values-da/phrases.xml index 8eb98e954b..b05f16026d 100644 --- a/OsmAnd/res/values-da/phrases.xml +++ b/OsmAnd/res/values-da/phrases.xml @@ -2715,4 +2715,38 @@ Støvsuger Fri flyvning (sport) - +Cykel reparation stander + +Vandhane + +Knapbetjent: ja + Knapbetjent: nej + +Paragliding: ja + Paragliding: nej + Hanggliding: ja + Hanggliding: nej + Frit flyvested orientering: S + Frit flyvested orientering: SV + Frit flyvested orientering: V + Frit flyvested orientering: NV + Frit flyvested orientering: N + Frit flyvested orientering: NØ + Frit flyvested orientering: Ø + Frit flyvested orientering: SØ + Ingen flyvetid (fri flyvning) + Gæsteretningslinjer for fri flyvning: ja + Gæsteretningslinjer for fri flyvning: nej + + Solarium + +Fri flyvning sted: start + Fri flyvning sted: landing + Fri flyvning sted: toplanding + Fri flyvning sted: trækanordning + "Fri flyvning sted: træning" + Fri flyvning funktionær: ja + Fri flyvning funktionær: nej + Fri flyvning fastvinge: ja + Fri flyvning fastvinge: nej + diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index bbbe01335d..aa1eadbf38 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -1521,7 +1521,7 @@ OsMo log ind mislykkedes Læs dette før oprettelse af en gruppe! Tilslut med invitation - " - Alle grupper der oprettes er offentlige! Hvis de skal være anonyme, tilsluttes enheder direkte via sporings-id\'er.\n - Private grupper er begrænset til 8 personer\n - I tilfælde af inaktivitet eller aktivitet af kun 1 person i 2 uger, vil gruppen blive slettet.\n - Man kan begrænse adgangen til gruppen, til kun med invitation, men for at kontrollere gruppen skal man bruge administrationskonsollen.\n - Hvis der er brug for at oprette en gruppe, men med andre betingelser, kontakt http://osmo.mobi" + " - Oprettelse af en gruppe angiv et navn og udfyld beskrivelsen\n- Fra programmet kan kun oprettes en gruppe af simpel type, læs mere på hjemmesiden https://osmo.mobi/g/new\n- Via en hjemmeside kan administreres en gruppe, til at placere spor og punkter til rådighed for alle\n- Understøtter ikke brugen af en gruppe for kun én bruger, hvis dette ikke er IP-gruppen\n- Private grupper er begrænset til 8 personer\n- Detaljerede vilkår kan altid ses på hjemmesiden OsMo.mobi\n- Brug for særlige vilkår - kontakt support: osmo.mobi@gmail.com " Autorisation fejlede "OsMo autorisation fejl: %1$s.\nDet kan være at tjenesten midlertidig er nede eller registreringen er ududløbet. Fortsæt med en ny registrering?" Skjul bygninger @@ -2323,7 +2323,7 @@ Genberegn ruten Topbjælke Delt hukommelse - Den aktuelt valgte lagerpladsmappe til data er skrivebeskyttet. Lagermappe blev midlertidigt skifte til Intern hukommelse. Vælg en gyldig lagerpladsmappe. + Den aktuelt valgte mappe til data er skrivebeskyttet. Mappe blev midlertidigt skifte til Intern hukommelse. Vælg en gyldig mappe. Undgå vej Afslut navigation Flyt op @@ -2333,5 +2333,5 @@ OpenStreetMap brugernavn og adgangskode Nu har programmet lov til at skrive til ekstern lager. Manuel genstart er påkrævet. Rapport - Filnavnet indeholder ulovlige tegn + Filnavnet indeholder ikke tilladte tegn diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 0d1bd6c571..732caf6ea8 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1551,7 +1551,7 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su OsMo-Dienst ist nicht verfügbar:\n- bitte Verbindung prüfen;\n- bitte Einstellungen prüfen;\n- ggf. Meldung auf Twitter: https://twitter.com/OsMomobi Anonymer Benutzer Angemeldet als %1$s - Anonyme Benutzer können nicht:\n- Gruppen bilden;\n- Gruppen und Geräte mit dem Server synchronisieren;\n- Gruppen und Geräte im Privatbereich verwalten. + Anonyme Benutzer können keine:\n- Gruppen bilden;\n- Gruppen und Geräte mit dem Server synchronisieren;\n- Gruppen und Geräte im Privatbereich verwalten. Routen Details ÖPNV-Linien @@ -2108,7 +2108,7 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su Abonnementeinstellungen Kaufen Sie bitte zuerst ein OSM Live Abonnement - Teile Ihrer Spende werden am OSM-Mitwirkende weitergegeben, welche diese Region bearbeiten. + Teile Ihrer Spende werden an OSM-Mitwirkende weitergegeben, welche diese Region bearbeiten Dieses Abonnement schaltet stündliche Updates für die gesamten weltweiten Karten frei. Ein Großteil dieser Einnahmen geht zurück an die OSM-Gemeinschaft, eine Auszahlung erfolgt je nach Anzahl der Beiträge zu den OSM-Daten. Falls Sie OsmAnd mögen und das Projekt OpenStreetMap unterstützen wollen, so ist dies dafür eine perfekte Möglichkeit. Obere Leiste @@ -2116,7 +2116,7 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su Straßen vermeiden Der momentan gewählte Speicherort ist schreibgeschützt. Es wurde vorübergehend zum internen Speicher gewechselt. Bitte einen gültigen Speicherort wählen. Gemeinsamer Speicher - " • OSM Live. Unterstütze Karten Mitwirkende und Entwickler und bekomme stündliche Karten Aktualisierungen.\n\n • Karten Markierungen. Ein neuer Weg um schnell ausgewählte Plätze auf der Karte auszuwählen.\n\n • Detailliertere OSM Karten mit länderspezifischen Straßenschildern und einer Menge weitere Funktionalitäten.\n\n • Verbessertes Aussehen und Gefühl der Routen Vorbereitung.\n\n • Viele Verbesserungen der Karten Kontextmenüs, wie beispielsweise kontextabhängige Adresssuche. + " • OSM Live. Unterstütze Karten-Mitwirkende und Entwickler und erhalte stündliche Karten Aktualisierungen.\n\n • Karten Markierungen. Ein neuer Weg um schnell ausgewählte Plätze auf der Karte auszuwählen.\n\n • Detailliertere OSM Karten mit länderspezifischen Straßenschildern und einer Menge weitere Funktionalitäten.\n\n • Verbessertes Aussehen und Gefühl der Routen Vorbereitung.\n\n • Viele Verbesserungen der Karten Kontextmenüs, wie beispielsweise kontextabhängige Adresssuche. \n\n und mehr… " Vollständiger Report OpenStreetMap Zugang und Passwort @@ -2126,4 +2126,5 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su Die Anwendung darf nun auf den externen Speicher schreiben. Ein manueller Neustart der Anwendung ist nötig. Hoch bewegen Runter bewegen - + Datenname beinhaltet nicht erlaubt Zeichen + diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index f60d0cc2d3..e6883d379f 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -17,7 +17,7 @@ Bonvolu entajpi korektan retadreson Bonvolu entajpi Publikan Nomon Dankon al ci por aboni aŭtomatajn ĝisdatigojn! - Parton de viaj donacioj oni sendos al OSM-uzantoj kiuj sendas ŝanĝojn al mapoj en tiu regiono + Parton de viaj donacoj oni sendos al OSM-uzantoj kiuj sendas ŝanĝojn al mapoj en tiu regiono Abonaj agordoj Bonvolu aĉeti abonon al OSM Live antaŭe @@ -65,7 +65,7 @@ Ĉina (simpligita) Ĉina (tradicia) Volapuko - OsmAnd Mapoj kaj Navigado + OsmAnd Mapoj k Navigado Inversa ordigo Anstataŭigi komencpunkton per finpunkto Kaŝi Interesejajn piktogramojn @@ -310,7 +310,7 @@ Malaktiva Kolorigi laŭ speco de kurso Kolorigi laŭ OSMC - Kunhavigi mian pozicion + Transsendi mian pozicion Elsaluti Kaŝi numerojn de domoj Ĉu vi ankaŭ volas kopii ĝiajn dutumdosierojn al la nova loko? @@ -370,7 +370,7 @@ Elŝuti Elŝutanta Fermi - Finigi + Forlasi Montri Montri ĉiujn Mapo @@ -416,4 +416,172 @@ Ŝanĝospurila ID Konekti Grupoj OsMo + Aŭtomate komencas registrigi ekskurson kaj sendas poziciojn dum starto de aplikaĵo + Aŭtomate eki ekskurs-registrilon + Ŝanĝospurila ID + Alklaku por vidi identigilon de ŝanĝospurilo + Kaŝnomo + OpenStreetMap Observado + "Tiu ĉi kromprogramo parte liveras eblecojn de la OpenStreetMap Observado, rigardu https://osmo.mobi\n\nVi povas spuri ĉiujn aparatojn de partoprenanta grupo realtempe. Ankaŭ vi povas vidi interesejojn kaj kursojn alŝutitajn al la grupo al kiu vi apartenas. " + Nun la aplikaĵo estas permesita por skribi en ekstera memorejo. Permana restarto de aplikaĵo nepras. + Plena raporto + Uzantnomo kaj pasvorto al OpenStreetMap + Datum-konservada dosierujo + Filtri laŭ nomo + Malfermi + Entajpu por serĉi ĉie + A-GPS informoj + OSM-mapiga helpilo + Administri + Lasta elŝuto de A-GPS datumoj: %1$s + En multaj landoj (Germanujo, Francujo, Italujo, kaj aliaj) uzado de sciigoj pri rapid-kontroloj estas kontraŭleĝaj. Aŭtoroj de OsmAnd ne responsos se vi rompos leĝon. Bonvolu elekti \"Jes\" nur tiam kiam vi havas rajton uzi tiu ĉi funkcio. + Por korekte prezenti viajn trafiksignojn kaj regulojn, bonvolu elekti vian trafikan regionon: + OsmAnd ebligas uzi tutmondajn mapojn kaj navigadon eksterrete! + Nuna kurso + OSM-aj ŝanĝoj aldonitaj al loka ŝanĝaro + Marki por forigi + Grupa nomo devas enhavi almenaŭ 3 signojn! + Ĉu vi certe volas forigi %1$d notojn? + Ĉu vi certe volas alŝuti %1$d ŝanĝojn al OSM? + Ĉu vi volas vakigi la historion? + Eki navigadon turnon post turno post… + Eki + Difinas tempon de montrado de la kurs-plana ekrano + posttempa + Krei + Modifi + Forigi + OSM-aj redaktoj + Parkuma tempo limigita ĝis + restas + Viaj redaktoj + Viziti poste + Viziti antaŭe + Simuli vian pozicion + Plata listo + Lat %1$s\nLon %2$s + Oftaj demandoj, lastaj ŝanĝoj, kaj aliaj + Ne uzi + elektitaj + Nenia + Konservi kiel GPX-kurso + Pli agadoj + Ne montri plue + Memori mian elekton + Aktualigi + Elŝutado sukcesis + En/eliga eraro okazis + Neatendita eraro okazis + Agado {0} + Montri en mapo + Maletendi + Aldoni al ŝatataj + Mia pozicio + Miaj ŝatataj + Aktuale registranta kurso + Punktoj de kurso + Segmentoj de kurso + Punktoj de kurso + Enretaj mapoj + Renomado malsukcesis. + tagoj antaŭ + Reen mapen + Kunhavigi noton + Pozicio:\nLat %1$s\nLon %2$s + Montri + Notoj + Enreta mapo + Nur vojoj + Skitrakoj + "Libera %1$s " + GPS-a stato + OsmAnd+ Mapoj k Navigado + Mezurilo + "Per tiu ĉi kromprogramo vi povas atingi multajn enretajn (ankaŭ nomitaj kiel kahelaj aŭ rastrumaj) mapojn, ekzemple: antaŭgeneritaj OpenStreetMap kaheloj (kiel Mapnik), sputnik-fotoj kaj mapoj por specialaj uzoj: veteraj, klimataj, tersciencaj mapoj, tavoloj de nivel-ombrumo, ktp.\n\nĈiuj de tiuj mapoj oni eblas uzi kiel ĉefa (baza) mapo por OsmAnd, aŭ kiel supra aŭ malsupra tavolo por alia bazmapo (ekz. por norma OsmAnd-a eksterreta mapo). Por igi malsupran tavolon de mapo pli klaran, kelkaj elementoj de vektoraj OSM-aj mapoj oni eblas facile kaŝi uzante \'Agordi mapon\' menuon.\n\nKahelajn mapojn oni povas elŝuti senpere de interreto, aŭ prepari por eksterreta uzado (kaj permane kopii al OSM-a datum-dosierujo) kiel SQLite-a datumbazo kiu povas esti farita uzante diversajn eksterajn ilojn por prepari mapojn. " + Alirebleco + Aparata memoro + Redakti grupon + Parkumejo + Skitrakta prepar-speco + Por montri skitraktajn mapojn, oni povas elŝuti specialan eksterretan mapon + Por montri ŝipveturadajn mapojn, oni povas elŝuti specialan eksterretan mapon + FORIGI LA MARKON + Versioj + Elŝutas antaŭ-alfajn versiojn + Stratlumigado + Prokurilo + Agordu prokurilan servilon (ang. proxy server) + Punktoj + Ĉu eki navigadon laŭlonge de vojo? + Vi povas vidi alternativan kurson per elekti vojojn evitindajn + Pasejoj zebrostriaj + Voja montrmaniero + Kiamaniere montri vojojn + Defaŭlta + Defaŭlta + Germana voja maparo + Kontrastegaj vojoj + Traknivela pasejo + Zebrostria pasejo + Montri traknivelajn pasejojn + Montri zebrostriajn pasejojn + Usona voja maparo + Sen v1.9 kursaj reguloj + Ne uzas regulojn por difini vojojn enkondukitajn je v1.9 + Ĉu vi volas elŝuti eksterretajn mapojn? + Vi elŝutis %1$s mapojn + Elŝuti novan mapon + Administri + Haltejoj + + Zono + Ordinato + Absciso + Ĉiuj + Lokaj + Elŝutado ne eblas, bonvolu kontroli vian retkonekton. + Registrado de kursoj + "Tiu ĉi kromprogramo ebligas al vi registri kaj konservi viajn kursojn per permana elektado de GPX-registrada fenestraĵo sur la mapekrano, aŭ ankaŭ aŭtomate registri ĉiujn viajn navigadajn kursojn al GPX-dosiero.\n\nRegistritaj kursoj povas esti kunhavigitaj kun viaj amikoj aŭ esti uzita por kontribui la OSM-on. Atletoj povas uzi registritajn kursojn por monitori siajn ekzercojn. Kelkaj bazaj ecoj oni povas analizi senpere per OsmAnd, kiel: tempoj de ĉirkaŭoj, muzumaj rapidecoj, ktp, kaj kursoj oni povas poste analizi uzante specialajn eksterajn programojn. " + Uzi OpenGL-bildigon + Uzas aparatan plirapidigan OpenGL-bildigon (povas ne funkcii je iuj aparatoj) + Ne trovis ĉirkaŭvojon + Ĉefekrano + Ĝisdatigoj disponeblaj por %1$s mapoj + Serĉi + Koordinatoj + Busaj, trolebusaj, pramaj kursoj + Tramaj kaj vagonaraj kursoj + Metroaj kursoj + %1$s bezonas tiu ĉi permeson por malŝalti ekranon por energiŝparan funkcion. + Ŝalti ekranon + Ŝaltas aparatan ekranon dum proksimigado al turno + Eviti vojojn… + Tramaj kursoj + Vagonaraj kursoj + Kunhavigi taksiajn kursojn + Trolebusaj kursoj + Busaj kursoj + Kaŝi + Kursoj + Detaloj + Transporto + Aliaj mapecoj + Aliaj elementoj + Bildigaj ecoj + Stata breto + Dekstra panelo + Maldekstra panelo + Agordi mapon + En proksime de + Ne trovis aparaton + Anonima uzanto + Ensalutita kiel %1$s + Tolerado de rapidlimo + Rapidlimo + Proksimaj ŝatataj + Elektas rango de tolerado de rapidlimo, supre kiu vi ricevos sonajn avertojn + La nomo de ŝatata punkto estas ŝanĝita al %1$s por plifaciligi korektan konservadon de tekstoĉeno kun miensimboloj al dosiero. + Presi kurson + Duplikata nomo + Difinita nomo de ŝatata punkto estas jam uzata, ĝi estas ŝanĝita al %1$s por eviti duplikatadon. diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml index a4c0edacad..aa39382336 100644 --- a/OsmAnd/res/values-es-rAR/phrases.xml +++ b/OsmAnd/res/values-es-rAR/phrases.xml @@ -2686,4 +2686,37 @@ Aspiradoras Vuelo libre (deporte) +Estación de reparación para bicicletas + Canilla pública + +Activado por botón + No activado por botón + +Sitio de vuelo libre: Despegue + Sitio de vuelo libre: Aterrizaje + Sitio de vuelo libre: Aterrizaje en la cima + Sitio de vuelo libre: Remolque + Sitio de capacitación en vuelo libre + Sitio permitido para vuelo libre + Sitio no permitido para vuelo libre + Parapente: Sí + Parapente: No + Ala delta: Sí + Ala delta: No + Ala delta rígido: Sí + Ala delta rígido: No + Orientación del sitio en vuelo libre: N + Orientación del sitio en vuelo libre: NE + Orientación del sitio en vuelo libre: E + Orientación del sitio en vuelo libre: SE + Orientación del sitio en vuelo libre: S + Orientación del sitio en vuelo libre: SO + Orientación del sitio en vuelo libre: O + Orientación del sitio en vuelo libre: NO + Sin horario de vuelo (vuelo libre) + Con directrices de invitado en vuelo libre + Sin directrices de invitado en vuelo libre + + Centro de bronceado (solarium) + diff --git a/OsmAnd/res/values-es-rUS/phrases.xml b/OsmAnd/res/values-es-rUS/phrases.xml index 0887da8aad..fb3fcf8a0d 100644 --- a/OsmAnd/res/values-es-rUS/phrases.xml +++ b/OsmAnd/res/values-es-rUS/phrases.xml @@ -2449,4 +2449,37 @@ Aspiradoras Vuelo libre (deporte) +Estación de reparación para bicicletas + Grifo público + +Activado por botón + No activado por botón + +Sitio de despegue para vuelo libre + Sitio de aterrizaje para vuelo libre + Sitio de aterrizaje en la cima para vuelo libre + Sitio de vuelo libre: Remolque + Sitio de capacitación en vuelo libre + Sitio permitido para vuelo libre + Sitio no permitido para vuelo libre + Parapente: Sí + Parapente: No + Ala delta: Sí + Ala delta: No + Ala delta rígido: Sí + Ala delta rígido: No + Orientación del sitio en vuelo libre: N + Orientación del sitio en vuelo libre: NE + Orientación del sitio en vuelo libre: E + Orientación del sitio en vuelo libre: SE + Orientación del sitio en vuelo libre: S + Orientación del sitio en vuelo libre: SO + Orientación del sitio en vuelo libre: O + Orientación del sitio en vuelo libre: NO + Sin horario de vuelo (vuelo libre) + Con directrices de invitado en vuelo libre + Sin directrices de invitado en vuelo libre + + Centro de bronceado (solarium) + diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 1a8f398e26..ad790ee17a 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1300,7 +1300,7 @@ ID univoco del dispositivo Configura le impostazioni di monitoraggio e imposta il canale di monitoraggio personale "Questo componente aggiuntivo fornisce le funzionalità del cosiddetto monitoraggio avanzato in diretta OsMo, vedi http://osmo.mobi.\n\nPuoi tracciare in tempo reale tutti i dispositivi di un gruppo di partecipanti e comunicare con loro. Viene fornito con varie opzioni di monitoraggio della sessione in corso o permanentemente.\n\nI gruppi anonimi possono essere creati autonomamente per uno specifico numero di giorni e sono limitati ad alcune funzioni, es. non ci sono controllo remoto e l\'amministratore del gruppo. Gruppi con tutte le funzionalità possono essere creati dal sito e solo gli utenti registrati possono accedervi. " - OsMo (monitoraggio OSM) + Monitoraggio OpenStreetMap OsMO Solo manualmente (tap sulla freccia) Annuncia nuovamente a intervalli regolari le indicazioni di navigazione @@ -1314,10 +1314,10 @@ Preferiti condivisi tramite OsmAnd Calcola il percorso tra i punti - Avvia automaticamente la registrazione della sessione e invia la localizzazione dopo l\'avvio dell\'applicazione - Avvia automaticamente la sessione di tracciamento - ID tracciamento personale - Clicca per visualizzare o condividere l\'id della tracciabilità. Usando l\'id della tracciabilità i dispositivi connessi saranno in grado di seguire tutti i movimenti di questo dispositivo! Per disconnettersi seleziona l\'opzione Rigenera l\'id. + Avvia automaticamente il viaggio e invia la localizzazione dopo l\'avvio dell\'applicazione + Avvia automaticamente il viaggio + ID tracciamento + Clicca per visualizzare l\'ID della tracciabilità. Token della sessione: %1$s In attesa di autorizzazione… Localizzazioni inviate %1$d (nel buffer %2$d) @@ -1328,12 +1328,12 @@ minuti fa secondi fa Nome utente - Id tracciabilità + ID tracciabilità Collegamento con il dispositivo Dispositivi collegati - Gruppi/Dispositivi OsMo + Gruppi OsMo Informazioni Gruppo OsMo Per collegarsi al gruppo %2$s, specificare l\'id del gruppo (%1$s) o cliccare %3$s. @@ -1350,10 +1350,10 @@ Scade fra Descrizione Regole - Id gruppo + ID gruppo Nome gruppo Collegamento con il gruppo - Collega a + Entra Crea gruppo Operazione del server OsMo fallita Monitoraggio OpenStreetMap @@ -1382,7 +1382,7 @@ Centra nello schermo Imposta come obiettivo mobile Nome registrato - Mio nickname + Nick Utente @@ -1485,7 +1485,7 @@ Percorsi metró Invita… Vuoi abbandonare il gruppo %1$s? - Per favore specifica l\'id + Per favore specifica l\'ID Prosegui la navigazione Metti in pausa la navigazione Scala escursionismo alpino (SAC) @@ -1546,8 +1546,8 @@ Tolleranza del limite di velocità Seleziona il valore di superamento del limite di velocità dal quale si desidera avere l\'avviso vocale. Dispositivo non trovato - Il servizio OsMo non è disponibile:\n- controlla la connessione;\n- controlla le impostazioni;\n- contattaci su Twitter: https://twitter.com/OsMomobi - Un utente anonimo non può:\n- creare gruppi;\n- sincronizzare con il server gruppi e dispositivi;\n- gestire gruppi e dispositivi in un ufficio privato. + Connessione al server OsMo non riuscita:\n- controlla la connessione a internet;\n- controlla le impostazioni;\n- contattaci su Twitter: https://twitter.com/OsMomobi + Un utente anonimo non può:\n- creare gruppi;\n- sincronizzare con il server gruppi e dispositivi;\n- gestire gruppi e dispositivi nel pannello di controllo sul sito. Utente anonimo Registrato come %1$s Percorsi @@ -1817,7 +1817,7 @@ Specifica l\'altezza del veicolo che deve essere permessa sui percorsi Ricalcolo percorso intelligente Ricalcola solo la prima parte del percorso per i viaggi lunghi - Condividi la mia posizione + Invia la posizione Esci Disabilitato Colorazione in base al tipo di percorso @@ -2214,4 +2214,6 @@ Evita la strada Memoria condivisa La carella di memorizzazione selezionata è in sola lettura. La cartella di memorizzazione sarà temporaneamente cambiata nella memoria interna. Per favore scegliere una cartella di destinazione valida. + Rapporto + Ora l\'applicazione ha i permessi per scrivere sulla memoria esterna. È necessario riavviare l\'applicazione. diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index d69ff4d60f..fa71c1522a 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -1477,7 +1477,7 @@ Automatisch verbinding maken OsMo service OsMo track: %1$s opgehaald. - " - Alle groepen zijn openbaar! Om anoniem te blijven moet u apparaten rechtstreeks met elkaar verbinden via hun Tracker-ID, en niet in een groep.\n- Er kunnen maximaal 8 deelnemers in een groep.\n- Als er gedurende 2 weken geen of nog maar 1 deelnemer actief is, wordt de groep verwijderd.\n- Een groep kan besloten worden gemaakt (\"alleen op uitnodiging\"). Het beheer daarvan moet op de beheerspagina gebeuren.\n- Als u een groep nodig heeft met andere voorwaarden, ga dan naar http://osmo.mobi" + " - Geef een naam en omschrijving om een groep te maken\n- Hier gemaakte groepen zijn van het type \'Simple\'; zie voor uitleg https://osmo.mobi/g/new\n- Via de website kunnen groepen beheerd worden en paden en punten beschikbaar worden gemaakt\n- Een groep is voor meerdere gebruikers, als het niet de POI-groep is\n- Er kunnen maximaal 8 deelnemers in een prive-groep\n- Gebruiksvoorwaarden zijn beschikbaar op de site osmo.mobi\n- Als u een groep nodig heeft met andere voorwaarden, neem dan contact op met support: osmo.mobi@gmail.com " Lees dit voordat u een groep maakt! Kon niet inloggen op OsMo Alleen toegang met uitnodiging @@ -1532,7 +1532,7 @@ Gebouwen kleuren per soort Uitnodiging voor… Wil je de groep %1$s verlaten? - Specificeer je tracker-id alsjeblieft + Geef tracker-ID Vroegtijdig Op tijd Laat @@ -1593,7 +1593,7 @@ Kaart instellen In de buurt van Apparaat niet gevonden - OsMo service is niet beschikbaar:\n- Controleer de verbinding;\n- Controleer de instellingen;\n- Kijk op Twitter: https://twitter.com/OsMomobi + OsMo service is niet bereikbaar:\n- Controleer de verbinding;\n- Controleer de instellingen;\n- Kijk op Twitter: https://twitter.com/OsMomobi een anonieme gebruiker kan niet:\n- een groep aanmaken;\n- groepen en apparaten synchroniseren met de server;\n- groepen en apparaten beheren in een eigen omgeving. Anonieme gebruiker Ingelogd als %1$s @@ -2243,4 +2243,5 @@ Volledig Verslag OpenStreetMap loginnaam and wachtwoord Verslag - + Bestandsnaam bevat verkeerd teken + diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index 3cd1d9aa66..6061c1bef9 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -1039,7 +1039,7 @@ Kościół Nowoapostolski Prysznic E-mail - + Fax Facebook Twitter Skype @@ -1181,4 +1181,75 @@ Biura stowarzyszenia Biuro finansowe Biskupi + Słup podtrzymujący kable wyciągu + + Maszt oświetleniowy + Teren niezagospodarowany + Stolica + Wielowyznaniowość + Szyityzm + Kościół Unicki (grecko-katolicki) + Buddyzm tybetański + Kościół Zjednoczony (Unijny) + Mennonici + Kwakrzy + Zbory Boże + Adwentyści + Kościół Nazarejczyka + Staroobrzędowcy + Serbski ortodoksyjny + Apostolski Kościół Ormiański + Holenderski Kościół Reformowany + Kościół Apostolski + Kościół Jezusa Chrystusa Świętych w Dniach Ostatnich + + Gruziński prawosławny + Rumuński prawosławny + Koptyjski + Śaktyzm + Shingon + Maronityzm + Mahajana + + Dostęp do internetu: tak + Dostęp do internetu: nie + + Telefon komórkowy + Brak wody pitnej + Całoroczny + Pora sucha + Pora deszczowa + Wózki inwalidzkie + Brak dostępu dla wózków inwalidzkich + Dostęp prywatny + Zawartość: paliwo + Zawartość: wino + Zawartość: gaz + Zawartość: biomasa + Zawartość: plony + Zawartość: piwo + Zawartość: sól + Zawartość: zboże + + Zawartość: woda + Zawartość: ropa naftowa + Nudyzm: dozwolony + + Stoiska + Budynek specjalny + Zadaszenie + Słupek + Krzewy oliwne + Jabłonie + Miejski + Schronisko + Brak pompy + Pompa + + Charakterystyka wody: mineralna + Charakterystyka wody: mętna + Charakterystyka wody: siarczkowa + + Odkurzacz + diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 7002eb176f..114ca8b68e 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -100,7 +100,7 @@ Wybierz rozmiar tekstu dla nazw na mapie Rozmiar tekstu Informacje o diagnozowaniu błędów renderowania - Wyświetlaj informacje o wydajności renderowania + Wyświetla informacje o wydajności renderowania Rozpakowywanie nowych danych… @@ -153,7 +153,7 @@ Język interfejsu - Dalej + Naprzód Wstecz Zmienia jednostki długości i prędkości Jednostki miar @@ -236,7 +236,7 @@ Zdefiniuj kryterium przełączania trybu dzień/noc Tryb dzienny/nocny Pobrać {0} plik(ów) ({1} MB)? - {0} element(ów) zaznaczono + zaznaczono {0} element(ów) Pobrane Zaznacz wszystko @@ -249,9 +249,9 @@ Działanie aplikacji, gdy ekran jest wygaszony Najszybsza trasa "Wyznacza najszybszą trasę zamiast najkrótszej " - Na poziomie {0} pobrano {1} kafelków ({2} MB) - Pobieranie mapy - Wybierz maksymalne przybliżenie do pobrania + Do pobrania {1} kafelków na poziomie {0} ({2} MB) + Pobierz mapę + Proszę wybrać maksymalne przybliżenie do pobrania Nie udało się pobrać tej mapy Rysowanie ciągłe Używaj ciągłego rysowania podczas wyświetlania zamiast rysować jeden obrazek na raz @@ -656,7 +656,7 @@ Wesprzyj prace Wyświetl linijkę - Informacja + Informacje Powróć do pozycji Pomoc @@ -785,7 +785,7 @@ Tryb rysowania Optymalizuj mapę dla Wyświetlanie od poziomu powiększenia (wymagane dane poziomicowe): - Wyświetlanie poziomic + Poziomice Zwiększ ilość detali pokazywanych na mapie Pokaż więcej detali na mapie Rondo: wybierz %1$d zjazd @@ -1067,7 +1067,7 @@ Modyfikacje OSM Więcej akcji Wybierz ulubione - Urządzenie nie jest połączone przez Wi-Fi. Czy chcesz kontynuować pobieranie używając obecnego połączenia? + Połączenie sieciowe nie jest nawiązane za pośrednictwem Wi-Fi. Kontynuować pobieranie używając obecnego połączenia? Usuń punkt docelowy Zatrzymaj nawigację Odrzuć trasę @@ -1075,8 +1075,8 @@ Inna Pozostało %1$d plików %1$d dostępnych plików do pobrania - Użyj czujnika pola magnetycznego, aby określić kierunek kompasu - Użyj czujnika magnetycznego (kompas) + Wykorzystuje czujnik pola magnetycznego zamiast czujnika orientacji, w celu określania kierunku kompasu + Używanie czujnika magnetycznego Poziomice Redukuje szumy w odczytach kompasu, ale zwiększa bezwładność Używanie filtra Kalmana @@ -1212,16 +1212,16 @@ Samolot Renderowanie Profile programu - Wybierz używane profile widoczne w aplikacji + Wybiera używane profile widoczne w programie Żeglugowy znak orientacyjny Określa tempo odtwarzania syntezowanych komunikatów głosowych Szybkość mowy - Wyłącz 2-fazowe obliczanie trasy dla nawigacji samochodowej + Wyłącza 2-etapowe wyznaczanie trasy dla nawigacji samochodowej Błąd szybkiego obliczania trasy (%s). Przełączanie na tryb powolny. - Wyłącz złożone wyznaczanie trasy + Wyłączenie złożonego wyznaczanie trasy Ustawienia nawigacji Wyznaczanie trasy Ciężarówka @@ -1381,10 +1381,10 @@ Wygasa za Opis Polityka grup - ID grupy + Identyfikator grupy Nazwa grupy Sparuj z grupą - Połącz + Dołącz Utwórz grupę Błąd działania Serwera OsMo Monitorowanie OpenStreetMap @@ -1516,7 +1516,7 @@ Kolorowy kod typów budynków Zaproś… Opuścić grupę %1$s? - Określ id + Proszę określić identyfikator Kontynuuj nawigację Wstrzymaj nawigację Skala wspinaczki alpinistycznej (SAC) @@ -1683,7 +1683,7 @@ Odwiedź później Odwiedź wcześniej Symulowanie lokalizacji - Szerokość %1$s\nDługość %2$s + Szerokość %1$s\n Długość %2$s Wyświetla najczęściej zadawane pytania, ostatnie zmiany i inne Ustawienia nawigacji Ustawienia ogólne @@ -1932,8 +1932,8 @@ Wyłączone poziomice Informacje ulubione Pobieranie - %1$d plik - Pokaż baner darmowej wersji - Nawet jeśli posiadasz płatną wersję to nadal nadal możesz zobaczyć baner darmowej wersji + Baner darmowej wersji + Wyświetla baner wersji darmowej w przypadku zainstalowania wersji płatnej KUP Proszę włączyć wtyczkę latarni morskich Proszę włączyć wtyczkę SRTM @@ -1942,7 +1942,7 @@ Pobierz Dodaj nową kategorię Nazwa kategorii - Taka nazwa kategorii już istnieje. Proszę wybrać inną. + Określona nazwa kategorii już istnieje. Proszę wybrać inną. Udostępnij położenie Wyślij %.1f MB @@ -1952,11 +1952,11 @@ %1$.1f z %2$.1f MB Kod QR Proszę wybrać kraj - Mapa %1$s została pobrana. Proszę powrócić do mapy, aby rozpocząć jej używanie. + Pobrano mapę %1$s. Proszę powrócić do mapy, aby rozpocząć jej używanie. Brak podstawowej mapy świata (pokrywającej cały glob w małych przybliżeniach) lub jest ona przestarzała. Proszę rozważyć pobranie mapy podstawowej, aby uzyskać kompletne środowisko. Pobrano mapę Powróć do mapy - Symulowania pierwszego uruchomienia programu + Zasymuluj pierwsze uruchomienie programu Czytaj dalej Co nowego w Ukrywanie proponowanych obiektów @@ -1964,7 +1964,7 @@ Prześlij Utwórz punkt orientacyjny OSM - Ustaw flagę wskazującą pierwsze uruchomienie aplikacji, utrzymuje wszystkie inne ustawienia bez zmian + Ustala flagę wskazującą pierwsze uruchomienie programu zachowując wszystkie pozostałe ustawienia geo: Pobrać mapę samochodową, nawet jeśli pobrano już zwykłą mapę? Wyświetla ilość zużytych darmowych pobrań @@ -2109,15 +2109,15 @@ Dodaj znacznik mapy Wybierz znacznik mapy Odwróć kolejność - Aktywuj funkcję Znaczników mapy + Aktywuje funkcję znaczników mapy Usunąć wszystkie aktywne znaczniki? Wyczyścić historię znaczników mapy? Aktywne znaczniki Znaczniki mapy Znacznik mapy Zaleca się wyłączenie renderowania wielokątów. - Pokaż trasy MTB - Pokaż wielokąty + Trasy MTB + Wielokąty Znajdź parking Status Dodaj przedział czasowy @@ -2135,9 +2135,15 @@ Zasubskrybuj Teraz aplikacja może zapisywać do pamięci zewnętrznej. Wymagane jest manualne ponowne uruchomienie. Pełny raport - Suma datków + Kwota datków Liczba odbiorców Raport Omiń drogę Wyznacz ponownie trasę + Nazwa użytkownika i hasło OpenStreetMap + Ranking edytorów OSM + Proszę wprowadzić prawidłowy adres e-mail + Dziękujemy za zasubskrybowanie bieżących aktualizacji! + Ustawienia subskrypcji + Pasek przezroczystości diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index ab92a3abeb..b96a4505ee 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -2654,5 +2654,37 @@ Пылесос Свободный полёт (спорт) + Стойка для ремонта велосипедов + Водопроводный кран + + Включается кнопкой: да + Включается кнопкой: нет + + Свободный полёт: подъём + Свободный полёт: посадка + Свободный полёт: посадка на вершине + Свободный полёт: буксировка + Свободный полёт: тренировка + Официальное место для свободного полёта: да + Официальное место для свободного полёта: нет + Парапланеризм: да + Парапланеризм: нет + Дельтапланеризм: да + Дельтапланеризм: нет + Дельтаплан с жестким крылом: да + Дельтаплан с жестким крылом: нет + Ориентация площадки для свободного полёта: С + Ориентация площадки для свободного полёта: СВ + Ориентация площадки для свободного полёта: В + Ориентация площадки для свободного полёта: ЮВ + Ориентация площадки для свободного полёта: Ю + Ориентация площадки для свободного полёта: ЮЗ + Ориентация площадки для свободного полёта: З + Ориентация площадки для свободного полёта: СЗ + Запрещенное для свободного полёта время + Инструктаж для свободного полёта: обязательно + Инструктаж для свободного полёта: необязательно + + Солярий diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 1627cb5c3e..f90f30a87b 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1096,8 +1096,8 @@ Использовать кратчайший путь Избегать платных дорог Избегать платных дорог - Избегать грунтовые дороги - Избегать грунтовые дороги + Избегать грунтовых дорог + Избегать грунтовых дорог Избегать паромов Избегать паромов Максимальная масса @@ -1424,7 +1424,7 @@ Нажмите на любой элемент списка для просмотра более подробной информации, нажмите и удерживайте, чтобы поместить в архив или удалить. Текущие данные на устройстве (%1$s свободно): Устройство не обнаружено Анонимный пользователь - Сервис OsMo не доступен:\n- проверьте соединение;\n- проверьте настройки;\n- проверьте наш Twitter: https://twitter.com/OsMomobi + Сервис OsMo не доступен:\n- проверьте интернет соединение;\n- проверьте настройки;\n- проверьте наш Twitter: https://twitter.com/OsMomobi Анонимному пользователю недоступно:\n- создание групп;\n- синхронизация групп и устройств с сервером;\n- управление группами и устройствами в личном кабинете. Вы вошли как %1$s Маршруты @@ -1648,7 +1648,7 @@ Напечатайте для поиска Скрыть номера домов - Избегать пересечение границы с другой страной + Избегать пересечения границы с другой страной Ограничение высоты Укажите высоту автомобиля для учёта при построении маршрута Умный перерасчет маршрута @@ -1868,7 +1868,7 @@ Редактировать точку GPX Избегать лестниц Избегать лестниц - Избегать пересечение бордюра + Избегать пересечения границы Обновлять каждые Загружать только через WiFi Обновить сейчас @@ -1898,7 +1898,7 @@ Ночь Утро Объём памяти, который может быть занят всеми видеоклипами - Продолжительность видеоклипа + Длина ролика Продолжительность каждого записанного клипа не будет больше выбранного значения Разбиение на клипы Использовать разбиение на клипы @@ -1919,8 +1919,8 @@ Не показывать мое имя в отчетах Стоимость в месяц Ежемесячный платеж - Пожалуйста, введите действительный адрес электронной почты - Благодарим вас за подписку на live обновления! + Пожалуйста, введите корректный адрес электронной почты + Благодарим вас за подписку на живые обновления! Параметры подписки Пожалуйста сначала приобретите подписку OSM Live @@ -1928,7 +1928,7 @@ Выберите маркер Другие маркеры - Добавлено анонимно + Загрузить анонимно Первый маркер Второй маркер Панель инструментов @@ -1945,7 +1945,7 @@ Сохранить изменения Адрес электронной почты Подробнее - Элемент удален + Запись удалена элементы удалены Live обновления Выберите или скачайте голосовые подсказки для вашего языка @@ -1955,7 +1955,7 @@ Количество получателей Активные Неактивные - Часть вашего пожертвования будет направляться OSM пользователям внесшим изменения в карту этого региона + Часть вашего пожертвования будет направляться пользователям OpenStreetMap внесшим изменения в карту этого региона Недостаточно места! Необходимо {3} Мб временно и {1} Мб на постоянной основе. В настоящее время доступно только {2} Мб свободного места. Вы можете загрузить вашу OSM заметку анонимно, используя свой профиль OpenStreetMap.org. Загрузить OSM заметку @@ -1968,4 +1968,11 @@ Приложение получило разрешение на запись во внешнее хранилище. Требуется перезагрузка приложения. " • OSM Live. Поддержка авторов и разработчиков карт и получение почасовых обновлений карты.\n\n• Маркеры. Новый способ для быстрого выбора мест на карте.\n\n• Более подробные OSM карты со специфическими дорожными знаками стран и с большим количеством новых функций.\n\n• Улучшен внешний вид и подготовка маршрута.\n\n• Множество улучшений в контекстном меню карты таких как поиск адреса.\n\nИ многое другое... " Отчёт + Переместить вверх + Переместить вниз + Завершить навигацию + Избегать дорог + Публичное имя + Поддерживаемый регион + Пожалуйста введите имя diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index c3d67ca0e6..fece45c749 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -239,7 +239,7 @@ "Custa estensione frunit sas funtzionalidades pro impreare sa compidada avantzada in dereta OsMo, bie http://osmo.mobi. \n\nSighi totu sos dispositivos de unu grupu in ue e comùnica cun sos àteros. Sunt disponìbiles meda impostatziones pro s’arrastamentu, pro sa sessione in cursu o permanentes. \n\nSos grupos anònimos podent èssere creados pro su nùmeru pretzisu de dies e bi sunt lìmites pro calicuna de sas funtziones, es. non b’est su controllu remotu e nemmancu s’amministradore de su grupu. Grupos cun totu sas funtzionalidades podent èssere creados in su giassu e petzi sos impitadores registrados podent atzèdere. " - OsMo (Compidada OSM) + Compidada OpenStreetMap OsMo @@ -530,7 +530,7 @@ Tzentra in s’ischermu Imposta comente obietivu mòbile Nùmene registrau - Zistru meu + Zistru Impitadore rosa @@ -559,13 +559,13 @@ Iscadidi intre Descritzione Règulas - Id de arrastamentu + ID de arrastamentu Nùmene impitadore - Id grupu + ID grupu Nùmene grupu Cullegamentu cun su dispositivu Cullegamentu cun su grupu - Cullega a + Auni·ti Crea grupu Operatzione de su server Osmo fallida Compidada OpenStreetMap @@ -575,11 +575,11 @@ minutos àchede secundos àchede Dispositivos cullegaos - Grupos/Dispositivos OsMo - Avia/Inghitza automaticamente sa registratzione de sa sessione e imbia sa localizatzione a pustis de s\'aviu de s’aplicu - Avia automaticamente sa sessione de arrastamentu - Id pessonale arrastamentu - Carca pro visualizzare o cumpartzire s’id de arrastamentu. Impreende s’id de arrastamentu sos dispositivos connessos ant a èssere capatzes de sighire totu sos movimentos de custu dispositivu! Pro ti disconnèttere ischerta s’optzione \"Torra a ingendrare\". + Grupos OsMo + Incumintza automaticamente su biàgiu e imbia sas localizatziones a pustis de s\'aviu de s’aplicatzione + Incumintza automaticamente su biàgiu + ID arrastamentu + Incarca pro bìdere s’ID de arrastamentu Token de sa sessione: %1$s Isetende pro s’autorizatzione… "Localizatziones imbiadas %1$d (in su buffer %2$d) " @@ -842,7 +842,7 @@ Edifìtzios colorados pro casta Invita… Boles essire dae su grupu %1$s? - Pro piaghere dislinda s’id + Pro piaghere dislinda s’ID Sighi cun su nàvigu Pone in pasu su nàvigu Iscala pro s’alpinismu (SAC) @@ -1541,7 +1541,7 @@ Dispositivu no agatau Impitadore anònimu Identificadu comente %1$s - Su servìtziu OsMo no est disponìbile:\n- còmpida sa connessione;\n- còmpida sas impostatziones;\n- abbista su Twitter nostru: https://twitter.com/OsMomobi + Connessione a su server OsMo non disponìbile:\n- còmpida sa connessione ìnternet tua;\n- còmpida sas impostatziones;\n- abbista su Twitter nostru: https://twitter.com/OsMomobi Un\'impitadore anònimu non podet:\n- creare grupos;\n- sincronizare grupos e dispositivos cun su server;\n- gestire grupos e dispositivos in un\'ufìtziu privadu. Minujas Cunfigura sa mapa @@ -1760,7 +1760,7 @@ Torra a calculare petzi su cantu initziale de s’àndala pro biàgios longos Disabilitadu - Cumpartzi sa positzione mea + Cumpartzi sa positzione Essi Coloratzione a segunda de sa casta de àndala Coloratzione a segunda de OSMC @@ -1896,7 +1896,7 @@ Ischerta sa categoria Issèbera s’unidade de medida de sa lestresa Medida de sa lestresa - nm + nmi Mìglios nàuticos Chilòmetros pro ora Mìglios pro ora @@ -1904,7 +1904,7 @@ Minutos pro chilòmetru Minutos pro mìgliu Mìglios nàuticos pro ora (knot) - nmh + nmi/h min/m min/km m/s @@ -2151,4 +2151,16 @@ Widgets Torra a calculare s’àndala Barra in pitzu + Como s\'aplicatzione est autorizada a iscrìere in sa memòria esterna. Pro aplicare custa modìfica, depet èssere torrada a allùere manualmente. + Moe prus in artu + Moe prus in bassu + Concrui su nàvigu + Istransi s\'istrada + Memòria cumpartzida + Raportu cumpridu + Nùmene impreadore e crae de OpenStreetMap + " • OSM Live. Suporta sos contribuidores a sa mapa e sos isvilupadores pro otènnere mapas agiornadas cada ora. +\n\n • Marcadores mapa. Una manera noa de ischertare in manera lestra logos in sa mapa.\n\n • Mapas OSM prus a sa minuda cun caraterìsticas pro sas istradas pro cada istadu e unu muntone de àteras funtzionalidades.\n\n • Megioramentu de s’aparèntzia e de s’ammaniamentu de sas àndalas. +\n\n • Medas megioramentos in su menù de sa mapa, comente sa chirca cuntestuale de sos indiritzos.\n\n e àteru… " + Sa cartella de memorizatzione ischertada est in letura ebbia. Sa cartella de memorizatzione est istada mudada pro impreare sa mamòria interna. Pro praghere issèbera una cartella de destinatzione vàlida. diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 5bb3fe1e86..099815b2e3 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -1364,17 +1364,17 @@ OsmAnd має відкриті сирці і активно розвиваєть Опис Ім’я пристрою Створити групу - Приєднатись до + Приєднатись Надіслати мої місцезнаходження годин тому хвилин тому секунд тому Під’єднані пристрої - OsMo Групи/Пристрої + OsMo Групи Автоматично запускати сесію трекера та надсилати місцезнаходження після запуску застосунку Автоматично запускати моніторинг - Персональний ID трекера - Натисніть, щоб подивитись або поділитись ID трекера. Використовуючи ID трекера, можна відстежувати пересування цього пристрою! Для відключення скористайтесь опцією Перестворити. + ID трекера + Натисніть, щоб подивитись ID трекера OsMo Server збій виконання операції OpenStreetMap Моніторинг OsMo швидкий доступ @@ -1527,7 +1527,7 @@ OsmAnd має відкриті сирці і активно розвиваєть Налаштування параметрів моніторингу та встановлення персонального каналу моніторингу OsMo "Цей втулок надає можливість сучасного онлайн моніторингу OsMo, дивіться http://osmo.mobi.\n\nВи можете відстежувати пристрої учасників з ваших групи в поточному часі та підтримувати зв’язок друг з другом. Втулок має різноманітні налаштування сесій чи постійного відстеження.\n\nАнонімні групи можуть створюватись та існувати вказану кількість днів та мати зазначені функції, ними неможливо керувати віддалено та вони не мають адміністраторів. Групи з повним набором функцій можуть бути створені на веб-сайті і тільки зареєстровані користувачі матимуть до них доступ. " - OsMo (OSM моніторинг) + OpenStreetMap моніторинг Показувати положення завжди в центрі Голос Різне @@ -1678,7 +1678,7 @@ OsmAnd має відкриті сирці і активно розвиваєть Кольорове маркування будівель за типом Запросити… Ви бажаєте вийти з групи %1$s? - Будь ласка, вкажіть id + Будь ласка, вкажіть ID Продовжити навігацію Призупинити навігацію Маршрути метро @@ -2316,4 +2316,5 @@ OsmAnd має відкриті сирці і активно розвиваєть Виберіть позначку Вивантажено анонімно Показати прозору пошукову панель + Звіт diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index 37e28cf3b8..cd7842b50a 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -2656,4 +2656,36 @@ Vacuum cleaner Free flying (sport) + Bicycle self-repair station + Water tap + Button operated: yes + Button operated: no + + Free flying site: takeoff + Free flying site: landing + Free flying site: toplanding + Free flying site: towing + Free flying site: training + Free flying official: yes + Free flying official: no + Paragliding: yes + Paragliding: no + Hanggliding: yes + Hanggliding: no + Free flying rigid: yes + Free flying rigid: no + Free flying site orientation: N + Free flying site orientation: NE + Free flying site orientation: E + Free flying site orientation: SE + Free flying site orientation: S + Free flying site orientation: SW + Free flying site orientation: W + Free flying site orientation: NW + No flight time (free flying) + Guest guidelines for free flying: yes + Guest guidelines for free flying: no + + Solarium + diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index ccabbb82dd..ab2249ce00 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -587,8 +587,6 @@ Use hardware accelerated OpenGL rendering (may not work on some devices) No bypass found Home - Use secure connection to server - Use HTTPS Updates available for %1$s maps Search for Coordinates diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 15eaaf7c2a..64c39e07e5 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -1001,9 +1001,6 @@ public class OsmandSettings { public final OsmandPreference OSMO_AUTO_CONNECT = new BooleanPreference("osmo_automatically_connect", false).makeGlobal(); - public final CommonPreference OSMO_USE_HTTPS = new BooleanPreference("osmo_use_https", - Build.VERSION.SDK_INT < 14/*Build.VERSION_CODES.ICE_CREAM_SANDWICH*/ ? false : true).makeGlobal(); - public final OsmandPreference OSMO_LAST_PING = new LongPreference("osmo_last_ping", 0).makeGlobal().cache(); public final OsmandPreference OSMO_SEND_LOCATIONS_STATE = new BooleanPreference("osmo_send_locations", false).cache().makeGlobal(); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index fc867709eb..059dd03c54 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -945,7 +945,7 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents, changeKeyguardFlags(); updateMapSettings(); mapViewTrackingUtilities.updateSettings(); - app.getRoutingHelper().setAppMode(settings.getApplicationMode()); + //app.getRoutingHelper().setAppMode(settings.getApplicationMode()); if (mapLayers.getMapInfoLayer() != null) { mapLayers.getMapInfoLayer().recreateControls(); } diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 048de69abf..7d68c04806 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -415,7 +415,7 @@ public class MapActivityActions implements DialogProvider { TargetPointsHelper targets = app.getTargetPointsHelper(); ApplicationMode mode = getRouteMode(from); - app.getSettings().APPLICATION_MODE.set(mode); + //app.getSettings().APPLICATION_MODE.set(mode); app.getRoutingHelper().setAppMode(mode); app.initVoiceCommandPlayer(mapActivity); // save application mode controls @@ -443,7 +443,7 @@ public class MapActivityActions implements DialogProvider { TargetPointsHelper targets = app.getTargetPointsHelper(); ApplicationMode mode = getRouteMode(null); - app.getSettings().APPLICATION_MODE.set(mode); + //app.getSettings().APPLICATION_MODE.set(mode); app.getRoutingHelper().setAppMode(mode); app.initVoiceCommandPlayer(mapActivity); // save application mode controls diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java index 904413f28d..2a888ae2ba 100644 --- a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java +++ b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java @@ -28,7 +28,7 @@ public class AppModeDialog { if(!showDefault) { values.remove(ApplicationMode.DEFAULT); } - if (showDefault || settings.getApplicationMode() != ApplicationMode.DEFAULT) { + if (showDefault || (settings.getApplicationMode() != ApplicationMode.DEFAULT && !singleSelection)) { selected.add(settings.getApplicationMode()); } return prepareAppModeView(a, values, selected, parent, singleSelection, false, useMapTheme, onClickListener); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java b/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java index ea791d2863..babd535218 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/SettingsAudioVideoActivity.java @@ -200,19 +200,19 @@ public class SettingsAudioVideoActivity extends SettingsBaseActivity { List qNames = new ArrayList<>(); List qValues = new ArrayList<>(); - if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_LOW)) { + if (Build.VERSION.SDK_INT < 11 || CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_LOW)) { qNames.add(getString(R.string.av_video_quality_low)); qValues.add(CamcorderProfile.QUALITY_LOW); } - if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_480P)) { + if (Build.VERSION.SDK_INT >= 11 && CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_480P)) { qNames.add("720 x 480 (480p)"); qValues.add(CamcorderProfile.QUALITY_480P); } - if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)) { + if (Build.VERSION.SDK_INT >= 11 && CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)) { qNames.add("1280 x 720 (720p)"); qValues.add(CamcorderProfile.QUALITY_720P); } - if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_1080P)) { + if (Build.VERSION.SDK_INT >= 11 && CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_1080P)) { qNames.add("1920 x 1080 (1080p)"); qValues.add(CamcorderProfile.QUALITY_1080P); } @@ -220,7 +220,7 @@ public class SettingsAudioVideoActivity extends SettingsBaseActivity { qNames.add("3840x2160 (2160p)"); qValues.add(CamcorderProfile.QUALITY_2160P); } - if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH)) { + if (Build.VERSION.SDK_INT < 11 || CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH)) { qNames.add(getString(R.string.av_video_quality_high)); qValues.add(CamcorderProfile.QUALITY_HIGH); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenu.java index 1fb155b16b..32d45f3407 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenu.java @@ -225,8 +225,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener { } private void updateApplicationModes(final View parentView) { - final OsmandSettings settings = mapActivity.getMyApplication().getSettings(); - ApplicationMode am = settings.APPLICATION_MODE.get(); + //final OsmandSettings settings = mapActivity.getMyApplication().getSettings(); + //ApplicationMode am = settings.APPLICATION_MODE.get(); + ApplicationMode am = routingHelper.getAppMode(); final Set selected = new HashSet<>(); selected.add(am); ViewGroup vg = (ViewGroup) parentView.findViewById(R.id.app_modes); @@ -237,8 +238,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener { public void onClick(View v) { if (selected.size() > 0) { ApplicationMode next = selected.iterator().next(); - settings.APPLICATION_MODE.set(next); - updateMenu(); + //settings.APPLICATION_MODE.set(next); + //updateMenu(); + routingHelper.setAppMode(next); mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange(); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java index bfb80d686b..8a94993485 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java @@ -279,7 +279,7 @@ public class RoutePreferencesMenu { public ArrayAdapter getRoutePreferencesDrawerAdapter(final boolean nightMode) { listAdapter = new ArrayAdapter(mapActivity, R.layout.layers_list_activity_item, R.id.title, - getRoutingParameters(settings.APPLICATION_MODE.get())) { + getRoutingParameters(routingHelper.getAppMode()/*settings.APPLICATION_MODE.get()*/)) { @Override public View getView(final int position, View convertView, ViewGroup parent) { LocalRoutingParameter parameter = getItem(position); @@ -560,7 +560,8 @@ public class RoutePreferencesMenu { } private void updateParameters() { - ApplicationMode am = settings.APPLICATION_MODE.get(); + //ApplicationMode am = settings.APPLICATION_MODE.get(); + ApplicationMode am = routingHelper.getAppMode(); listAdapter.setNotifyOnChange(false); listAdapter.clear(); for (LocalRoutingParameter r : getRoutingParameters(am)) { diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java index 71b71a1d27..f6612d39d0 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroups.java @@ -189,13 +189,13 @@ public class OsMoGroups implements OsMoReactor, OsmoTrackerListener { } else if (command.equalsIgnoreCase("GROUP_DISCONNECT")) { group = storage.getGroup(gid); if (group != null) { - if (!obj.has("error")) { + if (obj == null || !obj.has("error")) { disconnectAllGroupUsers(group); disableGroupTracks(group, group.groupTracks); disableGroupTracks(group, Collections.singleton(group.name + " points.gpx")); + processed = true; } } - processed = true; } else if (command.equalsIgnoreCase("GROUP_CONNECT")) { group = storage.getGroup(gid); if (group != null) { @@ -269,7 +269,6 @@ public class OsMoGroups implements OsMoReactor, OsmoTrackerListener { for (OsMoGroupsUIListener listener : uiListeners) { listener.groupsListChange(operation, group); } - } return processed; } diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java index fd9344ddc2..429535889a 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoGroupsActivity.java @@ -12,6 +12,7 @@ import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.ActivityInfo; +import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; @@ -26,6 +27,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.support.annotation.ColorInt; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; import android.support.v7.view.ActionMode; @@ -52,7 +54,6 @@ import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.ExpandableListView; -import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -63,6 +64,7 @@ import android.widget.Toast; import net.osmand.AndroidUtils; import net.osmand.Location; +import net.osmand.PlatformUtil; import net.osmand.StateChangedListener; import net.osmand.access.AccessibleToast; import net.osmand.data.LatLon; @@ -88,11 +90,14 @@ import net.osmand.plus.osmo.OsMoGroupsStorage.OsMoGroup; import net.osmand.plus.osmo.OsMoService.SessionInfo; import net.osmand.util.MapUtils; +import org.apache.commons.logging.Log; + import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -104,6 +109,7 @@ import gnu.trove.list.array.TIntArrayList; */ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements OsmAndCompassListener, OsmAndLocationListener, OsMoGroupsUIListener, StateChangedListener { + private static final Log LOG = PlatformUtil.getLog(OsMoGroupsActivity.class); public static final int CONNECT_TO = 1; protected static final int DELETE_ACTION_ID = 2; @@ -116,6 +122,9 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements protected static final int LOGIN_ID = 12; public static final int LIST_REFRESH_MSG_ID = OsmAndConstants.UI_HANDLER_SEARCH + 30; public static final long RECENT_THRESHOLD = 60000; + private static final int WIDTH_IN_DP = 24; + private static final int HEIGHT_ID_DP = 24; + private boolean joinGroup; private OsMoPlugin osMoPlugin; @@ -124,9 +133,9 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements private OsmandApplication app; private Handler uiHandler; - private float width = 24; - private float height = 24; - private Path directionPath = new Path(); + private float widthInPx; + private float heightInPx; + private Path directionPath; private float lastCompass; private ActionMode actionMode; private Object selectedObject = null; @@ -137,6 +146,8 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements private CompoundButton srvc; private int connections = 0; + private final Map direactionDrawables = new HashMap<>(); + private final Map nonDireactionDrawables = new HashMap<>(); @Override public void onCreate(Bundle icicle) { @@ -148,36 +159,37 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements super.onCreate(icicle); app = (OsmandApplication) getApplication(); osMoPlugin = OsmandPlugin.getEnabledPlugin(OsMoPlugin.class); - if(osMoPlugin == null) { + if (osMoPlugin == null) { osMoPlugin = OsmandPlugin.getPlugin(OsMoPlugin.class); OsmandPlugin.enablePlugin(this, app, osMoPlugin, true); } - if(getIntent() != null) { - if("http".equals(getIntent().getScheme())) { + if (getIntent() != null) { + if ("http".equals(getIntent().getScheme())) { new OsMoIntentHandler(app, osMoPlugin).execute(getIntent()); } } setContentView(R.layout.osmo_group_list); + //noinspection ConstantConditions getSupportActionBar().setTitle(R.string.osmo); setSupportProgressBarIndeterminateVisibility(false); setupHeader(); setupFooter(); // getSupportActionBar().setIcon(R.drawable.tab_search_favorites_icon); - + adapter = new OsMoGroupsAdapter(osMoPlugin.getGroups(), osMoPlugin.getTracker(), osMoPlugin.getService()); setListAdapter(adapter); - - + + uiHandler = new Handler(); - directionPath = createDirectionPath(); - + initDirectionPath(); + white = new Paint(); white.setStyle(Style.FILL_AND_STROKE); white.setColor(getResources().getColor(R.color.color_unknown)); white.setAntiAlias(true); - + updateStatus(); setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override @@ -205,21 +217,21 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements private void setupHeader() { header = getLayoutInflater().inflate(R.layout.osmo_groups_list_header, null); getExpandableListView().addHeaderView(header); - ImageView iv = (ImageView) header.findViewById(R.id.share_my_location); + ImageView iv = (ImageView) header.findViewById(R.id.share_my_location); iv.setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { shareSession(); } }); updateTrackerButton(); - + srvc = (CompoundButton) header.findViewById(R.id.enable_service); srvc.setChecked(osMoPlugin.getService().isEnabled()); srvc.setText(R.string.osmo_start_service); srvc.setOnCheckedChangeListener(new OnCheckedChangeListener() { - + @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -231,7 +243,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements app.getNavigationService().stopIfNeeded(app, NavigationService.USED_BY_LIVE); } if (getExpandableListView().getFooterViewsCount() > 0) { - getExpandableListView().removeFooterView(footer); + getExpandableListView().removeFooterView(footer); } } setSupportProgressBarIndeterminateVisibility(true); @@ -250,34 +262,33 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements }, 3000); } }); - - - + + TextView mtd = (TextView) header.findViewById(R.id.motd); SessionInfo si = osMoPlugin.getService().getCurrentSessionInfo(); boolean visible = si != null && si.motd != null && si.motd.length() > 0; mtd.setVisibility(visible ? View.VISIBLE : View.GONE); - if(visible) { + if (visible) { mtd.setText(si.motd); mtd.setLinksClickable(true); mtd.setMovementMethod(LinkMovementMethod.getInstance()); } - - + + } private void updateTrackerButton() { CompoundButton trackr = (CompoundButton) header.findViewById(R.id.enable_tracker); trackr.setText(R.string.osmo_share_my_location); - if(osMoPlugin != null && osMoPlugin.getTracker() != null){ + if (osMoPlugin != null && osMoPlugin.getTracker() != null) { trackr.setOnCheckedChangeListener(null); trackr.setChecked(osMoPlugin.getTracker().isEnabledTracker()); } trackr.setOnCheckedChangeListener(new OnCheckedChangeListener() { - + @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if(isChecked) { + if (isChecked) { if (app.getLocationProvider().checkGPSEnabled(OsMoGroupsActivity.this)) { if (osMoPlugin != null && osMoPlugin.getTracker() != null) { osMoPlugin.getTracker().enableTracker(); @@ -287,11 +298,11 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements // app.getSettings().SERVICE_OFF_INTERVAL.set(0); } } else { - if (osMoPlugin != null && osMoPlugin.getTracker() != null){ + if (osMoPlugin != null && osMoPlugin.getTracker() != null) { osMoPlugin.getTracker().disableTracker(); } if (app.getNavigationService() != null) { - app.getNavigationService().stopIfNeeded(app,NavigationService.USED_BY_LIVE); + app.getNavigationService().stopIfNeeded(app, NavigationService.USED_BY_LIVE); } } updateStatus(); @@ -304,10 +315,11 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements TextView noConnectionTextView = (TextView) footer.findViewById(R.id.osmo_no_connection_msg); noConnectionTextView.setMovementMethod(LinkMovementMethod.getInstance()); } - + long lastUpdateTime; private Drawable blinkImg; - private void blink(final ImageView status, Drawable bigger, final Drawable smaller ) { + + private void blink(final ImageView status, Drawable bigger, final Drawable smaller) { blinkImg = smaller; status.setImageDrawable(bigger); status.invalidate(); @@ -333,7 +345,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements // Color.LTGRAY); OsMoService service = osMoPlugin.getService(); OsMoTracker tracker = osMoPlugin.getTracker(); - + Drawable small = srcSignalinactive; //tracker.isEnabledTracker() ? srcSignalinactive : srcinactive; Drawable big = srcSignalinactive;// tracker.isEnabledTracker() ? srcSignalinactive : srcinactive; long last = service.getLastCommandTime(); @@ -349,7 +361,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements blink(status, big, small); } supportInvalidateOptionsMenu(); - if(service.isConnected()) { + if (service.isConnected()) { header.findViewById(R.id.motd).setVisibility(View.VISIBLE); header.findViewById(R.id.share_my_location_layout).setVisibility(View.VISIBLE); header.findViewById(R.id.share_my_location).setVisibility(tracker.isEnabledTracker() ? View.VISIBLE : View.INVISIBLE); @@ -365,14 +377,14 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } } - private Path createDirectionPath() { + private void initDirectionPath() { int h = 15; int w = 4; float sarrowL = 8; // side of arrow float harrowL = (float) Math.sqrt(2) * sarrowL; // hypotenuse of arrow float hpartArrowL = (harrowL - w) / 2; Path path = new Path(); - path.moveTo(width / 2, height - (height - h) / 3); + path.moveTo(WIDTH_IN_DP / 2, HEIGHT_ID_DP - (HEIGHT_ID_DP - h) / 3); path.rMoveTo(w / 2, 0); path.rLineTo(0, -h); path.rLineTo(hpartArrowL, 0); @@ -387,11 +399,11 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements mgr.getDefaultDisplay().getMetrics(dm); pathTransform.postScale(dm.density, dm.density); path.transform(pathTransform); - width *= dm.density; - height *= dm.density; - return path; + widthInPx = WIDTH_IN_DP * dm.density; + heightInPx = HEIGHT_ID_DP * dm.density; + directionPath = path; } - + @Override protected void onResume() { @@ -400,21 +412,21 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements mapLocation = new Location("map"); mapLocation.setLatitude(ml.getLatitude()); mapLocation.setLongitude(ml.getLongitude()); - if(!app.accessibilityEnabled()) { + if (!app.accessibilityEnabled()) { app.getLocationProvider().addCompassListener(this); app.getLocationProvider().registerOrUnregisterCompassListener(true); } app.getLocationProvider().addLocationListener(this); app.getLocationProvider().resumeAllUpdates(); osMoPlugin.getGroups().addUiListeners(this); - if(osMoPlugin.getService().isConnected()) { + if (osMoPlugin.getService().isConnected()) { adapter.synchronizeGroups(); } osMoPlugin.setGroupsActivity(this); app.getSettings().OSMO_SEND_LOCATIONS_STATE.addListener(this); updateTrackerButton(); } - + @Override public void stateChanged(Boolean change) { updateTrackerButton(); @@ -425,7 +437,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements super.onPause(); app.getSettings().OSMO_SEND_LOCATIONS_STATE.removeListener(this); app.getLocationProvider().pauseAllUpdates(); - if(!app.accessibilityEnabled()) { + if (!app.accessibilityEnabled()) { app.getLocationProvider().removeCompassListener(this); } app.getLocationProvider().removeLocationListener(this); @@ -434,7 +446,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } private void showDeviceOnMap(final Object o) { - if(!checkOperationIsNotRunning()) { + if (!checkOperationIsNotRunning()) { return; } OsMoDevice device = (OsMoDevice) (o instanceof OsMoDevice ? o : null); @@ -452,14 +464,14 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } private void enterSelectionMode(final Object o) { - if(!checkOperationIsNotRunning()) { + if (!checkOperationIsNotRunning()) { return; } actionMode = startSupportActionMode(new ActionMode.Callback() { private OsMoGroup group; private Menu menu; - private MenuItem createActionModeMenuItem(final ActionMode actionMode, Menu m, int id, int titleRes, int icon, int menuItemType){ + private MenuItem createActionModeMenuItem(final ActionMode actionMode, Menu m, int id, int titleRes, int icon, int menuItemType) { final MenuItem menuItem = createMenuItem(m, id, titleRes, icon, menuItemType); menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @@ -483,7 +495,6 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } this.menu = menu; group = (OsMoGroup) (o instanceof OsMoGroup ? o : null); - MenuItem mi = null; if (group != null) { createActionModeMenuItem(actionMode, menu, SHARE_ID, R.string.shared_string_share, R.drawable.ic_action_gshare_dark, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); @@ -494,23 +505,6 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements R.drawable.ic_action_delete_dark, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); } - - - if (mi != null) { - final LayoutInflater inflater = LayoutInflater.from(OsMoGroupsActivity.this); - FrameLayout l = new FrameLayout(OsMoGroupsActivity.this); - View view = inflater.inflate(R.layout.check_item_rel, l); - final CompoundButton check = (CompoundButton) view.findViewById(R.id.check_item); - check.setChecked(group != null && group.isActive() && group.isEnabled()); - check.setOnCheckedChangeListener(new OnCheckedChangeListener() { - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - onOffAction(check); - } - }); - MenuItemCompat.setActionView(mi, l); - } return true; } @@ -523,7 +517,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements public void onDestroyActionMode(ActionMode mode) { selectedObject = null; refreshList(); - if (AndroidUiHelper.isOrientationPortrait(OsMoGroupsActivity.this)){ + if (AndroidUiHelper.isOrientationPortrait(OsMoGroupsActivity.this)) { onCreateOptionsMenu(menu); } } @@ -575,22 +569,21 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements bld.append(getString(field)).append(": ").append(value).append("\n"); return bld; } - - + protected void showGroupInfo(final OsMoGroup group) { AlertDialog.Builder bld = new AlertDialog.Builder(this); bld.setTitle(R.string.osmo_group); StringBuilder sb = new StringBuilder(); - if (group != null){ + if (group != null) { setFields(sb, R.string.osmo_group_name, group.name); - if(group.description != null) { + if (group.description != null) { setFields(sb, R.string.osmo_group_description, group.description); } - if(group.expireTime != 0) { + if (group.expireTime != 0) { setFields(sb, R.string.osmo_expire_group, new Date(group.expireTime).toString()); } - if(group.policy != null) { + if (group.policy != null) { setFields(sb, R.string.osmo_group_policy, group.policy); } setFields(sb, R.string.osmo_connect_to_group_id, group.groupId); @@ -605,14 +598,14 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements bld.setView(sv); bld.setPositiveButton(R.string.shared_string_ok, null); bld.setNegativeButton(R.string.osmo_invite, new OnClickListener() { - + @Override public void onClick(DialogInterface dialog, int which) { shareOsMoGroup(group.getVisibleName(app), group.getGroupId()); } }); bld.show(); - + } protected void deleteObject(OsMoGroup selectedObject) { @@ -653,7 +646,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements return super.onOptionsItemSelected(item); } } - + private void loginDialog() { if (!osMoPlugin.getService().isLoggedIn()) { setSupportProgressBarIndeterminateVisibility(true); @@ -664,7 +657,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements bld.setMessage(text); bld.setPositiveButton(R.string.shared_string_ok, null); bld.setNegativeButton(R.string.shared_string_logoff, new OnClickListener() { - + @Override public void onClick(DialogInterface dialog, int which) { logoff(); @@ -677,10 +670,10 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements private void shareSession() { shareSessionUrl(osMoPlugin, OsMoGroupsActivity.this); } - + public static void shareSessionUrl(OsMoPlugin osMoPlugin, Activity ctx) { String sessionURL = osMoPlugin.getTracker().getSessionURL(); - if(sessionURL == null ) { + if (sessionURL == null) { AccessibleToast.makeText(ctx, R.string.osmo_session_not_available, Toast.LENGTH_SHORT).show(); } else { ShareDialog dlg = new ShareDialog(ctx); @@ -693,18 +686,18 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements private void shareOsMoGroup(String name, String groupId) { ShareDialog dlg = new ShareDialog(this); - String url = OsMoService.SHARE_GROUP_URL +Uri.encode(groupId)+"&name="+Uri.encode(name); + String url = OsMoService.SHARE_GROUP_URL + Uri.encode(groupId) + "&name=" + Uri.encode(name); dlg.setTitle(getString(R.string.osmo_group)); dlg.viewContent(groupId); dlg.shareURLOrText(url, getString(R.string.osmo_group_share, groupId, name, url), null); dlg.showDialog(); } - + private void signinPost() { signinPost(true); } - - + + static int getResIdFromAttribute(final Activity activity, final int attr) { if (attr == 0) return 0; @@ -712,20 +705,20 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements activity.getTheme().resolveAttribute(attr, typedvalueattr, true); return typedvalueattr.resourceId; } - + private void signinPost(final boolean createGroup) { - final Dialog dialog = new Dialog(this, + final Dialog dialog = new Dialog(this, app.getSettings().isLightContent() ? - R.style.OsmandLightTheme: - R.style.OsmandDarkTheme); + R.style.OsmandLightTheme : + R.style.OsmandDarkTheme); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); Toolbar tb = new Toolbar(this); tb.setClickable(true); - Drawable back = ((OsmandApplication)getApplication()).getIconsCache().getIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); + Drawable back = ((OsmandApplication) getApplication()).getIconsCache().getIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); tb.setNavigationIcon(back); tb.setTitle(R.string.osmo_sign_in); - tb.setBackgroundColor(getResources().getColor( getResIdFromAttribute(this, R.attr.pstsTabBackground))); + tb.setBackgroundColor(getResources().getColor(getResIdFromAttribute(this, R.attr.pstsTabBackground))); tb.setTitleTextColor(getResources().getColor(getResIdFromAttribute(this, R.attr.pstsTextColor))); tb.setNavigationOnClickListener(new View.OnClickListener() { @Override @@ -744,26 +737,26 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements scrollView.addView(wv); dialog.setContentView(ll); wv.setFocusable(true); - wv.setFocusableInTouchMode(true); + wv.setFocusableInTouchMode(true); wv.requestFocus(View.FOCUS_DOWN); wv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_UP: - if (!v.hasFocus()) { - v.requestFocus(); - } - break; + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_UP: + if (!v.hasFocus()) { + v.requestFocus(); + } + break; } return false; } }); - + dialog.setCancelable(true); dialog.setOnCancelListener(new OnCancelListener() { - + @Override public void onCancel(DialogInterface dialog) { if (!createGroup) { @@ -772,15 +765,16 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } } }); - dialog.show(); + dialog.show(); wv.setWebViewClient(new WebViewClient() { - + @Override public void onPageFinished(WebView view, String url) { setSupportProgressBarIndeterminateVisibility(false); wv.requestFocus(View.FOCUS_DOWN); } - public boolean shouldOverrideUrlLoading(WebView view, String url){ + + public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains(OsMoService.SIGNED_IN_CONTAINS)) { Uri data = Uri.parse(url); String user = data.getQueryParameter("u"); @@ -796,23 +790,23 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements dialog.dismiss(); return true; } - return false; // then it is not handled by default action - } + return false; // then it is not handled by default action + } }); } - + public void createGroupWithDelay(final int delay) { - if(delay <= 0) { + if (delay <= 0) { app.showToastMessage(R.string.osmo_not_signed_in); setSupportProgressBarIndeterminateVisibility(false); return; } setSupportProgressBarIndeterminateVisibility(true); new Handler().postDelayed(new Runnable() { - + @Override public void run() { - if(osMoPlugin.getService().getRegisteredUserName() == null) { + if (osMoPlugin.getService().getRegisteredUserName() == null) { createGroupWithDelay(delay - 700); } else { setSupportProgressBarIndeterminateVisibility(false); @@ -821,18 +815,18 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } }, delay); } - + protected void signin() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.osmo_sign_in); String message = ""; - if(app.getSettings().OSMO_USER_PWD.get() != null) { - message = getString(R.string.osmo_credentials_not_valid) +"\n"; + if (app.getSettings().OSMO_USER_PWD.get() != null) { + message = getString(R.string.osmo_credentials_not_valid) + "\n"; } message += getString(R.string.osmo_create_groups_confirm); builder.setMessage(message); builder.setPositiveButton(R.string.osmo_sign_in, new OnClickListener() { - + @Override public void onClick(DialogInterface dialog, int which) { signinPost(); @@ -841,13 +835,13 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements // startActivity(browserIntent); } }); - + //builder.setNegativeButton(R.string.shared_string_no, null); builder.show(); } private void createGroup(boolean check) { - if(osMoPlugin.getService().getRegisteredUserName() == null && check) { + if (osMoPlugin.getService().getRegisteredUserName() == null && check) { signin(); return; } @@ -862,25 +856,25 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements final TextView warnCreateDesc = (TextView) v.findViewById(R.id.osmo_group_create_dinfo); View.OnClickListener click = new View.OnClickListener() { - + @Override public void onClick(View v) { int vls = warnCreateDesc.getVisibility(); - warnCreateDesc.setVisibility(vls == View.VISIBLE? View.GONE : View.VISIBLE); + warnCreateDesc.setVisibility(vls == View.VISIBLE ? View.GONE : View.VISIBLE); } }; ImageButton info = (ImageButton) v.findViewById(R.id.info); info.setImageDrawable(app.getIconsCache().getContentIcon(R.drawable.ic_action_gabout_dark)); info.setOnClickListener(click); warnCreateDesc.setOnClickListener(click); - + builder.setView(v); builder.setNegativeButton(R.string.shared_string_cancel, null); builder.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - if(!checkOperationIsNotRunning()) { - return ; + if (!checkOperationIsNotRunning()) { + return; } joinGroup = true; String op = osMoPlugin.getGroups().createGroup(name.getText().toString(), onlyByInvite.isChecked(), @@ -915,29 +909,28 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements dialog.show(); AndroidUtils.softKeyboardDelayed(name); - + } private void connectToDevice() { AlertDialog.Builder builder = new AlertDialog.Builder(this); final View v = getLayoutInflater().inflate(R.layout.osmo_connect_to_device, getExpandableListView(), false); - final TextView labelTracker = (TextView ) v.findViewById(R.id.LabelTrackerId); - final TextView labelName = (TextView ) v.findViewById(R.id.LabelName); + final TextView labelTracker = (TextView) v.findViewById(R.id.LabelTrackerId); + final TextView labelName = (TextView) v.findViewById(R.id.LabelName); final EditText tracker = (EditText) v.findViewById(R.id.TrackerId); final EditText name = (EditText) v.findViewById(R.id.Name); final View mgv = v.findViewById(R.id.MyGroupName); final EditText nickname = (EditText) v.findViewById(R.id.NickName); nickname.setText(app.getSettings().OSMO_USER_NAME.get()); - + labelTracker.setText(R.string.osmo_connect_to_group_id); labelName.setText(R.string.osmo_group_name); name.setHint(R.string.osmo_use_server_name); name.setVisibility(View.GONE); labelName.setVisibility(View.GONE); mgv.setVisibility(View.VISIBLE); - - - + + builder.setView(v); builder.setNegativeButton(R.string.shared_string_cancel, null); builder.setPositiveButton(R.string.shared_string_apply, new DialogInterface.OnClickListener() { @@ -967,7 +960,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements builder.create().show(); AndroidUtils.softKeyboardDelayed(tracker); } - + @Override public boolean onPrepareOptionsMenu(Menu menu) { OsMoService service = osMoPlugin.getService(); @@ -998,7 +991,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements // R.drawable.ic_action_gshare_dark, // MenuItemCompat.SHOW_AS_ACTION_ALWAYS); createMenuItem(menu, CREATE_GROUP, R.string.osmo_create_group, 0, 0, - // R.drawable.ic_group_add, + // R.drawable.ic_group_add, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); } return super.onCreateOptionsMenu(menu); @@ -1027,10 +1020,10 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements this.operation = operation; setSupportProgressBarIndeterminateVisibility(true); uiHandler.postDelayed(new Runnable() { - + @Override public void run() { - if(OsMoGroupsActivity.this.operation != null) { + if (OsMoGroupsActivity.this.operation != null) { Toast.makeText(OsMoGroupsActivity.this, R.string.osmo_server_operation_failed, Toast.LENGTH_LONG).show(); } hideProgressBar(); @@ -1042,37 +1035,38 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements this.operation = null; setSupportProgressBarIndeterminateVisibility(false); } - + @Override public void groupsListChange(final String operation, final OsMoGroup group) { uiHandler.post(new Runnable() { - + @Override public void run() { String top = OsMoGroupsActivity.this.operation; - if(operation == top || (operation != null && operation.equals(top))) { + if (top.equals(operation) || (operation != null && operation.equals(top))) { hideProgressBar(); } - if(joinGroup && (operation != null && operation.startsWith("GROUP_CONNECT"))) { + if (joinGroup && (operation != null && operation.startsWith("GROUP_CONNECT"))) { showGroupInfo(group); joinGroup = false; } - if(group != null) { + if (group != null) { adapter.update(group); adapter.notifyDataSetChanged(); - } else if (operation.startsWith("GROUP_GET_ALL") - || operation.startsWith("DEVICE_GET_ALL") - || operation.startsWith("SUBSCRIBE") - || operation.startsWith("UNSUBSCRIBE")) { + } else if (operation != null && + (operation.startsWith("GROUP_GET_ALL") + || operation.startsWith("DEVICE_GET_ALL") + || operation.startsWith("SUBSCRIBE") + || operation.startsWith("UNSUBSCRIBE"))) { adapter.synchronizeGroups(); } updateStatus(); } }); } - + public boolean checkOperationIsNotRunning() { - if(operation != null) { + if (operation != null) { Toast.makeText(this, R.string.wait_current_task_finished, Toast.LENGTH_SHORT).show(); return false; } @@ -1081,8 +1075,8 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements class OsMoGroupsAdapter extends OsmandBaseExpandableListAdapter { - private List sortedGroups = new ArrayList(); - private Map> users = new LinkedHashMap>(); + private List sortedGroups = new ArrayList<>(); + private Map> users = new LinkedHashMap<>(); private OsMoGroups grs; private OsMoTracker tracker; private OsMoService srv; @@ -1091,18 +1085,18 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements this.grs = grs; this.tracker = tracker; this.srv = srv; - if(srv.isConnected()) { + if (srv.isConnected()) { synchronizeGroups(); } } public void update(OsMoGroup group) { - if(group.isDeleted()) { + if (group.isDeleted()) { sortedGroups.remove(group); users.remove(group); } else { - List us = !group.isEnabled() && !group.isMainGroup() ? new ArrayList(0) : - group.getVisibleGroupUsers(srv.getMyGroupTrackerId()); + List us = !group.isEnabled() && !group.isMainGroup() ? new ArrayList(0) : + group.getVisibleGroupUsers(srv.getMyGroupTrackerId()); final Collator ci = Collator.getInstance(); Collections.sort(us, new Comparator() { @@ -1112,12 +1106,12 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } }); users.put(group, us); - if(!sortedGroups.contains(group)) { + if (!sortedGroups.contains(group)) { sortedGroups.add(group); } } } - + public void clear() { users.clear(); sortedGroups.clear(); @@ -1201,29 +1195,29 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements adjustIndicator(groupPosition, isExpanded, row, light); TextView label = (TextView) row.findViewById(R.id.category_name); final OsMoGroup model = getGroup(groupPosition); - if(selectedObject == model) { + if (selectedObject == model) { row.setBackgroundColor(getResources().getColor(R.color.row_selection_color)); } else { row.setBackgroundColor(Color.TRANSPARENT); } label.setText(model.getVisibleName(OsMoGroupsActivity.this)); - if(model.isMainGroup() || model.isActive()) { + if (model.isMainGroup() || model.isActive()) { label.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); } else { label.setTypeface(Typeface.DEFAULT, Typeface.ITALIC); } View v = row.findViewById(R.id.settings); - if(model.isMainGroup()) { + if (model.isMainGroup()) { v.setVisibility(View.GONE); } else { // (ImageView) v.setImageDrawable(getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_action_settings)); - if((selectedObject == model) != ((CheckBox) v).isChecked()) { + if ((selectedObject == model) != ((CheckBox) v).isChecked()) { ((CheckBox) v).setChecked(selectedObject == model); } v.setVisibility(View.VISIBLE); v.setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { if (model != selectedObject) { @@ -1235,23 +1229,23 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements }); } CompoundButton ci = (CompoundButton) row.findViewById(R.id.check_item); - if(model.isMainGroup()) { + if (model.isMainGroup()) { ci.setVisibility(View.GONE); } else { ci.setVisibility(View.VISIBLE); ci.setOnCheckedChangeListener(null); ci.setChecked(model.isEnabled() && model.isActive()); ci.setOnCheckedChangeListener(new OnCheckedChangeListener() { - + @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if(isChecked) { + if (isChecked) { String operation = osMoPlugin.getGroups().connectGroup(model); startLongRunningOperation(operation); } else { String operation = osMoPlugin.getGroups().disconnectGroup(model); startLongRunningOperation(operation); - } + } } }); } @@ -1260,14 +1254,14 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, - ViewGroup parent) { + ViewGroup parent) { View row = convertView; if (row == null) { LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.osmo_group_list_item, parent, false); } - final OsMoDevice model = getChild(groupPosition, childPosition); - row.setTag(model); + final OsMoDevice osmoDevice = getChild(groupPosition, childPosition); + row.setTag(osmoDevice); if (app.getSettings().isLightContent()) { row.setBackgroundResource(R.drawable.expandable_list_item_background_light); } else { @@ -1276,58 +1270,53 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements TextView label = (TextView) row.findViewById(R.id.osmo_label); TextView labelTime = (TextView) row.findViewById(R.id.osmo_label_time); ImageView icon = (ImageView) row.findViewById(R.id.osmo_user_icon); - Location location = model.getLastLocation(); - if(model.getTrackerId().equals(osMoPlugin.getService().getMyGroupTrackerId())) { + Location location = osmoDevice.getLastLocation(); + if (osmoDevice.getTrackerId().equals(osMoPlugin.getService().getMyGroupTrackerId())) { location = tracker.getLastSendLocation(); } - int color = getResources().getColor(R.color.color_unknown); - int activeColor = model.getColor(); - if (activeColor == 0) { - activeColor = ColorDialogs.getRandomColor(); - osMoPlugin.getGroups().setGenColor(model, activeColor); - } - //Location location = tracker.getLastLocation(model.trackerId); - if(!model.isEnabled()) { + int color = osmoDevice.getColor(); + if (!osmoDevice.isEnabled()) { icon.setVisibility(View.INVISIBLE); label.setTypeface(Typeface.DEFAULT, Typeface.ITALIC); - label.setText(model.getVisibleName()); + label.setText(osmoDevice.getVisibleName()); labelTime.setText(""); } else if (location == null || mapLocation == null) { label.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); icon.setVisibility(View.VISIBLE); - NonDirectionDrawable draw ; - if(icon.getDrawable() instanceof NonDirectionDrawable) { - draw = (NonDirectionDrawable) icon.getDrawable(); - } else { - draw = new NonDirectionDrawable(); + NonDirectionDrawable nonDirectionDrawable; + nonDirectionDrawable = nonDireactionDrawables.get(color); + if (nonDirectionDrawable == null) { + nonDirectionDrawable = new NonDirectionDrawable(getResources(), widthInPx, heightInPx); + nonDirectionDrawable.setColor(color); + nonDireactionDrawables.put(color, nonDirectionDrawable); } - draw.setColor(model.isEnabled() ? activeColor : color); - icon.setImageDrawable(draw); - label.setText(model.getVisibleName()); + icon.setImageDrawable(nonDirectionDrawable); + label.setText(osmoDevice.getVisibleName()); labelTime.setText(""); } else { label.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); icon.setVisibility(View.VISIBLE); - DirectionDrawable draw; - if (icon.getDrawable() instanceof DirectionDrawable) { - draw = (DirectionDrawable) icon.getDrawable(); - } else { - draw = new DirectionDrawable(); - } float[] mes = new float[2]; net.osmand.Location.distanceBetween(location.getLatitude(), location.getLongitude(), mapLocation.getLatitude(), mapLocation.getLongitude(), mes); //TODO: Hardy: Check: The arrow direction below may only be correct for the default display's standard orientation // i.e. still needs to be corrected for .ROTATION_90/180/170 // Keep in mind: getRotation was introduced from Android 2.2 - draw.setAngle(mes[1] - lastCompass + 180); long now = System.currentTimeMillis(); - final boolean recent = Math.abs( now - location.getTime() ) < RECENT_THRESHOLD; - draw.setColor(recent ? activeColor : color); - icon.setImageDrawable(draw); + final boolean recent = Math.abs(now - location.getTime()) < RECENT_THRESHOLD; + color = recent ? color : getResources().getColor(R.color.color_unknown); + DirectionDrawable directionDrawable; + directionDrawable = direactionDrawables.get(color); + if (directionDrawable == null) { + directionDrawable = new DirectionDrawable(getResources(), widthInPx, heightInPx); + directionDrawable.setColor(color); + direactionDrawables.put(color, directionDrawable); + } + directionDrawable.setAngle(mes[1] - lastCompass + 180); + icon.setImageDrawable(directionDrawable); int dist = (int) mes[0]; long seconds = Math.max(0, (now - location.getTime()) / 1000); - String time = ""; + String time; if (seconds < 60) { seconds = (seconds / 5) * 5; time = seconds + " " + getString(R.string.seconds_ago); @@ -1338,7 +1327,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements time = (seconds / (60 * 60)) + " " + getString(R.string.hours_ago); } String distance = OsmAndFormatter.getFormattedDistance(dist, getMyApplication()) + " "; - String visibleName = model.getVisibleName(); + String visibleName = osmoDevice.getVisibleName(); String firstPart = distance + visibleName; label.setText(firstPart, TextView.BufferType.SPANNABLE); ((Spannable) label.getText()).setSpan( @@ -1352,30 +1341,26 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements return row; } - - - } @Override public void updateLocation(Location location) { MapViewTrackingUtilities mv = MapActivity.getSingleMapViewTrackingUtilities(); - if(mv != null && mv.isMapLinkedToLocation() && location != null) { + if (mv != null && mv.isMapLinkedToLocation() && location != null) { Location lt = mapLocation; mapLocation = location; - if(lt == null || location.distanceTo(lt) > 8) { + if (lt == null || location.distanceTo(lt) > 8) { refreshList(); } } } - - + @Override public void updateCompassValue(float value) { float vl = lastCompass; lastCompass = value; - if(Math.abs(MapUtils.degreesDiff(vl, value)) > 15) { + if (Math.abs(MapUtils.degreesDiff(vl, value)) > 15) { refreshList(); } } @@ -1393,35 +1378,34 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements uiHandler.sendMessageDelayed(msg, 100); } } - - - + + @Override public void deviceLocationChanged(OsMoDevice device) { - refreshList(); + refreshList(); } - + public static void showSettingsDialog(Context ctx, final OsMoPlugin plugin, final OsMoDevice device) { AlertDialog.Builder bld = new AlertDialog.Builder(ctx); bld.setTitle(R.string.osmo_edit_device); final LayoutInflater inflater = LayoutInflater.from(ctx); - View view = inflater.inflate(R.layout.osmo_edit_device, null); - final EditText name = (EditText) view.findViewById(R.id.Name); - if(device.getColor() == 0) { + View view = inflater.inflate(R.layout.osmo_edit_device, null); + final EditText name = (EditText) view.findViewById(R.id.Name); + if (device.getColor() == 0) { plugin.getGroups().setDeviceProperties(device, device.getVisibleName(), - ColorDialogs.getRandomColor()); - } - int devColor = device.getColor(); - bld.setView(view); - name.setText(device.getVisibleName()); - - final Spinner colorSpinner = (Spinner) view.findViewById(R.id.ColorSpinner); - final TIntArrayList list = new TIntArrayList(); - ColorDialogs.setupColorSpinner(ctx, devColor, colorSpinner, list); - - bld.setPositiveButton(R.string .shared_string_yes, new DialogInterface.OnClickListener() { - + ColorDialogs.getRandomColor()); + } + int devColor = device.getColor(); + bld.setView(view); + name.setText(device.getVisibleName()); + + final Spinner colorSpinner = (Spinner) view.findViewById(R.id.ColorSpinner); + final TIntArrayList list = new TIntArrayList(); + ColorDialogs.setupColorSpinner(ctx, devColor, colorSpinner, list); + + bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { + @Override public void onClick(DialogInterface dialog, int which) { plugin.getGroups().setDeviceProperties(device, @@ -1432,29 +1416,24 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements bld.show(); } - - - class NonDirectionDrawable extends Drawable { - Paint paintRouteDirection; - - public void setColor(int color) { + abstract static class ColorDrawable extends Drawable { + protected Paint paintRouteDirection; + protected final float width; + protected final float height; + + public ColorDrawable(Resources resource, float wight, float height) { + this.width = wight; + this.height = height; + paintRouteDirection = new Paint(); + paintRouteDirection.setStyle(Style.FILL_AND_STROKE); + paintRouteDirection.setColor(resource.getColor(R.color.color_unknown)); + paintRouteDirection.setAntiAlias(true); + } + + public void setColor(@ColorInt int color) { paintRouteDirection.setColor(color); } - public NonDirectionDrawable() { - paintRouteDirection = new Paint(); - paintRouteDirection.setStyle(Style.FILL_AND_STROKE); - paintRouteDirection.setColor(getResources().getColor(R.color.color_unknown)); - paintRouteDirection.setAntiAlias(true); - - } - - @Override - public void draw(Canvas canvas) { - canvas.drawCircle(width/2, height/2, (width + height) / 6, white); - canvas.drawCircle(width/2, height/2, (width + height) / 7, paintRouteDirection); - } - @Override public int getOpacity() { return 0; @@ -1463,29 +1442,32 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements @Override public void setAlpha(int alpha) { paintRouteDirection.setAlpha(alpha); - } @Override public void setColorFilter(ColorFilter cf) { paintRouteDirection.setColorFilter(cf); } + } - class DirectionDrawable extends Drawable { - Paint paintRouteDirection; - - private float angle; - - public DirectionDrawable() { - paintRouteDirection = new Paint(); - paintRouteDirection.setStyle(Style.FILL_AND_STROKE); - paintRouteDirection.setColor(getResources().getColor(R.color.color_unknown)); - paintRouteDirection.setAntiAlias(true); + class NonDirectionDrawable extends ColorDrawable { + public NonDirectionDrawable(Resources resource, float wight, float height) { + super(resource, wight, height); } - public void setColor(int color) { - paintRouteDirection.setColor(color); + @Override + public void draw(Canvas canvas) { + canvas.drawCircle(width / 2, height / 2, (width + height) / 6, white); + canvas.drawCircle(width / 2, height / 2, (width + height) / 7, paintRouteDirection); + } + } + + class DirectionDrawable extends ColorDrawable { + private float angle; + + public DirectionDrawable(Resources resource, float wight, float height) { + super(resource, wight, height); } public void setAngle(float angle) { @@ -1497,22 +1479,6 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements canvas.rotate(angle, width / 2, height / 2); canvas.drawPath(directionPath, paintRouteDirection); } - - @Override - public int getOpacity() { - return 0; - } - - @Override - public void setAlpha(int alpha) { - paintRouteDirection.setAlpha(alpha); - - } - - @Override - public void setColorFilter(ColorFilter cf) { - paintRouteDirection.setColorFilter(cf); - } } private void logoff() { @@ -1526,7 +1492,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements adapter.synchronizeGroups(); } } - + private void showHint() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.anonymous_user); @@ -1536,7 +1502,6 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements builder.show(); } - public void handleConnect() { app.runInUIThread(new Runnable() { @@ -1550,10 +1515,10 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements } }); } - + public void handleDisconnect(final String msg) { app.runInUIThread(new Runnable() { - + @Override public void run() { if (!TextUtils.isEmpty(msg) && connections > 0) { diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java index c94683e6a6..9e15a4e823 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java @@ -3,6 +3,7 @@ package net.osmand.plus.osmo; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; +import android.os.Build; import android.view.View; import android.widget.ArrayAdapter; @@ -34,7 +35,6 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -53,7 +53,7 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { protected Activity groupsActivity; protected OsMoControlDevice deviceControl; - private final static Log log = PlatformUtil.getLog(OsMoPlugin.class); + private final static Log LOG = PlatformUtil.getLog(OsMoPlugin.class); public OsMoPlugin(final OsmandApplication app) { @@ -398,6 +398,7 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { try { color = Algorithms.parseColor(obj.getString("color")); } catch (RuntimeException e) { + LOG.warn("", e); } } boolean visible = obj.has("visible"); @@ -406,12 +407,10 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { long len = !f.exists() ? -1 : f.length(); boolean sizeEqual = obj.has("size") && obj.getLong("size") == len; boolean modifySupported = f.setLastModified(timestamp - 1); - if (sizeEqual && !modifySupported) { - // false alarm - } else { + if (!sizeEqual || modifySupported) { changed = true; String url = obj.getString("url"); - log.info("Download gpx " + url); + LOG.info("Download gpx " + url); DownloadFileHelper df = new DownloadFileHelper(app); InputStream is = df.getInputStreamToDownload(new URL(url), false); int av = is.available(); @@ -431,10 +430,7 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { } app.getSelectedGpxHelper().setGpxFileToDisplay(selectGPXFile); } - } catch (JSONException e) { - e.printStackTrace(); - errors += e.getMessage() + "\n"; - } catch (IOException e) { + } catch (JSONException | IOException e) { e.printStackTrace(); errors += e.getMessage() + "\n"; } @@ -443,7 +439,7 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { } private void redownloadFile(File f, long timestamp, int color, InputStream is) - throws FileNotFoundException, IOException { + throws IOException { FileOutputStream fout = new FileOutputStream(f); byte[] buf = new byte[1024]; int k; @@ -453,7 +449,7 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { fout.close(); is.close(); if (!f.setLastModified(timestamp)) { - log.error("Timestamp updates are not supported"); + LOG.error("Timestamp updates are not supported"); } } @@ -468,8 +464,6 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { } } - ; - @Override protected void onPostExecute(String result) { if (result.length() > 0) { @@ -512,7 +506,7 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { } public boolean useHttps() { - return app.getSettings().OSMO_USE_HTTPS.get(); + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; } @Override diff --git a/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java b/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java index 5e7108dda4..345e802b93 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java +++ b/OsmAnd/src/net/osmand/plus/osmo/SettingsOsMoActivity.java @@ -70,11 +70,6 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { showGroupNotifiations.setSummary(R.string.osmo_show_group_notifications_descr); grp.addPreference(showGroupNotifiations); - CheckBoxPreference useHttps = createCheckBoxPreference(settings.OSMO_USE_HTTPS); - useHttps.setTitle(R.string.osmo_use_https); - useHttps.setSummary(R.string.osmo_use_https_descr); - grp.addPreference(useHttps); - // if (OsmandPlugin.isDevelopment()) { debugPref = new Preference(this); debugPref.setTitle(R.string.osmo_settings_debug); @@ -86,6 +81,7 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { private void updateDebugPref() { final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class); + assert plugin != null; OsMoService service = plugin.getService(); OsMoTracker tracker = plugin.getTracker(); StringBuilder s = new StringBuilder(); @@ -103,7 +99,7 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { if(err == null) { err = "..."; } - s.append(getString(R.string.osmo_io_error) + err).append("\n"); + s.append(getString(R.string.osmo_io_error)).append(err).append("\n"); } s.append(getString(R.string.osmo_locations_sent, tracker.getLocationsSent(), @@ -116,6 +112,7 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { @Override public boolean onPreferenceClick(Preference preference) { final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class); + assert plugin != null; if (preference == debugPref) { updateDebugPref(); AlertDialog.Builder bld = new AlertDialog.Builder(this); @@ -157,7 +154,6 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { } else { ShareDialog dlg = new ShareDialog(this); dlg.setTitle(getString(R.string.osmo_tracker_id)); - dlg.setAction(getString(R.string.osmo_regenerate_login_ids), getRegenerateAction()); dlg.viewContent(ci.trackerId); String url = OsMoService.SHARE_TRACKER_URL+Uri.encode(ci.trackerId); dlg.shareURLOrText(ci.trackerId, getString(R.string.osmo_tracker_id_share, ci.trackerId, "", url), null); @@ -166,27 +162,6 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { } return super.onPreferenceClick(preference); } - - private Runnable getRegenerateAction() { - return new Runnable() { - - @Override - public void run() { - AlertDialog.Builder bld = new AlertDialog.Builder(SettingsOsMoActivity.this); - bld.setMessage(R.string.osmo_regenerate_login_ids_confirm); - bld.setPositiveButton(R.string.shared_string_yes, new OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class); - plugin.getService().pushCommand(OsMoService.REGENERATE_CMD); - } - }); - bld.setNegativeButton(R.string.shared_string_no, null); - bld.show(); - } - }; - } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { @@ -195,6 +170,7 @@ public class SettingsOsMoActivity extends SettingsBaseActivity { if (id.equals(settings.OSMO_AUTO_CONNECT.getId())) { if ((Boolean) newValue) { final OsMoPlugin plugin = OsMoPlugin.getEnabledPlugin(OsMoPlugin.class); + assert plugin != null; plugin.getService().connect(false); } // sendLocationsref.setEnabled(settings.OSMO_AUTO_CONNECT.get()); diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index c86abd4570..51a410f94b 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -97,6 +97,7 @@ public class RoutingHelper { settings = context.getSettings(); voiceRouter = new VoiceRouter(this, settings); provider = new RouteProvider(); + setAppMode(settings.APPLICATION_MODE.get()); } diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index f47783c372..6de0c70fd6 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -464,11 +464,15 @@ public class MapControlsLayer extends OsmandMapLayer { RoutingHelper routingHelper = app.getRoutingHelper(); if (routingHelper.isFollowingMode()) { switchToRouteFollowingLayout(); + if (app.getSettings().APPLICATION_MODE.get() != routingHelper.getAppMode()) { + app.getSettings().APPLICATION_MODE.set(routingHelper.getAppMode()); + } } else { if (!app.getTargetPointsHelper().checkPointToNavigateShort()) { mapRouteInfoMenu.show(); } else { touchEvent = 0; + app.getSettings().APPLICATION_MODE.set(routingHelper.getAppMode()); mapActivity.getMapViewTrackingUtilities().backToLocationImpl(); app.getSettings().FOLLOW_THE_ROUTE.set(true); routingHelper.setFollowingMode(true);