From c15e8782d0ac2c4bf10759a084444c457ad5344d Mon Sep 17 00:00:00 2001 From: Nikolay Korotkiy Date: Thu, 5 Dec 2019 13:29:22 +0000 Subject: [PATCH 01/61] Added translation using Weblate (Finnish) --- OsmAnd-telegram/res/values-fi/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 OsmAnd-telegram/res/values-fi/strings.xml diff --git a/OsmAnd-telegram/res/values-fi/strings.xml b/OsmAnd-telegram/res/values-fi/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/OsmAnd-telegram/res/values-fi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From a00b2392c03fa33ced1161b4cce65262f8dca04f Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Thu, 5 Dec 2019 12:40:38 +0000 Subject: [PATCH 02/61] Translated using Weblate (Arabic) Currently translated at 78.2% (2406 of 3078 strings) --- OsmAnd/res/values-ar/strings.xml | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index a11b4daf5c..4c0a1db18e 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3143,4 +3143,38 @@ أقصى غير محدد صعوبة الطريق + يرجى مشاركة ملاحظاتك وتقييم أعمالنا على Google Play. + موافق + "خدمة تحميل أوسماند" + أرجواني + أيقونة + انقر مرة أخرى لتغيير اتجاه الخريطة + الحد الأدنى للسرعة + الحد الأعلى للسرعة + السرعة الافتراضية + تغيير إعدادات السرعة الافتراضية + "تعيين حد السرعة الأدنى/الأعلى" + ملف تعريف جديد + خروج مفاجئ + فشل العملية الأخيرة لأوسماند. الرجاء مساعدتنا في التحسين من خلال مشاركة رسالة الخطأ. + • ملفات تخصيص التطبيق: قم بإنشاء ملف تعريف مخصص لاحتياجاتك الخاصة ، باستخدام رمز ولون مخصصين • قم الآن بتخصيص سرعات أي ملف شخصي الافتراضية وسرعات الحد الأدنى / الحد الأقصى • إضافة عنصر واجهة مستخدم للإحداثيات الحالية • خيارات مضافة لإظهار البوصلة ومسطرة دائرة نصف قطرها على الخريطة • إصلاح تسجيل مسار الخلفية • تحسين تنزيلات خريطة الخلفية • خيار \"تشغيل الشاشة\" المرتجع • اختيار لغة ويكيبيديا الثابتة • سلوك زر بوصلة ثابتة أثناء التنقل • إصلاحات أخرى في الأخطاء +\n +\n + الناقل الشخصي + عجلة آحادية + سكوتر + الدقة الأفقية: %1$s, عمودي: %2$s + الدقة الأفقية: %s + خارج المسار + إعداد الملف الشخصي + يحتفظ الملف الشخصي بإعداداته الخاصة + حدد خيارات الخريطة للملف الشخصي + حدد خيارات الشاشة لملف التعريف + حدد إعدادات الملاحة لملف التعريف + حدد الحد الأعلى للتغييرات + عدد التغييرات + تشغيل عند الانعطاف + تعيين الوقت الذي سيتم تشغيل الشاشة فيه. + استخدام مستشعر القرب + حرك يدك أعلى الشاشة لتشغيلها أثناء التنقل. \ No newline at end of file From 9a316c5f8af19fa6a04f139c6029e5af005a4664 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Thu, 5 Dec 2019 22:08:47 +0300 Subject: [PATCH 03/61] Move home/work/parking to favs begin --- OsmAnd/res/values/strings.xml | 1 + .../src/net/osmand/data/FavouritePoint.java | 64 ++++++++++- .../osmand/data/PersonalFavouritePoint.java | 102 ++++++++++++++++++ .../net/osmand/plus/FavouritesDbHelper.java | 72 ++++++------- 4 files changed, 195 insertions(+), 44 deletions(-) create mode 100644 OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index c6fb37ba2a..48bca6eed4 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,7 @@ Thx - Hardy --> + Personal Add new profile \'%1$s\'? Include heading Save heading to each trackpoint while recording. diff --git a/OsmAnd/src/net/osmand/data/FavouritePoint.java b/OsmAnd/src/net/osmand/data/FavouritePoint.java index 92e4bb9067..a50ccdf65d 100644 --- a/OsmAnd/src/net/osmand/data/FavouritePoint.java +++ b/OsmAnd/src/net/osmand/data/FavouritePoint.java @@ -3,12 +3,19 @@ package net.osmand.data; import java.io.Serializable; import android.content.Context; +import android.support.annotation.NonNull; + +import net.osmand.GPXUtilities; +import net.osmand.GPXUtilities.WptPt; public class FavouritePoint implements Serializable, LocationPoint { private static final long serialVersionUID = 729654300829771466L; - private String name = ""; - private String description; - private String category = ""; + + protected static final String HIDDEN = "hidden"; + + protected String name = ""; + protected String description; + protected String category = ""; private String originObjectName = ""; private double latitude; private double longitude; @@ -46,7 +53,11 @@ public class FavouritePoint implements Serializable, LocationPoint { public PointDescription getPointDescription() { return new PointDescription(PointDescription.POINT_TYPE_FAVORITE, name); } - + + public boolean isPersonal() { + return false; + } + @Override public PointDescription getPointDescription(Context ctx) { return getPointDescription(); @@ -171,4 +182,49 @@ public class FavouritePoint implements Serializable, LocationPoint { result = prime * result + ((originObjectName == null) ? 0 : originObjectName.hashCode()); return result; } + + public static FavouritePoint fromWpt(@NonNull Context ctx, @NonNull WptPt pt) { + String name = pt.name; + String categoryName = pt.category != null ? pt.category : ""; + if (name == null) { + name = ""; + } + FavouritePoint fp; + if (pt.getExtensionsToRead().containsKey(PersonalFavouritePoint.PERSONAL)) { + try { + fp = new PersonalFavouritePoint(ctx, name, pt.lat, pt.lon); + } catch (IllegalArgumentException e) { + fp = new FavouritePoint(pt.lat, pt.lon, name, categoryName); + } + } else { + fp = new FavouritePoint(pt.lat, pt.lon, name, categoryName); + } + fp.setDescription(pt.desc); + if (pt.comment != null) { + fp.setOriginObjectName(pt.comment); + } + fp.setColor(pt.getColor(0)); + fp.setVisible(!pt.getExtensionsToRead().containsKey(HIDDEN)); + return fp; + } + + public WptPt toWpt() { + WptPt pt = new WptPt(); + pt.lat = getLatitude(); + pt.lon = getLongitude(); + if (!isVisible()) { + pt.getExtensionsToWrite().put(HIDDEN, "true"); + } + if (getColor() != 0) { + pt.setColor(getColor()); + } + pt.name = getName(); + pt.desc = getDescription(); + if (getCategory().length() > 0) + pt.category = getCategory(); + if (getOriginObjectName().length() > 0) { + pt.comment = getOriginObjectName(); + } + return pt; + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java new file mode 100644 index 0000000000..def05ab3a0 --- /dev/null +++ b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java @@ -0,0 +1,102 @@ +package net.osmand.data; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.StringRes; + +import net.osmand.GPXUtilities; +import net.osmand.GPXUtilities.WptPt; +import net.osmand.plus.R; + +public class PersonalFavouritePoint extends FavouritePoint { + + private Context ctx; + + private PointType type; + public static final String PERSONAL = "personal"; + + public enum PointType { + HOME("home", R.string.home_button, 1), + WORK("work", R.string.work_button, 2), + PARKING("parking", R.string.map_widget_parking, 3); + + private String name; + @StringRes + private int resId; + private int order; + + PointType(String name, @StringRes int resId, int order) { + this.name = name; + this.resId = resId; + this.order = order; + } + + public String getName() { + return name; + } + + public int getOrder() { + return order; + } + + public String getHumanString(@NonNull Context ctx) { + return ctx.getString(resId); + } + } + + private PersonalFavouritePoint() { + } + + private PersonalFavouritePoint(@NonNull Context ctx, @NonNull PointType type, double latitude, double longitude) { + super(latitude, longitude, type.name, PERSONAL); + this.ctx = ctx; + this.type = type; + } + + public PersonalFavouritePoint(@NonNull Context ctx, @NonNull String typeName, double latitude, double longitude) throws IllegalArgumentException { + this(ctx, PointType.valueOf(typeName), latitude, longitude); + } + + public PersonalFavouritePoint(PersonalFavouritePoint favouritePoint) { + super(favouritePoint); + this.type = favouritePoint.type; + } + + @Override + public boolean isPersonal() { + return true; + } + + public PointType getType() { + return type; + } + + @Override + public String getName() { + return type.getHumanString(ctx); + } + + @Override + public void setName(String name) { + throw new IllegalArgumentException("Personal name is readonly"); + } + + @Override + public String getCategory() { + return ctx.getString(R.string.personal_category_name); + } + + @Override + public void setCategory(String category) { + throw new IllegalArgumentException("Personal category is readonly"); + } + + @Override + public WptPt toWpt() { + WptPt pt = super.toWpt(); + pt.getExtensionsToWrite().put(PERSONAL, "true"); + pt.name = type.name; + pt.desc = getDescription(); + return pt; + } +} diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 6af6dd75ee..738bf4bbfd 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -11,6 +11,7 @@ import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.WptPt; +import net.osmand.data.PersonalFavouritePoint; import net.osmand.plus.MapMarkersHelper.MapMarkersGroup; import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; @@ -44,11 +45,11 @@ public class FavouritesDbHelper { public static final int BACKUP_CNT = 20; //$NON-NLS-1$ public static final String FILE_TO_BACKUP = "favourites_bak.gpx"; //$NON-NLS-1$ - private List cachedFavoritePoints = new ArrayList(); - private List favoriteGroups = new ArrayList(); - private Map flatGroups = new LinkedHashMap(); + private List cachedFavoritePoints = new ArrayList<>(); + private List cachedPersonalFavoritePoints = new ArrayList<>(); + private List favoriteGroups = new ArrayList<>(); + private Map flatGroups = new LinkedHashMap<>(); private final OsmandApplication context; - protected static final String HIDDEN = "hidden"; private static final String DELIMETER = "__"; private Set listeners = new HashSet<>(); @@ -62,6 +63,7 @@ public class FavouritesDbHelper { public String name; public boolean visible = true; public int color; + public boolean personal = false; public List points = new ArrayList(); } @@ -437,23 +439,7 @@ public class FavouritesDbHelper { private GPXFile asGpxFile(List favoritePoints) { GPXFile gpx = new GPXFile(Version.getFullVersion(context)); for (FavouritePoint p : favoritePoints) { - WptPt pt = new WptPt(); - pt.lat = p.getLatitude(); - pt.lon = p.getLongitude(); - if (!p.isVisible()) { - pt.getExtensionsToWrite().put(HIDDEN, "true"); - } - if (p.getColor() != 0) { - pt.setColor(p.getColor()); - } - pt.name = p.getName(); - pt.desc = p.getDescription(); - if (p.getCategory().length() > 0) - pt.category = p.getCategory(); - if (p.getOriginObjectName().length() > 0) { - pt.comment = p.getOriginObjectName(); - } - context.getSelectedGpxHelper().addPoint(pt, gpx); + context.getSelectedGpxHelper().addPoint(p.toWpt(), gpx); } return gpx; } @@ -545,11 +531,16 @@ public class FavouritesDbHelper { public void recalculateCachedFavPoints() { - ArrayList temp = new ArrayList(); + List allPoints = new ArrayList<>(); + List personalPoints = new ArrayList<>(); for (FavoriteGroup f : favoriteGroups) { - temp.addAll(f.points); + if (f.personal) { + personalPoints.addAll(f.points); + } + allPoints.addAll(f.points); } - cachedFavoritePoints = temp; + cachedFavoritePoints = allPoints; + cachedPersonalFavoritePoints = personalPoints; } public void sortAll() { @@ -569,15 +560,27 @@ public class FavouritesDbHelper { if (cachedFavoritePoints != null) { Collections.sort(cachedFavoritePoints, favoritesComparator); } + if (cachedPersonalFavoritePoints != null) { + Collections.sort(cachedPersonalFavoritePoints, favoritesComparator); + } } public static Comparator getComparator() { final Collator collator = Collator.getInstance(); collator.setStrength(Collator.SECONDARY); - Comparator favoritesComparator = new Comparator() { + return new Comparator() { @Override public int compare(FavouritePoint o1, FavouritePoint o2) { + if (o1.isPersonal() && o2.isPersonal()) { + int x = ((PersonalFavouritePoint) o1).getType().getOrder(); + int y = ((PersonalFavouritePoint) o2).getType().getOrder(); + return Algorithms.compare(x, y); + } else if (o1.isPersonal()) { + return -1; + } else if (o2.isPersonal()) { + return 1; + } String s1 = o1.getName(); String s2 = o2.getName(); int i1 = Algorithms.extractIntegerNumber(s1); @@ -602,10 +605,8 @@ public class FavouritesDbHelper { } }; - return favoritesComparator; } - private boolean loadGPXFile(File file, Map points) { if (!file.exists()) { return false; @@ -615,20 +616,10 @@ public class FavouritesDbHelper { return false; } for (WptPt p : res.getPoints()) { - int c; - String name = p.name; - String categoryName = p.category != null ? p.category : ""; - if (name == null) { - name = ""; + FavouritePoint fp = FavouritePoint.fromWpt(context, p); + if (fp != null) { + points.put(getKey(fp), fp); } - FavouritePoint fp = new FavouritePoint(p.lat, p.lon, name, categoryName); - fp.setDescription(p.desc); - if (p.comment != null) { - fp.setOriginObjectName(p.comment); - } - fp.setColor(p.getColor(0)); - fp.setVisible(!p.getExtensionsToRead().containsKey(HIDDEN)); - points.put(getKey(fp), fp); } return true; } @@ -690,6 +681,7 @@ public class FavouritesDbHelper { group.name = p.getCategory(); group.visible = p.isVisible(); group.color = p.getColor(); + group.personal = p.isPersonal(); flatGroups.put(group.name, group); favoriteGroups.add(group); if (group.color == 0) { From ed5cea22623fb356f4543045513f530992bf68a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20G=C3=B6llnitz?= Date: Fri, 6 Dec 2019 19:35:29 +0000 Subject: [PATCH 04/61] Translated using Weblate (German) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-de/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 8719638114..c878f838c7 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -512,9 +512,9 @@ Lese zwischengespeicherte Kacheln… Nicht genügend Speicher für Index \'\'{0}\'\' Die Index-Version \'\'{0}\'\' wird nicht unterstützt - OsmAnd-Offline-Navigation ist noch experimentell und funktioniert nicht gut für Entfernungen über 20 km. + OsmAnds Offline-Navigation ist noch experimentell und funktioniert nicht gut für Entfernungen über 20 km. \n -\nAls Navigationsdienst wird temporär der Online-CloudMade-Dienst verwendet. +\nAls Navigationsdienst wird temporär der CloudMade-Online-Dienst verwendet. Angegebener Ordner konnte nicht gefunden werden. Datenordner Alle Offline-Daten der älteren App werden in der neuen weiter unterstützt. Favoriten müssen aber in der Vorversion exportiert und anschließend in die neue Version importiert werden. @@ -1823,7 +1823,7 @@ Lon %2$s Audio-Bitrate Audio-Bitrate wählen. Reitwege - Aktualisierungsintervall + Aktualisieren Nur über WLAN herunterladen Live-Aktualisierung Jetzt aktualisieren @@ -3081,7 +3081,7 @@ Abgedeckte Fläche: %1$s x %2$s Gehen, Wandern, Laufen Alle ÖPNV-Arten Schiff, Rudern, Segeln - Flugzeug, Segelflug + Flugzeug, Segelflugzeug Gesammelte Daten Skifahren Kompasslineal anzeigen @@ -3132,7 +3132,7 @@ Abgedeckte Fläche: %1$s x %2$s Max. Tempo Standardtempo Einstellungen des Standardtempos ändern - Tempogrenzwerte einstellen + Tempogrenzen einstellen Neues Profil Absturz Der letzte Start von OsmAnd ist fehlgeschlagen. Bitte helfen Sie uns, OsmAnd zu verbessern, indem Sie uns über diesen Fehler informieren. @@ -3231,7 +3231,7 @@ Abgedeckte Fläche: %1$s x %2$s dann %1$s Abonnement beenden %1$s • Spare %2$s - %1$d %2$s mit %3$s Rabatt erhalten. + Bekommen Sie %1$d %2$s mit %3$s Rabatt. %1$s für die ersten %2$s %1$s für die ersten %2$s Einstellungen für Profil: @@ -3314,7 +3314,7 @@ Abgedeckte Fläche: %1$s x %2$s Pisten-Schwierigkeitsgrad Breitenbegrenzung Geben Sie die zulässige Fahrzeugbreitenbegrenzung auf Routen an. - Vermeiden von bestimmten Routen und Straßentypen + Bestimmte Routen und Straßentypen vermeiden Nebeneinander Seilbahn Verbindung @@ -3363,10 +3363,10 @@ Abgedeckte Fläche: %1$s x %2$s Höhenlinien anzeigen Höhenlinien ausblenden Höhenlinien ein-/ausblenden - Ein Umschalter zum Ein- oder Ausblenden von Schummerung auf der Karte. - Schummerung anzeigen - Schummerung ausblenden - Schummerung ein-/ausblenden + Ein Umschalter zum Ein- oder Ausblenden der Reliefdarstellung. + Relief anzeigen + Relief ausblenden + Relief ein-/ausblenden Text-to-Speech-Engine kann nicht gestartet werden Simulation Ihrer Position mit einem aufgezeichneten GPX-Track. Profil exportieren @@ -3391,7 +3391,7 @@ Abgedeckte Fläche: %1$s x %2$s Ausschalten Neues Plugin hinzugefügt Eine Schaltfläche, um die Bildschirmmitte zum Ausgangspunkt zu machen und die Route zum Ziel zu berechnen oder einen Dialog zur Auswahl des Ziels zu öffnen, wenn sich der Zielmarker nicht auf der Karte befindet. - Zeige Knotennetzwerk-Zyklus-Routen an + Radroutennetzknoten anzeigen Kartendialog herunterladen Dialoge und Benachrichtigungen Steuern Sie Popups, Dialoge und Benachrichtigungen, die OsmAnd während der Nutzung anzeigt. From 8a20fe87df34dd46952c5cd55dd0a0da04f02c7e Mon Sep 17 00:00:00 2001 From: Mr-Update Date: Fri, 6 Dec 2019 21:36:17 +0000 Subject: [PATCH 05/61] Translated using Weblate (German) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-de/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index c878f838c7..ea98c6a4ce 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -860,7 +860,7 @@ Mitgeteilter Standort Fahrzeug vom Parkplatz abholen Warnung - Ein Eintrag zum Abholen des Fahrzeugs wurde zum Kalender hinzugefügt und kann dort bearbeitet oder entfernt werden. + Im Kalender wurde ein Abholtermin für das Fahrzeug eingetragen. Er kann dort bearbeitet oder entfernt werden. Parkzeitbegrenzung setzen Standorthinweis des geparkten Fahrzeugs löschen? Parkplatz-Marker löschen @@ -978,7 +978,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Bildgröße der Kamera festlegen Video aufzeichnen Audio aufnehmen - Standard-Steuerelement-Aktion: + Steuerelement-Standardaktion: Standard-Steuerelement-Aktion Video-Ausgabeformat: Video-Ausgabeformat @@ -986,13 +986,13 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).System-Video-App nutzen Konfigurieren von Audio- und Video-Einstellungen. Stopp - Audio/Video Einstellungen + Audio-/Video-Einstellungen Start Foto aufnehmen System App für Fotos verwenden. System-Kamera-App nutzen Auf Anfrage\? - Die Dropbox-Erweiterung macht die Synchronisierung von Tracks und Audio/Video-Notizen mit Ihrem Dropbox-Konto möglich. + Die Dropbox-Erweiterung macht die Synchronisierung von Tracks und Audio-/Video-Notizen mit Ihrem Dropbox-Konto möglich. Dropbox-Modul Reihenfolge ändern Kamera nicht verfügbar @@ -1012,7 +1012,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Foto aufnehmen Aufnahme konnte nicht abgespielt werden. Aufnahme löschen - Audio/Video-Notizen + Audio-/Video-Notizen Audio-/Video-Notizen OsmAnd-Erweiterung für Offline-Höhenlinien Entfernungsmessung @@ -1020,7 +1020,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Konfiguration der Streckenaufzeichnung. GPX Audio-Notizen - Die Audio/Video-Notiz-Erweiterung bietet die Möglichkeit, unterwegs ortsbezogene Audio-/Fotografie-/Video-Notizen aufzunehmen, entweder über eine Taste auf dem Kartenbildschirm für die aktuelle Position oder direkt über das Kontextmenü für jede beliebige Position auf der Karte. + Die Erweiterung Audio-/Video-Notizen bietet die Möglichkeit, unterwegs ortsbezogene Audio-/Fotografie-/Video-Notizen aufzunehmen, entweder über eine Taste auf dem Kartenbildschirm für die aktuelle Position oder direkt über das Kontextmenü für jede beliebige Position auf der Karte. Audio-/Video-Notizen Benutzen Sie \'Standort verwenden…\', um dem Ort eine Notiz zuzuweisen. Diese Erweiterung beinhaltet Höhenlinien und Relief-Schattierungen, die als Ergänzung zu den Standard-Offline-Karten von OsmAnd angezeigt werden können. Diese Funktionalität ist vor allem für Sportler, Wanderer, Radfahrer, Trekker und jeden interessant, der sich für das Geländerelief einer Landschaft interessiert. @@ -1030,7 +1030,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Sind Sie sicher, dass Sie Ihr Ziel (und die Zwischenziele) löschen möchten? Routen fehlerfrei berechnen. Diese Funktion ist dennoch auf kurze Entfernung begrenzt und langsam. Präzises Routing (experimentell) - Audio/Video-Daten + Audio-/Video-Daten Autobahnen bevorzugen Bevorzugen von … Autobahnen bevorzugen. @@ -2918,7 +2918,7 @@ Abgedeckte Fläche: %1$s x %2$s GPX-Tracks einblenden Aussteigen bei Zusteigen an Haltestelle - Öffentliche Verkehrsmittel für Änderungen mit OsmAnd Live aktivieren. + OsmAnd-Live-Änderungen bei öffentlichen Verkehrsmitteln aktivieren. OsmAnd Live öffentliche Verkehrsmittel Erfahren Sie in unserem Blog mehr darüber, wie OsmAnd Routen berechnet. Die Navigation im öffentlichen Nahverkehr befindet sich derzeit im Beta-Test, rechnen Sie mit Fehlern und Ungenauigkeiten. @@ -3392,7 +3392,7 @@ Abgedeckte Fläche: %1$s x %2$s Neues Plugin hinzugefügt Eine Schaltfläche, um die Bildschirmmitte zum Ausgangspunkt zu machen und die Route zum Ziel zu berechnen oder einen Dialog zur Auswahl des Ziels zu öffnen, wenn sich der Zielmarker nicht auf der Karte befindet. Radroutennetzknoten anzeigen - Kartendialog herunterladen + Dialog zum Herunterladen der Karte Dialoge und Benachrichtigungen Steuern Sie Popups, Dialoge und Benachrichtigungen, die OsmAnd während der Nutzung anzeigt. Knotennetzwerke From 7e05797987f5417268aab93bd66c04e9e7506679 Mon Sep 17 00:00:00 2001 From: Software In Interlingua Date: Sun, 8 Dec 2019 03:57:11 +0000 Subject: [PATCH 06/61] Added translation using Weblate (Interlingua) --- OsmAnd/res/values-ia/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 OsmAnd/res/values-ia/strings.xml diff --git a/OsmAnd/res/values-ia/strings.xml b/OsmAnd/res/values-ia/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/OsmAnd/res/values-ia/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From fe1df347d78bbef36eac64622272ed4bd29afa68 Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Fri, 6 Dec 2019 08:40:22 +0000 Subject: [PATCH 07/61] Translated using Weblate (Japanese) Currently translated at 99.3% (3057 of 3078 strings) --- OsmAnd/res/values-ja/strings.xml | 107 ++++++++++++++----------------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 8313413df0..3905afab51 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -129,7 +129,7 @@ OsmAnd バージョンがインストールされています。全てのオフ レンダリング速度を表示 昼固定 夜固定 - 日の出/日の入時間を参照 + 日の出/日の入 ライトセンサー 昼/夜モード切替ルールを選択します 昼/夜モード切替 @@ -168,7 +168,7 @@ MB)をダウンロードしますか? フィルタをかける種別 高解像度マップ 高精細度装置向け高解像度マップを表示します - 位置取得中 + 現在地はまだ取得できていません 公共交通機関を検索 交通機関の検索結果(目的地無し): 交通機関を検索結果(目的地は{0}): @@ -186,7 +186,7 @@ MB)をダウンロードしますか? 移動方向に従う 回転しない マップ配置: - マップ回転 + マップの向き ルート表示 お気に入りのインポートは完了しました {0}にはお気に入りを含むGPXファイルはありません @@ -368,7 +368,7 @@ POIの更新は利用できません 移動速度を基準とした自動ズームレベルを設定します。(その間マップは現在位置と同期します) マップを自動ズーム 追加設定 - マップの表示とナビゲーション設定はプロファイルごとに記憶されます。標準で使用するプロファイルを指定してください + マップ外観とナビゲーション設定は、使用プロファイルごとに記憶されます。ここでデフォルトのプロファイルを設定します。 起動時の表示プロファイル 設定 現在の経路を今すぐメモリーカードに保存します。 @@ -503,10 +503,10 @@ POIの更新は利用できません 保存済みデータから選択… マップの定義と編集… FPS デバッグ情報 - 運転する地域を選択します:米国、ヨーロッパ、イギリス、アジア、その他 + 運転する地域を選択します:アメリカ、ヨーロッパ、イギリス、アジア、その他 運転地域 日本 - 米国 + アメリカ カナダ ヨーロッパ、アジア、ラテンアメリカ&同様の国々 イギリス、インド、その他類似国 @@ -532,7 +532,7 @@ POIの更新は利用できません 最初に都市か通りを設定してください 近隣市街の道路を探す 現在地から目的地へのルート最適化のために経由地点の順序が変更されました。 - ルートを最適化して並び替え + 移動距離を最短で並べ替え OSMの変更ファイルが正常に生成されました %1$s OSMの変更のバックアップに失敗しました。 OSMの変更としてバックアップ @@ -563,7 +563,7 @@ POIの更新は利用できません あと%1$d個のファイルがダウンロード可能です フルバージョン ルートをキャンセル - ナビを停止 + ナビゲーションの停止 選択した目的地、経由地点を削除します、よろしいですか? Wi-Fiに接続されていません。現在の接続を利用してインターネットからダウンロードを行いますか? 道路名称 @@ -676,7 +676,7 @@ POIの更新は利用できません 設定でGPSを有効にしてください ログ保存サービス ルートがありません - 目的地の入れ替え + 目的地を入れ替え すでに目的地が設定されています。 目的地 終点が最寄りの道路より遠すぎます。 @@ -703,7 +703,7 @@ POIの更新は利用できません POIフィルタを作成 トランスポートモードの選択: 日の出: %1$s \n日の入: %2$s - 昼/夜の情報 + 昼/夜判別情報 描画方法の属性 マップスタイル UI設定 @@ -892,7 +892,7 @@ POIの更新は利用できません 変更を削除 非同期OSMの編集: 保存済みOSM POIとバグ - 最初にルートを検索して下さい + 最初にルート検索をしてください "計算されたルートを使用してシミュレーション " GPXファイルに保存された経路を使用してシミュレーション 選択を記憶 @@ -934,7 +934,7 @@ POIの更新は利用できません 無料版 POIの説明文を表示 北米 - 米国 + アメリカ合衆国 中米 南米 ヨーロッパ @@ -964,7 +964,7 @@ POIの更新は利用できません マップの現在地との位置同期タイミングを設定します。 ナビゲーションのみ マップの自動中心表示はナビゲーション中のみ有効です - 設定に従い、現在地をマップ中心に表示します。 + 現在地が自動的にマップ中心に表示されるようにします。 ベクターレンダラ固有のオプション オーバーレイ/アンダーレイ マップソースの設定 @@ -1110,7 +1110,7 @@ POIの更新は利用できません \nタイルマップはオンライン経由で直接取得することが可能です、また様々なサードパーティ製マップ作成ツールで作成したSQLiteデータベースをオフラインで使用するために調整することができます。(手動でOsmAndのデータフォルダにコピーする必要があります) このプラグイン経由でPOIオブジェクトの作成や変更、OSM注記の開示やコメント、記録したGPXファイルを使用しOSMの改善に貢献することが出来ます。OSM(OpenStreetMap)はコミュニティ主導で行われる、世界規模のパブリックドメイン(特定の知的財産権に影響されない)マップ作成のプロジェクトです。詳しくはhttps://openstreetmap.orgを参照してください。アプリに必要な情報を入力することでOsmAndからもいくつかの作業を直接行うことができます。積極的な参加を歓迎いたします。 ウィキペディア(オフライン) - 最終的な目的地として追加 + その後の目的地として追加 GPXファイルを選択… 目的地の設定 マップから選択 @@ -1315,7 +1315,7 @@ POIの更新は利用できません OsmAndを介してお気に入りを共有 カメラの画素数 カメラの画像サイズを設定 - 無効なフォーマット: %s + 無効な形式: %s 目的地 旅行 すべて @@ -1341,8 +1341,8 @@ POIの更新は利用できません GPXファイルへ記録される位置情報全般は、マップ画面上のGPXログウィジェットを使用してONとOFFを切り替えることが可能です。 記録間隔 常に尋ねる - 標準的な経路の記録間隔を選択します(マップ上のGPXログウィジェットで有効化) - 標準記録間隔 + 旅程ログ全般の記録間隔を選択します(マップ上のGPXログウィジェットで有効化) + ログの記録間隔 制限速度 出入国管理 料金所 @@ -1381,7 +1381,7 @@ POIの更新は利用できません 左パネル 表示 マップ設定 - 以内 + 以下は匿名ユーザーでは使用できません:↵\n- グループ作成;↵\n- サーバを利用してのグループやデバイスの同期;↵\n- ウェブサイト上の個別ダッシュボードでのグループやデバイスの管理. 匿名ユーザー %1$sとしてログインしました @@ -1820,13 +1820,13 @@ POIの更新は利用できません ダウンロードした更新分を無効にして初期状態の地図に戻せます 時間間隔の追加 選択 - 出発地と目的地の入れ替え + 出発地点と目的地の入れ替え POIアイコン 項目の削除 項目は削除されました すべて元に戻す タイプ - 出発地 + 出発地点 指定しない レポート 外部ストレージへの書き込みが許可されました。手動でアプリケーションを再起動してください。 @@ -1943,8 +1943,8 @@ POIの更新は利用できません 編集数 表示レポート geo: - 座標の形式 - 地理座標で表示される形式を指定します。 + 座標形式 + 表示される地理座標を指定の形式に変更します。 バス 鉄道 現在の経路 @@ -2241,7 +2241,7 @@ POIの更新は利用できません 表示 マップ用フォント 右側通行 - 自動 + 自動判別 OsmAndは実行中のどのメニューを開いたかの情報を収集します。ユーザーの現在地、入力した地域、閲覧情報、検索、ダウンロードなどの情報を送信することはありません。 アプリケーションの匿名使用統計情報を送信しない 起動時にメッセージを表示しない @@ -2322,24 +2322,13 @@ POIの更新は利用できません  • GPX経路情報をアプリから直接OSMにアップロードできます  • POIを追加してOSMに直接アップロードできます(オフラインの場合は後で行うことができます) " - " - OsmAndはオープンソースで積極的に開発されています。バグを報告したり、翻訳を改善したり、新しい機能をコーディングすることで、誰もがアプリケーションの開発に貢献できます。このような開発者とユーザーとのやりとりによって、プロジェクトは継続的に改善されています。プロジェクトの進捗状況は、資金調達と新しい機能のテストに大きく左右されます。 - -地図のおおよそのエリアとその品質(※注 *の数が多いほど充実しています): - • 西ヨーロッパ: **** - • 東ヨーロッパ: *** - • ロシア: *** - • 北米: *** - • 南アメリカ: ** - • アジア: ** - • 日本、韓国: *** - • 中東: ** - • アフリカ: ** - • 南極: * - - 世界中のほとんどの国の地図がダウンロード可能です! - フランス、ドイツ、メキシコ、英国、スペイン、オランダ、米国、ロシア、ブラジルなどの国の便利なナビゲーターを入手しましょう。 - " + OsmAndはオープンソースで積極的に開発されています。バグを報告したり、翻訳を改善したり、新しい機能をコーディングすることで、誰もがアプリケーションの開発に貢献できます。このような開発者とユーザーとのやりとりによって、プロジェクトは継続的に改善されています。プロジェクトの進捗状況は、資金調達と新しい機能のテストに大きく左右されます。 +\n +\n地図のおおよそのエリアとその品質(※注 *の数が多いほど充実しています): +\n • 西ヨーロッパ: ****  • 東ヨーロッパ: ***  • ロシア: ***  • 北アメリカ: ***  • 南アメリカ: **  • アジア: **  • 日本、韓国: ***  • 中東: **  • アフリカ: **  • 南極: * +\n +\n 世界中のほとんどの国の地図がダウンロード可能です! +\n フランス、ドイツ、メキシコ、イギリス、スペイン、オランダ、アメリカ、ロシア、ブラジルなどの国の便利なナビゲーターを入手しましょう。 " OsmAnd(OSM Automated Navigation Directions~自動ナビ案内)は、『無償利用可、ワールドワイド対応、高品質のOpenStreetMap(OSM)』データを使用した、地図&ナビゲーションアプリです。 \n音声と視覚による案内、POI(Point Of Interest~興味的地点)表示、GPX経路の作成と管理、等高線を使った地形情報(要プラグイン)、ドライブ、サイクリング、徒歩移動各移動手段別のモード、OSMの編集等々に対応。 \n OsmAnd+は有料のアプリケーションです。購入することで同プロジェクトの資金、新機能開発への援助となり、最新アップデートも利用可能になります。 @@ -2473,7 +2462,7 @@ POIの更新は利用できません サブフォルダ(例:2017-01)を作成して記録した月ごとに経路を保存します。 平均 書式が間違っています - + 道路 地図を表示 ルートを計算しました 往復 @@ -2484,7 +2473,7 @@ POIの更新は利用できません 出発地点を(復路の)目的地として追加します。 往復する マーカー - 座標フォーマット + 座標形式 システムで設定されたキーボードを使用 座標の入力形式を選択します。[設定]をタップすることでいつでも変更できます。 高速座標入力 @@ -2534,7 +2523,7 @@ POIの更新は利用できません 線の編集 選択地点の前に追加 選択地点の後に追加 - オプション + 設定 OsmAndは、選択したプロファイルのルートにポイントを接続します。 選択した地点をルートポイントまたは線として保存できます。 線の追加 @@ -2621,7 +2610,7 @@ POIの更新は利用できません OSMで用いられるPOIの作成や変更、OSMメモを開いたり注釈を加えたり、記録したGPXファイルの提供などがおこなえます。 通過済みにする GPXファイルに追加 - 現在 + 現在地 その他 二桁の経度を使用 経度を入力してください @@ -2646,7 +2635,7 @@ POIの更新は利用できません %1$sヶ所の座標を追加しました。ファイル名を付けて\"保存\"をタップしてください。 この通知画面のスクリーンショットを、support@osmand.netに送信してください アクションの編集 - 中間経由地点を全て消去 + 全ての経由地点を削除 経由地点を追加 トンネル 高いコントラストと最大限のディテールを持つツーリングスタイルです。 OsmAndデフォルトスタイルのすべてのオプションが含まれていますが、特に道路、パス、その他の移動方法など、可能な限り詳細に表示されます。道路タイプ間の明確な『ツーリングアトラス』の区別があります。昼、夜、屋外での使用に適しています。 @@ -2657,7 +2646,7 @@ POIの更新は利用できません GPXファイルに追加しよう GPXファイルまたは記録した経路からインポートします。 GPXファイルからインポート - 中間経由地点への到着時刻 + 中間経由地点への到着時間 検索クエリを送信しますか? OsmAnd Liveサブスクリプションに登録すると、WikipediaとWikivoyageの旅行に関した各記事をオフラインで読むことができます。 オフラインでWikipedia記事を読む @@ -2767,8 +2756,8 @@ POIの更新は利用できません 西 - 近くのルート - 以内 + 近辺のルート + ファイル名を入力して下さい。 マップインポートのエラー マップをインポートしました @@ -2806,8 +2795,8 @@ POIの更新は利用できません 駐車上限時刻 時間制限なし 記事の全文を読む - 開店時間 - 以下時間まで営業 + 以下の場所から開く + 以下の所まで開く 閉店時間 開店予定時間 営業予定時刻 @@ -2836,7 +2825,7 @@ POIの更新は利用できません お気に入りからインポートするか、マップ上でマークした地点を追加します。 ポイントの移動 寄付総額 - オフ + OFF 冬期およびスキー ツーリングビュー 海洋 @@ -2863,7 +2852,7 @@ POIの更新は利用できません どの方法でWikipedia記事を開きますか? ボタンをタップし対応する音声プロンプトを聞いて、欠落しているかなど問題の有無を確かめます 通過前に戻す - 中間経由地点までの移動時間 + 経由地点時間 • 新しい案内画面の採用: 事前に設定した自宅と職場をワンタップで目的地とするボタンの追加、「前回のルート」ショートカット、アクティブなGPX経路とマーカーのリスト、検索履歴など \n \n• 道路種別、路面素材、勾配、滑らかさの各種情報をルートの詳細下に各種情報に追加 @@ -2909,7 +2898,7 @@ POIの更新は利用できません 公共交通機関 マップ上または下のリストから、ナビゲーション中に避けたい道路を選択します: ルート案内中に表示する項目の選択 - ナビのシミュレーション + ナビゲーションのシミュレート 追跡用の経路ファイルの選択 音声案内を使用 経由地点 @@ -2974,8 +2963,8 @@ POIの更新は利用できません \n• 距離測定時に方位を表示 角度(°) ミリラジアン - 角度単位 - 方位角度の単位を変更します。 + 角度の単位 + 方位角(方位を示す角度)の単位を変更します。 ナビゲーション時に使用したくない公共交通機関を指定します: %sモード 避けたい移動手段の種類… @@ -3326,11 +3315,11 @@ POIの更新は利用できません - - + ヶ月 + ヶ月 - 三ヶ月 + 3ヶ月 無料 アラート(警告、注意)は、ナビゲーション中に画面左下に表示されます。 言語と出力 From 3fef243a855d1e81fbcf1e8fa0550ab3fc5ad216 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 9 Dec 2019 11:45:16 +0200 Subject: [PATCH 08/61] Migrating from TargetPoint to PersonalFavoritePoint --- OsmAnd/res/values/strings.xml | 1 + .../src/net/osmand/data/FavouritePoint.java | 3 +- .../osmand/data/PersonalFavouritePoint.java | 8 +- .../src/net/osmand/plus/AppInitializer.java | 4 + .../net/osmand/plus/FavouritesDbHelper.java | 226 +++++++++++++++++- .../src/net/osmand/plus/OsmandSettings.java | 16 ++ .../net/osmand/plus/TargetPointsHelper.java | 130 +--------- .../activities/FavoritesTreeFragment.java | 77 ++++-- .../plus/base/FavoriteImageDrawable.java | 41 +++- .../editors/SelectCategoryDialogFragment.java | 11 +- .../FavouritesBottomSheetMenuFragment.java | 9 +- .../ParkingTypeBottomSheetDialogFragment.java | 4 + .../AddPointBottomSheetDialog.java | 79 +++--- .../MapRouteInfoMenu.java | 19 +- .../cards/HomeWorkCard.java | 24 +- .../search/listitems/QuickSearchListItem.java | 2 + 16 files changed, 453 insertions(+), 201 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 48bca6eed4..7026a30e4c 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,7 @@ Thx - Hardy --> + %1$s• %2$s Personal Add new profile \'%1$s\'? Include heading diff --git a/OsmAnd/src/net/osmand/data/FavouritePoint.java b/OsmAnd/src/net/osmand/data/FavouritePoint.java index a50ccdf65d..116e71dc1e 100644 --- a/OsmAnd/src/net/osmand/data/FavouritePoint.java +++ b/OsmAnd/src/net/osmand/data/FavouritePoint.java @@ -5,7 +5,6 @@ import java.io.Serializable; import android.content.Context; import android.support.annotation.NonNull; -import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.WptPt; public class FavouritePoint implements Serializable, LocationPoint { @@ -51,7 +50,7 @@ public class FavouritePoint implements Serializable, LocationPoint { } public PointDescription getPointDescription() { - return new PointDescription(PointDescription.POINT_TYPE_FAVORITE, name); + return new PointDescription(PointDescription.POINT_TYPE_FAVORITE, getName()); } public boolean isPersonal() { diff --git a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java index def05ab3a0..ae9610e0aa 100644 --- a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java +++ b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java @@ -4,7 +4,6 @@ import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.StringRes; -import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.WptPt; import net.osmand.plus.R; @@ -57,6 +56,11 @@ public class PersonalFavouritePoint extends FavouritePoint { this(ctx, PointType.valueOf(typeName), latitude, longitude); } + @Override + public PointDescription getPointDescription() { + return new PointDescription(PointDescription.POINT_TYPE_LOCATION, getDescription()); + } + public PersonalFavouritePoint(PersonalFavouritePoint favouritePoint) { super(favouritePoint); this.type = favouritePoint.type; @@ -95,7 +99,7 @@ public class PersonalFavouritePoint extends FavouritePoint { public WptPt toWpt() { WptPt pt = super.toWpt(); pt.getExtensionsToWrite().put(PERSONAL, "true"); - pt.name = type.name; + pt.name = type.toString(); pt.desc = getDescription(); return pt; } diff --git a/OsmAnd/src/net/osmand/plus/AppInitializer.java b/OsmAnd/src/net/osmand/plus/AppInitializer.java index da84471693..a93ecf05ac 100644 --- a/OsmAnd/src/net/osmand/plus/AppInitializer.java +++ b/OsmAnd/src/net/osmand/plus/AppInitializer.java @@ -196,6 +196,10 @@ public class AppInitializer implements IProgress { app.getSettings().migratePreferences(); startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_5).commit(); } + if (prevAppVersion < VERSION_3_5 || Version.getAppVersion(app).equals("3.5.3")) { + app.getSettings().migrateHomeWorkParkingToFavorites(); + startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_5).commit(); + } startPrefs.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit(); appVersionChanged = true; } diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 738bf4bbfd..93cec04c6d 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -12,6 +12,7 @@ import net.osmand.data.LatLon; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.WptPt; import net.osmand.data.PersonalFavouritePoint; +import net.osmand.data.PointDescription; import net.osmand.plus.MapMarkersHelper.MapMarkersGroup; import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; @@ -32,8 +33,16 @@ import java.util.List; import java.util.Map; import java.util.Set; +import static net.osmand.data.PersonalFavouritePoint.PointType.HOME; +import static net.osmand.data.PersonalFavouritePoint.PointType.PARKING; +import static net.osmand.data.PersonalFavouritePoint.PointType.WORK; + public class FavouritesDbHelper { + private GeocodingLookupService.AddressLookupRequest workPointRequest; + private GeocodingLookupService.AddressLookupRequest homePointRequest; + private GeocodingLookupService.AddressLookupRequest parkingPointRequest; + public interface FavoritesListener { void onFavoritesLoaded(); } @@ -106,6 +115,74 @@ public class FavouritesDbHelper { }); } + public boolean hasWorkPoint() { + return hasPersonalPoint(WORK); + } + + public boolean hasHomePoint() { + return hasPersonalPoint(HOME); + } + + public boolean hasParkingPoint() { + return hasPersonalPoint(PARKING); + } + + private boolean hasPersonalPoint(PersonalFavouritePoint.PointType pointType) { + boolean hasPersonalPoint = false; + for (FavouritePoint fp : cachedPersonalFavoritePoints) { + if (fp instanceof PersonalFavouritePoint) { + if (((PersonalFavouritePoint) fp).getType() == pointType) { + hasPersonalPoint = true; + } + } + } + return hasPersonalPoint; + } + + public FavouritePoint getWorkPoint() { + return getPersonalPoint(WORK); + } + + public FavouritePoint getHomePoint() { + return getPersonalPoint(HOME); + } + + public FavouritePoint getParkingPoint() { + return getPersonalPoint(PARKING); + } + + private FavouritePoint getPersonalPoint(PersonalFavouritePoint.PointType pointType) { + FavouritePoint personalPoint = null; + for (FavouritePoint fp : cachedPersonalFavoritePoints) { + if (fp instanceof PersonalFavouritePoint) { + if (((PersonalFavouritePoint) fp).getType() == pointType) { + personalPoint = fp; + } + } + } + return personalPoint; + } + + public LatLon getWorkPointLatLon() { + LatLon workPointLatLon; + if (hasWorkPoint()) { + workPointLatLon = new LatLon(getWorkPoint().getLatitude(), getWorkPoint().getLongitude()); + } else { + workPointLatLon = null; + } + return workPointLatLon; + } + + public LatLon getHomePointLatLon() { + LatLon homePointLatLon; + if (hasHomePoint()) { + homePointLatLon = new LatLon(getHomePoint().getLatitude(), getHomePoint().getLongitude()); + } else { + homePointLatLon = null; + } + return homePointLatLon; + } + public boolean isFavoritesLoaded() { return favoritesLoaded; } @@ -201,6 +278,48 @@ public class FavouritesDbHelper { return true; } + public void setHomePoint(@NonNull LatLon latLon, @NonNull PointDescription description) { + if (hasHomePoint()) { + getHomePoint().setDescription(description.getName()); + editFavourite(getHomePoint(), latLon.getLatitude(), latLon.getLongitude()); + } else { + FavouritePoint cachedHomePoint = new PersonalFavouritePoint(context, HOME.toString(), + latLon.getLatitude(), latLon.getLongitude()); + cachedHomePoint.setDescription(description.getName()); + cachedPersonalFavoritePoints.add(cachedHomePoint); + addFavourite(cachedHomePoint); + } + lookupAllPersonalPointsAddresses(); + } + + public void setWorkPoint(@NonNull LatLon latLon, @NonNull PointDescription description) { + if (hasWorkPoint()) { + getWorkPoint().setDescription(description.getName()); + editFavourite(getWorkPoint(), latLon.getLatitude(), latLon.getLongitude()); + } else { + FavouritePoint cachedWorkPoint = new PersonalFavouritePoint(context, WORK.toString(), + latLon.getLatitude(), latLon.getLongitude()); + cachedWorkPoint.setDescription(description.getName()); + cachedPersonalFavoritePoints.add(cachedWorkPoint); + addFavourite(cachedWorkPoint); + } + lookupAllPersonalPointsAddresses(); + } + + public void setParkingPoint(@NonNull LatLon latLon, @NonNull PointDescription description) { + if (hasParkingPoint()) { + getParkingPoint().setDescription(description.getName()); + editFavourite(getParkingPoint(), latLon.getLatitude(), latLon.getLongitude()); + } else { + FavouritePoint cachedParkingPoint = new PersonalFavouritePoint(context, PARKING.toString(), + latLon.getLatitude(), latLon.getLongitude()); + cachedParkingPoint.setDescription(description.getName()); + cachedPersonalFavoritePoints.add(cachedParkingPoint); + addFavourite(cachedParkingPoint); + } + lookupAllPersonalPointsAddresses(); + } + public boolean addFavourite(FavouritePoint p) { return addFavourite(p, true); } @@ -227,6 +346,91 @@ public class FavouritesDbHelper { return true; } + private void lookupAllPersonalPointsAddresses() { + if (!context.isApplicationInitializing()) { + lookupAddressForHomePoint(); + lookupAddressForWorkPoint(); + lookupAddressForParkingPoint(); + } + } + + void lookupAddressForWorkPoint() { + final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); + final FavouritePoint workPoint = getWorkPoint(); + if (workPoint != null && (workPointRequest == null || + !workPointRequest.getLatLon().equals(new LatLon(workPoint.getLatitude(), workPoint.getLongitude())))) { + cancelWorkPointAddressRequest(); + workPointRequest = new GeocodingLookupService.AddressLookupRequest( + new LatLon(workPoint.getLatitude(), workPoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { + @Override + public void geocodingDone(String address) { + workPoint.setDescription(address); + targetPointsHelper.updateRouteAndRefresh(false); + } + }, null); + context.getGeocodingLookupService().lookupAddress(workPointRequest); + } + } + + void lookupAddressForHomePoint() { + final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); + final FavouritePoint homePoint = getHomePoint(); + if (homePoint != null && (homePointRequest == null || + !homePointRequest.getLatLon().equals(new LatLon(homePoint.getLatitude(), homePoint.getLongitude())))) { + cancelHomePointAddressRequest(); + homePointRequest = new GeocodingLookupService.AddressLookupRequest( + new LatLon(homePoint.getLatitude(), homePoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { + @Override + public void geocodingDone(String address) { + homePointRequest = null; + homePoint.setDescription(address); + targetPointsHelper.updateRouteAndRefresh(false); + } + }, null); + context.getGeocodingLookupService().lookupAddress(homePointRequest); + } + } + + void lookupAddressForParkingPoint() { + final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); + final FavouritePoint parkingPoint = getParkingPoint(); + if (parkingPoint != null && (parkingPointRequest == null || + !parkingPointRequest.getLatLon().equals(new LatLon(parkingPoint.getLatitude(), parkingPoint.getLongitude())))) { + cancelParkingPointAddressRequest(); + parkingPointRequest = new GeocodingLookupService.AddressLookupRequest( + new LatLon(parkingPoint.getLatitude(), parkingPoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { + @Override + public void geocodingDone(String address) { + parkingPointRequest = null; + parkingPoint.setDescription(address); + targetPointsHelper.updateRouteAndRefresh(false); + } + }, null); + context.getGeocodingLookupService().lookupAddress(parkingPointRequest); + } + } + + private void cancelHomePointAddressRequest() { + if (homePointRequest != null) { + context.getGeocodingLookupService().cancel(homePointRequest); + homePointRequest = null; + } + } + + private void cancelParkingPointAddressRequest() { + if (parkingPointRequest != null) { + context.getGeocodingLookupService().cancel(parkingPointRequest); + parkingPointRequest = null; + } + } + + private void cancelWorkPointAddressRequest() { + if (workPointRequest != null) { + context.getGeocodingLookupService().cancel(workPointRequest); + workPointRequest = null; + } + } + public static AlertDialog.Builder checkDuplicates(FavouritePoint p, FavouritesDbHelper fdb, Context uiContext) { boolean emoticons = false; String index = ""; @@ -476,6 +680,26 @@ public class FavouritesDbHelper { return fp; } + public List getNonPersonalVisibleFavouritePoints() { + List fp = new ArrayList<>(); + for (FavouritePoint p : getNonPersonalFavouritePoints()) { + if (p.isVisible()) { + fp.add(p); + } + } + return fp; + } + + public List getNonPersonalFavouritePoints() { + List fp = new ArrayList<>(); + for (FavouritePoint p : cachedFavoritePoints) { + if (!p.isPersonal()) { + fp.add(p); + } + } + return fp; + } + @Nullable public FavouritePoint getVisibleFavByLatLon(@NonNull LatLon latLon) { for (FavouritePoint fav : cachedFavoritePoints) { @@ -550,7 +774,7 @@ public class FavouritesDbHelper { @Override public int compare(FavoriteGroup lhs, FavoriteGroup rhs) { - return collator.compare(lhs.name, rhs.name); + return lhs.personal ? -1 : rhs.personal ? 1 : collator.compare(lhs.name, rhs.name); } }); Comparator favoritesComparator = getComparator(); diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index cdc271044e..93c0eadd8b 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -259,6 +259,16 @@ public class OsmandSettings { } } + void migrateHomeWorkParkingToFavorites() { + FavouritesDbHelper favorites = ctx.getFavorites(); + if (getHomePoint() != null) { + favorites.setHomePoint(getHomePoint(), getHomePointDescription()); + } + if (getWorkPoint() != null) { + favorites.setWorkPoint(getWorkPoint(), getWorkPointDescription()); + } + } + public Object getProfilePreferences(ApplicationMode mode) { return settingsAPI.getPreferenceObject(getSharedPreferencesName(mode)); } @@ -2361,6 +2371,12 @@ public class OsmandSettings { edit.commit(); objectToShow = toShow; if (addToHistory) { + if (pointDescription.isFavorite()) { +// int localeNameID = PersonalFavouritePoint.PersonalPoint.getLocalName(pointDescription.getName()); +// if (localeNameID != 0) { +// pointDescription.setName(ctx.getString(localeNameID)); +// } + } SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, pointDescription); } } diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 8dbbe8ee22..418b94968d 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -31,15 +31,12 @@ public class TargetPointsHelper { private List> listeners = new ArrayList<>(); private List pointListeners = new ArrayList<>(); private OsmandApplication ctx; - private TargetPoint homePoint = null; - private TargetPoint workPoint = null; private AddressLookupRequest startPointRequest; private AddressLookupRequest targetPointRequest; - private AddressLookupRequest homePointRequest; - private AddressLookupRequest workPointRequest; private AddressLookupRequest myLocationPointRequest; + public interface TargetPointChangedListener { void onTargetPointChanged(TargetPoint targetPoint); } @@ -153,13 +150,15 @@ public class TargetPointsHelper { } public void lookupAddessAll() { + FavouritesDbHelper favorites = ctx.getFavorites(); lookupAddressForPointToNavigate(); lookupAddessForStartPoint(); for (TargetPoint targetPoint : intermediatePoints) { lookupAddressForIntermediatePoint(targetPoint); } - lookupAddressForHomePoint(); - lookupAddressForWorkPoint(); + favorites.lookupAddressForHomePoint(); + favorites.lookupAddressForWorkPoint(); + favorites.lookupAddressForParkingPoint(); lookupAddressForMyLocationPoint(); } @@ -177,25 +176,11 @@ public class TargetPointsHelper { PointDescription.deserializeFromString(desc.get(i), ips.get(i)), i); intermediatePoints.add(targetPoint); } - homePoint = settings.getHomePoint() != null ? - TargetPoint.create(settings.getHomePoint(), settings.getHomePointDescription()) : null; - workPoint = settings.getWorkPoint() != null ? - TargetPoint.create(settings.getWorkPoint(), settings.getWorkPointDescription()) : null; - if (!ctx.isApplicationInitializing()) { lookupAddessAll(); } } - private void readHomeWorkFromSettings() { - homePoint = TargetPoint.create(settings.getHomePoint(), settings.getHomePointDescription()); - workPoint = TargetPoint.create(settings.getWorkPoint(), settings.getWorkPointDescription()); - if (!ctx.isApplicationInitializing()) { - lookupAddressForHomePoint(); - lookupAddressForWorkPoint(); - } - } - private void readMyLocationPointFromSettings() { myLocationToStart = TargetPoint.create(settings.getMyLocationToStart(), settings.getMyLocationToStartDescription()); if (!ctx.isApplicationInitializing()) { @@ -267,52 +252,10 @@ public class TargetPointsHelper { } } - private void lookupAddressForHomePoint() { - if (homePoint != null && homePoint.isSearchingAddress(ctx) - && (homePointRequest == null || !homePointRequest.getLatLon().equals(homePoint.point))) { - cancelHomePointAddressRequest(); - homePointRequest = new AddressLookupRequest(homePoint.point, new GeocodingLookupService.OnAddressLookupResult() { - @Override - public void geocodingDone(String address) { - homePointRequest = null; - if (homePoint != null) { - homePoint.pointDescription.setName(address); - settings.setHomePoint(homePoint.point.getLatitude(), homePoint.point.getLongitude(), - homePoint.pointDescription); - updateRouteAndRefresh(false); - updateTargetPoint(homePoint); - } - } - }, null); - ctx.getGeocodingLookupService().lookupAddress(homePointRequest); - } - } - - private void lookupAddressForWorkPoint() { - if (workPoint != null && workPoint.isSearchingAddress(ctx) - && (workPointRequest == null || !workPointRequest.getLatLon().equals(workPoint.point))) { - cancelWorkPointAddressRequest(); - workPointRequest = new AddressLookupRequest(workPoint.point, new GeocodingLookupService.OnAddressLookupResult() { - @Override - public void geocodingDone(String address) { - workPointRequest = null; - if (workPoint != null) { - workPoint.pointDescription.setName(address); - settings.setWorkPoint(workPoint.point.getLatitude(), workPoint.point.getLongitude(), - workPoint.pointDescription); - updateRouteAndRefresh(false); - updateTargetPoint(workPoint); - } - } - }, null); - ctx.getGeocodingLookupService().lookupAddress(workPointRequest); - } - } - private void lookupAddressForMyLocationPoint() { if (myLocationToStart != null && myLocationToStart.isSearchingAddress(ctx) && (myLocationPointRequest == null || !myLocationPointRequest.getLatLon().equals(myLocationToStart.point))) { - cancelWorkPointAddressRequest(); + cancelMyLocationPointAddressRequest(); myLocationPointRequest = new AddressLookupRequest(myLocationToStart.point, new GeocodingLookupService.OnAddressLookupResult() { @Override public void geocodingDone(String address) { @@ -350,46 +293,6 @@ public class TargetPointsHelper { return myLocationToStart; } - public PointDescription getStartPointDescription(){ - return settings.getStartPointDescription(); - } - - public TargetPoint getHomePoint() { - return homePoint; - } - - public TargetPoint getWorkPoint() { - return workPoint; - } - - public void setHomePoint(LatLon latLon, PointDescription name) { - final PointDescription pointDescription; - if (name == null) { - pointDescription = new PointDescription(PointDescription.POINT_TYPE_LOCATION, ""); - } else { - pointDescription = name; - } - if (pointDescription.isLocation() && Algorithms.isEmpty(pointDescription.getName())) { - pointDescription.setName(PointDescription.getSearchAddressStr(ctx)); - } - settings.setHomePoint(latLon.getLatitude(), latLon.getLongitude(), pointDescription); - readHomeWorkFromSettings(); - } - - public void setWorkPoint(LatLon latLon, PointDescription name) { - final PointDescription pointDescription; - if (name == null) { - pointDescription = new PointDescription(PointDescription.POINT_TYPE_LOCATION, ""); - } else { - pointDescription = name; - } - if (pointDescription.isLocation() && Algorithms.isEmpty(pointDescription.getName())) { - pointDescription.setName(PointDescription.getSearchAddressStr(ctx)); - } - settings.setWorkPoint(latLon.getLatitude(), latLon.getLongitude(), pointDescription); - readHomeWorkFromSettings(); - } - public List getIntermediatePoints() { return intermediatePoints; } @@ -764,6 +667,13 @@ public class TargetPointsHelper { } } + private void cancelMyLocationPointAddressRequest() { + if (startPointRequest != null) { + ctx.getGeocodingLookupService().cancel(startPointRequest); + startPointRequest = null; + } + } + private void cancelTargetPointAddressRequest() { if (targetPointRequest != null) { ctx.getGeocodingLookupService().cancel(targetPointRequest); @@ -771,20 +681,6 @@ public class TargetPointsHelper { } } - private void cancelHomePointAddressRequest() { - if (homePointRequest != null) { - ctx.getGeocodingLookupService().cancel(homePointRequest); - homePointRequest = null; - } - } - - private void cancelWorkPointAddressRequest() { - if (workPointRequest != null) { - ctx.getGeocodingLookupService().cancel(workPointRequest); - workPointRequest = null; - } - } - private void cancelAllIntermediatePointsAddressRequests() { List intermediatePointsLatLon = getIntermediatePointsLatLon(); for (LatLon latLon : intermediatePointsLatLon) { diff --git a/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java b/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java index 0890a7ea97..6d11ce2353 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java @@ -37,6 +37,7 @@ import android.widget.Toast; import net.osmand.AndroidUtils; import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; +import net.osmand.data.PersonalFavouritePoint; import net.osmand.data.PointDescription; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; @@ -44,6 +45,7 @@ import net.osmand.plus.FavouritesDbHelper.FavoritesListener; import net.osmand.plus.MapMarkersHelper; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.base.FavoriteImageDrawable; @@ -52,6 +54,7 @@ import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.FontCache; import net.osmand.plus.myplaces.FavoritesActivity; import net.osmand.plus.myplaces.FavoritesFragmentStateHolder; +import net.osmand.plus.parkingpoint.ParkingPositionPlugin; import net.osmand.util.Algorithms; import net.osmand.util.MapUtils; @@ -739,6 +742,8 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen private Set filter; public void synchronizeGroups() { + ParkingPositionPlugin plugin = OsmandPlugin.getEnabledPlugin(ParkingPositionPlugin.class); + boolean parkingPluginEnable = plugin != null; favoriteGroups.clear(); groups.clear(); List disablesGroups = new ArrayList<>(); @@ -747,14 +752,37 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen for (FavoriteGroup key : gs) { boolean empty = true; if (flt == null || flt.contains(key)) { - empty = false; - favoriteGroups.put(key, new ArrayList<>(key.points)); + if (key.name.equals(PersonalFavouritePoint.PERSONAL)) { + ArrayList list = new ArrayList<>(); + for (FavouritePoint p : key.points) { + if (p.getName().equals(PersonalFavouritePoint.PointType.PARKING.name())) { + if (parkingPluginEnable) { + list.add(p); + empty = false; + } + } else { + list.add(p); + empty = false; + } + } + favoriteGroups.put(key, list); + } else { + empty = false; + favoriteGroups.put(key, new ArrayList<>(key.points)); + } } else { ArrayList list = new ArrayList<>(); for (FavouritePoint p : key.points) { if (flt.contains(p)) { - list.add(p); - empty = false; + if (p.getName().equals(PersonalFavouritePoint.PointType.PARKING.name())) { + if (parkingPluginEnable) { + list.add(p); + empty = false; + } + } else { + list.add(p); + empty = false; + } } } favoriteGroups.put(key, list); @@ -829,9 +857,11 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen int disabledColor = light ? R.color.text_color_secondary_light : R.color.text_color_secondary_dark; row.findViewById(R.id.group_divider).setVisibility(groupPosition == 0 ? View.GONE : View.VISIBLE); int color = model.color == 0 || model.color == Color.BLACK ? getResources().getColor(R.color.color_favorite) : model.color; - setCategoryIcon(app, app.getUIUtilities().getPaintedIcon( - R.drawable.ic_action_fav_dark, visible ? (color | 0xff000000) : getResources().getColor(disabledColor)), - groupPosition, isExpanded, row, light); + if (!model.personal) { + setCategoryIcon(app, app.getUIUtilities().getPaintedIcon( + R.drawable.ic_action_fav_dark, visible ? (color | 0xff000000) : getResources().getColor(disabledColor)), + groupPosition, isExpanded, row, light); + } adjustIndicator(app, groupPosition, isExpanded, row, light); TextView label = (TextView) row.findViewById(R.id.category_name); label.setTextColor(getResources().getColor(visible ? enabledColor : disabledColor)); @@ -879,16 +909,18 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen } final View ch = row.findViewById(R.id.options); if (!selectionMode) { - ((ImageView) ch).setImageDrawable(getMyApplication().getUIUtilities().getThemedIcon(R.drawable.ic_overflow_menu_white)); - ch.setVisibility(View.VISIBLE); - ch.setContentDescription(getString(R.string.shared_string_settings)); - ch.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - EditFavoriteGroupDialogFragment.showInstance(getChildFragmentManager(), model.name); - } + if (!model.personal) { + ((ImageView) ch).setImageDrawable(getMyApplication().getUIUtilities().getThemedIcon(R.drawable.ic_overflow_menu_white)); + ch.setVisibility(View.VISIBLE); + ch.setContentDescription(getString(R.string.shared_string_settings)); + ch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EditFavoriteGroupDialogFragment.showInstance(getChildFragmentManager(), model.name); + } - }); + }); + } } else { ch.setVisibility(View.GONE); } @@ -933,8 +965,6 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen } }); } - icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), - visible ? model.getColor() : getResources().getColor(disabledIconColor), false)); LatLon lastKnownMapLocation = getMyApplication().getSettings().getLastKnownMapLocation(); int dist = (int) (MapUtils.getDistance(model.getLatitude(), model.getLongitude(), lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude())); @@ -943,6 +973,17 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen name.setTypeface(Typeface.DEFAULT, visible ? Typeface.NORMAL : Typeface.ITALIC); name.setTextColor(getResources().getColor(visible ? enabledColor : disabledColor)); distanceText.setText(distance); + if (model instanceof PersonalFavouritePoint) { + String distanceWithAddress = String.format(getString(R.string.distance_and_address), distance, model.getDescription() != null ? model.getDescription() : ""); + distanceText.setText(distanceWithAddress); + icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), + visible ? model.getColor() : getResources().getColor(disabledIconColor), false, + ((PersonalFavouritePoint) model).getType().getOrder() - 1)); + name.setText((model.getName())); + } else { + icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), + visible ? model.getColor() : getResources().getColor(disabledIconColor), false)); + } if (visible) { distanceText.setTextColor(getResources().getColor(R.color.color_distance)); } else { diff --git a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java index c741dacd6e..80bb6d8cf8 100644 --- a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java +++ b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java @@ -9,21 +9,27 @@ import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Paint.Style; +import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; import android.support.v4.content.res.ResourcesCompat; +import net.osmand.data.PersonalFavouritePoint; import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; import java.util.TreeMap; public class FavoriteImageDrawable extends Drawable { + private static final int MAX_PERSONAL_POINT = PersonalFavouritePoint.PointType.values().length; private boolean withShadow; private boolean synced; + private int position; private boolean history; private Bitmap favIcon; private Bitmap favBackground; @@ -38,11 +44,20 @@ public class FavoriteImageDrawable extends Drawable { private Paint paintInnerCircle = new Paint(); private ColorFilter colorFilter; private ColorFilter grayFilter; + private Drawable[] personalPointBitmaps; public FavoriteImageDrawable(Context ctx, int color, boolean withShadow, boolean synced) { this.withShadow = withShadow; this.synced = synced; Resources res = ctx.getResources(); + personalPointBitmaps = new Drawable[]{ + UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, R.drawable.ic_action_home_dark, null), + ContextCompat.getColor(ctx, R.color.icon_color_default_light)), + UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, R.drawable.ic_action_work, null), + ContextCompat.getColor(ctx, R.color.icon_color_default_light)), + UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, R.drawable.ic_action_parking_dark, null), + ContextCompat.getColor(ctx, R.color.icon_color_default_light)) + }; int col = color == 0 || color == Color.BLACK ? res.getColor(R.color.color_favorite) : color; favIcon = BitmapFactory.decodeResource(res, R.drawable.map_favorite); favBackground = BitmapFactory.decodeResource(res, R.drawable.map_white_favorite_shield); @@ -57,6 +72,11 @@ public class FavoriteImageDrawable extends Drawable { grayFilter = new PorterDuffColorFilter(res.getColor(R.color.color_favorite_gray), PorterDuff.Mode.MULTIPLY); } + public FavoriteImageDrawable(Context ctx, int color, boolean withShadow, boolean synced, int position) { + this(ctx, color, withShadow, synced); + this.position = position; + } + private void initSimplePaint(Paint paint, int color) { paint.setAntiAlias(true); paint.setStyle(Style.FILL_AND_STROKE); @@ -71,6 +91,9 @@ public class FavoriteImageDrawable extends Drawable { //bs.inset((int) (4 * density), (int) (4 * density)); bs.inset(bs.width() / 4, bs.height() / 4); listDrawable.setBounds(bs); + for (Drawable drawable : personalPointBitmaps) { + drawable.setBounds(bounds); + } } } @@ -96,6 +119,8 @@ public class FavoriteImageDrawable extends Drawable { } else if (withShadow) { canvas.drawBitmap(favBackground, bs.exactCenterX() - favBackground.getWidth() / 2f, bs.exactCenterY() - favBackground.getHeight() / 2f, paintBackground); canvas.drawBitmap(favIcon, bs.exactCenterX() - favIcon.getWidth() / 2f, bs.exactCenterY() - favIcon.getHeight() / 2f, paintIcon); + } else if (position < MAX_PERSONAL_POINT) { + personalPointBitmaps[position].draw(canvas); } else { int min = Math.min(bs.width(), bs.height()); int r = (min * 4 / 10); @@ -117,7 +142,7 @@ public class FavoriteImageDrawable extends Drawable { @Override public int getOpacity() { - return 0; + return PixelFormat.UNKNOWN; } @Override @@ -132,23 +157,27 @@ public class FavoriteImageDrawable extends Drawable { private static TreeMap cache = new TreeMap<>(); - private static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, boolean synced) { + public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, boolean synced, int position) { color = color | 0xff000000; - int hash = (color << 2) + (withShadow ? 1 : 0) + (synced ? 3 : 0); + int hash = (color << 3) + (withShadow ? 1 : 0) + (synced ? 3 : 0) + (position + 4); FavoriteImageDrawable drawable = cache.get(hash); if (drawable == null) { - drawable = new FavoriteImageDrawable(a, color, withShadow, synced); + drawable = new FavoriteImageDrawable(a, color, withShadow, synced, position); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); cache.put(hash, drawable); } return drawable; } + public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, int position) { + return getOrCreate(a, color, withShadow, false, position); + } + public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow) { - return getOrCreate(a, color, withShadow, false); + return getOrCreate(a, color, withShadow, false, MAX_PERSONAL_POINT); } public static FavoriteImageDrawable getOrCreateSyncedIcon(Context a, int color) { - return getOrCreate(a, color, false, true); + return getOrCreate(a, color, false, true, MAX_PERSONAL_POINT); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java index 60dd7caf63..1375247453 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java @@ -17,7 +17,6 @@ import android.widget.LinearLayout; import net.osmand.AndroidUtils; import net.osmand.plus.FavouritesDbHelper; import net.osmand.GPXUtilities.GPXFile; -import net.osmand.GPXUtilities.WptPt; import net.osmand.plus.UiUtilities; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; @@ -79,14 +78,18 @@ public class SelectCategoryDialogFragment extends DialogFragment { if (gpxFile != null) { if (gpxCategories != null) { for (Map.Entry e : gpxCategories.entrySet()) { - String categoryName = e.getKey(); - addCategory(activity, ll, categoryName, e.getValue()); + if (!e.getKey().equals(getContext().getString(R.string.personal_category_name))) { + String categoryName = e.getKey(); + addCategory(activity, ll, categoryName, e.getValue()); + } } } } else { List gs = helper.getFavoriteGroups(); for (final FavouritesDbHelper.FavoriteGroup category : gs) { - addCategory(activity, ll, category.name, category.color); + if (!category.personal) { + addCategory(activity, ll, category.name, category.color); + } } } View itemView = activity.getLayoutInflater().inflate(R.layout.favorite_category_dialog_item, null); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java index 3ba926d0d3..cb415606d6 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java @@ -125,9 +125,9 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag private void loadFavorites() { favouritePoints.clear(); - favouritePoints.addAll(getMyApplication().getFavorites().getVisibleFavouritePoints()); + favouritePoints.addAll(getMyApplication().getFavorites().getNonPersonalVisibleFavouritePoints()); if (favouritePoints.isEmpty()) { - favouritePoints.addAll(getMyApplication().getFavorites().getFavouritePoints()); + favouritePoints.addAll(getMyApplication().getFavorites().getNonPersonalFavouritePoints()); } } @@ -142,6 +142,7 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag private void selectFavorite(FavouritePoint point) { TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper(); + FavouritesDbHelper favorites = getMyApplication().getFavorites(); LatLon ll = new LatLon(point.getLatitude(), point.getLongitude()); switch (pointType) { case START: @@ -154,10 +155,10 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag targetPointsHelper.navigateToPoint(ll, true, targetPointsHelper.getIntermediatePoints().size(), point.getPointDescription()); break; case HOME: - targetPointsHelper.setHomePoint(ll, point.getPointDescription()); + favorites.setHomePoint(ll, point.getPointDescription()); break; case WORK: - targetPointsHelper.setWorkPoint(ll, point.getPointDescription()); + favorites.setWorkPoint(ll, point.getPointDescription()); break; } MapRouteInfoMenu routeMenu = getMapRouteInfoMenu(); diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java index eea40c96be..9281b2aaf1 100644 --- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java @@ -4,6 +4,8 @@ import android.app.Dialog; import android.os.Bundle; import android.view.View; +import net.osmand.data.PersonalFavouritePoint; +import net.osmand.data.PointDescription; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; @@ -72,6 +74,8 @@ public class ParkingTypeBottomSheetDialogFragment extends MenuBottomSheetDialogF plugin.showContextMenuIfNeeded(mapActivity, true); mapActivity.refreshMap(); } + mapActivity.getMyApplication().getFavorites().setParkingPoint(plugin.getParkingPosition(), + new PointDescription(PointDescription.POINT_TYPE_FAVORITE, PersonalFavouritePoint.PointType.PARKING.name())); } dismiss(); } diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java index 46142aa692..4382689c07 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java @@ -25,6 +25,7 @@ import net.osmand.AndroidUtils; import net.osmand.Location; import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; +import net.osmand.data.PersonalFavouritePoint; import net.osmand.data.PointDescription; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.MapMarkersHelper; @@ -35,6 +36,7 @@ import net.osmand.plus.R; import net.osmand.plus.TargetPointsHelper; import net.osmand.plus.TargetPointsHelper.TargetPoint; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.base.FavoriteImageDrawable; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.HorizontalRecyclerBottomSheetItem; @@ -249,11 +251,11 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { break; case HOME: app.showShortToastMessage(R.string.add_intermediate_point); - targetPointsHelper.setHomePoint(ll, null); + app.getFavorites().setHomePoint(ll, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); break; case WORK: app.showShortToastMessage(R.string.add_intermediate_point); - targetPointsHelper.setWorkPoint(ll, null); + app.getFavorites().setWorkPoint(ll, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); break; } } else if (pointType == PointType.START) { @@ -358,17 +360,24 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { private void loadFavoritesItems(List items, FavouritesDbHelper helper) { items.clear(); - addMainScrollItems(items); - items.addAll(helper.getVisibleFavouritePoints()); + addMainScrollItems(items, helper); + items.addAll(helper.getNonPersonalVisibleFavouritePoints()); if (items.isEmpty()) { - items.addAll(helper.getFavouritePoints()); + items.addAll(helper.getNonPersonalFavouritePoints()); } } - private void addMainScrollItems(List items) { + private void addMainScrollItems(List items, FavouritesDbHelper favorites) { items.add(FAVORITES); - items.add(PointType.HOME); - items.add(PointType.WORK); + if (favorites.hasHomePoint()) { + items.add(PointType.HOME); + } + if (favorites.hasWorkPoint()) { + items.add(PointType.WORK); + } + if (favorites.hasParkingPoint()) { + items.add(PointType.PARKING); + } } private void createFavoritesScrollItem() { @@ -381,7 +390,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { if (helper.isFavoritesLoaded()) { loadFavoritesItems(items, helper); } else { - addMainScrollItems(items); + addMainScrollItems(items, helper); helper.addListener(new FavouritesDbHelper.FavoritesListener() { @Override public void onFavoritesLoaded() { @@ -424,7 +433,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { dismiss(); } else { TargetPointsHelper helper = mapActivity.getMyApplication().getTargetPointsHelper(); - Pair pair = getLocationAndDescrFromItem(item, helper); + Pair pair = getLocationAndDescrFromItem(item); LatLon ll = pair.first; PointDescription name = pair.second; if (ll == null) { @@ -452,7 +461,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { }; } - private Pair getLocationAndDescrFromItem(Object item, TargetPointsHelper helper) { + private Pair getLocationAndDescrFromItem(Object item) { PointDescription name = null; LatLon ll = null; if (item instanceof FavouritePoint) { @@ -460,15 +469,21 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { ll = new LatLon(point.getLatitude(), point.getLongitude()); name = point.getPointDescription(); } else if (item instanceof PointType) { - TargetPoint point = null; - if (item == PointType.HOME) { - point = helper.getHomePoint(); - } else if (item == PointType.WORK) { - point = helper.getWorkPoint(); - } - if (point != null) { - ll = new LatLon(point.getLatitude(), point.getLongitude()); - name = point.getOriginalPointDescription(); + MapActivity mapActivity = (MapActivity) getActivity(); + if (mapActivity != null) { + FavouritesDbHelper favorites = mapActivity.getMyApplication().getFavorites(); + FavouritePoint point = null; + if (item == PointType.HOME) { + point = favorites.getHomePoint(); + } else if (item == PointType.WORK) { + point = favorites.getWorkPoint(); + } else if (item == PointType.PARKING) { + point = favorites.getParkingPoint(); + } + if (point != null) { + ll = new LatLon(point.getLatitude(), point.getLongitude()); + name = point.getPointDescription(); + } } } return new Pair<>(ll, name); @@ -619,18 +634,24 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { favoriteViewHolder.description.setVisibility(View.GONE); } else { if (item instanceof PointType) { - final TargetPointsHelper helper = app.getTargetPointsHelper(); - TargetPoint point = null; + PersonalFavouritePoint.PointType pointType = PersonalFavouritePoint.PointType.valueOf(((PointType) item).name()); + final FavouritesDbHelper favorites = app.getFavorites(); + FavouritePoint point = null; + boolean light = app.getSettings().isLightContent(); + int disabledIconColor = light ? R.color.icon_color_default_light : R.color.icon_color_default_dark; if (item == PointType.HOME) { - point = helper.getHomePoint(); - favoriteViewHolder.title.setText(getString(R.string.home_button)); - favoriteViewHolder.icon.setImageDrawable(getContentIcon(R.drawable.ic_action_home_dark)); + point = favorites.getHomePoint(); } else if (item == PointType.WORK) { - point = helper.getWorkPoint(); - favoriteViewHolder.title.setText(getString(R.string.work_button)); - favoriteViewHolder.icon.setImageDrawable(getContentIcon(R.drawable.ic_action_work)); + point = favorites.getWorkPoint(); + } else if (item == PointType.PARKING) { + point = favorites.getParkingPoint(); } - favoriteViewHolder.description.setText(point != null ? point.getPointDescription(app).getSimpleName(app, false) : getString(R.string.shared_string_add)); + favoriteViewHolder.icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), + getResources().getColor(disabledIconColor), false, (pointType.ordinal()))); + favoriteViewHolder.title.setText(point.getName()); + favoriteViewHolder.description.setText(point != null + ? point.getPointDescription().getSimpleName(app, false) + : getString(R.string.shared_string_add)); } else if (item instanceof FavouritePoint) { FavouritePoint point = (FavouritePoint) getItem(position); favoriteViewHolder.title.setText(point.getName()); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java index f3da4b2a36..fd5f504d74 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java @@ -43,6 +43,7 @@ import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ApplicationMode; +import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.GeocodingLookupService; import net.osmand.plus.GeocodingLookupService.AddressLookupRequest; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; @@ -183,7 +184,8 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener TARGET, INTERMEDIATE, HOME, - WORK + WORK, + PARKING } public MapRouteInfoMenu() { @@ -261,6 +263,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener LatLon latlon = tileBox.getLatLonFromPixel(point.x, point.y); selectFromMapTouch = false; TargetPointsHelper targets = app.getTargetPointsHelper(); + FavouritesDbHelper favorites = app.getFavorites(); switch (selectFromMapPointType) { case START: targets.setStartPoint(latlon, true, null); @@ -272,10 +275,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(latlon, true, targets.getIntermediatePoints().size()); break; case HOME: - targets.setHomePoint(latlon, null); + favorites.setHomePoint(latlon, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); break; case WORK: - targets.setWorkPoint(latlon, null); + favorites.setWorkPoint(latlon, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); break; } if (selectFromMapWaypoints) { @@ -1786,6 +1789,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { PointDescription pd = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, name); + FavouritesDbHelper favorites = mapActivity.getMyApplication().getFavorites(); TargetPointsHelper targets = mapActivity.getMyApplication().getTargetPointsHelper(); switch (pointType) { case START: @@ -1798,10 +1802,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(l, true, targets.getIntermediatePoints().size(), pd); break; case HOME: - targets.setHomePoint(l, pd); + favorites.setHomePoint(l, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); break; case WORK: - targets.setWorkPoint(l, pd); + favorites.setWorkPoint(l, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); break; } updateMenu(); @@ -1845,6 +1849,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener if (mapActivity != null) { if (m != null) { LatLon point = new LatLon(m.getLatitude(), m.getLongitude()); + FavouritesDbHelper favorites = mapActivity.getMyApplication().getFavorites(); TargetPointsHelper targets = mapActivity.getMyApplication().getTargetPointsHelper(); switch (pointType) { case START: @@ -1857,10 +1862,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(point, true, targets.getIntermediatePoints().size(), m.getPointDescription(mapActivity)); break; case HOME: - targets.setHomePoint(point, m.getPointDescription(mapActivity)); + favorites.setHomePoint(point, m.getPointDescription(mapActivity)); break; case WORK: - targets.setWorkPoint(point, m.getPointDescription(mapActivity)); + favorites.setWorkPoint(point, m.getPointDescription(mapActivity)); break; } updateMenu(); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java index 0f77e5d3f4..c71388898b 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java @@ -3,9 +3,10 @@ package net.osmand.plus.routepreparationmenu.cards; import android.view.View; import android.widget.TextView; +import net.osmand.data.FavouritePoint; +import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.R; import net.osmand.plus.TargetPointsHelper; -import net.osmand.plus.TargetPointsHelper.TargetPoint; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.routepreparationmenu.AddPointBottomSheetDialog; import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu.PointType; @@ -24,15 +25,14 @@ public class HomeWorkCard extends BaseCard { @Override protected void updateContent() { final TargetPointsHelper targetPointsHelper = mapActivity.getMyApplication().getTargetPointsHelper(); - final TargetPoint homePoint = targetPointsHelper.getHomePoint(); - final TargetPoint workPoint = targetPointsHelper.getWorkPoint(); + final FavouritesDbHelper favorites = getMyApplication().getFavorites(); + final FavouritePoint homePoint = favorites.getHomePoint(); + final FavouritePoint workPoint = favorites.getWorkPoint(); - TextView homeDescr = (TextView) view.findViewById(R.id.home_button_descr); - final TextView workDescr = (TextView) view.findViewById(R.id.work_button_descr); - homeDescr.setText(homePoint != null ? homePoint.getPointDescription(mapActivity).getSimpleName(mapActivity, false) : - mapActivity.getString(R.string.shared_string_add)); - workDescr.setText(workPoint != null ? workPoint.getPointDescription(mapActivity).getSimpleName(mapActivity, false) : - mapActivity.getString(R.string.shared_string_add)); + TextView homeDescr = view.findViewById(R.id.home_button_descr); + final TextView workDescr = view.findViewById(R.id.work_button_descr); + homeDescr.setText(homePoint != null ? homePoint.getDescription() : mapActivity.getString(R.string.shared_string_add)); + workDescr.setText(workPoint != null ? workPoint.getDescription() : mapActivity.getString(R.string.shared_string_add)); View homeButton = view.findViewById(R.id.home_button); homeButton.setOnClickListener(new View.OnClickListener() { @@ -41,7 +41,8 @@ public class HomeWorkCard extends BaseCard { if (homePoint == null) { AddPointBottomSheetDialog.showInstance(mapActivity, PointType.HOME); } else { - targetPointsHelper.navigateToPoint(homePoint.point, true, -1, homePoint.getOriginalPointDescription()); + targetPointsHelper.navigateToPoint(favorites.getHomePointLatLon(), + true, -1, homePoint.getPointDescription()); } } }); @@ -60,7 +61,8 @@ public class HomeWorkCard extends BaseCard { if (workPoint == null) { AddPointBottomSheetDialog.showInstance(mapActivity, PointType.WORK); } else { - targetPointsHelper.navigateToPoint(workPoint.point, true, -1, workPoint.getOriginalPointDescription()); + targetPointsHelper.navigateToPoint(favorites.getWorkPointLatLon(), + true, -1, workPoint.getPointDescription()); } } }); diff --git a/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java b/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java index fe7217b7ef..799bc58237 100644 --- a/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java +++ b/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java @@ -102,6 +102,8 @@ public class QuickSearchListItem { case LOCATION: LatLon latLon = searchResult.location; return PointDescription.getLocationNamePlain(app, latLon.getLatitude(), latLon.getLongitude()); + case FAVORITE: + return ((FavouritePoint) searchResult.object).getName(); } return searchResult.localeName; } From fe9755b11fb37eaa127f60ba998d6d36ec254c45 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 9 Dec 2019 13:41:59 +0200 Subject: [PATCH 09/61] Remove unnecessary code --- OsmAnd/src/net/osmand/plus/OsmandSettings.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 93c0eadd8b..9f297d2b77 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -2371,12 +2371,6 @@ public class OsmandSettings { edit.commit(); objectToShow = toShow; if (addToHistory) { - if (pointDescription.isFavorite()) { -// int localeNameID = PersonalFavouritePoint.PersonalPoint.getLocalName(pointDescription.getName()); -// if (localeNameID != 0) { -// pointDescription.setName(ctx.getString(localeNameID)); -// } - } SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, pointDescription); } } @@ -2583,16 +2577,6 @@ public class OsmandSettings { settingsAPI.getString(globalPreferences, WORK_POINT_DESCRIPTION, ""), getWorkPoint()); } - public void setHomePoint(double latitude, double longitude, PointDescription p) { - settingsAPI.edit(globalPreferences).putFloat(HOME_POINT_LAT, (float) latitude).putFloat(HOME_POINT_LON, (float) longitude).commit(); - settingsAPI.edit(globalPreferences).putString(HOME_POINT_DESCRIPTION, PointDescription.serializeToString(p)).commit(); - } - - public void setWorkPoint(double latitude, double longitude, PointDescription p) { - settingsAPI.edit(globalPreferences).putFloat(WORK_POINT_LAT, (float) latitude).putFloat(WORK_POINT_LON, (float) longitude).commit(); - settingsAPI.edit(globalPreferences).putString(WORK_POINT_DESCRIPTION, PointDescription.serializeToString(p)).commit(); - } - public LatLon getMyLocationToStart() { float lat = settingsAPI.getFloat(globalPreferences, MY_LOC_POINT_LAT, 0); float lon = settingsAPI.getFloat(globalPreferences, MY_LOC_POINT_LON, 0); From 40737935ea2b06163b49a54db3e94b3c01f7ea49 Mon Sep 17 00:00:00 2001 From: MadWasp79 Date: Mon, 9 Dec 2019 15:30:04 +0200 Subject: [PATCH 10/61] routing optimization via cache. v1 --- .../java/net/osmand/router/GeneralRouter.java | 90 +++++++++++++++++-- 1 file changed, 82 insertions(+), 8 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 3c53199f9f..9c83addeda 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -52,6 +52,14 @@ public class GeneralRouter implements VehicleRouter { private boolean allowPrivate; private String filename = null; private String profileName = ""; + + Map> priorityCache = new HashMap<>(); + Map> speedCache = new HashMap<>(); + Map> obstacleCache = new HashMap<>(); + Map> penaltyCache = new HashMap<>(); + + int count = 0; + int count2 = 0; private Map> regionConvert = new LinkedHashMap>(); @@ -128,6 +136,7 @@ public class GeneralRouter implements VehicleRouter { tagRuleMask = new LinkedHashMap(); ruleToValue = new ArrayList(); parameters = new LinkedHashMap(); + } public String getFilename() { @@ -338,11 +347,24 @@ public class GeneralRouter implements VehicleRouter { return 0; } + + @Override public float defineRoutingObstacle(RouteDataObject road, int point) { int[] pointTypes = road.getPointTypes(point); + String region = road.region.getName(); + if (obstacleCache.containsKey(region)) { + if (obstacleCache.get(region).containsKey(pointTypes)) { + return obstacleCache.get(region).get(pointTypes); + } + } else { + obstacleCache.put(region, new HashMap()); + } + if(pointTypes != null){ - return getObjContext(RouteDataObjectAttribute.ROUTING_OBSTACLES).evaluateFloat(road.region, pointTypes, 0); + float obst = getObjContext(RouteDataObjectAttribute.ROUTING_OBSTACLES).evaluateFloat(road.region, pointTypes, 0); + obstacleCache.get(region).put(pointTypes, obst); + return obst; } return 0; } @@ -395,20 +417,41 @@ public class GeneralRouter implements VehicleRouter { @Override public float defineRoutingSpeed(RouteDataObject road) { + String regionName = road.region.getName(); + if (speedCache.containsKey(regionName)) { + if (speedCache.get(regionName).get(road.types) != null) { + return speedCache.get(regionName).get(road.types); + } + } else { + speedCache.put(regionName, new HashMap()); + } float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); - return Math.max(Math.min(spd, maxSpeed), minSpeed); + float definedSpd = Math.max(Math.min(spd, maxSpeed), minSpeed); + + speedCache.get(regionName).put(road.types, definedSpd); + return definedSpd; } - @Override public float defineVehicleSpeed(RouteDataObject road) { float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); return Math.max(Math.min(spd, maxSpeed), minSpeed); } - + @Override - public float defineSpeedPriority(RouteDataObject road) { - return getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); + public float defineSpeedPriority(RouteDataObject road) { + String regionName = road.region.getName(); + if (priorityCache.containsKey(regionName)) { + if (priorityCache.get(regionName).get(road.types) != null) { + return priorityCache.get(regionName).get(road.types); + } + } else { + priorityCache.put(regionName, new HashMap()); + } + float sp = getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); + + priorityCache.get(regionName).put(road.types, sp); + return sp; } @Override @@ -440,8 +483,36 @@ public class GeneralRouter implements VehicleRouter { @Override public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) { - float ts = getPenaltyTransition(segment.getRoad()); - float prevTs = getPenaltyTransition(prev.getRoad()); + String regionS = segment.getRoad().region.getName(); + String regionPs = prev.getRoad().region.getName(); + float ts; + float prevTs; + if (penaltyCache.containsKey(regionS)) { + if (penaltyCache.get(regionS).get(segment.getRoad().types) != null) { + ts = penaltyCache.get(regionS).get(segment.getRoad().types); + } else { + ts = getPenaltyTransition(segment.getRoad()); + penaltyCache.get(regionS).put(segment.getRoad().types, ts); + } + } else { + penaltyCache.put(regionS, new HashMap()); + ts = getPenaltyTransition(segment.getRoad()); + penaltyCache.get(regionS).put(segment.getRoad().types, ts); + } + + if (penaltyCache.containsKey(regionPs)) { + if (penaltyCache.get(regionPs).get(prev.getRoad().types) != null) { + prevTs = penaltyCache.get(regionPs).get(prev.getRoad().types); + } else { + prevTs = getPenaltyTransition(prev.getRoad()); + penaltyCache.get(regionPs).put(prev.getRoad().types, prevTs); + } + } else { + penaltyCache.put(regionPs, new HashMap()); + prevTs = getPenaltyTransition(prev.getRoad()); + penaltyCache.get(regionPs).put(prev.getRoad().types, prevTs); + } + if(prevTs != ts) { return Math.abs(ts - prevTs) / 2; } @@ -669,10 +740,13 @@ public class GeneralRouter implements VehicleRouter { } public float evaluateFloat(RouteDataObject ro, float defValue) { + Object o = evaluate(ro); + if(!(o instanceof Number)) { return defValue; } + //System.out.println(String.format("RDA %s, val: %.3f", ro.types.toString(), ((Number)o).floatValue())); return ((Number)o).floatValue(); } From eaf6ae30fcef7e87eb93036acc6b6c3a092e5073 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 9 Dec 2019 15:30:53 +0200 Subject: [PATCH 11/61] Fix pointName, get rid getHomePointLatLon getHomePointLatLon --- .../osmand/data/PersonalFavouritePoint.java | 35 ++++++++-------- .../net/osmand/plus/FavouritesDbHelper.java | 42 ++++--------------- .../cards/HomeWorkCard.java | 5 ++- 3 files changed, 29 insertions(+), 53 deletions(-) diff --git a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java index ae9610e0aa..b70b938e30 100644 --- a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java +++ b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java @@ -19,41 +19,47 @@ public class PersonalFavouritePoint extends FavouritePoint { WORK("work", R.string.work_button, 2), PARKING("parking", R.string.map_widget_parking, 3); - private String name; + private String pointName; @StringRes private int resId; private int order; - PointType(String name, @StringRes int resId, int order) { - this.name = name; + PointType(String pointName, @StringRes int resId, int order) { + this.pointName = pointName; this.resId = resId; this.order = order; } public String getName() { - return name; + return pointName; } public int getOrder() { return order; } + public static PointType valueOfPointName(@NonNull String typeName){ + + for (PointType pt:values()) { + if(pt.pointName.equals(typeName)) + return pt; + } + throw new IllegalArgumentException("Illegal PointType pointName"); + } + public String getHumanString(@NonNull Context ctx) { return ctx.getString(resId); } } - private PersonalFavouritePoint() { - } - - private PersonalFavouritePoint(@NonNull Context ctx, @NonNull PointType type, double latitude, double longitude) { - super(latitude, longitude, type.name, PERSONAL); + public PersonalFavouritePoint(@NonNull Context ctx, @NonNull PointType type, double latitude, double longitude) { + super(latitude, longitude, type.pointName, PERSONAL); this.ctx = ctx; this.type = type; } - public PersonalFavouritePoint(@NonNull Context ctx, @NonNull String typeName, double latitude, double longitude) throws IllegalArgumentException { - this(ctx, PointType.valueOf(typeName), latitude, longitude); + public PersonalFavouritePoint(@NonNull Context ctx, @NonNull String pointName, double latitude, double longitude) throws IllegalArgumentException { + this(ctx, PointType.valueOfPointName(pointName), latitude, longitude); } @Override @@ -61,11 +67,6 @@ public class PersonalFavouritePoint extends FavouritePoint { return new PointDescription(PointDescription.POINT_TYPE_LOCATION, getDescription()); } - public PersonalFavouritePoint(PersonalFavouritePoint favouritePoint) { - super(favouritePoint); - this.type = favouritePoint.type; - } - @Override public boolean isPersonal() { return true; @@ -99,7 +100,7 @@ public class PersonalFavouritePoint extends FavouritePoint { public WptPt toWpt() { WptPt pt = super.toWpt(); pt.getExtensionsToWrite().put(PERSONAL, "true"); - pt.name = type.toString(); + pt.name = type.pointName; pt.desc = getDescription(); return pt; } diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 93cec04c6d..2a77a5d945 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -128,15 +128,12 @@ public class FavouritesDbHelper { } private boolean hasPersonalPoint(PersonalFavouritePoint.PointType pointType) { - boolean hasPersonalPoint = false; for (FavouritePoint fp : cachedPersonalFavoritePoints) { - if (fp instanceof PersonalFavouritePoint) { - if (((PersonalFavouritePoint) fp).getType() == pointType) { - hasPersonalPoint = true; - } + if (((PersonalFavouritePoint) fp).getType() == pointType) { + return true; } } - return hasPersonalPoint; + return false; } public FavouritePoint getWorkPoint() { @@ -152,35 +149,12 @@ public class FavouritesDbHelper { } private FavouritePoint getPersonalPoint(PersonalFavouritePoint.PointType pointType) { - FavouritePoint personalPoint = null; for (FavouritePoint fp : cachedPersonalFavoritePoints) { - if (fp instanceof PersonalFavouritePoint) { if (((PersonalFavouritePoint) fp).getType() == pointType) { - personalPoint = fp; + return fp; } } - } - return personalPoint; - } - - public LatLon getWorkPointLatLon() { - LatLon workPointLatLon; - if (hasWorkPoint()) { - workPointLatLon = new LatLon(getWorkPoint().getLatitude(), getWorkPoint().getLongitude()); - } else { - workPointLatLon = null; - } - return workPointLatLon; - } - - public LatLon getHomePointLatLon() { - LatLon homePointLatLon; - if (hasHomePoint()) { - homePointLatLon = new LatLon(getHomePoint().getLatitude(), getHomePoint().getLongitude()); - } else { - homePointLatLon = null; - } - return homePointLatLon; + return null; } public boolean isFavoritesLoaded() { @@ -283,7 +257,7 @@ public class FavouritesDbHelper { getHomePoint().setDescription(description.getName()); editFavourite(getHomePoint(), latLon.getLatitude(), latLon.getLongitude()); } else { - FavouritePoint cachedHomePoint = new PersonalFavouritePoint(context, HOME.toString(), + FavouritePoint cachedHomePoint = new PersonalFavouritePoint(context, HOME, latLon.getLatitude(), latLon.getLongitude()); cachedHomePoint.setDescription(description.getName()); cachedPersonalFavoritePoints.add(cachedHomePoint); @@ -297,7 +271,7 @@ public class FavouritesDbHelper { getWorkPoint().setDescription(description.getName()); editFavourite(getWorkPoint(), latLon.getLatitude(), latLon.getLongitude()); } else { - FavouritePoint cachedWorkPoint = new PersonalFavouritePoint(context, WORK.toString(), + FavouritePoint cachedWorkPoint = new PersonalFavouritePoint(context, WORK, latLon.getLatitude(), latLon.getLongitude()); cachedWorkPoint.setDescription(description.getName()); cachedPersonalFavoritePoints.add(cachedWorkPoint); @@ -311,7 +285,7 @@ public class FavouritesDbHelper { getParkingPoint().setDescription(description.getName()); editFavourite(getParkingPoint(), latLon.getLatitude(), latLon.getLongitude()); } else { - FavouritePoint cachedParkingPoint = new PersonalFavouritePoint(context, PARKING.toString(), + FavouritePoint cachedParkingPoint = new PersonalFavouritePoint(context, PARKING, latLon.getLatitude(), latLon.getLongitude()); cachedParkingPoint.setDescription(description.getName()); cachedPersonalFavoritePoints.add(cachedParkingPoint); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java index c71388898b..837064f4d6 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/HomeWorkCard.java @@ -4,6 +4,7 @@ import android.view.View; import android.widget.TextView; import net.osmand.data.FavouritePoint; +import net.osmand.data.LatLon; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.R; import net.osmand.plus.TargetPointsHelper; @@ -41,7 +42,7 @@ public class HomeWorkCard extends BaseCard { if (homePoint == null) { AddPointBottomSheetDialog.showInstance(mapActivity, PointType.HOME); } else { - targetPointsHelper.navigateToPoint(favorites.getHomePointLatLon(), + targetPointsHelper.navigateToPoint(new LatLon(homePoint.getLatitude(), homePoint.getLongitude()), true, -1, homePoint.getPointDescription()); } } @@ -61,7 +62,7 @@ public class HomeWorkCard extends BaseCard { if (workPoint == null) { AddPointBottomSheetDialog.showInstance(mapActivity, PointType.WORK); } else { - targetPointsHelper.navigateToPoint(favorites.getWorkPointLatLon(), + targetPointsHelper.navigateToPoint(new LatLon(workPoint.getLatitude(), workPoint.getLongitude()), true, -1, workPoint.getPointDescription()); } } From b43fb6332a9980f3abad8d0f4c1e5ab2e85ec3e0 Mon Sep 17 00:00:00 2001 From: MadWasp79 Date: Mon, 9 Dec 2019 15:57:20 +0200 Subject: [PATCH 12/61] refactoring --- .../java/net/osmand/router/GeneralRouter.java | 80 ++++++++++--------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 9c83addeda..1dade6b075 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -53,10 +53,10 @@ public class GeneralRouter implements VehicleRouter { private String filename = null; private String profileName = ""; - Map> priorityCache = new HashMap<>(); - Map> speedCache = new HashMap<>(); - Map> obstacleCache = new HashMap<>(); - Map> penaltyCache = new HashMap<>(); + Map> priorityCache; + Map> speedCache; + Map> obstacleCache; + Map> penaltyCache; int count = 0; int count2 = 0; @@ -136,6 +136,11 @@ public class GeneralRouter implements VehicleRouter { tagRuleMask = new LinkedHashMap(); ruleToValue = new ArrayList(); parameters = new LinkedHashMap(); + + priorityCache = new HashMap<>(); + speedCache = new HashMap<>(); + obstacleCache = new HashMap<>(); + penaltyCache = new HashMap<>(); } @@ -189,6 +194,11 @@ public class GeneralRouter implements VehicleRouter { if (params.containsKey(MAX_SPEED)) { maxSpeed = parseSilentFloat(params.get(MAX_SPEED), maxSpeed); } + + priorityCache = new HashMap<>(); + speedCache = new HashMap<>(); + obstacleCache = new HashMap<>(); + penaltyCache = new HashMap<>(); } public GeneralRouterProfile getProfile() { @@ -353,19 +363,20 @@ public class GeneralRouter implements VehicleRouter { public float defineRoutingObstacle(RouteDataObject road, int point) { int[] pointTypes = road.getPointTypes(point); String region = road.region.getName(); - if (obstacleCache.containsKey(region)) { - if (obstacleCache.get(region).containsKey(pointTypes)) { - return obstacleCache.get(region).get(pointTypes); - } - } else { + if (!obstacleCache.containsKey(region)) { obstacleCache.put(region, new HashMap()); } + if (obstacleCache.get(region).containsKey(pointTypes)) { + return obstacleCache.get(region).get(pointTypes); + } + if(pointTypes != null){ float obst = getObjContext(RouteDataObjectAttribute.ROUTING_OBSTACLES).evaluateFloat(road.region, pointTypes, 0); obstacleCache.get(region).put(pointTypes, obst); return obst; } + return 0; } @@ -418,16 +429,14 @@ public class GeneralRouter implements VehicleRouter { @Override public float defineRoutingSpeed(RouteDataObject road) { String regionName = road.region.getName(); - if (speedCache.containsKey(regionName)) { - if (speedCache.get(regionName).get(road.types) != null) { - return speedCache.get(regionName).get(road.types); - } - } else { + if (!speedCache.containsKey(regionName)) { speedCache.put(regionName, new HashMap()); + } + if (speedCache.get(regionName).get(road.types) != null) { + return speedCache.get(regionName).get(road.types); } float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); float definedSpd = Math.max(Math.min(spd, maxSpeed), minSpeed); - speedCache.get(regionName).put(road.types, definedSpd); return definedSpd; } @@ -441,15 +450,13 @@ public class GeneralRouter implements VehicleRouter { @Override public float defineSpeedPriority(RouteDataObject road) { String regionName = road.region.getName(); - if (priorityCache.containsKey(regionName)) { - if (priorityCache.get(regionName).get(road.types) != null) { - return priorityCache.get(regionName).get(road.types); - } - } else { + if (!priorityCache.containsKey(regionName)) { priorityCache.put(regionName, new HashMap()); } - float sp = getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); - + if (priorityCache.get(regionName).get(road.types) != null) { + return priorityCache.get(regionName).get(road.types); + } + float sp = getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); priorityCache.get(regionName).put(road.types, sp); return sp; } @@ -487,28 +494,25 @@ public class GeneralRouter implements VehicleRouter { String regionPs = prev.getRoad().region.getName(); float ts; float prevTs; - if (penaltyCache.containsKey(regionS)) { - if (penaltyCache.get(regionS).get(segment.getRoad().types) != null) { - ts = penaltyCache.get(regionS).get(segment.getRoad().types); - } else { - ts = getPenaltyTransition(segment.getRoad()); - penaltyCache.get(regionS).put(segment.getRoad().types, ts); - } - } else { + + if (!penaltyCache.containsKey(regionS)) { penaltyCache.put(regionS, new HashMap()); + } + //maybe we don't need it? region should already be present in cache + if (!penaltyCache.containsKey(regionPs)) { + penaltyCache.put(regionPs, new HashMap()); + } + + if (penaltyCache.get(regionS).get(segment.getRoad().types) != null) { + ts = penaltyCache.get(regionS).get(segment.getRoad().types); + } else { ts = getPenaltyTransition(segment.getRoad()); penaltyCache.get(regionS).put(segment.getRoad().types, ts); } - - if (penaltyCache.containsKey(regionPs)) { - if (penaltyCache.get(regionPs).get(prev.getRoad().types) != null) { + + if (penaltyCache.get(regionPs).get(prev.getRoad().types) != null) { prevTs = penaltyCache.get(regionPs).get(prev.getRoad().types); - } else { - prevTs = getPenaltyTransition(prev.getRoad()); - penaltyCache.get(regionPs).put(prev.getRoad().types, prevTs); - } } else { - penaltyCache.put(regionPs, new HashMap()); prevTs = getPenaltyTransition(prev.getRoad()); penaltyCache.get(regionPs).put(prev.getRoad().types, prevTs); } From 2bec1a70ea92dca31eb0922752e04346746a5102 Mon Sep 17 00:00:00 2001 From: MadWasp79 Date: Mon, 9 Dec 2019 16:01:07 +0200 Subject: [PATCH 13/61] clean --- .../src/main/java/net/osmand/router/GeneralRouter.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 1dade6b075..28cb6264fc 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -58,9 +58,6 @@ public class GeneralRouter implements VehicleRouter { Map> obstacleCache; Map> penaltyCache; - int count = 0; - int count2 = 0; - private Map> regionConvert = new LinkedHashMap>(); // cached values @@ -376,7 +373,6 @@ public class GeneralRouter implements VehicleRouter { obstacleCache.get(region).put(pointTypes, obst); return obst; } - return 0; } @@ -744,13 +740,10 @@ public class GeneralRouter implements VehicleRouter { } public float evaluateFloat(RouteDataObject ro, float defValue) { - - Object o = evaluate(ro); - + Object o = evaluate(ro); if(!(o instanceof Number)) { return defValue; } - //System.out.println(String.format("RDA %s, val: %.3f", ro.types.toString(), ((Number)o).floatValue())); return ((Number)o).floatValue(); } From 160a0cba62b84a26a48e680fe1e389626c52a15f Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 9 Dec 2019 15:28:45 +0100 Subject: [PATCH 14/61] Fix caches method --- .../java/net/osmand/router/GeneralRouter.java | 122 +++++++++--------- 1 file changed, 59 insertions(+), 63 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 28cb6264fc..56eee6f102 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -39,6 +39,8 @@ public class GeneralRouter implements VehicleRouter { public static final String VEHICLE_HEIGHT = "height"; public static final String VEHICLE_WEIGHT = "weight"; public static final String VEHICLE_WIDTH = "width"; + + private static boolean USE_CACHE = true; private final RouteAttributeContext[] objectAttributes; public final Map attributes; @@ -53,10 +55,10 @@ public class GeneralRouter implements VehicleRouter { private String filename = null; private String profileName = ""; - Map> priorityCache; - Map> speedCache; - Map> obstacleCache; - Map> penaltyCache; + Map> priorityCache; + Map> speedCache; + Map> obstacleCache; + Map> penaltyCache; private Map> regionConvert = new LinkedHashMap>(); @@ -354,23 +356,15 @@ public class GeneralRouter implements VehicleRouter { return 0; } - - @Override public float defineRoutingObstacle(RouteDataObject road, int point) { int[] pointTypes = road.getPointTypes(point); - String region = road.region.getName(); - if (!obstacleCache.containsKey(region)) { - obstacleCache.put(region, new HashMap()); - } - - if (obstacleCache.get(region).containsKey(pointTypes)) { - return obstacleCache.get(region).get(pointTypes); - } - if(pointTypes != null){ - float obst = getObjContext(RouteDataObjectAttribute.ROUTING_OBSTACLES).evaluateFloat(road.region, pointTypes, 0); - obstacleCache.get(region).put(pointTypes, obst); + Float obst = getCache(obstacleCache, road.region, pointTypes); + if(obst == null) { + obst = getObjContext(RouteDataObjectAttribute.ROUTING_OBSTACLES).evaluateFloat(road.region, pointTypes, 0); + putCache(obstacleCache, road.region, pointTypes, obst); + } return obst; } return 0; @@ -419,21 +413,22 @@ public class GeneralRouter implements VehicleRouter { @Override public float getPenaltyTransition(RouteDataObject road) { - return getObjContext(RouteDataObjectAttribute.PENALTY_TRANSITION).evaluateInt(road, 0); + Float vl = getCache(penaltyCache, road); + if (vl == null) { + vl = (float) getObjContext(RouteDataObjectAttribute.PENALTY_TRANSITION).evaluateInt(road, 0); + putCache(penaltyCache, road, vl); + } + return vl; } @Override public float defineRoutingSpeed(RouteDataObject road) { - String regionName = road.region.getName(); - if (!speedCache.containsKey(regionName)) { - speedCache.put(regionName, new HashMap()); - } - if (speedCache.get(regionName).get(road.types) != null) { - return speedCache.get(regionName).get(road.types); + Float definedSpd = getCache(priorityCache, road); + if (definedSpd == null) { + float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); + definedSpd = Math.max(Math.min(spd, maxSpeed), minSpeed); + putCache(priorityCache, road, definedSpd); } - float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); - float definedSpd = Math.max(Math.min(spd, maxSpeed), minSpeed); - speedCache.get(regionName).put(road.types, definedSpd); return definedSpd; } @@ -444,19 +439,45 @@ public class GeneralRouter implements VehicleRouter { } @Override - public float defineSpeedPriority(RouteDataObject road) { - String regionName = road.region.getName(); - if (!priorityCache.containsKey(regionName)) { - priorityCache.put(regionName, new HashMap()); + public float defineSpeedPriority(RouteDataObject road) { + Float sp = getCache(priorityCache, road); + if(sp == null) { + sp = getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); + putCache(priorityCache, road, sp); } - if (priorityCache.get(regionName).get(road.types) != null) { - return priorityCache.get(regionName).get(road.types); - } - float sp = getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); - priorityCache.get(regionName).put(road.types, sp); return sp; } + private void putCache(Map> ch, RouteDataObject road, Float val) { + putCache(ch, road.region, road.types, val); + } + + private void putCache(Map> ch, RouteRegion reg, int[] types, Float val) { + if (USE_CACHE) { + Map rM = ch.get(reg); + if (rM == null) { + rM = new HashMap(); + ch.put(reg, rM); + } + rM.put(types, val); + } + } + + private Float getCache(Map> ch, RouteDataObject road) { + return getCache(ch, road.region, road.types); + } + + private Float getCache(Map> ch, RouteRegion reg, int[] types) { + if (USE_CACHE) { + Map rM = ch.get(reg); + if (rM == null) { + return null; + } + return rM.get(types); + } + return null; + } + @Override public float getDefaultSpeed() { return defaultSpeed; @@ -486,33 +507,8 @@ public class GeneralRouter implements VehicleRouter { @Override public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) { - String regionS = segment.getRoad().region.getName(); - String regionPs = prev.getRoad().region.getName(); - float ts; - float prevTs; - - if (!penaltyCache.containsKey(regionS)) { - penaltyCache.put(regionS, new HashMap()); - } - //maybe we don't need it? region should already be present in cache - if (!penaltyCache.containsKey(regionPs)) { - penaltyCache.put(regionPs, new HashMap()); - } - - if (penaltyCache.get(regionS).get(segment.getRoad().types) != null) { - ts = penaltyCache.get(regionS).get(segment.getRoad().types); - } else { - ts = getPenaltyTransition(segment.getRoad()); - penaltyCache.get(regionS).put(segment.getRoad().types, ts); - } - - if (penaltyCache.get(regionPs).get(prev.getRoad().types) != null) { - prevTs = penaltyCache.get(regionPs).get(prev.getRoad().types); - } else { - prevTs = getPenaltyTransition(prev.getRoad()); - penaltyCache.get(regionPs).put(prev.getRoad().types, prevTs); - } - + float ts = getPenaltyTransition(segment.getRoad()); + float prevTs = getPenaltyTransition(prev.getRoad()); if(prevTs != ts) { return Math.abs(ts - prevTs) / 2; } From f4bfa131b76cd996a31885f8839378e4bba98001 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 9 Dec 2019 15:47:11 +0100 Subject: [PATCH 15/61] Fix cache evals --- .../java/net/osmand/router/GeneralRouter.java | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 56eee6f102..aed0e26c65 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -9,6 +9,7 @@ import net.osmand.util.MapUtils; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.BitSet; import java.util.HashMap; import java.util.Iterator; @@ -55,10 +56,10 @@ public class GeneralRouter implements VehicleRouter { private String filename = null; private String profileName = ""; - Map> priorityCache; - Map> speedCache; - Map> obstacleCache; - Map> penaltyCache; + Map> priorityCache; + Map> speedCache; + Map> obstacleCache; + Map> penaltyCache; private Map> regionConvert = new LinkedHashMap>(); @@ -448,32 +449,46 @@ public class GeneralRouter implements VehicleRouter { return sp; } - private void putCache(Map> ch, RouteDataObject road, Float val) { + private void putCache(Map> ch, RouteDataObject road, Float val) { putCache(ch, road.region, road.types, val); } - private void putCache(Map> ch, RouteRegion reg, int[] types, Float val) { + private void putCache(Map> ch, RouteRegion reg, int[] types, Float val) { if (USE_CACHE) { - Map rM = ch.get(reg); + Map rM = ch.get(reg); if (rM == null) { - rM = new HashMap(); + rM = new HashMap(); ch.put(reg, rM); } - rM.put(types, val); + rM.put(new IntHolder(types), val); } } + + class IntHolder { + private final int[] array; + IntHolder(int[] ts) { array = ts; } + @Override public int hashCode() { return Arrays.hashCode(array); } + @Override public boolean equals(Object other) { + if (array == other) { return true; } + if (! (other instanceof IntHolder) ) { + return false; + } + //noinspection unchecked + return Arrays.equals(array, ((IntHolder) other).array); + } + } - private Float getCache(Map> ch, RouteDataObject road) { + private Float getCache(Map> ch, RouteDataObject road) { return getCache(ch, road.region, road.types); } - private Float getCache(Map> ch, RouteRegion reg, int[] types) { + private Float getCache(Map> ch, RouteRegion reg, int[] types) { if (USE_CACHE) { - Map rM = ch.get(reg); + Map rM = ch.get(reg); if (rM == null) { return null; } - return rM.get(types); + return rM.get(new IntHolder(types)); } return null; } From 86a7352337072f8ea3cdd95611056a605c5a1497 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 9 Dec 2019 15:57:33 +0100 Subject: [PATCH 16/61] Fix issue --- .../src/main/java/net/osmand/router/GeneralRouter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index aed0e26c65..6762abee6a 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -424,11 +424,11 @@ public class GeneralRouter implements VehicleRouter { @Override public float defineRoutingSpeed(RouteDataObject road) { - Float definedSpd = getCache(priorityCache, road); + Float definedSpd = getCache(speedCache, road); if (definedSpd == null) { float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); definedSpd = Math.max(Math.min(spd, maxSpeed), minSpeed); - putCache(priorityCache, road, definedSpd); + putCache(speedCache, road, definedSpd); } return definedSpd; } From f529ac1006243fb0a833952c45c479c6d40b5ae5 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 9 Dec 2019 16:53:35 +0100 Subject: [PATCH 17/61] Update timer general router --- .../net/osmand/router/BinaryRoutePlanner.java | 7 +- .../java/net/osmand/router/GeneralRouter.java | 139 +++++++++++------- 2 files changed, 91 insertions(+), 55 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java b/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java index e820e8ff01..c6d7cbcffe 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java @@ -369,9 +369,10 @@ public class BinaryRoutePlanner { public void printDebugMemoryInformation(RoutingContext ctx, PriorityQueue graphDirectSegments, PriorityQueue graphReverseSegments, TLongObjectHashMap visitedDirectSegments,TLongObjectHashMap visitedOppositeSegments) { - printInfo("Time to calculate : " + (System.nanoTime() - ctx.timeToCalculate) / 1e6 + - ", time to load : " + ctx.timeToLoad / 1e6 + ", time to load headers : " + ctx.timeToLoadHeaders / 1e6 + - ", time to calc dev : " + ctx.timeNanoToCalcDeviation / 1e6); + printInfo(String.format("Time. Total: %.2f, to load: %.2f, to load headers: %.2f, to calc dev: %.2f, to calc rules: %.2f ", + (System.nanoTime() - ctx.timeToCalculate) / 1e6, ctx.timeToLoad / 1e6, + ctx.timeToLoadHeaders / 1e6, ctx.timeNanoToCalcDeviation / 1e6, GeneralRouter.TIMER / 1e6)); + GeneralRouter.TIMER = 0; int maxLoadedTiles = Math.max(ctx.maxLoadedTiles, ctx.getCurrentlyLoadedTiles()); printInfo("Current loaded tiles : " + ctx.getCurrentlyLoadedTiles() + ", maximum loaded tiles " + maxLoadedTiles); printInfo("Loaded tiles " + ctx.loadedTiles + " (distinct " + ctx.distinctLoadedTiles + "), unloaded tiles " + ctx.unloadedTiles + diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 6762abee6a..a72bff2703 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -42,6 +42,7 @@ public class GeneralRouter implements VehicleRouter { public static final String VEHICLE_WIDTH = "width"; private static boolean USE_CACHE = true; + public static long TIMER = 0; private final RouteAttributeContext[] objectAttributes; public final Map attributes; @@ -55,11 +56,6 @@ public class GeneralRouter implements VehicleRouter { private boolean allowPrivate; private String filename = null; private String profileName = ""; - - Map> priorityCache; - Map> speedCache; - Map> obstacleCache; - Map> penaltyCache; private Map> regionConvert = new LinkedHashMap>(); @@ -78,6 +74,14 @@ public class GeneralRouter implements VehicleRouter { private TLongHashSet impassableRoads; private GeneralRouterProfile profile; + Map> priorityCache; + Map> speedCache; + Map> vehicleSpeedCache; + Map> accessCache; + Map> onewayCache; + Map> obstacleCache; + Map> routingObstacleCache; + Map> penaltyCache; public enum RouteDataObjectAttribute { ROAD_SPEED("speed"), @@ -119,47 +123,6 @@ public class GeneralRouter implements VehicleRouter { SYMBOLIC } - public GeneralRouter(GeneralRouterProfile profile, Map attributes) { - this.profile = profile; - this.attributes = new LinkedHashMap(); - Iterator> e = attributes.entrySet().iterator(); - while(e.hasNext()){ - Entry next = e.next(); - addAttribute(next.getKey(), next.getValue()); - } - objectAttributes = new RouteAttributeContext[RouteDataObjectAttribute.values().length]; - for (int i = 0; i < objectAttributes.length; i++) { - objectAttributes[i] = new RouteAttributeContext(); - } - universalRules = new LinkedHashMap(); - universalRulesById = new ArrayList(); - tagRuleMask = new LinkedHashMap(); - ruleToValue = new ArrayList(); - parameters = new LinkedHashMap(); - - priorityCache = new HashMap<>(); - speedCache = new HashMap<>(); - obstacleCache = new HashMap<>(); - penaltyCache = new HashMap<>(); - - } - - public String getFilename() { - return filename; - } - - public void setFilename(String filename) { - this.filename = filename; - } - - public String getProfileName() { - return profileName; - } - - public void setProfileName(String profileName) { - this.profileName = profileName; - } - public GeneralRouter(GeneralRouter parent, Map params) { this.profile = parent.profile; this.attributes = new LinkedHashMap(); @@ -194,12 +157,59 @@ public class GeneralRouter implements VehicleRouter { if (params.containsKey(MAX_SPEED)) { maxSpeed = parseSilentFloat(params.get(MAX_SPEED), maxSpeed); } + initCaches(); + + } + + public GeneralRouter(GeneralRouterProfile profile, Map attributes) { + this.profile = profile; + this.attributes = new LinkedHashMap(); + Iterator> e = attributes.entrySet().iterator(); + while(e.hasNext()){ + Entry next = e.next(); + addAttribute(next.getKey(), next.getValue()); + } + objectAttributes = new RouteAttributeContext[RouteDataObjectAttribute.values().length]; + for (int i = 0; i < objectAttributes.length; i++) { + objectAttributes[i] = new RouteAttributeContext(); + } + universalRules = new LinkedHashMap(); + universalRulesById = new ArrayList(); + tagRuleMask = new LinkedHashMap(); + ruleToValue = new ArrayList(); + parameters = new LinkedHashMap(); + initCaches(); + + } + + private void initCaches() { priorityCache = new HashMap<>(); speedCache = new HashMap<>(); + vehicleSpeedCache = new HashMap<>(); obstacleCache = new HashMap<>(); + routingObstacleCache = new HashMap<>(); + accessCache = new HashMap<>(); + onewayCache = new HashMap<>(); penaltyCache = new HashMap<>(); } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public String getProfileName() { + return profileName; + } + + public void setProfileName(String profileName) { + this.profileName = profileName; + } + public GeneralRouterProfile getProfile() { return profile; @@ -262,7 +272,11 @@ public class GeneralRouter implements VehicleRouter { @Override public boolean acceptLine(RouteDataObject way) { - int res = getObjContext(RouteDataObjectAttribute.ACCESS).evaluateInt(way, 0); + Float res = getCache(accessCache, way); + if(res == null) { + res = (float) getObjContext(RouteDataObjectAttribute.ACCESS).evaluateInt(way, 0); + putCache(accessCache, way, res); + } if(impassableRoads != null && impassableRoads.contains(way.id)) { return false; } @@ -352,7 +366,12 @@ public class GeneralRouter implements VehicleRouter { public float defineObstacle(RouteDataObject road, int point) { int[] pointTypes = road.getPointTypes(point); if(pointTypes != null) { - return getObjContext(RouteDataObjectAttribute.OBSTACLES).evaluateFloat(road.region, pointTypes, 0); + Float obst = getCache(obstacleCache, road.region, pointTypes); + if(obst == null) { + obst = getObjContext(RouteDataObjectAttribute.OBSTACLES).evaluateFloat(road.region, pointTypes, 0); + putCache(obstacleCache, road.region, pointTypes, obst); + } + return obst; } return 0; } @@ -404,7 +423,12 @@ public class GeneralRouter implements VehicleRouter { @Override public int isOneWay(RouteDataObject road) { - return getObjContext(RouteDataObjectAttribute.ONEWAY).evaluateInt(road, 0); + Float res = getCache(onewayCache, road); + if(res == null) { + res = (float) getObjContext(RouteDataObjectAttribute.ONEWAY).evaluateInt(road, 0); + putCache(onewayCache, road, res); + } + return res.intValue(); } @Override @@ -435,8 +459,13 @@ public class GeneralRouter implements VehicleRouter { @Override public float defineVehicleSpeed(RouteDataObject road) { - float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); - return Math.max(Math.min(spd, maxSpeed), minSpeed); + Float sp = getCache(vehicleSpeedCache, road); + if (sp == null) { + float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); + sp = Math.max(Math.min(spd, maxSpeed), minSpeed); + putCache(vehicleSpeedCache, road, sp); + } + return sp; } @Override @@ -462,6 +491,7 @@ public class GeneralRouter implements VehicleRouter { } rM.put(new IntHolder(types), val); } + TIMER += System.nanoTime(); } class IntHolder { @@ -483,12 +513,17 @@ public class GeneralRouter implements VehicleRouter { } private Float getCache(Map> ch, RouteRegion reg, int[] types) { + TIMER -= System.nanoTime(); if (USE_CACHE) { Map rM = ch.get(reg); if (rM == null) { return null; } - return rM.get(new IntHolder(types)); + Float vl = rM.get(new IntHolder(types)); + if(vl != null) { + TIMER += System.nanoTime(); + return vl; + } } return null; } From f5d86ebfa20825efc475cb84d7b43425c6778063 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 9 Dec 2019 17:24:16 +0100 Subject: [PATCH 18/61] Simplify caching --- .../java/net/osmand/router/GeneralRouter.java | 69 +++++++++---------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index a72bff2703..d8e54ecaf5 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -74,14 +74,7 @@ public class GeneralRouter implements VehicleRouter { private TLongHashSet impassableRoads; private GeneralRouterProfile profile; - Map> priorityCache; - Map> speedCache; - Map> vehicleSpeedCache; - Map> accessCache; - Map> onewayCache; - Map> obstacleCache; - Map> routingObstacleCache; - Map> penaltyCache; + Map>[] evalCache; public enum RouteDataObjectAttribute { ROAD_SPEED("speed"), @@ -183,15 +176,13 @@ public class GeneralRouter implements VehicleRouter { } + @SuppressWarnings("unchecked") private void initCaches() { - priorityCache = new HashMap<>(); - speedCache = new HashMap<>(); - vehicleSpeedCache = new HashMap<>(); - obstacleCache = new HashMap<>(); - routingObstacleCache = new HashMap<>(); - accessCache = new HashMap<>(); - onewayCache = new HashMap<>(); - penaltyCache = new HashMap<>(); + int l = RouteDataObjectAttribute.values().length; + evalCache = new Map[l]; + for (int i = 0; i < l; i++) { + evalCache[i] = new HashMap<>(); + } } public String getFilename() { @@ -272,10 +263,10 @@ public class GeneralRouter implements VehicleRouter { @Override public boolean acceptLine(RouteDataObject way) { - Float res = getCache(accessCache, way); + Float res = getCache(RouteDataObjectAttribute.ACCESS, way); if(res == null) { res = (float) getObjContext(RouteDataObjectAttribute.ACCESS).evaluateInt(way, 0); - putCache(accessCache, way, res); + putCache(RouteDataObjectAttribute.ACCESS, way, res); } if(impassableRoads != null && impassableRoads.contains(way.id)) { return false; @@ -366,10 +357,10 @@ public class GeneralRouter implements VehicleRouter { public float defineObstacle(RouteDataObject road, int point) { int[] pointTypes = road.getPointTypes(point); if(pointTypes != null) { - Float obst = getCache(obstacleCache, road.region, pointTypes); + Float obst = getCache(RouteDataObjectAttribute.OBSTACLES, road.region, pointTypes); if(obst == null) { obst = getObjContext(RouteDataObjectAttribute.OBSTACLES).evaluateFloat(road.region, pointTypes, 0); - putCache(obstacleCache, road.region, pointTypes, obst); + putCache(RouteDataObjectAttribute.OBSTACLES, road.region, pointTypes, obst); } return obst; } @@ -380,10 +371,10 @@ public class GeneralRouter implements VehicleRouter { public float defineRoutingObstacle(RouteDataObject road, int point) { int[] pointTypes = road.getPointTypes(point); if(pointTypes != null){ - Float obst = getCache(obstacleCache, road.region, pointTypes); + Float obst = getCache(RouteDataObjectAttribute.ROUTING_OBSTACLES, road.region, pointTypes); if(obst == null) { obst = getObjContext(RouteDataObjectAttribute.ROUTING_OBSTACLES).evaluateFloat(road.region, pointTypes, 0); - putCache(obstacleCache, road.region, pointTypes, obst); + putCache(RouteDataObjectAttribute.ROUTING_OBSTACLES, road.region, pointTypes, obst); } return obst; } @@ -423,10 +414,10 @@ public class GeneralRouter implements VehicleRouter { @Override public int isOneWay(RouteDataObject road) { - Float res = getCache(onewayCache, road); + Float res = getCache(RouteDataObjectAttribute.ONEWAY, road); if(res == null) { res = (float) getObjContext(RouteDataObjectAttribute.ONEWAY).evaluateInt(road, 0); - putCache(onewayCache, road, res); + putCache(RouteDataObjectAttribute.ONEWAY, road, res); } return res.intValue(); } @@ -438,51 +429,52 @@ public class GeneralRouter implements VehicleRouter { @Override public float getPenaltyTransition(RouteDataObject road) { - Float vl = getCache(penaltyCache, road); + Float vl = getCache(RouteDataObjectAttribute.PENALTY_TRANSITION, road); if (vl == null) { vl = (float) getObjContext(RouteDataObjectAttribute.PENALTY_TRANSITION).evaluateInt(road, 0); - putCache(penaltyCache, road, vl); + putCache(RouteDataObjectAttribute.PENALTY_TRANSITION, road, vl); } return vl; } @Override public float defineRoutingSpeed(RouteDataObject road) { - Float definedSpd = getCache(speedCache, road); + Float definedSpd = getCache(RouteDataObjectAttribute.ROAD_SPEED, road); if (definedSpd == null) { float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); definedSpd = Math.max(Math.min(spd, maxSpeed), minSpeed); - putCache(speedCache, road, definedSpd); + putCache(RouteDataObjectAttribute.ROAD_SPEED, road, definedSpd); } return definedSpd; } @Override public float defineVehicleSpeed(RouteDataObject road) { - Float sp = getCache(vehicleSpeedCache, road); + Float sp = getCache(RouteDataObjectAttribute.ROAD_SPEED, road); if (sp == null) { float spd = getObjContext(RouteDataObjectAttribute.ROAD_SPEED).evaluateFloat(road, defaultSpeed); sp = Math.max(Math.min(spd, maxSpeed), minSpeed); - putCache(vehicleSpeedCache, road, sp); + putCache(RouteDataObjectAttribute.ROAD_SPEED, road, sp); } return sp; } @Override public float defineSpeedPriority(RouteDataObject road) { - Float sp = getCache(priorityCache, road); + Float sp = getCache(RouteDataObjectAttribute.ROAD_PRIORITIES, road); if(sp == null) { sp = getObjContext(RouteDataObjectAttribute.ROAD_PRIORITIES).evaluateFloat(road, 1f); - putCache(priorityCache, road, sp); + putCache(RouteDataObjectAttribute.ROAD_PRIORITIES, road, sp); } return sp; } - private void putCache(Map> ch, RouteDataObject road, Float val) { - putCache(ch, road.region, road.types, val); + private void putCache(RouteDataObjectAttribute attr, RouteDataObject road, Float val) { + putCache(attr, road.region, road.types, val); } - private void putCache(Map> ch, RouteRegion reg, int[] types, Float val) { + private void putCache(RouteDataObjectAttribute attr, RouteRegion reg, int[] types, Float val) { + Map> ch = evalCache[attr.ordinal()]; if (USE_CACHE) { Map rM = ch.get(reg); if (rM == null) { @@ -508,11 +500,12 @@ public class GeneralRouter implements VehicleRouter { } } - private Float getCache(Map> ch, RouteDataObject road) { - return getCache(ch, road.region, road.types); + private Float getCache(RouteDataObjectAttribute attr, RouteDataObject road) { + return getCache(attr, road.region, road.types); } - private Float getCache(Map> ch, RouteRegion reg, int[] types) { + private Float getCache(RouteDataObjectAttribute attr, RouteRegion reg, int[] types) { + Map> ch = evalCache[attr.ordinal()]; TIMER -= System.nanoTime(); if (USE_CACHE) { Map rM = ch.get(reg); From 6b7034658b1e1909afae6195f17e8ae1d0ee9e5f Mon Sep 17 00:00:00 2001 From: Mr-Update Date: Fri, 6 Dec 2019 22:16:20 +0000 Subject: [PATCH 19/61] Translated using Weblate (German) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-de/strings.xml | 359 ++++++++++++++++--------------- 1 file changed, 181 insertions(+), 178 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index ea98c6a4ce..16da11089d 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -36,7 +36,7 @@ Hintergrunddienst\n einschalten Hintergrunddienst\n ausschalten Verfolgt Ihre Position, während der Bildschirm ausgeschaltet ist. - Hintergrunddienst + OsmAnd im Hintergrund ausführen GPS Aufwach-Intervall für den Hintergrunddienst: GPS-Aufwachintervall Aufzeichnung in GPX-Datei @@ -44,11 +44,11 @@ Generelle Positionserfassung kann mit der Schaltfläche \'GPX-Aufzeichnung\' direkt auf dem Kartenbildschirm aktiviert oder deaktiviert werden. Aktuellen Track speichern Aktuellen Track jetzt als GPX-Datei speichern. - Während Navigation autom. Track aufzeichnen + Während der Navigation automatisch Track aufzeichnen Während der Navigation wird automatisch ein GPX-Track im Track-Ordner gespeichert. Aufzeichnungsintervall - Erfassungsintervall während Navigation - Positionserfassungsintervall für Steckenaufzeichnung während Navigation festlegen + Erfassungsintervall während der Navigation + Positionserfassungsintervall für Steckenaufzeichnung während der Navigation festlegen Karte ansehen Auto Fahrrad @@ -80,7 +80,7 @@ Tempolimit Lat %1$.3f, Lon %2$.3f - Keine Hausnummern / Gebäude gefunden. + Keine Gebäude gefunden. Inkrementelle Städtesuche Nach weiteren Ortschaften/Postleitzahlen suchen Wählen Sie aus, wann reine Straßenkarten angezeigt werden sollen: @@ -94,37 +94,37 @@ OsmAnd-Hintergrunddienst läuft noch. Ebenfalls beenden? Auswahl eines Straßen-Farbschemas: Straßenfarbschema - Warnungen anzeigen … + Warnungen anzeigen… Verkehrswarnungen (Tempolimits, Stoppzeichen, Rüttelschwellen, Tunnel), stationäre Radarkontrollen und Fahrspuranzeige konfigurieren. Kompass verwenden, wenn keine andere Richtungsbestimmung möglich ist. Kompass verwenden Keine Autobahnen - Kartenvergrößerung der Geschwindigkeit anpassen (während Kartennachführung). + Kartenvergrößerung der Geschwindigkeit anpassen (während der Kartennachführung). Automatische Vergrößerung Standort während der Navigation auf Straßen einrasten. Auf Straße einrasten OsmAnd Karten & Navigation Globale Landkarten- und Navigationsanwendung für Offline- und Online-OSM-Karten - OsmAnd (OSM Automated Navigation Directions) -\n -\nOsmAnd ist eine Open-Source Software Navigationsapp mit Zugriff auf eine große Vielfalt öffentlich zugänglicher OpenStreetMap-(OSM)-Karten weltweit. Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. OsmAnd bietet ferner eine Offline- und Online-Routing-Funktion inklusive Sprachnavigation. -\n -\nEinige der Kernfunktionen: -\n- Komplette Offline-Funktionalität (Kartenmaterial kann auf dem Gerät abgelegt werden) -\n- Kompakte Vektorkarten für die ganze Welt verfügbar -\n- Direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus -\n- Darstellung mehrerer überlagerter Kartenschichten wie GPX oder Navigations-Tracks, POIs (Points of Interest), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz -\n- Offline Adress- und POI-Suche -\n- Offlinenavigation für mittelstrecken Distanzen -\n- Auto-, Fahrrad- und Fußgänger-Modus wahlweise mit: -\n - automatischer Tag-Nacht-Umschaltung der Anzeige -\n - geschwindigkeitsabhängigem Kartenmaßstab -\n - Kartenausrichtung nach Kompass oder Bewegungsrichtung -\n - Fahrspuranzeige, Geschwindigkeitswarnung, aufgenommenen oder TTS-Sprachansagen + OsmAnd (OSM Automated Navigation Directions) \n -\n Einschränkungen dieser kostenlosen Version von OsmAnd: -\n - Begrenzte Anzahl der Kartendownloads -\n - Kein Offline-Zugriff auf Wikipedia POIs +\nOsmAnd ist eine Open-Source Software Navigationsapp mit Zugriff auf eine große Vielfalt öffentlich zugänglicher OpenStreetMap-(OSM)-Karten weltweit. Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. OsmAnd bietet ferner eine Offline- und Online-Routing-Funktion inklusive Sprachnavigation. +\n +\nEinige der Kernfunktionen: +\n- Komplette Offline-Funktionalität (Kartenmaterial kann auf dem Gerät abgelegt werden) +\n- Kompakte Vektorkarten für die ganze Welt verfügbar +\n- Direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus +\n- Darstellung mehrerer überlagerter Kartenschichten wie GPX oder Navigations-Tracks, POIs (Orte von Interesse), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz +\n- Offline Adress- und POI-Suche +\n- Offlinenavigation für mittelstrecken Distanzen +\n- Auto-, Fahrrad- und Fußgänger-Modus wahlweise mit: +\n - automatischer Tag-Nacht-Umschaltung der Anzeige +\n - geschwindigkeitsabhängigem Kartenmaßstab +\n - Kartenausrichtung nach Kompass oder Bewegungsrichtung +\n - Fahrspuranzeige, Geschwindigkeitswarnung, aufgenommenen oder TTS-Sprachansagen +\n +\n Einschränkungen dieser kostenlosen Version von OsmAnd: +\n - Begrenzte Anzahl der Kartendownloads +\n - Kein Offline-Zugriff auf Wikipedia-POIs \n \n OsmAnd wird aktiv weiterentwickelt und das Projekt benötigt Mittel für die Entwicklung, die Komplettierung und den Test neuer Funktionen. Bitte erwägen Sie den Kauf von OsmAnd+, die Förderung spezieller Funktionen oder eine allgemeine Spende auf https://osmand.net. OsmAnd+ Karten & Navigation @@ -140,7 +140,7 @@ \n - Kompakte Vektorkarten für die ganze Welt verfügbar \n - Unbeschränktes, direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus \n - Offline-Wikipedia-Funktion (Anzeige von Wikipedia-POIs), sehr nützlich für Besichtigungstouren -\n - Darstellung mehrerer überlagerter Kartenschichten wie GPX- oder Navigations-Tracks, POIs (Points of Interest), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz +\n - Darstellung mehrerer überlagerter Kartenschichten wie GPX- oder Navigations-Tracks, POIs (Orte von Interesse), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz \n - Offline-Adress- und POI-Suche \n - Offlinenavigation für Mittelstreckenentfernungen \n - Auto-, Fahrrad- und Fußgänger-Modus mit optionalen Funktionen: @@ -172,7 +172,7 @@ Online- oder zwischengespeicherte Kachelkartenquellen auswählen. Mit dieser Erweiterung erhalten Sie Zugang zu zahlreichen Online-Karten (sogenannte Kachel- oder Rasterkarten), von vordefinierten OpenStreetMap-Kacheln (wie Mapnik) bis hin zu Satellitenbildern und speziellen, zweckgebundenen Kartenfolien zu Wetter, Klima, Geologie, Geländerelief usw. \n -\nAlle Karten können sowohl als Hauptkarte als auch als Auf- oder Unterlage einer anderen Basiskarte (wie OsmAnds Standard-Offline-Karten) dargestellt werden. Um Kartenunterlagen sichtbarer zu machen, können bestimmte Elemente der OsmAnd-Vektorkarten im Menü \'Karte konfigurieren\' ausgeblendet werden. +\nAlle Karten können entweder als Hauptkarte oder als Auf- oder Unterlage einer anderen Basiskarte (wie OsmAnds Standard-Offline-Karten) dargestellt werden. Um Kartenunterlagen sichtbarer zu machen, können bestimmte Elemente der OsmAnd-Vektorkarten im Menü \'Karte konfigurieren\' ausgeblendet werden. \n \nRasterkarten können direkt online bezogen oder zur Offline-Verwendung mit einer Vielzahl von Bearbeitungstools als SQLite-Datei aufbereitet und manuell in den OsmAnd-Unterordner \'tiles\' kopiert werden. Zeigt die Einstellungen zum Einschalten der Hintergrundverfolgung und -Navigation durch regelmäßiges Aufwecken des GPS-Empfängers (bei ausgeschaltetem Bildschirm). @@ -182,26 +182,26 @@ Erweiterungen aktivieren weitere Einstellungen und zusätzliche Funktionen. Erweiterungen Diese Erweiterung ermöglicht das Erstellen und Bearbeiten von OSM-POI-Objekten, das Eintragen oder Kommentieren von OSM-Notizen sowie das Hochladen von GPX-Dateien als Beiträge zu OSM (benötigt ein OSM-Benutzerkonto). OSM ist ein gemeinschaftliches, frei zugängliches, globales Kartografierungsprojekt. Details siehe https://openstreetmap.org. Jeder ist eingeladen, aktiv daran mitzuarbeiten. Die Mitarbeit kann auch direkt via OsmAnd erfolgen, wenn in den Einstellungen der OsmAnd-Erweiterung ein OSM-Benutzerkonto hinterlegt wird. - Vektorkarten werden eventuell schneller angezeigt. Funktioniert nur auf manchen Geräten. + Vektorkarten werden wahrscheinlich schneller angezeigt. Funktioniert nur auf manchen Geräten. Eine Stimme auswählen und mittels Abspielen von Ansagen testen: OsmAnd-Entwicklung Natives Rendern Sprachansagen testen Offline-Vektorkarte für diese Position herunterladen (über \'Einstellungen\' → \'Kartenverwaltung\') oder schalten Sie auf die Erweiterung \'Online-Karten\' um. GPX-Dateien an OSM senden? - Bitte tragen Sie Ihren OSM-Benutzernamen und -Passwort ein, um GPX-Dateien hochzuladen. + Bitte tragen Sie Ihren OSM-Benutzernamen und Ihr Passwort ein, um GPX-Dateien hochzuladen. Unterstütze OsmAnd Unterstütze neue Funktionen Unterstützen Sie mit einer Spende die Entwicklung neuer Funktionen für die App. - Zeige Maßstab an + Maßstab anzeigen Info Zurück zum Standort Hilfe Barrierefreiheit-Modus - Schaltet die Eingabehilfen-Funktionen für beeinträchtige Benutzer ein. + Schaltet die Eingabehilfen-Funktionen für beeinträchtigte Benutzer ein. Ein Aus - Wie Android Systemeinstellung + Wie Android-Systemeinstellung Zurück zum Menü Herauszoomen Hineinzoomen @@ -212,7 +212,7 @@ Ostnordost Ost Ostsüdost - Süd-Ost + Südost Südsüdost Süd Südsüdwest @@ -238,7 +238,7 @@ Seitwärts (8 Sektoren) Im Uhrzeigersinn (12 Sektoren) Richtungsart - Wähle eine Art um relative Richtungen während der Bewegung auszudrücken + Wählen Sie einen Stil, um relative Richtungen während der Bewegung auszudrücken Automatische Ankündigungen ein Automatische Ankündigungen aus Ich bin hier @@ -260,7 +260,7 @@ Asynchrone OSM-Bearbeitung: OSM-POIs/-Notizen auf dem Gerät gespeichert In der Gerätedatenbank vermerkte OSM-POIs/-Notizen anzeigen und verwalten. - Online Aufzeichnung (benötigt GPX) + Online-Aufzeichnung (benötigt GPX) Track-Daten zu einem festgelegten Internet-Dienst senden, wenn GPX-Aufzeichnung aktiviert ist. Internetadresse zur Aufzeichnung Spezifikation der Internetadresse zur Aufzeichnung mit Parametern: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}. @@ -285,8 +285,8 @@ Australien und Ozeanien Weltweite und thematische Karten Weltweite Wikipedia-POIs - Sprachpakete (Aufnahmen - begrenzte Funktionalität) - Sprachpakete (TTS, empfohlen) + Sprachansagen (aufgezeichnet, eingeschränkte Funktionen) + Sprachansagen (TTS, empfohlen) Europa - Italien Europa - Großbritannien Nordamerika - Kanada @@ -317,7 +317,7 @@ Globale Einstellungen OSM-Benutzername Benötigt für openstreetmap.org-Beiträge. - OSM-Kennwort + OSM-Passwort Hintergrundmodus OsmAnd läuft bei ausgeschaltetem Bildschirm im Hintergrund. Speicherplatz (frei: %2$s MB) reicht nicht aus, um %1$s MB herunterzuladen. @@ -326,7 +326,7 @@ Native Bibliothek wird auf diesem Gerät nicht unterstützt. Native Bibliothek wird initialisiert… Kartenansicht automatisch zentrieren - Wartezeit für Rückkehr zur Kartennachführung. + Zeit, bis die Kartenansicht mit der aktuellen Position synchronisiert ist. Nachführung nur bei aktiver Navigation Kartennachführung erfolgt nur während Navigation. Kartennachführung aktiv. @@ -370,7 +370,7 @@ GPX-Dateien zur Kartenverbesserung an die OSM-Gemeinschaft übermitteln. %1$d von %2$d Datei(en) hochgeladen. An OSM senden - Mehr Kartendetails + Mehr Kartendetails anzeigen Einige Vektordaten (Straßen usw.) bereits bei kleineren Vergrößerungen zeigen. Favorit(en) gelöscht. Es soll(en) %1$d Favorit(en) und %2$d Favoriten-Gruppe(n) gelöscht werden. Fortfahren? @@ -382,7 +382,7 @@ Kategorie Nicht verwendet Laden Sie die Basis-Weltkarte herunter, um einen Überblick über die ganze Welt bei niedrigen Vergrößerungsstufen zu erhalten. - Bitte \'Offline\'-daten herunterladen, damit Karten offline verwendet werden können. + Bitte \'Offline\'-Daten herunterladen, damit Karten offline verwendet werden können. " \n \nLang tippen für Optionen" @@ -397,9 +397,9 @@ Deaktivieren Herunterladen POI-Daten - Adress-Daten + Adressdaten ÖPNV-Daten - Karten-Daten + Kartendaten Deaktiviert Sprachansagen (TTS) Sprachansagen (Aufnahmen) @@ -410,20 +410,20 @@ Neue Suche Textgröße für Bezeichnungen auf der Karte: Karten-Textgröße - Rendering Debug-Info - Flag zur Prüfung der Rendering-Performance (Geschwindigkeit des Offline-Bildaufbaus). + Rendern von Debug-Infos + Rendering-Performance anzeigen (Geschwindigkeit des Offline-Bildaufbaus). Entpacke neue Daten… Die Online-Navigation funktioniert nicht offline. Sprache nicht unterstützt - Die gewählte Sprache wird von der installierten Android-TTS-Engine nicht unterstützt, die voreingestellte Standard-Sprache wird stattdessen verwendet. Im Market nach einer anderen TTS-Engine suchen\? + Die gewählte Sprache wird von der installierten Android-TTS-Engine nicht unterstützt. Stattdessen wird die voreingestellte TTS-Sprache verwendet. Im Market nach einer anderen TTS-Engine suchen\? Fehlendes Sprachpaket Gewählte Sprache aus dem Market installieren? - Eine Offline-Vektor-Karte ist für diesen Ort vorhanden. - \n\t - \n\tZur Verwendung aktivieren: \'Menu\' → \'Karte konfigurieren\' → \'Kartenquelle…\' → \'Offline-Vektor-Karten\'. + Eine Offline-Vektor-Karte ist für diesen Ort vorhanden. +\n\t +\n\tZur Verwendung aktivieren: \'Menü\' → \'Karte konfigurieren\' → \'Kartenquelle…\' → \'Offline-Vektorkarten\'. Navi-Sprachausgabe Lautsprecher für Sprachansagen auswählen. - Wie Anrufe (unterbricht Bluetooth Verbindung zum Autoradio) + Wie Anrufe (unterbricht Bluetooth-Verbindung zum Autoradio) Wie Benachrichtigungen Wie Medien/Navigation Die App kann die Kartenebene %1$s nicht herunterladen, eine Neuinstallation könnte helfen. @@ -440,7 +440,7 @@ Overlay-Karte Overlay-Karte auswählen Karte schon installiert, Einstellungen werden aktualisiert. - Zu installierende oder zu aktualisierende Karten(Kacheln) wählen. + Zu installierende oder zu aktualisierende Karten (Kacheln) wählen. Kann Vorgang ohne Internetverbindung nicht abschließen. Weitere installieren… Verwenden Sie Rasterkarten für alles, was über diese Ebene hinausgeht. @@ -466,13 +466,13 @@ Standort mitteilen mittels Standort: %1$s %2$s - Um den Ort zu sehen, dem Web-Link %1$s oder Android-Intent-Link %2$s folgen + Um den Ort zu sehen, folgen Sie dem Weblink %1$s oder dem Android-Intent-Link %2$s Standort senden Standort mitteilen GPX-Wegpunkt \'\'{0}\'\' hinzugefügt - Wegpunkt an gespeicherten GPX-Track anfügen + Wegpunkt zum gespeicherten GPX-Track hinzufügen GPX-Wegpunkt anfügen - Administratives + Verwaltung Barriere Bildung Notfall @@ -497,7 +497,7 @@ Indiziere Karte… Indiziere POI… Indiziere ÖPNV… - I/O Fehler + I/O-Fehler km km/h m @@ -505,28 +505,28 @@ Autowerkstatt Nächstgelegene POIs Benutzerdefinierter Filter - Lebensmittel + Lebensmittelgeschäft Für Touristen Tankstelle - Online-Namens-Finder + Online-Namensfinder Lese zwischengespeicherte Kacheln… Nicht genügend Speicher für Index \'\'{0}\'\' Die Index-Version \'\'{0}\'\' wird nicht unterstützt - OsmAnds Offline-Navigation ist noch experimentell und funktioniert nicht gut für Entfernungen über 20 km. + Die Offline-Navigation von OsmAnd ist noch experimentell und funktioniert nicht gut für Entfernungen über 20 km. \n -\nAls Navigationsdienst wird temporär der CloudMade-Online-Dienst verwendet. +\nAls Navigationsdienst wird temporär der Onlinedienst CloudMade verwendet. Angegebener Ordner konnte nicht gefunden werden. Datenordner Alle Offline-Daten der älteren App werden in der neuen weiter unterstützt. Favoriten müssen aber in der Vorversion exportiert und anschließend in die neue Version importiert werden. Build {0} installiert ({1}). - Lade Build… + Lade Build herunter… OsmAnd ({0} von {1} {2} MB) installieren? Laden der Liste von OsmAnd-Builds ist fehlgeschlagen Lade OsmAnd-Builds… Zu installierenden OsmAnd-Build auswählen - Versionen zur Installation - App \'GPS Status\' ist nicht installiert. Soll diese im Market gesucht werden werden? - Keine Sprachführung verfügbar, bitte gehen Sie zu \'Einstellungen\' → \'Navigationseinstellungen\' → \'Sprachführung\' und wählen Sie ein Sprachpaket aus oder laden Sie es herunter. + Version installieren + App \'GPS Status\' ist nicht installiert. Soll diese im Market gesucht werden\? + Keine Sprachführung verfügbar, bitte gehen Sie zu \'Einstellungen → Navigation → Sprachansage auswählen\' und wählen Sie ein Sprachansagepaket aus oder laden Sie es herunter. Wählen Sie ein Sprachansagepaket aus Tag Nacht @@ -535,7 +535,7 @@ Wechsel zwischen Tag- und Nacht-Anzeige einstellen. Tag/Nacht-Modus Lade {0} Datei(en) ({1} MB)? - {0} Punkte ausgewählt + {0} Punkt(e) ausgewählt Filter gespeicherte Alle markieren Aktualisieren @@ -552,7 +552,7 @@ Renderer geladen Renderer konnte nicht geladen werden. Vektor-Renderer - Wähle Darstellung für Offline-Vektor-Karten + Darstellung für Offline-Vektorkarten auswählen POI-Internetseite anzeigen POI-Telefon anzeigen Webseite @@ -567,10 +567,10 @@ ÖPNV-Suche zurücksetzen Sprachansagen Sprachansage - Offline-Daten wurden nicht geladen + Vektorkarten wurden nicht geladen GPX-Dateien… GPX-Daten konnten nicht gelesen werden - Offline-Vektor-Karten + Offline-Vektorkarten Suche nach Verbindung an Haltestelle Bearbeite POI Lösche POI @@ -581,28 +581,28 @@ Kartenrotation Routendetails Favoriten importiert - GPX-Datei mit den Favoriten nicht gefunden unter {0} + GPX-Datei mit Favoriten, die bei {0} nicht gefunden wurden Favoriten unter {0} gespeichert Keine Favoritenpunkte zum Speichern Import GPX konnte nicht geladen werden. Bericht senden Es konnten keine heruntergeladenen Karten auf der Speicherkarte gefunden werden. - POI Suchbegriff eingeben + POI-Suchbegriff eingeben Alles - Danke an Yandex für die Überlassung von Verkehrsinfos. + Dank an Yandex für die Überlassung von Verkehrsinfos. Yandex-Verkehr Route Favoriten OSM-Notizen (online) - POI Overlay… + POI-Overlay… POI-Overlay-Bezeichnungen Kartenquelle… Kartenebenen Suche nach POI Trackball-Gerät für Kartenbewegung verwenden. Trackball verwenden - Legt die maximale zulässige Wartezeit für jede Hintergrund-Standortbestimmung fest. + Legt die maximal zulässige Wartezeit für jede Hintergrund-Standortbestimmung fest. Maximale Suchzeit Wo bin ich? OsmAnd-Navigationsdienst @@ -623,7 +623,7 @@ Sprachansagen werden initialisiert… Sprachpaket-Version wird nicht unterstützt Sprachpaket ist defekt - Das gewählte Sprachpaket ist nicht verfügbar + Das gewählte Sprachansagepaket ist nicht verfügbar Die Speicherkarte ist nicht verfügbar. \nKarte lässt sich nicht darstellen. Speicherkarte befindet sich im Nur-Lesen-Modus. @@ -649,7 +649,7 @@ Bildschirmausrichtung Ausrichtung der Landkartenanzeige. Format der Öffnungszeiten kann nicht geändert werden. - Füge neue Regel hinzu + Neue Regel hinzufügen Strecken Haltestelle Haltestellen @@ -670,13 +670,13 @@ Lokale POI-Liste konnte nicht aktualisiert werden. Daten konnten nicht vom Server geladen werden. Für dieses Gebiet sind keine POI gespeichert - Mit dem Vergrößern können Sie POIs aktualisieren + Durch Vergrößern können Sie POIs aktualisieren POI aktualisieren Wollen Sie die Daten über das Internet aktualisieren? - Ort: {0} + Stadt: {0} Straße: {0}, {1} Querstraße: {0} x {1} in {2} - Hausnummer: {0}, {1}, {2} + Gebäude: {0}, {1}, {2} Favorit Alle löschen Verlauf @@ -689,8 +689,8 @@ Online-Suche: Hausnummer, Straße, Ort Offline-Suche Online-Suche - Max. Onlinevergrößerung - Durchsuchen Sie die Online-Kartenkacheln nicht nach höheren Zoomstufen. + Maximale Onlinevergrößerung + Durchsuchen Sie Online-Kartenkacheln nicht nach höheren Zoomstufen. Gesamtentfernung %1$s, Reisezeit %2$d h %3$d min. Online- oder Offline-Dienst zur Routenberechnung. Navigationsdienst @@ -709,7 +709,7 @@ Zielführung starten Nutzerprofil: Bitte zuerst ein Ziel festlegen - Navigation + Wegbeschreibung Öffnungszeiten Änderungssatz öffnen… Änderungssatz schließen… @@ -867,7 +867,7 @@ Parkplatz-Typ wählen zeitlich beschränkt zeitlich unbeschränkt - Einen Eintrag in der Kalender App hinzufügen + Einen Eintrag in der Kalender-App hinzufügen zeitlich begrenztes Parken zeitlich unbegrenztes Parken Standort des geparkten Fahrzeugs. %1$s @@ -883,16 +883,15 @@ Erkennbar Verfolgbar Privat - Belegter Speicher %1$s MB (Android Limit %2$s MB, Dalvik %3$s MB). + Belegter Speicher %1$s MB (Android-Limit %2$s MB, Dalvik %3$s MB). Belegter Speicher - Insgesamt durch die Anwendung belegter nativer Speicher %1$s MB (Dalvik %2$s MB, anderer %3$s MB). -Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB). + Insgesamt durch die Anwendung belegter nativer Speicher %1$s MB (Dalvik %2$s MB, anderer %3$s MB). Proportionaler Speicher %4$s MB (Android-Limit %5$s MB, Dalvik %6$s MB). Gesamter nativer Speicher Geschwindigkeit für Routen-Simulation: Stunde(n) Minuten Das Auto wurde geparkt um - Warte auf aktuellen Standort um die Route neu zu berechnen + Warte auf aktuellen Standort, um die Route neu zu berechnen Der nicht beendeten Route weiter folgen? (%1$s Sekunden) Blitzer Verkehrswarnungen @@ -926,7 +925,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Vermeiden von… Routen in Leuchtfarbe Maßstab - Blickrichtung einblenden + Blickrichtung Kartendarstellung Transparente Widgets Kontinuierlich @@ -967,8 +966,8 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Änderungssatz schließen unvollständig Höhenlinien - Diese Erweiterung beinhaltet Höhenlinien und Relief-Schattierungen, die als Ergänzung zu den Standard-Offline-Karten von OsmAnd angezeigt werden können. Diese Funktionalität ist vor allem für Sportler, Wanderer, Radfahrer, Trekker und jeden interessant, der sich für das Geländerelief einer Landschaft interessiert. (Bitte beachten Sie, Höhen- und Reliefdaten müssen nach Aktivierung des Moduls getrennt, zusätzlich heruntergeladen werden.) -\n + Diese Erweiterung beinhaltet Höhenlinien und Relief-Schattierungen, die als Ergänzung zu den Standard-Offline-Karten von OsmAnd angezeigt werden können. Diese Funktionalität ist vor allem für Sportler, Wanderer, Radfahrer, Trekker und jeden interessant, der sich für das Geländerelief einer Landschaft interessiert. (Bitte beachten Sie, Höhen- und Reliefdaten müssen nach Aktivierung der Erweiterung zusätzlich heruntergeladen werden.) +\n \nDie globalen Daten (zwischen 70° Nord und 70° Süd) basieren auf Messungen von SRTM (Shuttle Radar Topography Mission) und ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), einem bildgebenden System des Satelliten Terra, dem Flaggschiff des NASA-Erd-Beobachtungsprogramms. ASTER ist der Erfolg der Zusammenarbeit zwischen der NASA, dem japanischen Ministerium für Wirtschaft, Handel und Industrie und dem japanischen Raumfahrtprogramm (J-spacesystems). Höhenlinien-Plugin Bitte ziehen Sie den Kauf des Höhenlinien-Moduls im Play-Store in Erwägung, um die Weiterentwicklung zu fördern. @@ -979,7 +978,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Video aufzeichnen Audio aufnehmen Steuerelement-Standardaktion: - Standard-Steuerelement-Aktion + Steuerelement-Standardaktion Video-Ausgabeformat: Video-Ausgabeformat Systemrekorder für Video verwenden. @@ -989,7 +988,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Audio-/Video-Einstellungen Start Foto aufnehmen - System App für Fotos verwenden. + System-App für Fotos verwenden. System-Kamera-App nutzen Auf Anfrage\? Die Dropbox-Erweiterung macht die Synchronisierung von Tracks und Audio-/Video-Notizen mit Ihrem Dropbox-Konto möglich. @@ -1032,7 +1031,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Präzises Routing (experimentell) Audio-/Video-Daten Autobahnen bevorzugen - Bevorzugen von … + Bevorzugen von… Autobahnen bevorzugen. keine ausgewählt @@ -1043,7 +1042,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Straßenname Hausnummer Erscheinungsbild der App anpassen. - Eingabehilfeneinstellungen + Eingabehilfen-Einstellungen Adresse angeben Favorit auswählen OSM-Bearbeitungen @@ -1053,7 +1052,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Ziel löschen Andere %1$d Dateien übrig - Es können noch %1$d Dateien herunter geladen werden + Es können noch %1$d Dateien heruntergeladen werden Vollversion Navigation stoppen Route verwerfen @@ -1114,7 +1113,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Hyperfokaler Fokus Erweiterte Schärfentiefe (EDOF) Makro-Fokusmodus (Nahaufnahme) - Ansagen … + Ansagen… Ansagen zu Straßennamen, Verkehrswarnungen (Stoppzeichen, Rüttelschwellen), stationäre Radarkontrollen, Tempolimits konfigurieren. Straßennamen (TTS) FPS-Debug-Info @@ -1122,8 +1121,8 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Japan USA Kanada - Europa, Asien, Lateinamerika & ähnliche - UK, Indien & andere + Europa, Asien, Lateinamerika und andere + UK, Indien und andere Australien Verkehrsregion Version: @@ -1132,8 +1131,8 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Heruntergeladene Vergrößerungsstufen: %1$s Gültigkeit endet in (Minuten): %1$s Herunterladbar: %1$s - Größte Vergrößerung: %1$s - Kleinste Vergrößerung: %1$s + Maximale Vergrößerung: %1$s + Minimale Vergrößerung: %1$s Kacheldaten: %1$s Kachelquelle %1$s wurde gespeichert Elliptischer Merkator @@ -1177,7 +1176,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).OsmAnd-Dateien werden zum neuen Speicherort (%s) kopiert… OsmAnd-Dateien werden kopiert… OsmAnd-Route offline berechnen - LKW + Lkw Navigationseinstellungen Einstellungen für Routenberechnung Sprachgeschwindigkeit der Sprachsynthese bestimmen. @@ -1187,7 +1186,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Komplexes Routing deaktivieren Auf Karte auswählen Favorit - Routing-Einstellungen + Routen-Einstellungen Routen-Info OsmAnd-Routenteil offline berechnen Angezeigten Track zur Navigation verwenden? @@ -1216,20 +1215,20 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Tracks Favoriten Meine Orte - %1$s wird geladen … + %1$s wird geladen… Aktuelle Zeit " \n \nZur Darstellung auf der Karte lange drücken" Navigation automatisch starten - als Favoritengruppe speichern + Als Favoritengruppe speichern Ziele auswählen Nach Entfernung sortieren Nach Name sortieren Zoomtasten bei Navigation anzeigen. Zoomtasten anzeigen Keine Downloads gefunden, bitte die Internet-Verbindung überprüfen. - Wählen sie zuerst eine GPX-Datei durch langes Antippen aus. + Wählen Sie zuerst eine GPX-Datei durch langes Antippen aus. Einen Track auswählen Gebäude Fußwege @@ -1333,12 +1332,12 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Sichtbarkeit Tags Beschreibung - Aufzeichnung mit der GPX-Taste oder unter \'Einstellungen\' → \'Streckenaufzeichnung\' aktivieren. + Aufzeichnung mit der GPX-Taste oder unter \'Erweiterungen → Streckenaufzeichnung → Einstellungen\'. GPX-Route GPX-Route umkehren Derzeitiges Ziel verwenden Gesamten Track durchlaufen - Keine GPX-Dateien gefunden in /tracks-Ordner + Keine GPX-Dateien im Ordner tracks gefunden GPX-Dateiname GPX-Datei gespeichert unter {0} OsmAnd-Route für ersten und letzten Abschnitt berechnen @@ -1363,7 +1362,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Schriftgröße Doppelter Favoritenname angegeben Favorit wurde in %1$s umbenannt, um Dopplung zu vermeiden. - Favorit umbenannt in\'%1$s\', um die Zeichenkette mit Emoticons in einer Datei zu speichern. + Favorit umbenannt in \'%1$s\', um die Zeichenkette mit Emoticons in einer Datei zu speichern. Route drucken Toleranz für Tempolimit Toleranzgrenze für Tempolimit auswählen, oberhalb derer Sie eine Sprachwarnung erhalten. @@ -1389,7 +1388,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Bildschirm bei Navigationsanweisung aktivieren (falls aus). Niemals Straßen vermeiden… - Straßen- und Eisenbahnlinien + Straßenbahn- und Eisenbahnlinien Stadtbahnlinien Sammeltaxi-Linien Oberleitungsbuslinien @@ -1405,7 +1404,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Verwerfen Alle Daten aktuell OpenGL-Rendering verwenden - Hardware beschleunigtes OpenGL-Rendering verwenden (könnte mehr Akkuleistung verbrauchen und nicht auf allen Geräten funktionieren). + Hardware-beschleunigtes OpenGL-Rendering verwenden (Könnte mehr Akkuleistung verbrauchen und nicht auf allen Geräten funktionieren). Herunterladen nicht möglich. Bitte die Internet-Verbindung prüfen. Alle Downloads Aktualisierungen @@ -1450,9 +1449,9 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).HTTP-Proxy aktivieren HTTP-Proxy für alle Netzwerkanfragen einrichten. Proxy-Host - Einen Host-Namen des Proxys festlegen (Bsp. 127.0.0.1). + Einen Host-Namen des Proxys festlegen (z. B. 127.0.0.1). Proxy-Port - Einen Port des Proxys festlegen (Bsp. 8118). + Einen Port des Proxys festlegen (z. B. 8118). Deaktiviert Aktiviert Aktivieren @@ -1480,7 +1479,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB). Bei Aktivierung dieser Ansicht wechselt die Kartendarstellung zur \'Tourenkarte\', einer besonders detaillierten Darstellung für Fernreisende und Berufsfahrer. \n -\nDiese Darstellung liefert für jeden Maßstab den größtmöglichen Umfang an Details zu Fernreisen, die die Kartendaten enthalten (insbesondere alle Straßen, Wege, Pfade und Orientierungspunkte). +\nDiese Darstellung liefert für jeden Maßstab den größtmöglichen Umfang an Reisedetails, die die Kartendaten enthalten (insbesondere Straßen, Wege, Pfade und Orientierungspunkte). \n \nAlle Straßenarten werden in der Darstellung farblich klar unterschieden, was speziell für Fahrer großer Fahrzeuge unabdingbar sein kann. \n @@ -1517,7 +1516,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Kartenspeicher Kopieren Nach Namen filtern - A-GPS Info + A-GPS-Info Verwalten Bearbeiten Suchen @@ -1550,7 +1549,7 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).Video Foto Orte - Zur korrekten Wiedergabe von Verkehrszeichen und -regeln, bitte Region wählen: + Zur korrekten Wiedergabe von Verkehrszeichen und -regeln bitte Region wählen: OsmAnd bietet globale Offline-Karten und Offline-Navigation. Vorher besuchen Aktion erstellen @@ -1641,7 +1640,7 @@ Lon %2$s Sind Sie sicher, dass Sie %1$d Notizen löschen möchten\? Telugu Einfärbung gemäß Routennetzwerk - Einfärbung gemäß OSMC Wandersymbol + Einfärbung gemäß OSMC-Wandersymbol Gefällt Ihnen OsmAnd? Bewerte diese App Bitte gib OsmAnd eine Bewertung auf Google Play @@ -1662,7 +1661,8 @@ Lon %2$s Hervorgehobene Umrisse Änderung löschen Karte wurde versteckt - Offline-Karten\n& Navigation + Offline-Karten +\nund Navigation POI übermitteln Kein Shuttlezug Vermeidet die Nutzung von Shuttlezügen @@ -1787,8 +1787,8 @@ Lon %2$s %1$s Downloads übrig Herunterladen - %1$d Datei Zeige das Banner der freien Version - Bitte das \'Seekarten-Modul\' aktivieren - Bitte das \'Höhenlinien-Modul\' aktivieren + Bitte die Erweiterung \'Seekarte\' aktivieren + Bitte die Erweiterung \'Höhenlinien\' aktivieren Vollversion Die reine Straßenkarte wird nicht benötigt, da Sie die Standardkarte haben. Trotzdem herunterladen? %1$.1f von %2$.1f MB @@ -1802,7 +1802,7 @@ Lon %2$s Auswahl der App-Bedienung Es ist auswählbar, ob die App primär über die flexible Übersichtsseite oder über ein statisches Menü bedient werden soll. Diese Entscheidung kann jederzeit in den Übersichtsseiten-Einstellungen geändert werden. Aufruf von der Karte aus - neu erstellen + Neu erstellen Weiter %.1f MB Bitte einen gültigen POI-Typ angeben oder überspringen. @@ -2015,7 +2015,7 @@ Lon %2$s Erste Schritte Jetzt alle Karten aktualisieren? Alle Kartenkacheln löschen - Es sind keine Offline-Karten installiert. Sie können jetzt eine Karte auswählen oder später Karten über \'Menü - %1$s\' herunterladen. + Es sind keine Offline-Karten installiert. Sie können jetzt eine Karte auswählen oder später Karten über \'Menü → %1$s\' herunterladen. Eine andere Region auswählen Karten werden gesucht… Lassen Sie OsmAnd Ihren Standort bestimmen und für diese Region Karten zum Herunterladen vorschlagen. @@ -2108,7 +2108,7 @@ Lon %2$s Kartenmarker hinzufügen POI hinzufügen Kartendarstellung ändern - Kartendarstellung geändert zu “%s“. + Kartendarstellung geändert zu „%s“. Neue Audio-Notiz Neue Video-Notiz Neue Foto-Notiz @@ -2123,7 +2123,7 @@ Lon %2$s Favorit hinzufügen Aktion hinzufügen Aktion löschen - Sind Sie sicher, dass Sie die Aktion \"%s\" löschen möchten? + Sind Sie sicher, dass Sie die Aktion „%s“ löschen möchten\? Dialog zu Favoriten anzeigen Name Voreinstellen Aktionsname @@ -2155,7 +2155,7 @@ Lon %2$s Kartenquelle ändern Kartenquellen Kartenquelle hinzufügen - Die Kartenquelle wurde in \"%s\" geändert. + Die Kartenquelle wurde in „%s“ geändert. Tastenposition ändern Favoriten anzeigen Favoriten ausblenden @@ -2176,14 +2176,14 @@ Lon %2$s Objekte erstellen Diese Nachricht wird ins Kommentarfeld eingetragen. Langes Drücken und Ziehen der Taste ändert ihre Bildschirmposition. - Die Overlay-Karte wurde in “%s“ geändert. - Die Underlay-Karte wurde in “%s“ geändert. + Die Overlay-Karte wurde in „%s“ geändert. + Die Underlay-Karte wurde in „%s“ geändert. Ungültiger OLC Kurzer OLC -Bitte geben Sie einen vollständigen Code ein +\nBitte geben Sie einen vollständigen Code ein Gültiger vollständiger OLC -Abgedeckte Fläche: %1$s x %2$s +\nAbgedeckte Fläche: %1$s x %2$s Aufzeichnungen bei Lücken automatisch trennen Nach 6-minütiger Pause neues Segment, nach 2-stündiger Pause neuen Track und nach Pause mit Datumsänderung neue Datei beginnen. Offener Standortcode (OLC) @@ -2237,7 +2237,7 @@ Abgedeckte Fläche: %1$s x %2$s Automatisch OsmAnd (OSM Automated Navigation Directions) ist eine Karten- und Navigationsapp mit Zugriff auf die kostenlosen, weltweiten und qualitativ hochwertigen Daten von OpenStreetMap (OSM). \n -\nGenießen Sie die akustische und visuelle Navigation, die Anzeige von POIs (points of interest), die Erstellung und Verwaltung von GPX-Tracks, die Darstellung von Höhenlinien und Höhendaten (durch eine Erweiterung), die Wahl zwischen Auto-, Fahrrad- oder Fußgängerbetrieb, die Möglichkeit, an OSM mitzuarbeiten und vieles mehr. +\nGenießen Sie die akustische und visuelle Navigation, die Anzeige von POIs (Orte von Interesse), die Erstellung und Verwaltung von GPX-Tracks, die Darstellung von Höhenlinien und Höhendaten (durch eine Erweiterung), die Wahl zwischen Auto-, Fahrrad- oder Fußgängerbetrieb, die Möglichkeit, an OSM mitzuarbeiten und vieles mehr. GPS-Navigation \n • Sie haben die Wahl zwischen dem Offline-Betrieb (ohne Roaming-Gebühren, wenn Sie im Ausland sind) oder dem (schnelleren) Online-Betrieb \n • Die Sprachführung (mit aufgenommenen oder synthetischen Stimmen) begleitet Sie Schritt für Schritt auf Ihrem Weg @@ -2250,14 +2250,15 @@ Abgedeckte Fläche: %1$s x %2$s \n • Die Festlegung von Zwischenstopps entlang Ihrer Reiseroute ist möglich \n • Sie können Ihre GPX-Tracks aufzeichnen, einspielen und ihnen folgen \n - Karten -\n • zeigen POIs (Points of Interest) in Ihrer Umgebung an -\n • richten sich nach Ihrer Bewegungsrichtung (oder dem Kompass) aus -\n • zeigen an, wo Sie sind und worauf Sie sehen -\n • übermitteln Ihre Position, damit Ihre Freunde Sie finden können -\n • speichern Ihre wichtigsten Orte als Favoriten -\n • lassen Ihnen die Wahl, wie Bezeichnungen auf der Karte angezeigt werden sollen: in Englisch, Landessprache oder in phonetischer Schreibweise -\n • stellen spezielle Online-Karten, Satellitenansichten (von Bing), verschiedene Overlays, wie GPX-Tracks zu Touren-/Routenverläufen, und zusätzliche Ebenen mit einstellbarer Transparenz dar + Karten +\n • zeigen POIs (Orte von Interesse) in Ihrer Umgebung an +\n • richten sich nach Ihrer Bewegungsrichtung (oder dem Kompass) aus +\n • zeigen an, wo Sie sind und worauf Sie sehen +\n • übermitteln Ihre Position, damit Ihre Freunde Sie finden können +\n • speichern Ihre wichtigsten Orte als Favoriten +\n • lassen Ihnen die Wahl, wie Bezeichnungen auf der Karte angezeigt werden sollen: in Englisch, Landessprache oder in phonetischer Schreibweise +\n • stellen spezielle Online-Karten, Satellitenansichten (von Bing), verschiedene Overlays, wie GPX-Tracks zu Touren-/Routenverläufen und zusätzliche Ebenen mit einstellbarer Transparenz dar +\n Ski-Sport \n das OsmAnd-Skikarten-Modul ermöglicht Ihnen das Betrachten von Skirouten, deren Schwierigkeitsgrad und einiger zusätzlicher Informationen, wie die Lage von Liften und weiterer Einrichtungen. Radfahren @@ -2266,37 +2267,39 @@ Abgedeckte Fläche: %1$s x %2$s \n • Sie können Ihre Geschwindigkeit und Höhe verfolgen \n • Die Möglichkeit der GPX-Aufzeichnung versetzt Sie in die Lage, Ihre Fahrt zu protokollieren und sie mit anderen zu teilen \n • Über ein Zusatzmodul können Sie Höhenlinien und das Geländerelief einschalten - Laufen, Wandern, Stadtbesichtigung -\n • Die Karte zeigt Ihnen Fuß- und Wanderwege an -\n • Wikipedia, in der von Ihnen gewünschten Sprache, kann Ihnen eine Menge bei einer Stadtbesichtigung erzählen -\n • Haltestellen öffentlicher Verkehrsmittel (Bus, Tram, Bahn), inklusive der Linienbezeichnungen, helfen Ihnen dabei, sich in einer neuen Stadt zurechtzufinden -\n • Die GPS-Navigation im Fußgänger-Modus berechnet Ihre Route anhand von Fußwegen -\n • Sie können GPX-Routen einspielen und ihnen folgen oder eigene aufzeichnen und mit anderen teilen - OSM-Mitarbeit -\n • Melden Sie falsche Daten -\n • Übertragen Sie direkt aus der App GPX-Tracks an OSM -\n • Ergänzen Sie POIs und leiten Sie sie direkt (oder, falls Sie keine Netzverbindung haben, später) an OSM weiter + Laufen, Wandern, Stadtbesichtigung +\n • Die Karte zeigt Ihnen Fuß- und Wanderwege an +\n • Wikipedia, in der von Ihnen gewünschten Sprache, kann Ihnen eine Menge bei einer Stadtbesichtigung erzählen +\n • Haltestellen öffentlicher Verkehrsmittel (Bus, Tram, Bahn) inklusive der Linienbezeichnungen helfen Ihnen dabei, sich in einer neuen Stadt zurechtzufinden +\n • Die GPS-Navigation im Fußgänger-Modus berechnet Ihre Route anhand von Fußwegen +\n • Sie können GPX-Routen einspielen und ihnen folgen oder eigene aufzeichnen und mit anderen teilen +\n + OSM-Mitarbeit +\n • Melden Sie falsche Daten +\n • Übertragen Sie direkt aus der App GPX-Tracks an OSM +\n • Ergänzen Sie POIs und leiten Sie sie direkt (oder bei fehlender Netzverbindung später) an OSM weiter +\n OsmAnd ist quelloffen und wird stetig weiterentwickelt. Jeder kann durch Meldung von Fehlern, Verbesserung der Übersetzung oder Programmierung neuer Funktionen an der App mitarbeiten. Durch all diese Formen der Zusammenarbeit zwischen Entwickler und Anwender wird eine lebendige, kontinuierliche Verbesserung des Projekts gewährleistet. Darüberhinaus ist der Fortschritt des Projekts auch auf finanzielle Mitbeteiligung angewiesen, um die Programmierung und Testung neuer Funktionen fördern zu können. -\nUngefähre Kartenabdeckung und -qualität: -\n • Westeuropa: **** -\n • Osteuropa: *** -\n • Russland: *** -\n • Nordamerika: *** -\n • Südamerika: ** -\n • Asien: ** -\n • Japan & Korea: *** -\n • Mittlerer Osten: ** -\n • Afrika: ** -\n • Antarktis: * +\nUngefähre Kartenabdeckung und -qualität: +\n • Westeuropa: **** +\n • Osteuropa: *** +\n • Russland: *** +\n • Nordamerika: *** +\n • Südamerika: ** +\n • Asien: ** +\n • Japan und Korea: *** +\n • Mittlerer Osten: ** +\n • Afrika: ** +\n • Antarktis: * \n Die meisten Länder rund um den Globus stehen zum Herunterladen bereit! \n Holen Sie sich eine verlässliche Navigation für Ihr Land - sei es in Frankreich, Deutschland, Mexiko, Großbritannien, Spanien, den Niederlanden, den USA, Russland, Brasilien oder wo auch immer. Käufe wiederherstellen Kartenschriftarten - OsmAnd+ (OSM Automated Navigation Directions) ist eine Karten- und Navigationsapp mit Zugriff auf die kostenlosen, weltweit verfügbaren und qualitativ hochwertigen Daten von OpenStreetMap (OSM). -\n Genießen Sie die akustische und visuelle Navigation, die Betrachtung von POIs (points of interest), die Erstellung und Bearbeitung von GPX-Tracks, die Darstellung von Höhenlinien und -daten, die Auswahlmöglichkeiten zwischen Auto-, Fahrrad- und Fußgänger-Modus, die Möglichkeit der Mitarbeit an OSM und vieles mehr. -\n -\n OsmAnd+ ist die Kaufversion. Durch ihren Erwerb, unterstützen Sie das Projekt, fördern die Entwicklung neuer Funktionen und erhalten die neusten Aktualisierungen. -\n + OsmAnd+ (OSM Automated Navigation Directions) ist eine Karten- und Navigationsapp mit Zugriff auf die kostenlosen, weltweit verfügbaren und qualitativ hochwertigen Daten von OpenStreetMap (OSM). +\n Genießen Sie die akustische und visuelle Navigation, die Betrachtung von POIs (Orte von Interesse), die Erstellung und Bearbeitung von GPX-Tracks, die Darstellung von Höhenlinien und -daten, die Auswahlmöglichkeiten zwischen Auto-, Fahrrad- und Fußgänger-Modus, die Möglichkeit der Mitarbeit an OSM und vieles mehr. +\n +\n OsmAnd+ ist die Kaufversion. Durch ihren Erwerb unterstützen Sie das Projekt, fördern die Entwicklung neuer Funktionen und erhalten die neuesten Aktualisierungen. +\n \n Einige der Hauptmerkmale: Navigation \n • funktioniert online (schnell) oder offline (ohne Roaming-Gebühren im Ausland) @@ -2314,10 +2317,10 @@ Abgedeckte Fläche: %1$s x %2$s \n • Kompakte Offline-Vektorkarten, mindestens einmal pro Monat aktualisiert \n \n • Auswahl zwischen vollständigen Daten zu einer Region bzw. einfachen Daten zum Straßennetz (Beispiel: Japan insgesamt benötigt 700 MB, das Straßennetz nur 200 MB davon) - Sicherheitsfunktionen -\n • Optionales automatisches Umschalten der Tag-/Nachtansicht -\n • Optionale Tempolimit-Anzeige, mit Warnung bei Überschreitung -\n • Optionale geschwindigkeitsabhängige Vergrößerung + Sicherheitsfunktionen +\n • Optionales automatisches Umschalten der Tag-/Nachtansicht +\n • Optionale Tempolimit-Anzeige mit Warnung bei Überschreitung +\n • Optionale geschwindigkeitsabhängige Vergrößerung \n • Positionsübermittlung, damit Freunde Sie finden können \n Kartenabdeckung und ungefähre Kartenqualität: @@ -2327,7 +2330,7 @@ Abgedeckte Fläche: %1$s x %2$s \n • Nordamerika: *** \n • Südamerika: ** \n • Asien: ** -\n • Japan & Korea: *** +\n • Japan und Korea: *** \n • Mittlerer Osten: ** \n • Afrika: ** \n • Antarktis: * @@ -2344,7 +2347,7 @@ Abgedeckte Fläche: %1$s x %2$s Direkte Mitarbeit an OSM \n • Fehler melden \n • GPX-Tracks direkt aus der App an OSM weiterleiten -\n • POIs ergänzen und sie direkt (oder, bei fehlender Netzverbindung, später) zu OSM hochladen +\n • POIs ergänzen und sie direkt (oder bei fehlender Netzverbindung später) zu OSM hochladen \n • Wahlweise Streckenaufzeichnung auch im Hintergrund (im Ruhezustand des Gerätes) \nOsmAnd ist quelloffen und wird stetig weiterentwickelt. Jeder kann durch Meldung von Fehlern, Verbesserung der Übersetzung, Programmierung neuer Funktionen oder Kontakt mit anderen Benutzern an der App mitarbeiten. Der Projektfortschritt hängt auch von finanziellen Beiträgen für die Programmierung und das Testen neuer Funktionen ab. \n @@ -2352,7 +2355,7 @@ Abgedeckte Fläche: %1$s x %2$s \n • Positions- und Richtungsanzeige \n • Kartenausrichtung wahlweise nach Kompass oder Ihrer Bewegungsrichtung \n • Sicherung Ihrer wichtigsten Orte als Favoriten -\n • Anzeige der POIs (points of interest) in Ihrer Umgebung +\n • Anzeige der POIs (Orte von Interesse) in Ihrer Umgebung \n • Anzeige spezieller Online-Karten, Satellitenansichten (von Bing), verschiedener Overlays wie GPX-Tracks zu Touren-/Routenverläufen und zusätzlicher Kartenebenen mit einstellbarer Transparenz \n • Anzeige von Ortsnamen wahlweise in Englisch, Landessprache oder phonetischer Schreibweise \n @@ -2506,7 +2509,7 @@ Abgedeckte Fläche: %1$s x %2$s Keine Animationen Deaktiviert Animationen in der App. Weiterhin auf der Karte anzeigen - Beenden ohne zu speichern? + Beenden, ohne zu speichern\? Alles in den Verlauf verschieben Entfernungsangabe Sortieren nach @@ -2784,7 +2787,7 @@ Abgedeckte Fläche: %1$s x %2$s Universeller Stil. Klare Darstellung dicht besiedelter Städte. Hauptmerkmale: Höhenlinien, Routen, Oberflächenqualität, Zufahrtsbeschränkungen, Straßenschilder, Wegeführung nach SAC-Skala, Wildwassersportmerkmale. Lesezeichen Für den Einsatz im Gelände, basierend auf dem \'Topo\'-Kartenstil und zur Verwendung mit grünen Satellitenbildern als Unterlagekarte. Verringerte Linienstärke für Straßen, erhöhte für Fußwege, Wander-, Rad- und andere Outdoor-Routen. - Touring-Stil mit hohem Kontrast und maximalen Details. Enthält alle Optionen des OsmAnd-Standardstils und zeigt dabei so viele Details wie möglich an, insbesondere Straßen, Pfade und andere Verkehrswege. Klare Unterscheidung zwischen den Straßentypen durch den \"Touring-Atlas\". Geeignet für den Einsatz bei Tag, Nacht und im Freien. + Touring-Stil mit hohem Kontrast und maximalen Details. Enthält alle Optionen des OsmAnd-Standardstils und zeigt dabei so viele Details wie möglich an, insbesondere Straßen, Pfade und andere Verkehrswege. Klare Unterscheidung zwischen den Straßentypen durch den „Touring-Atlas“. Geeignet für den Einsatz bei Tag, Nacht und im Freien. Ankunftszeit Zwischenziel Reisezeit Zwischenziel Änderung des Standardstils, um den Kontrast von Fußgänger- und Fahrradwegen zu erhöhen. Verwendet alte Mapnik-Farben. @@ -2795,7 +2798,7 @@ Abgedeckte Fläche: %1$s x %2$s Punkt bearbeiten Punkt hinzufügen Als Track speichern - Sie haben %1$s Punkte hinzugefügt. Geben Sie einen Dateinamen ein und klicken Sie auf \"Speichern\". + Sie haben %1$s Punkte hinzugefügt. Geben Sie einen Dateinamen ein und klicken Sie auf „Speichern“. Punkt %1$s gelöscht Ihre Suchanfrage wird zusammen mit Ihrem Standort gesendet an: „%1$s“. \nPersönliche Daten werden nicht gesammelt, zur Verbesserung der Suche werden nur die Suchdaten benötigt. @@ -2990,8 +2993,8 @@ Abgedeckte Fläche: %1$s x %2$s Wählen Sie öffentliche Verkehrsmittel aus, die Sie für die Navigation vermeiden möchten: Verkehrsmittel ausschließen… Gehen - Kürzen sie die Länge des Tags \"%s\" auf weniger als 255 Zeichen. - Länge des Wertes \"%s\" + Kürzen sie die Länge des Tags „%s“ auf weniger als 255 Zeichen. + Länge des Wertes „%s“ %s Modus Kein Kopfsteinpflaster oder Pflastersteine Vermeidet Kopfsteinpflaster und Pflastersteine @@ -3048,7 +3051,7 @@ Abgedeckte Fläche: %1$s x %2$s Bestimmen Sie, welche Daten Sie für OsmAnd freigeben. Helfen Sie uns, die Beliebtheit von Karten für Länder und Regionen herauszufinden. Helfen Sie uns, die Beliebtheit von OsmAnd-Funktionen zu verstehen. - Auf \"Erlauben\" tippen, wenn Sie mit %1$s einverstanden sind + Auf „Erlauben“ tippen, wenn Sie mit %1$s einverstanden sind Datenschutz und Sicherheit Wählen Sie, welche Daten sie freigeben möchten Nein, danke @@ -3060,7 +3063,7 @@ Abgedeckte Fläche: %1$s x %2$s U-Bahn Pferd Hubschrauber - Sie können eine selbst modifizierte Version der Datei \"routing.xml\" in \"..osmand/routing\" hinzufügen + Sie können eine selbst modifizierte Version der Datei „routing.xml“ in „..osmand/routing“ hinzufügen Skifahren Symbol auswählen Ski @@ -3072,7 +3075,7 @@ Abgedeckte Fläche: %1$s x %2$s Änderungen speichern Änderungen am Profil zuerst speichern Profil löschen - Möchten Sie das Profil \"%s\" wirklich löschen\? + Möchten Sie das Profil „%s“ wirklich löschen\? Ein Basisprofil auswählen Bauen Sie ein eigenes Anwendungsprofil auf einem der Standardprofile der App auf. Dieses bestimmt die Grundeinstellungen wie Voreinstellungen zur Sichtbarkeit von Widgets und die Einheiten für Geschwindigkeit und Entfernungen. Dies sind die App-Standardprofile zusammen mit Beispielen für eigene Anwendungsprofile, die erweitert werden können: Navigationsart auswählen @@ -3148,7 +3151,7 @@ Abgedeckte Fläche: %1$s x %2$s \n \n• Verbesserte Kartendownloads im Hintergrund \n -\n• \"Bildschirm einschalten\"-Option wieder hinzugefügt +\n• Option „Bildschirm einschalten“ wieder hinzugefügt \n \n• Die Sprachauswahl in Wikipedia wurde korrigiert \n From 6e4b7d546402e0c6460815981f0e4f151837fc52 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Tue, 10 Dec 2019 15:03:26 +0200 Subject: [PATCH 20/61] Fix all remarks, fix block edit personal favorite points, add delete parking point when parking plugin is disabled --- .../osmand/data/PersonalFavouritePoint.java | 38 +++++---- .../net/osmand/plus/FavouritesDbHelper.java | 77 ++++++++----------- .../src/net/osmand/plus/OsmandSettings.java | 4 +- .../net/osmand/plus/TargetPointsHelper.java | 4 - .../activities/FavoritesTreeFragment.java | 35 +-------- .../osmand/plus/activities/MapActivity.java | 1 + .../plus/base/FavoriteImageDrawable.java | 50 +++++------- .../plus/mapcontextmenu/MapContextMenu.java | 8 ++ .../MapContextMenuFragment.java | 16 ++-- .../plus/mapcontextmenu/MenuController.java | 4 + .../FavouritePointMenuController.java | 5 ++ .../editors/SelectCategoryDialogFragment.java | 6 +- .../FavouritesBottomSheetMenuFragment.java | 4 +- .../parkingpoint/ParkingPositionPlugin.java | 9 ++- .../ParkingTypeBottomSheetDialogFragment.java | 5 +- .../AddPointBottomSheetDialog.java | 12 +-- .../MapRouteInfoMenu.java | 12 +-- .../search/listitems/QuickSearchListItem.java | 2 - 18 files changed, 133 insertions(+), 159 deletions(-) diff --git a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java index b70b938e30..f38694c11b 100644 --- a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java +++ b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java @@ -1,6 +1,7 @@ package net.osmand.data; import android.content.Context; +import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.annotation.StringRes; @@ -12,39 +13,46 @@ public class PersonalFavouritePoint extends FavouritePoint { private Context ctx; private PointType type; - public static final String PERSONAL = "personal"; + static final String PERSONAL = "personal"; public enum PointType { - HOME("home", R.string.home_button, 1), - WORK("work", R.string.work_button, 2), - PARKING("parking", R.string.map_widget_parking, 3); + HOME("home", R.string.home_button, 1, R.drawable.ic_action_home_dark), + WORK("work", R.string.work_button, 2, R.drawable.ic_action_work), + PARKING("parking", R.string.map_widget_parking, 3, R.drawable.ic_action_parking_dark); - private String pointName; + private String typeName; @StringRes private int resId; private int order; + @DrawableRes + private int iconID; - PointType(String pointName, @StringRes int resId, int order) { - this.pointName = pointName; + PointType(@NonNull String typeName, @StringRes int resId, int order, @DrawableRes int iconID) { + this.typeName = typeName; this.resId = resId; this.order = order; + this.iconID = iconID; } public String getName() { - return pointName; + return typeName; } public int getOrder() { return order; } - public static PointType valueOfPointName(@NonNull String typeName){ + public static PointType valueOfTypeName(@NonNull String typeName) { for (PointType pt:values()) { - if(pt.pointName.equals(typeName)) + if (pt.typeName.equals(typeName)) return pt; } - throw new IllegalArgumentException("Illegal PointType pointName"); + throw new IllegalArgumentException("Illegal PointType typeName"); + } + + public int getIconID() { + return iconID; } public String getHumanString(@NonNull Context ctx) { @@ -53,13 +61,13 @@ public class PersonalFavouritePoint extends FavouritePoint { } public PersonalFavouritePoint(@NonNull Context ctx, @NonNull PointType type, double latitude, double longitude) { - super(latitude, longitude, type.pointName, PERSONAL); + super(latitude, longitude, type.typeName, PERSONAL); this.ctx = ctx; this.type = type; } - public PersonalFavouritePoint(@NonNull Context ctx, @NonNull String pointName, double latitude, double longitude) throws IllegalArgumentException { - this(ctx, PointType.valueOfPointName(pointName), latitude, longitude); + PersonalFavouritePoint(@NonNull Context ctx, @NonNull String typeName, double latitude, double longitude) throws IllegalArgumentException { + this(ctx, PointType.valueOfTypeName(typeName), latitude, longitude); } @Override @@ -100,7 +108,7 @@ public class PersonalFavouritePoint extends FavouritePoint { public WptPt toWpt() { WptPt pt = super.toWpt(); pt.getExtensionsToWrite().put(PERSONAL, "true"); - pt.name = type.pointName; + pt.name = type.typeName; pt.desc = getDescription(); return pt; } diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 2a77a5d945..80fd50524a 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -12,7 +12,6 @@ import net.osmand.data.LatLon; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.WptPt; import net.osmand.data.PersonalFavouritePoint; -import net.osmand.data.PointDescription; import net.osmand.plus.MapMarkersHelper.MapMarkersGroup; import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; @@ -115,27 +114,6 @@ public class FavouritesDbHelper { }); } - public boolean hasWorkPoint() { - return hasPersonalPoint(WORK); - } - - public boolean hasHomePoint() { - return hasPersonalPoint(HOME); - } - - public boolean hasParkingPoint() { - return hasPersonalPoint(PARKING); - } - - private boolean hasPersonalPoint(PersonalFavouritePoint.PointType pointType) { - for (FavouritePoint fp : cachedPersonalFavoritePoints) { - if (((PersonalFavouritePoint) fp).getType() == pointType) { - return true; - } - } - return false; - } - public FavouritePoint getWorkPoint() { return getPersonalPoint(WORK); } @@ -148,6 +126,10 @@ public class FavouritesDbHelper { return getPersonalPoint(PARKING); } + public void deleteParkingPoint() { + deleteFavourite(getParkingPoint()); + } + private FavouritePoint getPersonalPoint(PersonalFavouritePoint.PointType pointType) { for (FavouritePoint fp : cachedPersonalFavoritePoints) { if (((PersonalFavouritePoint) fp).getType() == pointType) { @@ -245,6 +227,9 @@ public class FavouritesDbHelper { runSyncWithMarkers(group); } cachedFavoritePoints.remove(p); + if (p.isPersonal()) { + cachedPersonalFavoritePoints.remove(p); + } } if (saveImmediately) { saveCurrentPointsIntoFile(); @@ -252,49 +237,46 @@ public class FavouritesDbHelper { return true; } - public void setHomePoint(@NonNull LatLon latLon, @NonNull PointDescription description) { - if (hasHomePoint()) { - getHomePoint().setDescription(description.getName()); - editFavourite(getHomePoint(), latLon.getLatitude(), latLon.getLongitude()); + public void setHomePoint(@NonNull LatLon latLon) { + FavouritePoint homePoint = getHomePoint(); + if (homePoint != null) { + editFavourite(homePoint, latLon.getLatitude(), latLon.getLongitude()); } else { FavouritePoint cachedHomePoint = new PersonalFavouritePoint(context, HOME, latLon.getLatitude(), latLon.getLongitude()); - cachedHomePoint.setDescription(description.getName()); - cachedPersonalFavoritePoints.add(cachedHomePoint); addFavourite(cachedHomePoint); } - lookupAllPersonalPointsAddresses(); + lookupAddressAllPersonalPoints(); } - public void setWorkPoint(@NonNull LatLon latLon, @NonNull PointDescription description) { - if (hasWorkPoint()) { - getWorkPoint().setDescription(description.getName()); - editFavourite(getWorkPoint(), latLon.getLatitude(), latLon.getLongitude()); + public void setWorkPoint(@NonNull LatLon latLon) { + FavouritePoint workPoint = getWorkPoint(); + if (workPoint != null) { + editFavourite(workPoint, latLon.getLatitude(), latLon.getLongitude()); } else { FavouritePoint cachedWorkPoint = new PersonalFavouritePoint(context, WORK, latLon.getLatitude(), latLon.getLongitude()); - cachedWorkPoint.setDescription(description.getName()); - cachedPersonalFavoritePoints.add(cachedWorkPoint); addFavourite(cachedWorkPoint); } - lookupAllPersonalPointsAddresses(); + lookupAddressAllPersonalPoints(); } - public void setParkingPoint(@NonNull LatLon latLon, @NonNull PointDescription description) { - if (hasParkingPoint()) { - getParkingPoint().setDescription(description.getName()); - editFavourite(getParkingPoint(), latLon.getLatitude(), latLon.getLongitude()); + public void setParkingPoint(@NonNull LatLon latLon) { + FavouritePoint parkingPoint = getParkingPoint(); + if (parkingPoint != null) { + editFavourite(parkingPoint, latLon.getLatitude(), latLon.getLongitude()); } else { FavouritePoint cachedParkingPoint = new PersonalFavouritePoint(context, PARKING, latLon.getLatitude(), latLon.getLongitude()); - cachedParkingPoint.setDescription(description.getName()); - cachedPersonalFavoritePoints.add(cachedParkingPoint); addFavourite(cachedParkingPoint); } - lookupAllPersonalPointsAddresses(); + lookupAddressAllPersonalPoints(); } public boolean addFavourite(FavouritePoint p) { + if (p instanceof PersonalFavouritePoint) { + cachedPersonalFavoritePoints.add(p); + } return addFavourite(p, true); } @@ -320,7 +302,7 @@ public class FavouritesDbHelper { return true; } - private void lookupAllPersonalPointsAddresses() { + public void lookupAddressAllPersonalPoints() { if (!context.isApplicationInitializing()) { lookupAddressForHomePoint(); lookupAddressForWorkPoint(); @@ -328,7 +310,7 @@ public class FavouritesDbHelper { } } - void lookupAddressForWorkPoint() { + private void lookupAddressForWorkPoint() { final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); final FavouritePoint workPoint = getWorkPoint(); if (workPoint != null && (workPointRequest == null || @@ -338,6 +320,7 @@ public class FavouritesDbHelper { new LatLon(workPoint.getLatitude(), workPoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { @Override public void geocodingDone(String address) { + workPointRequest = null; workPoint.setDescription(address); targetPointsHelper.updateRouteAndRefresh(false); } @@ -346,7 +329,7 @@ public class FavouritesDbHelper { } } - void lookupAddressForHomePoint() { + private void lookupAddressForHomePoint() { final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); final FavouritePoint homePoint = getHomePoint(); if (homePoint != null && (homePointRequest == null || @@ -365,7 +348,7 @@ public class FavouritesDbHelper { } } - void lookupAddressForParkingPoint() { + private void lookupAddressForParkingPoint() { final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); final FavouritePoint parkingPoint = getParkingPoint(); if (parkingPoint != null && (parkingPointRequest == null || diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 9f297d2b77..5738c40b0a 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -262,10 +262,10 @@ public class OsmandSettings { void migrateHomeWorkParkingToFavorites() { FavouritesDbHelper favorites = ctx.getFavorites(); if (getHomePoint() != null) { - favorites.setHomePoint(getHomePoint(), getHomePointDescription()); + favorites.setHomePoint(getHomePoint()); } if (getWorkPoint() != null) { - favorites.setWorkPoint(getWorkPoint(), getWorkPointDescription()); + favorites.setWorkPoint(getWorkPoint()); } } diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 418b94968d..02a175ae97 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -150,15 +150,11 @@ public class TargetPointsHelper { } public void lookupAddessAll() { - FavouritesDbHelper favorites = ctx.getFavorites(); lookupAddressForPointToNavigate(); lookupAddessForStartPoint(); for (TargetPoint targetPoint : intermediatePoints) { lookupAddressForIntermediatePoint(targetPoint); } - favorites.lookupAddressForHomePoint(); - favorites.lookupAddressForWorkPoint(); - favorites.lookupAddressForParkingPoint(); lookupAddressForMyLocationPoint(); } diff --git a/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java b/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java index 6d11ce2353..f975607dae 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java @@ -45,7 +45,6 @@ import net.osmand.plus.FavouritesDbHelper.FavoritesListener; import net.osmand.plus.MapMarkersHelper; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; -import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.base.FavoriteImageDrawable; @@ -54,7 +53,6 @@ import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.FontCache; import net.osmand.plus.myplaces.FavoritesActivity; import net.osmand.plus.myplaces.FavoritesFragmentStateHolder; -import net.osmand.plus.parkingpoint.ParkingPositionPlugin; import net.osmand.util.Algorithms; import net.osmand.util.MapUtils; @@ -741,9 +739,7 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen Filter myFilter; private Set filter; - public void synchronizeGroups() { - ParkingPositionPlugin plugin = OsmandPlugin.getEnabledPlugin(ParkingPositionPlugin.class); - boolean parkingPluginEnable = plugin != null; + void synchronizeGroups() { favoriteGroups.clear(); groups.clear(); List disablesGroups = new ArrayList<>(); @@ -752,37 +748,14 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen for (FavoriteGroup key : gs) { boolean empty = true; if (flt == null || flt.contains(key)) { - if (key.name.equals(PersonalFavouritePoint.PERSONAL)) { - ArrayList list = new ArrayList<>(); - for (FavouritePoint p : key.points) { - if (p.getName().equals(PersonalFavouritePoint.PointType.PARKING.name())) { - if (parkingPluginEnable) { - list.add(p); - empty = false; - } - } else { - list.add(p); - empty = false; - } - } - favoriteGroups.put(key, list); - } else { empty = false; favoriteGroups.put(key, new ArrayList<>(key.points)); - } } else { ArrayList list = new ArrayList<>(); for (FavouritePoint p : key.points) { if (flt.contains(p)) { - if (p.getName().equals(PersonalFavouritePoint.PointType.PARKING.name())) { - if (parkingPluginEnable) { - list.add(p); - empty = false; - } - } else { - list.add(p); - empty = false; - } + list.add(p); + empty = false; } } favoriteGroups.put(key, list); @@ -978,7 +951,7 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen distanceText.setText(distanceWithAddress); icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), visible ? model.getColor() : getResources().getColor(disabledIconColor), false, - ((PersonalFavouritePoint) model).getType().getOrder() - 1)); + ((PersonalFavouritePoint) model).getType())); name.setText((model.getName())); } else { icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 41c0d8fae8..68cab5145a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -425,6 +425,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven if (dashboardOnMap != null) { dashboardOnMap.updateLocation(true, true, false); } + app.getFavorites().lookupAddressAllPersonalPoints(); app.getTargetPointsHelper().lookupAddessAll(); app.getMapMarkersHelper().lookupAddressAll(); } diff --git a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java index 80bb6d8cf8..de10cf96e2 100644 --- a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java +++ b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java @@ -18,7 +18,7 @@ import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.content.res.ResourcesCompat; -import net.osmand.data.PersonalFavouritePoint; +import net.osmand.data.PersonalFavouritePoint.PointType; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; @@ -26,10 +26,8 @@ import java.util.TreeMap; public class FavoriteImageDrawable extends Drawable { - private static final int MAX_PERSONAL_POINT = PersonalFavouritePoint.PointType.values().length; private boolean withShadow; private boolean synced; - private int position; private boolean history; private Bitmap favIcon; private Bitmap favBackground; @@ -44,20 +42,16 @@ public class FavoriteImageDrawable extends Drawable { private Paint paintInnerCircle = new Paint(); private ColorFilter colorFilter; private ColorFilter grayFilter; - private Drawable[] personalPointBitmaps; + private Drawable personalPointBitmaps; - public FavoriteImageDrawable(Context ctx, int color, boolean withShadow, boolean synced) { + public FavoriteImageDrawable(Context ctx, int color, boolean withShadow, boolean synced, PointType pointType) { this.withShadow = withShadow; this.synced = synced; Resources res = ctx.getResources(); - personalPointBitmaps = new Drawable[]{ - UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, R.drawable.ic_action_home_dark, null), - ContextCompat.getColor(ctx, R.color.icon_color_default_light)), - UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, R.drawable.ic_action_work, null), - ContextCompat.getColor(ctx, R.color.icon_color_default_light)), - UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, R.drawable.ic_action_parking_dark, null), - ContextCompat.getColor(ctx, R.color.icon_color_default_light)) - }; + if (pointType != null) { + personalPointBitmaps = UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, pointType.getIconID(), null), + ContextCompat.getColor(ctx, R.color.icon_color_default_light)); + } int col = color == 0 || color == Color.BLACK ? res.getColor(R.color.color_favorite) : color; favIcon = BitmapFactory.decodeResource(res, R.drawable.map_favorite); favBackground = BitmapFactory.decodeResource(res, R.drawable.map_white_favorite_shield); @@ -72,11 +66,6 @@ public class FavoriteImageDrawable extends Drawable { grayFilter = new PorterDuffColorFilter(res.getColor(R.color.color_favorite_gray), PorterDuff.Mode.MULTIPLY); } - public FavoriteImageDrawable(Context ctx, int color, boolean withShadow, boolean synced, int position) { - this(ctx, color, withShadow, synced); - this.position = position; - } - private void initSimplePaint(Paint paint, int color) { paint.setAntiAlias(true); paint.setStyle(Style.FILL_AND_STROKE); @@ -91,8 +80,8 @@ public class FavoriteImageDrawable extends Drawable { //bs.inset((int) (4 * density), (int) (4 * density)); bs.inset(bs.width() / 4, bs.height() / 4); listDrawable.setBounds(bs); - for (Drawable drawable : personalPointBitmaps) { - drawable.setBounds(bounds); + if (personalPointBitmaps != null) { + personalPointBitmaps.setBounds(bounds); } } } @@ -119,8 +108,8 @@ public class FavoriteImageDrawable extends Drawable { } else if (withShadow) { canvas.drawBitmap(favBackground, bs.exactCenterX() - favBackground.getWidth() / 2f, bs.exactCenterY() - favBackground.getHeight() / 2f, paintBackground); canvas.drawBitmap(favIcon, bs.exactCenterX() - favIcon.getWidth() / 2f, bs.exactCenterY() - favIcon.getHeight() / 2f, paintIcon); - } else if (position < MAX_PERSONAL_POINT) { - personalPointBitmaps[position].draw(canvas); + } else if (personalPointBitmaps != null) { + personalPointBitmaps.draw(canvas); } else { int min = Math.min(bs.width(), bs.height()); int r = (min * 4 / 10); @@ -157,27 +146,30 @@ public class FavoriteImageDrawable extends Drawable { private static TreeMap cache = new TreeMap<>(); - public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, boolean synced, int position) { + public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, boolean synced, PointType pointType) { + int order = 0; + if (pointType != null) + order = pointType.getOrder(); color = color | 0xff000000; - int hash = (color << 3) + (withShadow ? 1 : 0) + (synced ? 3 : 0) + (position + 4); + int hash = (color << 4) + (withShadow ? 0b0100 : 0) + (synced ? 0b1100 : 0) + order; FavoriteImageDrawable drawable = cache.get(hash); if (drawable == null) { - drawable = new FavoriteImageDrawable(a, color, withShadow, synced, position); + drawable = new FavoriteImageDrawable(a, color, withShadow, synced, pointType); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); cache.put(hash, drawable); } return drawable; } - public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, int position) { - return getOrCreate(a, color, withShadow, false, position); + public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, PointType pointType) { + return getOrCreate(a, color, withShadow, false, pointType); } public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow) { - return getOrCreate(a, color, withShadow, false, MAX_PERSONAL_POINT); + return getOrCreate(a, color, withShadow, false, null); } public static FavoriteImageDrawable getOrCreateSyncedIcon(Context a, int color) { - return getOrCreate(a, color, false, true, MAX_PERSONAL_POINT); + return getOrCreate(a, color, false, true, null); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index 040d371eae..4813753927 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -871,6 +871,14 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL return R.string.shared_string_add; } + boolean isFavButtonEnabled() { + MenuController menuController = getMenuController(); + if (menuController != null) { + return menuController.isFavButtonEnabled(); + } + return true; + } + public int getWaypointActionIconId() { return waypointActionIconId; } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 6d036c7764..2443f517a6 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -561,12 +561,16 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo R.color.ctx_menu_buttons_icon_color)); ((TextView) view.findViewById(R.id.context_menu_fav_text_view)).setText(menu.getFavActionStringId()); View favView = view.findViewById(R.id.context_menu_fav_view); - favView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - menu.buttonFavoritePressed(); - } - }); + if (menu.isFavButtonEnabled()) { + favView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + menu.buttonFavoritePressed(); + } + }); + } else { + deactivate(favView); + } final ImageView imageWaypoint = (ImageView) view.findViewById(R.id.context_menu_route_image_view); imageWaypoint.setImageDrawable(getIcon(menu.getWaypointActionIconId(), diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java index c89fee0cbf..fbb2f5b3b7 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java @@ -504,6 +504,10 @@ public abstract class MenuController extends BaseMenuController implements Colla return R.string.shared_string_add; } + public boolean isFavButtonEnabled() { + return true; + } + public int getWaypointActionIconId() { return R.drawable.map_action_flag_dark; } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/FavouritePointMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/FavouritePointMenuController.java index 751cfef136..ac336e1d44 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/FavouritePointMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/FavouritePointMenuController.java @@ -143,6 +143,11 @@ public class FavouritePointMenuController extends MenuController { return R.string.shared_string_edit; } + @Override + public boolean isFavButtonEnabled() { + return !fav.isPersonal(); + } + @NonNull @Override public String getTypeStr() { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java index 1375247453..2167a505e5 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/SelectCategoryDialogFragment.java @@ -78,10 +78,8 @@ public class SelectCategoryDialogFragment extends DialogFragment { if (gpxFile != null) { if (gpxCategories != null) { for (Map.Entry e : gpxCategories.entrySet()) { - if (!e.getKey().equals(getContext().getString(R.string.personal_category_name))) { - String categoryName = e.getKey(); - addCategory(activity, ll, categoryName, e.getValue()); - } + String categoryName = e.getKey(); + addCategory(activity, ll, categoryName, e.getValue()); } } } else { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java index cb415606d6..9e02b14273 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java @@ -155,10 +155,10 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag targetPointsHelper.navigateToPoint(ll, true, targetPointsHelper.getIntermediatePoints().size(), point.getPointDescription()); break; case HOME: - favorites.setHomePoint(ll, point.getPointDescription()); + favorites.setHomePoint(ll); break; case WORK: - favorites.setWorkPoint(ll, point.getPointDescription()); + favorites.setWorkPoint(ll); break; } MapRouteInfoMenu routeMenu = getMapRouteInfoMenu(); diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java index 75fef938a1..33c4272071 100644 --- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java +++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java @@ -118,7 +118,13 @@ public class ParkingPositionPlugin extends OsmandPlugin { public long getStartParkingTime() { return parkingStartTime.get(); } - + + @Override + public void disable(OsmandApplication app) { + super.disable(app); + app.getFavorites().deleteParkingPoint(); + } + public boolean clearParkingPosition() { parkingLat.resetToDefault(); parkingLon.resetToDefault(); @@ -292,6 +298,7 @@ public class ParkingPositionPlugin extends OsmandPlugin { showDeleteEventWarning(activity); cancelParking(); if (activity instanceof MapActivity) { + app.getFavorites().deleteParkingPoint(); ((MapActivity) activity).getContextMenu().close(); } } diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java index 9281b2aaf1..3b66cc51f8 100644 --- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingTypeBottomSheetDialogFragment.java @@ -4,8 +4,6 @@ import android.app.Dialog; import android.os.Bundle; import android.view.View; -import net.osmand.data.PersonalFavouritePoint; -import net.osmand.data.PointDescription; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; @@ -74,8 +72,7 @@ public class ParkingTypeBottomSheetDialogFragment extends MenuBottomSheetDialogF plugin.showContextMenuIfNeeded(mapActivity, true); mapActivity.refreshMap(); } - mapActivity.getMyApplication().getFavorites().setParkingPoint(plugin.getParkingPosition(), - new PointDescription(PointDescription.POINT_TYPE_FAVORITE, PersonalFavouritePoint.PointType.PARKING.name())); + mapActivity.getMyApplication().getFavorites().setParkingPoint(plugin.getParkingPosition()); } dismiss(); } diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java index 4382689c07..772fafb737 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java @@ -251,11 +251,11 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { break; case HOME: app.showShortToastMessage(R.string.add_intermediate_point); - app.getFavorites().setHomePoint(ll, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); + app.getFavorites().setHomePoint(ll); break; case WORK: app.showShortToastMessage(R.string.add_intermediate_point); - app.getFavorites().setWorkPoint(ll, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); + app.getFavorites().setWorkPoint(ll); break; } } else if (pointType == PointType.START) { @@ -369,13 +369,13 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { private void addMainScrollItems(List items, FavouritesDbHelper favorites) { items.add(FAVORITES); - if (favorites.hasHomePoint()) { + if (favorites.getHomePoint() != null) { items.add(PointType.HOME); } - if (favorites.hasWorkPoint()) { + if (favorites.getWorkPoint() != null) { items.add(PointType.WORK); } - if (favorites.hasParkingPoint()) { + if (favorites.getParkingPoint() != null) { items.add(PointType.PARKING); } } @@ -647,7 +647,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { point = favorites.getParkingPoint(); } favoriteViewHolder.icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), - getResources().getColor(disabledIconColor), false, (pointType.ordinal()))); + getResources().getColor(disabledIconColor), false, pointType)); favoriteViewHolder.title.setText(point.getName()); favoriteViewHolder.description.setText(point != null ? point.getPointDescription().getSimpleName(app, false) diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java index fd5f504d74..b046047e6d 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java @@ -275,10 +275,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(latlon, true, targets.getIntermediatePoints().size()); break; case HOME: - favorites.setHomePoint(latlon, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); + favorites.setHomePoint(latlon); break; case WORK: - favorites.setWorkPoint(latlon, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); + favorites.setWorkPoint(latlon); break; } if (selectFromMapWaypoints) { @@ -1802,10 +1802,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(l, true, targets.getIntermediatePoints().size(), pd); break; case HOME: - favorites.setHomePoint(l, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); + favorites.setHomePoint(l); break; case WORK: - favorites.setWorkPoint(l, new PointDescription(PointDescription.POINT_TYPE_FAVORITE, "")); + favorites.setWorkPoint(l); break; } updateMenu(); @@ -1862,10 +1862,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(point, true, targets.getIntermediatePoints().size(), m.getPointDescription(mapActivity)); break; case HOME: - favorites.setHomePoint(point, m.getPointDescription(mapActivity)); + favorites.setHomePoint(point); break; case WORK: - favorites.setWorkPoint(point, m.getPointDescription(mapActivity)); + favorites.setWorkPoint(point); break; } updateMenu(); diff --git a/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java b/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java index 799bc58237..fe7217b7ef 100644 --- a/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java +++ b/OsmAnd/src/net/osmand/plus/search/listitems/QuickSearchListItem.java @@ -102,8 +102,6 @@ public class QuickSearchListItem { case LOCATION: LatLon latLon = searchResult.location; return PointDescription.getLocationNamePlain(app, latLon.getLatitude(), latLon.getLongitude()); - case FAVORITE: - return ((FavouritePoint) searchResult.object).getName(); } return searchResult.localeName; } From fd3b39018e581b361b992b266779d6482b0aaf5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=2E=20R=C3=BCdinger?= Date: Tue, 10 Dec 2019 07:41:39 +0000 Subject: [PATCH 21/61] Translated using Weblate (German) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 16da11089d..0542880fe4 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -418,7 +418,7 @@ Die gewählte Sprache wird von der installierten Android-TTS-Engine nicht unterstützt. Stattdessen wird die voreingestellte TTS-Sprache verwendet. Im Market nach einer anderen TTS-Engine suchen\? Fehlendes Sprachpaket Gewählte Sprache aus dem Market installieren? - Eine Offline-Vektor-Karte ist für diesen Ort vorhanden. + Eine Offline-Vektorkarte ist für diesen Ort vorhanden. \n\t \n\tZur Verwendung aktivieren: \'Menü\' → \'Karte konfigurieren\' → \'Kartenquelle…\' → \'Offline-Vektorkarten\'. Navi-Sprachausgabe From da720ca8907df4a9535cf63f2cf8e2473d09186e Mon Sep 17 00:00:00 2001 From: Mr-Update Date: Tue, 10 Dec 2019 20:27:34 +0000 Subject: [PATCH 22/61] Translated using Weblate (German) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-de/strings.xml | 68 ++++++++++++++++---------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 0542880fe4..7fe619af5a 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -410,7 +410,7 @@ Neue Suche Textgröße für Bezeichnungen auf der Karte: Karten-Textgröße - Rendern von Debug-Infos + Infos zur Rendering-Fehlersuche Rendering-Performance anzeigen (Geschwindigkeit des Offline-Bildaufbaus). Entpacke neue Daten… Die Online-Navigation funktioniert nicht offline. @@ -738,9 +738,9 @@ GPX-Datei wird gespeichert… Abgeschlossen Internet zur Routenberechnung verwenden. - Online-Navigation - Einstellungen für OpenStreetMap.org (OSM). - Dateneinstellungen festlegen: Sprache, Daten laden oder aktualisieren. + Online-Navigation nutzen + Einstellungen für OpenStreetMap.org (OSM), die für OSM-Übermittlungen erforderlich sind. + Sprache angeben, Daten herunter- oder neuladen. Daten OSM-Bearbeitung Weitere Einstellungen @@ -751,7 +751,7 @@ Zu \'Favoriten\' hinzufügen Englische oder einheimische Namen in der Karte verwenden. Englische Namen - App-einstellungen + App-Einstellungen Adresse suchen Hausnummer wählen Straße wählen @@ -763,7 +763,7 @@ Zuletzt verwendetes POI-Overlay anzeigen. POI-Overlay anzeigen Quelle für Online- oder zwischengespeicherte Kartenkacheln wählen - Kartenquelle + Kachelkartenquelle Kartenquelle Internet verwenden Standort anzeigen @@ -830,7 +830,7 @@ ändern Aktion {0} abgeschlossen. Aktion {0} konnte nicht ausgeführt werden. - I/O Fehler bei Aktion {0}. + I/O-Fehler bei Aktion {0}. Informationen über den Knoten wurden nicht geladen Öffnungszeiten Kommentar @@ -1089,10 +1089,10 @@ Weitere Messung anlegen Zuerst Stadt oder Straße festlegen Ziel %1$s - Kamera-Fokus-Typ + Kamerafokus-Typ Kamerafokus-Modus: Autofokus - Fokus ist auf unendlich gesetzt + Fokus ist auf unendlich eingestellt Die Kamera kontinuierlich scharf stellen Ton bei Auslösung abspielen Ton oder Stille für Fotoauslöser festlegen. @@ -1112,7 +1112,7 @@ Navigiere von Hyperfokaler Fokus Erweiterte Schärfentiefe (EDOF) - Makro-Fokusmodus (Nahaufnahme) + Makrofokus-Modus (Nahaufnahme) Ansagen… Ansagen zu Straßennamen, Verkehrswarnungen (Stoppzeichen, Rüttelschwellen), stationäre Radarkontrollen, Tempolimits konfigurieren. Straßennamen (TTS) @@ -1642,9 +1642,9 @@ Lon %2$s Einfärbung gemäß Routennetzwerk Einfärbung gemäß OSMC-Wandersymbol Gefällt Ihnen OsmAnd? - Bewerte diese App - Bitte gib OsmAnd eine Bewertung auf Google Play - Erzähle uns warum. + Bewerten Sie diese App + Bitte bewerten Sie OsmAnd auf Google Play + Sagen Sie uns, warum. Bitte teilen Sie uns Ihre Vorschläge mit. Keine Aktualisierungen verfügbar Live-Aktualisierungen @@ -1686,12 +1686,12 @@ Lon %2$s Bitte Art des POI angeben. Werktage Favoriten - Der POI wird hier gelöscht, sobald sie ihre Änderungen hochladen + Der POI wird hier gelöscht, sobald Sie Ihre Änderungen hochladen GPX-Daten anzeigen Sicher? Alle ungesicherten Änderungen gehen verloren. Fortfahren? Straßen - Auch in OsmAnd+ oder der Unlimited Version das Banner der kostenlosen Version anzeigen. + Das Banner der kostenlosen Version auch in der kostenpflichtigen Version anzeigen. Geplante Objekte Aktualisieren Hochladen @@ -1737,7 +1737,7 @@ Lon %2$s Neue Version Erste Schritte in OsmAnd Merkmale - Helfen, OsmAnd weiter zu verbessern + Helfen Sie mit, OsmAnd zu verbessern Weitere Erweiterungen Erste Benutzung @@ -1786,7 +1786,7 @@ Lon %2$s Anzahl der Zeilen in der Übersichtsseite %1$s %1$s Downloads übrig Herunterladen - %1$d Datei - Zeige das Banner der freien Version + Zeige das Banner der kostenlosen Version Bitte die Erweiterung \'Seekarte\' aktivieren Bitte die Erweiterung \'Höhenlinien\' aktivieren Vollversion @@ -1794,13 +1794,13 @@ Lon %2$s %1$.1f von %2$.1f MB Alles aktualisieren (%1$s MB) Verbrauchte freie Downloads - Name des Landes eingeben + Ländernamen eingeben Möchten Sie den POI wirklich ohne Typ speichern? OSM-Änderung bearbeiten Übersichtsseite verwenden Menü verwenden - Auswahl der App-Bedienung - Es ist auswählbar, ob die App primär über die flexible Übersichtsseite oder über ein statisches Menü bedient werden soll. Diese Entscheidung kann jederzeit in den Übersichtsseiten-Einstellungen geändert werden. + Übersichtsseite oder Menüsteuerung + Es besteht die Möglichkeit, ob die App primär über die flexible Übersichtsseite oder ein statisches Menü zu steuern. Ihre Wahl kann jederzeit in den Übersichtsseiten-Einstellungen geändert werden. Aufruf von der Karte aus Neu erstellen Weiter @@ -1808,7 +1808,7 @@ Lon %2$s Bitte einen gültigen POI-Typ angeben oder überspringen. OSM-Bearbeitung mit OsmAnd geteilt GPX-Datei mit Standorten. - Anzeige der verbliebenen freien Downloads. + Anzeige der verbleibenen freien Downloads. Standort Schummerungsebene deaktiviert Bestätigen @@ -2113,7 +2113,7 @@ Lon %2$s Neue Video-Notiz Neue Foto-Notiz OSM-Notiz hinzufügen - Sprachausgabe Ein/Aus + Sprachausgabe ein/aus Sprachausgabe aktivieren Sprachausgabe stummschalten GPX-Wegpunkt einfügen @@ -2125,7 +2125,7 @@ Lon %2$s Aktion löschen Sind Sie sicher, dass Sie die Aktion „%s“ löschen möchten\? Dialog zu Favoriten anzeigen - Name Voreinstellen + Name voreinstellen Aktionsname Taste, um eine Kartenmarkierung am Bildschirmmittelpunkt einzufügen. Ort @@ -2147,10 +2147,10 @@ Lon %2$s Füllen Sie alle Parameter aus Kartenstile Overlay-Karte ändern - Overlay-Karten + Karten-Overlays Overlay hinzufügen - Underlay-Karte hinzufügen - Underlay-Karten + Karten-Underlay ändern + Karten-Underlays Underlay hinzufügen Kartenquelle ändern Kartenquellen @@ -2167,7 +2167,7 @@ Lon %2$s Taste, um einen POI am Bildschirmmittelpunkt einzufügen. Umschalter, um die Sprachansagen während der Navigation ein- oder auszuschalten. Taste, um eine Parkposition am Bildschirmmittelpunkt einzufügen. - Dialog zum Bearbeiten zeigen + Dialog zum Bearbeiten anzeigen " gespeichert unter " Schnellaktionsname in %1$s umbenannt, um Duplikate zu vermeiden. Namensduplikat für Schnellaktion @@ -2176,8 +2176,8 @@ Lon %2$s Objekte erstellen Diese Nachricht wird ins Kommentarfeld eingetragen. Langes Drücken und Ziehen der Taste ändert ihre Bildschirmposition. - Die Overlay-Karte wurde in „%s“ geändert. - Die Underlay-Karte wurde in „%s“ geändert. + Karten-Overlay wurde in „%s“ geändert. + Karten-Underlay wurde in „%s“ geändert. Ungültiger OLC Kurzer OLC @@ -2481,7 +2481,7 @@ Lon %2$s GPX-Dateiname: Nach dem Speichern auf der Karte anzeigen Wegpunkt hinzufügen - GPX Wegpunkt speichern + GPX-Wegpunkt speichern Routenpunkt speichern Wegpunkt 1 Routenpunkt 1 @@ -2503,7 +2503,7 @@ Lon %2$s Favoriten hinzufügen Favoriten importieren oder durch Markieren von Punkten auf der Karte erstellen. GPX-Datei importieren - Die Datei %1$s enthält keine Wegpunkte, soll sie als Track importiert werden? + Die Datei %1$s enthält keine Wegpunkte. Soll sie als Track importiert werden\? Punkt verschieben Zu einer GPX-Datei hinzufügen Keine Animationen @@ -2876,7 +2876,7 @@ Lon %2$s Tag-Modus Nacht-Modus Tag-/Nacht-Modus umschalten - Sie verwenden {0} Karte, die von OsmAnd unterstützt wird. Möchten Sie die OsmAnd Vollversion starten\? + Sie verwenden {0} Karte, die von OsmAnd unterstützt wird. Möchten Sie die OsmAnd-Vollversion starten\? Ziel festlegen Zwischenpunkt hinzufügen Startpunkt festlegen @@ -3215,8 +3215,8 @@ Lon %2$s Okzitanisch Wagen Kleintransporter - Route: Entfernung %s, Fahrzeit%s -\nBerechnung: %.1f Sek.,%d Straßen,%d Kacheln) + Route: Entfernung %s, Fahrzeit %s +\nBerechnung: %.1f Sek., %d Straßen, %d Kacheln) Tag Tage Tage From b4056ad4bcdbe9df3af6edf9bd8d339deb438b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=2E=20R=C3=BCdinger?= Date: Tue, 10 Dec 2019 22:33:35 +0000 Subject: [PATCH 23/61] Translated using Weblate (German) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-de/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 7fe619af5a..46564c5c84 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1786,7 +1786,7 @@ Lon %2$s Anzahl der Zeilen in der Übersichtsseite %1$s %1$s Downloads übrig Herunterladen - %1$d Datei - Zeige das Banner der kostenlosen Version + Banner der kostenlosen Version anzeigen Bitte die Erweiterung \'Seekarte\' aktivieren Bitte die Erweiterung \'Höhenlinien\' aktivieren Vollversion @@ -1800,7 +1800,7 @@ Lon %2$s Übersichtsseite verwenden Menü verwenden Übersichtsseite oder Menüsteuerung - Es besteht die Möglichkeit, ob die App primär über die flexible Übersichtsseite oder ein statisches Menü zu steuern. Ihre Wahl kann jederzeit in den Übersichtsseiten-Einstellungen geändert werden. + Es besteht die Möglichkeit, die App primär über die flexible Übersichtsseite oder ein statisches Menü zu steuern. Ihre Wahl kann jederzeit in den Übersichtsseiten-Einstellungen geändert werden. Aufruf von der Karte aus Neu erstellen Weiter @@ -1808,7 +1808,7 @@ Lon %2$s Bitte einen gültigen POI-Typ angeben oder überspringen. OSM-Bearbeitung mit OsmAnd geteilt GPX-Datei mit Standorten. - Anzeige der verbleibenen freien Downloads. + Anzeige der verbleibenden freien Downloads. Standort Schummerungsebene deaktiviert Bestätigen From 29559860fd7046bda8dc535e21076e33936175f7 Mon Sep 17 00:00:00 2001 From: Dimitris Spingos Date: Tue, 10 Dec 2019 08:13:58 +0000 Subject: [PATCH 24/61] Translated using Weblate (Greek) Currently translated at 87.7% (2698 of 3078 strings) --- OsmAnd/res/values-el/strings.xml | 160 +++++++++++++++++++++++++++---- 1 file changed, 143 insertions(+), 17 deletions(-) diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index 339195bc54..7ccdcee742 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -3087,7 +3087,7 @@ Το %s του ίχνους είναι αποθηκευμένο Ένωση κενών Τροχόσπιτο - Τροχόσπιτο + Τροχόσπιτο (RV) Να εμφανίζονται οι ζώνες χαμηλής εκπομπής στον χάρτη. Δεν επηρεάζει τη διαδρομή. Να εμφανίζονται οι ζώνες χαμηλής εκπομπής Λάβετε υπόψη τους προσωρινούς περιορισμούς @@ -3107,8 +3107,8 @@ Έτη Τρεις μήνες Δωρεάν - %1$s για τους πρώτους %2$s - %1$s για τους πρώτους %2$s + %1$s για τον πρώτο %2$s + %1$s για τον πρώτο %2$s έπειτα %1$s Ακύρωση συνδρομής %1$s • Εξοικονομήστε %2$s @@ -3224,37 +3224,37 @@ Προτιμήστε διαδρομές αυτής της δυσκολίας, αν και η διαδρομή σε πιο δύσκολες ή εύκολες πίστες είναι ακόμα εφικτές, εάν είναι πιο σύντομες. Εκτός πίστας Ελεύθερες καθώς και εκτός πίστας διαδρομές είναι ανεπίσημες και περάσματα. Συνήθως ακαθάριστες, ασυντήρητες από τους υπεύθυνους και μη ελεγμένες το πρωί. Μπαίνετε με δικό σας κίνδυνο. - Όλες οι παρακάτω ρυθμίσεις επηρεάζουν μόνο το επιλεγμένο προφίλ. - Το OsmAnd χρησιμοποιεί το πρότυπο UTM, το οποίο είναι παρόμοιο αλλά όχι ίδιο με το UTM NATO πρότυπο. + Ρυθμίσεις για την κατατομή (προφίλ): + Το OsmAnd χρησιμοποιεί το πρότυπο UTM, το οποίο είναι παρόμοιο αλλά όχι ίδιο με τη μορφή UTM NATO. Παράδειγμα Πρότυπο UTM Άνοιγμα κωδικού θέσης - Το επιλεγμένο πρότυπο θα εφαρμοστεί σε όλες τις τοποθεσίες στην εφαρμογή. + Η επιλεγμένη μορφή θα εφαρμοστεί σε όλες τις εφαρμογές. Η ρύθμιση αυτή επιλέγεται από προεπιλογή για προφίλ: %s - Αλλαγή προεπιλεγμένων ρυθμίσεων - Απόρριψη αλλαγών - Εφαρμογή στο τρέχον %1$s προφίλ + Αλλαγή ρύθμισης + Απόρριψη αλλαγής + Εφαρμογή μόνο στο \"%1$s\" Εφαρμογή σε όλα τα προφίλ - Εκκίνηση μηνύματος + Μήνυμα έναρξης Αναλυτικά στοιχεία - Εμφάνιση χάρτη κατά την πλοήγηση πάνω από την οθόνη κλειδώματος. - Αυτές οι ρυθμίσεις επηρεάζουν την δημιουργία της διαδρομής. Θα εφαρμοστεί μόνο στο επιλεγμένο προφίλ: %1$s. + "Εμφάνιση χάρτη στην οθόνη κλειδώματος κατά την πλοήγηση." + Ρυθμίσεις δρομολόγησης στο επιλεγμένο προφίλ \"%1$s\". Ώρα αφύπνισης Μονάδες μέτρησης και φορμά Εμφάνιση - εικονίδια, widgets + Εμφάνιση χάρτη Εμφάνιση χάρτη - Λίστα εγκατεστημένων πρόσθετων + Εγκατεστημένα πρόσθετα Ρυθμίσεις πλοήγησης Θέμα εφαρμογής, μονάδες, περιοχή Ρυθμίστε το προφίλ - Οι προειδοποιήσεις θα εμφανίζονται στην αριστερή κάτω γωνία της οθόνης κατά τη διάρκεια της πλοήγησης. + Οι προειδοποιήσεις εμφανίζονται κάτω αριστερά κατά την πλοήγηση. Εναλλαγή προφίλ Γλώσσα και έξοδος Επαναφορά προεπιλογών Δημιουργία, εισαγωγή, επεξεργασία προφίλ Διαχείριση προφίλ εφαρμογής… - Επηρεάζει όλη την εφαρμογή + Ενεργό για όλη την εφαρμογή Ρυθμίσεις OsmAnd Αντιγραφή από άλλο προφίλ Ενεργοποίηση οθόνης @@ -3263,10 +3263,136 @@ Άλλα Βάρος, ύψος, ταχύτητα Παράμετροι οχήματος - Οι φωνητικές κλήσεις αναπαράγονται μόνο κατά τη διάρκεια της πλοήγησης. + Οι φωνητικές ανακοινώσεις συμβαίνουν μόνο κατά την πλοήγηση. Οδηγίες πλοήγησης και ανακοινώσεις Η φωνή ανακοινώνει Προειδοποιήσεις οθόνης Ρύθμιση παραμέτρων διαδρομής Παράμετροι διαδρομής + Θα χρησιμοποιηθεί για την εκτίμηση του χρόνου άφιξης για άγνωστο τύπο δρόμων και για περιορισμό της ταχύτητας όλων των δρόμων (θα μπορούσε να αλλάξει η διαδρομή) + Η κατατομή (προφίλ) της εφαρμογής άλλαξε σε \"%s\" + Ενδιάμεση μνήμη του Logcat + Ρυθμίσεις προσθέτου + Από προεπιλογή + Λήψη λεπτομερούς %s χάρτη, για προβολή αυτής της περιοχής. + Μετακίνηση των αρχείων δεδομένων του OsmAnd σε νέο προορισμό; +\n%1$s > %2$s + %1$s • %2$s + %1$s GB ελεύθερα (από %2$s GB) + Εισαγωγή διαδρομής στον φάκελο + Φάκελος… + Επικόλληση διαδρομής στον φάκελο με τα δεδομένα OsmAnd + Αλλαγή του φακέλου δεδομένων του OsmAnd; + Μετακίνηση στον νέο προορισμό + Εσωτερική αποθήκευση, κρυφή από τον χρήστη και άλλες εφαρμογές, αποκλειστικά προσπελάσιμη στο OsmAnd + Αλλαγή φακέλου αποθήκευσης δεδομένων + Χιονοδρομικό πάρκο + Έλκηθρο + Έλκηθρο + Πεζοπορία + Σύνδεση + Γύρος με σκι + Κατάβαση + Σκανδιναβικός + Τύπος πίστας + Αρχάριος + Εύκολη + Ενδιάμεση + Προχωρημένη + Ειδική + Ελεύθερη διαδρομή + Ακραία + Ακαθόριστη + Δυσκολία πίστας + Όριο πλάτους + Καθορίστε το επιτρεπόμενο όριο πλάτους οχήματος στους δρόμους. + Αποφυγή συγκεκριμένων διαδρομών και τύπων δρόμων + Δίπλα-δίπλα + Εναέριος + Σύνδεση + Υπολογισμός + Χρήση OsmAnd + Πλακίδια + Χάρτες + %1$s TB + %1$s GB + %1$s MB + %1$s kB + Φάκελος αποθήκευσης ιχνών + Τα ίχνη (διαδρομές) μπορούν να αποθηκευτούν στον φάκελο \'rec\', μηνιαίως, ή σε ημερήσιους φακέλους. + Καταγραφή ιχνών (διαδρομών) στον φάκελο \'rec\' + Καταγραφή ιχνών (διαδρομών) σε ημερήσιους φακέλους + Καταγραφή ιχνών (διαδρομών) σε υποφακέλους ανά ημέρα καταγραφής (όπως 01-01-2018). + Χρησιμοποιήθηκαν %1$s TB + Χρησιμοποιήθηκαν %1$s GB + Χρησιμοποιήθηκαν %1$s MB + Χρησιμοποιήθηκαν %1$s kB + Ισοϋψείς γραμμές και σκίαση αναγλύφου + Να προτιμώνται μη ασφαλτοστρωμένοι δρόμοι + Να προτιμώνται μη ασφαλτοστρωμένοι δρόμοι. + Ενημέρωση όλων των χαρτών + Είσαστε σίγουροι ότι θέλετε να ενημερώσετε όλους τους (%1$d) χάρτες; + • Ενημερώθηκαν εφαρμογές και ρυθμίσεις κατατομής (προφίλ): Οι ρυθμίσεις τακτοποιούνται τώρα κατά τύπο. Κάθε κατατομή μπορεί να προσαρμοστεί ξεχωριστά. +\n +\n • Νέος διάλογος λήψης χάρτη που προτείνει χάρτη για λήψη κατά την πλοήγηση +\n +\n • Διορθώθηκαν νυκτερινά θέματα +\n +\n • Διορθώθηκαν αρκετά προβλήματα διαδρομών στον κόσμο +\n +\n • Ενημερώθηκαν χάρτες βάσης με περισσότερο λεπτομερές οδικό δίκτυο +\n +\n • Διορθώθηκαν πλημμυρισμένες περιοχές παγκοσμίως +\n +\n • Διαδρομές χιονοδρομίας: Προστέθηκαν κατατομές (προφίλ) ανύψωσης και πολυπλοκότητα διαδρομών στις λεπτομέρειες διαδρομών +\n +\n • Άλλες διορθώσεις σφαλμάτων +\n +\n + Μπορείτε να εφαρμόσετε αυτήν την αλλαγή σε όλες τις κατατομές (προφίλ) ή μόνο στην τελευταία επιλεγμένη. + Κοινόχρηστο + Να προτιμώνται οι μη ασφαλτοστρωμένοι δρόμοι + Να προτιμώνται οι μη ασφαλτοστρωμένοι δρόμοι. + Επεξεργασίες OSM + Εναλλαγή εμφάνισης ή απόκρυψης ισοϋψών γραμμών στον χάρτη. + Εμφάνιση γραμμών ισοϋψών + Απόκρυψη ισοϋψών γραμμών + Εμφάνιση/Απόκρυψη ισοϋψών γραμμών + Εναλλαγή εμφάνισης ή απόκρυψης σκίασης αναγλύφου στον χάρτη. + Εμφάνιση σκίασης ανάγλυφου + Απόκρυψη σκίασης ανάγλυφου + Εμφάνιση/Απόκρυψη σκίασης ανάγλυφου + Αδυναμία εκκίνησης μηχανής κείμενο σε ομιλία + Προσομοίωση της θέσης σας χρησιμοποιώντας καταγεγραμμένη διαδρομή GPX. + Εξαγωγή κατατομής (προφίλ) + Κατατομή (προφίλ) OsmAnd: %1$s + Η κατατομή (προφίλ) \'%1$s\' υπάρχει ήδη. Να αντικατασταθεί; + Αδυναμία εξαγωγής κατατομής (προφίλ). + Εισαγωγή κατατομής (προφίλ): + Για εισαγωγή κατατομής (προφίλ), επιλέξετε το αρχείο της στη συσκευή και ανοίξτε το με το OsmAnd. + %1$s σφάλμα εισαγωγής: %2$s + Το %1$s εισήχθη επιτυχώς. + Λευκό + Εναλλαγή %1$s και %2$s + Σημείο εκκίνησης + Αποθηκεύτηκε το ίχνος + Το όνομα του αρχείου είναι κενό + Επαναφορά + Ένα πλήκτρο που κάνει το κέντρο της οθόνης το σημείο αναχώρησης και υπολογισμού της διαδρομής προς τον προορισμό ή ανοίγει διάλογο επιλογής προορισμού, εάν ο σημειωτής διαδρομής δεν είναι στον χάρτη. + Εμφάνιση δικτύου κόμβων διαδρομών ποδηλάτων + Καθαρισμός του %1$s; + Λήψη διαλόγου χαρτών + Διάλογοι και ειδοποιήσεις + Αναδυόμενοι έλεγχοι, διάλογοι και ειδοποιήσεις που το OsmAnd εμφανίζει κατά τη χρήση. + Δίκτυα κόμβων + Προτεινόμενοι χάρτες + Αυτοί οι χάρτες απαιτούνται για χρήση με το πρόσθετο + Κατατομές (προφίλ) που προστέθηκαν + Το πρόσθετο προσθέτει νέα κατατομή (προφίλ) στο OsmAnd + Απενεργοποίηση + Προστέθηκε νέο πρόσθετο + Ένωση τμημάτων + Προσθήκη νέας κατατομής (προφίλ) \'%1$s\'; + Να συμπεριλαμβάνεται η επικεφαλίδα + Αποθήκευση επικεφαλίδας για κάθε σημείο ίχνους κατά την εγγραφή. \ No newline at end of file From 2777672eb5800d3b942d7168a016a50bc6cf007f Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 5 Dec 2019 17:08:18 +0000 Subject: [PATCH 25/61] Translated using Weblate (Russian) Currently translated at 84.1% (2588 of 3078 strings) --- OsmAnd/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index d9cf3fb0fb..ec40871a22 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1116,7 +1116,7 @@ Атрибуты визуализации Стиль карты email - Восход/закат + День/Ночь данные OsmAnd - это навигационное приложение для путешествий с открытым исходным кодом "OsmAnd (Open Street Maps Automated Navigation Directions) \n From 588efd12a1ee4e836c88c4536fa25ad0a79b3abc Mon Sep 17 00:00:00 2001 From: Vadim Nekhai Date: Thu, 5 Dec 2019 22:14:16 +0000 Subject: [PATCH 26/61] Translated using Weblate (Russian) Currently translated at 84.1% (2588 of 3078 strings) --- OsmAnd/res/values-ru/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index ec40871a22..614359a025 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -217,7 +217,7 @@ Цветовая схема горизонталей Светло-коричневый Темно-коричневый - Цветовая схема горизонталей + Цветовая гамма горизонталей Качество дорожного покрытия Введите название города, адрес, POI Введите имя для нового фильтра. Вы сможете его найти в списке \"Категории\". @@ -1826,7 +1826,7 @@ Напечатайте для поиска Номера домов Избегать пересечения национальных границ - Ограничение по высоте + Максимальная высота Укажите высоту автомобиля для учета при построении маршрута. Умный перерасчет маршрута Перерасчет только начальной части маршрута для длительных поездок. @@ -2214,7 +2214,7 @@ Не показывать новые версии Обновить все карты сейчас? Очистить всю плитку - Экономичный путь + Топливно-эффективный способ Использование топливо-сберегающего пути (обычно короче). Вы уверены, что хотите заменить избранные %1$s\? Изменить From 244a645d42ec538e6ef3407d61ecf1c3e1d285f1 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Fri, 6 Dec 2019 09:17:56 +0000 Subject: [PATCH 27/61] Translated using Weblate (Russian) Currently translated at 84.1% (2588 of 3078 strings) --- OsmAnd/res/values-ru/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 614359a025..36d9f8b4a5 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -3334,4 +3334,7 @@ Диалоги и уведомления Управление всплывающими окнами, диалогами и уведомлениями, которые OsmAnd показывает во время использования. Добавить новый профиль \'%1$s\'\? + Отображать узловые сети велосипедных маршрутов + Сохранять путевой угол + Сохранять во время записи путевой угол для каждой точки трека. \ No newline at end of file From 6251c943d75021398cb391e8c843554629cc3b11 Mon Sep 17 00:00:00 2001 From: Razvan D Date: Sun, 8 Dec 2019 12:19:23 +0000 Subject: [PATCH 28/61] Translated using Weblate (Romanian) Currently translated at 65.6% (2019 of 3078 strings) --- OsmAnd/res/values-ro/strings.xml | 66 ++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/values-ro/strings.xml b/OsmAnd/res/values-ro/strings.xml index 1dd3f23ec2..3144995139 100644 --- a/OsmAnd/res/values-ro/strings.xml +++ b/OsmAnd/res/values-ro/strings.xml @@ -982,7 +982,7 @@ Șterge destinația Stradă Număr casă - Alege tema aplicației + Personalizați aspectul aplicației. Temă aplicație Opțiuni accesibilitate Selectează adresa @@ -1283,7 +1283,7 @@ Evitați utilizarea trenurilor de transfer Nu sunt actualizări disponibile Lățime GPX - Actualizări in timp real + Actualizări în timp real Bold contur Locații Fișier GPX cu notițe de locații. @@ -1374,7 +1374,7 @@ Ștergi punctul de referință GPX? Editează punctul de referință GPX Locație - Editări OSM împărțite prin OsmAnd + Editări OSM distribuite prin OsmAnd Minim în limba germană Macedonian Citește mai multe @@ -1681,7 +1681,7 @@ După tip "Se caută trasee cu puncte intermediare" Mai mult - Apariția pe hartă + Aspectul pe hartă Selectați un traseu pentru a-i adăuga un punct intermediar la marcaje. Selectați o categorie de Favorite pentru a fi adaugate la marcaje. Puncte intermediare traseu @@ -1729,7 +1729,7 @@ Modifică nota OMS Copiază punctul de pornire ca destinație. Format coordonate - Foloseste tastatura sistemului + Folosește tastatura sistemului Alege formatul coordonatelor. Puteți oricând schimba din \'Opțiuni\'. Introducere rapidă a coordonatelor Evită drumurile cu polei și traversarile râurilor @@ -1815,7 +1815,7 @@ Numele grupului Schimbă culoarea Modifică numele - Animeaza Poziția Mea + Animează poziția mea Prezentare generală Selectează strada în %1$s @@ -1983,7 +1983,7 @@ Mod hartă Subțire Mediu - Raportează + Raport Mută ↓ Termină navigarea Evită drumul @@ -2377,7 +2377,7 @@ Setați viteza min/max Profil nou Poţi aplica aceasta modificare pe toate profilele sau doar pe cel selectat - Împărţit + Partajat Prefer drumurile nepavate Prefer drumurile nepavate Editare OSM @@ -2394,8 +2394,8 @@ Profil osmand exportat %1$s Profil \'%1$s\' deja existent, îl rescrii\? Profilul nu se poate exporta. - Importa profilul: - "Pentru a importa profilul, selectează fisierul din aparat, si deschide-l cu OsmAnd." + Importare profil: + Pentru a importa profilul, selectați fișierul din dispozitiv, și deschideți-l cu OsmAnd. Eroare de incarcare al fisierului. %1$s: %2$s %1$s Incarcat cu succes. Alb @@ -2496,4 +2496,48 @@ Numele fișierului este gol Revenire Șterge %1$s\? - + Timpul de actualizare + Ultima schimbare a hărții: %s + Din oră în oră + Zilnic + Săptămânal + Dimineața + Mărimea actualizării + Numărul de contribuabili + Numărul de modificări + Raport pentru + Noaptea + Aspect + Total donații + Mod nocturn + Toate tipurile de transport public + Selectați opțiunile ecranului pentru profil + Utilizați senzorul de proximitate + Dispozitive externe de intrare + Tastatură + Luați în considerare limitările temporare + Setări pentru rutare în profilul selectat \"%1$s\". + Unități și formate + Aspect + Aspect hartă + Plugin-uri instalate + Temă aplicație, unități, regiune + Creați, importați, editați profiluri + Gestionați profilurile de aplicație … + Se aplică pentru întreaga aplicație + Setări OsmAnd + Copiați din alt profil + Porniți ecranul + Harta în timpul navigării + Harta în timpul navigării + Altele + Greutate, înălțime, viteză + Parametrii vehicul + Anunțuri vocale + Alerte ecran + Configurați parametrii rutei + Parametrii rutei + Limită lățime + Specificați limita permisă pentru lățimea vehiculului pe rute. + Dialoguri și notificări + \ No newline at end of file From c4ad6705f0cf90a7cf85920a7a04b89020e5ecbb Mon Sep 17 00:00:00 2001 From: Tymofij Lytvynenko Date: Sun, 8 Dec 2019 16:06:35 +0000 Subject: [PATCH 29/61] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index b6de53c69e..c1cb6e1303 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -1141,7 +1141,7 @@ Суахілі Іврит Вперед - Домашня сторінка + Домівка Надішліть дані відстеження до вказаної веб-служби, якщо ввімкнено часопис GPX. Онлайн моніторинг (потрібен GPX) Розпочати моніторинг From 93ee78558fd02b5004acf66923e152e22e18fb7a Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Mon, 9 Dec 2019 07:01:39 +0000 Subject: [PATCH 30/61] Translated using Weblate (Japanese) Currently translated at 99.2% (3052 of 3078 strings) --- OsmAnd/res/values-ja/strings.xml | 122 +++++++++++++++---------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 3905afab51..5d96389788 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -9,10 +9,10 @@ いません。マーケットに行ってインストールしますか? GPXルートを反転 現在の目的地を使用 - 経路全体に沿って通る + 経路全体を通過する メニューの[マップダウンロード]などから、この場所のオフラインベクターマップをダウンロードするか『オンラインマップ』プラグインを有効にしてください。 現在地のベクターマップを見るには\n\t\n\t\'メニュー\' →\'マップ設定\' →\'マップソース…\' →\'オフラインベクターマップ\'を有効にします。 - 音声案内ストリーム + 音声案内出力 音声案内を再生するチャンネルを選択します。 通話ストリーム(BT接続カーステレオも中断) 通知ストリーム @@ -242,14 +242,14 @@ MB)をダウンロードしますか? SDカードは読み取り専用です。 \nプリロードマップだけを見ることができ、インターネットからのダウンロードはできません。 ファイルを解凍中… - 右折して進む - 鋭く右折して進む - ゆるやかに右折して進む - 左折して進む - 鋭く左折して進む - ゆるやかに左折して進む - Uターンして進む - 前方 + 右方向です + 大きく右に曲がってください + 右へ進んで下さい + 左方向です + 大きく左に曲がってください + 左へ進んで下さい + Uターンしてください + まっすぐ進んでください 続ける 地域をダウンロード OsmAndを使ってくれてありがとうございます。アプリケーションの全機能を使うには、地域のオフラインデータダウンロード (設定 → マップデータ等管理) が必要です。その後で、マップ表示、住所検索、POI 検索、公共交通機関検索ができます。 @@ -296,7 +296,7 @@ POIの更新は利用できません {1} in {2} 建物: {0}, {1}, {2} お気に入り - 全て削除 + 全消去 履歴 データをアップロード中… アップロード中… @@ -366,7 +366,7 @@ POIの更新は利用できません データ OSM 移動速度を基準とした自動ズームレベルを設定します。(その間マップは現在位置と同期します) - マップを自動ズーム + 自動ズーム 追加設定 マップ外観とナビゲーション設定は、使用プロファイルごとに記憶されます。ここでデフォルトのプロファイルを設定します。 起動時の表示プロファイル @@ -510,12 +510,12 @@ POIの更新は利用できません カナダ ヨーロッパ、アジア、ラテンアメリカ&同様の国々 イギリス、インド、その他類似国 - 音声アナウンス設定… + 音声案内… 道路名、交通指示警告(強制停止、スピードバンプ等含む)、スピードカメラ、法定速度の音声アナウンスの設定をします。 通りの名前 (TTS形式音声のみ) 制限速度 - スピードカメラ(オービス) - 通行に関する警告 + スピードカメラ + 交通指示警告 OSMのユーザー名とパスワードを設定して下さい 経由地点を削除 経由地点を保持 @@ -585,13 +585,13 @@ POIの更新は利用できません 未選択 マップ 高速道路を優先 - ルート検索時の優先道路設定… + 優先ルートの指定… 高速道路を優先する設定にします なし 陰影起伏図 等高線 音声/動画データ - ナビゲーションを停止させますか? + ナビゲーションを終了してもよろしいですか? 本当に目的地(とその経由地点)を削除しますか? グリッチ無しの正確なルート計算を有効化します。現段階では距離が限定されて尚且つ遅いです。 正確なルーティング(アルファ) @@ -653,7 +653,7 @@ POIの更新は利用できません 経由地点 %1$s が最寄りの道路から遠すぎます。 経由地点周辺に到着しました 経由地点として追加 - 経由地点 + 中間経由地点 道路のみ 道路のみのマップ 境界 @@ -679,7 +679,7 @@ POIの更新は利用できません 目的地を入れ替え すでに目的地が設定されています。 目的地 - 終点が最寄りの道路より遠すぎます。 + 目的地が最寄りの道路から遠すぎます。 タグの追加 拡張モード… 駐車場 @@ -710,11 +710,11 @@ POIの更新は利用できません 車線 未舗装の道路を避ける フェリーを使わない - 使用しない道路の指定… + 回避ルートの指定… 使用ルートを明滅させる 距離測定 視線方向 - ウィジェット背景の透明化 + 透過ウィジェット 動作中\n バックグラウンドモード 停止\n バックグラウンドモードの中断 可能な限り継続 @@ -730,7 +730,7 @@ POIの更新は利用できません 速度 目的地 標高 - 所要時間 + 出発時刻 次の曲がる方向 次の曲がる方向(小さいアイコン) 次々回の曲がる方向 @@ -739,8 +739,8 @@ POIの更新は利用できません ロックの解除 画面はロックされています 呼び出し間隔の設定: - スピード監視カメラ(オービス等) - 通行に関する警告 + スピードカメラ + 交通指示警告 有料道路を使わない 前回のナビゲーションがまだ終わっていません。続行しますか? (%1$s seconds) 現在位置が見つかるとルートを検索します @@ -784,8 +784,8 @@ POIの更新は利用できません プライベート 早めに ロータリー交差点: %1$d 番目の出口を選択 - 左寄りで道なりに走行 - 右寄りで道なりに走行 + 左寄りに進んでください + 右寄りに進んでください ポリゴン 描画方法 マップを最適化 @@ -865,7 +865,7 @@ POIの更新は利用できません 左方向 左前方 時頃 - の方へ + 方面: 精度 標高 情報無し @@ -899,9 +899,9 @@ POIの更新は利用できません または 自動ズームしない - ズーム 大 - ズーム 中 - ズーム 小 + 近距離表示 + 中距離表示 + 遠距離表示 写真撮影時にシャッター音を鳴らす フォーカスを無限遠(∞)にセット マクロ(近距離)フォーカスモード @@ -960,7 +960,7 @@ POIの更新は利用できません 透明なテーマ ネイティブライブラリは、このデバイスでサポートされていません。 ネイティブライブラリを初期化しています… - マップの自動中心表示設定 + マップの自動中心表示 マップの現在地との位置同期タイミングを設定します。 ナビゲーションのみ マップの自動中心表示はナビゲーション中のみ有効です @@ -1056,8 +1056,8 @@ POIの更新は利用できません アプリプロファイル マップ描画に関する設定 ハイキング - バイク - 船舶 + オートバイ + ボート 航空機 OSMに関する%1$d個の変更を削除してもよろしいですか? すべて削除 @@ -1113,12 +1113,12 @@ POIの更新は利用できません その後の目的地として追加 GPXファイルを選択… 目的地の設定 - マップから選択 + マップ上で選択 お気に入り ルート設定 ルート情報 高速道路を優先する - 高速道路を優先する設定にします + 高速道路を優先する 有料道路を使わない 移動時に有料道路を使用しません 未舗装道路を使わない @@ -1137,8 +1137,8 @@ POIの更新は利用できません OsmAndデータファイルをコピーしています… OsmAndオフラインルート計算 トラック - ナビゲーション関連設定 - ルート関連設定 + ナビゲーション設定 + ルート検索などに関する設定をおこないます TTS形式の読み上げ速度を設定します(エンジン側が対応していない場合は効果がありません) 発声速度 高速ルート計算が失敗しました(%s)、低速モードで再計算します。 @@ -1181,7 +1181,7 @@ POIの更新は利用できません 経路の選択 区間を分割 距離で並べ替え - 名前で並べ替え + 名前で並び替え ナビゲーション中にズームボタンを表示します ズームボタンを表示 お気に入りのグループとして保存 @@ -1223,13 +1223,13 @@ POIの更新は利用できません 地下鉄路線 接続 - 地点間のルートを計算 + 地点間でルート計算する ナビゲーション指示の繰り返し ナビゲーション指示を繰り返す間隔を設定します 目的地周辺でのアナウンスタイミング - 目的地周辺でのアナウンスをするタイミングを設定します。 - 移動時、現在地を画面中央よりに表示 - 音声関連設定 + 目的地周辺でのアナウンスをするタイミングを設定します + 現在地を常に中央に表示 + 音声 その他の設定 ローカライズ関連設定 全国の住所 @@ -1293,14 +1293,14 @@ POIの更新は利用できません 北米 - カナダ ヨーロッパ - イタリア ヨーロッパ - イギリス - 最初と最後の経路セグメントでOsmAndルートを計算する + 最初と最後の経路セグメントを利用しOsmAndエンジンでルートを計算する ナビゲーションに表示された経路を使用しますか? ハイキング、トレッキングルート(SAC基準)を表示 SACスケールに従って道を描写 ハイキング用シンボルを重ねて表示 OSMCトレースに従って道を描写 有効にすると音声案内時に音楽を一時停止します - 再生音楽の一時停止 + 音楽の一時停止 GPXファイルとしてルートを共有 ルートをOsmAndを介して共有 早め @@ -1318,11 +1318,11 @@ POIの更新は利用できません 無効な形式: %s 目的地 旅行 - すべて + 全て 経由地点 通行に関する警告 周辺のお気に入り - 周辺のPOI + 近隣のPOI 不足分のマップ %1$s (%2$d MB)をダウンロードしますか? 追加… マップの閲覧 @@ -1375,7 +1375,7 @@ POIの更新は利用できません 詳細 交通機関の追加描写 他のマップ要素に関する設定 - その他機能 + その他の要素 ステータスバー 右パネル 左パネル @@ -1428,7 +1428,7 @@ POIの更新は利用できません 更新可能 保存済み ダウンロード出来ません、インターネット接続を確認してください。 - 中止 + キャンセル ストレージ内ファイルはすべて最新です OpenGLレンダリングを使用 ハードウェアのOpenGLレンダリングを使用します(デバイスによっては動作しません) @@ -1545,7 +1545,7 @@ POIの更新は利用できません 検索 現在営業中 名前でフィルター - 名称でフィルター + 入力ワードで全体検索 ヨーロッパ - オランダ 標準 ハイコントラスト道路 @@ -1639,7 +1639,7 @@ POIの更新は利用できません 提案があれば教えてください。 所属ネットワークに応じたカラー変更 OSMCのハイキングシンボルカラー - 通行注意 + 被災域 太線 更新はありません ライブ更新 @@ -1698,7 +1698,7 @@ POIの更新は利用できません キロメートル毎時 マイル毎時 メートル毎秒 - キロメートル毎分(km/min) + 分/キロメートル マイル毎分(mi/min) 海里毎時(ノット) nm/h @@ -1855,7 +1855,7 @@ POIの更新は利用できません \nすべての新機能を有効にするには、OsmAndの再起動が必要です。 あなたの寄付の一部がその地域のOSM更新に貢献したユーザーへ還元されます マップマーカーの選択 - その他のマーカー + その他マーカー 匿名でアップロード 透過タイプシークバーを表示 空き容量が足りません! 一時ファイルの置き場に {3}MB、保存のため {1}MBが必要です。(利用可能領域 {2}MB) @@ -1903,7 +1903,7 @@ POIの更新は利用できません 距離: 時間: 乗馬用ルート - 近隣 + 近辺 非表示 最低画質 最高画質 @@ -1913,7 +1913,7 @@ POIの更新は利用できません 音声出力形式を選択します 音声ビットレート 音声のビットレートを選択します - 道路名及び市町村名を取得中 + 住所検索 OsmAndを初めて使う方へ 使用方法の簡易説明 更新 @@ -1938,7 +1938,7 @@ POIの更新は利用できません サブスクリプションの設定 最初にOsmAnd Liveのサブスクリプション(定期有料契約)手続きをしてください このサブスクリプション(定期有料契約)により世界中のマップを時間毎更新することが可能です。 サブスクリプション収入の一部はOSMコミュニティに還元され、OSMに貢献した各ユーザーにも支払われます。 あなたがOsmAndとOSMを愛用し、サポートを受けたり支援を行いたいと思うのであれば、サブスクリプションはそのための最適解です。 - 登録住所外 + 住所が未定義 貢献者数 編集数 表示レポート @@ -1948,7 +1948,7 @@ POIの更新は利用できません バス 鉄道 現在の経路 - バッテリ ーレベル + バッテリーレベル マーカーの位置を変更 マップ画面のドラッグでマーカー位置を調整できます @@ -1997,7 +1997,7 @@ POIの更新は利用できません OsmAnd経由で共有 カテゴリ 郵便番号 - 差出人 + から 地区 付近 検索 @@ -2211,12 +2211,12 @@ POIの更新は利用できません 現在地を目立たせる ナビゲーション中も、現在地カーソルの周りを点滅させて目立たせます。 概要 - 道路を選択 + 道路名を選択 住所を入力 市や町や地域名を入力 郵便番号を入力 - 最寄りの市町村名を入力 - 市を選択 + 最寄りの市町村名 + 市町村名を選択 郵便番号検索 マップの自動ズームをON/OFF 移動速度に応じたマップの自動ズーム機能のON/OFFを切り替えます。 @@ -2256,7 +2256,7 @@ POIの更新は利用できません 脇道を選り抜く 優先して経路設定する地形を設定します(平坦または起伏あり)。 このルートで通過が必要な場所 - 標高の変動許容選択 + ルート検索時優先する地形(平坦~丘陵)を設定します 等深線や深度を表示します。 海洋等深線データ 一時停止 From 364beb0b45a56db21ff2fe0b984302ae93c2e126 Mon Sep 17 00:00:00 2001 From: R3gi CZ Date: Sat, 7 Dec 2019 16:07:28 +0000 Subject: [PATCH 31/61] Translated using Weblate (Czech) Currently translated at 86.6% (2665 of 3078 strings) --- OsmAnd/res/values-cs/strings.xml | 117 +++++++++++++++++++++++++++---- 1 file changed, 103 insertions(+), 14 deletions(-) diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index a0a8fa081a..6c2067121e 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -3007,17 +3007,17 @@ Zobrazená oblast: %1$s x %2$s Druh dopravy Vyhledávání GPS Nástroj souřadnic - Ohodnotit + OK Zásady soukromí - Pomozte nám vylepšit OsmAnd! + Pomozte nám OsmAnd vylepšit Zvolte typ dat, který chcete sdílet: Stažené mapy Navštívené obrazovky Určete, která data dovolíte aplikaci OsmAnd sdílet. - Klepnutím na \"Povolit\", souhlasíte s našimi %1$s + Klepněte na „Povolit“, pokud souhlasíte s našimi %1$s Soukromí a zabezpečení Zvolte, které údaje s námi sdílíte - Ne, děkuji + Ne, díky Povolit Název profilu Typ navigace @@ -3037,20 +3037,20 @@ Zobrazená oblast: %1$s x %2$s Typ: %s Základní profil Vyberte typ navigace - Prosíme, vyberte typ navigace pro nový profil aplikace + Vyberte typ navigace pro nový profil aplikace OsmAnd služba pro stahování Purpurová Ikona Shromážděné údaje Zadejte název profilu - Název profilu by neměl být prázdný! + Zadejte název profilu. Duplicitní název Profil s tímto názvem již existuje Nelze smazat základní profily aplikace OsmAnd Uložit změny - Před pokračováním je třeba uložit změny profilu + Nejprve je třeba uložit změny profilu Odstranit profil - Opravdu chcete odstranit profil %s + Opravdu chcete odstranit profil „%s“ Zvolte základní profil Vyberte typ navigace Auto, nákladní auto, motocykl @@ -3087,7 +3087,7 @@ Zobrazená oblast: %1$s x %2$s Povolit trasy pro klasické lyžování Preferovaná obtížnost Mimo sjezdovky - Prosíme, darujte nám 30 sekund sdílením vaší zpětné vazby a hodnocením naší práce na Google Play. + Prosím, dejte nám zpětnou vazbu a ohodnoťte naši práci na Google Play. Povolit aplikaci OsmAnd sbírat a zpracovávat anonymní data využívání aplikace. Nesbíráme ani neukládáme data o vaší poloze nebo jakýchkoli polohách zobrazených na mapě. \n \nKdykoliv můžete změnit vaši volbu v Nastavení > Soukromí a zabezpečení. @@ -3102,7 +3102,7 @@ Zobrazená oblast: %1$s x %2$s Nastavit min/max rychlost Nový profil Pád - Poslední spuštění OsmAnd se nezdařilo. Prosíme, pomozte nám zlepšit OsmAnd sdílením chybové zprávy. + Posledně se aplikace OsmAnd zhroutila. Prosíme, pomozte nám zlepšit OsmAnd sdílením chybové zprávy. Osobní přepravník Jednokolka Skútr @@ -3177,16 +3177,16 @@ Zobrazená oblast: %1$s x %2$s potom %1$s Zrušit předplatné %1$s • Ušetřete %2$s - Seznam instalovaných modulů + Nainstalované moduly Nastavení navigace Vzhled aplikace, jednotky, oblast - Upozornění budou zobrazena v levém dolním rohu obrazovky během navigace. + Upozornění jsou zobrazena vlevo dole během navigace. Jazyk a výstup Obnovit do základního nastavení Spravovat profily aplikace… Ovlivní celou aplikaci Nastavení OsmAnd - Kopírovat z jiného profilu + Kopírovat z jiného profilu Zapnout obrazovku Mapa během navigace Mapa během navigace @@ -3194,8 +3194,97 @@ Zobrazená oblast: %1$s x %2$s Hmotnost, výška, rychlost Parametry vozidla Hlasová oznámení se přehrávají pouze během navigace. - Navigační pokyny a oznámení + Navigační pokyny a oznámení Hlasová oznámení Konfigurace parametrů trasy Parametry trasy + Použito pro odhadnutí času příjezdu u cest s neznámým povrchem a pro omezení rychlosti u všech cest (může ovlivnit trasu) + Nastavení profilu: + OsmAnd používá UTM Standard, který je podobný, ale nikoliv identický s UTM NATO formátem. + Příklad + UTM Standard + Toto nastavení je vybráno jako výchozí pro profily: %s + Změnit nastavení + Zahodit změny + Použít pouze na „%1$s“ + Použít na všechny profily + Úvodní zpráva + Analytika + Zobrazit mapu na uzamčené obrazovce během navigace. + Nastavení navádění pro zvolený profil „%1$s“. + Jednotky a formát + Vzhled + Vzhled mapy + Upravit profil + Přepnout profil + Vytváření, import a úprava profilů + Upozornění na displeji + Profil aplikace změněn na „%s“ + Nastavení modulů + Stáhněte detailní mapu %s pro zobrazení této oblasti. + Přesunout OsmAnd soubory do nového umístění\? +\n%1$s → %2$s + %1$s • %2$s + Volno %1$s GB (z %2$s GB) + Zadejte cestu k adresáři + Adresář… + Zadejte cestu ke adresáři s OsmAnd daty + Změnit adresář pro OsmAnd data\? + Přesunout do nového umístění + Vnitřní úložiště, skryté před uživateli a aplikacemi, přístupné výhradně pro OsmAnd + Změnit adresář úložiště dat + Typ sjezdovky + Nováček + Začátečník + Středně pokročilý + Pokročilý + Expert + Volná jízda + Extrém + Obtížnost sjezdovky + Připojení + Vypočítat + OsmAnd využití + Dlaždice + Mapy + %1$s TB + %1$s GB + %1$s MB + %1$s kB + Využito %1$s TB + Využito %1$s GB + Využito %1$s MB + Využito %1$s kB + Upřednostňovat nezpevněné cesty + Upřednostňovat nezpevněné cesty. + Aktualizovat všechny mapy + Opravdu chcete aktualizovat všechny mapy (%1$d)\? + Sdíleno + Upřednostňovat nezpevněné cesty + Upřednostňovat nezpevněné cesty. + OSM úpravy + Exportovat profil + OsmAnd profil: %1$s + Profil „%1$s“ již existuje. Přepsat\? + Profil nelze exportovat. + Import profilu: + Pro import profilu, vyberte soubor profilu ze zařízení a otevřete ho pomocí OsmAnd. + %1$s chyba importu: %2$s + Úspěšně importováno: %1$s + Prohodit %1$s a %2$s + Počáteční bod + Trasa uložena + Název souboru je prázdný + Vrátit zpět + Vyčistit %1$s\? + Dialog stahování map + Dialogy a oznámení + Správa vyskakovacích upozornění, oznámení a dialogů zobrazovaných aplikací OsmAnd. + Navrhované mapy + Tyto mapy je třeba používat s modulem + Přidané profily + Nový profil přidaný do OsmAnd modulem + Vypnout + Přidán nový modul + Přidat nový profil „%1$s“\? \ No newline at end of file From 798690a5e242a866654ad3235ff7072beb30af04 Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Sat, 7 Dec 2019 11:47:45 +0000 Subject: [PATCH 32/61] Translated using Weblate (Italian) Currently translated at 95.1% (2926 of 3078 strings) --- OsmAnd/res/values-it/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 66939f66b7..f64c6dd2e5 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -3353,11 +3353,11 @@ Rappresenta l\'area: %1$s x %2$s Preferisci le strade non pavimentate Preferisci le strade pavimentate. Modifiche OSM - Toccando questo pulsante azione mostra o nasconde nella mappa le linee isoipse + Un controllo per mostrare o nascondere nella mappa le linee isoipse. Mostra le linee isoipse Nascondi le linee isoipse Mostra/nascondi le linee isoipse - Toccando questo pulsante azione mostra o nasconde nella mappa le ombreggiature dei rilievi + Questo pulsante mostra o nasconde nella mappa le ombreggiature dei rilievi Mostra l\'ombreggiatura dei rilievi Nascondi l\'ombreggiatura dei rilievi Mostra/nascondi l\'ombreggiatura dei rilievi From 99d45bfb107479311a33ebe877709f2c588ebcee Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Thu, 5 Dec 2019 14:11:25 +0000 Subject: [PATCH 33/61] Translated using Weblate (Arabic) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-ar/strings.xml | 1120 +++++++++++++++++------------- 1 file changed, 630 insertions(+), 490 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 05f66450c6..9d2c3dc7f3 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -15,7 +15,7 @@ إزالة فتح إضافة - تم حذف بنجاح POI + تم الحذف حذف حذف POI إنشاء إحداثية POI @@ -26,8 +26,8 @@ لم يتم التحقق منه إدارة الخرائط تفضل الطرق السريعة - فضّل.. - فضّل الطرق السريعة + فضّل… + فضّل الطرق السريعة. بدون فتح خرائط الاتحاد الأوروبي بيانات الصوت / الفيديو @@ -36,11 +36,11 @@ التوجيه الدقيق (ألفا) التقاط صورة إضافة Dropbox - حدد بناء على طلبها - حدث خطأ أثناء التسجيل.. + وفقا لمتطلبات ؟ + حدث خطأ أثناء التسجيل حذف هذا المسار ؟ غير متاح - تعذر تشغيل التسجيل + تعذر تشغيل التسجيل. حذف تسجيل شغّل تسجيل @@ -70,7 +70,7 @@ إزالة وجهة توجد وجهة سابقة تعمل حالياً : الوجهات - الوضع المتقدم + الوضع المتقدم… موقف سيارات حالة طوارئ وسائل النقل العام @@ -82,13 +82,13 @@ متاجر المواد الغذائية للسياح وقود - عرض التنبيهات + عرض التنبيهات… استخدم البوصلة تجنب الطرق السريعة الممرات تجنب الطرق غير المعبدة تجنب العبارات - التجنب + التجنب… متواصل لفتح قفل الشاشة اضغط على أيقونة القفل اسم الشارع @@ -116,37 +116,37 @@ خاص الزم اليسار الزم اليمين - اظهر الخطوط المحيطية (الكنتورية) - اظهر المزيد من تفاصيل الخريطة - زيادة كمية خريطة التفصيل هو مبين + أظهر الخطوط المحيطية (الكنتورية) + أضهر المزيد من تفاصيل الخريطة + زيادة كمية خريطة التفصيل هو مبين. بيانات التوجيه الصيغة البحث عن عنوان - ينسق - بحث وسائل النقل العام + إحداثيات + بحث عن وسائل النقل العام البحث في المفضلة - ملاحة OsmAnd غير متاحة مؤقتا. + ملاحة أوسماند غير متاحة مؤقتا. نقطة الانطلاق لم تحدد بعد - خرائط التوجيه - تحميل وإدارة الخرائط غير المتصلة المخزنة على جهازك + الخرائط القياسية (ناقل) + تحميل وإدارة الخرائط غير المتصلة المخزنة على جهازك. الملحقات خيارات المطور - تصيير أصلي + تقديم الأصلي اختبار الأوامر الصوتية إرسال ملفات GPX إلى OSM؟ الوضوح وسوم الوصف - الرجاء تسجيل الدخول إلى OSM + الرجاء تسجيل الدخول إلى OSM. الدعم دعم الميزات الجديدة - تبرع لإضافة مميزات جديدة في البرنامج + تبرع لإضافة مميزات جديدة في البرنامج. عرض المسطرة معلومات عودة إلى الموقع مساعدة وضع إتاحة الوصول - تفعيل مميزات إتاحة الوصول + تفعيل مميزات إتاحة الوصول. تفعيل إيقاف وفقا لإعداد النظام العالمي @@ -155,21 +155,21 @@ تكبير التقريب الحالي هو ش - ش و ش.ش - ش.ش - شرق و ش.ش + الشمال والشمال الشرقي + شمالي شرقي + شرق-شمال شرق الشرق - شرق و ج.ش + الشرق-الجنوب الشرقي ج.ش - ج و ج.ش + الجنوب والجنوب الشرقي ج - ج و ج.غ - ج.غ - غ و ج.غ + الجنوب والجنوب الغربي + الجنوب الغربي + الغرب والجنوب الغربي غ - غ و ش.غ - ش.غ - ش و ش.غ + الغرب والشمال الغربي + الشمال الغربي + الشمال والشمالل الغربي أمام الإصدار : عنْ التطبيق @@ -177,14 +177,14 @@ التّقريب الأقصى التكبير اﻷقصى الرابط - حدد منطقة القيادة: الولايات المتحدة، أوروبا، المملكة المتحدة، آسيا، وأخرى + حدد منطقة القيادة: الولايات المتحدة، أوروبا، المملكة المتحدة، آسيا، وأخرى. منطقة القيادة اليابان الولايات المتحدة كندا أوروبا وآسيا المملكة المتحدة، الهند وما شابه ذلك - الإعلامات + الإعلامات… ادخل اسم المستخدم وكلمة السر في الإعدادات إزالة الوجهات الوسطى الحفاظ على الوجهات الوسطى @@ -194,8 +194,8 @@ إلى : بواسطة: من : - استعراض - وضع الخريطة الافتراضي: + استعراض الخريطة + الملف الشخصي الافتراضي تعيينه وجهة اختر المدينة أو الشارع الأول حذف نقطة @@ -206,7 +206,7 @@ نقطة GPX اسم الملف نقاط المسار حفظت بنجاح {0} - هذه الإضافة تتيح مؤشر على الخريطة يسمح بانشاء مسارات بالضغط على الخريطة، استعمال أو تعديل ملف GPX موجود، تخطيط رحلة أو حساب المسافة بين نقاط ما. النتائج يمكن حفظها كملف GPX الذي يمكن استخدامه للارشاد في وقت لاحق. + هذه الإضافة تتيح مؤشر على الخريطة يسمح بانشاء مسارات بالضغط على الخريطة، استعمال أو تعديل ملف GPX موجود، تخطيط رحلة أو حساب المسافة بين نقاط ما. النتائج يمكن حفظها كملف GPX الذي يمكن استخدامه للإرشاد في وقت لاحق. حاسبة المسافة وأداة التخطيط لا تظهر مرة أخرى بدء التعديل @@ -240,7 +240,7 @@ نعم إلغاء تحديث الخريطة - حدد عنوان + عنوان منطقة مدينة شارع @@ -278,22 +278,22 @@ قابل للتحميل: %1$s أقصى تكبير: %1$s أدنى تكبير: %1$s - تعريف/تعديل - ضبط إعدادات نطق أسماء الشوارع، وتحذيرات المرور (توقيفات الإجبارية، ومطبات السرعة)، و تحذيرات كاميرات السرعة، و السرعة القصوى + تعريف/تعديل… + ضبط إعدادات نطق أسماء الشوارع، وتحذيرات المرور (توقيفات الإجبارية، ومطبات السرعة)، و تحذيرات كاميرات السرعة، و السرعة القصوى. نطق أسماء الشوارع ( نطق آلي TTS ) السرعة القصوى كاميرات السرعة تحذيرات حركة المرور - " " + خريطة: الوجهة %1$s البحث عن الشارع في المدن المجاورة - فرز باب لـ باب + فرز من الباب إلى الباب الرجاء الانتظار حتى انتهاء المهمة الحالية توفر %1$d ملفات للتحميل إلغاء مسار تسجيل المسار - قم بضبط كيفية تسجيل الرحلات - "تحديد سمة للتطبيق: ليلي، نهاري" + قم بضبط كيفية تسجيل الرحلات. + تحديد سمة للتطبيق: ليلي، نهاري. سمة التطبيق اختار تفضيلة تعديلات OSM @@ -308,7 +308,7 @@ هذه الأداة توفر وظائف لتدوين ملاحظات صوتية/مصورة/فيديو خلال الرحلة، سواء باستخدام زر على شاشة الخريطة، أو مباشرة من القائمة لأي موقع على الخريطة. ملاحظات صوتية/مصورة خرائط الطرقات فقط - منع عرض الحدود الإقليمية (المستويات الإدارية من 5-9) + منع عرض الحدود الإقليمية (المستويات الإدارية من 5-9). Rec تحديد وقت عرض خرائط الطرقات فقط : خرائط الطرقات فقط @@ -319,28 +319,28 @@ نظام ألوان الطريق الوجهة %1$s الوجهة الوسطى %1$s - إضافة كآخر وجهة - إضافة كأول وجهة + أضف آخر وجهة وسيطة + إضافة كوجهة وسيطة أولى الانتهاء (دقائق) - اختر موجودا + اختر القائمة … معلومات تنقيح FPS اختيار وضع إفتراضي لعرض الخريطة: استعراض، سيارة، مشي . أُعيد ترتيب نقاط الوجهات الوسطى لتحسين ترتيبها من الموقع الحالي حتى الوجهة. أنشئ ملف تعديل OSM بنجاح %1$s - فشلت عملية النسخ الاحتياطي لتعديل OSM + فشلت عملية النسخ الاحتياطي لتعديل OSM. نسخ الاحتياطي كتعديل OSM %1$d ملف بقى يظهر الإعدادات لتمكين التتبع والملاحة في وضعية السكون ( الشاشة مغلقة ) عبر إيقاظ دوري لجهاز GPS. تمكين لحساب المسارات بدقة دون أخطاء. لا يزال محدود المسافة وبطيء. صورة %1$s %2$s ملحق Dropbox يسمح بمزامنة المسارات و الملاحظات الصوتية والمرئية مع حسابك في Dropbox. - حدد تنسيق الفيديو الناتج + تنسيق الفيديو الناتج: تنسيق الفيديو الناتج - استخدم مسجل النظام للفيديو - استخدام تطبيق النظام للصور + استخدم مسجل النظام للفيديو. + استخدام تطبيق النظام للصور. استخدام تطبيق الكاميرا - ضبط إعدادات الصوت والفيديو - إضافتها كآخر وجهة وسطى + ضبط إعدادات الصوت والفيديو. + إضافة كآخر وجهة وسيطة إضافتها كأول وجهة وسطى الوجهة %1$s بعيدة جدا من أقرب طريق. تم الوصول @@ -348,14 +348,14 @@ وجهة وسطى نقطة الوصول بعيدة جدا عن أقرب طريق. إضافة وسم - ضبط تحذيرات المرور ( حدود السرعة، والتوقف القسري، والمطبات الصناعية ) ، وتحذيرات كاميرا السرعة ، ومعلومات الممرات + ضبط تحذيرات المرور ( حدود السرعة، والتوقف القسري، والمطبات الصناعية ) ، وتحذيرات كاميرا السرعة ، ومعلومات الممرات. التقريبات المُنزّلة: %1$s معلومات التّجانب: %1$s حُفِظ المصدر التّجانبي %1$s بنجاح - استخدم البوصلة عندما لا تكون هناك أي وجهة محددة - ملائمة تقريب الخريطة تزامناً مع موقعك + استخدم البوصلة عندما لا تكون هناك أي وجهة محددة. + ملائمة تقريب الخريطة تزامناً مع موقعك. التكبير التلقائي - التقط الموقع إلى الطرق أثناء الملاحة + التقط الموقع إلى الطرق أثناء الملاحة. التقاط الطريق خرائط OsmAnd والملاحة برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالانترنت أو من دونه @@ -363,7 +363,7 @@ برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالانترنت أو من دونه أنشئ مُرشِّح نقاط مهمة نمط المواصلات: - اختر نمط المواصلات + وسائل النقل: الشروق: %1$s \nالغروب: %2$s مواقيت الشروق والغروب @@ -389,73 +389,73 @@ متابعة التوجيه السابق؟ (%1$sثانية) سيعاد احتساب المسار حالما يتم العثور على الموقع لقد أوقفت سيارتك عند - حدد سرعة محاكاة المسار + حدد سرعة محاكاة المسار: الذاكرة المخصصة %1$s م.ب (حد الأندرويد %2$s م.ب, دلفيك %3$s م.ب). إجمالي الذاكرة الأصلية - " " + نقطة الانطلاق بعيدة جدًا عن أقرب طريق. موقع مشترك أخذ السيارة من الموقف تمت إضافة تنبيه لأخذ سيارتك في التقويم. يجب حذف التنبيه هناك يدوياً. حدد مهلة الموقف إزالة موقع موقف السيارة ؟ - إزالة! + إزالة اختر نوع مواقف السيارات وقت محدود وقت غير محدود إضافة تنبيه إلى التقويم وقت محدد زمنياً مواقف غير محدودة زمنياً - فعّل هذا في حال رغبتك بسماع نغمة التقاط الصّور + فعّل هذا في حال رغبتك بسماع نغمة التقاط الصّور. نموذج مركتور البيضوي "N %1$.3f E %2$.3f" يحد من شوشرة البوصلة ولكنه يضيف بطئ بسيط. مرشح كالمان - شغّل صوتًا عند التقاط صورة + تشغيل صوت التقاط الصورة استخدم الاستشعار المغناطيسي - حدد عمل الودجة الافتراضي + عمل الودجة الافتراضي: عمل الودجة الافتراضي مكان موقف سيارتك. %1$s أخذ السيارة عند: م ص موقف - يساعد هذا الملحق بحفظ الأماكن التي ركنت بها سيارتك والوقت المتبقي للركن (في حالة وجود وقت محدد). كل من المكان والزمن متواجدان على لوحة التحكم وكذلك في المؤشرات على شاشة الخريطة. يمكن إضافة منبه الى التقويم لتذكير. + يساعد هذا الملحق بحفظ الأماكن التي ركنت بها سيارتك والوقت المتبقي للركن (في حالة وجود وقت محدد). كل من المكان والزمن متواجدان على لوحة التحكم وكذلك في المؤشرات على شاشة الخريطة. يمكن إضافة منبه إلى التقويم للتذكير. مكان الموقف موقف السيارة احذف علامة وقوف السيارات في أسرع وقت ممكن دوّار: خذ المخرج %1$d ثم استمر - اجعل جميع الميزات الأرض المساحية شفافة على خريطة + اجعل جميع الميزات الأرض المساحية شفافة على خريطة. المضلعات وضع التقديم - تحسين الخريطة لـ + تحسين الخريطة ل بحث عن النقاط المهمة القيادة بيد اليسار - حدد للبلدان التي فيها حركة المرور على اليسار - تحديد الموقع.. + حدد للبلدان التي فيها حركة المرور على اليسار. + الموقف غير معروف بعد تعديل الشفافية (0 - شفاف ، 255 - معتم ) - إلغاء التحميل ؟ - نشكرك على استخدام OsmAnd. الكثير من مميزات هذا البرنامج بحاجة إلى بعض البيانات الإقليمية التي يمكنك تحميلها عبر \'إعدادات\'→ \'إدارة البيانات\'. بعد ذلك سوف تكون قادرا على عرض الخرائط، و تحديد العناوين ، والبحث عن النقاط المهمة ، والعثور على وسائل النقل العام . + إلغاء التحميل؟ + نشكرك على استخدام أوسماند. الكثير من مميزات هذا البرنامج بحاجة إلى بعض البيانات الإقليمية التي يمكنك تحميلها عبر \'إعدادات\'→ \'إدارة البيانات\'. بعد ذلك سوف تكون قادرا على عرض الخرائط، و تحديد العناوين ، والبحث عن النقاط المهمة ، والعثور على وسائل النقل العام . خريطة العالم العامة مطلوبة لعمل التطبيق بشكل سليم، وقد حددت للتحميل. لم يتم العثور على شيء. إذا لم تتمكن من إيجاد منطقتك، يمكنك صنعها بنفسك (انظر http://osmand.net ). إلى مدى قريب \"١٠٠م\" - بدون + بدون تكبير تلقائي إلى مدى متوسط \"٢٠٠م\" خرائط متصلة بالإنترنت تمكين ملحق خرائط الإنترنت من تحديد مصادر مختلفة من الخرائط خرائط من الانترنت وتجانبية - استخدام الخرائط من الإنترنت (تحميل وحفظ التجانبيات منها على بطاقة SD) + استخدام الخرائط من الإنترنت (تحميل وحفظ التجانبيات منها على بطاقة SD). خرائط الإنترنت - ضبط مصادر الخرائط التجانبية على الإنترنت أو المخزنة مؤقتاً + حدد مصادر خريطة التجانب المخزنة مؤقتًا عبر الإنترنت. إلى مدى بعيد \"٥٠٠م\" - استخدم الحساس المغناطيسي لتحديد قيمة البوصلة بدلا من حساس الاتجاهات - هذه الأداة تجعل ميزات ذوي الإحتياجات الخاصة متاحة مباشرة في التطبيق. الأداة تسهل تعديل وتيرة الكلام لأصوات TTS، ضبط أداة توحيه واحهة الملاحة، إستخدام كرة تحكم لتعديل الزوم، أو استخدام خاصية الرد من نص إلى كلام لإعلان موقعك أثناء السياقة. + استخدم الحساس المغناطيسي لتحديد قيمة البوصلة بدلا من حساس الاتجاهات. + يجعل هذا البرنامج المساعد ميزات إمكانية الوصول الخاصة بالجهاز متاحة مباشرة في أوسماند. إنه يسهل على سبيل المثال ضبط معدل الكلام لأصوات تحويل النص إلى كلام ، أو تكوين تنقل شاشة لوحة الاتجاه ، باستخدام كرة التتبع للتحكم في التكبير / التصغير ، أو تعليقات تحويل النص إلى كلام ، على سبيل المثال لإعلام موضعك تلقائيًا. هذه الأداة المساعدة تعرض إعدادات لتطوير وتصحيح الميزات كاختبار أو محاكاة التوجيه، أداء الشاشة، أو الإشعار الصوتي. هذه الإعدادات معدة للمطورين و المستخدم العام لا يحتاجها. الملحقات - تقوم الملحقات بتفعيل إعدادات متقدمة ووظائف إضافية + تقوم الملحقات بتفعيل إعدادات متقدمة ووظائف إضافية. عبر هذه الأداة يمكن اسخدام التطبيق للمساهمات في الموقع كإنشاء أو تعديل أماكن الأشياء، تصليح الأعطاب أو التبليغ عنها، والمساهمة بملفات GPX مسجلة. الموقع قائم بفعل المجتمع، مشروع رسم الخرائط على النطاق العام العالمي. للمزيد من التفاصيل انظر https://openstreetmap.org. المشاركة الفعالة جد مقدرة، والمساهمات يمكن إنشاءها من التطبيق مباشرة إن قمت بإدخال معلوماتك الشخصية في التطبيق. عادة تعرض الخرائط الاتجاهية أسرع. ربما لا تعمل جيدا على بعض الأجهزة. - شغل أوامر الصوت المحدد الحالي + شغل أوامر الصوت المحدد الحالي: لا توجد خرائط توجيه لهذا المكان. قم بتحميل إحدها ، أو التغيير لخرائط الانترنت (فعّل ملحق خرائط الإنترنت). و أو @@ -476,9 +476,9 @@ ضبط خاص لكل وضع من أوضاع الملاحة. إدارة بيانات الخرائط إعدادات عامة - العرض، اللغة، الوحدات، التخزين، السمة ..إلخ - مطلوب للمساهمة في Open Street Map (Osm) - يتم الرفع.. + العرض، اللغة، الوحدات، التخزين، السمة ..إلخ. + مطلوب للمساهمة في Open Street Map (Osm). + يتم الرفع… رفع الكل حذف التعديل عرض المسار الحالي @@ -488,12 +488,12 @@ الأيمن الخلفي الدقة الارتفاع - التفضيلات المتعلقة بالإتاحة + التفضيلات المتعلقة بالإتاحة. الإتاحة ذاكرة التشغيل غير كافية لعرض المنطقة المختارة التعديل دون اتصال - استخدام التعديل دون اتصال دائماً - التركيز عين بشكل غير محدود + استخدام التعديل دون اتصال دائماً. + التركيز بشكل غير محدود وضع التركيز الكلي (عن قرب) تركيز تلقائي التركيز البؤري @@ -520,19 +520,19 @@ جانب واحد (8 قطاعات) جانبان (12 قطاع) نمط التّوجه - اختر نمط التّعبير عن الاتّجاهات النّسبية أثناء الحركة + اختر نمط التّعبير عن الاتجاهات النّسبية أثناء الحركة أنا هنا التوجيه الصوتي (صوت طبيعي) التوجيه الصوتي (صوت آلي TTS) وضع الملاحة - غيّر نمط تكبير الخريطة بواسطة حركات كرة التّتبع الأفقية + غيّر نمط تكبير الخريطة بواسطة حركات كرة التّتبع الأفقية. استخدم كرة التّتبع للتّحكم في التّكبير تراكب فلوري - استخدم الألوان الفلورية لعرض المسارات و الطّرق + استخدم الألوان الفلورية لعرض المسارات و الطّرق. رفع التعديلات إلى OSM التّحرير غير المتزامن مع OSM: - العلل أو الـ POI المحفوظة محلياً - أظهر و أدر العلل أو الـ POI الموجودة على قاعدة البيانات المحلية + نقاط OSM المحفوظة على الجهاز + إظهار وإدارة النقاط المهمة / ملاحظات OSM المذكورة في قاعدة البيانات على الجهاز. حدد فواصل التتبع المباشر. فترة التتبع المباشر التتبع مباشرة عبر عنوان ويب @@ -543,73 +543,83 @@ o\'على مدار الساعة إيقاف التنبيه التلقائي تفعيل التنبيه التلقائي - لم يتم ربط الملاحظة بأي موقع. إضغط على \"استخدام المكان …\" لترفق ملاحظة بالمكان المحدد. + انقر فوق \"استخدام الموقع ...\" لإضافة ملاحظة إلى الموقع. لا يوجد توجيه نشط حالياً اختيار المسار النشط الحالي اختيار مسار محفوظ تذكر اختياري - إجمالي الذاكرة الأصلية المخصصة من قبل التطبيق %1$s م.ب (دلفيك %2$s م.ب, أخرى %3$s م.ب). الذاكرة النسبية %4$s م.ب (حد الأندرويد %5$s م.ب, دلفيك %6$s م.ب) + إجمالي الذاكرة الأصلية المخصصة من قبل التطبيق %1$s م.ب (دلفيك %2$s م.ب, أخرى %3$s م.ب). الذاكرة النسبية %4$s م.ب (حد الأندرويد %5$s م.ب, دلفيك %6$s م.ب). مشي دراجة نارية قارب - الطائرات - اختيار أوضاع الملاحة المتوفرة - وضع الملاحة - " تقديم الخريطة :" + طائرة + اختيار أوضاع الملاحة المتوفرة. + تطبيق الملف الشخصي + تقديم الخريطة هل تريد حذف %1$d من التعديلات؟ احذف الكل توفر هذه الأداة طبقة خط كفافي وطبقة للتضاريس ظاهرة على الخريطة الأساسية للتطبيق. هذه الوظيفة ستكوم محل تقدير من طرف الرياضيين، المتنزهين، الرحالة، وكل من هو مهتم بجمال ورخاء الطبيعة. \n \nالبيانات العالمية (بين 70 درجة شمالا و70 جنوبا) مبنية حسب قياسات SRTM (مكوك رادار البعثة الطبوغرافية) وASTER (المكوك المتقدم الخاص بالإنبعاث الحراري والانعكاس الإشعاعي)، أداة تصوير على متن Terra، القمر الصناعي الرئيسي لنظام رصد الأرض التابع لناسا. ASTER هو جهد تعاوني فيما بين وكالة ناسا، وزارة الاقتصاد اليابانية، التجارة والصناعة (METI)، و أنظمة الفضاء اليابانية (J-spacesystems). - "يوفر هذا الملحق خطوط محيطية وطبقة تضاريس (طبيعية) تظهر على خرائط OsmAnd. هذه الوظيفة ستعجب كثيرا الرياضيين، المتجولين، الرحالة، و كل من تهمه بنية التضاريس الطبيعية. + يوفر هذا الملحق خطوط محيطية وطبقة تضاريس (طبيعية) تظهر على خرائط OsmAnd. هذه الوظيفة ستعجب كثيرا الرياضيين، المتجولين، الرحالة، و كل من تهمه بنية التضاريس الطبيعية. +\n +\nالبيانات العالمية (ما بين 70 درجة شمالا و70 جنوبا) مبنية على مقاييس SRTM (مكوك رادار البعثة الطبوغرافية) و ASTER (الانبعاث الحراري الفضائي المتقدم والإنعكاس الإشعاعي)، أداة التصوير على متن Terra، القمر الصناعي الرئيسي لنظام رصد الأرض التابع لناسا. +\n ASTER هو جهد تعاوني بين كل من وكالة ناسا، وزارة الاقتصاد اليابانية، التجارة والصناعة (METI)، ونظم الفضاء اليابانية (J-spacesystems). + OsmAnd (اتجاهات التنقل الآلية OSM) \n -\nالبيانات العالمية (ما بين 70 درجة شمالا و70 جنوبا) مبنية على مقاييس SRTM (مكوك رادار البعثة الطبوغرافية) و ASTER (الانبعاث الحراري الفضائي المتقدم والإنعكاس الإشعاعي)، أداة التصوير على متن Terra، القمر الصناعي الرئيسي لنظام رصد الأرض التابع لناسا. -\n ASTER هو جهد تعاوني بين كل من وكالة ناسا، وزارة الاقتصاد اليابانية، التجارة والصناعة (METI)، ونظم الفضاء اليابانية (J-spacesystems). -\n " - " -\n OsmAnd (توجيهات OSM ملاحة آلية) +\n OsmAnd هو تطبيق تنقل مفتوح المصدر مع إمكانية الوصول إلى مجموعة واسعة من بيانات OpenStreetMap (OSM) العالمية. يمكن تخزين جميع بيانات الخريطة (خرائط متجهة أو خرائط تجانبية) على بطاقة ذاكرة الهاتف للاستخدام في وضع عدم الاتصال. كما يتم توفير وظائف التوجيه عبر الإنترنت وغير متصل ، بما في ذلك التوجيه الصوتي خطوة بخطوة. \n -\nOsmand عبارة عن تطبيق ملاحة مفتوح المصدر مع إمكانية الوصول إلى العديد من بيانات عالمية للموقع. كل بيانات الخرائط (خرائط التوجيه أو الخرائط الجزئية) يمكن تخزينها في ذاكرة الجهاز للإستخدام دون أنترنت. يوفر التطبيق كذلك وظائف توجيه بما في ذلك التوجيه الصوتي. +\n بعض الميزات الأساسية: +\n - وظيفة كاملة في وضع عدم الاتصال (قم بتخزين خرائط المتجهات أو الخرائط التي تم تنزيلها في وحدة تخزين الجهاز) +\n - خرائط ناقل متواجد حاليا المدمجة للعالم بأسره المتاحة +\n - قم بتنزيل خرائط البلد أو المنطقة مباشرة من التطبيق +\n - تراكب العديد من طبقات الخريطة ممكن ، مثل GPX أو مسارات التنقل ، النقاط المثيرة للاهتمام ، المفضلة ، خطوط الكنتور ، محطات النقل العام ، خرائط إضافية مع شفافية قابلة للتخصيص +\n - البحث دون اتصال عن العناوين والأماكن (النقاط المهمة) +\n - التوجيه دون اتصال للمسافات متوسطة المدى +\n - أوضاع السيارات والدراجات والمشاة مع اختياري: +\n - التبديل التلقائي عرض يوم / ليلة +\n - خريطة تعتمد على السرعة التكبير +\n - خريطة المحاذاة وفقا للبوصلة أو اتجاه الحركة +\n - توجيه حارة ، وعرض الحد الأقصى للسرعة ، والأصوات المسجلة والنص إلى كلام \n -\nبعض الميزات الأساسية: -\n - -\n - -\n " - "عن طريق هذه الأداة يمكنك الوصول إلى أنواع عديدة من خرائط النت (تدعى بالقطع أو النقطية)، من قطع OSM مسبقة ( مثل Mapnik) إلى صور أقمار وطبقات مخصصة كخرائط الطقس، الخرائط الجيولوجية، طبقات التضاريس...إلخ. +\n قيود هذه النسخة المجانية من OsmAnd: +\n - عدد التنزيلات للخريطة محدود +\n - لا توجد إمكانية الوصول دون اتصال إلى النقاط المهمة في ويكيبيديا \n -\n -\nكل من هذه الخرائط يمكن أن تستخدم إما كخرائط رئيسية (قاعدية) تظهر على واجهة التطبيق، أو كطبقة فوقية أو تحتية لخريطة قاعدية آخرى( كخرائط التطبيق المحلية). لجعل أي طبقة تحتية خريطة أكثر وضوحا، بعض عناصر خرائط التطبيق التوجيهيه يمكن إخفاءها في قائمة \'ضبط الخريطة\' حسب الرغبة. -\n -\n -\nأجزاء الخرائط يمكن الحصول عليها من مصادر إنترنت، أو تحضيرها للإستخدام دون إنترنت ( ونسخها يدويا إلى مجلد بيانات التطبيق) كقاعدة بيانات SQLite والتي يمكن إنتاجها عن طريق مجموعة متنوعة من أدوات تحضير الخرائط المستقلة. -\n " +\n يجري تطوير OsmAnd بنشاط ويعتمد مشروعنا والتقدم المستمر على المساهمات المالية لتطوير واختبار وظائف جديدة. يرجى النظر في شراء OsmAnd + ، أو تمويل ميزات جديدة محددة أو تقديم تبرع عام على https://osmand.net. + عن طريق هذه الأداة يمكنك الوصول إلى أنواع عديدة من خرائط النت (تدعى بالقطع أو النقطية)، من قطع OSM مسبقة ( مثل Mapnik) إلى صور أقمار وطبقات مخصصة كخرائط الطقس، الخرائط الجيولوجية، طبقات التضاريس...إلخ. +\n +\n +\nكل من هذه الخرائط يمكن أن تستخدم إما كخرائط رئيسية (قاعدية) تظهر على واجهة التطبيق، أو كطبقة فوقية أو تحتية لخريطة قاعدية آخرى( كخرائط التطبيق المحلية). لجعل أي طبقة تحتية خريطة أكثر وضوحا، بعض عناصر خرائط التطبيق التوجيهيه يمكن إخفاءها في قائمة \'ضبط الخريطة\' حسب الرغبة. +\n +\n +\nأجزاء الخرائط يمكن الحصول عليها من مصادر إنترنت، أو تحضيرها للإستخدام دون إنترنت ( ونسخها يدويا إلى مجلد بيانات التطبيق) كقاعدة بيانات SQLite والتي يمكن إنتاجها عن طريق مجموعة متنوعة من أدوات تحضير الخرائط المستقلة. التغييرات POI داخل التطبيق لا تؤثرعلى ملفات الخرائط المحملة، يتم حفظ التغييرات إلى ملف محلي بدلا من ذلك. - تحديد نوع الكاميرا الداخلية ,التركيز - " -\n OsmAnd -\n -\n عبارة عن تطبيق ملاحة مفتوح المصدر مع إمكانية الوصول إلى العديد من بيانات عالمية للموقع. -\n كل بيانات الخرائط (خرائط التوجيه أو الخرائط الجزئية) يمكن تخزينها في ذاكرة الجهاز للإستخدام دون أنترنت. يوفر التطبيق كذلك وظائف توجيه بما في ذلك التوجيه الصوتي. -\n -\nبعض الميزات الأساسية: -\n - تشغيل كامل دون أنترنت ( خزن الخرائط التوجيه أو الخرائط الجزئية المنزلة في ذاكرة الجهاز) -\n - خرائط التوجيه المدمجة للعالم ككل متاحة لتعمل دون أنترنت -\n - تحميل غير محدود لخرائط البلدان أو المناطق مباشرة من التطبيق -\n - ميزة ويكيبيديا المحلية ( قم بتحميل POI لويكيبيديا)، الأمثل لمشاهدة المعالم الأثرية -\n - يمكن تراكب عدة طبقات للخرائط، كـ GPX أو مسارات الملاحة، مواقع ذات الإهتمام (POI)، الأماكن المفضلة، الحدود المحيطية، أماكن توقف النقل العمومي، خرائط إضافية بشفافية قابلة للتعديل -\n - البحث عن العناوين والأماكن (POI) دون أنترنت -\n - تحديد الطريق لمسافات متوسطة المدى -\n - وضع السيارة، الدراجة والمشاة متوفر مع: -\n - تبديل اختياري آلي لوضع الرؤية في الليل/النهار -\n - تكبير اختياري حسب السرعة -\n - محاذاة اختيارية للخريطة حسب البوصلة أو اتجاه الحركة + وضع تركيز الكاميرا: + OsmAnd +\n +\n عبارة عن تطبيق ملاحة مفتوح المصدر مع إمكانية الوصول إلى العديد من بيانات عالمية للموقع. +\n كل بيانات الخرائط (خرائط التوجيه أو الخرائط الجزئية) يمكن تخزينها في ذاكرة الجهاز للإستخدام دون أنترنت. يوفر التطبيق كذلك وظائف توجيه بما في ذلك التوجيه الصوتي. +\n +\nبعض الميزات الأساسية: +\n - تشغيل كامل دون أنترنت ( خزن الخرائط التوجيه أو الخرائط الجزئية المنزلة في ذاكرة الجهاز) +\n - خرائط التوجيه المدمجة للعالم ككل متاحة لتعمل دون أنترنت +\n - تحميل غير محدود لخرائط البلدان أو المناطق مباشرة من التطبيق +\n - ميزة ويكيبيديا المحلية ( قم بتحميل POI لويكيبيديا)، الأمثل لمشاهدة المعالم الأثرية +\n - يمكن تراكب عدة طبقات للخرائط، ك GPX أو مسارات الملاحة، مواقع ذات الاهتمام (POI)، الأماكن المفضلة، الحدود المحيطية، أماكن توقف النقل العمومي، خرائط إضافية بشفافية قابلة للتعديل +\n - البحث عن العناوين والأماكن (POI) دون أنترنت +\n - تحديد الطريق لمسافات متوسطة المدى +\n - وضع السيارة، الدراجة والمشاة متوفر مع: +\n - تبديل اختياري آلي لوضع الرؤية في الليل/النهار +\n - تكبير اختياري حسب السرعة +\n - محاذاة اختيارية للخريطة حسب البوصلة أو اتجاه الحركة \n - توجيه اختياري للممر، عرض الحد الأقصى للسرعة، أصوات TTS (نص إلى كلام) أو أخرى مسجلة -\n " +\n {0} POI/الملاحظات تم رفعها - تحديد عنوان ويب مع بناء جملة المعلمة: اللات = {0}، خط الطول = {1}، والطابع الزمني = {2}، HDOP = {3}، {4 ارتفاع =}، والسرعة = {5}، واضعة = {6} + تحديد عنوان ويب مع بناء جملة المعلمة: اللات = {0}، خط الطول = {1}، والطابع الزمني = {2}، HDOP = {3}، {4 ارتفاع =}، والسرعة = {5}، واضعة = {6}. سجل المسار عن طريق ويدجت GPX أو عن طريق إعدادات \'تسجيل المسار\'. هذا الإصدار المجاني ل OsmAnd محدود إلى %1$s تحميلات وحالياً لا يدعم مقالات ويكيبيديا. - وصف المعرض POI + إظهار وصف POI. خرائط عالمية حسب الموضوع في جميع أنحاء العالم ويكيبيديا النقاط المهمة ويكييديا (بدون اتصال) @@ -620,17 +630,17 @@ اسم المستخدم كلمة المرور حالة وضع السكون - استخدمها لتشغيل أوسماند OSMAnd بينما الشاشة مُطفأة - لا يوجد مساحة كافية لتحميل %1$s م.ب المساحة الخالية: %2$s - تحميل {0} ملف ؟ مساحة التخزين المستخدمة هي {1} مب. (المساحة المتوفرة هي {2} مب.) + استخدمها لتشغيل أوسماند بينما الشاشة مُطفأة. + لا يوجد مساحة كافية لتحميل %1$s م.ب المساحة الخالية: %2$s. + تحميل {0} ملف ؟ مساحة التخزين المستخدمة هي {1} مب (المساحة المتوفرة هي {2} مب). السمة الشفافة المكتبات الأصيلة غير مدعومة على هذا الجهاز. - تهيئة المكتبة الأصيلة.. + تهيئة المكتبة الأصيلة… التوسيط التلقائي - إعادة توسيط الموقع الحالي بعد مدة معينه + إعادة توسيط الموقع الحالي بعد مدة معينه. مركز صناعة السيارات الوحيد التوسيط التلقائي لعرض الخريطة فقط أثناء الملاحة. - تم توسيط موقعك تلقائياً + تم توسيط موقعك تلقائياً. خيارات محددةناقلات العارض غطاء/بطانة النت كمصدر للخريطة @@ -646,7 +656,7 @@ لا يمكن اعادة تسمية الملف. يوجد ملف بهذا الاسم. GPX طريق - وجد عدة تصنيفات POI توافق الاستعلام: + وجد عدة تصنيفات POI توافق الاستعلام. البيانات المحلية لبحث POI غير موجودة. البحث بالاسم ملف بيانات POI \'%1$s\' لا لزوم له ويمكن حذفه. @@ -658,21 +668,21 @@ يبحث عن الموقع… موقعي ( تم تحديده ) عنوان… - المفضلة + المفضلة… غير محدد مركز الخريطة الحالي المنطلق: بحث بالقرب من هنا حفظ النقاط كمسار تم حفظ المسار بنجاح ك \'%1$s\'. - اسم الملف + اسم الملف: يوجد ملف بنفس الاسم موجود مسبقا. حفظ رفع ملفات GPX إلى مجتمع OSM. ستستخدم لتحسين الخرائط. - تم رفع %1$d من %2$d عنصر - "رفع " + تم رفع %1$d من %2$d عنصر. + رفع عرض المزيد من تفاصيل الخريطة - عرض بعض تفاصيل خريطة التوجيه (الطرق …الخ) عند تقريبها أكثر + عرض بعض تفاصيل خريطة التوجيه (الطرق …الخ) عند تقريبها أكثر. تم حذف النقطة المفضلة بنجاح. سيتم حذف %1$d نقطة و %2$d مجموعة. هل أنت متأكد؟ المنزل @@ -687,11 +697,11 @@ \n \nاضغط مطولا لعرض الخيارات"  الإصدار المحلي - تم تعطيل %1$d من %2$d خريطة - تم حذف %1$d من %2$d عنصر - تم تفعيل %1$d من %2$d خريطة - لا يوجد خرائط لـ%1$s - إدارة ملفات الخرائط + تم تعطيل %1$d من %2$d خريطة. + تم حذف %1$d من %2$d عنصر. + تم تفعيل %1$d من %2$d خريطة. + لا يوجد خرائط ل %1$s + إدارة ملفات الخرائط. تفعيل تعطيل تحميل @@ -705,61 +715,61 @@ بيانات POI تحويل النص إلى كلام - بحث جديد - حدد حجم النص للاسماء على الخريطة + حدد حجم النص للاسماء على الخريطة: حجم خط الخريطة تقديم معلومات التصحيح - عرض أداء معلومات التصحيح (غير مستحسن) + عرض أداء معلومات التصحيح (غير مستحسن). يثبت البيانات الجديدة… خدمة الملاحة على الانترنت محدّدة ولكن لا اتصال متاح بالإنترنت. لغة غير مدعومة - اللغة المحددة غير مدعومة من قبل محرك أندرويد لتحويل النص إلى كلام (TTS). هل تريد البحث عن محركات أخرى في السوق؟ إذا لم يكن، ستُستخدم اللغة السابقة في المحرك. + اللغة المحددة غير مدعومة من قبل محرك أندرويد لتحويل النص إلى كلام (TTS). ستُستخدم اللغة السابقة في المحرك ، هل تريد البحث عن محركات أخرى في السوق؟ البيانات ناقصة لا توجد بيانات مُثبّتة للغة المحددة. هل تريد أن تذهب إلى السوق لتثبيتها؟ عكس المسار استخدم الوجهة الحالية يمر على طول المسار باكمله - فعل الخريطة المحملة من: الضبط ثم مصدر الخريطة + فعل الخريطة المحملة من: الضبط ثم مصدر الخريطة. مصدر التوجيه الصوتي - اختيار قناة لتشغيل التوجيه الصوتي + اختيار قناة لتشغيل التوجيه الصوتي. صوت المكالمة الهاتفية ( كما يحاول قطع ستريو بلوتوث السيارة ) صوت الاشعارات صوت الوسائط تعذر تحميل طبقة الخريطة %1$s، الرجاء إعادة تثبيتها. - تعديل الشفافية + تعديل الشفافية. شفافية الخريطة - تعديل الشفافية + ضبط شفافية الخريطة الأساسية. شفافية الخريطة - الخريطة السفلية + الخريطة السفلية… الخريطة السفلية - اختيار الخريطة الأساسية التي تقوم عليه الخريطة. - الخريطة العلوية + اختيار الخريطة الأساسية التي تقوم عليه الخريطة + الخريطة العلوية… بدون الخريطة العلوية اختيار خريطة التراكب يتم الاحتفاظ بكافة العلامات الاخري سيمارك متغير POI - الخريطة مثبتة بالفعل - حدد أحد الخرائط للتثبيت أو التحديث - لا يوجد اتصال بالإنترنت - المزيد.. - مستوى التقريب الأدنى لإستخدام خرائط التوجيه + الخريطة مثبتة بالفعل. + حدد أحد الخرائط للتثبيت أو التحديث. + لا يوجد اتصال بالإنترنت. + المزيد… + مستوى التقريب الأدنى لاستخدام خرائط التوجيه. المستوى الأدنى لتقريب خريطة التوجيه كان معلومات حول عقدة لا تحميل وقعت I / O خطأ أثناء ممارسة العمل {0}. - حدث خطا اثناء البحث + حدث خطا أثناء البحث. البحث عن موقع جغرافي النظام - أعد تشغيل التطبيق بعد التغيير + أعد تشغيل التطبيق بعد التغيير. لغة التطبيق ناقص التالي السابق - اختيار الوحدات: كم، ميل، ميل بحري.. إلخ + اختيار الوحدات: كم، ميل، ميل بحري.. إلخ. وحدات الطول ميل ، قدم ميل ، ياردة - كم ، م + كم ، متر ياردة قدم ميل ساعة @@ -791,12 +801,12 @@ رياضة رزق سياحة - يفهرس العنوان.. - يفهرس الخريطة.. - يفهرس POI.. - جاري فهرسة وسائل النقل.. + يفهرس العنوان… + يفهرس الخريطة… + يفهرس POI… + جاري فهرسة وسائل النقل… حدث خطا - كم + كلم كم/س م انتقدت خريطة تنسيق البيانات \'\' {0} \'\' غير معتمد @@ -830,8 +840,8 @@ أميركا الشمالية - كندا أوروبا - إيطاليا جاري نسخ ملفات OsmAnd… - تفضيلات الملاحة : - إقطع تشغيل الموسيقى عند ورود إعلان ما + تفضيلات الملاحة + قطع تشغيل الموسيقى عند ورود إعلان ما. إيقاف الموسيقى جاري التحميل %1$s … " @@ -840,7 +850,7 @@ وردي بني الموقع في المنتصف - إعدادات إقليمية : + إعدادات إقليمية الكرواتية البرتغالية (البرازيل) اﻷفريكانية @@ -867,7 +877,7 @@ تفضيلات الطريق معلومات الطريق تجنب الطرق ذات الرسوم - إجتناب الطرق التي يجب دفع رسوم للمرور فيها + تجنب الطرق برسوم تجنب الطرق غير المعبّدة اجتناب الطرق الترابية والوعرة تجنب العبّارات @@ -892,7 +902,7 @@ مجلد البيانات نسخ تصفية حسب الاسم - " ابحث هنا" + ابحث هنا مفتوح الآن مساعد تخطيط OSM معلومات A-GPS @@ -900,7 +910,7 @@ تعديل/حذف أماكن بحث - عرض الوصف + عرض الوصف. رسالة إدارة الخرائط لعرض إشارات وقواعد المرور بشكل صحيح، من فضلك اختر منطقة القيادة: @@ -913,20 +923,20 @@ المنزل آخر تحديث لبيانات A-GPS : \n %1$s - OsmAnd يوفر تصفح خرائط عالمي بدون اتصال، وكذلك ملاحة عالمية بدون اتصال! + أوسماند يوفر تصفح خرائط عالمي بدون اتصال، وكذلك ملاحة عالمية بدون اتصال. أهلا الطريق الحالي اختر للحذف هل ترغب في حذف السجلات؟ - " ابدأ" + ابدأ تأخر - الباقي + يسار تعديلاتك زيارة بعد زيارة قبل محاكاة تخيلية "N %1$s E %2$s" - الأسئلة الشائعة، التغييرات الحديثة، وأخرى + الأسئلة الشائعة، التغييرات الحديثة، وأخرى. إعدادات الملاحة إعدادات عامة @@ -951,28 +961,28 @@ تصدير أكثر… تحديث - جار التحميل.. + جار التحميل… تم التحميل حدث خطأ غير متوقع الإجراء {0} إغلاق - " عرض" + عرض عرض الكل مفضلة المفضلة عنوان موقعي - الإحداثيات + المفضلة المسارات إخفاء ضبط الخريطة - " مصدر الخريطة" + مصدر الخريطة… مصدر الخريطة - " عرض أسماء المفضلة" - المسارات المسجلة + عرض أسماء المفضلة + المسارات المسجلة… لغة الخريطة تفاصيل - الساعة + الوقت الحالي الاتجاه حسب اتجاه الحركة الشمال في الأعلى @@ -986,11 +996,11 @@ صوت المسار الجاري تسجيله تسجيل المسار - اختر الفاصل الزمني لتسجيل المسار العام (مفعل عن طريق أداة تسجيل GPX على الخريطة) + اختر الفاصل الزمني لتسجيل المسار العام (مفعل عن طريق أداة تسجيل GPX على الخريطة). اختر الفاصل الزمني لتسجيل المسار أثناء الملاحة صوت مسج التوجيه - إستخدام الموقع + استخدام الموقع… مفضلة نقاط مفضلة مجاورة إحفظ كمجموعة مفضلة @@ -1009,7 +1019,7 @@ حذف المفضلة إزالة النقطة المفضلة \'%s\' ؟ تم بنجاح حذف النقطة المفضلة {0}. - س + h د فيديو صورة @@ -1022,7 +1032,7 @@ شارك ملاحظة "الموقع : N %1$s E %2$s" ملاحظات - خريطة نت + خريطة متصلة بالإنترنت الطرق فقط ذاكرة الجهاز تعديل مجموعة @@ -1030,8 +1040,8 @@ حالة GPS إنارة الشوارع البروكسي - إعداد اتصال إنترنت بالبروكسي - الخصوصية : + إعداد اتصال إنترنت بالبروكسي. + الخصوصية النقاط بدء الملاحة على طول المسار؟ يمكنك تشغيل مسار بديل بتحديد طرق متجنبة @@ -1043,7 +1053,7 @@ طرق بتباين عالي عبور خط السكة الحديدية أطلس الطرق الأمريكية - لا تستخدم قواعد توجيه الإصدار v1.9 + لا تستخدم قواعد توجيه الإصدار v1.9. هل تريد تحميل الخرائط غير المتصلة بالنت؟ قمت بتحميل %1$s من الخرائط نزل خريطة جديدة @@ -1056,26 +1066,26 @@ عملية التحميل غير ممكنة، رجاءا تحقق من اتصالك بالإنترنت. جميع الملفات محدّثة استخدام OpenGL للتقديم - "استخدام أداء OpenGL مسرع (قد لا تعمل على بعض الأجهزة)" - يوجد تحديثات لـ %1$s من الخرائط + استخدام أداء أوبن جي مسرع (قد لا تعمل على بعض الأجهزة). + يوجد تحديثات ل %1$s من الخرائط البحث عن إحداثيات "%1$s يحتاج هذا الإذن لإطفاء الشاشة لتوفير الطاقة." تشغيل الشاشة - تشغيل شاشة الجهاز إذا كانت مغلقة عند الاقتراب من منعطف - تجنب الطرق + تشغيل شاشة الجهاز إذا كانت مغلقة عند الاقتراب من منعطف. + تجنب الطرق… طرق السكك الحديدية خطوط الترام طرق وسائل المواصلات سمات أخرى للخريطة - أخرى + العناصر المتبقية شريط المعلومات - العدادات على اليمين : - العدادات على اليسار : + العدادات على اليمين + العدادات على اليسار ضمن مستخدم مجهول - سجل الدخول بـ %1$s + سجل الدخول ب %1$s حد السرعة تم تعديل اسم النقطة المفضلة إلى %1$s لتسهيل حفظ النص مع الوجوه التعبيرية بشكل صحيح إلى ملف. طباعة الطريق @@ -1089,16 +1099,16 @@ الفاصل الزمني لإيقاظ GPS تفعيل وضع GPS في الخلفية تسجيل المسار في ملف GPX - حفظ المسار الحالي إلى الذاكرة الآن + حفظ المسار الحالي إلى الذاكرة الآن. تسجيل المسار أثناء الملاحة - سيتم حفظ المسار إلى مجلد المسارات أثناء الملاحة + سيتم حفظ المسار إلى مجلد المسارات أثناء الملاحة. الفاصل الزمني للتسجيل "الفاصل الزمني للتسجيل أثناء الملاحة" - تحديد التوجيه الصوتي للتنقل + تحديد التوجيه الصوتي للتنقل. التوجيه الصوتي تمكين بروكسي HTTP - تكوين بروكسي HTTP لكافة طلبات شبكة الاتصال - س + تكوين بروكسي HTTP لكافة طلبات شبكة الاتصال. + h المدة المسافة الجولات @@ -1117,7 +1127,7 @@ الأسماء المحلية السواحلية العبرية - إلى الأمام + للأمام لوحة التحكم إرسال التتبع لخدمة ويب محددة إذا تم تمكين تسجيل GPX. التتبع المباشر (GPX مطلوب) @@ -1132,30 +1142,30 @@ عرض جودة الطريق لم يتم العثور على تحميلات، الرجاء التحقق من ربطك بالإنترنت. لم يتم تحديد ملفات GPX. من أجل تحديد اضغط وانتظر على المسار المتاح. - اختر للعرض + اختيار المسار فاصل التقسيم ترتيب حسب المسافة ترتيب حسب الاسم - "عرض أزرار التقريب أثناء الملاحة" + عرض أزرار التقريب أثناء الملاحة. حدد الوجهات إحداثية أرقام المنازل غير مسموح استخدام تحذيرات كاميرا السرعة بالقانون في العديد من البلدان (ألمانيا وفرنسا، وإيطاليا، وغيرها). أوسماند لا تتحمل أي مسؤولية إذا كنت تنتهك القانون. الرجاء انقر فوق \"نعم\" فقط إذا كنت مؤهلاً استخدام هذه الميزة. تم إضافة تعديلات OSM إلى التغييرات المحلية ستقوم برفع %1$d تعديل إلى الموقع. استمرار؟ - تحديد وقت الانتظار للبقاء في شاشة تخطيط الطريق + تحديد وقت الانتظار للبقاء في شاشة تخطيط الطريق. ابدأ الملاحة دوران بدوران بعد… إنشاء إجراء تعديل إجراء حذف إجراء التعديلات - مدة الوقوف محدودة بـ + وقت وقوف السيارات يقتصر على تدلي قائمة منبسطة تعديل OSM - "المتوفر : %1$s من " + فارغ %1$s مكان للوقوف - نزل الإصدارات الليلية + نزل الإصدارات الليلية. إصدرات ممرات الراجلين ممرات الراجلين @@ -1163,10 +1173,10 @@ ممرات الراجلين تشريق لا يوجد منفذ للتجاوز - سكك القطارات والترام + سكك القطارات طرق الحافلات الكهربائية طرق الحافلات - سكك مترو الأنفاق + سكك قطار الأنفاق شارك طرق التاكسي حدد حد السرعة المسموح به لتلقي تنبيه صوتي ما إذا تجاوزته. مراقبة الحدود @@ -1183,20 +1193,20 @@ عرض سطح الطريق عرض الطرق الدائرية ابدأ التوجيه دروان بدوران تلقائياً - "مسارات فرعية: %1$s " - "نقاط الطريق: %1$s " - "المسافة : %1$s (%2$s نقاط) " - "وقت البداية: %1$tF, %1$tT " - "وقت الانتهاء: %1$tF, %1$tT " - "متوسط السرعة: %1$s " - "السرعة القصوى: %1$s " + مسارات فرعية: %1$s + نقاط الطريق: %1$s + المسافة : %1$s (%2$s نقاط) + وقت البداية: %1$tF, %1$tT + وقت الانتهاء: %1$tF, %1$tT + متوسط السرعة: %1$s + السرعة القصوى: %1$s متوسط الارتفاع عن سطح البحر: %1$s مدى الارتفاع: %1$s "الفترة الزمنية: %1$s" النزول/الصعود: %1$s الوقت المستغرق في الحركة: %1$s قسم - " %1$s نقاط" + %1$s نقاط نقطة %1$s %1$s \nنقاط الطريق %2$s @@ -1209,8 +1219,8 @@ أيام اتصال حساب الطريق بين النقاط - تفضيلات الصوت : - إعدادات أخرى : + تفضيلات الصوت + إعدادات أخرى عناوين على مستوى البلاد تصحيح الارتفاعات للعالم دفع البيتكوين على مستوى العالم @@ -1227,7 +1237,7 @@ احسب طريق OsmAnd لأول وآخر قسمين في الطريق استخدام المسار المعروض للملاحة؟ إضافتها كوجهة لاحقاً - اختر GPX + اختر GPX… حدد الوجهة تفضيل طرق الدراجات النارية تفضيل طرق الدراجات النارية @@ -1238,8 +1248,8 @@ نسخ ملفات OsmAnd إلى المسار الجديد (%s)… احسب طريق OsmAnd بدون اتصال شاحنة - تفضيلات الطريق : - حدد معدل الكلام لتحويل النص إلى كلام + تفضيلات الطريق + حدد معدل الكلام لتحويل النص إلى كلام. معدل الكلام فشل الحساب السريع للطريق (%s) تم الرجوع إلى الحساب البطيء. تعطيل الطرق المعقدة @@ -1284,7 +1294,7 @@ إخفاء التصفية تشغيل في الخلفية مزود تحديد المواقع - اختر مزود تحديد المواقع لاستخدامه في الخلفية + اختر مزود تحديد المواقع لاستخدامه في الخلفية: ثانية د GPS @@ -1309,72 +1319,72 @@ حدد أقصى تقريب للتحميل المسبق لا يمكن تحميل هذه الخريطة اكتب للتصفية - المداخلات الصوتية + المطالبات الصوتية لا يوجد ملفات GPX في مجلد tracks - خطأ في قراءة بيانات GPX + خطأ في قراءة بيانات GPX. الخريطة المحملة - حسب: الشمال، الإتجاه، البوصلة. + محاذاة الخريطة: تفاصيل الطريق حفظ البيانات كملف GPX أو استيراد نقاط الطريق إلى المفضلة ؟ تم مشاركة المفضلة بواسطة OsmAnd - خطأ أثناء تحميل GPX + خطأ أثناء تحميل GPX. إرسال التقرير لا توجد أي بيانات بدون اتصال للمناطق والأقاليم على الذاكرة. قم بتحميل المناطق من الإنترنت. أي - حدد الفاصل الزمني للإيقاظ لخدمة الخلفية - تشغيل OsmAnd في الخلفية بحيث يتتبع موقعك أثناء إغلاق الشاشة - يجب تشغيل الموقع + حدد الفاصل الزمني للإيقاظ لخدمة الخلفية: + تشغيل OsmAnd في الخلفية بحيث يتتبع موقعك أثناء إغلاق الشاشة. + يجب تشغيل الموقع. تحميل المناطق إنهاء البحث - لا شيء موجود + لا يوجد نتائج جاري البحث… بحث على الإنترنت بحث بدون اتصال اختر خدمة الملاحة عبر أو بدون ربط بالإنترنت. لا يمكن الوصول لمجلد البيانات على الذاكرة! حدد الوجهة أولاً - جاري تحميل قائمة المناطق المتاحة.. + جاري تحميل قائمة المناطق المتاحة… لم يتم تحميل قائمة المناطق من osmand.net. - خطأ أثناء حفظ GPX - " " - حدث خطأ أثناء حساب الطريق - خطأ: الطريق المحسوب فارغ + خطأ أثناء حفظ GPX. + لا يمكن حساب الطريق. + حدث خطأ أثناء حساب الطريق. + خطأ: الطريق المحسوب فارغ. المسافة و(الزمن) - تم الوصول + تم الوصول. عُد إلى خريطة OsmAnd - تحميل البيانات + تحميل البيانات… قراءة البيانات المحلية… تم الإنتهاء - استخدم الإنترنت لحساب الطريق + استخدم الإنترنت لحساب الطريق. استخدم الملاحة على الإنترنت - اختر بين الأسماء المجلية أو الإنجليزية + اختر بين الأسماء المجلية أو الإنجليزية. بيانات - تمكن عرض الخريطة ثلاثي الأبعاد + تمكن عرض الخريطة ثلاثي الأبعاد. عرض الخريطة ثلاثي الأبعاد هدف إعادة تحميل التجانبية/المربع تحديث الخريطة إعدادات إضافية مصدر الخريطة التجانبية/المربعية - استخدام الإنترنت لتحميل مربعات الخريطة. + استخدام الإنترنت لتحميل مربعات الخريطة تطبيق ملاحة اختر المنطقة من القائمة تم إضافة الملاحظة بنجاح عند التقريب {0} قم بتحميل {1} التجانبيات/المربعات ({2} MB) - عدم تمدد (وطمس) تجانبيات/مربعات الخريطة على شاشات العرض عالية الكثافة - اختر مستوى التقريب الأقصى لتحميل تجانبيات/مربعات الخريطة من الإنترنت + عدم تمدد (وطمس) تجانبيات/مربعات الخريطة على شاشات العرض عالية الكثافة. + اختر مستوى التقريب الأقصى لتحميل تجانبيات/مربعات الخريطة من الإنترنت. اختر مصدر تجانبيات/مربعات الخريطة على الإنترنت أو المخزنة مؤقتاً فضلًا أخبرنا ما الذي تريد تعديله في هذا التّطبيق. مجلّد تخزين البيانات المحدّد حالياً للقراءة فقط. نُقل مجلّد التّخزين مؤقّتًا إلى الذّاكرة الدّاخليّة. فضلًا اختر دليل تخزين صحيح. ذاكرة الهاتف التبرعات الاسم العمومي - لا تعرض اسمي في التّقارير + لا تعرض اسمي في التقارير نشط خامل الرجاء إدخل عنوان بريد إلكتروني صالح أدخل اسم عمومي - نشكرك على اشتراكك بالتّحديثات المباشرة! + نشكرك على اشتراكك بالتّحديثات المباشرة. إعدادات الاشتراك عدادات الرمز البريدي @@ -1382,7 +1392,7 @@ بحث مفتوح 7/24 بطاقة الذاكرة - نمط الإحداثيات الجغرافية + نمط الإحداثيات الجغرافية. حافلة قطار المسار الحالي @@ -1392,19 +1402,19 @@ اتجاه صدى الصوت الملاحة عبر OSM Live لم يتم تعيين الوجهة - "منع إعادة الحساب التلقائي للمسار عند السير في اتجاه خاطئ" + منع إعادة الحساب التلقائي للمسار عند السير في اتجاه خاطئ. اللون الافتراضي اختر فئة أدخل الاسم أدخل فئة - أدخل وصف + أدخل وصف. قائمة مطوية قائمة موسعة قائمة فارغة قائمة شجرية غير مثبت وسع - الفرز + فرز وضع الخريطة %s مسار محدد رقيقة @@ -1420,13 +1430,13 @@ إعادة حساب المسار عدد المستلمين ترتيب المحررين OSM - إشتراك OSM Live - إشترك الآن + اشتراك OSM Live + اشترك الآن دعم المنطقة تكلفة الشهر الدفع الشهري - سيتم إرسال جزء من التبرع إلى مستخدمي OSM الذين يقومون بإرسال التغييرات إلى الخريطة في تلك المنطقة - يرجى شراء اشتراك OSM Live أولاً + سيتم إرسال جزء من التبرع إلى مستخدمي OSM الذين يقومون بإرسال التغييرات إلى الخريطة في تلك المنطقة. + يرجى شراء اشتراك OSM Live أولا يُتيحُ لك هذا الاشتراك الحصول على التحديثات كُل ساعة لجميع الخرائط حول العالم. جزء من الدخل سيعود إلى مجتمع OSM ويُدفَع لكل مساهمة. إن كنت تحب OsmAnd و OSM وترغب في الدّعم، هذه هي الطريقة المُثلى للقيام بذلك. علامات أخرى رفع كمستخدم مجهول @@ -1434,7 +1444,7 @@ شريط الأدوات حدد علامة على الخريطة ترتيب عكسي - تفعيل ميزة العلامات + تفعيل ميزة العلامات. الأسترية البيلاروسية (لاتينية) الإنجليزية ( المملكة المتحدة ) @@ -1447,12 +1457,12 @@ ميل بحري ليلي ارتفاع المركبة - اختيار وحدة للسرعة + اختيار وحدة للسرعة. وحدات السرعة - الملحقات : + الملحقات الملحقات عرض شريط ”نسخة مجانية“ - حتى و إن كنت قد دفعت النسخة ، يمكنك استظهار شعار ”نسخة مجانية“ + حتى و إن كنت قد دفعت النسخة ، يمكنك استظهار شعار ”نسخة مجانية“. أحمر أحمر فاتح أزرق فاتح @@ -1461,8 +1471,8 @@ أزرق فاتح بنفسجي فاتح برتقالي فاتح - لون الجي بي إكس GPX - لون الجي بي إكس GPX + لون جي بي إكس + لون جي بي إكس منطقة حي يحتوي اسم الملف على حرف غير قانوني @@ -1470,21 +1480,21 @@ خرائط العالم حرك الخريطة لتغيير مكان العلامة - اشر صوتيا عن اتجاه نقطة الوصول - اشر عن اتجاه نقطة الهدف بالاهتزاز - تمكين الملاحة لتعديلات OSM Live (تجريبي) + إشارة صوتية عن اتجاه نقطة الوصول. + اشر عن اتجاه نقطة الهدف بالاهتزاز. + تمكين الملاحة لتعديلات OSM Live (تجريبي). لا تغير المسار عندما تكون خارج الطريق - منع إعادة الحساب التلقائي للمسار عندما تبتعد قليلا عن الطريق الصحيح + منع إعادة الحساب التلقائي للمسار عندما تبتعد قليلا عن الطريق الصحيح. لا تغير المسار باتجاه خاطئ التنبيه الآلي الذكي - الإشعار فقط عند تغير الوجهة نحو نقطة الهدف + الإشعار فقط عند تغير الوجهة نحو نقطة الهدف. مهلة التنبيه الآلي - اقل مهلة بين الاخطارات + أقل مهلة بين الاخطارات. الخريطة مرتبطة بالموقع عريض المستخدم المجهول لا يمكنه : - إنشاء مجموعة; - مزامنة المجموعات والأجهزة مع السيرفر; - إدارة المجموعات والأجهزة من خلال لوحة تحكم خاصة على الموقع. تطبيق الملاحة أوسماند OSMAnd - خطأ أثناء تحميل البيانات من الخادم + خطأ أثناء تحميل البيانات من الخادم. تحديث البيانات المحلية عبر الإنترنت ؟ الشارع : {0}، {1} تقاطع : {0} x {1} في {2} @@ -1494,15 +1504,15 @@ البحث على الإنترنت : رقم منزل، شارع، أو مدينة تحميل {0} - {1} ؟ ساعات العمل - إغلاق التغييرات - تحميل الشوارع/المباني - تحميل الرموز البريدية - تحميل الشوارع - تحميل المدن - الإحداثيات غير صحيحة ! - تحديد لغة، تحميل/تحديث البيانات + إغلاق التغييرات… + تحميل الشوارع/المباني… + تحميل الرموز البريدية… + تحميل الشوارع… + تحميل المدن… + الإحداثيات غير صحيحة + تحديد لغة، تحميل/تحديث البيانات. المرافق الأقرب - إحذف + حذف أعد فتح هل أعجبك أوسماند OSMAnd ؟ نحن نهتم كثيرا برأيك ومن المهم بالنسبة لنا أن نسمع لكم مرة أخرى. @@ -1518,7 +1528,7 @@ إضافة ساعات العمل أيام العمل الأماكن الأخيرة - الإحداثيات + المفضلة عرض GPX عدد الأسطر هل أنت متأكد ؟ @@ -1528,15 +1538,15 @@ لاحقاً النسخة الكاملة التحميلات - عرض التحميلات المجانية المستخدمة - اختر موقع حفظ مجلد البيانات + عرض التحميلات المجانية المستخدمة. + اختر موقع حفظ مجلد البيانات. أدخل اسم البلد الإصدار الجديد الخطوات الأولى مع أوسماند OSMAnd ميزات ساعدنا في تحسين OsmAnd أول استخدام - كيفية تحميل الخرائط وتعيين الإعدادات الأساسية + كيفية تحميل الخرائط وتعيين الإعدادات الأساسية. التخطيط لرحلة الأسئلة المتداولة الأسئلة المتداولة @@ -1558,7 +1568,7 @@ كل يوم كل أسبوع صباحاً - حدد الشهر والبلد + حدد الشهر والبلد: عدد المساهمين عدد التعديلات البحث عن موقف سيارات @@ -1584,10 +1594,10 @@ حرك للاعلى حرك للاسفل تسجيل الدخول - نحن بحاجة اليه لكي نوفر لك معلومات حول المساهمات + نحن بحاجة اليه لكي نوفر لك معلومات حول المساهمات. اختر علامة موضعية عرض شريط الشفافية - "المساحة غير كافية! المساحة المطلوبة {3} م.ب مؤقتاً {1} م.ب دائمة المتوفر {2} م.ب " + المساحة غير كافية! المساحة المطلوبة {3} م.ب مؤقتاً {1} م.ب دائمة المتوفر {2} م.ب نقطة الانطلاق الصوت حذف @@ -1597,25 +1607,24 @@ الزمن : انعطف يميناً انعطف يساراً - "هذه الأداة تثري خريطة التطبيق والملاحة لتوفير خرائط بحرية للزوارق والمراكب الشراعية وأنواع أخرى من الرياضات المائية. -\n -\nخريطة خاصة إضافية للتطبيق ستقدم كل علامات الملاحة البحرية سواء داخلية أو شاطئية وكذلك جدول للرموز. وصف كل علامة ملاحة يوفر التفاصيل اللازمة للتعرف عليها ومعانيها (الفئة، الشكل، اللون، التسلسل، المرجع...إلخ.). -\n -\nللعودة إلى واحدة من أنماط الخريطة التقليدية، ببساطة إما عطل هذه الأداة مرة أخرى أو غير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة. -\n " + هذه الأداة تثري خريطة التطبيق والملاحة لتوفير خرائط بحرية للزوارق والمراكب الشراعية وأنواع أخرى من الرياضات المائية. +\n +\nخريطة خاصة إضافية للتطبيق ستقدم كل علامات الملاحة البحرية سواء داخلية أو شاطئية وكذلك جدول للرموز. وصف كل علامة ملاحة يوفر التفاصيل اللازمة للتعرف عليها ومعانيها (الفئة، الشكل، اللون، التسلسل، المرجع...إلخ.). +\n +\nللعودة إلى واحدة من أنماط الخريطة التقليدية، ببساطة إما عطل هذه الأداة مرة أخرى أو غير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة. البحث قرب مركز الخريطة الحالية - " نشطة" - العلامات + نشطة + علامات الخريطة منع تخطي الحدود - حدد الطرق التي تريد تجنبها أثناء التنقل + حدد الطرق التي تريد تجنبها أثناء التنقل. الفئات بالقرب من انعطف قليلا إلى اليمين انعطف قليلا إلى اليسار - موقع + لم يتم تحديد عنوان الموقع مشاركة الموقع - ملف GPX مرفوق بملاحظات عن المواقع و الأماكن + ملف GPX مرفق بملاحظات عن المواقع و الأماكن. المواقع إن خدمة تحديد الموقع لا تعمل. هل تريد تشغيلها ؟ حدث الآن @@ -1626,7 +1635,7 @@ العلامة الأولى للخريطة العلامة الثانية للخريطة إضافة إلى علامات الخريطة - حذف كافة العلامات النشطة على الخريطة ؟ + حذف كافة العلامات النشطة على الخريطة؟ علامة على الخريطة عرض المضلعات الحالة @@ -1638,17 +1647,17 @@ الطريق محظورة تحديد إعكس نقطة الانطلاق و الوصول - أيقونات الـ POI + أيقونات POI النوع غير محدد قسم مسجل إستعمل مقسم التسجيلات طول المقطع حجم التخزين - مقدار المساحة التي يمكن أن تحتلها كافة القصاصات المسجلة + مقدار المساحة التي يمكن أن تحتلها كافة القصاصات المسجلة. إختر التوجيه الصوتي - إختر أو قم بتحميل التوجيه الصوتي الخاص بلغتك - لا يسمح للتطبيق الوصول إلى طريق البيانات. + اختر أو قم بتحميل التوجيه الصوتي الخاص بلغتك. + منح الوصول إلى بيانات الموقع. طرق خاصة للخيول إخفاء أقل جودة @@ -1673,14 +1682,14 @@ عرض الخريطة تم تحميل الخريطة محاكاة طريقة تشغيل التطبيق للمرة الأولى - تطبيق آخر + تطبيق آخر: إرسال اسم المفضلة إضافة فئة جديدة المناطق - إختر مفضلة + اختر الفئة كم/س - ميل/س + ميل ساعة م/ث دقيقة/كم دقيقة/ميل @@ -1719,8 +1728,8 @@ نمط الطريق وكيل البروكسي منفذ وكيل البروكسي - رقم منفذ البروكسي (مثلا 8118) - تحديد نوعية مخرج الفيديو + رقم منفذ البروكسي (مثلا 8118). + تحديد نوعية مخرج الفيديو. مفضلة جديدة إلغاء كلي جودة مخرج الفيديو @@ -1728,10 +1737,10 @@ ويكيبيديا لم يتم تحديد صوت للتوجيه الطريق الأسرع - عرض موقع الويب لـ POI - عرض الهاتف لـ POI + عرض موقع الويب ل POI + عرض الهاتف لPOI عرض عالي الجودة - تعديل الـ POI + تعديل POI تفكيك ظغط الملف … جاري البحث عن الإشارة … الدخول عبر الخريطة @@ -1739,32 +1748,32 @@ التأثير النسبي تحميل {0} ملف؟ مساحة التخزين المستخدمة هي {3} مب مؤقتة، {1} مب دائمة. (المساحة المتوفرة هي {2} مب.) مسافة المسلك - خطأ تحيين القائمة المحلية للPOI + خطأ تحيين القائمة المحلية لPOI. تحيين الPOI يمكنك رفع ملاحظاتك إلى OSM كمستخدم مجهول أو استخدام حسابك على openstreetmap.org . إضافة جميع النقاط إلى علامات الخريطة؟ مسح السجلات ؟ - اظهر طرق MTB + إظهار مسارات الدراجة الجبلية يمكنك ازالة التحديثات المحملة والرجوع الى الاصدار الاصلي للخريطة إضافة فترة زمنية تمت ازالة العنصر تمت ازالة العناصر - اعد كتابة اللقطات عند تجاوز المساحة المتستخدمة لمساحة التخزين - طول اللقطات المسجلة لن يتجاوز المجال الزمني المحدد - لايسمح للتطبيق الوصول إلى الكاميرا. - ليس للتطبيق إذن للوصول إلى الميكروفون. + اعد كتابة اللقطات عند تجاوز المساحة المتستخدمة لمساحة التخزين. + طول اللقطات المسجلة لن يتجاوز المجال الزمني المحدد. + منح الوصول إلى الكاميرا. + منح إذن الوصول إلى الميكروفون. صيغة اخراج الصوت - حدد صيغة الصوت المخرج - فتح التغييرات - تحميل الـ POI + حدد صيغة إخراج الصوت. + فتح التغييرات… + تحميل POI… فشل الترخيص - عرض الـ POI + عرض POI إختار الPOI إختيار تدريجي للشارع إختيار تدريجي للبناية إختار تقاطع الطرق إضافة للمفضلة - تعديل الـ POI + تعديل POI مسح{0}(أضف تعليق)؟ إعادة حساب الطريق الذكي فشل الرفع @@ -1775,22 +1784,22 @@ "تم إخفاء البطاقة" أساسي التالي - نوع الـ POI - تحديد نوع الـ POI. + نوع POI + تحديد نوع POI. التحميلات المجانية المستخدمة أخرى - تنصيب الملاحة + تنصيب الملاحة. شاهد الخريطة إستعمل لوحة التحكم إستعمل القائمة معدل تدفق الصوت - حدد معدل تدفق الصوت + حدد معدل تدفق الصوت. إحفظ محليا (دون حاجة لربط بالأنترنت) خريطة العالم العامة مفقودة أو قديمة. قم بتحميلها للحصول على نظرة شاملة. لقد تم تحميل خريطة %1$s. يمكنك الآن إستخدامها. اسم المفضلة المحددة موجود. الرجاء استخدام إسم آخر. - المسار - إيقاف المحاكات التخيلية + تسجيل الرحلة + إيقاف المحاكات التخيلية. الرجاء إعادة تشغيل التطبيق يدوياً لتفعيل التغييرات. الصربية (العليا) تحديث الكل ( %1$s ميغابايت ) @@ -1800,25 +1809,25 @@ يفتح على POI عرض مواقف النقل - عرض مواقف وسائل النقل العام على الخريطة + عرض مواقف وسائل النقل العام على الخريطة. إختر موقف النزول إضافة قاعدة جديدة لا تتوفر بيانات الصوت المحدد تهيئة البيانات الصوتية … ملاحظات OSM - حذف الـ POI + حذف POI البحث عن وسائل النقل العام اظهر %1$s على الخريطة - "بحث حتى %1$s " - " تمت مشاركته عبر OsmAnd" + بحث حتى %1$s + تمت مشاركته عبر OsmAnd المسافة الإجمالية %1$s، مدة السفر %2$d سا و %3$d د. العودة إلى البحث من المستحسن إيقاف عرض المضلعات. سحب القائمة سيفتح لوحة التحكم و ليس القائمة هل تريد حذف العناصر المحددة من السجل؟ توجيه رد فعل الهزاز - يرجى تحديد نوع POI الصحيح أو تخطيه - عند الإيقاف ستبدأ واجهة الخريطة مباشرة + يرجى تحديد نوع POI الصحيح أو تخطيه. + عند الإيقاف ستبدأ واجهة الخريطة مباشرة. OSM POI معدل ملاحظة OSM معلق عليها ملاحظة OSM محذوفة @@ -1826,27 +1835,27 @@ لاظهار خرائط التزلج، يجب تحميل خريطة خاصة محلية حافلة، ترامواي وغيرها إنشاء ملاحظة OSM - حدث استثناء: لم يتم إنشاء الملاحظة - حدث استثناء: لم يتم غلق الملاحظة - حدث استثناء: لم تتم إضافة الملاحظة - ملاحظة + حدث استثناء: لم يتم إنشاء الملاحظة. + حدث استثناء: لم يتم غلق الملاحظة. + لا يمكن إضافة تعليق. + ارتكاب حذف إحداثية GPX ؟ - "تعديل/حذف " + تعديل/حذف ألمانية منخفضة اللغة الفريزية الأشياء المقترحة إنشاء OSM POI بحث عن إحداثيات بحث متقدم عن الإحداثيات - وضع علامة تشير إلى بدء تشغيل التطبيق الأولي، ابقي جميع الإعدادات الأخرى دون تغيير + وضع علامة تشير إلى بدء تشغيل التطبيق الأولي، ابقي جميع الإعدادات الأخرى دون تغيير. خرائط التوجيه (الفكتورية) والإقليمية طبقة التضاريس غير مفعلة الخطوط الكفافية معطلة - بحاجة إلى معلومات أكثر + ميل بحري ميل بحري/س إجراء محاكاة تخيلية باستخدام توجيه نشط أو مسار مسجل. تجنب قطار المدينة - تجنب قطار المدينة + يتجنب استخدام القطارات المكوكية خطر مخطط واضح بييمونتي @@ -1863,50 +1872,50 @@ تلوين وفق الانتماء للشبكة تلوين وفق رمز تنزه OSMC خروج - ستقوم بحذف %1$d ملاحظات. هل أنت واثق؟ + هل أنت متأكد من أنك تريد حذف الملاحظات٪ 1 $ d؟ لعرض الخرائط البحرية، يجب تحميل خريطة خاصة محلياً - تسجيل الموقع العام إلى ملف GPX يمكن تشغيله أو إيقافه باستخدام نافذة تسجيل GPX على الشاشة خريطة - ضبط اسم مضيف البروكسي (مثال 127.0.0.1) - اللغة المفضلة للمسميات على الخريطة (إذا لم تكن متوفرة ستتحول إلى اللغة الإنجليزية أو الأسماء المحلية) + تسجيل الموقع العام إلى ملف GPX يمكن تشغيله أو إيقافه باستخدام نافذة تسجيل GPX على الشاشة خريطة. + ضبط اسم مضيف البروكسي (مثال 127.0.0.1). + اللغة المفضلة للمسميات على الخريطة (إذا لم تكن متوفرة ستتحول إلى اللغة الإنجليزية أو الأسماء المحلية). خشب وشجيرات الهنغارية (الرسمية) تجنب الأدراج تجنب الأدراج تجنب عبور الحدود إلى بلد آخر تحديد الارتفاع الأعلى المسموح به على الطرق. - تعطيل 2-مرحلة التوجيه للملاحة بالسيارة + تعطيل 2-مرحلة التوجيه للملاحة بالسيارة. نادي جبال الألب السويسرية - تقديم المسارات وفقاً لمقياس SAC + تقديم المسارات وفقاً لمقياس SAC. غطاء رمز التنزه - تقديم المسارات وفقاً لآثار OSMC + تقديم المسارات وفقاً لآثار OSMC. انقر فوق أي عنصر لمعرفة المزيد من التفاصيل، اضغط وواصل الضغط للتعطيل أو الحذف. البيانات الحالية على الجهاز (%1$s متاحة): - إعادة إعلان تعليمات الملاحة في فترات منتظمة + إعادة إعلان تعليمات الملاحة في فترات منتظمة. أخرى - " %1$s %2$s عنصر ؟" + %1$s %2$s عنصر ؟ البيانات الجغرافية المؤقتة - هذه الأداة المساعدة تفعل وظيفة تسجيل وحفظ المسارات الخاصة بك عبر الضغط على نافذة GPX على شاشة الخريطة، أو كذلك تسجيل كافة طرق الملاحة الخاص بك تلقائيا إلى ملف GPX. + هذه الأداة المساعدة تفعل وظيفة تسجيل وحفظ المسارات الخاصة بك عبر الضغط على نافذة GPX على شاشة الخريطة، أو كذلك تسجيل كافة طرق الملاحة الخاص بك تلقائيا إلى ملف GPX. \n -\nالمسارات المسجلة يمكن مشاركتها مع أصدقائك أو استخدامها كمساهمات لـ OSM . الرياضيون يمكنهم استخدام المسارات المسجلة لمتابعة تدريباتهم. بعض تحليل المسار الإبتدائية يمكن القيام بها مباشرة في التطبيق، مثل توقيت الدورات، ومتوسط السرعة...الخ، و يمكن أيضا تحليل المسارات باستعمال أدوات تحليل جانبية لاحقا. +\nالمسارات المسجلة يمكن مشاركتها مع أصدقائك أو استخدامها كمساهمات ل OSM . الرياضيون يمكنهم استخدام المسارات المسجلة لمتابعة تدريباتهم. بعض تحليل المسار الإبتدائية يمكن القيام بها مباشرة في التطبيق، مثل توقيت الدورات، ومتوسط السرعة...الخ، و يمكن أيضا تحليل المسارات باستعمال أدوات تحليل جانبية لاحقا. التطبيق ليس لديه إذن لاستخدام بطاقة الأس دي هل تريد حقا حفظ POI بدون تحديد نوعه؟ هناك خيار جديد لتحكم بشكل مرن بالتطبيق عبر لوحة القياس أو القائمة الثابتة. اختيارك يمكن تغييره دائما في إعدادات لوحة القياس. ملاحة OsmAnd دون نت ميزة تجريبية وهي لا تعمل لمسافات تزيد عن 20 كم. خدمة الملاحة حولت مؤقتا إلى CloudMade على الانترنت. "إصدار {0} تثبيت بنجاح ({1})." - جاري تحميل الإصدار.. + جاري تحميل الإصدار… هل تريد تثبيت التطبيق - {0} من {1} {2} مب ؟ فشل في الحصول على قائمة إصدارات التطبيق عملية تحميل إصدارات التطبيق جارية … حدد إصدار التطبيق للتثبيت التوجيهات الصوتية غير متوفرة، يرجى الذهاب إلى \"إعدادات\" ← \"عامة\" ← \"التوجيه الصوتي\" وحدد أو حمل حزمة صوت. - اختيار قاعدة تحويل وضع نهار/ ليل + اختيار قاعدة تحويل وضع نهار/ ليل. تحميل {0} ملف ({1} مب)؟ {0} عنصر محدد - "تفعيل لحساب الطريق الأسرع أو تعطيل لحساب مسار أقل استهلاكا للوقود " + تفعيل لحساب الطريق الأسرع أو تعطيل لحساب مسار أقل استهلاكا للوقود. أداء مستمر - عرض أداء مستمر بدلا من صورة في المرة الواحدة - حدث خطأ أثناء تقديم المساحة المحددة + عرض أداء مستمر بدلا من صورة في المرة الواحدة. + حدث خطأ أثناء تقديم المساحة المحددة. تم تحميل العارض بنجاح - حدث استثناء: لم يتم تحميل العارض + حدث استثناء: لم يتم تحميل العارض. عارض فيكتور اختر عارض المظهر نتائج النقل (لا توجد وجهة): @@ -1915,13 +1924,13 @@ خرائط التوجيه لم تحمل البحث عن وسائل النقل عند التوقف أدخل موضوع البحث لإيجاد POI - شكراً لـ Yandex على معلومات حركة المرور. + شكراً Yandex على معلومات حركة المرور. حركة مرور Yandex - نقاط الإهتمام POI + نقاط الإهتمام POI… بحث عن نقاط الإهتمام - استخدم كرة التعقب لتحريك الخريطة + استخدم كرة التعقب لتحريك الخريطة. استخدم كرة التعقب - %1$s محطة قبل + %1$s محطة توقف قبل مفتاح الخريطة هل حقا تريد تحميل خريطة الطرق فقط، على الرغم من أنه لديك الخريطة (كاملة)؟ يجب تفعيل ملحق الخطوط المحيطية @@ -1931,34 +1940,33 @@ محطات توقف لتجاوز تم تحديث بيانات POI بنجاح ({0} تم تحميلها) لا توجد بيانات POI حالياً متاحة في هذه المنطقة - تحديث الـ POI غير متاح لمستويات الزوم الصغيرة + تحديث POI غير متاح لمستويات الزوم الصغيرة المبنى: {0}، {1}، {2} التكبير الأقصى بالانترنت - البيانات المحلية لـ {0} موجودة مسبقا ({1}). هل تريد تحديثها ({2}) ؟ - إنشاء نقطة - تحويل الأسماء باللغة المحلية/ الإنجليزية - فشل التشغيل الأخير للتطبيق. الرجاء الإبلاغ عن هذه المشكلة وإرفاق ملف السجل: {0} - تحديد إعدادات (Openstreetmap.org (OSM اللازمة لمعالجات OSM - عرض POI على الخريطة (استخدم آخر تصفية مستخدمة) + البيانات المحلية ل {0} موجودة مسبقا ({1}). هل تريد تحديثها ({2}) ؟ + إنشاء نقطة… + تحويل الأسماء باللغة المحلية/ الإنجليزية… + فشل التشغيل الأخير للتطبيق. الرجاء الإبلاغ عن هذه المشكلة وإرفاق ملف السجل: {0}. + تحديد إعدادات (Openstreetmap.org (OSM اللازمة لمعالجات OSM. + عرض POI على الخريطة (استخدم آخر تصفية مستخدمة). أدخل خط العرض وخط الطول في النمط المحدد (د - درجات، د - دقائق، ث - ثواني) DDD.DD DDD MM.MM DDD MM SS.SS لم يتم العثور على النقطة أو أن المكان عبارة عن عدة نقاط وليست مدعومة بعدُ على التطبيق. - "تفعيل هذه الرؤية يغير نمط خريطة OsmAnd إلى \'نمط التجوال\'، هذا النمط يوفر رؤية غنية بالتفاصيل للمسافرين والسائقين المحترفين. -\n -\nتوفر هذه الرؤية في أي تكبير معين للخريطة أكبر قدر ممكن من تفاصيل السفر المتاحة في بيانات الخريطة (خاصة الطرق، المسارات، المعابر وعلامات التوجيه). -\n -\nكما تصور بوضوح جميع أنواع الطرق بترميز لوني، و الذي هو جد مفيد لاسيما عند قيادة المركبات الكبيرة. -\n -\nوتوفر كذلك خيارات تجول كعرض طرق الدراجات الهوائية أو الطرق الجبلية في جبال الالب. -\n -\nليست هناك حاجة لتحميل خريطة خاصة،الرؤية يتم إنشاءها من خلال خرائطنا المحلية. -\n -\nهذه الرؤية يمكن التراجع عنها إما عن طريق تعطيلها هنا، أو تغيير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة. -\n " - تصنيف الخريطة على الإنترنت مع الصور - تعيين الحد الأقصى لوقت الانتظار لكل إصلاح موقع في الخلفية + تفعيل هذه الرؤية يغير نمط خريطة OsmAnd إلى \'نمط التجوال\'، هذا النمط يوفر رؤية غنية بالتفاصيل للمسافرين والسائقين المحترفين. +\n +\nتوفر هذه الرؤية في أي تكبير معين للخريطة أكبر قدر ممكن من تفاصيل السفر المتاحة في بيانات الخريطة (خاصة الطرق، المسارات، المعابر وعلامات التوجيه). +\n +\nكما تصور بوضوح جميع أنواع الطرق بترميز لوني، و الذي هو جد مفيد لاسيما عند قيادة المركبات الكبيرة. +\n +\nوتوفر كذلك خيارات تجول كعرض طرق الدراجات الهوائية أو الطرق الجبلية في جبال الالب. +\n +\nليست هناك حاجة لتحميل خريطة خاصة،الرؤية يتم إنشاءها من خلال خرائطنا المحلية. +\n +\nهذه الرؤية يمكن التراجع عنها إما عن طريق تعطيلها هنا، أو تغيير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة. + string name=\"lat_lon_pattern\">خط العرض: %1$.5f خط الطول: %2$.5f</string + تعيين الحد الأقصى لوقت الانتظار لكل إصلاح موقع في الخلفية. الانتظار الأقصى للإصلاح إصدار غير معتمد من البيانات الصوتية البيانات الصوتية المحددة تالفة @@ -1968,9 +1976,9 @@ انعطف يساراً بشكل حاد قم بإنعطاف-U وواصل بحث بالقرب - نمط ساعات العمل غير متاح التعديل + نمط ساعات العمل غير متاح التعديل. المسار اللاحق للرحلة - حساب الجزء الأول فقط من الطريق للرحلات الطويلة + حساب الجزء الأول فقط من الطريق للرحلات الطويلة. إلغاء خرائط محلية وملاحة إنشاء إحداثية POI @@ -1980,39 +1988,36 @@ يرجى تفعيل أداة المعالم البحرية %1$.1f من %2$.1f مب %.1f مب - "أداة التطبيق هذه تضع بين يديك تفاصيل منحدرات تزلج عالمية، مسارات تزلج عبر كامل البلاد، التلفريك ومصاعد التزلج. الطرقات والمعابر مبينة بألوان حسب الصعوبة، ومصورة بنمط خريطة مميز \'شتوي\' تمثل مناظر الطبيعة بلون مثلج شتوي. -\n " + أداة التطبيق هذه تضع بين يديك تفاصيل منحدرات تزلج عالمية، مسارات تزلج عبر كامل البلاد، التلفريك ومصاعد التزلج. الطرقات والمعابر مبينة بألوان حسب الصعوبة، ومصورة بنمط خريطة مميز \'شتوي\' تمثل مناظر الطبيعة بلون مثلج شتوي. أشياء فوق سطح الأرض تغيير ابدأ طريق أقل استهلاكا للوقود - استخدم طريق أقل استهلاكا للوقود (عادة أقصر) + استخدم طريق أقل استهلاكا للوقود (عادة أقصر). هل تريد استبدال المفضلة %1$s؟ - حذف الملفات المؤقتة + حذف جميع الطبقات هل تريد تحديث كافة الخرائط الآن؟ لا تتحقق من وجود تحديثات الإصدار أو الخصومات المتعلقة بالتطبيق. لا تظهر التحديثات تخط التحميل - "لا يوجد خرائط محملة. حدد الآن خريطة أو قم بتحميلها لاحقاً عبر القائمة ثم %1$s." + لا يوجد خرائط محملة. حدد الآن خريطة أو قم بتحميلها لاحقاً عبر القائمة ثم %1$s. حدد منطقة أخرى جارٍ البحث عن الخرائط… - " دع OsmAnd يحدد موقعك ويقترح عليك خرائط لمنطقتك" + دع أوسماند يحدد موقعك ويقترح عليك خرائط لمنطقتك. لم يتم العثور على الموقع لا يوجد اتصال بالشبكة مطلوب اتصال لتحميل الخرائط. البحث عن الموقع… - " المساحة الخالية " - "الذاكرة المستخدمة لمجلد البيانات (خرائط ومسارات ومفضلة.. إلخ) : -\n -\n%1$s " + المساحة الحرة + الذاكرة المستخدمة لمجلد البيانات (خرائط ومسارات ومفضلة.. إلخ) : %1$s. إعطاء الإذن الإذن بالوصول إلى الموقع - احصل على التوجيهات واكتشف أماكن جديدة دون اتصال. + احصل على التوجيهات واكتشف أماكن جديدة دون اتصال البحث في موقعي - تحصل عليه بـ %1$s + تحصل عليه ب %1$s الحصول على عدد غير محدود من تحميلات الخرائط والتحديثات في الشهر : أسبوعياً، يومياً أو كل ساعة. نسخة كاملة من تطبيق أواسام آند مع تحميل غير محدود وتحديثات شهرية للخرائط . - ميل ، م + ميل ، متر تحميل رسوم الاشتراك ستفرض كل شهر. يمكنك إلغاء اشتراكك متى أردت عبر Google play. التبرع لمجتمع OpenStreetMap @@ -2043,34 +2048,34 @@ POI عيد الميلاد لون الخطوط المحيطية تسجيل السرعة الأدنى - اختر السرعة الأدنى لبذأ تشغيل المسار + مرشح: لا تسجيل نقاط أقل من هذه السرعة. تسجيل كشف الحركة - اختر حد المسافة الأدنى من آخر موقع لنقطة تريد تسجيلها + مرشح: تعيين الحد الأدنى للمسافة من نقطة لتسجيل واحدة جديدة. تسجيل حد الدقة الأدنى - اختر حد دقة التسجيل الأدنى لنقطة تريد تسجيلها + اختر حد دقة التسجيل الأدنى لنقطة تريد تسجيلها. استمرار إيقاف مؤقت المدة المسافة اضغط للتسجيل لا يوجد بيانات - تسجيل المسار - تمكين تسجيل المسار عبر الإشعارات بالضغط على \"اضغط للتسجيل\" . + تشغيل التسجيل السريع + عرض نظام الإشعار للسماح بتسجيل الرحلة. الإشعارات يمكنك أيضا إضافة مسارات إلى المجلد - إضافة مسار + أضف المزيد… المظهر رفع POI حساب المسار ليس لديك مسارات بعد اللون والسمك خذ المخرج %1$d ثم واصل - بحث عن مدينة أو منطقة + المدينة أو المنطقة مقالات ويكيبيديا القريبة إظهار طريقة البحث القديمة إضافة البحث المتعمق في قائمة الدرج. - الطريق السريع مسموح - الطريق السريع مسموح + استخدام الطرق السريعة + السماح للطرق السريعة. بحث موروث الصربية (اللاتينية) الصينية (هونج كونج) @@ -2079,7 +2084,7 @@ عرض الخطوط الكنتورية كثافة الخط المحيطي كثافة الخط المحيطي - عالية + عالي وسطى منخفض إخفاء المياه @@ -2089,14 +2094,14 @@ إضافة العلامة إضافة POI نمط الخريطة - نمط الخريطة: %s + نمط الخرائط تغير ل \"%s\". أخذ ملاحظة صوتية أخذ ملاحظة بالفيديو أخذ ملاحظة بالصورة تشغيل/إيقاف الصوت الصوت معطل الصوت مشغل - إضافة الإحداثية + إضافة الإحداثية GPX إضافة مكان موقف إضافة إجراء تعديل الإجراء @@ -2132,8 +2137,8 @@ إعداد الخريطة الملاحة رسالة - حدد الفئة لحفظ المفضلة فيها - حدد فئة اختيارية + حدد الفئة لحفظ المفضلة فيها: + حدد فئة اختيارية. قائمة POI إضافة نمط خريطة يجب ألا تكون الإعدادات فارغة @@ -2142,23 +2147,23 @@ مصدر الخريطة مصدر الخريطة إضافة مصدر خريطة - مصدر الخريطة: %s + تم تغيير مصدر الخريطة إلى \"٪ s\". تغيير موقع الزر الضغط على زر الإجراء سيقوم بعرض أو إخفاء نقاطك المفضلة على الخريطة. - دع الحقل فارغا إن كنت ترغب في استعمال العنوان أو إسم المكان + دع الحقل فارغا إن كنت ترغب في استعمال العنوان أو اسم المكان. طبقة الخريطة العلوية إضافة طبقة علوية - الخريطة العلوية: %s + تغيير الخريطة العلوية ل \"%s\". الخريطة السفلية طبقة الخريطة السفلية إضافة طبقة سفلية الضغط على زر الإجراء سيقوم بعرض أو إخفاء النقاط المهمة على الخريطة. يمكنك إضافة فئة أو أكثر لنقاط الإهتمام و القيام بعرضها أو إخفاءها على الخريطة. - الخريطة السفلية: %s + تغيير الخريطة السفلية ل \"%s\". رمز التَّمَوْضُع المفتوح خطأ في OLC \n - قم بالضغط على الزر لفترة أطوَل ثم اسحبه لتغيير مكانه على الشاشة + قم بالضغط على الزر لفترة أطوَل ثم اسحبه لتغيير مكانه على الشاشة. محيطات الأعماق البحرية تقسيم المسارات آلياً إلى أجزاء بعد كل فراغ تقصير رمز التموضع المفتوح يُرجى تقديم رمزٍ كامل @@ -2185,10 +2190,10 @@ بيانات الارتفاع لا تعرض الرسائل عند بدء التشغيل السماح بالوصول الخاص - السماح بالوصول إلى المناطق الخاصة + السماح بالوصول إلى المناطق الخاصة. اكتب عنوان اختر مدينة - تحديد الرمز البريدي + بحث الرمز البريدي أقرب مدن اكتب مدينة أو قرية اكتب عنوان بريدي @@ -2202,7 +2207,7 @@ إعادة تسمية إختر شارع في %1$s - إضافة وجهة + تعيين الوجهة تبديل الوجهة خطأ الخرائط البحرية @@ -2234,7 +2239,7 @@ \n • الإبلاغ عن الأخطاء في البيانات \n • تحميل مسارات GPX إلى الموقع مباشرة بالتطبيق \n • إضافة POI ورفعها مباشرة إلى الموقع (أو في وقت لاحق إن كنت غير متصل بالشبكة) - عدل طلب البحث أو زد النطاق + عدل طلب البحث أو زد النطاق. عرض/إخفاء الملاحظات عرض الملاحظات إخفاء الملاحظات @@ -2263,10 +2268,10 @@ تحسين تغطية الصور مع مابيلاري صور الموقع إضافة صور - لا يوجد صور + لا يوجد صور. ساهم بصور الشوارع الخاصة بك لهذا الموقع عن طريق مابيلاري. ويدجت مابيلاري - يسمح لك بالمساهمة بسرعة لمابيلاري + يسمح لك بالمساهمة بسرعة لمابيلاري. صور شوارع متاحة على الإنترنت للجميع. اكتشف أماكن، تعاون، والتقط صورا للعالم. Mapillary مابيلاري صور شوارع متاحة للجميع. اكتشف أماكن، تعاون، والتقط صورا للعالم. @@ -2274,29 +2279,29 @@ الضغط على زر الإجراء سيقوم بعرض أو إخفاء ملاحظات OSM على الخريطة. إخفاء من مستوى التكبير/التصغير يجب تحميل خريطة الخطوط المحيطية (الكنتورية) لهذه المنطقة لعرضها. - مستوى التكبير - مستوى التكبير: %1$s + العرض بدءا من مستوى التكبير + عرض مستوى التكبير:٪ 1 $ s استقراء موقعي - لمشاهدة خطوط التضاريس على الخريطة، يجب تحميل الملحق أولاً - تمكين استقراء موقعي أثناء الفقد المؤقت للموقع وذلك لإصلاحه + لمشاهدة خطوط التضاريس على الخريطة، يجب تحميل الملحق أولاً. + تمكين استقراء موقعي أثناء الفقد المؤقت للموقع وذلك لإصلاحه. الضغط على زر الإجراء تشغيل/إيقاف التكبير التلقائي وفقاً لسرعتك. الضغط على زر الإجراء سيضيف الموقع في مركز الشاشة كوجهة. تصبح الوجهة المحددة سابقاً وجهة وسطى أخيرة. الضغط على زر الإجراء سيستبدل الوجهة بالموقع الظاهرة على مركز الشاشة. يمكنك التقاط صور خاصة بك أو سلسلة من الصور وإرفاقها إلى هذا الموقع من الخريطة. للقيام بذلك تحتاج إلى تثبيت تطبيق مابيلاري من Google play. تحتاج إلى تحميل خريطة تراكب التلال لهذه المنطقة. - لمشاهدة التضاريس على الخريطة، تحتاج إلى شراء وتثبيت برنامج الخطوط الكنتورية المساعد + لمشاهدة التضاريس على الخريطة، تحتاج إلى شراء وتثبيت برنامج الخطوط الكنتورية المساعد. الضغط على زر الإجراء سيضيف الموقع في مركز الشاشة كنقطة وسطى أولى . بدون طبقة بدون طبقة اشترك في قائمة البريد الإلكتروني لدينا فيما يخص الخصومات والحصول على 3 تنزيلات خرائط إضافية! - مجموعة من الخرائط التي تحوي نقاط أعماق البحر وخطوطه المحيطية + مجموعة من الخرائط التي تحوي نقاط أعماق البحر وخطوطه المحيطية. شكرا لشراء معالم أعماق البحار محيطات الأعماق البحرية معالم أعماق البحار في نصف الكرة الجنوبي معالم أعماق البحار في نصف الكرة الشمالي محيطات الأعماق البحرية التطبيق يقوم بجمع معلومات حول أجزاء من التطبيقات التي تفتحها. الموقع الخاص بك لا يرسل ابدأ، ولا أي شيء تقوم بإدخاله في التطبيق أو أي تفاصيل لمناطق رأيتها ، بحثت عنها أو نزلتها. - عرض خصومات التطبيق ورسائل الأحداث المحلية الخاصة + عرض خصومات التطبيق ورسائل الأحداث المحلية الخاصة. أقل تضاريس مسطح متوازن @@ -2328,13 +2333,13 @@ \n• يمكنك مشاهدة سرعتك والارتفاه الذي انت به \n• خيار تسجيل GPX يتيح لك تسجيل رحلتك ومشاركتها \n• عبر مكون اضافي يمكنك عرض الخطوط الكنتورية والتضاريس" - المشي، التنزه، جولة في المدينة -\n• الخريطة تظهر لك ممرات المشي والتنزه -\n• ويكيبيديا سيخبرك الكثير اثناء جولتك وبلغتك المفضلة -\n• مواقف نقل عام (حافلة ،ترام ،قطار)، بما في ذلك اسماء خطوط النقل ويساعدك على التجول في مدينة جديدة -\n• التجول عبر الـGPS وفي وضع المشاة يحدد طريقك باستعمال ممرات المشي -\n -\n• يمكنك تسجيل ورفع مسارات الـGPX ومتابعتها ومشاركتها + المشي، التنزه، جولة في المدينة +\n• الخريطة تظهر لك ممرات المشي والتنزه +\n• ويكيبيديا سيخبرك الكثير اثناء جولتك وبلغتك المفضلة +\n• مواقف نقل عام (حافلة ،ترام ،قطار)، بما في ذلك اسماء خطوط النقل ويساعدك على التجول في مدينة جديدة +\n• التجول عبر الGPS وفي وضع المشاة يحدد طريقك باستعمال ممرات المشي +\n +\n• يمكنك تسجيل ورفع مسارات الGPX ومتابعتها ومشاركتها \n Osmand تطبيق بمصدر مفتوح ويتم تطويره بنشاط. يمكن للجميع أن يساهم بالإبلاغ عن الأخطاء، تحسين الترجمة أو تطوير ميزات جديدة. هذا المشروع في تحسين مستمر عبر جميع أشكال تفاعل المطورين والمستخدمين. التقدم المحرز في المشروع يعتمد أيضا على المساهمات المالية لتمويل التطوير واختبار الميزات جديدة. \nالتغطية التقريبية للخريطة وجودتها: @@ -2358,7 +2363,8 @@ \n• يدعم نقاط وسيطة خلال مسارك \n• إعادة تلقائية للتوجيه كلما انحرفت عن الطريق \n• البحث عن الأماكن حسب العنوان، النوع (مثل: مطعم، فندق، محطة وقود، متحف)، أو حسب الإحداثيات الجغرافية - "عرض الخريطة • عرض موقعك والتوجيه • محاذاة اختيارية للصورة وفق البوصلة أو توجيه الحركة • حفظ أهم أماكنك المفضلة • عرض النقاط المهمة من حولك (POI) • عرض متخصص لبيانات خرائط على الإنترنت، الرؤية من الأقمار الصناعية (من Bing) وتراكب طبقات خرائط مختلفة كالسياحة ومسارات GPX للملاحة وطبقات إضافية مع شفافية قابلة للتعديل • عرض اختياري لأسماء الأماكن باللغة الإنكليزية، اللغة المحلية، أو عبر الإملاء الصوتي" + عرض الخريطة • عرض موقعك والتوجيه • محاذاة اختيارية للصورة وفق البوصلة أو توجيه الحركة • حفظ أهم أماكنك المفضلة • عرض النقاط المهمة من حولك (POI) • عرض متخصص لبيانات خرائط على الإنترنت، الرؤية من الأقمار الصناعية (من Bing) وتراكب طبقات خرائط مختلفة كالسياحة ومسارات GPX للملاحة وطبقات إضافية مع شفافية قابلة للتعديل • عرض اختياري لأسماء الأماكن باللغة الإنكليزية، اللغة المحلية، أو عبر الإملاء الصوتي +\n استخدام OSM وبيانات ويكيبيديا • جودة معلومات من أفضل المشاريع التعاونية العالمية • بيانات OSM متاحة لكل بلد أو منطقة • POI ويكيبيديا، الأفضل لمشاهدة المعالم السياحية • التنزيلات مجانية غير محدودة، مباشرة من التطبيق • خرائط فيكتور مدمجة تحدث مرة واحدة في شهر على الأقل • اختر بين بيانات منطقة كاملة أو شبكة الطرق فقط (مثال: سعة اليابان 700 MB في حين 200 MB لشبكة الطرق فقط) "ميزات الأمان • عرض اختياري لوضع النهار/اليل • عرض اختياري للحد الأقصى للسرعة، مع التذكير إذا حصل تجاوز • تكبير/تصغيير اختياري حسب السرعة • مشاركة موقعك حتى يتمكن لأصدقاءك ايجادك" ميزات الدراجة والمشاة • عرض ممرات المشاة، التنزه، وأنشطة الهواء الطلق • توجيه متخصص وعرض طرق خاصة باللدراجات الهوائية والمشاة • محطات نقل عام اختيارية (حافلات، الترامواي، القطار) بما في ذلك أسماء خطوط النقل • تسجيل رحلة اختياري إلى ملف GPX محلي أو لخدمة على الإنترنت • عرض اختياري للسرعة والارتفاع • عرض الخطوط الكنتورية والتضاريس (عن طريق برامج مساعدة إضافية) @@ -2376,10 +2382,10 @@ اسم المستخدم خاطئ إلى مِن - عرض الصور المضافة في فترة زمنية معينة. + عرض الصور المضافة في فترة زمنية معينة التاريخ اسم المستخدم - عرض صور أضافها مستخدم معين. + عرض صور أضافها مستخدم معين اسم المستخدم يمكنك تصفية الصور حسب مقدمها أو حسب التاريخ. يتم تطبيق عوامل التصفية اذا ما كان التكبير عن كثب فقط. إعادة تحميل @@ -2401,7 +2407,7 @@ بدء/إنهاء الملاحة اضغط هذا الزر لبدء أو إنهاء الملاحة. الوقت الفاصل - حدد فاصل لوقت التخزن المؤقت للحفاظ على المواقع لإرسالها دون اتصال عند التتبع المباشر. + حدد فاصل لوقت التخزن المؤقت للحفاظ على المواقع لإرسالها دون اتصال عند التتبع المباشر تحتاج أن تكون متصلا بالإنترنت لعرض صور من mapillary. اعد المحاولة تصفح الخريطة وإضافة نقاط @@ -2418,7 +2424,7 @@ الحفظ كنقاط طريق الحفظ كخط نقطة مسار - " تعديل الخط" + تعديل الخط إضافة نقطة قبل إضافة نقطة بعد خيارات @@ -2444,9 +2450,9 @@ مجموعات آخر استخدام : %1$s تنشيط العلامة - " اليوم :" + اليوم أمس - " آخر ٧ أيام :" + آخر ٧ أيام هذه السنة نقل الكل إلى السجل مؤشر المسافة @@ -2459,7 +2465,7 @@ سهم متجه إلى العلامة عرض المتجاوز إخفاء المتجاوز - إزالة من علامات الخريطة + إزالة من \"علامات الخريطة\" تنازلي تصاعدي تاريخ الإضافة @@ -2471,7 +2477,7 @@ إنهاء تخطيط الطريق فرز - تنسيق الإدخال + إدخال إحداثية تصدير علاماتك إلى ملف يمكنك تحديده هنا: حفظ كمسار نقل إلى السجل @@ -2482,10 +2488,10 @@ اختر نسق إدخال الأحداثيات. يمكنك دائماً تغييره بالنقر على خيارات. إدخال إحداثيات سريع تجنب طرق الثلوج والطين - تجنب طرق الثلوج والطين + تجنب طرق الثلوج والطين. إضافة نسخة نقطة البداية كوجهة. القيام برحلة ذهاب وإياب - حدث استثناء: لم يتم تعديل الملاحظة + حدث استثناء: لم يتم تعديل الملاحظة. تعديل ملاحظة تعديل ملاحظة OSM أصفر غامق @@ -2508,7 +2514,7 @@ شاشة كاملة علامة مُجتازة إنشاء أو تعديل عناصر OSM - إنشئ أو عدل نقاط الاهتمام، افتح أو علق على ملاحظات OSM أو ساهم بمسارات GPX مسجلة + إنشئ أو عدل نقاط الاهتمام، افتح أو علق على ملاحظات OSM أو ساهم بمسارات GPX مسجلة. حُذف مُعدلة تمت الإضافة @@ -2575,7 +2581,7 @@ ش الاسم الاختياري للنقطة الطرق القريبة التي في الداخل - أدخل اسم الملف + أدخل اسم الملف. خطأ أثناء استرجاع الخريطة تمت عملية استيراد الخريطة وضعها نقطة البداية @@ -2590,7 +2596,7 @@ ماذا هنا: اللاوسية عرض خريطة السياحة - نسخ الاسم + انسخ الموقع / اسم نقطة الاهتمام ليس للمكان أي إسم مكان نفق الأنفاق @@ -2612,7 +2618,7 @@ خرائط قد تحتاجها OsmAnd فريق الوجهات الشعبية - تتوفر تحديثات جديدة لويكي الرحلات. حدثها لتستمتع + تتوفر تحديثات جديدة لويكي الرحلات،حدثها لتستمتع. تحديث متوفر تحميل ابدأ التحرير @@ -2660,11 +2666,11 @@ %1$.2f %2$s / شهر وفر %1$s. الاشتراك الحالي - يجدد شهرياً + يجدد شهريا تجديد فصلي - يجدد سنوياً + يجدد سنويا حدد فترة الدفع المناسبة لك: -   جزء من الدخل يذهب للمساهمين في OSM. + جزء من الدخل يذهب للمساهمين في OSM. حذف العلامة \'%s\'؟ تعديل العلامة بحث عن شارع @@ -2708,7 +2714,7 @@ فتح جميع المميزات اختيار المناسب اشترِ واحدًا من الآتي للحصول على وظيفة دليل السفر بدون نت: - اختر العنصر المناسب: + اختر العنصر المناسب لا تفعل افعل صور المقالة يمكن تحمل للاستخدام بدون اتصال. @@ -2750,7 +2756,7 @@ \n• قارب الملاحة: دعم الممر المائي الممر \n \n• إصلاحات الأخطاء الأخرى - يمكنك تحرير أي مقال على ويكي الرحلات وتبادل المعرفة والخبرة والموهبة والاهتمامات + يمكنك تحرير أي مقال على ويكي الرحلات وتبادل المعرفة والخبرة والموهبة والاهتمامات. إضافة المنزل إضافة العمل @@ -2777,12 +2783,12 @@ الوجهات المتوسطة الوصول عند %1$s مناسبة للاستخدام أثناء القيادة على الطرق الوعرة. مناسب للاستخدام مع صور الأقمار الصناعية الخضراء كمخطط موضعها. النقاط الرئيسية: تخفيض سمك الطريق الرئيسية، وزيادة سمك المسارات والمسارات ودراجات وطرق أخرى. استناداً إلى نمط \'Topo\'. - نمط التنقل بحرية. الميزات الرئيسية: العوامات، المنارات، ريفيروايس، والخدمات البحر الممرات وعلامات، والمرافئ، سامارك، ملامح العمق. - نمط التزلج. الميزات الرئيسية: يعرض أماكن اللهو ومصاعد التزلج وغيرها من الميزات التزلج بطريقة مريحة. أقل الكائنات الثانوية خريطة تشتيت. - أسلوب بسيط والمتناقضة للملاحة سيارة. لطيف على العينين في الوضع الليلي. الميزات الرئيسية: الخطوط الكنتورية، المتناقضة برتقالية، على غرار الطرق وأقل تشتيت الخريطة الثانوي الكائنات. - على النقيض من نمط مصممة أساسا للمشي والتنزه وركوب الدراجات في الطبيعة. قراءة جيدة في الإضاءة الخارجية المعقدة. الميزات الرئيسية: الطرق المتناقضة والأجسام الطبيعية، أنواع مختلفة من طرق، والخطوط الكنتورية مع إعدادات متقدمة، تفاصيل أكثر في مستويات التكبير/التصغير المقابلة من النمط الافتراضي. يسمح الخيار تكامل سطحي التمييز بين نوعية سطح الطريق. لا يوجد وضع ليلي. - الستايل القديم mapnik الافتراضي جعل ستايل.السمات الرئيسية: الوان متشابهة إلى mapnik \'الأسلوب. - نمط عالية من التفصيل لجولة في الأغراض. ويشمل كافة خيارات التكوين للنمط الافتراضي، بالإضافة إلى ذلك: يعرض قدر من التفاصيل قدر الإمكان، لا سيما جميع الطرق والمسارات، وطرق أخرى للسفر. واضحة البصرية من التمييز بين جميع أنواع الطرق المختلفة، وتذكرنا بكثير من جولة اﻷطالس. نظام ألوان عالي التباين للاستخدام في الهواء الطلق، وضع ليلا ونهارا. + للملاحة البحرية. ميزات العوامات ، المنارات ، مجاري الأنهار ، الممرات البحرية وعلامات ، الموانئ ، خدمات علامة مائية ، وملامح العمق. + للتزلج. يتميز بمناطق التزلج ومصاعد التزلج ومسارات التزلج على الجليد وما إلى ذلك. يعتم كائنات الخريطة الثانوية. + أسلوب قيادة بسيط. الوضع الليلي اللطيف ، وخطوط الكنتور ، مقارنة بالطرق ذات اللون البرتقالي ، يعتم الكائنات في الخريطة الثانوية. + على النقيض من نمط مصممة أساسا للمشي والتنزه وركوب الدراجات في الطبيعة. قراءة جيدة في الإضاءة الخارجية المعقدة. الميزات الرئيسية: مقارنة الطرق والأجسام الطبيعية، أنواع مختلفة من طرق، والخطوط الكنتورية مع إعدادات متقدمة، تفاصيل أكثر في مستويات التكبير/التصغير المقابلة من النمط الافتراضي. يسمح الخيار تكامل سطحي التمييز بين نوعية سطح الطريق. لا يوجد وضع ليلي. + الستايل القديم Mapnik الافتراضي جعل ستايل.السمات الرئيسية: الوان متشابهة إلى Mapnik \'الأسلوب. + أسلوب الملاحة مع التباين العالي والحد الأعلى من التفاصيل. يتضمن كل خيارات النمط الافتراضي OsmAnd ، مع عرض أكبر قدر ممكن من التفاصيل ، ولا سيما الطرق والمسارات وطرق السفر الأخرى. التمييز الواضح بين \"جولة الأطلس\" بين أنواع الطرق. مناسبة للاستخدام النهاري والليلي وفي الهواء الطلق. أسلوب الغرض العام. تقديم نظافة مبسطة في المدن المكتظة بالسكان. الملامح الرئيسية: خطوط الكنتور ، والطرق ، وجودة السطح ، والقيود المفروضة على الوصول ، ودروع الطريق ، والمسارات التي تظهر وفقًا لمقياس SAC ، وميزات رياضة الماء الأبيض. قم بتنزيل أدلة السفر هذه من ويكي الرحلات لعرض مقالات حول الأماكن في العالم بدون انترنت. دليل السفر حاليا على أساس wikivoyage.اختبار كافة الميزات أثناء اختبار بيتا المفتوحة مجانا.بعد ذلك، وأدلة السفر ستكون متاحة للمشتركين في osmand محدود و اصحاب osmand +. @@ -2800,28 +2806,28 @@ نقرة لتنشيط العلامة إضافة ملاحظة صوتية أو فيديو أو صورة لكل نقطة على الخريطة، باستخدام قائمة السياق أو القطعة. ابحث عن المسارات مع نقاط الطريق - حدد مسار لإضافة نقاط الطريق إلى العلامات. (يتم سرد المسارات فقط مع نقاط الطريق.) + حدد مسار لإضافة نقاط الطريق إلى العلامات(يتم سرد المسارات فقط مع نقاط الطريق). نقرة طويلة أو قصيرة على الأماكن ثم اضغط على زر العلامة. يمكنك استيراد المجموعات المفضلة أو نقاط المسار كعلامات. ستظهر العلامات التي تم تجاوزها على هذه الشاشة. خط مباشر من موقعك إلى العلامة النشطة. عرض سهم واحد أو إثنين ليشير إلى اتجاه العلامة النشطة. طريقة عرض المسافة من موقعي إلى العلامات النشطة. - عدد الأسهم تجاه العلامات النشطة ( للملاحة في الصحراء) + عدد الأسهم تجاه العلامات النشطة ( للملاحة في الصحراء): أسود ملفات GPX تشغيل الغوارانية متوسط وقت الوصول متوسط الوقت - التبديل بين الوضع النهاري والليلي + التبديل بين الوضع النهاري والليلي. عرض نهاري عرض ليلي نمط ليلي/نهاري تحميل المواد ويكيبيديا عن %1$s لقراءتها دون اتصال. البحث عن مقالة ويكي المقابلة - اضغط على الزر للاستماع إلى موجه صوتية التالية لتحديد مطالبات مفقودة أو بها خلل. - الفئة + اضغط على الزر للاستماع إلى موجه صوتية التالية لتحديد مطالبات مفقودة أو بها خلل + نوع الطريق السطح السلاسة الوعورة @@ -2837,7 +2843,7 @@ اعرض المزيد المسارات على الخريطة إظهار/إخفاء مسارات GPX - يؤدي النقر فوق زر الإجراء هذا إلى إظهار مسارات GPX المحددة أو إخفائها على الخريطة + يؤدي النقر فوق زر الإجراء هذا إلى إظهار مسارات GPX المحددة أو إخفائها على الخريطة. إخفاء المسارات عرض المسارات الرجاء إضافة الوجهة أولاً @@ -2879,14 +2885,13 @@ %s وضع تجنب أنواع النقل… المشي - الحد الأقصى لطول العلامة \"%s\"  هو 255 حرفًا. -\nيرجى الاختصار للمتابعة. + اختصر طول العلامة \"٪ s\" إلى أقل من 255 حرفًا. درجات مللي راديان وحدات القياس الزاوي تغيير قياس زاوية الازيموث. طول \"%s\" قيمة - تعرف على المزيد حول كيفية حساب OsmAnd للطرق في مدونتنا. + تعرف على المزيد حول كيفية حساب أوسماند للطرق في مدونتنا. يخضع التنقل في وسائل النقل العام حاليًا للاختبار التجريبي ، ويتوقع الأخطاء . إضافة نقطة وسيطة %1$d تحويلات @@ -2924,10 +2929,10 @@ OsmAnd Live وسائل النقل العام تجنب الحصى والطرق المرصوفة تجنب الحصى والطرق المرصوفة - تجنب القطارات + بدون قطارات تجنب القطارات - تجنب مترو الانفاق - تجنب مترو الانفاق والنقل بالسكك الحديدية خفيفة الوزن + تجنب قطارالانفاق + تجنب قطارالأنفاق والنقل بالسكك الحديدية خفيفة الوزن تجنب العبارات تجنب العبارات • عرض الوقت بين التنقلات في وسائل النقل العام @@ -2966,7 +2971,7 @@ تمت تركيب إضافة جديدة ربط الأجزاء إضافة ملف تعريف جديد \'%1$s\'؟ - ضمن الوجهة + تضمين العنوان حفظ الوجهة لكل نقطة متابعة خلال التسجيل. يستخدم لتقدير وقت الوصول لنوع غير معروف من الطرق ولتقليل السرعة لجميع الطرق (قد يغير المسار) نقل ملفات بيانات OsmAnd إلى الوجهة الجديدة\? @@ -3037,11 +3042,11 @@ لا يمكن بدء تشغيل أداة تحويل النص إلى كلام تصدير ملف التعريف OsmAnd ملف تعريف: %1$s - "ملف التعريف \'%1$s\' موجود بالفعل، هل تريد استبداله؟" + ملف التعريف \'%1$s\' موجود بالفعل، هل تريد استبداله؟ لا يمكن تصدير ملف التعريف. استيراد ملف التعريف: لاستيراد ملف تعريف، اذهب لمكانه على الجهاز وافتحه باستخدام OsmAnd. - %1$s خطأ في الاستيراد: %2$s + %1$s استيراد خاطئ: %2$s %1$s تم الاستيراد بنجاح. أبيض تبديل %1$s و %2$s @@ -3143,7 +3148,7 @@ صعوبة الطريق يرجى مشاركة ملاحظاتك وتقييم أعمالنا على Google Play. موافق - "خدمة تحميل أوسماند" + خدمة تحميل أوسماند أرجواني أيقونة انقر مرة أخرى لتغيير اتجاه الخريطة @@ -3151,7 +3156,7 @@ الحد الأعلى للسرعة السرعة الافتراضية تغيير إعدادات السرعة الافتراضية - "تعيين حد السرعة الأدنى/الأعلى" + تعيين حد السرعة الأدنى/الأعلى ملف تعريف جديد خروج مفاجئ فشل العملية الأخيرة لأوسماند. الرجاء مساعدتنا في التحسين من خلال مشاركة رسالة الخطأ. @@ -3175,4 +3180,139 @@ تعيين الوقت الذي سيتم تشغيل الشاشة فيه. استخدام مستشعر القرب حرك يدك أعلى الشاشة لتشغيلها أثناء التنقل. + تحديثات الخريطة الشهرية + تحديثات الخريطة كل ساعة + سيتم إرسال استعلام البحث إلى: \"%1 $ s\" ، بالاضافة إلى موقعك. لا يتم جمع المعلومات الشخصية ، فقط بيانات البحث اللازمة لتحسين البحث. + لامركبة ترام + تجنب مركبة الترام + لا يوجد حافلات + تجنب الحافلات والعربات + بدون مشاركة سيارة الأجرة + تجنب مشاركة سيارة الأجرة + إرسال سجل + نقل %1$d الملفات (%2$s). + نسخ %1$d الملفات (%2$s). + تعذر نسخ %1$d الملفات (%2$s). + %1$d الملفات (%2$s) موجودة بالموقع السابق \'%3$s\'. + نقل الخرائط + عدم النقل + المسار على الأقدام حوالي٪ 1 $ s ، وقد يكون أسرع من وسائل النقل العام + لسوء الحظ ، لم يستطع أوسماند العثور علي مسار مناسب للإعدادات الخاصة بك. + حاول التنقل مشيا على الأقدام. + حاول تغيير الإعدادات. + حساب الطريق سيرا على الأقدام + نوع النقل + بحث عن جي بي اس + عرض الإحداثيات + سياسة الخصوصية + ساعدنا في جعل أوسماند أفضل + السماح لأوسماند بجمع بيانات استخدام التطبيقات المجهولة ومعالجتها. نحن لا نجمع أو نخزن بيانات عن موقعك ، أو أي مواقع تقوم بعرضها علي الخريطة. + اختر نوع البيانات التي تريد مشاركتها: + الخرائط التي تم تنزيلها + الشاشات المزارة + حدد البيانات التي تسمح لأوسماند بمشاركتها. + يساعدنا في فهم أي الخرائط من المناطق والبلدان الأكثر شعبية. + يساعدنا في فهم ميزات أوسماند الأكثر شيوعا. + انقر فوق \"السماح\" إذا كنت توافق على٪ 1 $ s + الخصوصية والأمان + اختر البيانات للمشاركة + لا ، شكراً + سماح + اسم الملف الشخصي + نوع الملاحة + سيارة أجرة + نقل داخلي + مترو الأنفاق + حصان + هليكوبتر + يمكنك إضافة نسختك المعدلة من الملف routing.xml في ..osmand/routing + تزلج + تزلج + إظهار مسطرةالبوصلة + إخفاء مسطرة البوصلة + اختر أيقونة + الوضع:% s + وضع المستخدم ، مشتق من:% s + تزلج + النوع:% s + ملف التعريف الأساسي + حدد نوع الملاحة + يرجى تحديد نوع الملاحة لملف التعريف الجديد + أدخل اسم الملف الشخصي + يجب تحديد اسم ملف تعريف أولا. + اسم مكرر + هناك بالفعل ملف تعريف بهذا الاسم + لا يمكنك حذف ملفات تعريف أوسماند الأساسية + حفظ التغييرات + احفظ التغييرات في ملف التعريف أولاً + حذف الملف الشخصي + هل تريد بالتأكيد حذف ملف التعريف \"٪ s\" + حدد ملف تعريف أساسي + إسناد ملف التعريف المخصص الخاص بك إلى أحد ملفات تعريف التطبيق الافتراضية ، يحدد الإعداد الأساسي مثل الرؤية الافتراضية لعناصر واجهة المستخدم ووحدات السرعة والمسافة. وهذه هي ملفات تعريف التطبيق الافتراضية ، إلى جانب أمثلة لملفات تعريف مخصصة يمكن تمديدها إلى: + حدد نوع الملاحة + سيارة ، شاحنة ، دراجة نارية + الدراجة الجبلية ، دراجة نارية ، الحصان + مشي, عصا المشي, جري + جميع أنواع PT + سفينة, تجديف, إبحار + طائرة, مدرج + الترميز الجغرافي + خط مستقيم + إعادة التوجيه (غير متصل) + توجيه أوسماند + ملف تعريف توجيه مخصص + توجيه خاص + توجيه جهة خارجية + حدد ملفات التعريف لتكون مرئية في التطبيق. + تطبيق ملفات التعريف + أضف عنصرًا واحدًا على الأقل إلى القائمة في إعدادات \"الإجراء السريع\" + جبال الألب/التزلج علي المنحدرات + التزلج على جبال الألب أو الانحدار. + التزلج عبر البلاد / الشمال + مسارات للتزلج الشمالي أو الريفي علي الثلج. + جولة تزلج + طرق لجولات التزلج. + تزلج + منحدرات للاستخدام الزلاجات. + السماح بالمسارات المتوسطة + طرق أكثر صعوبة مع أقسام أكثر حدة. بعض العقبات التي ينبغي تجنبها. + السماح للطرق المتقدمة + طرق صعبة ، مع عقبات خطيرة وأقسام شديدة الانحدار. + السماح بطرق المتخصصين + طرق صعبة للغاية ، مع عقبات خطيرة والمناطق المحيطة بها. + السماح بالتزلج على الطرق فقط + الطريق مصممة خصيصا بحرية أو التزلج على الجليد. + السماح للطرق الكلاسيكية فقط + تم إعداد الطرق للأسلوب الكلاسيكي فقط دون مسارات التزلج. يشمل ذلك الطرق التي يتم إعدادها بواسطة عربة ثلجية أصغر مع زحلقة مرنة ومسارات مصنوعة يدويًا بواسطة المتزلجين. + الصعوبة المفضلة + أفضل الطرق لهذه الصعوبة على الرغم من أن التوجيه علي الممرات أصعب إذا كان طويلا وأسهل إذا كان أقصر. + خارج الممر + Freeride و offpiste طرق ومسارات غير رسمية. عادة ما يكون غير مرتب ، غير مصبوغ من قبل المسؤولين ولا يتم تسجيله دخوله في المساء. الدخول على مسؤوليتك الخاصة. + البيانات المجمعة + طبق + الصف 1 + الصف 2 + الصف 3 + الصف 4 + الصف 5 + أجهزة الإدخال الخارجية + حدد جهاز تحكم خارجي ، مثل لوحة المفاتيح أو WunderLINQ. + لا شيء + لوحة المفاتيح + وندرلينك + ببغاء + المسار: المسافة٪ s ، وقت جهاز التوجيه٪ s +\nالحساب:٪ .1f ثانية ،٪ d طرق ،٪ d تجانب) + الاوكيتانيه + احصل على خصم بمقدار %d %@ at %d%% . + %1$s للأول %2$s + %1$s للأول %2$s + ثم %1 $ s + %1 $ s • وفر %2 $ s + تطبيق فقط على \"%1$s\" + إعدادات التوجيه في ملف التعريف المحدد \"٪ 1 $ s\". + حد العرض + حدد الحد المسموح به لعرض السيارة على الطرق. + محاكاة موقعك باستخدام مسار GPX مسجل. + زر لجعل الشاشة مركز نقطة الانطلاق وحساب الطريق إلى الوجهة أو فتح مربع حوار لتحديد الوجهة إذا لم تكن علامة الوجهة علي الخريطة. \ No newline at end of file From 0ea1537ff234af2d16889ce78e33cd3e7703c9fa Mon Sep 17 00:00:00 2001 From: Famlam Date: Thu, 5 Dec 2019 23:59:51 +0000 Subject: [PATCH 34/61] Translated using Weblate (Dutch) Currently translated at 89.6% (2759 of 3078 strings) --- OsmAnd/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 9dea47da79..21483a9c41 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -1798,7 +1798,7 @@ Lengtegraad:\t\t%2$s Kies audio bitrate. Adres wordt gezocht Ruiterpaden - Controle op Update + Bijwerken Alleen downloaden via WiFi Automatisch controleren Nu Controleren From 33a4c4dcfbc9a6840a1a9ff226c886f921f8c021 Mon Sep 17 00:00:00 2001 From: Gilbert Lowel Date: Sat, 7 Dec 2019 09:24:09 +0000 Subject: [PATCH 35/61] Translated using Weblate (Dutch) Currently translated at 89.6% (2759 of 3078 strings) --- OsmAnd/res/values-nl/strings.xml | 87 ++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 21483a9c41..2e22e4b556 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -218,7 +218,7 @@ Er is nu {2} MB beschikbaar Installeren nieuwe gegevens… Er is een online routeberekening gekozen, maar er is geen verbinding met internet. Taal niet ondersteund - De gekozen taal is niet ondersteund door de geïnstalleerde Android stemgenerator. Wil je een andere stemgenerator zoeken op de Play-store? Anders wordt de huidige stemgenerator gebruikt. + De gekozen taal wordt niet ondersteund door de Android stemgenerator. Wil je een andere stemgenerator zoeken op de Play-store\? Anders wordt de huidige stemgenerator gebruikt. Ontbrekende gegevens Geen gegevens voor de geselecteerde taal geïnstalleerd. Wil je naar de Play-store gaan om deze te installeren? Keer richting van GPX-track om @@ -249,7 +249,7 @@ Er is nu {2} MB beschikbaar Installeer meer… Minimum zoomniveau om vectorkaarten in plaats van (raster)kaartsegmenten te gebruiken. Min. vector zoomniveau - " Online OSM kaart classificatie met foto\'s" + string name=\"lat_lon_pattern\">Lat: %1$.5f Lon: %2$.5f</string Fout bij offline zoeken. Zoek adres in de offline kaarten Systeem @@ -314,7 +314,7 @@ Er is nu {2} MB beschikbaar OsmAnd offline routing is een experimentele functie en werkt niet voor afstanden van meer dan ongeveer 20 km.\n\nRouting service is tijdelijk omgeschakeld naar online CloudMade. Kan de opgegeven map niet vinden. Opslagmap - Een oudere OsmAnd versie is al geïnstalleerd. Alle offline gegevens blijven werken in het nieuwe programma, maar Favorieten moeten worden geëxporteerd in de oude versie en dan worden geïmporteerd met de nieuwe. + Een oudere OsmAnd versie is al geïnstalleerd. Alle offline gegevens blijven werken in het nieuwe programma, maar Favorieten moeten worden geëxporteerd in de oude versie en dan worden geïmporteerd in de nieuwe. Versie {0} succesvol geïnstalleerd ({1}). Downloaden versie… Doorgaan met de installatie van OsmAnd - {0} van {1} {2} MB ? @@ -635,7 +635,7 @@ Er is nu {2} MB beschikbaar Startlocatie is nog niet bepaald Downloaden afbreken? De basiskaart is nodig voor de goede werking van OsmAnd en is al geselecteerd om te downloaden. - Activeer de Online Kaarten-plugin om andere kaartbronnen te kunnen selecteren + Activeer de \'Online Kaarten\' plug-in om andere kaartbronnen te kunnen selecteren Online (raster-) kaarten Gebruik online kaarten (download en bewaar deze op SD-kaart). Online kaarten @@ -854,7 +854,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).Hoogtelijnen Andere kaarten Hoogtelijnen - "De plugin voor audio-/videonotities biedt de mogelijkheid voor het maken van foto-, audio- en videonotities tijdens een reis, direct via de knop in de kaartweergave, of via het menu bij een locatie op de kaart." + De plug-in voor audio-/videonotities biedt de mogelijkheid voor het maken van foto-, audio- en videonotities tijdens een reis, direct via de knop in de kaartweergave, of via het menu bij een locatie op de kaart. Audio-/videonotities OsmAnd-plugin voor offline hoogtelijnen Deze plug-in toont de hoogtelijnen en reliëflaag bovenop de normale kaart. Uitermate praktisch voor sporters, wandelaars, verre tochten, en iedereen die geïnteresseerd is in de hoogteverschillen van een landschap. @@ -1004,7 +1004,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).Japan Verenigde Staten Canada - Europa, Azië en Zuid-Amerika en andere + Europa, Azië, Zuid-Amerika en andere Verenigd Koninkrijk, India, en andere FPS-debuginformatie Zoomniveau\'s gedownload: %1$s @@ -2027,7 +2027,7 @@ Nu is maar {2} MB beschikbaar. Gekozen categorieën Maak eigen filter Filters - Filter toepassen + Filters toepassen Filter opslaan Wis filter Nieuw filter @@ -2202,7 +2202,7 @@ voor Gebied: %1$s x %2$s OsmAnd verzamelt uitsluitend algemene gegevens over welke onderdelen van de app je opent. We slaan geen locatiegegevens, zoektermen of andere gebruikersgegevens op. Geen startmeldingen weergeven Overzicht - Straat zoeken + Selecteer een straat in %1$s Adres invoeren Plaatsnaam invoeren @@ -2241,7 +2241,7 @@ voor Gebied: %1$s x %2$s Heuvelachtig Minder heuvelachtig Vlak - Kortere routes + Kortere wegen Er tussen in Bij voorkeur secundaire wegen Terrein voorkeur: vlakke of heuvelachtige wegen. @@ -2271,11 +2271,9 @@ voor Gebied: %1$s x %2$s Ga ook over privé-terreinen. Zoomniveau weergave: %1$s Deze route is misschien te lang. Voeg tussenpunten toe als binnen 10 minuten geen route berekend is. - OsmAnd (OSM, Automated Navigation Directions) is een kaart- en navigatieprogramma dat de gratis, wereldwijde en gedetailleerde OpenStreetMap (OSM) data gebruikt. -\n -\n -\n -\nGebruikt visuele en gesproken navigatie, toont POI\'s (point of interest), maakt en volgt GPX-tracks, toont hoogtelijnen en hoogte informatie (via plug-in), kiest tussen auto, fiets, wandelen of andere, je kan de OSM-kaart bewerken en nog veel meer. + "OsmAnd (OSM, Automated Navigation Directions) is een kaart- en navigatieprogramma dat de gratis, wereldwijde en gedetailleerde OpenStreetMap (OSM) data gebruikt. +\n +\nGebruikt visuele en gesproken navigatie, toont POI\'s (point of interest), maakt en volgt GPX-tracks, toont hoogtelijnen en hoogte informatie (via plug-in), kiest tussen auto, fiets, wandelen of andere, je kan de OSM-kaart bewerken en nog veel meer." " GPS-navigatie • Offline (geen datakosten) of online (snellere) routeberekening @@ -2290,16 +2288,17 @@ voor Gebied: %1$s x %2$s • Neem uw reis op als GPX-spoor of volg een GPX-spoor " Kaart • Toon POI (Points Of Interest) • Draai in de bewegingsrichting (of kompasrichting) • Toont uw positie en waar u naar kijkt • Deel uw lokatie met vrienden • Bewaar belangrijke plaatsen in Favorieten • Toon namen in Engelse, lokale, of fonetische schrijfwijze • Toon extra informatie, zoals satellietfoto (van Bing), GPX-sporen, andere kaartstijlen en extra informatielagen - Skiën - Met de OsmAnd Ski plugin ziet u pistes met hun moeilijkheidsgraad, en extra informatie zoals liften en andere faciliteiten. + Skiën - Met de OsmAnd Ski plug-in ziet u pistes met hun moeilijkheidsgraad, en extra informatie zoals liften en andere faciliteiten. Fietsen \n• Vind fietspaden op de kaart \n• GPS navigatie in fiets modus maakt gebruik van fietspaden \n• Bekijk uw snelheid en hoogte \n• De GPX opname optie stelt u in staat uw route op te slaan en deze te delen \n• Via een extra plugin kunt u hoogteverschillen weergeven als hoogtelijnen of reliëfschaduw - Wandelen • De kaart toont voetpaden, bergpaden, routes door parken • Wikipedia vertelt u meer over uw omgeving • OV-haltes (tram, bus, trein, metro), inclusief lijnnummers, helpen u te navigeren • Navigatie gebruikt voetpaden • Neem uw weg op als GPX-route of volg een gedownloade route + Wandelen • De kaart toont voetpaden, bergpaden, routes door parken • Wikipedia vertelt u meer over uw omgeving • OV-haltes (tram, bus, trein, metro), inclusief lijnnummers, helpen u te navigeren • Navigatie gebruikt voetpaden • Neem uw weg op als GPX-route of volg een gedownloade route +\n Werk mee aan OpenStreetMap (OSM) • Meld fouten • Upload sporen naar OSM, direct vanuit de app • Voeg POI toe aan de kaart en upload deze - OsmAnd is open-source en wordt steeds verder ontwikkeld. Iedereen kan helpen door bugs te melden, vertalingen te verbeteren of nieuwe functies te programmeren. Door deze interactie wordt het steeds beter. De voortgang is mede afhankelijk van betalingen om programmeurs en testers voor nieuwe functies te betalen. + OsmAnd is open-source en wordt steeds verder ontwikkeld. Iedereen kan helpen door bugs te melden, vertalingen te verbeteren of nieuwe functies te programmeren. Door deze interactie wordt het steeds beter. De ontwikkeling is mede afhankelijk van giften om programmeurs en testers, voor nieuwe functies, te betalen. \n \nIndicatie van compleetheid en kwaliteit van de kaart: \n • West-Europa: **** @@ -2312,7 +2311,7 @@ voor Gebied: %1$s x %2$s \n • Midden-Oosten: ** \n • Afrika: ** \n • Antarctica: * -\n Voor bijna elk land ter wereld kunt u de kaart downloaden. +\n Voor bijna elk land ter wereld kunt u een kaart downloaden. Indicatie van compleetheid en kwaliteit van de kaart: \n • West-Europa: **** \n • Oost-Europa: *** @@ -2426,7 +2425,7 @@ voor Gebied: %1$s x %2$s Plan route Sorteer Invoer van coördinaten - Exporteer uw Markeervlaggetjes naar het volgende bestand: + Exporteer uw Markeervlaggetjes naar het volgende GPX-bestand: Opslaan als GPX-bestand Verplaats naar geschiedenis De groep wordt verwijderd na een herstart van de app. @@ -2506,7 +2505,7 @@ voor Gebied: %1$s x %2$s Maak markeringen aan op de kaart! Twee Een - Kies hoeveel markeervlaggetjes getoond worden. + Kies hoeveel markeervlaggetjes getoond worden: Aantal decimalen Rechts Links @@ -2564,7 +2563,7 @@ voor Gebied: %1$s x %2$s Kaartupdates: Elke maand Kaartupdates: Elk uur "In-app aankopen " - "Eenmalige betaling " + Eenmalige betaling Na aankoop is het permanent voor je beschikbaar. %1$s Kopen Wikivoyage offline @@ -2623,7 +2622,7 @@ voor Gebied: %1$s x %2$s "Fout bij kaartimport " "Kaart geïmporteerd " Instellen als startpunt - Huidig + Huidige Voeg een tussenstop toe Voeg een eindpunt toe Huidige bestemming wordt laatste Tussenpunt @@ -2773,7 +2772,7 @@ voor Gebied: %1$s x %2$s Vermijd veerboten Graden Milliradialen - Wijzig azimut eenheid + Wijzig azimut eenheid. Selecteer de te vermijden openbaar vervoer opties: %s modus Vermijd transport types… @@ -2840,7 +2839,7 @@ voor Gebied: %1$s x %2$s Toon GPX-tracks Voeg a.u.b. eerst de Bestemming in Vorige route - Thuis toevoegen + Thuisadres toevoegen Werkadres toevoegen Werk @@ -2938,7 +2937,7 @@ voor Gebied: %1$s x %2$s Voorbeeld UTM Standaard Open Locatie Code - Het geselecteerde formaat wordt toegepast op alle plekken in de app. + De geselecteerde indeling wordt in de hele app toegepast. Deze instelling is standaard geselecteerd voor alle profielen: %s Instelling aanpassen Annuleren @@ -2986,7 +2985,7 @@ voor Gebied: %1$s x %2$s OsmAnd downloadservice Magenta Icoon - Tik nogmaals om de kaartoriëntatie te veranderen + Tik nogmaals om de kaartoriëntatie te wijzigen Standaardsnelheid Instellingen aanpassen van standaard snelheden Stel min/max snelheid in @@ -3103,8 +3102,8 @@ voor Gebied: %1$s x %2$s App profielen beheren… Effectief voor de gehele app Scherm inschakelen - Kaart tijdens navigatie - Kaart tijdens navigatie + Kaartweergave bij navigatie + Kaartweergave bij navigatie Gesproken aankondigingen, vinden enkel plaats tijdens het navigeren. Navigatie-instructies en aankondigingen Gesproken instructies @@ -3140,7 +3139,7 @@ voor Gebied: %1$s x %2$s Verberg de reliëflaag Toon/verberg de reliëflaag Track opgeslagen - Toon fietsknooppunten netwerk + Toon knooppunt van de fietsroutes Hoogte lijnen en reliëflaag Verzend log Verplaats kaarten @@ -3196,7 +3195,7 @@ voor Gebied: %1$s x %2$s Offroad WunderLINQ Wegtype - Open track + Track openen Verbind de gaten Route: afstand %s, reistijd %s \nBerekening: %.1f sec, %d wegen, %d tegels) @@ -3210,7 +3209,7 @@ voor Gebied: %1$s x %2$s Annuleer inschrijving %1$s • Bespaar %2$s Analyse - Wektijd + Scherm aan gedurende Uiterlijk Kaart weergave Kopieer pad naar de OsmAnd data folder @@ -3230,7 +3229,7 @@ voor Gebied: %1$s x %2$s Middelmatig Gevorderd Expert - Freeride + Gratische rit Extreem Ongedefinieerd Piste moeilijkheidsgraad @@ -3255,4 +3254,28 @@ voor Gebied: %1$s x %2$s Uitschakelen Nieuwe plugin toegevoegd verbind segmenten + • App profiles: Create a custom profile for your own needs, with a custom icon and color +\n +\n • Nu aan te passen standaard en min / max snelheden voor elk profiel +\n +\n • Widget toegevoegd voor de huidige coördinaten +\n +\n • Opties toegevoegd om het kompas en een straalliniaal op de kaart te tonen +\n +\n • Fix background track logging +\n +\n • Improved background map downloads +\n +\n • \'Zet scherm aan\' optie is terug +\n +\n • Wikipedia taalkeuze aangepast +\n +\n • Vast kompasknop tijdens navigatie +\n +\n • Andere fouten verholpen +\n +\n + Netwerk knooppunten + Voeg nieuw profiel toe \'%1$s\'\? + Sla (richting) naar elk trackpunt op tijdens het opnemen. \ No newline at end of file From bf1b8f45b2c540a6e3bc0e412e0795d022be6afa Mon Sep 17 00:00:00 2001 From: "H. van der Wolf" Date: Sat, 7 Dec 2019 10:27:44 +0000 Subject: [PATCH 36/61] Translated using Weblate (Dutch) Currently translated at 89.6% (2759 of 3078 strings) --- OsmAnd/res/values-nl/strings.xml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 2e22e4b556..20566b0d37 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -829,7 +829,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).Kleurschema voor wegen ZXing Barcode Scanner app is niet geïnstalleerd. In Google Play zoeken? Sluit changeset - Gebruik OsmAnd in veilige modus (gebruikt langzamere Android-code in plaats van native code). + Gebruik OsmAnd in veilige modus (gebruikt langzamere java-code in plaats van native C-code). Veilige modus Het programma werkt in veilige modus (uitzetten via Instellingen). OsmAnd achtergrond-service staat nog aan. Die ook uitschakelen? @@ -968,7 +968,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).Backup als OSM-wijziging Zoek straat in nabijgelegen plaatsen Volgorde van tussenpunten geoptimaliseerd. - Sorteer huis-aan-huis route + Sorteer kortste afstand Kies eerst een plaats of straat Als bestemming instellen Bestemming %1$s @@ -1310,7 +1310,7 @@ Wil je een nieuwe map maken op de toegestane locatie en de OsmAnd-bestanden daar Updates beschikbaar voor %1$s kaart(en) Alle bestanden zijn bijgewerkt Gebruik OpenGL - Gebruik OpenGL hardware-acceleratie weergave (gebruikt mogelijk meer stroom en werkt mogelijk niet op oudere apparaten). + Gebruik snelle hardware-gebaseerde OpenGL weergave (gebruikt mogelijk meer stroom en werkt mogelijk niet op oudere apparaten). Er is geen alternatieve weg gevonden Downloaden mislukt. Controleer de internetverbinding. Alle downloads @@ -1411,7 +1411,7 @@ Wil je een nieuwe map maken op de toegestane locatie en de OsmAnd-bestanden daar Uit Vorige Volgende - Inschakelen + Activeer Schakel uit Ingeschakeld Uitgeschakeld @@ -1436,7 +1436,7 @@ Wil je een nieuwe map maken op de toegestane locatie en de OsmAnd-bestanden daar Verwijder alles Deel Voeg toe - Toepassen + Pas toe Start Stop Importeer @@ -1845,7 +1845,7 @@ Lengtegraad:\t\t%2$s Je kan gedownloade updates verwijderen en terugkeren naar de originele kaart Periode toevoegen Weg geblokkeerd - Selecteer + Kies Verslag over Gegevens niet beschikbaar Ondergrondse objecten @@ -2640,7 +2640,7 @@ voor Gebied: %1$s x %2$s POI-namen Zonder naam Wat is dit hier: - Openen vanaf + Geopend vanaf Geopend tot Sluit om Gaat open om @@ -2987,7 +2987,7 @@ voor Gebied: %1$s x %2$s Icoon Tik nogmaals om de kaartoriëntatie te wijzigen Standaardsnelheid - Instellingen aanpassen van standaard snelheden + Standaard snelheden instellingen aanpassen Stel min/max snelheid in Vastgelopen Monowheel, Hoverboard @@ -3278,4 +3278,5 @@ voor Gebied: %1$s x %2$s Netwerk knooppunten Voeg nieuw profiel toe \'%1$s\'\? Sla (richting) naar elk trackpunt op tijdens het opnemen. + Richting toevoegen \ No newline at end of file From 9c35840957ce48c4bbadd84b2d184bc207a14deb Mon Sep 17 00:00:00 2001 From: ace shadow Date: Fri, 6 Dec 2019 22:28:25 +0000 Subject: [PATCH 37/61] Translated using Weblate (Slovak) Currently translated at 87.7% (2700 of 3078 strings) --- OsmAnd/res/values-sk/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 43e81f2a81..249bf82965 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3385,4 +3385,7 @@ Zodpovedá oblasti: %1$s x %2$s Vypnúť Nový modul pridaný Spojiť úseky + Pridať nový profil \'%1$s\'\? + Pridať nadpis + Pridať nadpis ku každému bodu trasy pri zázname. \ No newline at end of file From 671b2ba4ad9c13865a5adf9ab19dacd8ae846066 Mon Sep 17 00:00:00 2001 From: Franco Date: Thu, 5 Dec 2019 17:27:52 +0000 Subject: [PATCH 38/61] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index 6cad874f92..2f30494b74 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -2142,10 +2142,10 @@ Lon %2$s Nombre de la acción rápida duplicado Un botón que muestra u oculta los Favoritos en el mapa. Un botón que muestra u oculta los PDI en el mapa. - Alternar vista de Favoritos + Mostrar/ocultar Favoritos Mostrar Favoritos Ocultar Favoritos - Alternar vista de PDI + Mostrar/ocultar PDI Mostrar %1$s Ocultar %1$s Añadir una categoría @@ -3329,7 +3329,7 @@ Lon %2$s Usado %1$s GB Usado %1$s MB Usado %1$s kB - Curvas de nivel y sombreados + Curvas de nivel y sombreado Preferir caminos sin pavimentar Prefiere caminos sin pavimentar. Actualizar todos los mapas @@ -3359,11 +3359,11 @@ Lon %2$s Un botón que muestra u oculta las curvas de nivel en el mapa. Mostrar curvas de nivel Ocultar curvas de nivel - Alternar curvas de nivel + Mostrar/ocultar curvas de nivel Un botón que muestra u oculta la sombra de una colina en el mapa. - Mostrar sombreados - Ocultar sombreados - Alternar sombreados + Mostrar sombreado + Ocultar sombreado + Mostrar/ocultar sombreado Imposible iniciar el motor de habla sintetizada Simular la ubicación usando una traza GPX grabada. Exportar perfil @@ -3395,4 +3395,7 @@ Lon %2$s Apagar Nuevo complemento añadido Unir segmentos + ¿Añadir nuevo perfil «%1$s»\? + Incluir rumbo + Guarda el rumbo para cada punto de la traza durante la grabación. \ No newline at end of file From 7675ff8327ca92a43e0fe84dbd5ad7e181cd87c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Thu, 5 Dec 2019 19:26:44 +0000 Subject: [PATCH 39/61] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 0.5% (14 of 3078 strings) --- OsmAnd/res/values-nb/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index 5d704d2e1a..6a43e9bc84 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -3289,14 +3289,14 @@ \n \n • Flere rutingsproblemer rundt om i verden fikset \n -\n • Oppdatert grunnkartet med mer detaljert veinettverk +\n • Oppdatert grunnkart med mer detaljert veinettverk \n \n • Fikset oversvømte områder rundt om i verden. \n \n • Ski-navigasjon: Tillagt høydeprofil og rutekompleksitet i rutedetaljer \n -\n • Andre småfikser -\n +\n • Andre småfikser +\n \n Du kan bruke denne endringen på alle profilene, eller bare den nåværende. En bryter for å vise eller skjule koter på kartet. From ff82e1be6236a7c574ef7263bad31f51b8a18506 Mon Sep 17 00:00:00 2001 From: Hakuchi Date: Sat, 7 Dec 2019 12:12:24 +0000 Subject: [PATCH 40/61] Translated using Weblate (German) Currently translated at 100.0% (3748 of 3748 strings) --- OsmAnd/res/values-de/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-de/phrases.xml b/OsmAnd/res/values-de/phrases.xml index 539af75934..16deab90be 100644 --- a/OsmAnd/res/values-de/phrases.xml +++ b/OsmAnd/res/values-de/phrases.xml @@ -3764,7 +3764,7 @@ Freibad Klostertyp: Konvent Klostertyp: Kanoniker - Klostertyp: Regularkleriker + Klostertyp: Ordenspriester Freizeit- und Erholungsheim Geschlecht der Gemeinschaft: weiblich Geschlecht der Gemeinschaft: männlich From 238267ace1f9b881f95ffbaf18aa2051f08c034a Mon Sep 17 00:00:00 2001 From: Verdulo Date: Sat, 7 Dec 2019 22:23:35 +0000 Subject: [PATCH 41/61] Translated using Weblate (Esperanto) Currently translated at 100.0% (3748 of 3748 strings) --- OsmAnd/res/values-eo/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml index 0da9e0d15a..3999e72e74 100644 --- a/OsmAnd/res/values-eo/phrases.xml +++ b/OsmAnd/res/values-eo/phrases.xml @@ -2561,7 +2561,7 @@ Muntita sur: arbo Muntita sur: piedestalo Muntita sur: planko - Muntita sur: anonctabulego + Muntita sur: reklam‑tabulego Muntita sur: plafono Muntita sur: tegmento Muntita sur: pendigita From 037df8a334f8ae5120c16ad5079f604032ea09ce Mon Sep 17 00:00:00 2001 From: Vadim Nekhai Date: Thu, 5 Dec 2019 22:54:55 +0000 Subject: [PATCH 42/61] Translated using Weblate (Russian) Currently translated at 89.2% (3344 of 3748 strings) --- OsmAnd/res/values-ru/phrases.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index 9f84a9315f..fccf8b519e 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -2234,8 +2234,8 @@ Островок (препятствие) Место для хранения лодок Калитка - Фейсбук;Facebook - Твиттер;Twitter + Facebook + Twitter Скайп;Skype Стиль сада: кухня Туалет: общественный @@ -3494,5 +3494,5 @@ Пол сообщества: мужской Пол сообщества: мужской и женский Могила - Реддит;Reddit + Reddit \ No newline at end of file From 6471080cacd845aa4dba88c48a2eb0f683f46798 Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Sat, 7 Dec 2019 10:14:59 +0000 Subject: [PATCH 43/61] Translated using Weblate (Arabic) Currently translated at 43.2% (1618 of 3748 strings) --- OsmAnd/res/values-ar/phrases.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-ar/phrases.xml b/OsmAnd/res/values-ar/phrases.xml index 3dc12177c2..0486a9f665 100644 --- a/OsmAnd/res/values-ar/phrases.xml +++ b/OsmAnd/res/values-ar/phrases.xml @@ -1622,4 +1622,5 @@ ترام عبّارة مصدر الطاقة: الكتلة الحيوية + موقع Reddit \ No newline at end of file From 61f6ef4c1731cd2d27fd05ed8b6e9e4a7b54ddbd Mon Sep 17 00:00:00 2001 From: Rpnpif Date: Fri, 6 Dec 2019 19:19:21 +0000 Subject: [PATCH 44/61] Translated using Weblate (French) Currently translated at 97.9% (3670 of 3748 strings) --- OsmAnd/res/values-fr/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index 1efd6a4222..1fc70799e3 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -3688,4 +3688,6 @@ Type Plein-air Lac + Accès à cheval : forestiers seuls + Accès piétonnier : riverains \ No newline at end of file From 4265ac7f70fda4144e8ebafff8736e3f68e99847 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Tue, 10 Dec 2019 14:37:24 +0000 Subject: [PATCH 45/61] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (249 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/pt_BR/ --- OsmAnd-telegram/res/values-pt-rBR/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-pt-rBR/strings.xml b/OsmAnd-telegram/res/values-pt-rBR/strings.xml index 15d2cbb4a3..2dcd68b7d6 100644 --- a/OsmAnd-telegram/res/values-pt-rBR/strings.xml +++ b/OsmAnd-telegram/res/values-pt-rBR/strings.xml @@ -198,7 +198,7 @@ Telegram Telegrama (o aplicativo de mensagens) é usado para conectar e se comunicar com as pessoas. OsmAnd tracker é um dos clientes que usam a Plataforma aberta do Telegram . Seus contatos podem usar qualquer outro cliente Telegram. - Ao clicar em continuar, você concorda com as condições da política de privacidade do Telegram e da política de privacidade da OsmAnd. + Ao clicar em \"Continuar\", você concorda com as condições da política de privacidade do Telegram- e OsmAnd. Aceitar Política de privacidade do Telegram "Política de privacidade do OsmAnd " @@ -250,4 +250,5 @@ Aplicar Selecionar a hora para exibir Data de início - fim + Mensagens salvas \ No newline at end of file From d77cea2dee769cc7b86355a59bb8005fa6f23edc Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Wed, 11 Dec 2019 09:20:40 +0000 Subject: [PATCH 46/61] Translated using Weblate (Japanese) Currently translated at 92.8% (231 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/ja/ --- OsmAnd-telegram/res/values-ja/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-ja/strings.xml b/OsmAnd-telegram/res/values-ja/strings.xml index 9efa11e7f7..f645580df0 100644 --- a/OsmAnd-telegram/res/values-ja/strings.xml +++ b/OsmAnd-telegram/res/values-ja/strings.xml @@ -162,7 +162,7 @@ 現在地の共有をおこなうには、Telegramアカウントが必要です。 Telegramをインストールしてアカウントを設定してください。 その後、このアプリを使用できます。 - すべて + 全て OFF 登録済みのTelegramアカウントと電話番号が必要です。 私はTelegramアカウントを持っていません @@ -246,4 +246,5 @@ 現在地 今現在 タイムライン + 分/キロメートル \ No newline at end of file From 0c96473f93e131fd5fbf777ba0d9a808e127e965 Mon Sep 17 00:00:00 2001 From: WaldiS Date: Thu, 5 Dec 2019 17:38:55 +0000 Subject: [PATCH 47/61] Translated using Weblate (Polish) Currently translated at 100.0% (249 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/pl/ --- OsmAnd-telegram/res/values-pl/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-pl/strings.xml b/OsmAnd-telegram/res/values-pl/strings.xml index f08d5045c2..dbbaa9a17c 100644 --- a/OsmAnd-telegram/res/values-pl/strings.xml +++ b/OsmAnd-telegram/res/values-pl/strings.xml @@ -203,7 +203,7 @@ Telegram Telegram (aplikacji do wysyłania wiadomości) jest używana do łączenia i komunikowania się z ludźmi. OsmAnd Tracker to jeden z klientów używających otwartej platformy Telegramu. Twoje kontrakty mogą używać innych klientów Telegramu. - Klikając \"Kontynuuj\" zgadzam się z warunkami Polityki Prywatności Telegramu i Polityki Prywatności OsmAnd. + Klikając \"Kontynuuj\" zgadzasz się na warunki polityki prywatności Telegramu i OsmAnd. Akceptuj Polityka prywatności Telegramu Polityka prywatności OsmAnd @@ -250,4 +250,5 @@ Start Wybierz czas wyświetlania Daty rozpoczęcia i zakończenia + Zapisane wiadomości \ No newline at end of file From db893c443d50a4894e98cc308e8c1d6fadcd9fae Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Fri, 6 Dec 2019 08:04:42 +0000 Subject: [PATCH 48/61] Translated using Weblate (Arabic) Currently translated at 26.1% (65 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/ar/ --- OsmAnd-telegram/res/values-ar/strings.xml | 56 +++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/OsmAnd-telegram/res/values-ar/strings.xml b/OsmAnd-telegram/res/values-ar/strings.xml index 2f6edf9ab5..aecc2f425b 100644 --- a/OsmAnd-telegram/res/values-ar/strings.xml +++ b/OsmAnd-telegram/res/values-ar/strings.xml @@ -1,7 +1,7 @@ كم/س - حسناً + موافق الجدول الزمني ميزة متوفرة الآن مجانا. تعطيل العرض تسجيل الموقع ممكن @@ -10,10 +10,60 @@ تيليجرام يستخدم تيليجرام (تطبيق المراسلة) للاتصال والتواصل مع الأشخاص. لاحقا - وضع الخلفية + حالة وضع السكون م.بح/س ميل بحري في الساعة (عقدة) - كم/م + كم ، متر نهاية الرسائل المحفوظة + تحديث + متوسط الارتفاع + متوسط السرعة + إدارة الخرائط + إضافة + إخفاء + الحالة + تعطيل + حفظ + الاسم + بالاسم + فرز + مخرج + إغلاق + الكل + إيقاف + تثبيت + مشاركة + العودة + كلمة المرور + استمرار + إلغاء + الإعدادات + المسافة + ياردة + قدم + ميل + كلم + م + ميل بحري + د/م + د/كم + م/ث + ميل ساعة + كم/س + ميل ساعة + م/ث + دقيقة/كم + دقيقة/ميل + ميل ، قدم + ميل ، ياردة + ميل بحري + ميل ، متر + بحث + الارتفاع + تفعيل + تحديد + بدء + تطبيق + مفعل \ No newline at end of file From 72a1a4e975ffb15c4f17d8d098ac8f5fff1fb1a3 Mon Sep 17 00:00:00 2001 From: "H. van der Wolf" Date: Sat, 7 Dec 2019 14:04:32 +0000 Subject: [PATCH 49/61] Translated using Weblate (Dutch) Currently translated at 96.4% (240 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/nl/ --- OsmAnd-telegram/res/values-nl/strings.xml | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/OsmAnd-telegram/res/values-nl/strings.xml b/OsmAnd-telegram/res/values-nl/strings.xml index f8e2432000..b268edcab2 100644 --- a/OsmAnd-telegram/res/values-nl/strings.xml +++ b/OsmAnd-telegram/res/values-nl/strings.xml @@ -213,4 +213,41 @@ Mijn locatie Nu live Tijdlijn + Tijd van delen + Zet zichtbare tijd voor iedereen + Zichtbare tijd voor iedereen + Richting + Nauwkeurigheid + Hoogte + Richting + Sleutel + Wachtwoord + Gebruikersnaam + (Gebruiker)gegevens + Poort + Server + Verbinding + Activeer + Proxy soort + Verbonden + Niet verbonden + Proxy instellingen + Proxy + Privacy + Kies + Minimale logging-afstand + Filter: minimale afstand voordat een nieuw punt gelogd wordt + Minimale logging-nauwkeurigheid + Filter: geen logging tenzij de nauwkeurigheid bereikt is + Minimale logging-snelheid + Filter: geen logging beneden geselecteerde snelheid + GPX instellingen + We hebben geen data verzameld op de geselecteerde dag + Geen data + Eind + Start + Pas toe + Kies te tonen tijd + Start — Eind datum + Bewaarde gesprekken \ No newline at end of file From 9614d9ae5f81bb17f83602e8a3e44b0d1262cd3f Mon Sep 17 00:00:00 2001 From: Franco Date: Thu, 5 Dec 2019 17:33:18 +0000 Subject: [PATCH 50/61] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (249 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/es_US/ --- OsmAnd-telegram/res/values-es-rUS/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-es-rUS/strings.xml b/OsmAnd-telegram/res/values-es-rUS/strings.xml index ad8d8bbcd3..fe310815c5 100644 --- a/OsmAnd-telegram/res/values-es-rUS/strings.xml +++ b/OsmAnd-telegram/res/values-es-rUS/strings.xml @@ -197,7 +197,7 @@ Telegram Telegram (la aplicación de mensajería) se utiliza para conectar y comunicar a las personas. El rastreador de OsmAnd (en inglés como «OsmAnd Tracker»), es uno de los clientes que utiliza la plataforma abierta de Telegram. Sus contactos pueden utilizar cualquier otro cliente de Telegram. - Al pulsar en continuar, acepta las Políticas de Privacidad de Telegram y de OsmAnd. + Al pulsar en «Continuar», acepta las Políticas de Privacidad de Telegram y de OsmAnd. Aceptar Política de privacidad de Telegram Política de privacidad de OsmAnd @@ -249,4 +249,5 @@ Aplicar Elige la hora de visualización Fecha de inicio — fin + Mensajes guardados \ No newline at end of file From 65f806b5ae468e27ba82c0963b8dac9b766dbc06 Mon Sep 17 00:00:00 2001 From: IgorEliezer Date: Wed, 11 Dec 2019 10:44:19 +0000 Subject: [PATCH 51/61] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3078 of 3078 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index ad8104712d..ade1f0bed6 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -663,7 +663,7 @@ Pôr do Sol: %2$s Especificar o endereço Selecionar favorito Modificações no OSM - Camadas de relevo + Camada de sombras de relevo Informação de GPS Hora de chegada marcado From 477e186ef3ce31d135676882e156fe01caf27ae3 Mon Sep 17 00:00:00 2001 From: Athoss Date: Wed, 11 Dec 2019 12:02:45 +0000 Subject: [PATCH 52/61] Translated using Weblate (Hungarian) Currently translated at 85.9% (2644 of 3078 strings) --- OsmAnd/res/values-hu/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index d9f723a055..9807e2edcc 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -1478,7 +1478,7 @@ Hosszúság: %2$s Kijelölés megszüntetése Összes kijelölés megszüntetése Váratlan hiba - {0} művelet + {0}. művelet Összecsukás Videó Fénykép From 84dbe948ac46eb3214b51cf5d7ee3b92af5821e3 Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Wed, 11 Dec 2019 11:35:16 +0000 Subject: [PATCH 53/61] Translated using Weblate (Japanese) Currently translated at 92.4% (230 of 249 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/ja/ --- OsmAnd-telegram/res/values-ja/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-ja/strings.xml b/OsmAnd-telegram/res/values-ja/strings.xml index f645580df0..287a51c282 100644 --- a/OsmAnd-telegram/res/values-ja/strings.xml +++ b/OsmAnd-telegram/res/values-ja/strings.xml @@ -226,7 +226,7 @@ 海里 min/m min/km - 海里/h + ノット m/s km/h mph From 88b3eb5686ad1d79f0ed987d0bdebb2fc1734bed Mon Sep 17 00:00:00 2001 From: max-klaus Date: Wed, 11 Dec 2019 16:07:55 +0300 Subject: [PATCH 54/61] Fixes --- OsmAnd/res/values/strings.xml | 3 +- .../osmand/data/PersonalFavouritePoint.java | 18 +- .../net/osmand/plus/FavouritesDbHelper.java | 184 +++++++++--------- .../src/net/osmand/plus/OsmandSettings.java | 56 ++---- .../activities/FavoritesTreeFragment.java | 10 +- .../plus/base/FavoriteImageDrawable.java | 20 +- .../plus/dashboard/DashFavoritesFragment.java | 5 + .../FavouritesBottomSheetMenuFragment.java | 9 +- ...ouritesGroupBottomSheetDialogFragment.java | 6 + .../AddPointBottomSheetDialog.java | 58 ++++-- .../MapRouteInfoMenu.java | 55 ++++-- .../MapRouteInfoMenuFragment.java | 5 +- .../plus/search/QuickSearchListFragment.java | 13 +- .../osmand/plus/views/MapControlsLayer.java | 2 +- 14 files changed, 247 insertions(+), 197 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 7026a30e4c..e3aa45cb6a 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,7 +11,8 @@ Thx - Hardy --> - %1$s• %2$s + %1$s • %2$s + %1$s, %2$s Personal Add new profile \'%1$s\'? Include heading diff --git a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java index f38694c11b..1b1a28df1e 100644 --- a/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java +++ b/OsmAnd/src/net/osmand/data/PersonalFavouritePoint.java @@ -25,13 +25,13 @@ public class PersonalFavouritePoint extends FavouritePoint { private int resId; private int order; @DrawableRes - private int iconID; + private int iconId; - PointType(@NonNull String typeName, @StringRes int resId, int order, @DrawableRes int iconID) { + PointType(@NonNull String typeName, @StringRes int resId, int order, @DrawableRes int iconId) { this.typeName = typeName; this.resId = resId; this.order = order; - this.iconID = iconID; + this.iconId = iconId; } public String getName() { @@ -43,16 +43,16 @@ public class PersonalFavouritePoint extends FavouritePoint { } public static PointType valueOfTypeName(@NonNull String typeName) { - - for (PointType pt:values()) { - if (pt.typeName.equals(typeName)) - return pt; + for (PointType pt : values()) { + if (pt.typeName.equals(typeName)) { + return pt; + } } throw new IllegalArgumentException("Illegal PointType typeName"); } - public int getIconID() { - return iconID; + public int getIconId() { + return iconId; } public String getHumanString(@NonNull Context ctx) { diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 80fd50524a..4011c0ebeb 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -3,15 +3,17 @@ package net.osmand.plus; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; import android.support.v7.app.AlertDialog; import net.osmand.GPXUtilities; +import net.osmand.GPXUtilities.GPXFile; +import net.osmand.GPXUtilities.WptPt; import net.osmand.PlatformUtil; import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; -import net.osmand.GPXUtilities.GPXFile; -import net.osmand.GPXUtilities.WptPt; import net.osmand.data.PersonalFavouritePoint; +import net.osmand.plus.GeocodingLookupService.AddressLookupRequest; import net.osmand.plus.MapMarkersHelper.MapMarkersGroup; import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; @@ -31,6 +33,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import static net.osmand.data.PersonalFavouritePoint.PointType.HOME; import static net.osmand.data.PersonalFavouritePoint.PointType.PARKING; @@ -38,12 +41,9 @@ import static net.osmand.data.PersonalFavouritePoint.PointType.WORK; public class FavouritesDbHelper { - private GeocodingLookupService.AddressLookupRequest workPointRequest; - private GeocodingLookupService.AddressLookupRequest homePointRequest; - private GeocodingLookupService.AddressLookupRequest parkingPointRequest; - public interface FavoritesListener { void onFavoritesLoaded(); + void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint); } private static final org.apache.commons.logging.Log log = PlatformUtil.getLog(FavouritesDbHelper.class); @@ -63,6 +63,8 @@ public class FavouritesDbHelper { private Set listeners = new HashSet<>(); private boolean favoritesLoaded; + private Map addressRequestMap = new ConcurrentHashMap<>(); + public FavouritesDbHelper(OsmandApplication context) { this.context = context; } @@ -237,46 +239,46 @@ public class FavouritesDbHelper { return true; } - public void setHomePoint(@NonNull LatLon latLon) { + public void setHomePoint(@NonNull LatLon latLon, @Nullable String description) { FavouritePoint homePoint = getHomePoint(); if (homePoint != null) { - editFavourite(homePoint, latLon.getLatitude(), latLon.getLongitude()); + editFavourite(homePoint, latLon.getLatitude(), latLon.getLongitude(), description); } else { - FavouritePoint cachedHomePoint = new PersonalFavouritePoint(context, HOME, - latLon.getLatitude(), latLon.getLongitude()); - addFavourite(cachedHomePoint); + homePoint = new PersonalFavouritePoint(context, HOME, latLon.getLatitude(), latLon.getLongitude()); + homePoint.setDescription(description); + addFavourite(homePoint); + } + if (description == null) { + lookupAddress(homePoint); } - lookupAddressAllPersonalPoints(); } - public void setWorkPoint(@NonNull LatLon latLon) { + public void setWorkPoint(@NonNull LatLon latLon, @Nullable String description) { FavouritePoint workPoint = getWorkPoint(); if (workPoint != null) { - editFavourite(workPoint, latLon.getLatitude(), latLon.getLongitude()); + editFavourite(workPoint, latLon.getLatitude(), latLon.getLongitude(), description); } else { - FavouritePoint cachedWorkPoint = new PersonalFavouritePoint(context, WORK, - latLon.getLatitude(), latLon.getLongitude()); - addFavourite(cachedWorkPoint); + workPoint = new PersonalFavouritePoint(context, WORK, latLon.getLatitude(), latLon.getLongitude()); + workPoint.setDescription(description); + addFavourite(workPoint); + } + if (description == null) { + lookupAddress(workPoint); } - lookupAddressAllPersonalPoints(); } public void setParkingPoint(@NonNull LatLon latLon) { FavouritePoint parkingPoint = getParkingPoint(); if (parkingPoint != null) { - editFavourite(parkingPoint, latLon.getLatitude(), latLon.getLongitude()); + editFavourite(parkingPoint, latLon.getLatitude(), latLon.getLongitude(), null); } else { - FavouritePoint cachedParkingPoint = new PersonalFavouritePoint(context, PARKING, - latLon.getLatitude(), latLon.getLongitude()); - addFavourite(cachedParkingPoint); + parkingPoint = new PersonalFavouritePoint(context, PARKING, latLon.getLatitude(), latLon.getLongitude()); + addFavourite(parkingPoint); } - lookupAddressAllPersonalPoints(); + lookupAddress(parkingPoint); } public boolean addFavourite(FavouritePoint p) { - if (p instanceof PersonalFavouritePoint) { - cachedPersonalFavoritePoints.add(p); - } return addFavourite(p, true); } @@ -293,6 +295,9 @@ public class FavouritesDbHelper { group.points.add(p); cachedFavoritePoints.add(p); } + if (p.isPersonal()) { + cachedPersonalFavoritePoints.add(p); + } if (saveImmediately) { sortAll(); saveCurrentPointsIntoFile(); @@ -304,87 +309,54 @@ public class FavouritesDbHelper { public void lookupAddressAllPersonalPoints() { if (!context.isApplicationInitializing()) { - lookupAddressForHomePoint(); - lookupAddressForWorkPoint(); - lookupAddressForParkingPoint(); + FavouritePoint workPoint = getWorkPoint(); + if (workPoint != null) { + lookupAddress(workPoint); + } + FavouritePoint homePoint = getHomePoint(); + if (homePoint != null) { + lookupAddress(homePoint); + } + FavouritePoint parkingPoint = getParkingPoint(); + if (parkingPoint != null) { + lookupAddress(parkingPoint); + } } } - private void lookupAddressForWorkPoint() { - final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); - final FavouritePoint workPoint = getWorkPoint(); - if (workPoint != null && (workPointRequest == null || - !workPointRequest.getLatLon().equals(new LatLon(workPoint.getLatitude(), workPoint.getLongitude())))) { - cancelWorkPointAddressRequest(); - workPointRequest = new GeocodingLookupService.AddressLookupRequest( - new LatLon(workPoint.getLatitude(), workPoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { + private void lookupAddress(@NonNull final FavouritePoint p) { + AddressLookupRequest request = addressRequestMap.get(p); + double latitude = p.getLatitude(); + double longitude = p.getLongitude(); + if (request == null || !request.getLatLon().equals(new LatLon(latitude, longitude))) { + cancelAddressRequest(p); + request = new AddressLookupRequest(new LatLon(latitude, longitude), + new GeocodingLookupService.OnAddressLookupResult() { @Override public void geocodingDone(String address) { - workPointRequest = null; - workPoint.setDescription(address); - targetPointsHelper.updateRouteAndRefresh(false); + addressRequestMap.remove(p); + editFavouriteDescription(p, address); + context.runInUIThread(new Runnable() { + @Override + public void run() { + for (FavoritesListener listener : listeners) { + listener.onFavoriteAddressResolved(p); + } + } + }); + } }, null); - context.getGeocodingLookupService().lookupAddress(workPointRequest); + addressRequestMap.put(p, request); + context.getGeocodingLookupService().lookupAddress(request); } } - private void lookupAddressForHomePoint() { - final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); - final FavouritePoint homePoint = getHomePoint(); - if (homePoint != null && (homePointRequest == null || - !homePointRequest.getLatLon().equals(new LatLon(homePoint.getLatitude(), homePoint.getLongitude())))) { - cancelHomePointAddressRequest(); - homePointRequest = new GeocodingLookupService.AddressLookupRequest( - new LatLon(homePoint.getLatitude(), homePoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { - @Override - public void geocodingDone(String address) { - homePointRequest = null; - homePoint.setDescription(address); - targetPointsHelper.updateRouteAndRefresh(false); - } - }, null); - context.getGeocodingLookupService().lookupAddress(homePointRequest); - } - } - - private void lookupAddressForParkingPoint() { - final TargetPointsHelper targetPointsHelper = context.getTargetPointsHelper(); - final FavouritePoint parkingPoint = getParkingPoint(); - if (parkingPoint != null && (parkingPointRequest == null || - !parkingPointRequest.getLatLon().equals(new LatLon(parkingPoint.getLatitude(), parkingPoint.getLongitude())))) { - cancelParkingPointAddressRequest(); - parkingPointRequest = new GeocodingLookupService.AddressLookupRequest( - new LatLon(parkingPoint.getLatitude(), parkingPoint.getLongitude()), new GeocodingLookupService.OnAddressLookupResult() { - @Override - public void geocodingDone(String address) { - parkingPointRequest = null; - parkingPoint.setDescription(address); - targetPointsHelper.updateRouteAndRefresh(false); - } - }, null); - context.getGeocodingLookupService().lookupAddress(parkingPointRequest); - } - } - - private void cancelHomePointAddressRequest() { - if (homePointRequest != null) { - context.getGeocodingLookupService().cancel(homePointRequest); - homePointRequest = null; - } - } - - private void cancelParkingPointAddressRequest() { - if (parkingPointRequest != null) { - context.getGeocodingLookupService().cancel(parkingPointRequest); - parkingPointRequest = null; - } - } - - private void cancelWorkPointAddressRequest() { - if (workPointRequest != null) { - context.getGeocodingLookupService().cancel(workPointRequest); - workPointRequest = null; + private void cancelAddressRequest(@NonNull FavouritePoint p) { + AddressLookupRequest request = addressRequestMap.get(p); + if (request != null) { + context.getGeocodingLookupService().cancel(request); + addressRequestMap.remove(p); } } @@ -482,7 +454,15 @@ public class FavouritesDbHelper { return true; } + public boolean editFavouriteDescription(FavouritePoint p, String description) { + p.setDescription(description); + saveCurrentPointsIntoFile(); + runSyncWithMarkers(getOrCreateGroup(p, 0)); + return true; + } + public boolean editFavourite(FavouritePoint p, double lat, double lon) { + cancelAddressRequest(p); p.setLatitude(lat); p.setLongitude(lon); saveCurrentPointsIntoFile(); @@ -490,6 +470,16 @@ public class FavouritesDbHelper { return true; } + public boolean editFavourite(FavouritePoint p, double lat, double lon, String description) { + cancelAddressRequest(p); + p.setLatitude(lat); + p.setLongitude(lon); + p.setDescription(description); + saveCurrentPointsIntoFile(); + runSyncWithMarkers(getOrCreateGroup(p, 0)); + return true; + } + public void saveCurrentPointsIntoFile() { try { Map deletedInMemory = new LinkedHashMap(); diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 5738c40b0a..63432bf480 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -261,11 +261,24 @@ public class OsmandSettings { void migrateHomeWorkParkingToFavorites() { FavouritesDbHelper favorites = ctx.getFavorites(); - if (getHomePoint() != null) { - favorites.setHomePoint(getHomePoint()); + + LatLon homePoint = null; + float lat = settingsAPI.getFloat(globalPreferences, "home_point_lat", 0); + float lon = settingsAPI.getFloat(globalPreferences, "home_point_lon", 0); + if (lat != 0 || lon != 0) { + homePoint = new LatLon(lat, lon); } - if (getWorkPoint() != null) { - favorites.setWorkPoint(getWorkPoint()); + LatLon workPoint = null; + lat = settingsAPI.getFloat(globalPreferences, "work_point_lat", 0); + lon = settingsAPI.getFloat(globalPreferences, "work_point_lon", 0); + if (lat != 0 || lon != 0) { + workPoint = new LatLon(lat, lon); + } + if (homePoint != null) { + favorites.setHomePoint(homePoint, null); + } + if (workPoint != null) { + favorites.setWorkPoint(workPoint, null); } } @@ -2428,13 +2441,6 @@ public class OsmandSettings { public final static String MY_LOC_POINT_LON = "my_loc_point_lon"; public final static String MY_LOC_POINT_DESCRIPTION = "my_loc_point_description"; - public final static String HOME_POINT_LAT = "home_point_lat"; - public final static String HOME_POINT_LON = "home_point_lon"; - public final static String HOME_POINT_DESCRIPTION = "home_point_description"; - public final static String WORK_POINT_LAT = "work_point_lat"; - public final static String WORK_POINT_LON = "work_point_lon"; - public final static String WORK_POINT_DESCRIPTION = "work_point_description"; - private static final String IMPASSABLE_ROAD_POINTS = "impassable_road_points"; private static final String IMPASSABLE_ROADS_DESCRIPTIONS = "impassable_roads_descriptions"; private ImpassableRoadsStorage mImpassableRoadsStorage = new ImpassableRoadsStorage(); @@ -2549,34 +2555,6 @@ public class OsmandSettings { settingsAPI.getString(globalPreferences, POINT_NAVIGATE_DESCRIPTION_BACKUP, ""), getPointToNavigate()); } - public LatLon getHomePoint() { - float lat = settingsAPI.getFloat(globalPreferences, HOME_POINT_LAT, 0); - float lon = settingsAPI.getFloat(globalPreferences, HOME_POINT_LON, 0); - if (lat == 0 && lon == 0) { - return null; - } - return new LatLon(lat, lon); - } - - public PointDescription getHomePointDescription() { - return PointDescription.deserializeFromString( - settingsAPI.getString(globalPreferences, HOME_POINT_DESCRIPTION, ""), getHomePoint()); - } - - public LatLon getWorkPoint() { - float lat = settingsAPI.getFloat(globalPreferences, WORK_POINT_LAT, 0); - float lon = settingsAPI.getFloat(globalPreferences, WORK_POINT_LON, 0); - if (lat == 0 && lon == 0) { - return null; - } - return new LatLon(lat, lon); - } - - public PointDescription getWorkPointDescription() { - return PointDescription.deserializeFromString( - settingsAPI.getString(globalPreferences, WORK_POINT_DESCRIPTION, ""), getWorkPoint()); - } - public LatLon getMyLocationToStart() { float lat = settingsAPI.getFloat(globalPreferences, MY_LOC_POINT_LAT, 0); float lon = settingsAPI.getFloat(globalPreferences, MY_LOC_POINT_LON, 0); diff --git a/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java b/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java index f975607dae..27e85246d8 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavoritesTreeFragment.java @@ -116,6 +116,10 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen public void onFavoritesLoaded() { favouritesAdapter.synchronizeGroups(); } + + @Override + public void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint) { + } }); } setAdapter(favouritesAdapter); @@ -748,8 +752,8 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen for (FavoriteGroup key : gs) { boolean empty = true; if (flt == null || flt.contains(key)) { - empty = false; - favoriteGroups.put(key, new ArrayList<>(key.points)); + empty = false; + favoriteGroups.put(key, new ArrayList<>(key.points)); } else { ArrayList list = new ArrayList<>(); for (FavouritePoint p : key.points) { @@ -947,7 +951,7 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen name.setTextColor(getResources().getColor(visible ? enabledColor : disabledColor)); distanceText.setText(distance); if (model instanceof PersonalFavouritePoint) { - String distanceWithAddress = String.format(getString(R.string.distance_and_address), distance, model.getDescription() != null ? model.getDescription() : ""); + String distanceWithAddress = String.format(getString(R.string.distance_and_address), distance.trim(), model.getDescription() != null ? model.getDescription() : ""); distanceText.setText(distanceWithAddress); icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), visible ? model.getColor() : getResources().getColor(disabledIconColor), false, diff --git a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java index de10cf96e2..95bac4457f 100644 --- a/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java +++ b/OsmAnd/src/net/osmand/plus/base/FavoriteImageDrawable.java @@ -42,14 +42,14 @@ public class FavoriteImageDrawable extends Drawable { private Paint paintInnerCircle = new Paint(); private ColorFilter colorFilter; private ColorFilter grayFilter; - private Drawable personalPointBitmaps; + private Drawable personalPointBitmap; public FavoriteImageDrawable(Context ctx, int color, boolean withShadow, boolean synced, PointType pointType) { this.withShadow = withShadow; this.synced = synced; Resources res = ctx.getResources(); if (pointType != null) { - personalPointBitmaps = UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, pointType.getIconID(), null), + personalPointBitmap = UiUtilities.tintDrawable(ResourcesCompat.getDrawable(res, pointType.getIconId(), null), ContextCompat.getColor(ctx, R.color.icon_color_default_light)); } int col = color == 0 || color == Color.BLACK ? res.getColor(R.color.color_favorite) : color; @@ -80,8 +80,8 @@ public class FavoriteImageDrawable extends Drawable { //bs.inset((int) (4 * density), (int) (4 * density)); bs.inset(bs.width() / 4, bs.height() / 4); listDrawable.setBounds(bs); - if (personalPointBitmaps != null) { - personalPointBitmaps.setBounds(bounds); + if (personalPointBitmap != null) { + personalPointBitmap.setBounds(bounds); } } } @@ -108,8 +108,8 @@ public class FavoriteImageDrawable extends Drawable { } else if (withShadow) { canvas.drawBitmap(favBackground, bs.exactCenterX() - favBackground.getWidth() / 2f, bs.exactCenterY() - favBackground.getHeight() / 2f, paintBackground); canvas.drawBitmap(favIcon, bs.exactCenterX() - favIcon.getWidth() / 2f, bs.exactCenterY() - favIcon.getHeight() / 2f, paintIcon); - } else if (personalPointBitmaps != null) { - personalPointBitmaps.draw(canvas); + } else if (personalPointBitmap != null) { + personalPointBitmap.draw(canvas); } else { int min = Math.min(bs.width(), bs.height()); int r = (min * 4 / 10); @@ -131,7 +131,7 @@ public class FavoriteImageDrawable extends Drawable { @Override public int getOpacity() { - return PixelFormat.UNKNOWN; + return 0; } @Override @@ -147,11 +147,11 @@ public class FavoriteImageDrawable extends Drawable { private static TreeMap cache = new TreeMap<>(); public static FavoriteImageDrawable getOrCreate(Context a, int color, boolean withShadow, boolean synced, PointType pointType) { - int order = 0; + int pointTypeId = 0; if (pointType != null) - order = pointType.getOrder(); + pointTypeId = pointType.ordinal(); color = color | 0xff000000; - int hash = (color << 4) + (withShadow ? 0b0100 : 0) + (synced ? 0b1100 : 0) + order; + int hash = (color << 4) + ((withShadow ? 1 : 0) << 2) + ((synced ? 3 : 0) << 2) + pointTypeId; FavoriteImageDrawable drawable = cache.get(hash); if (drawable == null) { drawable = new FavoriteImageDrawable(a, color, withShadow, synced, pointType); diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java index 12c1a44bf3..eee68ef3f0 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java @@ -2,6 +2,7 @@ package net.osmand.plus.dashboard; import android.graphics.Typeface; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; @@ -74,6 +75,10 @@ public class DashFavoritesFragment extends DashLocationFragment { public void onFavoritesLoaded() { setupFavorites(); } + + @Override + public void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint) { + } }); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java index 9e02b14273..0d1feb1c54 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java @@ -3,6 +3,7 @@ package net.osmand.plus.mapcontextmenu.other; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -73,6 +74,10 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag loadFavorites(); adapter.notifyDataSetChanged(); } + + @Override + public void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint) { + } }); } recyclerView = new RecyclerView(getContext()); @@ -155,10 +160,10 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag targetPointsHelper.navigateToPoint(ll, true, targetPointsHelper.getIntermediatePoints().size(), point.getPointDescription()); break; case HOME: - favorites.setHomePoint(ll); + favorites.setHomePoint(ll, null); break; case WORK: - favorites.setWorkPoint(ll); + favorites.setWorkPoint(ll, null); break; } MapRouteInfoMenu routeMenu = getMapRouteInfoMenu(); diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/AddFavouritesGroupBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/AddFavouritesGroupBottomSheetDialogFragment.java index 3ffd755741..d5737a3b1e 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/AddFavouritesGroupBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/AddFavouritesGroupBottomSheetDialogFragment.java @@ -1,7 +1,9 @@ package net.osmand.plus.mapmarkers; import android.os.Bundle; +import android.support.annotation.NonNull; +import net.osmand.data.FavouritePoint; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.FavouritesDbHelper.FavoritesListener; @@ -38,6 +40,10 @@ public class AddFavouritesGroupBottomSheetDialogFragment extends AddGroupBottomS adapter.notifyDataSetChanged(); } } + + @Override + public void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint) { + } }); } return new FavouritesGroupsAdapter(getContext(), favouritesDbHelper.getFavoriteGroups()); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java index 772fafb737..1930747f13 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java @@ -5,6 +5,7 @@ import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; @@ -250,12 +251,12 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { targetPointsHelper.navigateToPoint(ll, true, targetPointsHelper.getIntermediatePoints().size()); break; case HOME: - app.showShortToastMessage(R.string.add_intermediate_point); - app.getFavorites().setHomePoint(ll); + app.showShortToastMessage(R.string.add_home); + app.getFavorites().setHomePoint(ll, null); break; case WORK: - app.showShortToastMessage(R.string.add_intermediate_point); - app.getFavorites().setWorkPoint(ll); + app.showShortToastMessage(R.string.add_work); + app.getFavorites().setWorkPoint(ll, null); break; } } else if (pointType == PointType.START) { @@ -392,14 +393,24 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { } else { addMainScrollItems(items, helper); helper.addListener(new FavouritesDbHelper.FavoritesListener() { - @Override - public void onFavoritesLoaded() { + + private void reloadFavoritesItems() { MapActivity mapActivity = (MapActivity) getActivity(); if (mapActivity != null) { loadFavoritesItems(adapter.getItems(), helper); adapter.notifyDataSetChanged(); } } + + @Override + public void onFavoritesLoaded() { + reloadFavoritesItems(); + } + + @Override + public void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint) { + reloadFavoritesItems(); + } }); } BaseBottomSheetItem scrollItem = new HorizontalRecyclerBottomSheetItem.Builder() @@ -443,6 +454,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { dismiss(); } } else { + FavouritesDbHelper favorites = requiredMyApplication().getFavorites(); switch (pointType) { case START: helper.setStartPoint(ll, true, name); @@ -453,6 +465,15 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { case INTERMEDIATE: helper.navigateToPoint(ll, true, helper.getIntermediatePoints().size(), name); break; + case HOME: + favorites.setHomePoint(ll, null); + break; + case WORK: + favorites.setWorkPoint(ll, null); + break; + case PARKING: + favorites.setParkingPoint(ll); + break; } dismiss(); } @@ -598,8 +619,11 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { private class FavoritesItemsAdapter extends ScrollItemsAdapter { + private FavouritesDbHelper favorites; + FavoritesItemsAdapter(OsmandApplication app, List items) { super(app, items); + favorites = app.getFavorites(); } @NonNull @@ -634,11 +658,9 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { favoriteViewHolder.description.setVisibility(View.GONE); } else { if (item instanceof PointType) { - PersonalFavouritePoint.PointType pointType = PersonalFavouritePoint.PointType.valueOf(((PointType) item).name()); - final FavouritesDbHelper favorites = app.getFavorites(); FavouritePoint point = null; boolean light = app.getSettings().isLightContent(); - int disabledIconColor = light ? R.color.icon_color_default_light : R.color.icon_color_default_dark; + int iconColor = light ? R.color.icon_color_default_light : R.color.icon_color_default_dark; if (item == PointType.HOME) { point = favorites.getHomePoint(); } else if (item == PointType.WORK) { @@ -646,12 +668,18 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { } else if (item == PointType.PARKING) { point = favorites.getParkingPoint(); } - favoriteViewHolder.icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), - getResources().getColor(disabledIconColor), false, pointType)); - favoriteViewHolder.title.setText(point.getName()); - favoriteViewHolder.description.setText(point != null - ? point.getPointDescription().getSimpleName(app, false) - : getString(R.string.shared_string_add)); + Drawable icon = null; + String title = ""; + String description = ""; + if (point != null) { + PersonalFavouritePoint personalPoint = (PersonalFavouritePoint) point; + icon = app.getUIUtilities().getIcon(personalPoint.getType().getIconId(), iconColor); + title = point.getName(); + description = point.getDescription(); + } + favoriteViewHolder.icon.setImageDrawable(icon); + favoriteViewHolder.title.setText(title); + favoriteViewHolder.description.setText(description); } else if (item instanceof FavouritePoint) { FavouritePoint point = (FavouritePoint) getItem(position); favoriteViewHolder.title.setText(point.getName()); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java index b046047e6d..c263554288 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java @@ -19,6 +19,7 @@ import android.support.transition.Transition; import android.support.transition.TransitionListenerAdapter; import android.support.transition.TransitionManager; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v7.widget.AppCompatImageView; import android.view.View; @@ -39,11 +40,13 @@ import net.osmand.PlatformUtil; import net.osmand.StateChangedListener; import net.osmand.ValueHolder; import net.osmand.binary.RouteDataObject; +import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ApplicationMode; import net.osmand.plus.FavouritesDbHelper; +import net.osmand.plus.FavouritesDbHelper.FavoritesListener; import net.osmand.plus.GeocodingLookupService; import net.osmand.plus.GeocodingLookupService.AddressLookupRequest; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; @@ -116,7 +119,7 @@ import java.util.Set; import java.util.Stack; import java.util.TreeMap; -public class MapRouteInfoMenu implements IRouteInformationListener, CardListener { +public class MapRouteInfoMenu implements IRouteInformationListener, CardListener, FavoritesListener { private static final Log LOG = PlatformUtil.getLog(MapRouteInfoMenu.class); @@ -211,7 +214,6 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener app = mapActivity.getMyApplication(); portraitMode = AndroidUiHelper.isOrientationPortrait(mapActivity); animationsHandler = new Handler(); - mapActivity.getMyApplication().getRoutingHelper().addListener(this); } } @@ -275,10 +277,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(latlon, true, targets.getIntermediatePoints().size()); break; case HOME: - favorites.setHomePoint(latlon); + favorites.setHomePoint(latlon, null); break; case WORK: - favorites.setWorkPoint(latlon); + favorites.setWorkPoint(latlon, null); break; } if (selectFromMapWaypoints) { @@ -1785,7 +1787,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener hide(); } - public void selectAddress(String name, LatLon l, PointType pointType) { + public void selectAddress(@Nullable String name, @NonNull LatLon l, PointType pointType) { MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { PointDescription pd = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, name); @@ -1802,10 +1804,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(l, true, targets.getIntermediatePoints().size(), pd); break; case HOME: - favorites.setHomePoint(l); + favorites.setHomePoint(l, name); break; case WORK: - favorites.setWorkPoint(l); + favorites.setWorkPoint(l, name); break; } updateMenu(); @@ -1862,10 +1864,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener targets.navigateToPoint(point, true, targets.getIntermediatePoints().size(), m.getPointDescription(mapActivity)); break; case HOME: - favorites.setHomePoint(point); + favorites.setHomePoint(point, null); break; case WORK: - favorites.setWorkPoint(point); + favorites.setWorkPoint(point, null); break; } updateMenu(); @@ -2103,6 +2105,25 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener public void routeWasFinished() { } + public void onResume(Fragment fragment) { + OsmandApplication app = getApp(); + if (app != null) { + app.getRoutingHelper().addListener(this); + app.getFavorites().addListener(this); + } + addTargetPointListener(); + } + + public void onPause(Fragment fragment) { + OsmandApplication app = getApp(); + if (app != null) { + app.getRoutingHelper().removeListener(this); + app.getFavorites().removeListener(this); + } + removeTargetPointListener(); + menuCards = new ArrayList<>(); + } + public void onDismiss(Fragment fragment, int currentMenuState, Bundle arguments, boolean backPressed) { MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { @@ -2127,7 +2148,6 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener if (onDismissListener != null) { onDismissListener.onDismiss(null); } - removeTargetPointListener(); } else if (fragment instanceof ChooseRouteFragment) { routeSelected = true; MapRouteMenuStateHolder holder = new MapRouteMenuStateHolder(MapRouteMenuType.ROUTE_DETAILS, currentMenuState, fragment.getArguments()); @@ -2206,12 +2226,6 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener if (fragmentRef != null) { fragmentRef.get().dismiss(); } - OsmandApplication app = getApp(); - if (app != null) { - app.getRoutingHelper().removeListener(this); - } - removeTargetPointListener(); - menuCards = new ArrayList<>(); } public boolean needShowMenu() { @@ -2228,6 +2242,15 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener return menuBackStack.empty() ? 0 : menuBackStack.peek().getButtonImage(); } + @Override + public void onFavoritesLoaded() { + } + + @Override + public void onFavoriteAddressResolved(@NonNull FavouritePoint favouritePoint) { + updateMenu(); + } + public enum MapRouteMenuType { ROUTE_INFO, ROUTE_DETAILS diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java index b975e04f15..caa0ceeda1 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java @@ -159,13 +159,16 @@ public class MapRouteInfoMenuFragment extends ContextMenuFragment { updateRouteCalculationProgress(0); } } - menu.addTargetPointListener(); + menu.onResume(this); } } @Override public void onPause() { super.onPause(); + if (menu != null) { + menu.onPause(this); + } } @Override diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java index 079b2fc5d4..a5dacec773 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java @@ -270,9 +270,16 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment { OsmandApplication app = mapActivity.getMyApplication(); QuickSearchType searchType = dialogFragment.getSearchType(); if (searchType.isTargetPoint()) { - mapActivity.getMapLayers().getMapControlsLayer().selectAddress( - pointDescription != null ? pointDescription.getName() : null, - latitude, longitude, searchType); + String name = null; + if (pointDescription != null) { + String typeName = pointDescription.getTypeName(); + if (!Algorithms.isEmpty(typeName)) { + name = mapActivity.getString(R.string.street_city, pointDescription.getName(), typeName); + } else { + name = pointDescription.getName(); + } + } + mapActivity.getMapLayers().getMapControlsLayer().selectAddress(name, latitude, longitude, searchType); dialogFragment.dismiss(); mapActivity.getMapLayers().getMapControlsLayer().showRouteInfoMenu(); diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index f5e211230c..95bdaa26fd 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -1286,7 +1286,7 @@ public class MapControlsLayer extends OsmandMapLayer { break; } if (pointType != null) { - mapRouteInfoMenu.selectAddress(name != null ? name : "", new LatLon(latitude, longitude), pointType); + mapRouteInfoMenu.selectAddress(name, new LatLon(latitude, longitude), pointType); } } From 79367587f86181c78acf4eb9dbcf6e44976d2478 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Wed, 11 Dec 2019 16:52:56 +0300 Subject: [PATCH 55/61] Fix home/work bottom sheet --- .../AddPointBottomSheetDialog.java | 42 ++++--------------- 1 file changed, 7 insertions(+), 35 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java index 1930747f13..662425c0b4 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java @@ -362,23 +362,11 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { private void loadFavoritesItems(List items, FavouritesDbHelper helper) { items.clear(); addMainScrollItems(items, helper); - items.addAll(helper.getNonPersonalVisibleFavouritePoints()); - if (items.isEmpty()) { - items.addAll(helper.getNonPersonalFavouritePoints()); - } + items.addAll(helper.getVisibleFavouritePoints()); } private void addMainScrollItems(List items, FavouritesDbHelper favorites) { items.add(FAVORITES); - if (favorites.getHomePoint() != null) { - items.add(PointType.HOME); - } - if (favorites.getWorkPoint() != null) { - items.add(PointType.WORK); - } - if (favorites.getParkingPoint() != null) { - items.add(PointType.PARKING); - } } private void createFavoritesScrollItem() { @@ -657,31 +645,15 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { favoriteViewHolder.icon.setImageDrawable(getContentIcon(R.drawable.ic_action_fav_dark)); favoriteViewHolder.description.setVisibility(View.GONE); } else { - if (item instanceof PointType) { - FavouritePoint point = null; + if (item instanceof PersonalFavouritePoint) { + PersonalFavouritePoint point = (PersonalFavouritePoint) item; boolean light = app.getSettings().isLightContent(); int iconColor = light ? R.color.icon_color_default_light : R.color.icon_color_default_dark; - if (item == PointType.HOME) { - point = favorites.getHomePoint(); - } else if (item == PointType.WORK) { - point = favorites.getWorkPoint(); - } else if (item == PointType.PARKING) { - point = favorites.getParkingPoint(); - } - Drawable icon = null; - String title = ""; - String description = ""; - if (point != null) { - PersonalFavouritePoint personalPoint = (PersonalFavouritePoint) point; - icon = app.getUIUtilities().getIcon(personalPoint.getType().getIconId(), iconColor); - title = point.getName(); - description = point.getDescription(); - } - favoriteViewHolder.icon.setImageDrawable(icon); - favoriteViewHolder.title.setText(title); - favoriteViewHolder.description.setText(description); + favoriteViewHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(point.getType().getIconId(), iconColor)); + favoriteViewHolder.title.setText(point.getName()); + favoriteViewHolder.description.setText(point.getDescription()); } else if (item instanceof FavouritePoint) { - FavouritePoint point = (FavouritePoint) getItem(position); + FavouritePoint point = (FavouritePoint) item; favoriteViewHolder.title.setText(point.getName()); if (point.getCategory().equals("")) { favoriteViewHolder.description.setText(R.string.shared_string_favorites); From 3c2a50d40dc0156da5267fbba4b557ee31f794b4 Mon Sep 17 00:00:00 2001 From: vshcherb Date: Wed, 11 Dec 2019 15:03:32 +0100 Subject: [PATCH 56/61] Update strings.xml --- OsmAnd/res/values-ar/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 9d2c3dc7f3..edc516f431 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -1872,7 +1872,7 @@ تلوين وفق الانتماء للشبكة تلوين وفق رمز تنزه OSMC خروج - هل أنت متأكد من أنك تريد حذف الملاحظات٪ 1 $ d؟ + هل أنت متأكد من أنك تريد حذف الملاحظات ٪1$d؟ لعرض الخرائط البحرية، يجب تحميل خريطة خاصة محلياً تسجيل الموقع العام إلى ملف GPX يمكن تشغيله أو إيقافه باستخدام نافذة تسجيل GPX على الشاشة خريطة. ضبط اسم مضيف البروكسي (مثال 127.0.0.1). @@ -3315,4 +3315,4 @@ حدد الحد المسموح به لعرض السيارة على الطرق. محاكاة موقعك باستخدام مسار GPX مسجل. زر لجعل الشاشة مركز نقطة الانطلاق وحساب الطريق إلى الوجهة أو فتح مربع حوار لتحديد الوجهة إذا لم تكن علامة الوجهة علي الخريطة. - \ No newline at end of file + From 6ce4e305a5dd8da4b8114c0fcf93105062d6bb4e Mon Sep 17 00:00:00 2001 From: vshcherb Date: Wed, 11 Dec 2019 15:04:51 +0100 Subject: [PATCH 57/61] Update strings.xml --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index edc516f431..fe43edc60f 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -2280,7 +2280,7 @@ إخفاء من مستوى التكبير/التصغير يجب تحميل خريطة الخطوط المحيطية (الكنتورية) لهذه المنطقة لعرضها. العرض بدءا من مستوى التكبير - عرض مستوى التكبير:٪ 1 $ s + عرض مستوى التكبير:٪1$s استقراء موقعي لمشاهدة خطوط التضاريس على الخريطة، يجب تحميل الملحق أولاً. تمكين استقراء موقعي أثناء الفقد المؤقت للموقع وذلك لإصلاحه. From ee80da38ade1f038c3e28b509a32a450046c4ed0 Mon Sep 17 00:00:00 2001 From: vshcherb Date: Wed, 11 Dec 2019 15:05:55 +0100 Subject: [PATCH 58/61] Update strings.xml --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index fe43edc60f..9044dcdf9b 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3182,7 +3182,7 @@ حرك يدك أعلى الشاشة لتشغيلها أثناء التنقل. تحديثات الخريطة الشهرية تحديثات الخريطة كل ساعة - سيتم إرسال استعلام البحث إلى: \"%1 $ s\" ، بالاضافة إلى موقعك. لا يتم جمع المعلومات الشخصية ، فقط بيانات البحث اللازمة لتحسين البحث. + سيتم إرسال استعلام البحث إلى: \"%1$s\" ، بالاضافة إلى موقعك. لا يتم جمع المعلومات الشخصية ، فقط بيانات البحث اللازمة لتحسين البحث. لامركبة ترام تجنب مركبة الترام لا يوجد حافلات From 7c5cd7fdcea2d43bb922b7194ed24668ccdab573 Mon Sep 17 00:00:00 2001 From: vshcherb Date: Wed, 11 Dec 2019 15:07:26 +0100 Subject: [PATCH 59/61] Update strings.xml --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 9044dcdf9b..a3ae7dd39e 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3196,7 +3196,7 @@ %1$d الملفات (%2$s) موجودة بالموقع السابق \'%3$s\'. نقل الخرائط عدم النقل - المسار على الأقدام حوالي٪ 1 $ s ، وقد يكون أسرع من وسائل النقل العام + المسار على الأقدام حوالي٪1$s ، وقد يكون أسرع من وسائل النقل العام لسوء الحظ ، لم يستطع أوسماند العثور علي مسار مناسب للإعدادات الخاصة بك. حاول التنقل مشيا على الأقدام. حاول تغيير الإعدادات. From dea3828144613bd297b4ccfe4a612d8a8f87c257 Mon Sep 17 00:00:00 2001 From: vshcherb Date: Wed, 11 Dec 2019 15:08:56 +0100 Subject: [PATCH 60/61] Update strings.xml --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index a3ae7dd39e..5eb630688e 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3213,7 +3213,7 @@ حدد البيانات التي تسمح لأوسماند بمشاركتها. يساعدنا في فهم أي الخرائط من المناطق والبلدان الأكثر شعبية. يساعدنا في فهم ميزات أوسماند الأكثر شيوعا. - انقر فوق \"السماح\" إذا كنت توافق على٪ 1 $ s + انقر فوق \"السماح\" إذا كنت توافق على٪1$s الخصوصية والأمان اختر البيانات للمشاركة لا ، شكراً From affc593d784f9fcd607688ee2056d3a0674ae8ff Mon Sep 17 00:00:00 2001 From: vshcherb Date: Wed, 11 Dec 2019 15:11:33 +0100 Subject: [PATCH 61/61] Update strings.xml --- OsmAnd/res/values-ar/strings.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 5eb630688e..94a7426c6c 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3231,8 +3231,8 @@ إظهار مسطرةالبوصلة إخفاء مسطرة البوصلة اختر أيقونة - الوضع:% s - وضع المستخدم ، مشتق من:% s + الوضع:%s + وضع المستخدم ، مشتق من:%s تزلج النوع:% s ملف التعريف الأساسي @@ -3301,16 +3301,16 @@ لوحة المفاتيح وندرلينك ببغاء - المسار: المسافة٪ s ، وقت جهاز التوجيه٪ s -\nالحساب:٪ .1f ثانية ،٪ d طرق ،٪ d تجانب) + المسار: المسافة٪s ، وقت جهاز التوجيه٪s +\nالحساب:٪.1f ثانية ،٪d طرق ،٪d تجانب) الاوكيتانيه احصل على خصم بمقدار %d %@ at %d%% . %1$s للأول %2$s %1$s للأول %2$s - ثم %1 $ s - %1 $ s • وفر %2 $ s + ثم %1$s + %1$s • وفر %2$s تطبيق فقط على \"%1$s\" - إعدادات التوجيه في ملف التعريف المحدد \"٪ 1 $ s\". + إعدادات التوجيه في ملف التعريف المحدد \"٪1$s\". حد العرض حدد الحد المسموح به لعرض السيارة على الطرق. محاكاة موقعك باستخدام مسار GPX مسجل.