Merge branch 'master' into obf_bookmarks

This commit is contained in:
Dima-1 2020-12-23 12:00:28 +02:00
commit 8c4c339bd2
128 changed files with 2887 additions and 1713 deletions

View file

@ -92,6 +92,9 @@ import net.osmand.aidlapi.copyfile.CopyFileParams;
import net.osmand.aidlapi.navigation.ANavigationUpdateParams;
import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams;
import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.aidlapi.navigation.AddBlockedRoadParams;
import net.osmand.aidlapi.navigation.RemoveBlockedRoadParams;
import net.osmand.aidlapi.contextmenu.ContextMenuButtonsParams;
import net.osmand.aidlapi.contextmenu.UpdateContextMenuButtonsParams;
@ -892,4 +895,10 @@ interface IOsmAndAidlInterface {
boolean selectProfile(in SelectProfileParams params);
boolean getProfiles(out List<AProfile> profiles);
boolean getBlockedRoads(out List<ABlockedRoad> blockedRoads);
boolean addRoadBlock(in AddBlockedRoadParams params);
boolean removeRoadBlock(in RemoveBlockedRoadParams params);
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.navigation;
parcelable ABlockedRoad;

View file

@ -0,0 +1,85 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class ABlockedRoad extends AidlParams {
private long roadId;
private double latitude;
private double longitude;
private double direction;
private String name;
private String appModeKey;
public ABlockedRoad(long roadId, double latitude, double longitude, double direction, String name, String appModeKey) {
this.roadId = roadId;
this.latitude = latitude;
this.longitude = longitude;
this.direction = direction;
this.name = name;
this.appModeKey = appModeKey;
}
protected ABlockedRoad(Parcel in) {
readFromParcel(in);
}
public static final Creator<ABlockedRoad> CREATOR = new Creator<ABlockedRoad>() {
@Override
public ABlockedRoad createFromParcel(Parcel in) {
return new ABlockedRoad(in);
}
@Override
public ABlockedRoad[] newArray(int size) {
return new ABlockedRoad[size];
}
};
public long getRoadId() {
return roadId;
}
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public double getDirection() {
return direction;
}
public String getName() {
return name;
}
public String getAppModeKey() {
return appModeKey;
}
@Override
protected void readFromBundle(Bundle bundle) {
roadId = bundle.getLong("roadId");
latitude = bundle.getDouble("latitude");
longitude = bundle.getDouble("longitude");
direction = bundle.getDouble("direction");
name = bundle.getString("name");
appModeKey = bundle.getString("appModeKey");
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putLong("roadId", roadId);
bundle.putDouble("latitude", latitude);
bundle.putDouble("longitude", longitude);
bundle.putDouble("direction", direction);
bundle.putString("name", name);
bundle.putString("appModeKey", appModeKey);
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.navigation;
parcelable AddBlockedRoadParams;

View file

@ -0,0 +1,46 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class AddBlockedRoadParams extends AidlParams {
private ABlockedRoad blockedRoad;
public AddBlockedRoadParams(ABlockedRoad blockedRoad) {
this.blockedRoad = blockedRoad;
}
public AddBlockedRoadParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<AddBlockedRoadParams> CREATOR = new Creator<AddBlockedRoadParams>() {
@Override
public AddBlockedRoadParams createFromParcel(Parcel in) {
return new AddBlockedRoadParams(in);
}
@Override
public AddBlockedRoadParams[] newArray(int size) {
return new AddBlockedRoadParams[size];
}
};
public ABlockedRoad getBlockedRoad() {
return blockedRoad;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("blockedRoad", blockedRoad);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ABlockedRoad.class.getClassLoader());
blockedRoad = bundle.getParcelable("blockedRoad");
}
}

View file

@ -11,15 +11,18 @@ public class NavigateGpxParams extends AidlParams {
private String data;
private Uri uri;
private boolean force;
private boolean needLocationPermission;
public NavigateGpxParams(String data, boolean force) {
public NavigateGpxParams(String data, boolean force, boolean needLocationPermission) {
this.data = data;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateGpxParams(Uri uri, boolean force) {
public NavigateGpxParams(Uri uri, boolean force, boolean needLocationPermission) {
this.uri = uri;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateGpxParams(Parcel in) {
@ -50,11 +53,16 @@ public class NavigateGpxParams extends AidlParams {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("data", data);
bundle.putParcelable("uri", uri);
bundle.putBoolean("force", force);
bundle.putBoolean("needLocationPermission", needLocationPermission);
}
@Override
@ -62,5 +70,6 @@ public class NavigateGpxParams extends AidlParams {
data = bundle.getString("data");
uri = bundle.getParcelable("uri");
force = bundle.getBoolean("force");
needLocationPermission = bundle.getBoolean("needLocationPermission");
}
}

View file

@ -17,8 +17,10 @@ public class NavigateParams extends AidlParams {
private double destLon;
private boolean force;
private boolean needLocationPermission;
public NavigateParams(String startName, double startLat, double startLon, String destName, double destLat, double destLon, String profile, boolean force) {
public NavigateParams(String startName, double startLat, double startLon, String destName, double destLat,
double destLon, String profile, boolean force, boolean needLocationPermission) {
this.startName = startName;
this.startLat = startLat;
this.startLon = startLon;
@ -27,6 +29,7 @@ public class NavigateParams extends AidlParams {
this.destLon = destLon;
this.profile = profile;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateParams(Parcel in) {
@ -77,6 +80,10 @@ public class NavigateParams extends AidlParams {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("startName", startName);
@ -87,6 +94,7 @@ public class NavigateParams extends AidlParams {
bundle.putDouble("destLon", destLon);
bundle.putString("profile", profile);
bundle.putBoolean("force", force);
bundle.putBoolean("needLocationPermission", needLocationPermission);
}
@Override
@ -99,5 +107,6 @@ public class NavigateParams extends AidlParams {
destLon = bundle.getDouble("destLon");
profile = bundle.getString("profile");
force = bundle.getBoolean("force");
needLocationPermission = bundle.getBoolean("needLocationPermission");
}
}

View file

@ -17,10 +17,11 @@ public class NavigateSearchParams extends AidlParams {
private double searchLon;
private boolean force;
private boolean needLocationPermission;
public NavigateSearchParams(String startName, double startLat, double startLon,
String searchQuery, double searchLat, double searchLon,
String profile, boolean force) {
String profile, boolean force, boolean needLocationPermission) {
this.startName = startName;
this.startLat = startLat;
this.startLon = startLon;
@ -29,6 +30,7 @@ public class NavigateSearchParams extends AidlParams {
this.searchLon = searchLon;
this.profile = profile;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateSearchParams(Parcel in) {
@ -79,6 +81,10 @@ public class NavigateSearchParams extends AidlParams {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("startName", startName);
@ -89,6 +95,7 @@ public class NavigateSearchParams extends AidlParams {
bundle.putBoolean("force", force);
bundle.putDouble("searchLat", searchLat);
bundle.putDouble("searchLon", searchLon);
bundle.putBoolean("needLocationPermission", needLocationPermission);
}
@Override
@ -101,5 +108,6 @@ public class NavigateSearchParams extends AidlParams {
force = bundle.getBoolean("force");
searchLat = bundle.getDouble("searchLat");
searchLon = bundle.getDouble("searchLon");
needLocationPermission = bundle.getBoolean("needLocationPermission");
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.navigation;
parcelable RemoveBlockedRoadParams;

View file

@ -0,0 +1,46 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class RemoveBlockedRoadParams extends AidlParams {
private ABlockedRoad blockedRoad;
public RemoveBlockedRoadParams(ABlockedRoad blockedRoad) {
this.blockedRoad = blockedRoad;
}
public RemoveBlockedRoadParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<RemoveBlockedRoadParams> CREATOR = new Creator<RemoveBlockedRoadParams>() {
@Override
public RemoveBlockedRoadParams createFromParcel(Parcel in) {
return new RemoveBlockedRoadParams(in);
}
@Override
public RemoveBlockedRoadParams[] newArray(int size) {
return new RemoveBlockedRoadParams[size];
}
};
public ABlockedRoad getBlockedRoad() {
return blockedRoad;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("blockedRoad", blockedRoad);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ABlockedRoad.class.getClassLoader());
blockedRoad = bundle.getParcelable("blockedRoad");
}
}

Binary file not shown.

Binary file not shown.

View file

@ -1568,6 +1568,10 @@ public class BinaryMapIndexReader {
}
public static SearchRequest<Amenity> buildSearchPoiRequest(int x, int y, String nameFilter, int sleft, int sright, int stop, int sbottom, ResultMatcher<Amenity> resultMatcher, ResultMatcher<Amenity> rawDataCollector) {
return buildSearchPoiRequest(x, y, nameFilter, sleft, sright, stop, sbottom, null, resultMatcher, null);
}
public static SearchRequest<Amenity> buildSearchPoiRequest(int x, int y, String nameFilter, int sleft, int sright, int stop, int sbottom, SearchPoiTypeFilter poiTypeFilter, ResultMatcher<Amenity> resultMatcher, ResultMatcher<Amenity> rawDataCollector) {
SearchRequest<Amenity> request = new SearchRequest<Amenity>();
request.x = x;
request.y = y;
@ -1575,6 +1579,7 @@ public class BinaryMapIndexReader {
request.right = sright;
request.top = stop;
request.bottom = sbottom;
request.poiTypeFilter = poiTypeFilter;
request.resultMatcher = resultMatcher;
request.rawDataCollector = rawDataCollector;
request.nameQuery = nameFilter.trim();

View file

@ -8,6 +8,7 @@
<!--JavaScript files-->
<asset source="voice/ar/ar_tts.js" destination="voice/ar-tts/ar_tts.js" mode="overwriteOnlyIfExists" />
<asset source="voice/bg/bg_tts.js" destination="voice/bg-tts/bg_tts.js" mode="overwriteOnlyIfExists" />
<asset source="voice/be/be_tts.js" destination="voice/be-tts/be_tts.js" mode="overwriteOnlyIfExists" />
<asset source="voice/cs/cs_tts.js" destination="voice/cs-tts/cs_tts.js" mode="overwriteOnlyIfExists" />
<asset source="voice/da/da_tts.js" destination="voice/da-tts/da_tts.js" mode="overwriteOnlyIfExists" />

View file

@ -3364,8 +3364,8 @@
<string name="poi_url">الرابط</string>
<string name="poi_parking_space">أماكن لوقوف السيارات</string>
<string name="poi_grave">قبر</string>
<string name="poi_community_gender_male">جنس المجتمع: ذكر</string>
<string name="poi_community_gender_female">جنس المجتمع: أنثى</string>
<string name="poi_community_gender_male">نوع المجتمع: ذكر</string>
<string name="poi_community_gender_female">نوع المجتمع: أنثى</string>
<string name="poi_bath_open_air_no">لا</string>
<string name="poi_bath_open_air_yes">نعم</string>
<string name="poi_bath_type_foot_bath">حمام القدم</string>
@ -3659,4 +3659,17 @@
<string name="poi_wreck">حطام سفينة</string>
<string name="poi_rune_stone">حجر الشاهد القائم الروني</string>
<string name="poi_historic_tank">دبابة تاريخية</string>
<string name="poi_water_source_lake">بحيرة</string>
<string name="poi_water_source_river">نهر</string>
<string name="poi_water_source_well">بئر</string>
<string name="poi_water_source_powered_pump">مضخة</string>
<string name="poi_water_source_water_tank">خزان مياه</string>
<string name="poi_water_source_tap">حنفية</string>
<string name="poi_water_source_water_works">أعمال مياه</string>
<string name="poi_water_source_tube_well">شيب مياه</string>
<string name="poi_vaccination_covid19">لقاح كورونا COVID19</string>
<string name="poi_health_specialty_vaccination_yes">يتوفر لدهم لقاح</string>
<string name="poi_lifeguard_base">منصة الانقاذ</string>
<string name="poi_siren">صفارت إنذار</string>
<string name="poi_community_gender_mixed">نوع المجتمع: مختلط</string>
</resources>

View file

@ -4005,4 +4005,5 @@
\n</string>
<string name="profile_type_osmand_string">ملف تعريف أوسماند</string>
<string name="profile_type_user_string">ملف تعريف المستخدم</string>
<string name="reverse_all_points">عكس جميع النقاط</string>
</resources>

View file

@ -557,7 +557,7 @@
<string name="poi_craft_upholsterer">Tapezierer</string>
<string name="poi_vacuum_cleaner">Staubsaugergeschäft</string>
<string name="poi_variety_store">Kleinkaufhaus</string>
<string name="poi_vehicle_inspection">Fahrzeugkontrolle</string>
<string name="poi_vehicle_inspection">Fahrzeugprüfstelle</string>
<string name="poi_vehicle_ramp">Fahrzeugrampe</string>
<string name="poi_vending_machine">Verkaufsautomat</string>
<string name="poi_veterinary">Tierarzt</string>
@ -1528,8 +1528,8 @@
<string name="poi_bathing_yes">Baden: ja</string>
<string name="poi_bathing_no">Baden: nein</string>
<string name="poi_boat_storage">Bootslager</string>
<string name="poi_bridge_ref">Brücke Nr.</string>
<string name="poi_tunnel_ref">Tunnel Nr.</string>
<string name="poi_bridge_ref">Bauwerksnummer</string>
<string name="poi_tunnel_ref">Bauwerksnummer</string>
<string name="poi_ref">Nr.</string>
<string name="poi_cargo_passengers">Passagiere</string>
<string name="poi_cargo_vehicle">Fahrzeuge</string>
@ -3889,4 +3889,16 @@
<string name="poi_lifeguard_base">Rettungsschwimmerbasis</string>
<string name="poi_vaccination_covid19">Impfung: COVID19</string>
<string name="poi_health_specialty_vaccination_yes">Impfung</string>
<string name="poi_water_source_tube_well">Rammbrunnen</string>
<string name="poi_water_source_lake">See</string>
<string name="poi_water_source_river">Fluss</string>
<string name="poi_water_source_well">Brunnen</string>
<string name="poi_water_source_powered_pump">Angetriebene Pumpe</string>
<string name="poi_water_source_water_tank">Wassertank</string>
<string name="poi_water_source_tap">Wasserhahn</string>
<string name="poi_water_source_water_works">Wasserwerk</string>
<string name="poi_lavoir">Waschplatz für Wäsche</string>
<string name="poi_waste_transfer_station">Müllumladestation</string>
<string name="poi_weightbridge">Fahrzeugwaage</string>
<string name="poi_ranger_station">Rangerstation</string>
</resources>

View file

@ -562,7 +562,7 @@
<string name="voices">Sprachansagen</string>
<string name="voice">Sprachansage</string>
<string name="no_vector_map_loaded">Vektorkarten wurden nicht geladen</string>
<string name="error_reading_gpx">GPX-Daten konnten nicht gelesen werden</string>
<string name="error_reading_gpx">GPX-Daten konnten nicht gelesen werden.</string>
<string name="vector_data">Offline-Vektorkarten</string>
<string name="transport_context_menu">Suche nach Verbindung an Haltestelle</string>
<string name="poi_context_menu_modify">Bearbeite POI</string>
@ -1960,7 +1960,7 @@
<string name="map_widget_bearing">Relative Peilung</string>
<string name="access_autoannounce_period">Zeit zwischen automatischen Ansagen</string>
<string name="map_widget_magnetic_bearing">Magnetische Peilung</string>
<string name="access_no_destination">Ziel ist nicht festgelegt</string>
<string name="access_no_destination">Modul für Bedienungshilfen: Ziel ist nicht festgelegt</string>
<string name="use_osm_live_routing">OsmAnd-Live-Navigation</string>
<string name="map_widget_battery">Akkustand</string>
<string name="move_marker_bottom_sheet_title">Karte bewegen, um die Position der Markierung zu verändern</string>
@ -2170,7 +2170,7 @@
<string name="quick_action_map_overlay_switch">Karten-Overlay wurde in „%s“ geändert.</string>
<string name="quick_action_map_underlay_switch">Karten-Underlay wurde in „%s“ geändert.</string>
<string name="navigate_point_olc_info_invalid">Ungültiger OLC
</string>
\n</string>
<string name="navigate_point_olc_info_short">Kurzer OLC
\nBitte geben Sie einen vollständigen Code ein</string>
<string name="navigate_point_olc_info_area">Gültiger vollständiger OLC
@ -3520,7 +3520,7 @@
<string name="import_profile_dialog_description">Das importierte Profil enthält zusätzliche Daten. Klicken Sie auf \"Importieren\", um nur Profildaten zu importieren, oder wählen Sie zusätzliche Daten aus.</string>
<string name="export_profile_dialog_description">Sie können zusätzliche Daten zum Exportieren zusammen mit dem Profil auswählen.</string>
<string name="index_name_antarctica">Antarktis</string>
<string name="osm_edits_view_descr">Sie können alle Ihre noch nicht hochgeladenen Bearbeitungen oder OSM-Fehlermeldungen in %1$s anzeigen. Hochgeladene Punkte werden in OsmAnd nicht angezeigt.</string>
<string name="osm_edits_view_descr">Betrachten Sie alle Ihre noch nicht hochgeladenen Bearbeitungen oder OSM-Hinweise in %1$s. Bereits hochgeladene Änderungen werden nicht mehr angezeigt.</string>
<string name="monitoring_min_speed_descr_recommendation">Empfehlung: Versuchen Sie zunächst, die Bewegungserkennung über den Filter zur Mindestabstandsmessung (B) zu verwenden. Das kann zu besseren Ergebnissen führen und Sie werden weniger Daten verlieren. Sollten Ihre Tracks bei niedrigen Geschwindigkeiten ungenau bleiben, versuchen Sie hier Werte ungleich Null. Bitte beachten Sie, dass einige Messungen (einige netzwerkbasierte Methoden) möglicherweise überhaupt keine Geschwindigkeitswerte anzeigen. In diesem Fall wird nichts aufgezeichnet.</string>
<string name="monitoring_min_accuracy_descr">Es werden nur Punkte aufgezeichnet, die mit der gewählten Mindestgenauigkeit bestimmt wurden (in Metern/Fuß, wie von Android je nach Chipsatz bereitgestellt). Die Genauigkeit beschreibt die Nähe der Messungen zur wahren Position und steht nicht unmittelbar in Bezug zur Präzision, der Streuung wiederholter Messungen.</string>
<string name="monitoring_min_accuracy_descr_remark">Bemerkung: Wenn das GPS unmittelbar vor einer Aufzeichnung ausgeschaltet war, kann der erste gemessene Punkt eine verminderte Genauigkeit haben, sodass wir in unserem Code vielleicht eine Sekunde oder so warten wollen, bevor ein Punkt (oder der beste von 3 aufeinanderfolgenden Punkten usw.) aufgezeichnet wird. Das ist aber noch nicht implementiert.</string>
@ -3801,9 +3801,9 @@
<string name="lenght_limit_description">Bitte geben Sie Ihre Fahrzeuglänge an. Für lange Fahrzeuge könnten einige Streckenabschnitte nicht befahrbar sein.</string>
<string name="quick_action_remove_next_destination">Nächstgelegenen Zielpunkt löschen</string>
<string name="please_provide_point_name_error">Bitte geben Sie einen Namen für das Profil an</string>
<string name="quick_action_remove_next_destination_descr">Der aktuelle Punkt auf der Route wird gelöscht. Wenn es das Ziel ist, wird die Navigation gestoppt.</string>
<string name="quick_action_remove_next_destination_descr">Löscht das nächste Ziel auf Ihrer Route. Wenn dies das endgültige Ziel ist, wird die Navigation gestoppt.</string>
<string name="search_download_wikipedia_maps">Wikipedia-Karten herunterladen</string>
<string name="plugin_wikipedia_description">Info über Sehenswürdigkeiten erhalten Sie bei Wikipedia. Es ist Ihr Offline-Wegweiser für die Hosentasche - aktivieren Sie einfach das Wikipedia-Modul und genießen Sie Artikel über Objekte in Ihrer Umgebung.</string>
<string name="plugin_wikipedia_description">Holen Sie sich Informationen über Sehenswürdigkeiten aus Wikipedia, einem Offline-Reiseführer für die Hosentasche mit Artikeln über Orte und Ziele.</string>
<string name="app_mode_enduro_motorcycle">Enduro</string>
<string name="app_mode_motor_scooter">Motorroller</string>
<string name="app_mode_wheelchair">Rollstuhl</string>
@ -3844,7 +3844,7 @@
<string name="add_address">Adresse hinzufügen</string>
<string name="access_hint_enter_address">Adresse eingeben</string>
<string name="street_level_imagery">Bilder auf Straßenebene</string>
<string name="plan_route_exit_dialog_descr">Sind Sie sicher, dass Sie alle Änderungen an der geplanten Route verwerfen wollen, indem Sie sie schließen\?</string>
<string name="plan_route_exit_dialog_descr">Sind Sie sicher, dass Sie alle Änderungen an der geplanten Route verwerfen wollen\?</string>
<string name="plan_route_change_route_type_before">Routentyp davor ändern</string>
<string name="plan_route_change_route_type_after">Routentyp danach ändern</string>
<string name="plan_route_trim_before">Davor trimmen</string>
@ -3877,7 +3877,7 @@
<string name="save_track_to_gpx">Während der Navigation automatisch Track aufzeichnen</string>
<string name="shared_string_gpx_route">Track Route</string>
<string name="import_track_descr">Track Datei zum Folgen auswählen, oder vom Gerät importieren.</string>
<string name="disable_recording_once_app_killed_descrp">Die GPX-Aufzeichnung wird angehalten, wenn OsmAnd beendet wird (über „zuletzt verwendete Apps“). (Die Hintergrunddienst-Anzeige verschwindet aus der Android-Benachrichtigungsleiste.)</string>
<string name="disable_recording_once_app_killed_descrp">Die Track-Aufzeichnung wird angehalten, wenn OsmAnd beendet wird (über „zuletzt verwendete Apps“). (Die Hintergrunddienst-Anzeige verschwindet aus der Android-Benachrichtigungsleiste.)</string>
<string name="save_global_track_interval_descr">Aufzeichnungsintervall für die generelle Track-Aufzeichnung festlegen (wird über die Schaltfläche \'Routenaufzeichung\' auf dem Kartenbildschirm angeschaltet).</string>
<string name="route_between_points_warning_desc">Als nächstes können Sie Ihren Track mit einem Ihrer Navigationsprofile auf die nächstgelegene erlaubte Straße einrasten lassen, um diese Option zu nutzen.</string>
<string name="quick_action_add_gpx">Track-Wegpunkt hinzufügen</string>
@ -3913,12 +3913,12 @@
<string name="sort_name_ascending">Name: A Z</string>
<string name="start_finish_icons">Start- und Zielsymbole</string>
<string name="contour_lines_thanks">Vielen Dank für den Kauf von \'Höhenlinien\'</string>
<string name="osm_live_payment_desc_hw">Das Abonnement wird pro ausgewähltem Zeitraum berechnet. Sie können das Abonnement jederzeit über die AppGallery kündigen.</string>
<string name="osm_live_payment_subscription_management_hw">Die Bezahlung wird Ihrem AppGallery-Konto bei der Bestätigung des Kaufs belastet.
<string name="osm_live_payment_desc_hw">Das Abonnement wird für den gewählten Zeitraum berechnet. Sie können es jederzeit in Ihrer AppGallery kündigen.</string>
<string name="osm_live_payment_subscription_management_hw">Ihr AppGallery-Konto wird mit der Kaufbestätigung belastet.
\n
\nDas Abonnement verlängert sich automatisch, sofern es nicht vor dem Verlängerungsdatum gekündigt wird. Ihr Konto wird für den Verlängerungszeitraum (Monat / drei Monate / Jahr) nur am Verlängerungsdatum belastet.
\nDas Abonnement verlängert sich automatisch, wenn es nicht vor dem Verlängerungsdatum gekündigt wird. Ihr Konto wird erst am Verlängerungsdatum für den Verlängerungszeitraum (Monat/drei Monate/Jahr) belastet.
\n
\nSie können Ihre Abonnements verwalten und kündigen, indem Sie zu Ihren AppGallery-Einstellungen gehen.</string>
\nSie können Ihre Abonnements in Ihren AppGallery-Einstellungen verwalten und kündigen.</string>
<string name="routing_attr_avoid_footways_description">Vermeidet Fußwege</string>
<string name="routing_attr_avoid_footways_name">Keine Fußwege</string>
<string name="development">Entwicklung</string>
@ -3942,7 +3942,7 @@
<string name="message_graph_will_be_available_after_recalculation">Bitte warten Sie.
\nDie Grafik wird nach der Neuberechnung der Route verfügbar sein.</string>
<string name="icon_group_amenity">Einrichtung</string>
<string name="icon_group_transport">ÖPNV</string>
<string name="icon_group_transport">Verkehr</string>
<string name="icon_group_service">Dienstleistung</string>
<string name="icon_group_travel">Reisen</string>
<string name="icon_group_sport">Sport</string>
@ -3953,7 +3953,7 @@
<string name="icon_group_special">Spezial</string>
<string name="message_you_need_add_two_points_to_show_graphs">Fügen Sie mindestens zwei Punkte hinzu</string>
<string name="manage_subscription">Abonnement verwalten</string>
<string name="subscription_payment_issue_title">Es gibt ein Problem mit Ihrem Abonnement. Tippen Sie auf die Schaltfläche, um zu den Einstellungen des Google Play Abonnements zu gelangen und Ihre Zahlungsmethode zu überprüfen.</string>
<string name="subscription_payment_issue_title">Tippen Sie auf die Schaltfläche, um eine Zahlungsmethode auf Google Play einzurichten und Ihr Abonnement zu bestätigen.</string>
<string name="subscription_expired_title">OsmAnd Live Abonnement ist abgelaufen</string>
<string name="subscription_paused_title">OsmAnd Live Abonnement wurde ausgesetzt</string>
<string name="subscription_on_hold_title">OsmAnd Live Abonnement liegt auf Eis</string>
@ -4020,4 +4020,7 @@
<string name="app_mode_gap">Lücke</string>
<string name="plan_route_join_segments">Segmente verbinden</string>
<string name="plan_route_add_new_segment">Neues Segment hinzufügen</string>
<string name="profile_type_osmand_string">OsmAnd-Profil</string>
<string name="profile_type_user_string">Benutzerprofil</string>
<string name="reverse_all_points">Alle Punkte umkehren</string>
</resources>

View file

@ -3887,4 +3887,8 @@
<string name="poi_water_source_tap">krano</string>
<string name="poi_water_source_water_works">akvokondukilo</string>
<string name="poi_water_source_tube_well">puto tuba (abisena)</string>
<string name="poi_weightbridge">Pezilo por aŭtomobiloj</string>
<string name="poi_ranger_station">Oficejo de naturrezervejo</string>
<string name="poi_lavoir">Vestaĵ-lavejo (ĉe rivero)</string>
<string name="poi_waste_transfer_station">Stacio de rubmastrumado</string>
</resources>

View file

@ -4017,4 +4017,5 @@
\n</string>
<string name="profile_type_osmand_string">OsmAndprofilo</string>
<string name="profile_type_user_string">Profilo de uzanto</string>
<string name="reverse_all_points">Inversigi ĉiujn punktojn</string>
</resources>

View file

@ -3901,4 +3901,8 @@
<string name="poi_water_source_tap">Canilla</string>
<string name="poi_water_source_water_works">Planta potabilizadora</string>
<string name="poi_water_source_tube_well">Pozo entubado</string>
<string name="poi_weightbridge">Báscula puente</string>
<string name="poi_ranger_station">Estación de guardabosques</string>
<string name="poi_lavoir">Lavadero público de ropa</string>
<string name="poi_waste_transfer_station">Estación de transferencia de residuos</string>
</resources>

View file

@ -4023,4 +4023,5 @@
\n</string>
<string name="profile_type_osmand_string">Perfil de OsmAnd</string>
<string name="profile_type_user_string">Perfil de usuario</string>
<string name="reverse_all_points">Invertir todos los puntos</string>
</resources>

View file

@ -3843,4 +3843,18 @@
<string name="poi_diplomatic_services_citizen_services_no">Ei</string>
<string name="poi_siren">Sireen</string>
<string name="poi_lifeguard_base">Vetelpäästejaam</string>
<string name="poi_nurse">Õde</string>
<string name="poi_health_specialty_vaccination_yes">Vaktsineerimine</string>
<string name="poi_vaccination_covid19">Vaktsineerimine: COVID19</string>
<string name="poi_water_source_tube_well">Puurkaev</string>
<string name="poi_water_source_water_works">Veevärgi ettevõte</string>
<string name="poi_water_source_tap">Veekraan</string>
<string name="poi_water_source_water_tank">Veepaak</string>
<string name="poi_water_source_powered_pump">Mootoriga veepump</string>
<string name="poi_water_source_well">Kaev</string>
<string name="poi_water_source_river">Jõgi</string>
<string name="poi_water_source_lake">Järv</string>
<string name="poi_mobile_money_agent">Mobiiliraha müügikoht</string>
<string name="poi_ranger_station">Pargivahi maja</string>
<string name="poi_weightbridge">Autokaal</string>
</resources>

View file

@ -7,8 +7,8 @@
<string name="shared_string_skip">Jäta vahele</string>
<string name="poi_action_add">lisa</string>
<string name="shared_string_message">Sõnum</string>
<string name="agps_data_last_downloaded">A-GPS andmed on allalaetud: %1$s</string>
<string name="welmode_download_maps">Kaartide allalaadimine</string>
<string name="agps_data_last_downloaded">A-GPS andmed on alla laaditud: %1$s</string>
<string name="welmode_download_maps">Laadi kaarte</string>
<string name="welcome_header">Tere tulemast</string>
<string name="mark_to_delete">Märgi kustutamiseks</string>
<string name="confirmation_to_clear_history">Tühjendada ajalugu\?</string>
@ -46,9 +46,9 @@
<string name="shared_string_do_not_show_again">Ära enam näita</string>
<string name="shared_string_remember_my_choice">Mäleta valikut</string>
<string name="shared_string_refresh">Värskenda</string>
<string name="shared_string_download">Lae alla</string>
<string name="shared_string_download">Laadi alla</string>
<string name="shared_string_downloading">Allalaadimine…</string>
<string name="shared_string_download_successful">Alla laetud</string>
<string name="shared_string_download_successful">Alla laaditud</string>
<string name="shared_string_close">Sulge</string>
<string name="shared_string_exit">Välju</string>
<string name="shared_string_show">Näita</string>
@ -154,7 +154,7 @@
<string name="shared_string_add_photos">Lisa fotosid</string>
<string name="mapillary_widget">Mapillary vidin</string>
<string name="shared_string_reset">Lähtesta</string>
<string name="shared_string_reload">Lae uuesti</string>
<string name="shared_string_reload">Laadi uuesti</string>
<string name="wrong_user_name">Vale kasutajanimi</string>
<string name="mapillary_menu_title_dates">Kuupäev</string>
<string name="mapillary_menu_edit_text_hint">Sisesta kasutajatunnus</string>
@ -186,7 +186,7 @@
<string name="open_wikipedia_link_online_description">Link avatakse veebilehitsejas.</string>
<string name="how_to_open_link">Kuidas link avada?</string>
<string name="read_wikipedia_offline">Loe Wikipediat ilma võrguühenduseta</string>
<string name="download_all">Lae kõik alla</string>
<string name="download_all">Laadi kõik alla</string>
<string name="shared_string_restart">Rakenduse taaskäivitamine</string>
<string name="show_images">Näita pilte</string>
<string name="maps_you_need">Kaardid, mida vajad</string>
@ -195,7 +195,7 @@
<string name="paid_app">Makstud rakendus</string>
<string name="paid_plugin">Makstud lisa</string>
<string name="update_is_available">Uuendus saadaval</string>
<string name="download_file">Lae fail alla</string>
<string name="download_file">Laadi fail alla</string>
<string name="start_editing">Alusta muutmist</string>
<string name="get_unlimited_access">Hangi piiramatu ligipääs</string>
<string name="monthly_map_updates">Igakuised kaardiuuendused</string>
@ -312,7 +312,7 @@
<string name="show_from_zoom_level">Kuva alates suurenduse tasemest</string>
<string name="routing_attr_allow_private_name">Luba eramaad</string>
<string name="shared_string_plugin">Lisand</string>
<string name="hillshade_menu_download_descr">Lae alla \'Künkavarjutuse ülekatte\' kaart vertikaalse varjutuse kuvamiseks.</string>
<string name="hillshade_menu_download_descr">Vertikaalse varjutuse kuvamiseks laadi alla „Künkavarjutuse ülekatte“ kaart.</string>
<string name="hillshade_purchase_header">Paigalda \'Kõrgusjoonte\' laiendus astmestatud vertikaalsete alade kuvamiseks.</string>
<string name="hide_from_zoom_level">Peida alates suurenduse tasemest</string>
<string name="sorted_by_distance">Sorteeritud kauguse järgi</string>
@ -513,13 +513,13 @@
<string name="shared_string_dont">Ära</string>
<string name="shared_string_do">Tee</string>
<string name="shared_string_only_with_wifi">Ainult Wi-Fi ühendusega</string>
<string name="wikivoyage_download_pics">Lae pildid alla</string>
<string name="wikivoyage_download_pics_descr">Artikli pilte saab laadida alla võrguühenduseta kasutamiseks.
<string name="wikivoyage_download_pics">Laadi pildid alla</string>
<string name="wikivoyage_download_pics_descr">Artikli pilte saad laadida alla võrguühenduseta kasutamiseks.
\nAlati saadaval menüüs \'Avasta\' → \'Valikud\'.</string>
<string name="shared_string_wifi_only">Ainult Wi-Fi ühendusega</string>
<string name="select_travel_book">Vali reisikiri</string>
<string name="shared_string_travel_book">Reisikiri</string>
<string name="download_images">Lae pildid alla</string>
<string name="download_images">Laadi pildid alla</string>
<string name="purchase_dialog_title">Vali plaan</string>
<string name="purchase_dialog_subtitle">Vali sobiv toode</string>
<string name="in_app_purchase_desc_ex">Ostmise järel on sulle püsivalt kasutatav.</string>
@ -528,11 +528,11 @@
<string name="wikipedia_offline">Vikipeedia võrguühenduseta</string>
<string name="unlock_all_features">Ava kõik OsmAnd funktsioonid</string>
<string name="travel_card_update_descr">Uued Wikivoyage andmed saadaval, uuenda nautimiseks.</string>
<string name="travel_card_download_descr">Lae alla Wikivoyage reisijuhid, et vaadata artikleid kohtadest üle maailma ilma internetiühenduseta.</string>
<string name="travel_card_download_descr">Laadi alla Wikivoyage reisijuhid, et vaadata artikleid kohtadest üle maailma ilma internetiühenduseta.</string>
<string name="start_editing_card_image_text">Tasuta ülemaailmne kõigi poolt täiendatav reisijuht.</string>
<string name="welcome_to_open_beta">Tere tulemast avatud beetasse</string>
<string name="contour_lines_hillshade_maps">Kõrgusjooned &amp; künkavarjutusega kaardid</string>
<string name="maps_you_need_descr">Sinu järjehoidjatesse lisatud artiklite alusel on soovitatav laadida alla järgmised kaardid:</string>
<string name="maps_you_need_descr">Sinu järjehoidjatesse lisatud artiklite alusel on soovitame alla laadida järgmised kaardid:</string>
<string name="purchase_cancelled_dialog_title">Oled tühistanud oma OsmAnd Live tellimuse</string>
<string name="purchase_cancelled_dialog_descr">Uuenda tellimust kõigi funktsioonide kasutamise jätkamiseks:</string>
<string name="read_wikipedia_offline_description">Hangi OsmAnd Live tellimus, et lugeda Vikipeedia ja Wikivoyage artikleid ilma võrguühenduseta.</string>
@ -702,7 +702,7 @@
\n
\nSeadista mis tahes ajal menüüst \'Seaded\' → \'Privaatsus ja turvalisus\'.</string>
<string name="choose_data_to_share">Vali, millist liiki andmeid soovid jagada:</string>
<string name="downloaded_maps">Alla laetud kaardid</string>
<string name="downloaded_maps">Allalaaditud kaardid</string>
<string name="visited_screens">Külastatud ekraanid</string>
<string name="collected_data_descr">Määra, milliseid andmeid OsmAnd võib jagada.</string>
<string name="downloaded_maps_collect_descr">Aita meil mõista riikide ja piirkondade kaartide populaarsust.</string>
@ -913,7 +913,7 @@
<string name="logcat_buffer">Logcati puhver</string>
<string name="plugins_settings">Laienduse seaded</string>
<string name="shared_string_by_default">Vaikimisi</string>
<string name="download_detailed_map">Selle ala vaatlemiseks lae alla üksikasjalik %s kaart.</string>
<string name="download_detailed_map">Selle ala vaatlemiseks laadi alla üksikasjalik %s kaart.</string>
<string name="change_data_storage_full_description">Teisaldada OsmAnd andmefailid uude sihtkohta\?
\n%1$s &gt; %2$s</string>
<string name="data_storage_preference_summary">%1$s • %2$s</string>
@ -1033,7 +1033,7 @@
<string name="ltr_or_rtl_combine_via_bold_point">%1$s • %2$s</string>
<string name="ltr_or_rtl_combine_via_comma">%1$s, %2$s</string>
<string name="personal_category_name">Isiklik</string>
<string name="shared_string_downloading_formatted">Allalaadimine %s</string>
<string name="shared_string_downloading_formatted">Laadin alla %s</string>
<string name="rendering_value_thick_name">Jäme</string>
<string name="desert_render_descr">Kõrbete ja muude hõredalt asustatud piirkondade jaoks. Üksikasjalikum.</string>
<string name="select_navigation_icon">Liikumisel kuvatav asukohaikoon</string>
@ -1124,7 +1124,7 @@
<string name="lang_et">Eesti</string>
<string name="lang_ceb">Sebu</string>
<string name="archive_wikipedia_data">Sul on vana ja kokkusobimatu Vikipeedia andmestik. Arhiveerida see\?</string>
<string name="download_wikipedia_files">Laadida täiendavaid andmeid Vikipeediast (%1$s MB)\?</string>
<string name="download_wikipedia_files">Kas laadime täiendavaid andmeid Vikipeediast (%1$s MB)\?</string>
<string name="gps_network_not_enabled">Asukohateenus on välja lülitatud. Lülitada sisse\?</string>
<string name="disable_recording_once_app_killed">Väldi iseseisvat logimist</string>
<string name="shared_string_import2osmand">OsmAnd import</string>
@ -1239,9 +1239,9 @@
<string name="rendering_value_americanRoadAtlas_name">Ameerika teede atlas</string>
<string name="routing_attr_no_new_routing_name">Puuduvad v1.9 teekonna arvutuse reeglid</string>
<string name="routing_attr_no_new_routing_description">Ära kasuta v1.9 teekonna arvutuse reegleid.</string>
<string name="dash_download_msg_none">Laadida alla võrguühenduseta kaarte\?</string>
<string name="dash_download_msg_none">Kas laadime alla võrguühenduseta kaarte\?</string>
<string name="dash_download_msg">Oled laadinud alla %1$s kaarti</string>
<string name="dash_download_new_one">Lae alla uus kaart</string>
<string name="dash_download_new_one">Laadi alla uus kaart</string>
<string name="dash_download_manage">Halda</string>
<string name="map_locale">Kaardi keel</string>
<string name="rendering_attr_transportStops_name">Peatuskohad</string>
@ -1323,7 +1323,7 @@
<string name="distance">Kaugus</string>
<string name="index_tours">Ringkäik</string>
<string name="shared_string_all">Kõik</string>
<string name="download_additional_maps">Laadida alla puuduvad kaardid %1$s (%2$d MB)\?</string>
<string name="download_additional_maps">Kas laadime alla puuduvad kaardid %1$s (%2$d MB)\?</string>
<string name="rendering_value_browse_map_name">Sirvi kaarti</string>
<string name="rendering_value_car_name">Auto</string>
<string name="rendering_value_bicycle_name">Jalgratas</string>
@ -1511,9 +1511,9 @@
<string name="base_world_map">Maailma aluskaart</string>
<string name="about_version">Versioon:</string>
<string name="about_settings_descr">Versiooni info, litsentsid, projekti liikmed</string>
<string name="local_index_tile_data_zooms">Allalaetud suumitasemed: %1$s</string>
<string name="local_index_tile_data_zooms">Allalaaditud suumitasemed: %1$s</string>
<string name="local_index_tile_data_expire">Aegumine (minutites): %1$s</string>
<string name="local_index_tile_data_downloadable">Alla laetav: %1$s</string>
<string name="local_index_tile_data_downloadable">Alla laaditav: %1$s</string>
<string name="local_index_tile_data_maxzoom">Maksimaalne suurendus: %1$s</string>
<string name="local_index_tile_data_minzoom">Minimaalne suurendus: %1$s</string>
<string name="edit_tilesource_elliptic_tile">Mercatori elliptiline projektsioon</string>
@ -1570,7 +1570,7 @@
<string name="use_magnetic_sensor">Kasuta magnetandurit</string>
<string name="other_location">Muu</string>
<string name="files_limit">%1$d faili järel</string>
<string name="available_downloads_left">%1$d faili veel alla laadida</string>
<string name="available_downloads_left">Veel %1$d faili on jäänud alla laadida</string>
<string name="install_paid">Täisversioon</string>
<string name="cancel_navigation">Lõpeta navigeerimine</string>
<string name="clear_destination">Eemalda sihtpunkt</string>
@ -1699,12 +1699,12 @@
<string name="osmand_play_title_30_chars">OsmAnd kaardid ja navigeerimine</string>
<string name="osmand_long_description_1000_chars">OsmAnd (OSM automatiseeritud navigeerimisjuhised)
\n
\n OsmAnd on avatud lähtekoodiga tarkvara navigeerimisrakendus, millel on juurdepääs mitmesugustele ülemaailmsetele OpenStreetMap (OSM) andmetele. Kõiki kaardiandmeid (vektor- või paanikaarte) saab salvestada telefoni mälukaardile võrguühenduseta kasutamiseks. Pakutakse ka võrguühenduseta ja veebipõhist teekonna leidmise funktsiooni, sealhulgas pöörangupõhiseid hääljuhiseid.
\n OsmAnd on avatud lähtekoodiga tarkvara navigeerimisrakendus, millel on juurdepääs mitmesugustele ülemaailmsetele OpenStreetMap (OSM) andmetele. Kõiki kaardiandmeid (vektor- või paanikaarte) saad salvestada telefoni mälukaardile võrguühenduseta kasutamiseks. Olemas on ka võrguühenduseta ja veebipõhised teekonna leidmise funktsioonid, sealhulgas pöörangupõhiseid hääljuhiseid.
\n
\n Mõned põhifunktsioonid:
\n - Täielik võrguühenduseta funktsioon (salvestage alla laetud vektor- või paanikaardid seadme mällu)
\n - Täielik võrguühenduseta funktsioon (salvestades allalaaditud vektor- või paanikaardid seadme mällu)
\n - Saadaval on kompaktsed võrguühenduseta vektorkaardid üle kogu maailma
\n - Riigi või piirkonna kaardid on alla laetavad otse rakendusest
\n - Riigi või piirkonna kaardid on alla laaditavad otse rakendusest
\n - Võimalik on mitme kaardikihi ülekatmine, näiteks GPX või navigeerimisrajad, huvipunktid, eelistused, kõrgusjooned, ühistranspordi peatused, täiendavad kaardid kohandatava läbipaistvusega
\n - Aadresside ja kohtade (huvipunktide) otsing ilma võrguühenduseta
\n - Võrguühenduseta teekonna leidmine keskmise vahemaa jaoks
@ -1722,12 +1722,12 @@
<string name="osmand_plus_play_title_30_chars">OsmAnd+ kaardid ja navigeerimine</string>
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM automatiseeritud navigeerimisjuhised)
\n
\n OsmAnd+ on avatud lähtekoodiga tarkvara navigeerimisrakendus, millel on juurdepääs paljudele globaalsetele OpenStreetMap (OSM) andmetele. Kõiki kaardiandmeid (vektor- ja paanikaarte) saab salvestada telefoni mälukaardile võrguühenduseta kasutamiseks. Võimalik on nii võrguühenduseta kui ka -ühendusega teekonna leidmise funktsioon, milles on ka hääljuhiseid.
\n OsmAnd+ on avatud lähtekoodiga tarkvara navigeerimisrakendus, millel on juurdepääs paljudele globaalsetele OpenStreetMap (OSM) andmetele. Kõiki kaardiandmeid (vektor- ja paanikaarte) saad salvestada telefoni mälukaardile võrguühenduseta kasutamiseks. Võimalik on nii võrguühenduseta kui ka -ühendusega teekonna leidmise funktsioon, milles on ka hääljuhiseid.
\n
\n OsmAnd+ on rakenduse tasuline versioon, mida ostes toetate projekti, rahastate uute funktsioonide arendamist ja saate kõige värskemaid uuendusi.
\n OsmAnd+ on rakenduse tasuline versioon, mida ostes toetad projekti, rahastad uute funktsioonide arendamist ja saad kõige värskemaid uuendusi.
\n
\n Mõned põhifunktsioonid:
\n - Täielik võrguühenduseta funktsioon (salvestage alla laetud vektor- ja paanikaardid seadme mällu)
\n - Täielik võrguühenduseta funktsioon (salvesta alla laaditud vektor- ja paanikaardid seadme mällu)
\n - Saadaval on kompaktsed kogu maailma vektorkaardid (võrguühenduseta režiim)
\n - Riigi või piirkonna kaartide piiramatu allalaadimine otse rakendusest
\n - Võrguühenduseta Vikipeedia funktsioon (laadige Vikipeedia huvipunktid alla), sobib suurepäraselt vaatamisväärsustega tutvumiseks
@ -1832,11 +1832,11 @@
<string name="unknown_from_location">Lähtepunkt on veel määramata.</string>
<string name="unknown_location">Asukoht ei ole veel teada.</string>
<string name="modify_transparency">Määra läbipaistvus (0 - läbipaistev, 255 - läbipaistmatu)</string>
<string name="confirm_interrupt_download">Tühistada allalaadimine\?</string>
<string name="confirm_interrupt_download">Tühistame allalaadimise\?</string>
<string name="basemap_was_selected_to_download">Põhifunktsionaalsuse pakkumiseks vajaliku aluskaardi allalaadimine on järjekorras.</string>
<string name="local_indexes_cat_map">Standardkaardid (vektor)</string>
<string name="map_online_plugin_is_not_installed">Luba \'Internetikaardid\' lisa erinevate kaardiallikate valimiseks</string>
<string name="map_online_data_descr">Kasuta internetikaarte (lae alla ja puhverda paanid mälukaardil).</string>
<string name="map_online_data_descr">Kasuta internetikaarte (laadi alla ja puhverda paanid mälukaardil).</string>
<string name="online_map_settings_descr">Vali veebipõhised või puhverdatud paanikaartide allikad.</string>
<string name="plugins_screen">Lisad</string>
<string name="prefs_plugins">Lisad</string>
@ -1901,11 +1901,11 @@
<string name="arrival_distance_descr">Kui vara soovid kohale jõudmise teavitust\?</string>
<string name="use_fluorescent_overlays">Helkivad ülekatted</string>
<string name="offline_edition">Võrguühenduseta muutmine</string>
<string name="offline_edition_descr">Kui võrguühenduseta muutmine on kasutusel, siis muudatused salvestatakse esmalt kohalikus nutiseadmes ning laetakse üles eraldi päringuga. Muul juhul laetakse muudatused üles koheselt.</string>
<string name="offline_edition_descr">Kui võrguühenduseta muutmine on kasutusel, siis muudatused salvestatakse esmalt kohalikus nutiseadmes ning laaditakse üles eraldi päringuga. Muul juhul laaditakse muudatused üles koheselt.</string>
<string name="local_openstreetmap_uploading">Üles laadimine…</string>
<string name="local_openstreetmap_were_uploaded">{0} huvipunkti/märget üles laetud</string>
<string name="local_openstreetmap_uploadall">Lae kõik üles</string>
<string name="local_openstreetmap_upload">Lae muudatus OSM-i üles</string>
<string name="local_openstreetmap_were_uploaded">{0} huvipunkti/märget üles laaditud</string>
<string name="local_openstreetmap_uploadall">Laadi kõik üles</string>
<string name="local_openstreetmap_upload">Laadi muudatus OSM-i üles</string>
<string name="local_openstreetmap_delete">Kustuta muudatus</string>
<string name="local_openstreetmap_descr_title">Asünkroonne OSM muutmine:</string>
<string name="local_openstreetmap_settings">OSM huvipunktid/märkmed salvestatud seadmes</string>
@ -1946,7 +1946,7 @@
<string name="user_password">Salasõna</string>
<string name="osmand_service">Taustarežiim</string>
<string name="osmand_service_descr">OsmAnd töötab taustal, ekraan välja lülitatud.</string>
<string name="download_files_question_space">Kas laeme alla {0} fail(i)\?
<string name="download_files_question_space">Kas laadime alla {0} fail(i)\?
\n{1} MB (kokku {2} MB-st) võetakse kasutusse.</string>
<string name="use_transparent_map_theme">Läbipaistev teema</string>
<string name="choose_auto_follow_route">Kaardivaade automaatselt keskele</string>
@ -1981,7 +1981,7 @@
<string name="context_menu_item_search">Otsi lähedusest</string>
<string name="filename_input">Failinimi:</string>
<string name="file_with_name_already_exist">Sama nimega fail on juba olemas.</string>
<string name="local_index_items_uploaded">%1$d / %2$d ühik(ut) üles laetud.</string>
<string name="local_index_items_uploaded">%1$d / %2$d ühik(ut) üles laaditud.</string>
<string name="local_index_mi_upload_gpx">Saada OSM-i</string>
<string name="show_more_map_detail">Kuva kaardil rohkem üksikasju</string>
<string name="favourites_delete_multiple_succesful">Lemmikpunktid kustutatud.</string>
@ -2017,7 +2017,7 @@
<string name="internet_connection_required_for_online_route">Veebipõhine navigeerimine ei tööta ilma võrguühenduseta.</string>
<string name="tts_language_not_supported_title">Mittetoetatud keel</string>
<string name="tts_missing_language_data_title">Puuduvad andmed</string>
<string name="tts_missing_language_data">Mine turule valitud keele alla laadimiseks\?</string>
<string name="tts_missing_language_data">Kas läheme valitud keele alla laadimiseks rakendusepoodi\?</string>
<string name="gpx_option_reverse_route">Raja vastupidine suund</string>
<string name="gpx_option_destination_point">Kasuta olemasoleva sihtkohta</string>
<string name="gpx_option_from_start_point">Mööda kogu rada</string>
@ -2105,16 +2105,16 @@
<string name="daynight_mode_auto">Päikesetõus/loojang</string>
<string name="daynight_mode_sensor">Valgusandur</string>
<string name="daynight">Päeva/öö režiim</string>
<string name="download_files_question">Laadida alla {0} fail(s) ({1} MB)\?</string>
<string name="download_files_question">Kas laadime alla {0} fail(i) ({1} MB)\?</string>
<string name="items_were_selected">{0} ühik(ut) valitud</string>
<string name="filter_existing_indexes">Alla laetud</string>
<string name="shared_string_download_map">Lae kaart alla</string>
<string name="filter_existing_indexes">Alla laaditud</string>
<string name="shared_string_download_map">Laadi kaart alla</string>
<string name="continuous_rendering">Jätkuv kuvamine</string>
<string name="continuous_rendering_descr">Jätkuv kuvamine pilt-pildi haaval kuvamise asemel.</string>
<string name="rendering_exception">Valitud piirkonna joonistamine ebaõnnestus.</string>
<string name="show_point_options">Kasuta asukohta…</string>
<string name="renderer_load_sucess">Kuvaja laetud</string>
<string name="renderer_load_exception">Kuvaja laadimine ebaõnnestus.</string>
<string name="renderer_load_sucess">Visualiseerija laetud</string>
<string name="renderer_load_exception">Visualiseerija laadimine ebaõnnestus.</string>
<string name="renderers">Vektorkuvaja</string>
<string name="renderers_descr">Vali kuvamise välimus</string>
<string name="poi_context_menu_website">Kuva huvipunkti veebileht</string>
@ -2128,7 +2128,7 @@
<string name="transport_search_again">Lähtesta transpordi otsing</string>
<string name="voice">Salvestatud hääl</string>
<string name="voices">Hääljuhised</string>
<string name="no_vector_map_loaded">Vektorkaarte ei laetud</string>
<string name="no_vector_map_loaded">Vektorkaarte ei laaditud</string>
<string name="error_reading_gpx">GPX andmete laadimine ebaõnnestus.</string>
<string name="vector_data">Võrguühenduseta vektorkaardid</string>
<string name="transport_context_menu">Otsi transporti peatuses</string>
@ -2166,7 +2166,7 @@
<string name="max_level_download_tile_descr">Ära sirvi veebikaartide paane sellest suuremate suumitasemete korral.</string>
<string name="router_service_descr">Veebipõhine või võrguühenduseta navigeerimisteenus.</string>
<string name="update_existing">Asenda</string>
<string name="loading_streets_buildings">Tänavate/hoonete laadimine</string>
<string name="loading_streets_buildings">Laadin tänavaid/hooneid</string>
<string name="use_online_routing">Kasuta veebipõhist navigeerimist</string>
<string name="update_tile">Uuenda kaart</string>
<string name="choose_building">Vali hoone</string>
@ -2219,14 +2219,14 @@
<string name="share_menu_location">Jaga asukohta</string>
<string name="shared_string_send">Saada</string>
<string name="show_on_start_description">\'Väljas\' käivitab kaardi otse.</string>
<string name="map_downloaded">Kaart alla laetud</string>
<string name="map_downloaded">Kaart on allalaaditud</string>
<string name="map_downloaded_descr">%1$s kaart on kasutusvalmis.</string>
<string name="go_to_map">Kuva kaart</string>
<string name="shared_string_qr_code">QR kood</string>
<string name="world_map_download_descr">Maailma aluskaart (katab kogu maailma madalal suurendustasemel) puudub või on aegunud. Palun kaalu selle allalaadimist üldise ülevaate saamiseks.</string>
<string name="world_map_download_descr">Maailma aluskaart (katab kogu maailma madalal suurendustasemel) puudub või on aegunud. Üldise ülevaate saamiseks palun kaalu selle allalaadimist.</string>
<string name="shared_string_about">Rakenduse teave</string>
<string name="osm_edit_created_poi">OSM huvipunkt loodud</string>
<string name="shared_string_upload">Lae üles</string>
<string name="shared_string_upload">Laadi üles</string>
<string name="shared_string_update">Uuenda</string>
<string name="rendering_attr_hideProposed_name">Välja pakutud objektid</string>
<string name="read_more">Loe lisa</string>
@ -2288,7 +2288,7 @@
<string name="impassable_road_desc">Vali teed, mida soovid navigeerimise ajal vältida.</string>
<string name="shared_string_sound">Heli</string>
<string name="select_voice_provider">Vali hääljuhendamine</string>
<string name="select_voice_provider_descr">Vali või lae alla hääljuhendamine omas keeles.</string>
<string name="select_voice_provider_descr">Vali või laadi alla hääljuhendamine omas keeles.</string>
<string name="live_updates">Reaalajas uuendused</string>
<string name="available_maps">Saadaolevad kaardid</string>
<string name="last_update">Viimane uuendus: %s</string>
@ -2309,7 +2309,7 @@
<string name="rendering_attr_hideIcons_name">Huvipunktide ikoonid</string>
<string name="switch_start_finish">Vaheta omavahel lähte- ja sihkoht</string>
<string name="shared_string_select">Vali</string>
<string name="clear_updates_proposition_message">Eemalda alla laetud uuendused ja taasta kaardi algversioon</string>
<string name="clear_updates_proposition_message">Eemalda allalaaditud uuendused ja taasta kaardi algversioon</string>
<string name="add_time_span">Lisa ajavahe</string>
<string name="road_blocked">Tee on kinni</string>
<string name="shared_string_remove">Eemalda</string>
@ -2341,10 +2341,10 @@
<string name="download_files_error_not_enough_space">Pole piisavalt ruumi!
\n{3} MB on vajalik ajutiselt ning {1} MB püsivalt.
\n(Ainult {2} MB saadaval.)</string>
<string name="download_files_question_space_with_temp">Kas laeme alla {0} fail(i)\?
<string name="download_files_question_space_with_temp">Kas laadime alla {0} fail(i)\?
\n{3} MB kasutatakse ajutiselt, {1} MB püsivalt. (Kokku {2} MB-st.)</string>
<string name="upload_osm_note">Lae üles OSM märge</string>
<string name="upload_anonymously">Lae üles anonüümselt</string>
<string name="upload_osm_note">Laadi üles OSM märkus</string>
<string name="upload_anonymously">Laadi üles anonüümselt</string>
<string name="select_map_marker">Vali kaardimarker</string>
<string name="map_markers_other">Teised markerid</string>
<string name="show_transparency_seekbar">Kuva läbipaistev otsinguriba</string>
@ -2411,7 +2411,7 @@
<string name="skip_map_downloading_desc">Sul ei ole võrguühenduseta kaarte paigaldatud. Võid valida kaardi nimekirjast või kaardid hiljem alla laadida \'Menüü - %1$s\' kaudu.</string>
<string name="search_another_country">Vali mõni teine piirkond</string>
<string name="search_map">Kaartide otsing…</string>
<string name="first_usage_wizard_desc">Las OsmAnd määrab sinu asukoha ja soovitab selle piirkonna jaoks alla laetavaid kaarte.</string>
<string name="first_usage_wizard_desc">Las OsmAnd määrab sinu asukoha ja soovitab selle piirkonna jaoks alla laaditavaid kaarte.</string>
<string name="location_not_found">Asukohta ei leitud</string>
<string name="no_inet_connection">Internetiühendus puudub</string>
<string name="no_inet_connection_desc_map">Vajalik kaartide allalaadimiseks.</string>
@ -2423,13 +2423,13 @@
<string name="first_usage_greeting">Hangi juhiseid ja avasta uusi kohti ilma internetiühenduseta</string>
<string name="si_mi_meters">Miilid/meetrid</string>
<string name="get_for">Hangi %1$s ajaks</string>
<string name="osm_live_banner_desc">Hangi piiramatu kaartide alla laadimine, lisades uuendused iga nädal, päev või isegi tund.</string>
<string name="osm_live_banner_desc">Hangi võimalus kaarte piiramatult alla laadida, lisades uuendusi kord nädalas, päevas või isegi iga tund.</string>
<string name="osmand_plus_banner_desc">Piiramatud kaartide allalaadimised, uuendused ja Vikipeedia laiendus.</string>
<string name="get_it">Hangi see</string>
<string name="osm_live_payment_desc">Tellimustasu võetakse valitud ajavahemiku kohaselt. Saad sellest Google Play kaudu igal ajal loobuda.</string>
<string name="donation_to_osm">Annetus OSM kogukonnale</string>
<string name="donation_to_osm_desc">Osa Sinu annetusest saadetakse OSM\'i kaastöötajatele. Tellimuse hind jääb samaks.</string>
<string name="osm_live_subscription_desc">Tellimus võimaldab uuendused igas tunnis, päevas või nädalas ja piiramatu kogu maailma kaartide alla laadimise.</string>
<string name="osm_live_subscription_desc">Tellimus võimaldab uuendusi kord tunnis, päevas või nädalas ja piiramatu arvu terve maailma kaartide allalaadimise.</string>
<string name="si_mi_feet">Miilid/jalad</string>
<string name="driving_region_australia">Austraalia</string>
<string name="lang_kab">Kabiili</string>
@ -2475,10 +2475,10 @@
<string name="gpx_add_track">Lisa veel…</string>
<string name="shared_string_appearance">Välimus</string>
<string name="rendering_value_fine_name">Peen</string>
<string name="upload_poi">Lae üles huvipunkt</string>
<string name="upload_poi">Laadi üles huvipunkt</string>
<string name="search_map_hint">Linn või piirkond</string>
<string name="wiki_around">Lähedalasuvad Vikipeedia artiklid</string>
<string name="upload_osm_note_description">Lae üles oma OSM märge anonüümselt või kasutades oma OpenStreetMap.org profiili.</string>
<string name="upload_osm_note_description">Laadi üles oma OSM märge anonüümselt või kasutades oma OpenStreetMap.org profiili.</string>
<string name="routing_attr_allow_motorway_name">Kasuta kiirteid</string>
<string name="routing_attr_allow_motorway_description">Lubab kiirteed.</string>
<string name="lang_sr_latn">Serbia (ladina)</string>
@ -2544,20 +2544,20 @@
<string name="full_version_thanks">Täname OsmAnd tasulise versiooni ostmise eest.</string>
<string name="parking_options">Parkimisvalikud</string>
<string name="do_not_send_anonymous_app_usage">Ära saada anonüümset rakenduse kasutamise statistikat</string>
<string name="do_not_send_anonymous_app_usage_desc">OsmAnd kogub teavet selle kohta, milliseid rakenduse osi te avate. Teie asukohta ei saadeta kunagi, ega ka midagi, mida rakendusse sisestate ega üksikasju piirkondade kohta, mida vaatate, otsite või alla laete.</string>
<string name="do_not_send_anonymous_app_usage_desc">OsmAnd kogub teavet selle kohta, milliseid rakenduse osi sa avad. Sinu asukohta ei saadeta kunagi, ega ka midagi, mida rakendusse sisestad ega üksikasju piirkondade kohta, mida vaatad, otsid või laadid alla.</string>
<string name="do_not_show_startup_messages">Ära kuva käivitusteateid</string>
<string name="do_not_show_startup_messages_desc">Ära kuva rakenduse allahindlusi ega kohalike sündmuste teateid.</string>
<string name="osmand_extended_description_part2">GPS-navigeerimine
\n • Valige võrguühenduseta (välismaal viibides rändlustasudeta) või võrgus (kiirem) vahel
\n • Hääljuhised pöörangupõhisel suunamisel juhatavad teid mööda teed (salvestatud ja sünteesitud hääled)
\n • Vali võrguühenduseta (välismaal viibides rändlustasudeta) või võrgus (kiirem) vahel
\n • Hääljuhised pöörangupõhisel suunamisel juhatavad sind mööda teed (salvestatud ja sünteesitud hääled)
\n • Teekond arvutatakse sellest kõrvale kaldudes alati ümber
\n • Teeäärsed juhised, tänavanimed ja eeldatav saabumisaeg on abiks teel olles
\n • Teeäärsed juhised, tänavanimed ja eeldatav saabumisaeg on teel olles abiks
\n • Reisi turvalisemaks muutmiseks lülitatakse päeval/öösel ekraani režiim automaatselt ümber
\n • Näidake kiiruspiiranguid ja saate selle ületamise korral meeldetuletusi
\n • Kaardi suurendustaset kohandatakse vastavalt teie kiirusele
\n • Otsige sihtkohti aadressi, liigi (nt parkimine, restoran, hotell, bensiinijaam, muuseum) või geograafiliste koordinaatide järgi
\n • Näitame kiiruspiiranguid ja saad selle ületamise korral meeldetuletusi
\n • Kaardi suurendustaset kohandame vastavalt sinu kiirusele
\n • Otsi sihtkohti aadressi, liigi (nt parkimine, restoran, hotell, bensiinijaam, muuseum) või geograafiliste koordinaatide järgi
\n • Toetab teekonna vahepunkte
\n • Salvestage oma andmed või laadige üles GPX rada ja liikuge mööda seda
\n • Salvesta oma andmed või laadi üles GPX rada ja liigu mööda seda
\n</string>
<string name="osmand_plus_extended_description_part2">Navigeerimine
\n • Töötab võrgus (kiire) või võrguühenduseta (välismaal viibides puuduvad rändlustasud)
@ -2568,14 +2568,14 @@
\n • Otsige kohti aadressi, tüübi (nt restoran, hotell, bensiinijaam, muuseum) või geograafiliste koordinaatide järgi
\n</string>
<string name="analyze_on_map">Analüüsi kaardil</string>
<string name="subscribe_email_desc">Liitu meie meililistiga rakenduse allahindluste kohta teabe saamiseks ja saate veel 3 kaardi allalaadimist!</string>
<string name="subscribe_email_desc">Rakenduse allahindluste kohta teabe saamiseks liitu meie postiloendiga ja saad veel 3 kaardi allalaadimist!</string>
<string name="quick_action_add_destination_desc">Nupp ekraani keskkoha teekonna sihtkohaks muutmiseks; ühest varem valitud sihtkohast saab viimane vahesihtkoht.</string>
<string name="quick_action_replace_destination_desc">Nupp, mille vajutamine muudab ekraani keskkoha uueks teekonna sihtkohaks, asendades eelnevalt valitud sihtkoha (kui olemas).</string>
<string name="quick_action_add_first_intermediate_desc">Nupp ekraani keskkoha esimeseks vahesihtkohaks muutmiseks.</string>
<string name="quick_action_auto_zoom_desc">Nupp, mis lülitab automaatse kiirusetundliku suumimise sisse või välja.</string>
<string name="shared_string_paused">Peatatud</string>
<string name="animate_my_location_desc">Lülita sisse animeeritud oma asukohas kaardi panoraamimine navigeerimise ajal.</string>
<string name="srtm_menu_download_descr">Lae alla \'Kõrgusjoonte\' kaart selles piirkonnas kasutamiseks.</string>
<string name="srtm_menu_download_descr">Selles piirkonnas kasutamiseks laadi alla „Kõrgusjoonte“ kaart.</string>
<string name="srtm_purchase_header">Osta ja paigalda \'Kõrgusjoonte\' lisa astmestatud vertikaalsete alade kuvamiseks.</string>
<string name="quick_action_showhide_osmbugs_descr">Nupp, mis lülitab OSM märkmete kaardil kuvamise sisse või välja.</string>
<string name="private_access_routing_req">Sinu sihtkoht asub eramaal. Luba kasutada erateid sellel teekonnal\?</string>
@ -2585,7 +2585,7 @@
<string name="plugin_mapillary_descr">Tänavataseme fotod kõigile. Avasta kohti, tee kaastööd, jäädvusta maailma.</string>
<string name="improve_coverage_mapillary">Paranda foto katvust Mapillary abil</string>
<string name="mapillary_menu_filter_description">Piltide filtreerimine lähetaja, kuupäeva või liigi alusel. Aktiivne ainult lähivaate suurenduse korral.</string>
<string name="mapillary_menu_descr_tile_cache">Ajakohaste andmete nägemiseks lae paanid uuesti.</string>
<string name="mapillary_menu_descr_tile_cache">Ajakohaste andmete nägemiseks laadi paanid uuesti.</string>
<string name="store_tracks_in_monthly_directories">Salvesta salvestatud rajad kuude kaupa kaustades</string>
<string name="store_tracks_in_monthly_directories_descrp">Salvesta salvestatud rajad salvsetamise kuu kohastes alamkataloogides (näiteks 2018-01).</string>
<string name="average">Keskmine</string>
@ -2680,10 +2680,10 @@
<string name="osmand_srtm_long_description_1000_chars">See lisa pakub nii kõrgusjoonte ülekatte kui ka (reljeefse) künkavarjutuse kihi, mida kuvatakse OsmAnd standardkaartidel. Seda funktsionaalsust hindavad sportlased, matkajad, rändajad ja kõik teised, kes on huvitatud maastiku reljeefstruktuurist.
\n
\nGlobaalsed andmed (vahemikus 70 ° põhja ja 70 ° lõuna) põhinevad mõõtmistel, mille on teinud SRTM (süstiku radari topograafiamissioon) ja ASTER (täiustatud kosmose termilise kiirguse ja peegelduse radiomeeter), NASA maavaatlussatelliitide süsteemi lipulaeva Terra pardal olev pildistamisinstrument. ASTER on NASA, Jaapani majandus-, kaubandus- ja tööstusministeeriumi (METI) ja Jaapani kosmosesüsteemide (J-kosmosesüsteemid) koostöö.</string>
<string name="srtm_plugin_description">See laiendus pakub nii kõrgusjoonte ülekatte kui ka (reljeefse) künkavarjutuse kihi, mida kuvatakse OsmAnd standardkaartidel. Seda funktsionaalsust hindavad sportlased, matkajad, rändajad ja kõik teised, kes on huvitatud maastiku reljeefstruktuurist. (Pange tähele, et kõrgusjoonte ja/või reljeefi andmed on eraldi, pärast laienduse aktiveerimist on saadaval täiendavald alla laetavad failid.)
<string name="srtm_plugin_description">See laiendus pakub nii kõrgusjoonte ülekatte kui ka (reljeefse) künkavarjutuse kihi, mida kuvatakse OsmAnd standardkaartidel. Seda funktsionaalsust hindavad sportlased, matkajad, rändajad ja kõik teised, kes on huvitatud maastiku reljeefstruktuurist. (Pange tähele, et kõrgusjoonte ja/või reljeefi andmed on eraldi, pärast laienduse aktiveerimist on saadaval täiendavad allalaaditavad failid.)
\n
\nGlobaalsed andmed (vahemikus 70 ° põhja ja 70 ° lõuna) põhinevad mõõtmistel, mille on teinud SRTM (süstiku radari topograafiamissioon) ja ASTER (täiustatud kosmose termilise kiirguse ja peegelduse radiomeeter), NASA maavaatlussatelliitide süsteemi lipulaeva Terra pardal olev pildistamisinstrument. ASTER on NASA, Jaapani majandus-, kaubandus- ja tööstusministeeriumi (METI) ja Jaapani kosmosesüsteemide (J-kosmosesüsteemid) koostöö.</string>
<string name="plugin_touringview_descr">Selle vaate aktiveerimine muudab OsmAndi kaardistiili \'Reisivaateks\'. See on reisijatele ja kutselistele autojuhtidele mõeldud eriline kõrglahutusega vaade.
<string name="plugin_touringview_descr">Selle vaate aktiveerimine muudab OsmAndi kaardistiili „Reisivaateks“. See on reisijatele ja kutselistele autojuhtidele mõeldud eriline kõrglahutusega vaade.
\n
\nSee vaade pakub igal kaardi suurendamisel maksimaalse hulga kaardiandmetes saada olevaid reisiandmeid (eriti teed, rajad ja orientatsioonimärgid).
\n
@ -2693,7 +2693,7 @@
\n
\nSpetsiaalset kaardi allalaadimist pole vaja, vaade on loodud meie tavalistest kaartidest.
\n
\nSelle vaate saab tagasi lülitada, aktiveerides selle siin uuesti või muutes vastavalt vajadusele jaotises \'Kaardi seadistamine\' \'Kaardistiil\'.</string>
\nSelle vaate saad tagasi lülitada, aktiveerides selle siin uuesti või muutes vastavalt vajadusele jaotises „Kaardi seadistamine“ „Kaardistiil“.</string>
<string name="plugin_nautical_descr">See lisa rikastab OsmAnd kaardi ja navigatsioonirakendust, et toota ka merekaarte paadisõiduks, purjetamiseks ja muud tüüpi veespordi jaoks.
\n
\nSpetsiaalne OsmAnd kaardi lisamoodul pakub kõiki merenavigatsioonimärke ja kaardisümboleid nii sisemaal kui ka rannikul navigeerimiseks. Iga navigatsioonimärgi kirjeldus sisaldab nende identifitseerimiseks vajalikke üksikasju ja tähendust (kategooria, kuju, värv, järjestus, viide jne).
@ -2732,7 +2732,7 @@
\n * Pikk puudutus punktil kirjelduse vaatamiseks ja lisamiseks.
\n * Puuduta mõõtmisvidinat täpsemate tegevuste nägemiseks.</string>
<string name="use_magnetic_sensor_descr">Kompassi lugemiseks kasuta orientatsioonianduri asemel magnetilist andurit.</string>
<string name="download_using_mobile_internet">WiFi ühendus puudub. Kas kasutada allalaadimiseks praegust internetiühendust\?</string>
<string name="download_using_mobile_internet">WiFi ühendus puudub. Kas kasutame allalaadimiseks praegust internetiühendust\?</string>
<string name="osmand_background_plugin_description">Kuvab taustajälgimise ja navigeerimise sisselülitamise sätteid GPS-seadet perioodiliselt äratades (välja lülitatud ekraaniga).</string>
<string name="clear_dest_confirm">Oled kindel, et soovid sihtkoha (ja vahepealsed sihtkohad) tühjendada\?</string>
<string name="dropbox_plugin_description">Sünkrooni salvestatud radasid ja heli- või videomärkmeid oma Dropboxi kontole.</string>
@ -2756,21 +2756,21 @@
<string name="rendering_attr_appMode_description">Optimeeri kaarti</string>
<string name="rendering_attr_contourLines_description">Kuva alates suurendustasemest (vajab kõrgusandmeid):</string>
<string name="local_index_description">Täpsema teabe saamiseks puuduta mõnda olemasolevat üksust, mitteaktiveerimiseks või kustutamiseks puuduta pikalt. Seadme praegused andmed (%1$s vaba):</string>
<string name="first_time_msg">Täname OsmAnd kasutamise eest. Lae piirkondlikud andmed võrguühenduseta kasutamiseks alla menüüst \'Seaded\' → \'Halda kaardifaile\', et vaadata kaarte, otsida aadresse, leida huvipunkte, ühistransporti ja palju muud.</string>
<string name="first_time_msg">Täname OsmAnd kasutamise eest. Laadi piirkondlikud andmed võrguühenduseta kasutamiseks alla menüüst „Seaded“ → „Halda kaardifaile“, et vaadata kaarte, otsida aadresse, leida huvipunkte, ühistransporti ja palju muud.</string>
<string name="local_indexes_cat_tile">Veebis ja vahemällu salvestatud paanikaardid</string>
<string name="index_settings_descr">Lae alla ja halda oma seadmesse salvestatud võrguühenduseta kaardifaile.</string>
<string name="index_settings_descr">Laadi alla ja halda oma seadmesse salvestatud võrguühenduseta kaardifaile.</string>
<string name="map_online_data">Veebipõhised ja paanikaardid</string>
<string name="prefs_plugins_descr">Lisad aktiveerivad täpsemad sätted ja täiendavad funktsioonid.</string>
<string name="vector_maps_may_display_faster_on_some_devices">Vektorkaardid kuvatakse tõenäoliselt kiiremini. Mõne seadme puhul ei pruugi see hästi töötada.</string>
<string name="play_commands_of_currently_selected_voice">Vali hääl ja proovi esitades teateid:</string>
<string name="native_rendering">Sisseehitatud renderdamine</string>
<string name="test_voice_prompts">Testi hääljuhiseid</string>
<string name="switch_to_raster_map_to_see">Lae selle asukoha jaoks võrguühenduseta vektorkaart alla menüüst \'Seaded\' (\'Halda kaardifaile\') või lülitu ümber \'Veebikaardid\' lisale.</string>
<string name="switch_to_raster_map_to_see">Laadi selle asukoha jaoks võrguühenduseta vektorkaart alla menüüst „Seaded“ („Halda kaardifaile“) või lülitu ümber „Veebikaardid“ lisamoodulile.</string>
<string name="validate_gpx_upload_name_pwd">GPX failide üleslaadimiseks täpsusta palun oma OSM kasutajanimi ja salasõna.</string>
<string name="zoom_by_trackball_descr">Muuda kaardi suurendustaset juhtkuuli horisontaalse liigutusega.</string>
<string name="zoom_by_trackball">Kasuta juhtkuuli suurendustaseme juhtimiseks</string>
<string name="rendering_out_of_memory">Valitud ala kuvamiseks pole piisavalt protsessimälu</string>
<string name="update_poi_does_not_change_indexes">Rakendusesisesed huvipunktide muudatused ei mõjuta alla laetud kaardifaile, muudatused salvestatakse failina seadmesse.</string>
<string name="update_poi_does_not_change_indexes">Rakendusesisesed huvipunktide muudatused ei mõjuta allalaaditud kaardifaile, muudatused salvestatakse failina seadmesse.</string>
<string name="local_openstreetmap_settings_descr">Kuva ja halda seadme andmebaasis märgitud OSM huvipunkte ja märkmeid.</string>
<string name="live_monitoring_url_descr">Täpsusta veebiaadress parameetrite süntaksiga: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
<string name="gpx_monitoring_disabled_warn">Logi rada kasutades GPX vidinat või \'Reisi salvestamise\' sätteid.</string>
@ -2780,21 +2780,21 @@
<string name="init_native_library">Süsteemi teegi lähtestamine…</string>
<string name="pref_vector_rendering">Vektorite renderdamise valikud</string>
<string name="poi_query_by_name_matches_categories">Leiti mitu seotud huvipunktide kategooriat.</string>
<string name="data_to_search_poi_not_available">Huvipunktide otsimiseks lae alla võrguühenduseta andmed.</string>
<string name="data_to_search_poi_not_available">Huvipunktide otsimiseks laadi alla võrguühenduseta andmed.</string>
<string name="old_poi_file_should_be_deleted">Huvipunktide andmefail \'%1$s\' on üleliigne ja selle võib kustutada.</string>
<string name="update_poi_file_not_found">Kohalikku faili huvipunktide muudatuste säilitamiseks ei leitud ega saanud ka luua.</string>
<string name="map_version_changed_info">Uute kaardifailide kasutamiseks lae alla rakenduse uus versioon.</string>
<string name="local_index_upload_gpx_description">Lae GPX failid üles OSM kogukonda, parandades seeläbi kaarte.</string>
<string name="map_version_changed_info">Uute kaardifailide kasutamiseks laadi alla rakenduse uus versioon.</string>
<string name="local_index_upload_gpx_description">Laadi GPX failid üles OSM kogukonda, parandades seeläbi kaarte.</string>
<string name="show_more_map_detail_descr">Kuva mõningaid vektorkaardi detaile (teed jne) juba madalamatel suurendustasemetel.</string>
<string name="favorite_delete_multiple">Oled kindel, et soovid kustutada %1$d lemmikut ja %2$d lemmikute gruppi\?</string>
<string name="basemap_missing">Lae alla maailma põhikaart, et saada ülevaade kogu maailmast ka madalamatel suurendustasemetel.</string>
<string name="vector_data_missing">Lae alla (\'võrguühenduseta\') andmed kaartide võrguühenduseta kasutamiseks.</string>
<string name="basemap_missing">Saamaks ülevaade kogu maailmast ka madalamatel suurendustasemetel, laadi alla maailma põhikaart.</string>
<string name="vector_data_missing">Laadi alla andmed kaartide võrguühenduseta kasutamiseks.</string>
<string name="local_index_no_items_to_do">Puuduvad üksused %1$s</string>
<string name="tts_language_not_supported">Paigaldatud Android TTS (kõnesünteesi) mootor ei toeta valitud keelt, selle asemel kasutatakse selle eelhäälestatud TTS keelt. Kas otsida turult teist TTS-mootorit\?</string>
<string name="switch_to_vector_map_to_see">Selle asukoha jaoks on olemas võrguühenduseta vektorkaart.
\n
\nKasutamiseks aktiveeri menüü \'Menüü\' → \'Seadista kaart\' → \'Kaardiallikas…\' → \'Võrguühenduseta vektorkaardid\'.</string>
<string name="warning_tile_layer_not_downloadable">Rakendus ei suuda alla laadida kaardikihti %1$s, uuesti paigaldamine võib aidata.</string>
<string name="warning_tile_layer_not_downloadable">Rakendus ei suuda alla laadida kaardikihti %1$s, selle uuesti paigaldamine võib aidata.</string>
<string name="internet_not_available">Tegevust ei saa sooritada ilma internetiühenduseta.</string>
<string name="level_to_switch_vector_raster_descr">Kasuta rasterkaarte kõigeks seda taset ületavaks.</string>
<string name="level_to_switch_vector_raster">Vähim vektori suurendustase</string>
@ -2806,16 +2806,16 @@
\n
\nNavigeerimine lülitati ajutiselt ümber CloudMade võrguteenusele.</string>
<string name="osmand_net_previously_installed">Uues rakenduses toetatakse kõiki vanas paigaldatud rakenduses olevaid võrguühenduseta andmeid, kuid lemmikpunktid tuleb vanast rakendusest eksportida ja seejärel uues importida.</string>
<string name="voice_is_not_available_msg">Hääljuhiseid ei ole saadaval, mine menüüsse \'Seaded\' → \'Navigeerimise seaded\', vali profiil → \'Hääljuhised\' ja vali või lae alla hääljuhiste pakett.</string>
<string name="voice_is_not_available_msg">Hääljuhiseid ei ole saadaval, mine menüüsse „Seaded“ → „Navigeerimise seaded“, vali profiil → „Hääljuhised“ ja vali või laadi alla hääljuhiste pakett.</string>
<string name="daynight_descr">Reguleeri öö- ja päevarežiimi vahetamist.</string>
<string name="fast_route_mode_descr">Luba, et arvutada kiireim teekond või keela kütusesäästliku teekonna jaoks.</string>
<string name="tiles_to_download_estimated_size">Suurendustasemel {0} lae alla {1} paani ({2} MB)</string>
<string name="select_max_zoom_preload_area">Maksimaalne eellaetav suurendustase</string>
<string name="maps_could_not_be_downloaded">Seda kaarti ei saa alla laadida</string>
<string name="tiles_to_download_estimated_size">Suurendustasemel {0} laadi alla {1} paani ({2} MB)</string>
<string name="select_max_zoom_preload_area">Maksimaalne eellaaditav suurendustase</string>
<string name="maps_could_not_be_downloaded">Seda kaarti ei õnnestunud alla laadida</string>
<string name="gpx_files_not_found">Radade kaustast ei leitud ühtegi GPX faili</string>
<string name="import_file_favourites">Salvestada andmed GPX failina või importida teekonnapunktid \'Lemmikud\' hulka\?</string>
<string name="fav_file_to_load_not_found">Lemmikuid sisaldavat GPX faili ei leitud asukohast {0}</string>
<string name="none_region_found">Mälukaardilt ei leitud ühtegi alla laetud kaarti.</string>
<string name="none_region_found">Mälukaardilt ei leitud ühtegi allalaaditud kaarti.</string>
<string name="thanks_yandex_traffic">Aitäh Yandexile liiklusinfo eest.</string>
<string name="use_trackball_descr">Kasuta juhtpalli kaardi liigutamiseks.</string>
<string name="use_trackball">Kasuta juhtrullikut</string>
@ -2844,11 +2844,11 @@
<string name="sd_unmounted">Mälukaardile pole juurdepääsu.
\nSa ei näe kaarte ega leia asju.</string>
<string name="sd_mounted_ro">Mälukaart on kirjutuskaitstud.
\nNüüd on võimalik vaadata ainult eellaetud kaarti, mitte uusi alasid alla laadida.</string>
\nNüüd on võimalik vaadata ainult eellaaditud kaarti, mitte uusi alasid alla laadida.</string>
<string name="unzipping_file">Faili lahti pakkimine…</string>
<string name="route_head">Suundu</string>
<string name="first_time_continue">Hiljem</string>
<string name="first_time_download">Lae alla piirkondi</string>
<string name="first_time_download">Laadi alla piirkondi</string>
<string name="search_poi_location">Signaali ootel…</string>
<string name="search_near_map">Otsi praeguse kaardi keskkoha lähedusest</string>
<string name="search_nearby">Otsi lähedusest</string>
@ -2872,7 +2872,7 @@
<string name="show_transport_over_map_description">Kuva ühistranspordi peatused kaardil.</string>
<string name="show_transport_over_map">Kuva ühistranspordi peatused</string>
<string name="hello">OsmAnd navigeerimisrakendus</string>
<string name="update_poi_success">Huvipunktide andmed uuendatud (laeti {0})</string>
<string name="update_poi_success">Huvipunktide andmed uuendatud (laaditi {0})</string>
<string name="update_poi_error_local">Kohalike huvipunktide loetelu uuendamine ebaõnnestus.</string>
<string name="update_poi_is_not_available_for_zoom">Kaardi suurendamine võimaldab huvipunkte uuendada</string>
<string name="search_history_city">Linn: {0}</string>
@ -2880,17 +2880,17 @@
<string name="search_history_int_streets">Ristmik: {0} x {1} kohas {2}</string>
<string name="favorite">Lemmik</string>
<string name="uploading_data">Andmete üleslaadimine…</string>
<string name="uploading">Üleslaadimine</string>
<string name="uploading">Laadin üles</string>
<string name="search_nothing_found">Midagi ei leitud</string>
<string name="searching">Otsimine…</string>
<string name="searching_address">Aadressi otsimine…</string>
<string name="search_offline_address">Võrguühenduseta otsing</string>
<string name="route_general_information">Vahemaa kokku %1$s, sõiduaeg %2$d h %3$d min.</string>
<string name="sd_dir_not_accessible">Mälukaardil olevale andmesalvestuskaustale pole juurdepääsu!</string>
<string name="download_question">Laadida alla {0} - {1} \?</string>
<string name="download_question">Kas laadime alla {0} - {1} \?</string>
<string name="download_question_exist">Võrguühenduseta andmed {0} on juba olemas ({1}). Värskendada see ({2})\?</string>
<string name="address">Aadress</string>
<string name="downloading_list_indexes">Saadaolevate piirkondade loetelu allalaadimine</string>
<string name="downloading_list_indexes">Laadin alla saadaolevate piirkondade loetelu</string>
<string name="list_index_files_was_not_loaded">Piirkondade loendit ei õnnestunud hankida aadressilt https://osmand.net.</string>
<string name="fav_points_edited">Lemmikpunkti muudeti</string>
<string name="fav_points_not_exist">Lemmikpunkte pole</string>
@ -2901,28 +2901,28 @@
<string name="opening_changeset">Muudatuste komplekti avamine…</string>
<string name="closing_changeset">Muudatuste komplekti sulgemine…</string>
<string name="commiting_node">Sõlme kinnitamine…</string>
<string name="loading_poi_obj">HP laadimine</string>
<string name="loading_poi_obj">Laadin HP</string>
<string name="auth_failed">Autoriseerimine ebaõnnestus</string>
<string name="failed_op">ebaõnnestus</string>
<string name="converting_names">Kohalike/ingliskeelsete nimede teisendamine…</string>
<string name="loading_postcodes">Postiindeksite laadimine</string>
<string name="loading_streets">Tänavate laadimine</string>
<string name="loading_cities">Linnade laadimine</string>
<string name="loading_postcodes">Laadin postiindekseid</string>
<string name="loading_streets">Laadin tänavaid</string>
<string name="loading_cities">Laadin linnasid</string>
<string name="poi">HP</string>
<string name="error_occurred_saving_gpx">GPX faili salvestamine ebaõnnestus.</string>
<string name="arrived_at_destination">Oled kohale jõudnud.</string>
<string name="invalid_locations">Vigased koordinaadid</string>
<string name="go_back_to_osmand">Tagasi kaardile</string>
<string name="loading_data">Andmete laadimine</string>
<string name="loading_data">Laadin andmeid</string>
<string name="reading_indexes">Kohalike andmete lugemine…</string>
<string name="previous_run_crashed">OsmAnd jooksis viimasel kasutamisel kokku. Logifail asub {0}. Palun teata probleemist ja edasta logifail.</string>
<string name="saving_gpx_tracks">GPX faili salvestamine…</string>
<string name="finished_task">Valmis</string>
<string name="osm_settings_descr">Määra OSM kaastööks vajalikud OpenStreetMap.org (OSM) sätted.</string>
<string name="data_settings_descr">Määra keel, lae alla või lae andmed uuesti.</string>
<string name="data_settings_descr">Määra keel, laadi alla või laadi andmed uuesti.</string>
<string name="data_settings">Andmed</string>
<string name="additional_settings">Lisaseadistused</string>
<string name="reload_tile">Lae paan uuesti</string>
<string name="reload_tile">Laadi paan uuesti</string>
<string name="mark_point">Sihtmärk</string>
<string name="use_english_names_descr">Valige kohalike ja ingliskeelsete nimede vahel.</string>
<string name="use_english_names">Kasuta kaartidel ingliskeelseid nimesid</string>
@ -2941,7 +2941,7 @@
<string name="use_internet">Kasuta internetti</string>
<string name="show_location">Kuva oma asukoht</string>
<string name="show_gps_coordinates_text">Kuva kaardil GPS koordinaadid</string>
<string name="use_internet_to_download_tile">Lae alla puuduvad kaardipaanid</string>
<string name="use_internet_to_download_tile">Laadi alla puuduvad kaardipaanid</string>
<string name="app_description">Navigeerimisrakendus</string>
<string name="search_button">Otsi</string>
<string name="search_activity">Otsi</string>
@ -2984,7 +2984,7 @@
<string name="poi_action_succeded_template">Tegevus {0} lõpetatud.</string>
<string name="poi_error_unexpected_template">Tegevust {0} ei saanud sooritada.</string>
<string name="poi_error_io_error_template">I/O tõrge tegevuse {0} sooritamisel.</string>
<string name="poi_error_info_not_loaded">Sõlme teavet ei laetud</string>
<string name="poi_error_info_not_loaded">Sõlme teavet ei laaditud</string>
<string name="poi_dialog_opening_hours">Avatud</string>
<string name="poi_dialog_comment">Kommentaar</string>
<string name="poi_dialog_comment_default">Huvipunkti muutmine</string>
@ -3018,7 +3018,7 @@
<string name="user_hates_app_get_feedback_long">Palun anna meile teada kõigist ettepanekutest.</string>
<string name="failed_to_upload">Ei saanud üles laadida</string>
<string name="delete_change">Kustuta muudatus</string>
<string name="successfully_uploaded_pattern">Üles laetud {0}/{1}</string>
<string name="successfully_uploaded_pattern">Üles laaditud {0}/{1}</string>
<string name="try_again">Proovi uuesti</string>
<string name="error_message_pattern">Viga: {0}</string>
<string name="dahboard_options_dialog_title">Seadista armatuurlaud</string>
@ -3059,7 +3059,7 @@
<string name="downloads">Allalaadimised</string>
<string name="confirm_download_roadmaps">Ainult maanteede kaarti pole vaja, sest sul on tavaline (täielik) kaart. Kas soovid selle ikkagi alla laadida\?</string>
<string name="file_size_in_mb">%.1f MB</string>
<string name="free_downloads_used">Tasuta allalaadimised ära kasutatud</string>
<string name="free_downloads_used">Tasuta allalaadimised on ära kasutatud</string>
<string name="free_downloads_used_description">Kuvab järelejäänud tasuta allalaadimiste arvu.</string>
<string name="application_dir_description">Vali, kuhu soovid kaarte ja muid andmefaile salvestada.</string>
<string name="enter_country_name">Sisesta riigi nimi</string>
@ -3091,7 +3091,7 @@
<string name="use_dashboard_btn">Kasuta armatuurlauda</string>
<string name="use_drawer_btn">Kasuta menüüd</string>
<string name="value_downloaded_of_max">%1$.1f / %2$.1f MB</string>
<string name="only_download_over_wifi">Lae alla ainult WiFi kaudu</string>
<string name="only_download_over_wifi">Laadi alla ainult WiFi kaudu</string>
<string name="missing_write_external_storage_permission">OsmAndil puudub mälukaardi kasutamise luba</string>
<string name="last_map_change">Viimane kaardimuudatus: %s</string>
<string name="hourly">Iga tund</string>
@ -3204,12 +3204,12 @@
\n • Vikipeedia sinu eelistatud keeles võib sulle linnaekskursiooni ajal palju öelda
\n • Ühistranspordipeatused (buss, tramm, rong) koos liinide nimedega aitavad uues linnas navigeerida
\n • Jalakäijate režiimis GPS navigeerimine loob sulle marsruudi kõnniteede abil
\n • Lae üles GPX marsruut ja järgi seda või registreeri ja jaga enda oma
\n • Laadi üles GPX marsruut ja järgi seda või salvesta ja jaga enda oma
\n</string>
<string name="osmand_extended_description_part7">Panusta OSM kvaliteeti
\n Andmevigadest teatamine
\n • Lae GPX rajad OSM keskkonda üles otse rakendusest
\n • Lisa huvipunkte ja lae need kohe üles OSM keskkonda (või hiljem internetühenduse tekkides)
\n Teata andmevigadest
\n • Laadi GPX rajad OSM keskkonda üles otse rakendusest
\n • Lisa huvipunkte ja laadi need kohe üles OSM keskkonda (või hiljem internetühenduse tekkides)
\n</string>
<string name="osmand_extended_description_part8">OsmAnd on aktiivselt arendatud avatud lähtekoodiga tarkvara. Kõik saavad rakendusse panustada, teatades vigadest, parandades tõlkeid või luues uut funktsioonaalsust. Lisaks kasutab projekt rahalisele toetuset programmerimiseks ja uute funktsioonide testimiseks.
\n Ligikaudne kaardi leviala ja kvaliteet:
@ -3261,11 +3261,11 @@
\n • Valikuline kiiruse ja kõrguse kuvamine
\n • Kõrgusjoonte ja künkavarjutuse kuvamine (täiendava lisa abil)</string>
<string name="osmand_plus_extended_description_part7">Tee otse OSM kaastööd
\n Andmevigadest teatamine
\n • Lae GPX radu OSM keskkonda otse rakendusest
\n • Lisa huvipunkte ja lae need kohe üles OSM keskkonda (või hiljem internetiühenduse tekkimisel)
\n Valikuline reisi salvestamine ka taustrežiimis (kui seade on puhkeolekus)
\n OsmAnd on aktiivselt arendatud avatud lähtekoodiga tarkvara. Kõik saavad rakendusse panustada, teatades vigadest, parandades tõlkeid või kodeerides uusi funktsioone. Lisaks toetub projekt rahalisele toetusele koodide kodeerimiseks ja uute funktsioonide testimiseks.
\n Teata andmevigadest
\n • Laadi GPX radu OSM keskkonda otse rakendusest
\n • Lisa huvipunkte ja laadi need kohe üles OSM keskkonda (või hiljem internetiühenduse tekkimisel)
\n Kui soovid, siis salvesta teekonda ka taustrežiimis (kui seade on puhkeolekus)
\n OsmAnd on aktiivselt arendatud avatud lähtekoodiga tarkvara. Kõik saavad rakendusse panustada, teatades vigadest, parandades tõlkeid või kodeerides uusi funktsioone. Lisaks toetub projekt rahalisele toetusele nii programmeerimiseks kui ka uue funktsionaalsuse testimiseks.
\n</string>
<string name="osmand_plus_extended_description_part8">Ligikaudne kaardi leviala ja kvaliteet:
\n • Lääne-Euroopa: ****
@ -3278,7 +3278,7 @@
\n • Lähis-Ida: **
\n • Aafrika: **
\n • Antarktika: *
\n Enamike riikide andmed üle maailma on saadaval allalaadimiseks
\n Enamike riikide andmed üle maailma on allalaadimiseks saadaval
\n Afganistanist Zimbabweni, Austraaliast Ameerika Ühendriikideni. Argentina, Brasiilia, Kanada, Prantsusmaa, Saksamaa, Mehhiko, Suurbritannia, Hispaania, …
\n</string>
<string name="save_poi_too_many_uppercase">Nimi sisaldab liiga palju suurtähti. Jätkata\?</string>
@ -3302,8 +3302,8 @@
<string name="toast_empty_name_error">Nimetu asukoht</string>
<string name="tunnel_warning">Tunnel ees</string>
<string name="show_tunnels">Tunnelid</string>
<string name="download_wikipedia_description">Lae alla Vikipeedia artiklid %1$s kohta ilma võrguühenduseta lugemiseks.</string>
<string name="download_wikipedia_label">Lae alla Vikipeedia andmed</string>
<string name="download_wikipedia_description">Laadi alla Vikipeedia artiklid %1$s kohta ilma võrguühenduseta lugemiseks.</string>
<string name="download_wikipedia_label">Laadi alla Vikipeedia andmed</string>
<string name="open_in_browser_wiki_description">Vaata artiklit veebilehitsejas.</string>
<string name="download_wiki_region_placeholder">see piirkond</string>
<string name="wiki_article_search_text">Vastava viki artikli otsing</string>
@ -3360,7 +3360,7 @@
<string name="login_and_pass">Kasutajanimi ja salasõna</string>
<string name="plugin_global_prefs_info">Need seaded on üldised ja rakenduvad kõikidele profiilidele</string>
<string name="osm_editing">OSM\'i andmete muutmine</string>
<string name="osm_edits_view_descr">Kõiki üleslaadimata muudatusi või OSM vigu saad vaadata menüüs %1$s. Üleslaaditud punkte OsmAnd ei kuva.</string>
<string name="osm_edits_view_descr">Vaata kõiki üleslaadimata muudatusi või OSM vigu saad menüüs %1$s. Juba üleslaaditud muudatusi OsmAnd ei kuva.</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Ikooni kuvatakse vaid navigeerimise või liikumise ajal.</string>
<string name="select_map_icon_descr">Peatumisel näidatav ikoon.</string>
@ -3556,7 +3556,7 @@
<string name="use_volume_buttons_as_zoom_descr">Nutiseadme helitugevuse nuppudega kontrollida saad kaardi suumi taset.</string>
<string name="use_volume_buttons_as_zoom">Helitugevuse nupud toimivad suumina</string>
<string name="please_provide_point_name_error">Palun sisestage punkti nimi</string>
<string name="search_download_wikipedia_maps">Lae alla Vikipeedia kaardid</string>
<string name="search_download_wikipedia_maps">Laadi alla Vikipeedia kaardid</string>
<string name="plugin_wikipedia_description">Hangi huviväärsuste kohta teavet Vikipeediast. See on sinu võrguühenduseta reisiraamat - lihtsalt võta kasutusele Vikipeedia lisaprogramm ja loe artikleid enda ümber asuvate objektide kohta.</string>
<string name="add_hidden_group_info">Kuna valitud grupp on peidetud, siis lisatud punkt ei ole kaardil nähtav. Vajadusel leiad ta „%s“ alt.</string>
<string name="app_mode_go_cart">Kartauto</string>
@ -3574,7 +3574,7 @@
<string name="turn_screen_on_power_button">Toitenupp</string>
<string name="shared_string_uninstall">Eemalda</string>
<string name="extra_maps_menu_group">Täiendavad kaardid</string>
<string name="tiles_storage_descr">Vali kuidas sa soovid allalaetud paane salvestada.</string>
<string name="tiles_storage_descr">Vali kuidas sa soovid allalaaditud paane salvestada.</string>
<string name="mapillary_item">OsmAnd ja Mapillary</string>
<string name="quick_action_item">Kiirtegevus</string>
<string name="radius_ruler_item">Raadiuse joonlaud</string>
@ -3653,7 +3653,7 @@
<string name="move_inside_category">Sa võid kirjeid liigutada vaid selle kategooria piires.</string>
<string name="shared_string_items">Kirjed</string>
<string name="reset_deafult_order">Taasta kirjete vaikimisi järjekord</string>
<string name="expire_time_descr">Puhverdatud paanid laetakse uuesti alla peale nimetatud minutite möödumist. Kui sa ei soovi uuendamist, siis jäta väli tühjaks.
<string name="expire_time_descr">Puhverdatud paanid laaaditakse uuesti alla peale nimetatud minutite möödumist. Kui sa ei soovi uuendamist, siis jäta väli tühjaks.
\n
\nÜks päev on 1440 minutit.
\nÜks nädal on 10080 minutit.
@ -3818,7 +3818,7 @@
<string name="shared_string_add_photo">Lisa foto</string>
<string name="register_on_openplacereviews">Registreeru
\nOpenPlaceReviews.org saidis</string>
<string name="register_on_openplacereviews_desc">Fotode allikaks on OpenPlaceReviews.org veebisait. Oma fotode üleslaadimiseks peaksid liituma selle veebisaidi kasutajaks.</string>
<string name="register_on_openplacereviews_desc">Fotode allikaks on avatud andmetel põhinev OpenPlaceReviews.org veebisait. Oma fotode üleslaadimiseks peaksid liituma selle veebisaidi kasutajaks.</string>
<string name="register_opr_create_new_account">Loo uus kasutajakonto</string>
<string name="register_opr_have_account">Mul juba on kasutajakonto olemas</string>
<string name="shared_string_search_history">Otsinguajalugu</string>
@ -3838,7 +3838,7 @@
<string name="add_to_opr">Lisa OpenPlaceReviews saiti</string>
<string name="use_dev_url_descr">Tavasaidi openstreetmap.org asemel kasuta OSM märkuste, huvipunktide või GPX-failide üleslaadimise katsetamiseks arendussaiti dev.openstreetmap.org.</string>
<string name="use_dev_url">Kasuta dev.openstreetmap.org saiti</string>
<string name="add_photos_descr">OsmAnd kuvam fotosid mitmetest allikatest:
<string name="add_photos_descr">OsmAnd kuvab fotosid mitmetest allikatest:
\nOpenPlaceReviews - huvipunkti fotod;
\nMapillary - tänavavaated;
\nWikimedia või veeb - OpenStreetMap\'i andmetes kirjeldatud fotod.</string>
@ -3850,4 +3850,6 @@
<string name="plan_route_split_after">Tükelda pärast</string>
<string name="plan_route_split_before">Tükelda enne</string>
<string name="plan_route_join_segments">Liida lõigud</string>
<string name="profile_type_user_string">Kasutajaprofiil</string>
<string name="profile_type_osmand_string">OsmAnd profiil</string>
</resources>

View file

@ -2063,7 +2063,7 @@
<string name="poi_dialog_reopen">بازگشایی</string>
<string name="get_plugin">دریافت</string>
<string name="use_fast_recalculation">محاسبهٔ مجدد هوشمند</string>
<string name="use_fast_recalculation_desc">فقط بخش ابتدایی مسیر را مجدداً محاسبه می‌کند. برای سفرهای طولانی مفید است.</string>
<string name="use_fast_recalculation_desc">فقط بخش ابتدایی مسیر را مجدداً محاسبه می‌کند. سودمند برای سفرهای طولانی.</string>
<string name="do_you_like_osmand">آیا از OsmAnd راضی هستید؟</string>
<string name="we_really_care_about_your_opinion">دیدگاه و بازخورد شما ارزشمند است.</string>
<string name="rate_this_app">به این برنامه امتیاز بدهید</string>
@ -3481,7 +3481,7 @@
<string name="live_monitoring_descr">اجازه می‌دهد موقعیت کنونی با استفاده از ضبط سفر هم‌رسانی شود.</string>
<string name="tracks_view_descr">ردهای ضبط‌شدهٔ شما در %1$s یا در پوشهٔ OsmAnd قرار دارند.</string>
<string name="multimedia_notes_view_descr">یادداشت‌های OSMای شما در %1$s قرار دارند.</string>
<string name="osm_edits_view_descr">می‌توانید همهٔ ویرایش‌ها یا یادداشت‌های OSMای خود را که آپلود نکرده‌اید در %1$s ببینید. نقاط آپلودشده را دیگر در OsmAnd نمی‌بینید.</string>
<string name="osm_edits_view_descr">همهٔ ویرایش‌ها یا یادداشت‌های OSMای آپلودنشدهٔ خود را در %1$s ببینید. تغییرات آپلودشده را دیگر نمی‌بینید.</string>
<string name="logcat_buffer_descr">لاگ‌های جزئی برنامه را بررسی و هم‌رسانی کنید</string>
<string name="multimedia_use_system_camera">استفاده از برنامهٔ سیستم</string>
<string name="multimedia_photo_play_sound">صدای شاتر دوربین</string>
@ -3925,7 +3925,7 @@
<string name="number_of_gpx_files_selected_pattern">%s فایل رد انتخاب شده است</string>
<string name="monitoring_control_start">ضبط</string>
<string name="disable_recording_once_app_killed_descrp">هنگامی که برنامه را از طریق برنامه‌های اخیر ببندید ضبط رد به‌طور موقت می‌ایستد. (نشانگر اجرای پس‌زمینه از نوار اعلان حذف می‌شود.)</string>
<string name="save_global_track_interval_descr">بازهٔ زمانی برای ضبط رد را انتخاب کنید (که از طریق ابزار ضبط سفر روی نقشه فعال می‌شود).</string>
<string name="save_global_track_interval_descr">بازهٔ زمانی برای ضبط رد را انتخاب کنید (که از طریق ابزارک ضبط سفر روی نقشه روشن می‌شود).</string>
<string name="gpx_monitoring_stop">نگه‌داشتن ضبط سفر</string>
<string name="gpx_monitoring_start">ازسرگیری ضبط سفر</string>
<string name="app_mode_inline_skates">اسکیت این‌لاین</string>
@ -3933,7 +3933,7 @@
<string name="app_mode_motor_scooter">اسکوتر موتوری</string>
<string name="app_mode_wheelchair_forward">ویلچر رو به جلو</string>
<string name="threshold_distance">فاصله آستانه</string>
<string name="start_finish_icons">نمادهای ابتدا/انتها</string>
<string name="start_finish_icons">نمادهای ابتدا و انتها</string>
<string name="routing_attr_avoid_footways_name">راه‌های پیاده</string>
<string name="routing_attr_avoid_footways_description">از راه‌های پیاده پرهیز می‌کند</string>
<string name="development">توسعه</string>
@ -3954,15 +3954,15 @@
<string name="perform_oauth_authorization_description">برای استفاده از قابلیت‌های ویرایشی، از طریق OAuth ثبت ورود کنید</string>
<string name="perform_oauth_authorization">ثبت ورود از طریق OAuth</string>
<string name="clear_osm_token">پاک‌سازی توکن OAuth اوپن‌استریت‌مپ</string>
<string name="osm_edit_logout_success">ثبت خروج موفقیت‌آمیز بود</string>
<string name="osm_edit_logout_success">خروج ثبت شد</string>
<string name="file_already_imported">فایل قبلاً در OsmAnd درون‌برد شده است</string>
<string name="use_two_phase_routing">استفاده از الگوریتم مسیریابی دومرحله‌ای A*</string>
<string name="shared_string_graph">نمودار</string>
<string name="message_need_calculate_route_before_show_graph">دادهٔ %1$s فقط در جاده ارائه می‌شود. برای اینکه آن را داشته باشید با استفاده از «مسیریابی بین نقطه‌ها» مسیری محاسبه کنید.</string>
<string name="message_graph_will_be_available_after_recalculation">منتظر بمانید تا مسیر دوباره محاسبه شود.
\nنمودار پس از بازمحاسبه در دسترس قرار خواهد گرفت.</string>
<string name="message_need_calculate_route_before_show_graph">دادهٔ %1$s فقط در جادهها ارائه می‌شود. با استفاده از «مسیریابی بین نقطه‌ها» مسیری محاسبه کنید تا نمودارها را ببینید.</string>
<string name="message_graph_will_be_available_after_recalculation">لطفاً منتظر بمانید.
\nنمودار پس از بازمحاسبهٔ مسیر فراهم می‌شود.</string>
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
<string name="message_you_need_add_two_points_to_show_graphs">دست‌کم باید دو نقطه اضافه کنید</string>
<string name="message_you_need_add_two_points_to_show_graphs">دست‌کم دو نقطه اضافه کنید</string>
<string name="login_open_street_map">ثبت ورود در اوپن‌استریت‌مپ</string>
<string name="login_open_street_map_org">ثبت ورود در OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">ثبت ورود از طریق اوپن‌استریت‌مپ</string>
@ -3973,7 +3973,7 @@
<string name="login_account">حساب</string>
<string name="user_login">ثبت ورود</string>
<string name="manage_subscription">مدیریت اشتراک</string>
<string name="subscription_payment_issue_title">در رابطه با اشتراک شما مشکلی وجود دارد. روی دکمه کلیک کنید تا به تنظیمات اشتراک گوگل‌پلی بروید و شیوهٔ پرداخت خود را اصلاح نمایید.</string>
<string name="subscription_payment_issue_title">روی دکمه بزنید و یک شیوهٔ پرداخت در گوگل‌پلی تنظیم کنید تا اشتراک خود را اصلاح نمایید.</string>
<string name="markers_history">تاریخچهٔ نشانه‌ها</string>
<string name="send_files_to_openstreetmap">ارسال فایل GPX به اوپن‌استریت‌مپ</string>
<string name="gpx_upload_public_visibility_descr">«عمومی» یا Public به این معنی است که رد به‌صورت عمومی در ردهای جی‌پی‌اس شما و لیست ردهای عمومی جی‌پی‌اس در قالب خام نمایش داده می‌شود. دادهٔ نقاط رد که از طریق API در دسترس قرار می‌گیرد، به صفحهٔ ردهای شما ارجاع نمی‌دهد. مهر زمان نقاط رد از طریق API جی‌پی‌اس‌های عمومی دست‌یافتنی نیست و نقاط رد بر اساس زمان مرتب نیستند.</string>
@ -3987,4 +3987,23 @@
<string name="register_opr_create_new_account">ساخت حساب جدید</string>
<string name="register_opr_have_account">حساب کاربری دارم</string>
<string name="shared_string_search_history">تاریخچهٔ جست‌وجو</string>
<string name="export_not_enough_space_descr">دستگاه شما تنها %1$s فضای خالی دارد. لطفا مقادری فضا خالی کنید و یا تعداد موارد برون‌ریزی را کاهش دهید.</string>
<string name="export_not_enough_space">فضای کافی موجود نیست</string>
<string name="select_groups_for_import">گروه‌هایی را که درون‌ریزی خواهند شد را انتخاب کنید.</string>
<string name="select_items_for_import">مواردی را که درون‌ریزی خواهند شد را انتخاب کنید.</string>
<string name="add_to_mapillary">افزودن به مپیلاری</string>
<string name="add_to_opr">افزودن به OpenPlaceReviews</string>
<string name="use_dev_url_descr">برای امتحان کردن بارگذاری یادداشت / نقاط توجه و GPX از dev.openstreetmap.org به جای openstreetmep.org استفاده کنید.</string>
<string name="use_dev_url">از dev.openstreetmap.org استفاده کنید</string>
<string name="add_photos_descr">برنامه OsmAnd عکس‌ها را از چند منبع نشان می‌دهد:
\nاز OpenPlaceReview برای عکس‌های نقاط توجه؛
\nاز مپیلاری برای تصویر سطح خیابان؛
\nاز وب و ویکی‌پدیا برای عکس‌های نقاط توجه متناسب با داده‌های اوپن‌استریت‌مپ.</string>
<string name="app_mode_light_aircraft">هواپیمای سبک</string>
<string name="plan_route_join_segments">اتصال بخش‌ها</string>
<string name="plan_route_split_before">"تقطیع از این جا به قبل"</string>
<string name="plan_route_split_after">تقطیع از این جا به بعد</string>
<string name="plan_route_add_new_segment">افزودن یک بخش جدید</string>
<string name="profile_type_osmand_string">نمایهٔ OsmAnd</string>
<string name="profile_type_user_string">نمایهٔ کاربر</string>
</resources>

View file

@ -305,7 +305,7 @@
<string name="only_show">Näytä vain</string>
<string name="follow">Seuraa</string>
<string name="mark_final_location_first">Valitse päämäärä ensin</string>
<string name="get_directions">Ohjeet</string>
<string name="get_directions">Reittiohjeet</string>
<string name="opening_hours">Avoinna</string>
<string name="loading_streets_buildings">Ladataan katuja/rakennuksia…</string>
<string name="loading_postcodes">Ladataan postinumeroita…</string>
@ -390,7 +390,7 @@
<string name="poi_error_unexpected_template">Tapahtui odottamaton virhe suoritettaessa toimintoa {0}.</string>
<string name="poi_dialog_opening_hours">Avoinna</string>
<string name="edit_filter_save_as_menu_item">Tallenna nimellä</string>
<string name="rendering_attr_roadColors_description">Valitse tien väriteema:</string>
<string name="rendering_attr_roadColors_description">Valitse tien värimaailma:</string>
<string name="gps_not_available">Salli GPS:n käyttö asetuksista</string>
<string name="poi_filter_car_aid">Autotuki</string>
<string name="layer_map_appearance">Muokkaa näyttöä</string>
@ -412,7 +412,7 @@
<string name="osmand_parking_time_limit">Aikarajoitettu pysäköinti</string>
<string name="osmand_parking_time_no_limit">Aika rajoittamaton pysäköinti</string>
<string name="osmand_parking_position_description">Pysäköidyn autosi sijainti. %1$s</string>
<string name="osmand_parking_position_description_add">Nouda auto kello:</string>
<string name="osmand_parking_position_description_add">Nouda ajoneuvo kello:</string>
<string name="osmand_parking_pm">PM</string>
<string name="osmand_parking_am">AM</string>
<string name="asap">U-Käännös</string>
@ -488,7 +488,7 @@
<string name="accessibility_mode">Esteettömyys moodi</string>
<string name="accessibility_default">Globaalien systeemiasetusten mukaan</string>
<string name="zxing_barcode_scanner_not_found">ZXing viivakoodinlukusovellusta ei ole asennettuna. Etsitäänkö se Google Playstä?</string>
<string name="rendering_attr_roadColors_name">Tien väriteema</string>
<string name="rendering_attr_roadColors_name">Tien värimaailma</string>
<string name="map_widget_show_destination_arrow">Näytä kohteen suunta</string>
<string name="non_optimal_route_calculation">Laske mahdollisesti epäoptimaalinen reitti pitkille matkoille</string>
<string name="offline_edition_descr">Käytä aina offline editointia</string>
@ -836,7 +836,7 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
<string name="shared_string_recorded">Nauhoitettu</string>
<string name="shared_string_record">Nauhoita</string>
<string name="gpx_logging_no_data">Ei dataa</string>
<string name="rendering_attr_contourColorScheme_description">Korkeuskäyräviivojen väripaletti</string>
<string name="rendering_attr_contourColorScheme_description">Korkeuskäyräviivojen värimaailma</string>
<string name="save_track_min_speed">Miniminopeuden kirjaaminen</string>
<string name="save_track_min_speed_descr">Aseta miniminopeus kirjattavalle pisteelle.</string>
<string name="save_track_min_distance">Liikkeen tunnistuksen kirjaus</string>
@ -847,7 +847,7 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
<string name="christmas_desc_q">Näytä Joulupyhän KP:t\?</string>
<string name="rendering_value_light_brown_name">Vaaleanruskea</string>
<string name="rendering_value_dark_brown_name">Tummanruskea</string>
<string name="rendering_attr_contourColorScheme_name">Korkeuskäyrien väripaletti</string>
<string name="rendering_attr_contourColorScheme_name">Korkeuskäyrien värimaailma</string>
<string name="rendering_attr_surfaceIntegrity_name">Tienpinnan eheys</string>
<string name="search_hint">Kirjoita kaupunki, osoite, KP:n nimi</string>
<string name="edit_filter">Muokkaa luokkia</string>
@ -1728,7 +1728,7 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
Paina ja pidä nähdäksesi kartalla</string>
<string name="gpx_info_asc_altitude">Alas/Ylös: %1$s</string>
<string name="calculate_osmand_route_without_internet">Laske OsmAnd reitin segmentti ilman internettiä</string>
<string name="calculate_osmand_route_without_internet">OsmAnd reittisegmentin laskeminen ilman internettiä</string>
<string name="gpx_option_calculate_first_last_segment">Laske OsmAnd reitti ensimmäiselle ja viimeiselle reitin segmentille</string>
<string name="use_displayed_track_for_navigation">Käytetäänkö näytettävää jälkeä suunnistuksessa\?</string>
<string name="keep_and_add_destination_point">Lisää myöhemmäksi päämääräksi</string>
@ -2208,7 +2208,7 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="increase_search_radius">Kasvata haun laajuutta</string>
<string name="nothing_found_descr">Muokkaa hakusanoja tai lisää haun laajuutta.</string>
<string name="quick_action_showhide_osmbugs_descr">Tämän toimintonappulan tökkääminen näyttää tai piilottaa OSM-huomautukset kartalla.</string>
<string name="srtm_color_scheme">Väriskeema</string>
<string name="srtm_color_scheme">Värimaailma</string>
<string name="routing_attr_allow_private_name">Salli yksityisalueet</string>
<string name="routing_attr_allow_private_description">Salli pääsy yksityisalueille.</string>
<string name="animate_my_location_desc">Ota käyttöön animoitu sijaintini kartan vieritys navigaation aikana.</string>
@ -2571,6 +2571,47 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="week">Viikko</string>
<string name="shared_string_bearing">Suuntima</string>
<string name="plan_a_route">Suunnittele reitti</string>
<string name="plan_route_last_edited">Viimeksi muokattu</string>
<string name="plan_route_last_edited">Viimeksi muokatut</string>
<string name="plan_route_create_new_route">Luo uusi reitti</string>
<string name="select_color">Valitse väri</string>
<string name="select_icon_profile_dialog_title">Valitse kuvake</string>
<string name="select_group">Valitse ryhmä</string>
<string name="add_description">Lisää kuvaus</string>
<string name="route_between_points_next_segment_button_desc">Vain seuraava segmentti lasketaan uudelleen valitulla profiililla.</string>
<string name="next_segment">Seuraava segmentti</string>
<string name="all_next_segments">Kaikki seuraavat segmentit</string>
<string name="previous_segment">Edellinen segmentti</string>
<string name="all_previous_segments">Kaikki edelliset segmentit</string>
<string name="only_selected_segment_recalc">Vain valittu segmentti lasketaan uudelleen käyttämällä valittua profiilia.</string>
<string name="all_next_segments_will_be_recalc">Kaikki seuraavat segmentit lasketaan uudelleen käyttämällä valittua profiilia.</string>
<string name="all_previous_segments_will_be_recalc">Kaikki edelliset segmentit lasketaan uudelleen käyttämällä valittua profiilia.</string>
<string name="plan_route_join_segments">Yhdistä segmentit</string>
<string name="plan_route_add_new_segment">Lisää uusi segmentti</string>
<string name="shared_string_octagon">Kahdeksankulmio</string>
<string name="shared_string_square">Neliö</string>
<string name="shared_string_circle">Ympyrä</string>
<string name="select_shape">Valitse muoto</string>
<string name="reset_to_default">Palauta oletusarvot</string>
<string name="profile_prefs_reset_successful">Kaikki profiiliasetukset palautettu oletusarvoihin.</string>
<string name="plugin_prefs_reset_successful">Kaikki laajennuksen asetukset palautettu oletusarvoihin.</string>
<string name="shared_string_app_default_w_val">Sovelluksen oletus (%s)</string>
<string name="reset_deafult_order">Palauta oletus kohteiden järjestys</string>
<string name="default_screen_timeout">Näytön oletusaikakatkaisu</string>
<string name="system_default_theme">Järjestelmän oletus</string>
<string name="reorder_profiles">Muokkaa profiililuetteloa</string>
<string name="edit_profiles">Muokkaa profiileja</string>
<string name="import_profile">Tuo profiili</string>
<string name="selected_profile">Valittu profiili</string>
<string name="icon_group_amenity">Mukavuus</string>
<string name="icon_group_travel">Matkailu</string>
<string name="icon_group_special">Erityinen</string>
<string name="icon_group_sport">Urheilu</string>
<string name="process_downloading_service">OsmAnd-latauspalvelu</string>
<string name="icon_group_service">Palvelu</string>
<string name="icon_group_emergency">Hätätapaus</string>
<string name="icon_group_transport">Liikenne</string>
<string name="quick_action_transport_show">Näytä julkinen liikenne</string>
<string name="quick_action_transport_hide">Piilota julkinen liikenne</string>
<string name="icon_group_symbols">Symbolit</string>
<string name="replace_point_descr">Korvaa toinen kohde tällä.</string>
</resources>

View file

@ -3813,7 +3813,7 @@
<string name="threshold_distance">Seuil de distance</string>
<string name="navigation_profile">Profil de navigation</string>
<string name="street_level_imagery">Photos des rues</string>
<string name="plan_route_exit_dialog_descr">Voulez-vous vraiment fermer l\'itinéraire planifié sans enregistrer \? (vous perdrez vos modifications)</string>
<string name="plan_route_exit_dialog_descr">Souhaitez-vous vraiment ignorer toutes les modifications apportées à l\'itinéraire planifié \?</string>
<string name="in_case_of_reverse_direction">Si inversion du sens</string>
<string name="pass_whole_track_descr">Point de la trace vers lequel naviguer</string>
<string name="shared_string_gpx_route">Enregistrer le parcours</string>
@ -3852,7 +3852,7 @@
<string name="gpx_monitoring_start">Reprendre l\'enregistrement du trajet</string>
<string name="gpx_monitoring_stop">Suspendre l\'enregistrement du trajet</string>
<string name="save_global_track_interval_descr">Définit la fréquence denregistrement des points du parcours (activable depuis le gadget \"Enregistrement\" sur la carte).</string>
<string name="disable_recording_once_app_killed_descrp">Suspend l\'enregistrement du parcours lorsque l\'application est arrêtée via Applications récentes ; les indications OsmAnd ne seront plus affichées dans la barre de notifications.</string>
<string name="disable_recording_once_app_killed_descrp">L\'enregistrement de l\'itinéraire sera suspendu si l\'application est arrêtée via Applications récentes (les indications OsmAnd ne seront plus affichées dans la barre de notifications).</string>
<string name="all_next_segments_will_be_recalc">Tous les segments suivants seront recalculés avec le profil sélectionné.</string>
<string name="all_previous_segments_will_be_recalc">Tous les segments précédents seront recalculés avec le profil sélectionné.</string>
<string name="all_next_segments">Tous les segments suivants</string>
@ -3885,7 +3885,7 @@
<string name="sort_name_ascending">Nom : A Z</string>
<string name="start_finish_icons">Icônes de départ et d\'arrivée</string>
<string name="contour_lines_thanks">Merci pour votre achat de \'Courbes de niveaux\'</string>
<string name="osm_live_payment_desc_hw">Abonnement facturé pour chaque période sélectionnée. Annulation possible à tout moment sur AppGallery.</string>
<string name="osm_live_payment_desc_hw">L\'abonnement est facturé pour la période sélectionnée. Annulation possible à tout moment sur AppGallery.</string>
<string name="routing_attr_avoid_footways_description">Éviter les trottoirs</string>
<string name="routing_attr_avoid_footways_name">Éviter les trottoirs</string>
<string name="development">Développement</string>
@ -3995,4 +3995,7 @@
<string name="plan_route_add_new_segment">Ajouter un nouveau segment</string>
<string name="gpx_upload_identifiable_visibility_descr">« Identifiable » siginifie que la trace sera affichée publiquement dans « Mes traces GPS » ainsi que dans les listes de traces GPS publiques. Ainsi les autres utilisateurs peuvent télécharger la trace brute et l\'associer avec votre nom d\'utilisateur. Les données de points de passage horodatés fournis par l\'API GPS publique feront référence à la page d\'origine de votre trace.</string>
<string name="gpx_upload_public_visibility_descr">« Public » signifie que la trace est affichée publiquement dans vos traces GPS et dans les listes de traces GPS publiques. Les données diffusées via l\'API ne font pas référence à votre page de traces. Les horodatages des points de trace ne sont pas disponibles via l\'API GPS publique et les points de trace ne sont pas classés par ordre chronologique.</string>
<string name="profile_type_osmand_string">Profil OsmAnd</string>
<string name="profile_type_user_string">Profil utilisateur</string>
<string name="reverse_all_points">Inverser tous les points</string>
</resources>

View file

@ -3878,4 +3878,16 @@
<string name="poi_lifeguard_base">Vízimentő-támaszpont</string>
<string name="poi_vaccination_covid19">Oltóközpont: Covid19</string>
<string name="poi_health_specialty_vaccination_yes">Oltóközpont</string>
<string name="poi_ranger_station">Ranger station</string>
<string name="poi_lavoir">Ruhamosó hely</string>
<string name="poi_waste_transfer_station">Hulladékátrakodó</string>
<string name="poi_weightbridge">Hídmérleg</string>
<string name="poi_water_source_lake"></string>
<string name="poi_water_source_river">Folyó</string>
<string name="poi_water_source_well">Kút</string>
<string name="poi_water_source_powered_pump">Motoros szivattyú</string>
<string name="poi_water_source_water_tank">Víztartály</string>
<string name="poi_water_source_tap">Csap</string>
<string name="poi_water_source_water_works">Vízmű</string>
<string name="poi_water_source_tube_well">Csöves kút</string>
</resources>

View file

@ -1559,7 +1559,7 @@
<string name="lang_gl">galiciai</string>
<string name="lang_et">észt</string>
<string name="lang_ceb">szebuano</string>
<string name="archive_wikipedia_data">Régi, összeférhetetlen Wikipédia adataid vannak. Archiválod őket?</string>
<string name="archive_wikipedia_data">A Wikipédia-adatok régiek és inkompatbilisek. Archiválja őket\?</string>
<string name="download_wikipedia_files">Letölt további Wikipédia-adatokat (%1$s MB)\?</string>
<string name="lang_es_ar">spanyol (argentín)</string>
<string name="lang_nb">norvég bokmål</string>
@ -1943,7 +1943,7 @@
<string name="map_widget_magnetic_bearing">Mágneses irány</string>
<string name="access_disable_offroute_recalc">Ne tervezzen újra, ha letérsz az útvonalról</string>
<string name="access_disable_wrong_direction_recalc">Ne tervezzen újra, ha ellenkező irányba mész</string>
<string name="access_no_destination">Nincs beállítva célpont</string>
<string name="access_no_destination">Kisegítő lehetőségek bővítmény: nincs beállítva célpont</string>
<string name="map_widget_battery">Akkumulátor töltöttsége</string>
<string name="move_marker_bottom_sheet_title">A jelölő helyének módosításához mozgasd a térképet</string>
<!-- string name="lat_lon_pattern">Szél.: %1$.5f Hossz.: %2$.5f</string -->
@ -2566,7 +2566,7 @@
<string name="shared_string_bookmark">Könyvjelző</string>
<string name="hide_full_description">Teljes leírás elrejtése</string>
<string name="show_full_description">Teljes leírás megjelenítése</string>
<string name="open_wikipedia_link_online">Wikipédia hivatkozás megnyitása online</string>
<string name="open_wikipedia_link_online">Wikipédia-link megnyitása online</string>
<string name="open_wikipedia_link_online_description">A hivatkozás a böngészőben fog megnyílni.</string>
<string name="read_wikipedia_offline">Wikipédia olvasása offline</string>
<string name="download_all">Összes letöltése</string>
@ -2603,7 +2603,7 @@
<string name="images_cache">Kép gyorsítótár</string>
<string name="delete_search_history">Keresési előzmények törlése</string>
<string name="download_images">Képek letöltése</string>
<string name="read_wikipedia_offline_description">Szerezz OsmAnd Live előfizetést, hogy Wikipédia és Wikivoyage cikkeket olvashass offline.</string>
<string name="read_wikipedia_offline_description">Szerezzen OsmAnd Live előfizetést, hogy offline módon is olvashasson Wikipédia- és Wikivoyage-szócikkeket.</string>
<string name="how_to_open_link">Hogyan nyisd meg a linket?</string>
<string name="purchase_cancelled_dialog_title">Lemondtad az OsmAnd Live előfizetésedet</string>
<string name="purchase_cancelled_dialog_descr">Előfizetés megújítása az alábbi funkciók használatának folytatásához:</string>
@ -2640,14 +2640,14 @@
<string name="index_item_world_wikivoyage">Wikivoyage szócikkek</string>
<string name="access_intermediate_arrival_time">Köztes érkezési idő</string>
<string name="map_widget_intermediate_time">Köztes idő</string>
<string name="download_wikipedia_description">Töltsd le %1$s Wikipédia szócikkeit offline olvasásra.</string>
<string name="download_wikipedia_description">Töltse le %1$s Wikipédia szócikkeit offline olvasásra.</string>
<string name="download_wikipedia_label">Wikipédia adatok letöltése</string>
<string name="open_in_browser_wiki">Szócikk megnyitása online</string>
<string name="open_in_browser_wiki_description">Szócikk megtekintése böngészőben.</string>
<string name="download_wiki_region_placeholder">ez a régió</string>
<string name="download_wiki_region_placeholder">ezen régió</string>
<string name="wiki_article_search_text">Megfelelő szócikk keresése</string>
<string name="wiki_article_not_found">Szócikk nem található</string>
<string name="how_to_open_wiki_title">Hogyan nyiss meg Wikipédia szócikkeket?</string>
<string name="how_to_open_wiki_title">Hogyan lehet Wikipédia szócikkeket megnyitni\?</string>
<string name="get_osmand_live">Az összes funkció feloldásához szerezze be az OsmAnd Live-ot: Napi térképfrissítés korlátlan számú letöltéssel, az összes fizetős és ingyenes bővítmény, Wikipédia, Wikivoyage és sok más.</string>
<string name="unirs_render_descr">Az alapértelmezett stílus módosítása a gyalogos és kerékpáros utak kontrasztosabb megjelenítése érdekében. Mapnik színeket használ.</string>
<string name="off_road_render_descr">Topo stílus alapján terepen történő vezetéshez és alátétként zöld műholdképekkel történő használathoz. Vékonyabb főutak, vastagabb mezőgazdasági és erdészeti utak, ösvények, kerékpár- és más útvonalak.</string>
@ -3422,7 +3422,7 @@
<string name="login_and_pass">Felhasználónév és jelszó</string>
<string name="plugin_global_prefs_info">Ezek a bővítménybeállítások globálisak, és minden profilra vonatkoznak</string>
<string name="osm_editing">OSM-szerkesztés</string>
<string name="osm_edits_view_descr">Az összes még fel nem töltött szerkesztés vagy OSM-hiba megtekinthető itt: %1$s. A már feltöltött pontok nem láthatók az OsmAndban.</string>
<string name="osm_edits_view_descr">"A még fel nem töltött szerkesztéseket vagy OSM-hibákat megtekintheti itt: %1$s. A már feltöltött módosítások nem jelennek meg."</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Navigáció vagy haladás közben megjelenő ikon.</string>
<string name="select_map_icon_descr">Álló helyzetben megjelenő ikon.</string>
@ -3481,7 +3481,7 @@
<string name="hillshade_description">A domborzatárnyékolás réteg sötét árnyalattal emeli ki a lejtőket, csúcsokat és a síkságokat.</string>
<string name="slope_description">A lejtő réteg színezéssel jeleníti meg a terep meredekségét.</string>
<string name="terrain_slider_description">Állítsa be a legkisebb és legnagyobb nagyítási szintet, amelyen a réteg megjelenjen.</string>
<string name="hillshade_download_description">További térképek szükségesek a domborzatárnyékolás térképen való megjelenítéséhez.</string>
<string name="hillshade_download_description">A domborzatárnyékolás térképen való megjelenítéséhez további térképek szükségesek.</string>
<string name="slope_download_description">További térképek szükségesek a lejtők térképen való megjelenítéséhez.</string>
<string name="shared_string_transparency">Áttetszőség</string>
<string name="shared_string_zoom_levels">Nagyítási szintek</string>
@ -3543,8 +3543,8 @@
\n
\nA használaton kívüli bővítmények kikapcsolásával elrejtheti őket a %1$s menüből.</string>
<string name="ui_customization_short_descr">Menü elemek, Opciók</string>
<string name="select_wikipedia_article_langs">Jelölje ki a térképen megjelenő Wikipédia szócikkek nyelvét. A szócikk olvasása közben válthat valamennyi elérhető nyelv között.</string>
<string name="some_articles_may_not_available_in_lang">Előfordulhat, hogy néhány Wikipédia szócikk nem érhető el az ön nyelvén.</string>
<string name="select_wikipedia_article_langs">Jelölje ki a térképen megjelenő Wikipédia-szócikkek nyelvét. A szócikk olvasása közben válthat valamennyi elérhető nyelv között.</string>
<string name="some_articles_may_not_available_in_lang">Előfordulhat, hogy néhány Wikipédia-szócikk nem érhető el az ön nyelvén.</string>
<string name="select_track_file">Nyomvonalfájl kijelölése</string>
<string name="lang_zhyue">kantoni</string>
<string name="lang_zhminnan">déli min</string>
@ -3734,7 +3734,7 @@
<string name="please_provide_point_name_error">Kérem, adjon nevet a pontnak</string>
<string name="lenght_limit_description">Adja meg a járműve hosszát (a hosszú járművekre útvonalkorlátozások vonatkozhatnak).</string>
<string name="quick_action_remove_next_destination">Legközelebbi célpont törlése</string>
<string name="search_download_wikipedia_maps">Wikipédia térképek letöltése</string>
<string name="search_download_wikipedia_maps">Wikipédia-térképek letöltése</string>
<string name="export_profile_dialog_description">További adatokat is kijelölhet exportálásra a profillal együtt.</string>
<string name="shared_string_include_data">Kiegészítő adatok átvétele</string>
<string name="import_profile_dialog_description">Az importált profil kiegészítő adatokat is tartalmaz. Koppintson az \"Importál\" gombra kizálólag a profiladatok importálásához vagy válassza a kiegészítő adatokat.</string>
@ -3744,8 +3744,8 @@
\nAz előfizetés automatikusan megújul, kivéve, ha azt a megújítási dátum előtt lemondja. A megújítási időszakra (hónap / 3 hónap / év) vonatkozóan a számláját csak a megújítás napján terheljük meg.
\n
\nAz előfizetéseket a Google Play beállításai között kezelheti és törölheti.</string>
<string name="quick_action_remove_next_destination_descr">Törli az útvonal soron következő célpontját. Amennyiben ez a végző célpont, a navigáció megáll.</string>
<string name="plugin_wikipedia_description">Tudjon meg többet az érdekes pontokról a Wikipédiából. Ez az Ön offline zsebútikönyve egyszerűen kapcsolja be a Wikipédia-bővítményt, és élvezze az Ön körüli objektumokról szóló cikkeket.</string>
<string name="quick_action_remove_next_destination_descr">Törli az útvonala következő célpontját. Ha ez a végső cél, akkor a navigáció leáll.</string>
<string name="plugin_wikipedia_description">Az érdekes helyekről a Wikipédia segítségével tájékozódhat. Ez olyan, mint egy zsebútikönyv: helyekről és úti célokról olvashat benne.</string>
<string name="app_mode_enduro_motorcycle">Salakmotor</string>
<string name="app_mode_motor_scooter">Robogó</string>
<string name="app_mode_wheelchair">Kerekesszék</string>
@ -3785,7 +3785,7 @@
<string name="gpx_split_interval_descr">Válassza ki, hogy a nyomvonalon milyen távolság- vagy időintervallumok jelzései jelenjenek meg.</string>
<string name="monitoring_min_distance_descr">Ez a szűrő kiküszöböli az ismétlődő pontok rögzítését ott, ahol túl kevés tényleges mozgás történhetett, így szebb lesz a később utólag fel nem dolgozott nyomvonalak térbeli megjelenése.</string>
<string name="multimedia_rec_split_title">Felvétel vágása</string>
<string name="disable_recording_once_app_killed_descrp">Szünetelteti a nyomvonal naplózását, amikor az alkalmazást bezárják (a \'mostanában használt alkalmazások\' felületen). (Az OsmAnd háttérjelzése eltűnik az Android értesítési sávjáról.)</string>
<string name="disable_recording_once_app_killed_descrp">A nyomvonal naplózása szünetelni fog, amikor az alkalmazást (újabb alkalmazásokkal) kilövik. (Ilyenkor az OsmAnd háttérjelzése is eltűnik az Android értesítési sávjáról.)</string>
<string name="monitoring_min_speed_descr_recommendation">Javaslat: Először próbálja meg a mozgásérzékelést használni a legkisebb elmozdulást naplózó szűrővel (B). Ez jobb eredményeket hozhat, és kevesebb adatot veszít. Ha a nyomvonalak alacsony sebességnél továbbra is zajosak, próbálkozzon itt nullától eltérő értékekkel. Felhívjuk figyelmét, hogy egyes (hálózatalapú módszereket használó) mérőeszközök egyáltalán nem adnak sebességértéket, így ebben az esetben semmi sem fog rögzülni.</string>
<string name="street_level_imagery">Utcaszintű képek</string>
<string name="simplified_track_description">Csak az út vonala lesz elmentve, az útpontok törlődnek.</string>
@ -3859,7 +3859,7 @@
<string name="navigation_profile">Navigációs profil</string>
<string name="monitoring_min_speed_descr_remark">Megjegyzés a „sebesség &gt; 0” ellenőrzéséhez: A legtöbb GPS lapkakészlet (chipset) csak akkor mutat sebességértéket, ha az algoritmus megállapítja, hogy mozgásban van. Ha nincs mozgás, akkor nem mutatnak sebességet. Ezért ebben a szűrőben a „&gt; 0” beállítás bizonyos értelemben a GPS lapkakészlet mozgásérzékelését használja. De még ha a rögzítés ideje alatt itt nem is szűrjük a GPX elemzése során mégis használjuk ezt a funkciót a korrigált távolság meghatározásához, vagyis az abban a mezőben megjelenített érték a mozgás közben rögzített távolság.</string>
<string name="only_selected_segment_recalc">Csak a kijelölt szakasz lesz újraszámítva a kiválasztott profilnak megfelelően.</string>
<string name="plan_route_exit_dialog_descr">Biztos, hogy mentés nélkül bezárja az útvonaltervezőt\? Minden változást elvész.</string>
<string name="plan_route_exit_dialog_descr">Biztosan elveti az összes módosítást a tervezett útvonalon\?</string>
<string name="follow_track_descr">Válassza ki a követendő nyomvonalfájlt</string>
<string name="listed_exist">A felsorolt %1$s már létezik az OsmAndban.</string>
<string name="all_previous_segments">Minden korábbi szakasz</string>
@ -3898,12 +3898,12 @@
<string name="sort_name_ascending">Név: AZ</string>
<string name="start_finish_icons">Kiindulás és érkezés ikonjai</string>
<string name="contour_lines_thanks">Köszönjük, hogy megvásárolta a szintvonalbővítményt (Contour lines)</string>
<string name="osm_live_payment_desc_hw">Az előfizetés díja a kiválasztott időszakonként lesz kiszámítva. Bármikor törölheti az AppGallery webhelyen.</string>
<string name="osm_live_payment_subscription_management_hw">A fizetést a vásárlás visszaigazolásakor az AppGallery számlájára terheljük.
<string name="osm_live_payment_desc_hw">Az előfizetés a kiválasztott időszakonként kerül felszámolásra. Bármikor törölheti az AppGallery alkalmazásban.</string>
<string name="osm_live_payment_subscription_management_hw">AppGallery-fiókját a vásárlás visszaigazolása után terheljük meg.
\n
\nAz előfizetés automatikusan megújul, kivéve, ha azt a megújítási dátum előtt lemondja. A megújítási időszakra (hónap / 3 hónap / év) vonatkozóan a számláját csak a megújítás napján terheljük meg.
\nAz előfizetés automatikusan meghosszabbodik, kivéve, ha a megújítási dátum előtt lemondják. A megújítási időszakra (hónap / három hónap / év) az Ön számláját csak a megújítás napján terheljük meg.
\n
\nAz előfizetéseket az AppGallery beállításai között kezelheti és törölheti.</string>
\nAz előfizetéseket az AppGallery beállításaiban kezelheti és törölheti.</string>
<string name="routing_attr_avoid_footways_description">Gyalogutak elkerülése</string>
<string name="routing_attr_avoid_footways_name">Gyalogutak elkerülése</string>
<string name="development">Fejlesztés</string>
@ -3950,7 +3950,7 @@
<string name="subscription_on_hold_title">Az OsmAnd-előfizetés fel van függesztve</string>
<string name="subscription_paused_title">Az OsmAnd Live-előfizetés szünetel</string>
<string name="subscription_expired_title">Az OsmAnd Live-előfizetés lejárt</string>
<string name="subscription_payment_issue_title">Probléma van az előfizetésével. A fizetési mód kijavítása érdekében koppintson a gombra a Google Play előfizetési beállításaihoz történő ugráshoz.</string>
<string name="subscription_payment_issue_title">Előfizetése kijavítása érdekében koppintson a gombra, és állítsa be a fizetési módot a Google Playen.</string>
<string name="user_login">Bejelentkezés</string>
<string name="login_account">Fiók</string>
<string name="use_login_password">Bejelentkezés felhasználónévvel és jelszóval</string>
@ -4007,4 +4007,7 @@
\n • Egyéni színek támogatása a kedvenceknél és a nyomvonalak útpontjainál
\n
\n"</string>
<string name="profile_type_osmand_string">OsmAnd profil</string>
<string name="profile_type_user_string">Felhasználói profil</string>
<string name="reverse_all_points">Összes pont megfordítása</string>
</resources>

View file

@ -3610,7 +3610,7 @@
<string name="poi_vehicle_military">Aðgangur farartækja: hernaðarlegur</string>
<string name="poi_vehicle_delivery">Aðgangur farartækja: vöruafhending</string>
<string name="poi_vehicle_forestry">Aðgangur farartækja: skógrækt</string>
<string name="poi_motorcar_yes">Aðgangur bifreiða:</string>
<string name="poi_motorcar_yes">Aðgangur bifreiða:</string>
<string name="poi_motorcar_private">Aðgangur bifreiða: einka</string>
<string name="poi_motorcar_no">Aðgangur bifreiða: nei</string>
<string name="poi_motorcar_destination">Aðgangur bifreiða: áfangastaður</string>
@ -3868,4 +3868,19 @@
<string name="poi_consulate_consular_agency">Ræðismannastofnun</string>
<string name="poi_embassy_branch_embassy">Útibú</string>
<string name="poi_consulate_consular_office">Ræðisskrifstofa</string>
<string name="poi_waste_transfer_station">Millifærslustöð fyrir úrgang</string>
<string name="poi_water_source_powered_pump">Aflknúin dæla</string>
<string name="poi_water_source_water_tank">Vatnstankur</string>
<string name="poi_water_source_tap">Vatnshani</string>
<string name="poi_health_specialty_vaccination_yes">Bólusetning</string>
<string name="poi_ranger_station">Landvarðastöð</string>
<string name="poi_water_source_tube_well">Pípubrunnur</string>
<string name="poi_water_source_water_works">Vatnsvinnsla</string>
<string name="poi_vaccination_covid19">Bólusetning: COVID19</string>
<string name="poi_water_source_well">Brunnur</string>
<string name="poi_weightbridge">Vogarbrú</string>
<string name="poi_water_source_lake">Stöðuvatn</string>
<string name="poi_lavoir">Þvottaþró (þvottaaðstaða)</string>
<string name="poi_water_source_river">Á</string>
<string name="poi_lifeguard_base">Bækistöð öryggisvarða</string>
</resources>

View file

@ -1085,7 +1085,7 @@
<string name="use_kalman_filter_compass">Nota Kalman-síu</string>
<string name="use_magnetic_sensor">Nota segulskynjara</string>
<string name="install_paid">Full útgáfa</string>
<string name="cancel_route">Hafna leið</string>
<string name="cancel_route">Hafna leið\?</string>
<string name="cancel_navigation">Stöðva leiðsögn</string>
<string name="clear_destination">Hreinsa út áfangastað</string>
<string name="choose_osmand_theme_descr">Sérsníddu hvernig forritið lítur út.</string>
@ -1384,7 +1384,7 @@
<string name="replace_favorite_confirmation">Ertu viss að þú viljir skipta út eftirlætinu %1$s?</string>
<string name="confirmation_to_delete_history_items">Fjarlægja valin atriði úr breytingaskránni?</string>
<string name="change_markers_position">Breyta staðsetningu kortamerkis</string>
<string name="access_no_destination">Áfangastaður er ekki stilltur</string>
<string name="access_no_destination">Stillingaviðbót fyrir altækan aðgang: Áfangastaður er ekki stilltur</string>
<string name="map_widget_bearing">Hlutfallsleg stefna</string>
<string name="no_map_markers_found">Bættu við kortamerkjum á kortinu</string>
<string name="anonymous_user_hint">Nafnlausir notendur geta ekki:
@ -1746,7 +1746,7 @@
<string name="incremental_search_building">Stigvaxandi leit byggingar</string>
<string name="poi_error_info_not_loaded">Upplýsingum um hnút var ekki hlaðið inn</string>
<string name="use_fast_recalculation">Snjöll endurreiknun leiðar</string>
<string name="use_fast_recalculation_desc">Endurreiknar aðeins upphafshluta leiðar. Má nota fyrir langar ferðir.</string>
<string name="use_fast_recalculation_desc">Endurreiknar aðeins upphafshluta leiðar, má nota fyrir langar ferðir.</string>
<string name="confirm_download_roadmaps">Kortið sem eingöngu er með vegum er ekki nauðsynlegt, þar sem þú ert þegar með staðlaða (fulla útgáfu) kortsins. Sækja það samt?</string>
<string name="rendering_attr_depthContours_description">Birta dýptarlínur og punkta.</string>
<string name="rendering_attr_depthContours_name">Dýptarlínur sjávar</string>
@ -3429,7 +3429,7 @@
<string name="live_monitoring">Rakning með netstuðningi</string>
<string name="save_track_logging_accuracy">Nákvæmni skráninga</string>
<string name="route_recalculation">Endurreikningur leiðar</string>
<string name="plugin_global_prefs_info">Þessar stillingar eru víðværar og eiga við um öll snið</string>
<string name="plugin_global_prefs_info">Þessar stillingar viðbótarinnar eru víðværar og eiga við um öll snið</string>
<string name="osm_editing">OSM-breytingar</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Táknið birtist þegar leiðsögn er í gangi eða á meðan verið er á ferðinni.</string>
@ -3459,7 +3459,7 @@
<string name="multimedia_photo_play_sound">Hljóð við myndatöku</string>
<string name="osm_authorization_success">Heimild fékkst</string>
<string name="not_support_file_type_with_ext">Veljið studda %1$s kerfisviðaukaskrá í staðinn.</string>
<string name="osm_edits_view_descr">Þú getur skoðað allar óinnsendar breytingar þínar eða villur í OSM í %1$s. Innsendir punktar eru ekki birtir í OsmAnd.</string>
<string name="osm_edits_view_descr">Þú getur skoðað allar óinnsendar breytingar þínar eða villur í OSM í %1$s. Áður innsendir punktar eru ekki lengur birtir.</string>
<string name="monitoring_min_speed_descr_side_effect">Aukaverkanir: Ferilinn þinn mun vanta alla þá hluta þar sem kröfur um lágmarkshraða voru ekki uppfylltar (t.d. þar sem þú ert að ýta hjólinu þínu upp bratta brekku). Að auki verða engar upplýsingar um kyrrstöður, eins og t.d. hvíldarstaði. Þetta hefur áhrif á alla greiningu eða eftirvinnslu, eins og þegar verið er að skilgreina heildarlengd ferðar, tíma á ferðinni eða meðalhraða þinn.</string>
<string name="monitoring_min_speed_descr_recommendation">Ábending: Reyndu fyrst að nota hreyfiskynjun í gegnum síuna sem mælis skráða lágmarkshliðrun (B), hún gæti gefið betri niðurstöður og þú tapar minna af gögnum. Ef ferlarnir þínir eru áfram loðnir við lágan hraða, skaltu prófa hér gildi sem ekki eru núll. Athugaðu að sumar mælingar gætu gefið gildi án hraða (sumar mæliaðferðir sem byggjast á netkerfum), í þeim tilfellum myndi ekkert vera skráð.</string>
<string name="monitoring_min_speed_descr_remark">Athugaðu: ef hraði &gt; 0 skoðaðu: Flest GPS kubbasett gefa aðeins upp hraðagildi ef reikniritið ákvarðar að tækið sé á hreyfingu, en gefa ekki neitt gildi ef svo er ekki. Þar af leiðir að sé notuð stillingin &gt; 0 í þessari síu má segja að sé verið að nota hreyfiskynjunina í GPS kubbasettinu. En jafnvel þó þetta sé ekki síað á meðan skráningu stendur, þá notum við samt þennan eiginleika í greiningu okkar á GPX-ferlinum til að ákvarða leiðrétta vegalengd, þ.e.a.s. gildið sem birtist í þeim reit er einmitt skráð vegalengd á meðan verið er á ferðinni.</string>
@ -3788,7 +3788,7 @@
<string name="quick_action_remove_next_destination">Eyða næsta markpunkti</string>
<string name="navigation_profile">Leiðsagnarsnið</string>
<string name="app_mode_wheelchair_forward">Hjólastóll áfram</string>
<string name="plugin_wikipedia_description">Náðu í upplýsingar um merka staði frá Wikipedia. Þetta er þá orðið að vasaleiðsögn án nettengingar - bara virkjaðu Wikipedia-viðbótina og njóttu þess að geta lesið um hlutina í kringum þig.</string>
<string name="plugin_wikipedia_description">Náðu í upplýsingar um merka staði frá Wikipedia, þetta er þá orðið að vasaleiðsögn án nettengingar.</string>
<string name="use_volume_buttons_as_zoom_descr">Stýrðu aðdráttarstigi korts með hljóðstyrkshnöppum tækisins.</string>
<string name="routing_attr_length_description">Tilgreindu lengd farartækis sem leyfð er á leiðum.</string>
<string name="in_case_of_reverse_direction">Ef stefna er öfug</string>
@ -3840,7 +3840,7 @@
\n</string>
<string name="gpx_split_interval_descr">Veldu bilið þar sem merki með tíma eða vegalengd á ferlinum verða birt.</string>
<string name="attach_to_the_roads">Tengja við vegina</string>
<string name="plan_route_exit_dialog_descr">Ertu viss um að þú viljir loka leiðaskipulagningu án þess að vista\?</string>
<string name="plan_route_exit_dialog_descr">Ertu viss um að þú viljir henda öllum óvistuðum breytingum í skipulögðu leiðinni\?</string>
<string name="marker_save_as_track">Vista sem ferilskrá</string>
<string name="threshold_distance">Þolvik vegalengdar</string>
<string name="save_track_to_gpx_globally">Skrifa feril í GPX-skrá</string>
@ -3850,7 +3850,7 @@
<string name="gpx_split_interval_none_descr">Veldu hvernig þú vilt skipta upp: eftir tíma eða vegalengd.</string>
<string name="shared_string_save_as_gpx">Vista sem nýja ferilskrá</string>
<string name="follow_track_descr">Veldu ferilskrá til að fylgja</string>
<string name="quick_action_remove_next_destination_descr">Puntinum á núverandi áfangastað leiðarinnar verður eytt. Ef þetta er sjálfur áfangastaðurinn, mun leiðsögn stöðvast.</string>
<string name="quick_action_remove_next_destination_descr">Eyðir næsta áfangastað leiðarinnar. Ef þetta er sjálfur áfangastaðurinn, mun leiðsögn stöðvast.</string>
<string name="delete_address">Eyða heimilisfangi</string>
<string name="layer_gpx_layer">Ferlar</string>
<string name="start_of_the_track">Upphaf ferils</string>
@ -3910,7 +3910,7 @@
<string name="clear_osm_token">Hreinsa OAuth-teikn OpenStreetMap</string>
<string name="osm_edit_logout_success">Skráð út</string>
<string name="number_of_gpx_files_selected_pattern">%s GPX-skrár valdar</string>
<string name="disable_recording_once_app_killed_descrp">Mun setja GPX-skráningu í bið þegar forritið er drepið (slökkt á því í gegnum skjáinn fyrir nýleg forrit - bakgrunnsvísir OsmAnd hverfur þar með úr tilkynningastiku Android-kerfisins.)</string>
<string name="disable_recording_once_app_killed_descrp">GPX-skráning er sett í bið þegar forritið er drepið (slökkt á því í gegnum skjáinn fyrir nýleg forrit - bakgrunnsvísir OsmAnd hverfur þar með úr tilkynningastiku Android-kerfisins.)</string>
<string name="save_global_track_interval_descr">Veldu millibil skráninga í almenna leiðarskráningu (virkjað með viðmótshlutanum \'Skráning ferðar\' á kortinu).</string>
<string name="gpx_monitoring_stop">Setja skráningu í bið</string>
<string name="gpx_monitoring_start">Halda áfram með skráningu</string>
@ -3929,10 +3929,10 @@
\n • Lagfærð vandamál við inn/útflutning á stillingum sniða
\n
\n</string>
<string name="message_graph_will_be_available_after_recalculation">Bíddu eftir endurútreikningi leiðar.
<string name="message_graph_will_be_available_after_recalculation">Bíddu aðeins.
\nGrafið verður tiltækt eftir endurútreikning.</string>
<string name="snowmobile_render_descr">Fyrir akstur vélsleða á sérstökum vegum og slóðum.</string>
<string name="message_need_calculate_route_before_show_graph">%1$s gögn aðeins tiltæk á vegunum, þú þarft að reikna leið með “Leið milli punkta” til að fá hana.</string>
<string name="message_need_calculate_route_before_show_graph">%1$s gögn aðeins tiltæk á vegunum, þú þarft að reikna leið með “Leið milli punkta” til að sjá gröf.</string>
<string name="file_already_imported">Skrá hefur þegar verið flutt inn í OsmAnd</string>
<string name="app_mode_gap">Bil</string>
<string name="contour_lines_thanks">Takk fyrir að kaupa \'Hæðarlínur\'</string>
@ -3957,7 +3957,7 @@
<string name="open_street_map_login_mode">Þú þarft að skrá þig inn til að geta sent inn ný atriði eða breytingar.
\n
\nÞú getur skráð þig inn með öruggu OAuth-aðferðinni eða notað notandanafn og lykilorð innskráningar.</string>
<string name="subscription_payment_issue_title">Það er vandamál með áskriftina þína. Smelltu á hnappinn til að fara í stillingar Google Play áskriftarinnar og laga þar greiðslumátann.</string>
<string name="subscription_payment_issue_title">Smelltu á hnappinn til að setja upp greiðslumáta á Google Play áskriftarinnar og laga þar áskriftina þína.</string>
<string name="use_login_password">Nota notandanafn og lykilorð</string>
<string name="login_open_street_map">Skrá inn á OpenStreetMap</string>
<string name="user_login">Skrá inn</string>
@ -3969,7 +3969,7 @@
<string name="login_account">Notandaaðgangur</string>
<string name="login_open_street_map_org">Skrá inn á OpenStreetMap.org</string>
<string name="markers_history">Vinnsluferill kortamerkja</string>
<string name="message_you_need_add_two_points_to_show_graphs">Þú þarft að bæta við a.m.k. tveimur punktum</string>
<string name="message_you_need_add_two_points_to_show_graphs">Bættu við a.m.k. tveimur punktum</string>
<string name="navigate_point_mgrs">MGRS</string>
<string name="subscription_paused_title">Áskrift að OsmAnd Live hefur verið sett í bið</string>
<string name="mgrs_format_descr">OsmAnd notar MGRS, sem er svipað og UTM-snið NATO.</string>
@ -3988,7 +3988,7 @@
<string name="register_opr_create_new_account">Búa til nýjan notandaaðgang</string>
<string name="osm_login_descr">Þú getur skráð þig inn með öruggu OAuth-aðferðinni eða notað notandanafn og lykilorð innskráningar.</string>
<string name="app_mode_motorboat">Vélbátar</string>
<string name="register_on_openplacereviews_desc">Ljósmyndir eru í boði frá opna gagnaverkefninu OpenPlaceReviews.org. Til að geta sent inn myndir þarftu að skrá þig á vefsvæðinu.</string>
<string name="register_on_openplacereviews_desc">Ljósmyndir eru í boði frá opna gagnaverkefninu OpenPlaceReviews.org. Til að geta sent inn myndir þarftu að skrá þig á vefsvæðinu þeirra.</string>
<string name="osm_edit_comment_note">Gera athugasemd við OSM-minnispunkt</string>
<string name="gpx_upload_trackable_visibility_descr">\"Rekjanlegt\" þýðir að ferillinn birtist ekki á neinum opinberum listum, en meðhöndlaðir ferilpunktar með tímamerkjum úr ferlinum (sem ekki er hægt að tengja beint við þig) munu birtast í gögnum sem eru sótt í gegnum opinbert GPS API-forritsviðmót.</string>
<string name="elevation_data">Þú getur notað hæðargögn til útreikninga á hækkun/lækkun í ferðunum þínum</string>
@ -4013,4 +4013,20 @@
<string name="select_data_to_export">Veldu þau gögn sem á að flytja út í skrána.</string>
<string name="select_picture">Veldu mynd</string>
<string name="cannot_upload_image">Mistókst að senda inn mynd, reyndu aftur síðar</string>
<string name="release_3_9">• Bætt við möguleika á að flytja út og inn öll gögn, þar með talið stillingar, tilföng, staðir
\n
\n • Skipulagning leiða: gröf ferilbúta með leið, bætt við möguleika á að búa til og breyta mörgum ferilbútum
\n
\n • Bætt við OAuth-auðkenningarleið fyrir OpenStreetMap, endurbætt viðmót valglugga í OSM
\n
\n • Stuðningur við sérsniðna liti í eftirlætum og ferilpunktum
\n
\n</string>
<string name="plan_route_join_segments">Sameina búta</string>
<string name="plan_route_split_after">Skipta upp á eftir</string>
<string name="plan_route_add_new_segment">Bæta við nýjum bút</string>
<string name="plan_route_split_before">Skipta upp á undan</string>
<string name="profile_type_user_string">Notandasnið</string>
<string name="reverse_all_points">Snúa við öllum punktum</string>
<string name="profile_type_osmand_string">OsmAnd-snið</string>
</resources>

View file

@ -2174,4 +2174,71 @@
<string name="poi_departures_board_timetable">לוח זמנים</string>
<string name="poi_beehive">כוורת דבורים</string>
<string name="poi_nuts">חנות אגוזים</string>
<string name="poi_fire_hydrant_position_underground">תת־קרקעי</string>
<string name="poi_fire_hydrant_position_street">רחוב</string>
<string name="poi_fire_hydrant_position_parking_lot">חנייה</string>
<string name="poi_fire_hydrant_position_lane">נתיב</string>
<string name="poi_fire_hydrant_position_green">ירוק</string>
<string name="poi_fire_hydrant_position_sidewalk">מדרכה</string>
<string name="poi_fire_hydrant_flow_capacity">קיבולת זרימה של ברז כיבוי</string>
<string name="poi_diplomatic_services_citizen_services_filter">שירותים לאזרח</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">ויזות למהגרים</string>
<string name="poi_consulate_filter">קונסוליה</string>
<string name="poi_embassy_filter">שגרירות</string>
<string name="poi_departures_board">לוח זמנים</string>
<string name="poi_drinking_water_refill">מילוי מי שתייה</string>
<string name="poi_traffic_signals_arrow">חץ</string>
<string name="poi_traffic_signals_vibration">רטט</string>
<string name="poi_fire_hydrant_pressure_filter">לחץ</string>
<string name="poi_recreation_center"/>
<string name="poi_summer_camp"/>
<string name="poi_salt_no"/>
<string name="poi_salt_yes"/>
<string name="poi_depth"/>
<string name="poi_bicycle_parking_tree"/>
<string name="poi_bicycle_parking_lockers"/>
<string name="poi_military_checkpoint"/>
<string name="poi_street_cabinet_street_lighting"/>
<string name="poi_street_cabinet_water_management"/>
<string name="poi_street_cabinet_waste"/>
<string name="poi_street_cabinet_postal_service"/>
<string name="poi_street_cabinet_gas"/>
<string name="poi_street_cabinet_cable_tv"/>
<string name="poi_street_cabinet_telecom"/>
<string name="poi_street_cabinet_power"/>
<string name="poi_in_service_yes"/>
<string name="poi_water_source_stream"/>
<string name="poi_water_source_pond"/>
<string name="poi_water_source_main"/>
<string name="poi_route_trolleybus_ref">טרוליבוס</string>
<string name="poi_route_share_taxi_ref">מונית שירות</string>
<string name="poi_route_bus_ref">אוטובוס</string>
<string name="poi_surface_snow">פני השטח: שלג</string>
<string name="poi_surface_salt">פני השטח: מלח</string>
<string name="poi_nuclear_explosion_series">סדרת פיצוצים</string>
<string name="poi_nuclear_explosion_date_utc">תאריך הפיצוץ (UTC)</string>
<string name="poi_nuclear_explosion_type_underwater">סוג פיצוץ: תת־ימי</string>
<string name="poi_nuclear_explosion_type_underground">סוג פיצוץ: תת־קרקעי</string>
<string name="poi_service_bicycle_cleaning_no">ניקוי אופניים: אין</string>
<string name="poi_service_bicycle_cleaning_yes">ניקוי</string>
<string name="poi_service_bicycle_diy_no">כלים לתיקון עצמי של אופניים: אין</string>
<string name="poi_service_bicycle_diy_yes">כלים לתיקון עצמי</string>
<string name="poi_service_bicycle_pump_no">משאבת אופניים: אין</string>
<string name="poi_service_bicycle_pump_yes">משאבה</string>
<string name="poi_service_bicycle_rental_no">השכרת אופניים: לא</string>
<string name="poi_service_bicycle_rental_yes">השכרה</string>
<string name="poi_service_bicycle_repair_no">תיקון אופניים: לא</string>
<string name="poi_service_bicycle_repair_yes">תיקון</string>
<string name="poi_service_bicycle_retail_no">קמעונאות אופניים: לא</string>
<string name="poi_service_bicycle_retail_yes">קמעונאי</string>
<string name="poi_shop_additional_yes">עם חנות</string>
<string name="poi_surveillance_yes">מעקב: יש</string>
<string name="poi_historic_yes">פריט היסטורי</string>
<string name="poi_route_subway_ref">רכבת תחתית</string>
<string name="poi_route_ferry_ref">מעבורת</string>
<string name="poi_route_funicular_ref">פוניקולר</string>
<string name="poi_route_monorail_ref">מונורייל</string>
<string name="poi_route_light_rail_ref">רכבת קלה</string>
<string name="poi_route_train_ref">רכבת</string>
<string name="poi_route_tram_ref">חשמלית</string>
</resources>

View file

@ -3561,7 +3561,7 @@
<string name="shared_string_rhomb">מעויני</string>
<string name="shared_string_square">ריבועי</string>
<string name="shared_string_min">מזערי</string>
<string name="osm_edits_view_descr">ניתן לצפות בכל העריכות או בתקלות ב־OSM שטרם הועלו תחת %1$s. נקודות שהועלו לא מופיעות ב־OsmAnd.</string>
<string name="osm_edits_view_descr">ניתן לצפות בכל העריכות או בתקלות ב־OSM שטרם הועלו תחת %1$s. שינויים שהועלו לא יופיעו עוד.</string>
<string name="hillshade_description">מפת הצללה עם צבעי הצללה כהים כדי להדגיש מדרונות, פסגות ועמקים.</string>
<string name="shared_string_octagon">מתומן</string>
<string name="multimedia_notes_view_descr">הערות ה־OSM שלך הן תחת %1$s.</string>
@ -3800,7 +3800,7 @@
<string name="lenght_limit_description">נא לספק את אורך כלי הרכב שלך, מגבלות מסלול מסוימות עשויות לחול על כלי רכב ארוכים.</string>
<string name="quick_action_remove_next_destination">מחיקת נקודת היעד הקרובה ביותר</string>
<string name="please_provide_point_name_error">נא לספק שם לנקודה</string>
<string name="quick_action_remove_next_destination_descr">נקודת היעד הנוכחית במסלול תימחק. אם זה יהיה היעד, הניווט ייעצר.</string>
<string name="quick_action_remove_next_destination_descr">מוחק את נקודת היעד הבאה במסלול שלך. אם זו נקודת היעד, הניווט ייפסק.</string>
<string name="search_download_wikipedia_maps">הורדת מפות ויקיפדיה</string>
<string name="plugin_wikipedia_description">קבלת מידע על נקודות עניין מוויקיפדיה. מדריך הכיס הפרטי שלך - עליך פשוט להפעיל את התוסף של ויקיפדיה וליהנות מערכים על מה שסביבך.</string>
<string name="app_mode_enduro_motorcycle">אופנוע שטח</string>
@ -3877,7 +3877,7 @@
<string name="simplified_track_description">רק קו המסלול יישמר, נקודות הדרך תימחקנה.</string>
<string name="shared_string_file_name">שם קובץ</string>
<string name="number_of_gpx_files_selected_pattern">%s קובצי מסלול נבחרו</string>
<string name="disable_recording_once_app_killed_descrp">רישום ה־GPX יושהה כאשר היישומון ייסגר (דרך היישומונים האחרונים). (התראות הרקע של OsmAnd תיעלמנה מסרגל ההודעות של Android.)</string>
<string name="disable_recording_once_app_killed_descrp">תיעוד המסלול יושהה כאשר היישומון ייסגר (דרך היישומונים האחרונים). (התראות הרקע של OsmAnd תיעלמנה מסרגל ההודעות של Android.)</string>
<string name="gpx_monitoring_stop">להשהות הקלטת מסלול</string>
<string name="gpx_monitoring_start">להמשיך בהקלטת המסלול</string>
<string name="system_default_theme">בררת המחדל של המערכת</string>
@ -3914,11 +3914,11 @@
<string name="routing_attr_avoid_footways_description">הימנעות משבילי הולכי רגל</string>
<string name="routing_attr_avoid_footways_name">הימנעות משבילי הולכי רגל</string>
<string name="osm_live_payment_desc_hw">המינוי חויב לתקופה הנבחרת. ניתן לבטל דרך ה־AppGallery בכל עת.</string>
<string name="osm_live_payment_subscription_management_hw">התשלום יחויב דרך חשבון ה־AppGallery שלך עם אישור הרכישה.
<string name="osm_live_payment_subscription_management_hw">חשבון ה־AppGallery שלך יחויב עם אישור הרכישה.
\n
\nהמינוי מתחדש אוטומטי אלא אם כן בוטל בטרם תאריך החידוש. החשבון שלך יחויב על תקופת החידוש (חודש/שלושה חודשים/שנה) רק בתאריך החידוש.
\nתוקף המינוי מתארך אוטומטי אלא אם כן בוטל בטרם תאריך החידוש. החשבון שלך יחויב על תקופת החידוש (חודש/שלושה חודשים/שנה) רק בתאריך החידוש.
\n
\nניתן לנהל ולבטל את המינויים שלך דרך ההגדרות ב־AppGallery שלך.</string>
\nניתן לנהל ולבטל את המינויים שלך בהגדרות ב־AppGallery שלך.</string>
<string name="what_is_new">מה חדש</string>
<string name="development">פיתוח</string>
<string name="use_live_public_transport">נתוני זמן אמת של OsmAnd</string>
@ -4018,4 +4018,7 @@
\n • תמיכה בצבעים מותאמים אישית למועדפים ולנקודות דרך במסלול
\n
\n</string>
<string name="profile_type_osmand_string">פרופיל</string>
<string name="profile_type_user_string">פרופיל</string>
<string name="reverse_all_points">להפוך את כל</string>
</resources>

View file

@ -2904,7 +2904,7 @@
<string name="routeInfo_road_types_name">Veityper</string>
<string name="exit_at">Gå av på</string>
<string name="sit_on_the_stop">Sitt på stoppet</string>
<string name="quick_action_show_hide_gpx_tracks">Vis/skjul GPX-spor</string>
<string name="quick_action_show_hide_gpx_tracks">Vis/skjul spor</string>
<string name="quick_action_show_hide_gpx_tracks_descr">Knapp for å vise eller skjule valgte spor på kartet.</string>
<string name="quick_action_gpx_tracks_hide">Skjul spor</string>
<string name="quick_action_gpx_tracks_show">Vis spor</string>
@ -2945,9 +2945,9 @@
<string name="rendering_attr_surface_paved_name">Fast dekke</string>
<string name="rendering_attr_surface_concrete_name">Betong</string>
<string name="rendering_attr_surface_sett_name">Brostein</string>
<string name="rendering_attr_surface_cobblestone_name">Rustikk brostein</string>
<string name="rendering_attr_surface_cobblestone_name">Naturlig brostein</string>
<string name="rendering_attr_surface_paving_stones_name">Steinbelagt</string>
<string name="rendering_attr_surface_pebblestone_name">Småstein</string>
<string name="rendering_attr_surface_pebblestone_name">Rullestein</string>
<string name="rendering_attr_surface_stone_name">Stein</string>
<string name="rendering_attr_surface_metal_name">Metall</string>
<string name="rendering_attr_surface_wood_name">Tre</string>
@ -3031,15 +3031,15 @@
<string name="make_osmand_better_descr">Tillat OsmAnd å samle inn og behandle anonym programbruksdata. Ingen data om din plassering, eller om plasseringer du ser på kartet blir samlet inn.
\n
\nDu kan alltid endre ditt valg i \"Innstillinger\" → \"Personvern og sikkerhet\".</string>
<string name="choose_data_to_share">Velg hvilken data du ønsker å dele:</string>
<string name="choose_data_to_share">Velg typen data du vil dele:</string>
<string name="downloaded_maps">Nedlastede kart</string>
<string name="visited_screens">Besøkte skjermer</string>
<string name="collected_data_descr">Definer hvilken data du ønsker å dele med OsmAnd.</string>
<string name="downloaded_maps_collect_descr">Hjelp oss å forstå hvilke kart over hvilke regioner og land som er mest populære.</string>
<string name="visited_screens_collect_descr">Hjelp oss å fastslå popularitet for OsmAnd-funksjoner.</string>
<string name="privacy_and_security_change_descr">Trykk \"Tillat\" hvis du samtykker du til vår %1$s</string>
<string name="downloaded_maps_collect_descr">Hjelp oss å forstå hvilke land- og regionkart som er mest populære.</string>
<string name="visited_screens_collect_descr">Hjelp oss å forstå hvilke OsmAnd-funksjoner som er mest populære.</string>
<string name="privacy_and_security_change_descr">Trykk \"Tillat\" hvis du er enig med vår %1$s</string>
<string name="settings_privacy_and_security">Personvern og sikkerhet</string>
<string name="settings_privacy_and_security_desc">Velg data til deling</string>
<string name="settings_privacy_and_security_desc">Velg hvilke data du deler</string>
<string name="shared_string_no_thank_you">Nei takk</string>
<string name="shared_string_allow">Tillat</string>
<string name="profile_name_hint">Profilnavn</string>
@ -3048,8 +3048,8 @@
<string name="app_mode_horse">Hest</string>
<string name="app_mode_helicopter">Helikopter</string>
<string name="osmand_routing_promo">Du kan legge til din egen endrede versjon av filen routing.xml til i ..osmand/routing</string>
<string name="app_mode_skiing">Skikjøring</string>
<string name="base_profile_descr_ski">Skikjøring</string>
<string name="app_mode_skiing">Stå på ski</string>
<string name="base_profile_descr_ski">Ski</string>
<string name="show_compass_ruler">Vis kompasslinjal</string>
<string name="hide_compass_ruler">Skjul kompasslinjal</string>
<string name="select_icon_profile_dialog_title">Velg ikon</string>
@ -3103,10 +3103,10 @@
<string name="app_mode_offroad">Terreng</string>
<string name="edit_profile_setup_title">Sett opp profil</string>
<string name="routing_attr_max_num_changes_name">Antall overganger</string>
<string name="app_mode_shuttle_bus">Pendlebuss</string>
<string name="app_mode_subway">Tunnelbane</string>
<string name="app_mode_shuttle_bus">Skyttelbuss</string>
<string name="app_mode_subway">T-bane</string>
<string name="select_base_profile_dialog_message">Baser din egendefinerte profil på en av de forvalgte programprofilene, dette definerer grunnleggende oppsett, som forvalg synliget for miniprogrammer, enheter for hastighet og distanse. Dette er de forvalgte programprofilene, sammen med eksempler på egentilpassede profiler de kan utvides til:</string>
<string name="base_profile_descr_public_transport">Alle typer offentlig transport</string>
<string name="base_profile_descr_public_transport">Offentlige transporttyper</string>
<string name="zoom_by_wunderlinq_descr">Endre kartforstørrelse ved å rulle hjulet opp og ned. Escape tar deg tilbake til WunderLINQ-programmet.</string>
<string name="quick_action_need_to_add_item_to_list">Legg til minst ett element i listen i hurtighandlingsinnstillingene</string>
<string name="routing_attr_piste_type_downhill_description">Bakker for alpin skisport og tilgang til skiheiser.</string>
@ -3125,8 +3125,8 @@
<string name="shared_string_min_speed">Minimumshastighet</string>
<string name="shared_string_max_speed">Maksimumshastighet</string>
<string name="default_speed_setting_title">Standardhastighet</string>
<string name="default_speed_setting_descr">Endre forvalgte hastighetsinnstillinger</string>
<string name="minmax_speed_dialog_title">Sett min/maks -hastighet</string>
<string name="default_speed_setting_descr">Endre standardhastighetsinnstillinger</string>
<string name="minmax_speed_dialog_title">Still inn min/maks-hastighet</string>
<string name="new_profile">Ny profil</string>
<string name="shared_string_crash">Krasj</string>
<string name="last_launch_crashed">OsmAnd krasjet tidligere. Hjelp til å forbedre OsmAnd ved å dele feilmeldingen.</string>
@ -3157,11 +3157,11 @@
<string name="app_mode_scooter">Scooter</string>
<string name="precision_hdop_and_vdop">Vannrett nøyaktighet: %1$s, loddrett: %2$s</string>
<string name="precision_hdop">Vannrett nøyaktighet: %s</string>
<string name="edit_profile_setup_subtitle">Profil beholder sine egne innstillinger</string>
<string name="edit_profile_setup_map_subtitle">Velg kartinnstillinger for profilen</string>
<string name="edit_profile_screen_options_subtitle">Velg skjerminnstillinger for profilen</string>
<string name="edit_profile_setup_subtitle">Profilen beholder sine egne innstillinger</string>
<string name="edit_profile_setup_map_subtitle">Velg kartalternativer for profilen</string>
<string name="edit_profile_screen_options_subtitle">Velg skjermalternativer for profilen</string>
<string name="edit_profile_nav_settings_subtitle">Velg navigeringsinnstillinger for profilen</string>
<string name="routing_attr_max_num_changes_description">Angi øvre grense for endringer</string>
<string name="routing_attr_max_num_changes_description">Bestem det maksimale antall overganger</string>
<string name="external_input_device">Eksterne inndataenheter</string>
<string name="external_input_device_descr">Velg en enhet for ekstern kontroll, som f.eks. tastatur eller WunderLINQ.</string>
<string name="sett_generic_ext_input">Tastatur</string>
@ -3309,10 +3309,10 @@
<string name="rendering_attr_piste_difficulty_connection_name">Overgang</string>
<string name="track_saved">Spor lagret</string>
<string name="empty_filename">Tomt filnavn</string>
<string name="turn_screen_on_router">Vekk for sving</string>
<string name="turn_screen_on_router">Slå på skjermen ved sving</string>
<string name="turn_screen_on_time_descr">Juster hvor lenge skjermen skal forbli påslått.</string>
<string name="turn_screen_on_sensor">Bruk nærhetssensor</string>
<string name="turn_screen_on_sensor_descr">Vift hånden din over toppen av skjermen for å skru den på under navigasjon.</string>
<string name="turn_screen_on_sensor_descr">Å bevege hånden over skjermen vil slå den på.</string>
<string name="rendering_attr_highway_class_track_grade1_name">Klasse 1</string>
<string name="rendering_attr_highway_class_track_grade2_name">Klasse 2</string>
<string name="rendering_attr_highway_class_track_grade3_name">Klasse 3</string>
@ -3939,4 +3939,5 @@
<string name="login_open_street_map_org">Logg inn på OpenStreetMap.org</string>
<string name="profile_type_osmand_string">OsmAnd-profil</string>
<string name="profile_type_user_string">Brukerprofil</string>
<string name="button_rate">Bedøm</string>
</resources>

View file

@ -1941,7 +1941,7 @@
<string name="rendering_value_thin_name">Cienki</string>
<string name="rendering_value_medium_name">Średni</string>
<string name="rendering_value_bold_name">Gruby</string>
<string name="access_no_destination">Nie ustalono celu</string>
<string name="access_no_destination">Wtyczka ułatwień dostępu: nie ustawiono miejsca docelowego</string>
<string name="access_disable_offroute_recalc">Utrzymywanie trasy po zboczeniu z niej</string>
<string name="access_disable_offroute_recalc_descr">Brak ponownego przeliczania trasy po zjechaniu z trasy.</string>
<string name="map_widget_magnetic_bearing">Orientacja magnetyczna</string>
@ -3791,9 +3791,9 @@
<string name="quick_action_remove_next_destination">Usuń najbliższy punkt docelowy</string>
<string name="use_volume_buttons_as_zoom_descr">Steruj poziomem powiększenia mapy za pomocą przycisków głośności na urządzeniu.</string>
<string name="please_provide_point_name_error">Podaj nazwę punktu</string>
<string name="quick_action_remove_next_destination_descr">Bieżący punkt docelowy na trasie zostanie usunięty. Jeśli będzie to miejsce docelowe, nawigacja zostanie zatrzymana.</string>
<string name="quick_action_remove_next_destination_descr">Usuwa następny cel na trasie. Jeśli jest to miejsce docelowe, nawigacja zostanie zatrzymana.</string>
<string name="search_download_wikipedia_maps">Pobierz mapy Wikipedii</string>
<string name="plugin_wikipedia_description">Uzyskaj informacje o interesujących miejscach z Wikipedii. Jest to kieszonkowy przewodnik offline - wystarczy włączyć wtyczkę Wikipedii i cieszyć się artykułami o obiektach wokół ciebie.</string>
<string name="plugin_wikipedia_description">Uzyskaj informacje o ciekawych miejscach z Wikipedii, kieszonkowego przewodnika offline zawierającego artykuły o miejscach i celach.</string>
<string name="app_mode_enduro_motorcycle">Motocykl Enduro</string>
<string name="app_mode_motor_scooter">Skuter</string>
<string name="routing_attr_length_description">Określ długość pojazdu dozwoloną na trasach.</string>
@ -3839,7 +3839,7 @@
<string name="route_between_points_desc">Wybierz sposób łączenia punktów, za pomocą linii prostej, lub oblicz trasę między nimi w sposób określony poniżej.</string>
<string name="route_between_points_warning_desc">Następnie przyciągnij trasę do najbliższej dozwolonej drogi za pomocą jednego z profili nawigacji, aby skorzystać z tej opcji.</string>
<string name="street_level_imagery">Zdjęcia z poziomu ulicy</string>
<string name="plan_route_exit_dialog_descr">Czy na pewno chcesz odrzucić wszystkie zmiany w zaplanowanej trasie, zamykając ją\?</string>
<string name="plan_route_exit_dialog_descr">Czy na pewno chcesz odrzucić wszystkie zmiany w zaplanowanej trasie\?</string>
<string name="in_case_of_reverse_direction">W przypadku odwrotnego kierunku</string>
<string name="navigate_to_track_descr">Przejdź z mojej lokalizacji na trasę</string>
<string name="app_mode_wheelchair_forward">Sportowy wózek inwalidzki</string>
@ -3912,7 +3912,7 @@
<string name="what_is_new">Co nowego</string>
<string name="start_finish_icons">Ikony startu i końca</string>
<string name="contour_lines_thanks">Dziękujemy za zakup \"Linii konturowych\"</string>
<string name="osm_live_payment_desc_hw">Subskrypcja naliczona za wybrany okres. Anuluj ją w AppGallery w dowolnym momencie.</string>
<string name="osm_live_payment_desc_hw">Subskrypcja jest naliczana za wybrany okres. Anuluj go w AppGallery w dowolnym momencie.</string>
<string name="osm_live_payment_subscription_management_hw">Płatność zostanie pobrana z konta AppGallery po potwierdzeniu zakupu.
\n
\nSubskrypcja jest automatycznie odnawiana, chyba że zostanie anulowana przed datą odnowienia. Twoje konto zostanie obciążone opłatą za okres odnowienia (miesiąc/trzy miesiące/rok) tylko w dniu odnowienia.
@ -3937,7 +3937,7 @@
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="use_two_phase_routing">Użyj 2-fazowego algorytmu routingu A *</string>
<string name="shared_string_graph">Wykres</string>
<string name="message_need_calculate_route_before_show_graph">%1$s dane dostępne tylko na drogach, aby je uzyskać, musisz obliczyć trasę za pomocą opcji „Trasa między punktami”.</string>
<string name="message_need_calculate_route_before_show_graph">%1$s dane dostępne tylko na drogach, oblicz trasę, korzystając z opcji „Trasa między punktami”, aby wyświetlić wykresy.</string>
<string name="message_graph_will_be_available_after_recalculation">Proszę czekać.
\nWykres będzie dostępny po ponownym obliczeniu trasy.</string>
<string name="shared_string_local_maps">Mapy lokalne</string>
@ -3956,7 +3956,7 @@
<string name="subscription_paused_title">Subskrypcja OsmAnd Live została wstrzymana</string>
<string name="snowmobile_render_descr">Do jazdy skuterem śnieżnym z wyznaczonymi drogami i torami.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Dodaj co najmniej dwa punkty</string>
<string name="subscription_payment_issue_title">Wystąpił problem z Twoją subskrypcją. Naciśnij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności.</string>
<string name="subscription_payment_issue_title">Stuknij przycisk, aby skonfigurować metodę płatności w Google Play i naprawić subskrypcję.</string>
<string name="subscription_on_hold_title">Subskrypcja OsmAnd Live jest wstrzymana</string>
<string name="user_login">Login</string>
<string name="login_open_street_map">Zaloguj się do OpenStreetMap</string>
@ -4021,4 +4021,7 @@
\n• Obsługa niestandardowych kolorów dla ulubionych i śledzenia punktów trasy
\n
\n</string>
<string name="profile_type_osmand_string">Profil OsmAnd</string>
<string name="profile_type_user_string">Profil użytkownika</string>
<string name="reverse_all_points">Odwróć wszystkie punkty</string>
</resources>

View file

@ -3894,4 +3894,7 @@
<string name="poi_water_source_tap">Toque</string>
<string name="poi_water_source_water_works">Estação de tratamento de água</string>
<string name="poi_water_source_tube_well">Bem embalado</string>
<string name="poi_weightbridge">Balança</string>
<string name="poi_ranger_station">Posto de guarda florestal</string>
<string name="poi_waste_transfer_station">Estação de transferência de resíduos</string>
</resources>

View file

@ -4013,4 +4013,5 @@
<string name="plan_route_add_new_segment">Adicionar novo segmento</string>
<string name="profile_type_osmand_string">Perfil do OsmAnd</string>
<string name="profile_type_user_string">Perfil de usuário</string>
<string name="reverse_all_points">Reverter todos os pontos</string>
</resources>

View file

@ -3871,4 +3871,11 @@
<string name="poi_lifeguard_base">Base de salva-vidas</string>
<string name="poi_vaccination_covid19">Vacinação: COVID19</string>
<string name="poi_health_specialty_vaccination_yes">Vacinação</string>
<string name="poi_waste_transfer_station">Estação de transferência de resíduos</string>
<string name="poi_weightbridge">Ponte de peso</string>
<string name="poi_water_source_lake">Lago</string>
<string name="poi_water_source_river">Rio</string>
<string name="poi_water_source_water_tank">Tanque de água</string>
<string name="poi_water_source_tap">Torneira</string>
<string name="poi_water_source_water_works">Estação de tratamento de água</string>
</resources>

View file

@ -3881,4 +3881,9 @@
<string name="poi_water_source_tap">Нажмите</string>
<string name="poi_water_source_water_works">Водозабор</string>
<string name="poi_water_source_tube_well">Трубчатый колодец</string>
<string name="poi_mobile_money_agent">Мобильный платёжный офис</string>
<string name="poi_weightbridge">Весовая платформа</string>
<string name="poi_lavoir">Умывальник</string>
<string name="poi_waste_transfer_station">Станция перекачки отходов</string>
<string name="poi_ranger_station">Станция рейнджеров</string>
</resources>

View file

@ -1819,7 +1819,7 @@
<string name="routing_attr_height_name">Предельная высота</string>
<string name="routing_attr_height_description">Укажите высоту транспортного средства для учёта при построении маршрута.</string>
<string name="use_fast_recalculation">Умный пересчёт маршрута</string>
<string name="use_fast_recalculation_desc">Пересчитывается только начальная часть маршрута. Может использоваться для дальних поездок.</string>
<string name="use_fast_recalculation_desc">Пересчитывается только начальная часть маршрута. Полезно для дальних поездок.</string>
<string name="osm_edit_context_menu_delete">Удалить правки OSM</string>
<string name="rendering_value_disabled_name">Выключено</string>
<string name="rendering_value_walkingRoutesScopeOSMC_name">Раскраска по сетевой принадлежности</string>
@ -2169,7 +2169,7 @@
<string name="access_disable_offroute_recalc_descr">Предотвращает пересчёт маршрута после того, как вы из него вышли.</string>
<string name="access_disable_wrong_direction_recalc">Не пересчитывать маршрут при обратном направлении движения</string>
<string name="access_disable_wrong_direction_recalc_descr">Предотвращает автоматический пересчёт маршрута при обратном направлении движения.</string>
<string name="access_no_destination">Пункт назначения не задан</string>
<string name="access_no_destination">Плагин специальных возможностей: пункт назначения не задан</string>
<string name="access_direction_audio_feedback">Озвучивать направление</string>
<string name="access_direction_audio_feedback_descr">Индицировать звуком направление на целевую точку.</string>
<string name="access_direction_haptic_feedback">Тактильная индикация направления</string>
@ -3505,7 +3505,7 @@
<string name="login_and_pass">Имя пользователя и пароль</string>
<string name="plugin_global_prefs_info">Эти настройки плагина применяются ко всем профилям</string>
<string name="osm_editing">Редактирование OSM</string>
<string name="osm_edits_view_descr">Здесь отображаются ваши правки и ошибки OSM, ещё не отправленные в %1$s. Отправленные точки не будут отображаться.</string>
<string name="osm_edits_view_descr">Здесь отображаются ваши правки и ошибки OSM, ещё не отправленные в %1$s. Отправленные изменения не отображаются.</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Значок, отображаемый во время навигации или движения.</string>
<string name="select_map_icon_descr">Значок, отображаемый в состоянии покоя.</string>
@ -3905,7 +3905,7 @@
<string name="contour_lines_thanks">Спасибо за покупку \'Контурных линий\'</string>
<string name="routing_attr_avoid_footways_description">Избегать пешеходных дорожек</string>
<string name="routing_attr_avoid_footways_name">Избегать пешеходных дорожек</string>
<string name="osm_live_payment_desc_hw">Подписка взимается за выбранный период. Отмените её в AppGallery в любое время.</string>
<string name="osm_live_payment_desc_hw">Подписка оплачивается за выбранный период. Отмените её в AppGallery в любое время.</string>
<string name="osm_live_payment_subscription_management_hw">Оплата будет снята с вашей учётной записи AppGallery при подтверждении покупки.
\n
\nПодписка продлевается автоматически, если она не будет отменена до даты продления. С вашего счёта будет взиматься плата за период продления (месяц/три месяца/год) только в дату продления.
@ -3941,7 +3941,7 @@
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="mgrs_format_descr">OsmAnd использует MGRS, который похож на формат UTM NATO.</string>
<string name="use_native_pt">Развитие местного общественного транспорта</string>
<string name="message_you_need_add_two_points_to_show_graphs">Нужно добавить не менее двух точек</string>
<string name="message_you_need_add_two_points_to_show_graphs">Добавьте не менее двух точек</string>
<string name="message_need_calculate_route_before_show_graph">Данные %1$s доступны только для дорог, нужно рассчитать маршрут с помощью «Маршрут между точками».</string>
<string name="enter_text_separated">Вводите теги через запятую.</string>
<string name="use_native_pt_desc">Перейти на расчёт маршрутов общественного транспорта с помощью Java (safe)</string>
@ -3974,7 +3974,7 @@
<string name="add_photos_descr">OsmAnd показывает фотографии из нескольких источников:
\nOpenPlaceReviews — фотогорафии POI;
\nMapillary — изображения улиц;
\nWeb / Wikimedia — фотографии POI, указанные в данных OpenStreetMap.</string>
\nWeb / Wikimedia — фотографии POI по данным OpenStreetMap.</string>
<string name="shared_string_resources">Ресурсы</string>
<string name="approximate_file_size">Примерный размер файла</string>
<string name="file_size_needed_for_import">Требуется для импорта</string>
@ -3985,10 +3985,10 @@
<string name="select_items_for_import">Выберите импортируемые элементы.</string>
<string name="use_dev_url">Использовать dev.openstreetmap.org</string>
<string name="osm_login_descr">Можно войти в систему с помощью безопасного метода OAuth или используя свои имя пользователя и пароль.</string>
<string name="subscription_payment_issue_title">Возникла проблема с подпиской. Нажмите кнопку, чтобы перейти к настройкам подписки Google Play и исправить способ оплаты.</string>
<string name="subscription_payment_issue_title">Нажмите кнопку, чтобы перейти к настройкам подписки Google Play и исправить способ оплаты.</string>
<string name="osm_edit_comment_note">Комментировать заметку OSM</string>
<string name="use_dev_url_descr">Переключиться на использование dev.openstreetmap.org вместо openstreetmap.org для тестирования отправки заметок OSM / POI / GPX.</string>
<string name="register_on_openplacereviews_desc">Фотографии предоставлены проектом открытых данных OpenPlaceReviews.org. Чтобы отправить свои фотографии, необходимо зарегистрироваться на сайте.</string>
<string name="register_on_openplacereviews_desc">Фотографии предоставлены проектом открытых данных OpenPlaceReviews.org. Чтобы отправить свои фотографии, необходимо зарегистрироваться на этом сайте.</string>
<string name="cannot_upload_image">Невозможно отправить изображение, попробуйте позже</string>
<string name="select_picture">Выбор изображения</string>
<string name="app_mode_kayak">Каяк</string>
@ -3999,4 +3999,6 @@
<string name="plan_route_join_segments">Объединить сегменты</string>
<string name="plan_route_split_before">Разделить до</string>
<string name="plan_route_split_after">Разделить после</string>
<string name="profile_type_user_string">Профиль пользователя</string>
<string name="profile_type_osmand_string">Профиль OsmAnd</string>
</resources>

View file

@ -3890,4 +3890,8 @@
<string name="poi_water_source_tap">Isceta</string>
<string name="poi_water_source_water_works">Òperas idràulicas</string>
<string name="poi_water_source_tube_well">Putzu a tubu</string>
<string name="poi_weightbridge">Bilàntzia a ponte</string>
<string name="poi_ranger_station">Istatzione de sos rangers</string>
<string name="poi_lavoir">Sabunadòrgiu</string>
<string name="poi_waste_transfer_station">Istatzione de tramudòngiu de s\'arga</string>
</resources>

View file

@ -4013,4 +4013,7 @@
\n • Suportu pro colores personalizados pro sos preferidos e sos puntos de coladòrgiu de sas rastas
\n
\n</string>
<string name="profile_type_osmand_string">Profilu de OsmAnd</string>
<string name="profile_type_user_string">Profilu de s\'impreadore</string>
<string name="reverse_all_points">Fùrria totu sos puntos</string>
</resources>

View file

@ -4016,4 +4016,7 @@
\n• Podpora vlastných farieb pre obľúbené položky a sledovanie trasových bodov
\n
\n</string>
<string name="profile_type_osmand_string">Profil OsmAnd</string>
<string name="profile_type_user_string">Profil používateľa</string>
<string name="reverse_all_points">Otočiť všetky body</string>
</resources>

View file

@ -3973,4 +3973,5 @@
\n</string>
<string name="profile_type_osmand_string">OsmAnd profili</string>
<string name="profile_type_user_string">Kullanıcı profili</string>
<string name="reverse_all_points">Tüm noktaları tersine çevir</string>
</resources>

View file

@ -3882,4 +3882,8 @@
<string name="poi_water_source_water_tank">Резервуар для води</string>
<string name="poi_water_source_lake">Озеро</string>
<string name="poi_water_source_river">Річка</string>
<string name="poi_ranger_station">Лісництво</string>
<string name="poi_weightbridge">Автомобільні ваги</string>
<string name="poi_lavoir">Громадська пральня</string>
<string name="poi_waste_transfer_station">Станція перевезення відходів</string>
</resources>

View file

@ -4012,4 +4012,7 @@
\n• Підтримка власних кольорів закладок та маршрутних точок треку
\n
\n</string>
<string name="profile_type_osmand_string">Профіль OsmAnd</string>
<string name="profile_type_user_string">Профіль користувача</string>
<string name="reverse_all_points">Повернути назад всі точки</string>
</resources>

View file

@ -3893,4 +3893,8 @@
<string name="poi_water_source_tap">點擊</string>
<string name="poi_water_source_water_works">自來水廠</string>
<string name="poi_water_source_tube_well">管井</string>
<string name="poi_weightbridge">地磅</string>
<string name="poi_ranger_station">護林員站</string>
<string name="poi_lavoir">公共洗衣區</string>
<string name="poi_waste_transfer_station">垃圾站</string>
</resources>

View file

@ -4013,4 +4013,5 @@
\n</string>
<string name="profile_type_osmand_string">OsmAnd 設定檔</string>
<string name="profile_type_user_string">使用者設定檔</string>
<string name="reverse_all_points">反轉所有點</string>
</resources>

View file

@ -4318,4 +4318,13 @@
<string name="poi_water_source_well">Well</string>
<string name="poi_water_source_river">River</string>
<string name="poi_water_source_lake">Lake</string>
<string name="poi_ranger_station">Ranger station</string>
<string name="poi_weightbridge">Weightbridge</string>
<string name="poi_waste_transfer_station">Waste transfer station</string>
<string name="poi_lavoir">Lavoir</string>
</resources>

View file

@ -11,6 +11,9 @@
Thx - Hardy
-->
<string name="shared_string_last_used">Last used</string>
<string name="profile_by_default_description">Select the profile, that will be used on application start.</string>
<string name="reverse_all_points">Reverse all points</string>
<string name="release_3_9">
• Added option to export and import all data including settings, resources, my places\n\n
• Plan Route: graphs for track segments with route, and added the ability to create and edit multiple track segments\n\n

View file

@ -4,9 +4,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:title="@string/osmand_settings">
<net.osmand.plus.settings.preferences.ListPreferenceEx
android:icon="@drawable/ic_world_globe_dark"
<Preference
android:key="default_application_mode_string"
android:icon="@drawable/ic_world_globe_dark"
android:persistent="false"
android:layout="@layout/preference_with_descr"
android:title="@string/settings_preset" />

View file

@ -56,7 +56,7 @@ public class AccessibilityPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.osmand_accessibility_description);
}

View file

@ -43,6 +43,7 @@ import net.osmand.aidl.tiles.ASqliteDbFile;
import net.osmand.aidlapi.customization.AProfile;
import net.osmand.aidlapi.info.AppInfoParams;
import net.osmand.aidlapi.map.ALatLon;
import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
@ -62,6 +63,7 @@ import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.helpers.ColorDialogs;
import net.osmand.plus.helpers.ExternalApiHelper;
import net.osmand.plus.helpers.LockHelper;
@ -78,6 +80,7 @@ import net.osmand.plus.routing.IRoutingDataUpdateListener;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
import net.osmand.plus.routing.RouteDirectionInfo;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.routing.VoiceRouter;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
@ -138,8 +141,11 @@ import static net.osmand.aidlapi.OsmandAidlConstants.COPY_FILE_UNSUPPORTED_FILE_
import static net.osmand.aidlapi.OsmandAidlConstants.COPY_FILE_WRITE_LOCK_ERROR;
import static net.osmand.aidlapi.OsmandAidlConstants.OK_RESPONSE;
import static net.osmand.plus.FavouritesDbHelper.FILE_TO_SAVE;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DIRECTION_ANGLE;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DIRECTION_LANES;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DIRECTION_NAME;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DIRECTION_POSSIBLY_LEFT;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DIRECTION_POSSIBLY_RIGHT;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DIRECTION_TURN;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_DISTANCE;
import static net.osmand.plus.helpers.ExternalApiHelper.PARAM_NT_IMMINENT;
@ -177,6 +183,7 @@ public class OsmandAidlApi {
private static final String AIDL_DATA = "aidl_data";
private static final String AIDL_URI = "aidl_uri";
private static final String AIDL_FORCE = "aidl_force";
private static final String AIDL_LOCATION_PERMISSION = "aidl_location_permission";
private static final String AIDL_SEARCH_QUERY = "aidl_search_query";
private static final String AIDL_SEARCH_LAT = "aidl_search_lat";
private static final String AIDL_SEARCH_LON = "aidl_search_lon";
@ -601,6 +608,7 @@ public class OsmandAidlApi {
final RoutingHelper routingHelper = app.getRoutingHelper();
boolean force = intent.getBooleanExtra(AIDL_FORCE, true);
final boolean locationPermission = intent.getBooleanExtra(AIDL_LOCATION_PERMISSION, false);
if (routingHelper.isFollowingMode() && !force) {
mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() {
@ -608,12 +616,12 @@ public class OsmandAidlApi {
public void onDismiss(DialogInterface dialog) {
MapActivity mapActivity = mapActivityRef.get();
if (mapActivity != null && !routingHelper.isFollowingMode()) {
ExternalApiHelper.startNavigation(mapActivity, start, startDesc, dest, destDesc, profile);
ExternalApiHelper.startNavigation(mapActivity, start, startDesc, dest, destDesc, profile, locationPermission);
}
}
});
} else {
ExternalApiHelper.startNavigation(mapActivity, start, startDesc, dest, destDesc, profile);
ExternalApiHelper.startNavigation(mapActivity, start, startDesc, dest, destDesc, profile, locationPermission);
}
}
}
@ -667,6 +675,7 @@ public class OsmandAidlApi {
if (searchLocation != null) {
final RoutingHelper routingHelper = app.getRoutingHelper();
boolean force = intent.getBooleanExtra(AIDL_FORCE, true);
final boolean locationPermission = intent.getBooleanExtra(AIDL_LOCATION_PERMISSION, false);
if (routingHelper.isFollowingMode() && !force) {
mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() {
@ -674,12 +683,14 @@ public class OsmandAidlApi {
public void onDismiss(DialogInterface dialog) {
MapActivity mapActivity = mapActivityRef.get();
if (mapActivity != null && !routingHelper.isFollowingMode()) {
ExternalApiHelper.searchAndNavigate(mapActivity, searchLocation, start, startDesc, profile, searchQuery, false);
ExternalApiHelper.searchAndNavigate(mapActivity, searchLocation, start,
startDesc, profile, searchQuery, false, locationPermission);
}
}
});
} else {
ExternalApiHelper.searchAndNavigate(mapActivity, searchLocation, start, startDesc, profile, searchQuery, false);
ExternalApiHelper.searchAndNavigate(mapActivity, searchLocation, start,
startDesc, profile, searchQuery, false, locationPermission);
}
}
}
@ -698,7 +709,8 @@ public class OsmandAidlApi {
GPXFile gpx = loadGpxFileFromIntent(mapActivity, intent);
if (gpx != null) {
boolean force = intent.getBooleanExtra(AIDL_FORCE, false);
ExternalApiHelper.saveAndNavigateGpx(mapActivity, gpx, force);
boolean locationPermission = intent.getBooleanExtra(AIDL_LOCATION_PERMISSION, false);
ExternalApiHelper.saveAndNavigateGpx(mapActivity, gpx, force, locationPermission);
}
}
}
@ -1653,7 +1665,7 @@ public class OsmandAidlApi {
boolean navigate(String startName, double startLat, double startLon,
String destName, double destLat, double destLon,
String profile, boolean force) {
String profile, boolean force, boolean requestLocationPermission) {
Intent intent = new Intent();
intent.setAction(AIDL_NAVIGATE);
intent.putExtra(AIDL_START_NAME, startName);
@ -1664,13 +1676,14 @@ public class OsmandAidlApi {
intent.putExtra(AIDL_DEST_LON, destLon);
intent.putExtra(AIDL_PROFILE, profile);
intent.putExtra(AIDL_FORCE, force);
intent.putExtra(AIDL_LOCATION_PERMISSION, requestLocationPermission);
app.sendBroadcast(intent);
return true;
}
boolean navigateSearch(String startName, double startLat, double startLon,
String searchQuery, double searchLat, double searchLon,
String profile, boolean force) {
String profile, boolean force, boolean requestLocationPermission) {
Intent intent = new Intent();
intent.setAction(AIDL_NAVIGATE_SEARCH);
intent.putExtra(AIDL_START_NAME, startName);
@ -1681,6 +1694,7 @@ public class OsmandAidlApi {
intent.putExtra(AIDL_SEARCH_LON, searchLon);
intent.putExtra(AIDL_PROFILE, profile);
intent.putExtra(AIDL_FORCE, force);
intent.putExtra(AIDL_LOCATION_PERMISSION, requestLocationPermission);
app.sendBroadcast(intent);
return true;
}
@ -1720,12 +1734,13 @@ public class OsmandAidlApi {
return true;
}
boolean navigateGpx(String data, Uri uri, boolean force) {
boolean navigateGpx(String data, Uri uri, boolean force, boolean requestLocationPermission) {
Intent intent = new Intent();
intent.setAction(AIDL_NAVIGATE_GPX);
intent.putExtra(AIDL_DATA, data);
intent.putExtra(AIDL_URI, uri);
intent.putExtra(AIDL_FORCE, force);
intent.putExtra(AIDL_LOCATION_PERMISSION, requestLocationPermission);
app.sendBroadcast(intent);
return true;
}
@ -1789,8 +1804,11 @@ public class OsmandAidlApi {
if (ni.directionInfo != null && ni.directionInfo.getTurnType() != null) {
TurnType tt = ni.directionInfo.getTurnType();
RouteDirectionInfo a = ni.directionInfo;
bundle.putString(prefix + PARAM_NT_DIRECTION_NAME, RoutingHelper.formatStreetName(a.getStreetName(), a.getRef(), a.getDestinationName(), ""));
bundle.putString(prefix + PARAM_NT_DIRECTION_NAME, RoutingHelperUtils.formatStreetName(a.getStreetName(), a.getRef(), a.getDestinationName(), ""));
bundle.putString(prefix + PARAM_NT_DIRECTION_TURN, tt.toXmlString());
bundle.putFloat(prefix + PARAM_NT_DIRECTION_ANGLE, tt.getTurnAngle());
bundle.putBoolean(prefix + PARAM_NT_DIRECTION_POSSIBLY_LEFT, tt.isPossibleLeftTurn());
bundle.putBoolean(prefix + PARAM_NT_DIRECTION_POSSIBLY_RIGHT, tt.isPossibleRightTurn());
if (tt.getLanes() != null) {
bundle.putString(prefix + PARAM_NT_DIRECTION_LANES, Arrays.toString(tt.getLanes()));
}
@ -2368,6 +2386,25 @@ public class OsmandAidlApi {
return true;
}
public boolean getBlockedRoads(List<ABlockedRoad> blockedRoads) {
Map<LatLon, AvoidRoadInfo> impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads();
for (AvoidRoadInfo info : impassableRoads.values()) {
blockedRoads.add(new ABlockedRoad(info.id, info.latitude, info.longitude, info.direction, info.name, info.appModeKey));
}
return true;
}
public boolean addRoadBlock(ABlockedRoad road) {
LatLon latLon = new LatLon(road.getLatitude(), road.getLongitude());
app.getAvoidSpecificRoads().addImpassableRoad(null, latLon, false, false, road.getAppModeKey());
return true;
}
public boolean removeRoadBlock(ABlockedRoad road) {
app.getAvoidSpecificRoads().removeImpassableRoad(new LatLon(road.getLatitude(), road.getLongitude()));
return true;
}
private static class FileCopyInfo {
long startTime;
long lastAccessTime;

View file

@ -44,6 +44,7 @@ import net.osmand.aidl.gpx.RemoveGpxParams;
import net.osmand.aidl.gpx.ShowGpxParams;
import net.osmand.aidl.gpx.StartGpxRecordingParams;
import net.osmand.aidl.gpx.StopGpxRecordingParams;
import net.osmand.aidl.lock.SetLockStateParams;
import net.osmand.aidl.map.ALatLon;
import net.osmand.aidl.map.SetMapLocationParams;
import net.osmand.aidl.maplayer.AddMapLayerParams;
@ -85,10 +86,9 @@ import net.osmand.aidl.quickaction.QuickActionParams;
import net.osmand.aidl.search.SearchParams;
import net.osmand.aidl.search.SearchResult;
import net.osmand.aidl.tiles.ASqliteDbFile;
import net.osmand.aidl.lock.SetLockStateParams;
import net.osmand.data.LatLon;
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -736,7 +736,7 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
return params != null && api != null && api.navigate(
params.getStartName(), params.getStartLat(), params.getStartLon(),
params.getDestName(), params.getDestLat(), params.getDestLon(),
params.getProfile(), params.isForce());
params.getProfile(), params.isForce(), params.isNeedLocationPermission());
} catch (Exception e) {
handleException(e);
return false;
@ -747,7 +747,8 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
public boolean navigateGpx(NavigateGpxParams params) {
try {
OsmandAidlApi api = getApi("navigateGpx");
return params != null && api != null && api.navigateGpx(params.getData(), params.getUri(), params.isForce());
return params != null && api != null && api.navigateGpx(params.getData(), params.getUri(),
params.isForce(), params.isNeedLocationPermission());
} catch (Exception e) {
handleException(e);
return false;
@ -857,7 +858,7 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
return params != null && api != null && api.navigateSearch(
params.getStartName(), params.getStartLat(), params.getStartLon(),
params.getSearchQuery(), params.getSearchLat(), params.getSearchLon(),
params.getProfile(), params.isForce());
params.getProfile(), params.isForce(), params.isNeedLocationPermission());
} catch (Exception e) {
handleException(e);
return false;
@ -1328,6 +1329,7 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
return false;
}
}
@Override
public boolean setLockState(SetLockStateParams params) {
try {

View file

@ -73,13 +73,16 @@ import net.osmand.aidlapi.navdrawer.NavDrawerFooterParams;
import net.osmand.aidlapi.navdrawer.NavDrawerHeaderParams;
import net.osmand.aidlapi.navdrawer.NavDrawerItem;
import net.osmand.aidlapi.navdrawer.SetNavDrawerItemsParams;
import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.aidlapi.navigation.ANavigationUpdateParams;
import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams;
import net.osmand.aidlapi.navigation.AddBlockedRoadParams;
import net.osmand.aidlapi.navigation.MuteNavigationParams;
import net.osmand.aidlapi.navigation.NavigateGpxParams;
import net.osmand.aidlapi.navigation.NavigateParams;
import net.osmand.aidlapi.navigation.NavigateSearchParams;
import net.osmand.aidlapi.navigation.PauseNavigationParams;
import net.osmand.aidlapi.navigation.RemoveBlockedRoadParams;
import net.osmand.aidlapi.navigation.ResumeNavigationParams;
import net.osmand.aidlapi.navigation.StopNavigationParams;
import net.osmand.aidlapi.navigation.UnmuteNavigationParams;
@ -693,7 +696,7 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
return params != null && api != null && api.navigate(
params.getStartName(), params.getStartLat(), params.getStartLon(),
params.getDestName(), params.getDestLat(), params.getDestLon(),
params.getProfile(), params.isForce());
params.getProfile(), params.isForce(), params.isNeedLocationPermission());
} catch (Exception e) {
handleException(e);
return false;
@ -704,7 +707,8 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
public boolean navigateGpx(NavigateGpxParams params) {
try {
OsmandAidlApi api = getApi("navigateGpx");
return params != null && api != null && api.navigateGpx(params.getData(), params.getUri(), params.isForce());
return params != null && api != null && api.navigateGpx(params.getData(), params.getUri(),
params.isForce(), params.isNeedLocationPermission());
} catch (Exception e) {
handleException(e);
return false;
@ -814,7 +818,7 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
return params != null && api != null && api.navigateSearch(
params.getStartName(), params.getStartLat(), params.getStartLon(),
params.getSearchQuery(), params.getSearchLat(), params.getSearchLon(),
params.getProfile(), params.isForce());
params.getProfile(), params.isForce(), params.isNeedLocationPermission());
} catch (Exception e) {
handleException(e);
return false;
@ -1396,6 +1400,49 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
return false;
}
}
@Override
public boolean getBlockedRoads(List<ABlockedRoad> blockedRoads) {
try {
OsmandAidlApi api = getApi("getBlockedRoads");
return api != null && api.getBlockedRoads(blockedRoads);
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean addRoadBlock(AddBlockedRoadParams params) {
try {
OsmandAidlApi api = getApi("addRoadBlock");
if (params != null && api != null) {
ABlockedRoad road = params.getBlockedRoad();
if (road != null) {
return api.addRoadBlock(road);
}
}
} catch (Exception e) {
handleException(e);
}
return false;
}
@Override
public boolean removeRoadBlock(RemoveBlockedRoadParams params) {
try {
OsmandAidlApi api = getApi("removeRoadBlock");
if (params != null && api != null) {
ABlockedRoad road = params.getBlockedRoad();
if (road != null) {
return api.removeRoadBlock(road);
}
}
} catch (Exception e) {
handleException(e);
}
return false;
}
};
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {

View file

@ -9,15 +9,18 @@ public class NavigateGpxParams implements Parcelable {
private String data;
private Uri uri;
private boolean force;
private boolean needLocationPermission;
public NavigateGpxParams(String data, boolean force) {
public NavigateGpxParams(String data, boolean force, boolean needLocationPermission) {
this.data = data;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateGpxParams(Uri uri, boolean force) {
public NavigateGpxParams(Uri uri, boolean force, boolean needLocationPermission) {
this.uri = uri;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateGpxParams(Parcel in) {
@ -48,22 +51,27 @@ public class NavigateGpxParams implements Parcelable {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(data);
out.writeParcelable(uri, flags);
out.writeByte((byte) (force ? 1 : 0));
out.writeByte((byte) (needLocationPermission ? 1 : 0));
}
private void readFromParcel(Parcel in) {
data = in.readString();
uri = in.readParcelable(Uri.class.getClassLoader());
force = in.readByte() != 0;
needLocationPermission = in.readByte() != 0;
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -13,8 +13,10 @@ public class NavigateParams implements Parcelable {
private double destLon;
private String profile;
private boolean force;
private boolean needLocationPermission;
public NavigateParams(String startName, double startLat, double startLon, String destName, double destLat, double destLon, String profile, boolean force) {
public NavigateParams(String startName, double startLat, double startLon, String destName, double destLat,
double destLon, String profile, boolean force, boolean needLocationPermission) {
this.startName = startName;
this.startLat = startLat;
this.startLon = startLon;
@ -23,6 +25,7 @@ public class NavigateParams implements Parcelable {
this.destLon = destLon;
this.profile = profile;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateParams(Parcel in) {
@ -73,6 +76,10 @@ public class NavigateParams implements Parcelable {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(startName);
@ -83,6 +90,7 @@ public class NavigateParams implements Parcelable {
out.writeDouble(destLon);
out.writeString(profile);
out.writeByte((byte) (force ? 1 : 0));
out.writeByte((byte) (needLocationPermission ? 1 : 0));
}
private void readFromParcel(Parcel in) {
@ -94,11 +102,11 @@ public class NavigateParams implements Parcelable {
destLon = in.readDouble();
profile = in.readString();
force = in.readByte() != 0;
needLocationPermission = in.readByte() != 0;
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -13,10 +13,11 @@ public class NavigateSearchParams implements Parcelable {
private double searchLon;
private String profile;
private boolean force;
private boolean needLocationPermission;
public NavigateSearchParams(String startName, double startLat, double startLon,
String searchQuery, double searchLat, double searchLon,
String profile, boolean force) {
String profile, boolean force, boolean needLocationPermission) {
this.startName = startName;
this.startLat = startLat;
this.startLon = startLon;
@ -25,6 +26,7 @@ public class NavigateSearchParams implements Parcelable {
this.searchLon = searchLon;
this.profile = profile;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateSearchParams(Parcel in) {
@ -75,6 +77,10 @@ public class NavigateSearchParams implements Parcelable {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(startName);
@ -85,6 +91,7 @@ public class NavigateSearchParams implements Parcelable {
out.writeByte((byte) (force ? 1 : 0));
out.writeDouble(searchLat);
out.writeDouble(searchLon);
out.writeByte((byte) (needLocationPermission ? 1 : 0));
}
private void readFromParcel(Parcel in) {
@ -96,11 +103,11 @@ public class NavigateSearchParams implements Parcelable {
force = in.readByte() != 0;
searchLat = in.readDouble();
searchLon = in.readDouble();
needLocationPermission = in.readByte() != 0;
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -39,7 +39,7 @@ import net.osmand.data.LatLon;
import net.osmand.data.QuadPoint;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelper.RouteSegmentSearchResult;
import net.osmand.plus.routing.RouteSegmentSearchResult;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.router.RouteSegmentResult;
@ -154,7 +154,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
startLocation.setTime(ms);
}
RouteSegmentSearchResult searchResult =
RoutingHelper.searchRouteSegment(currentLocation.getLatitude(), currentLocation.getLongitude(), -1, roads);
RouteSegmentSearchResult.searchRouteSegment(currentLocation.getLatitude(), currentLocation.getLongitude(), -1, roads);
if (searchResult != null) {
currentRoad = searchResult.getRoadIndex();
currentSegment = searchResult.getSegmentIndex();

View file

@ -12,6 +12,7 @@ import net.osmand.data.PointDescription;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
import net.osmand.plus.settings.backend.OsmandSettings;
@ -444,7 +445,7 @@ public class TargetPointsHelper {
Location lastKnownLocation = ctx.getLocationProvider().getLastKnownLocation();
LatLon latLon = lastKnownLocation != null ?
new LatLon(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()) : null;
routingHelper.checkAndUpdateStartLocation(latLon);
RoutingHelperUtils.checkAndUpdateStartLocation(ctx, latLon);
setMyLocationPoint(latLon, false, null);
}
}

View file

@ -126,7 +126,7 @@ import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu;
import net.osmand.plus.routepreparationmenu.MapRouteInfoMenuFragment;
import net.osmand.plus.routing.IRouteInformationListener;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback;
import net.osmand.plus.routing.RouteCalculationProgressCallback;
import net.osmand.plus.routing.TransportRoutingHelper.TransportRouteCalculationProgressCallback;
import net.osmand.plus.search.QuickSearchDialogFragment;
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchTab;
@ -553,7 +553,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
allowPrivate.setModeValue(mode, true);
}
}
getRoutingHelper().recalculateRouteDueToSettingsChange();
getRoutingHelper().onSettingsChanged(true);
}
});
dlg.setNegativeButton(R.string.shared_string_no, null);
@ -1195,6 +1195,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);
getMapLayers().getContextMenuLayer().enterAddGpxPointMode(newGpxPoint);
} else if (toShow instanceof GpxData) {
hideContextAndRouteInfoMenues();
GpxData gpxData = (GpxData) toShow;
QuadRect qr = gpxData.getRect();
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);

View file

@ -63,6 +63,7 @@ import net.osmand.plus.measurementtool.MeasurementToolFragment;
import net.osmand.plus.measurementtool.StartPlanRouteBottomSheet;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.osmedit.dialogs.DismissRouteBottomSheetFragment;
import net.osmand.plus.profiles.ProfileDataUtils;
import net.osmand.plus.profiles.RoutingProfileDataObject;
import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu;
import net.osmand.plus.routepreparationmenu.WaypointsFragment;
@ -121,7 +122,6 @@ import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_S
import static net.osmand.plus.ContextMenuAdapter.PROFILES_CHOSEN_PROFILE_TAG;
import static net.osmand.plus.ContextMenuAdapter.PROFILES_CONTROL_BUTTON_TAG;
import static net.osmand.plus.ContextMenuAdapter.PROFILES_NORMAL_PROFILE_TAG;
import static net.osmand.plus.settings.fragments.NavigationFragment.getRoutingProfiles;
public class MapActivityActions implements DialogProvider {
@ -737,7 +737,7 @@ public class MapActivityActions implements DialogProvider {
String modeDescription;
Map<String, RoutingProfileDataObject> profilesObjects = getRoutingProfiles(app);
Map<String, RoutingProfileDataObject> profilesObjects = ProfileDataUtils.getRoutingProfiles(app);
for (final ApplicationMode appMode : activeModes) {
if (appMode.isCustomProfile()) {
modeDescription = getProfileDescription(app, appMode, profilesObjects, getString(R.string.profile_type_user_string));
@ -1046,7 +1046,7 @@ public class MapActivityActions implements DialogProvider {
//switch profile button
ApplicationMode currentMode = app.getSettings().APPLICATION_MODE.get();
String modeDescription;
Map<String, RoutingProfileDataObject> profilesObjects = getRoutingProfiles(app);
Map<String, RoutingProfileDataObject> profilesObjects = ProfileDataUtils.getRoutingProfiles(app);
if (currentMode.isCustomProfile()) {
modeDescription = getProfileDescription(app, currentMode, profilesObjects, getString(R.string.profile_type_user_string));
} else {

View file

@ -581,7 +581,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.audionotes_plugin_description);
}

View file

@ -25,6 +25,7 @@ import net.osmand.plus.dashboard.DashboardOnMap;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.plus.views.OsmandMapTileView;
@ -175,7 +176,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
locationProvider = location.getProvider();
if (settings.DRIVING_REGION_AUTOMATIC.get() && !drivingRegionUpdated && !app.isApplicationInitializing()) {
drivingRegionUpdated = true;
app.getRoutingHelper().checkAndUpdateStartLocation(location);
RoutingHelperUtils.checkAndUpdateStartLocation(app, location);
}
}
if (mapView != null) {

View file

@ -37,7 +37,7 @@ public class OsmandDevelopmentPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.osmand_development_plugin_description);
}

View file

@ -15,6 +15,7 @@ import androidx.fragment.app.FragmentManager;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.profiles.ProfileDataUtils;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
@ -33,7 +34,6 @@ import net.osmand.plus.download.DownloadValidationManager;
import net.osmand.plus.download.IndexItem;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
import net.osmand.plus.widgets.style.CustomTypefaceSpan;
import org.apache.commons.logging.Log;
@ -221,7 +221,7 @@ public class PluginInstalledBottomSheetDialog extends MenuBottomSheetDialogFragm
final BottomSheetItemWithCompoundButton[] appModeItem = new BottomSheetItemWithCompoundButton[1];
appModeItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(ApplicationMode.values(app).contains(mode))
.setDescription(BaseSettingsFragment.getAppModeDescription(app, mode))
.setDescription(ProfileDataUtils.getAppModeDescription(app, mode))
.setTitle(mode.toHumanString())
.setIcon(getActiveIcon(mode.getIconRes()))
.setLayoutId(R.layout.bottom_sheet_item_with_descr_and_switch_56dp)

View file

@ -26,15 +26,15 @@ import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadPoint;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelper.RouteSegmentSearchResult;
import net.osmand.plus.routing.RouteSegmentSearchResult;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.views.layers.ContextMenuLayer;
import net.osmand.router.RouteSegmentResult;
import net.osmand.router.RoutingConfiguration;
@ -150,7 +150,7 @@ public class AvoidSpecificRoads {
if (obj != null) {
String locale = app.getSettings().MAP_PREFERRED_LOCALE.get();
boolean transliterate = app.getSettings().MAP_TRANSLITERATE_NAMES.get();
String name = RoutingHelper.formatStreetName(
String name = RoutingHelperUtils.formatStreetName(
obj.getName(locale, transliterate),
obj.getRef(locale, transliterate, true),
obj.getDestinationName(locale, transliterate, true),
@ -164,10 +164,7 @@ public class AvoidSpecificRoads {
}
private void recalculateRoute() {
RoutingHelper rh = app.getRoutingHelper();
if (rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
rh.recalculateRouteDueToSettingsChange();
}
app.getRoutingHelper().onSettingsChanged();
}
public void removeImpassableRoad(LatLon latLon) {
@ -244,7 +241,7 @@ public class AvoidSpecificRoads {
RotatedTileBox tb = mapActivity.getMapView().getCurrentRotatedTileBox().copy();
float maxDistPx = MAX_AVOID_ROUTE_SEARCH_RADIUS_DP * tb.getDensity();
RouteSegmentSearchResult searchResult =
RoutingHelper.searchRouteSegment(loc.getLatitude(), loc.getLongitude(), maxDistPx / tb.getPixDensity(), roads);
RouteSegmentSearchResult.searchRouteSegment(loc.getLatitude(), loc.getLongitude(), maxDistPx / tb.getPixDensity(), roads);
if (searchResult != null) {
QuadPoint point = searchResult.getPoint();
LatLon newLoc = new LatLon(MapUtils.get31LatitudeY((int) point.y), MapUtils.get31LongitudeX((int) point.x));
@ -390,7 +387,14 @@ public class AvoidSpecificRoads {
if (avoidRoadInfo == null) {
avoidRoadInfo = new AvoidRoadInfo();
}
avoidRoadInfo.id = object != null ? object.id : 0;
if (object != null) {
avoidRoadInfo.id = object.id;
// avoidRoadInfo.direction = object.directionRoute(0, true);
avoidRoadInfo.direction = Double.NaN;
} else {
avoidRoadInfo.id = 0;
avoidRoadInfo.direction = Double.NaN;
}
avoidRoadInfo.latitude = lat;
avoidRoadInfo.longitude = lon;
avoidRoadInfo.appModeKey = appModeKey;
@ -400,6 +404,7 @@ public class AvoidSpecificRoads {
public static class AvoidRoadInfo {
public long id;
public double direction = Double.NaN;
public double latitude;
public double longitude;
public String name;

View file

@ -30,6 +30,7 @@ import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
@ -46,6 +47,7 @@ import net.osmand.plus.quickaction.QuickActionRegistry;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
import net.osmand.plus.routing.RouteDirectionInfo;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.search.listitems.QuickSearchListItem;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.track.SaveGpxAsyncTask;
@ -129,6 +131,7 @@ public class ExternalApiHelper {
public static final String PARAM_URI = "uri";
public static final String PARAM_DATA = "data";
public static final String PARAM_FORCE = "force";
public static final String PARAM_LOCATION_PERMISSION = "location_permission";
public static final String PARAM_START_NAME = "start_name";
public static final String PARAM_DEST_NAME = "dest_name";
@ -151,6 +154,9 @@ public class ExternalApiHelper {
public static final String PARAM_NT_DIRECTION_NAME = "turn_name";
public static final String PARAM_NT_DIRECTION_TURN = "turn_type";
public static final String PARAM_NT_DIRECTION_LANES = "turn_lanes";
public static final String PARAM_NT_DIRECTION_ANGLE = "turn_angle";
public static final String PARAM_NT_DIRECTION_POSSIBLY_LEFT = "turn_possibly_left";
public static final String PARAM_NT_DIRECTION_POSSIBLY_RIGHT = "turn_possibly_right";
public static final String PARAM_CLOSE_AFTER_COMMAND = "close_after_command";
@ -237,7 +243,8 @@ public class ExternalApiHelper {
if (gpx != null) {
if (navigate) {
boolean force = uri.getBooleanQueryParameter(PARAM_FORCE, false);
saveAndNavigateGpx(mapActivity, gpx, force);
boolean locationPermission = uri.getBooleanQueryParameter(PARAM_LOCATION_PERMISSION, false);
saveAndNavigateGpx(mapActivity, gpx, force, locationPermission);
} else {
app.getSelectedGpxHelper().setGpxFileToDisplay(gpx);
}
@ -289,6 +296,7 @@ public class ExternalApiHelper {
final PointDescription destDesc = new PointDescription(PointDescription.POINT_TYPE_LOCATION, destName);
boolean force = uri.getBooleanQueryParameter(PARAM_FORCE, false);
final boolean locationPermission = uri.getBooleanQueryParameter(PARAM_LOCATION_PERMISSION, false);
final RoutingHelper routingHelper = app.getRoutingHelper();
if (routingHelper.isFollowingMode() && !force) {
@ -297,12 +305,12 @@ public class ExternalApiHelper {
@Override
public void onDismiss(DialogInterface dialog) {
if (!routingHelper.isFollowingMode()) {
startNavigation(mapActivity, start, startDesc, dest, destDesc, profile);
startNavigation(mapActivity, start, startDesc, dest, destDesc, profile, locationPermission);
}
}
});
} else {
startNavigation(mapActivity, start, startDesc, dest, destDesc, profile);
startNavigation(mapActivity, start, startDesc, dest, destDesc, profile, locationPermission);
}
}
@ -348,6 +356,7 @@ public class ExternalApiHelper {
resultCode = RESULT_CODE_ERROR_SEARCH_LOCATION_UNDEFINED;
} else {
boolean force = uri.getBooleanQueryParameter(PARAM_FORCE, false);
final boolean locationPermission = uri.getBooleanQueryParameter(PARAM_LOCATION_PERMISSION, false);
final RoutingHelper routingHelper = app.getRoutingHelper();
if (routingHelper.isFollowingMode() && !force) {
@ -356,12 +365,12 @@ public class ExternalApiHelper {
@Override
public void onDismiss(DialogInterface dialog) {
if (!routingHelper.isFollowingMode()) {
searchAndNavigate(mapActivity, searchLocation, start, startDesc, profile, searchQuery, showSearchResults);
searchAndNavigate(mapActivity, searchLocation, start, startDesc, profile, searchQuery, showSearchResults, locationPermission);
}
}
});
} else {
searchAndNavigate(mapActivity, searchLocation, start, startDesc, profile, searchQuery, showSearchResults);
searchAndNavigate(mapActivity, searchLocation, start, startDesc, profile, searchQuery, showSearchResults, locationPermission);
}
resultCode = Activity.RESULT_OK;
}
@ -629,7 +638,8 @@ public class ExternalApiHelper {
return null;
}
public static void saveAndNavigateGpx(MapActivity mapActivity, final GPXFile gpxFile, final boolean force) {
public static void saveAndNavigateGpx(MapActivity mapActivity, final GPXFile gpxFile,
final boolean force, final boolean checkLocationPermission) {
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
if (Algorithms.isEmpty(gpxFile.path)) {
@ -670,12 +680,12 @@ public class ExternalApiHelper {
public void onDismiss(DialogInterface dialog) {
MapActivity mapActivity = mapActivityRef.get();
if (mapActivity != null && !routingHelper.isFollowingMode()) {
ExternalApiHelper.startNavigation(mapActivity, gpxFile);
ExternalApiHelper.startNavigation(mapActivity, gpxFile, checkLocationPermission);
}
}
});
} else {
startNavigation(mapActivity, gpxFile);
startNavigation(mapActivity, gpxFile, checkLocationPermission);
}
}
}
@ -688,8 +698,11 @@ public class ExternalApiHelper {
if (ni.directionInfo != null && ni.directionInfo.getTurnType() != null) {
TurnType tt = ni.directionInfo.getTurnType();
RouteDirectionInfo a = ni.directionInfo;
result.putExtra(prefix + PARAM_NT_DIRECTION_NAME, RoutingHelper.formatStreetName(a.getStreetName(), a.getRef(), a.getDestinationName(), ""));
result.putExtra(prefix + PARAM_NT_DIRECTION_NAME, RoutingHelperUtils.formatStreetName(a.getStreetName(), a.getRef(), a.getDestinationName(), ""));
result.putExtra(prefix + PARAM_NT_DIRECTION_TURN, tt.toXmlString());
result.putExtra(prefix + PARAM_NT_DIRECTION_ANGLE, tt.getTurnAngle());
result.putExtra(prefix + PARAM_NT_DIRECTION_POSSIBLY_LEFT, tt.isPossibleLeftTurn());
result.putExtra(prefix + PARAM_NT_DIRECTION_POSSIBLY_RIGHT, tt.isPossibleRightTurn());
if (tt.getLanes() != null) {
result.putExtra(prefix + PARAM_NT_DIRECTION_LANES, Arrays.toString(tt.getLanes()));
}
@ -705,23 +718,22 @@ public class ExternalApiHelper {
mapContextMenu.show(new LatLon(lat, lon), pointDescription, object);
}
static public void startNavigation(MapActivity mapActivity,
@NonNull GPXFile gpx) {
startNavigation(mapActivity, gpx, null, null, null, null, null);
static public void startNavigation(MapActivity mapActivity, @NonNull GPXFile gpx, boolean checkLocationPermission) {
startNavigation(mapActivity, gpx, null, null, null, null, null, checkLocationPermission);
}
static public void startNavigation(MapActivity mapActivity,
@Nullable LatLon from, @Nullable PointDescription fromDesc,
@Nullable LatLon to, @Nullable PointDescription toDesc,
@NonNull ApplicationMode mode) {
startNavigation(mapActivity, null, from, fromDesc, to, toDesc, mode);
@NonNull ApplicationMode mode, boolean checkLocationPermission) {
startNavigation(mapActivity, null, from, fromDesc, to, toDesc, mode, checkLocationPermission);
}
static private void startNavigation(MapActivity mapActivity,
GPXFile gpx,
LatLon from, PointDescription fromDesc,
LatLon to, PointDescription toDesc,
ApplicationMode mode) {
ApplicationMode mode, boolean checkLocationPermission) {
OsmandApplication app = mapActivity.getMyApplication();
RoutingHelper routingHelper = app.getRoutingHelper();
if (gpx == null) {
@ -745,12 +757,15 @@ public class ExternalApiHelper {
app.getRoutingHelper().notifyIfRouteIsCalculated();
routingHelper.setCurrentLocation(app.getLocationProvider().getLastKnownLocation(), false);
}
if (checkLocationPermission) {
OsmAndLocationProvider.requestFineLocationPermissionIfNeeded(mapActivity);
}
}
static public void searchAndNavigate(@NonNull MapActivity mapActivity, @NonNull final LatLon searchLocation,
@Nullable final LatLon from, @Nullable final PointDescription fromDesc,
@NonNull final ApplicationMode mode, @NonNull final String searchQuery,
final boolean showSearchResults) {
final boolean showSearchResults, final boolean checkLocationPermission) {
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
OsmandApplication app = mapActivity.getMyApplication();
@ -791,7 +806,7 @@ public class ExternalApiHelper {
LatLon to = new LatLon(res.getLatitude(), res.getLongitude());
PointDescription toDesc = new PointDescription(
PointDescription.POINT_TYPE_TARGET, res.getLocalName() + ", " + res.getLocalTypeName());
startNavigation(mapActivity, from, fromDesc, to, toDesc, mode);
startNavigation(mapActivity, from, fromDesc, to, toDesc, mode, checkLocationPermission);
} else {
mapActivity.getMyApplication().showToastMessage(mapActivity.getString(R.string.search_nothing_found));
}

View file

@ -39,9 +39,11 @@ import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
*/
public class WaypointDialogHelper {
private MapActivity mapActivity;
@ -263,6 +265,20 @@ public class WaypointDialogHelper {
}
}
public static void reverseAllPoints(OsmandApplication app, Activity ctx,
WaypointDialogHelper helper) {
TargetPointsHelper targets = app.getTargetPointsHelper();
if (!targets.getAllPoints().isEmpty()) {
List<TargetPoint> points = targets.getAllPoints();
Collections.reverse(points);
TargetPoint start = points.get(0);
targets.setStartPoint(start.point, false, start.getOriginalPointDescription());
points.remove(start);
targets.reorderAllTargetPoints(points, true);
updateControls(ctx, helper);
}
}
public static void updateControls(Activity ctx, WaypointDialogHelper helper) {
if (helper != null && helper.helperCallbacks != null) {
for (WaypointDialogHelperCallback callback : helper.helperCallbacks) {
@ -443,7 +459,8 @@ public class WaypointDialogHelper {
@Override
public void createMenuItems(Bundle savedInstanceState) {
items.add(new TitleItem(getString(R.string.shared_string_options)));
final OsmandApplication app = requiredMyApplication();
final TargetPointsHelper targetsHelper = app.getTargetPointsHelper();
BaseBottomSheetItem sortDoorToDoorItem = new SimpleBottomSheetItem.Builder()
.setIcon(getContentIcon(R.drawable.ic_action_sort_door_to_door))
.setTitle(getString(R.string.intermediate_items_sort_by_distance))
@ -491,6 +508,30 @@ public class WaypointDialogHelper {
.create();
items.add(reorderStartAndFinishItem);
BaseBottomSheetItem reorderAllItems = new SimpleBottomSheetItem.Builder()
.setIcon(getContentIcon(R.drawable.ic_action_sort_reverse_order))
.setTitle(getString(R.string.reverse_all_points))
.setLayoutId(R.layout.bottom_sheet_item_simple)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
WaypointDialogHelper.reverseAllPoints(
app,
mapActivity,
mapActivity.getDashboard().getWaypointDialogHelper()
);
}
dismiss();
}
})
.create();
int intermediateSize = targetsHelper.getIntermediatePoints().size();
if (intermediateSize > 2) {
items.add(reorderAllItems);
}
items.add(new DividerHalfItem(getContext()));
final BaseBottomSheetItem[] addWaypointItem = new BaseBottomSheetItem[1];

View file

@ -31,10 +31,7 @@ public class ImpassibleRoadsMenuController extends MenuController {
if (activity != null) {
app.getAvoidSpecificRoads().removeImpassableRoad(
ImpassibleRoadsMenuController.this.avoidRoadInfo);
RoutingHelper rh = app.getRoutingHelper();
if (rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
rh.recalculateRouteDueToSettingsChange();
}
app.getRoutingHelper().onSettingsChanged();
activity.getContextMenu().close();
}
}

View file

@ -137,7 +137,7 @@ public class RoutePreferencesMenu {
LocalRoutingParameter rp = group.getRoutingParameters().get(i);
rp.setSelected(settings, i == position);
}
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
mapActivity.getRoutingHelper().onSettingsChanged(true);
updateParameters();
}
}
@ -366,7 +366,7 @@ public class RoutePreferencesMenu {
app.getTargetPointsHelper().updateRouteAndRefresh(true);
updateSpinnerItems(gpxSpinner);
updateParameters();
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
mapActivity.getRoutingHelper().onSettingsChanged(true);
return true;
}
}, app.getDaynightHelper().isNightModeForMapControls());
@ -389,7 +389,7 @@ public class RoutePreferencesMenu {
if (mapActivity.getRoutingHelper().getCurrentGPXRoute() != null) {
mapActivity.getRoutingHelper().setGpxParams(null);
settings.FOLLOW_THE_GPX_ROUTE.set(null);
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
mapActivity.getRoutingHelper().onSettingsChanged(true);
}
updateParameters();
return true;

View file

@ -83,7 +83,7 @@ public class MapillaryPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.plugin_mapillary_descr);
}

View file

@ -4,6 +4,7 @@ import android.util.Pair;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.plus.routing.RouteCalculationProgressCallback;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.GPXUtilities.TrkSegment;
import net.osmand.GPXUtilities.WptPt;
@ -127,7 +128,7 @@ public class MarkersPlanRouteContext {
findPairsToCalculate(points);
RoutingHelper routingHelper = app.getRoutingHelper();
if (!snapToRoadPairsToCalculate.isEmpty() && !routingHelper.isRouteBeingCalculated()) {
routingHelper.startRouteCalculationThread(getParams(), true, true);
routingHelper.startRouteCalculationThread(getParams());
app.runInUIThread(new Runnable() {
@Override
public void run() {
@ -217,7 +218,7 @@ public class MarkersPlanRouteContext {
params.mode = snappedMode;
params.ctx = app;
params.calculationProgress = calculationProgress = new RouteCalculationProgress();
params.calculationProgressCallback = new RoutingHelper.RouteCalculationProgressCallback() {
params.calculationProgressCallback = new RouteCalculationProgressCallback() {
@Override
public void start() {
@ -265,7 +266,7 @@ public class MarkersPlanRouteContext {
}
});
if (!snapToRoadPairsToCalculate.isEmpty()) {
app.getRoutingHelper().startRouteCalculationThread(getParams(), true, true);
app.getRoutingHelper().startRouteCalculationThread(getParams());
} else {
app.runInUIThread(new Runnable() {
@Override

View file

@ -20,7 +20,7 @@ import net.osmand.plus.routing.RouteCalculationParams;
import net.osmand.plus.routing.RouteCalculationParams.RouteCalculationResultListener;
import net.osmand.plus.routing.RouteCalculationResult;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback;
import net.osmand.plus.routing.RouteCalculationProgressCallback;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.router.RouteCalculationProgress;
import net.osmand.router.RouteExporter;
@ -673,7 +673,7 @@ public class MeasurementEditingContext {
if (progressListener != null && !routingHelper.isRouteBeingCalculated()) {
RouteCalculationParams params = getParams(true);
if (params != null) {
routingHelper.startRouteCalculationThread(params, true, true);
routingHelper.startRouteCalculationThread(params);
application.runInUIThread(new Runnable() {
@Override
public void run() {
@ -1063,7 +1063,7 @@ public class MeasurementEditingContext {
progressListener.refresh();
RouteCalculationParams params = getParams(false);
if (params != null) {
application.getRoutingHelper().startRouteCalculationThread(params, true, true);
application.getRoutingHelper().startRouteCalculationThread(params);
} else {
progressListener.hideProgressBar();
}

View file

@ -70,13 +70,14 @@ import net.osmand.plus.measurementtool.command.MovePointCommand;
import net.osmand.plus.measurementtool.command.RemovePointCommand;
import net.osmand.plus.measurementtool.command.ReorderPointCommand;
import net.osmand.plus.measurementtool.command.ReversePointsCommand;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet.DialogMode;
import net.osmand.plus.measurementtool.command.SplitPointsCommand;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet.OnAppModeConfiguredCallback;
import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet.DialogMode;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.layers.MapControlsLayer;
import net.osmand.plus.views.layers.MapControlsLayer.MapControlsThemeInfoProvider;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarView;
@ -108,8 +109,8 @@ import static net.osmand.plus.measurementtool.command.ClearPointsCommand.ClearCo
public class MeasurementToolFragment extends BaseOsmAndFragment implements RouteBetweenPointsFragmentListener,
OptionsFragmentListener, GpxApproximationFragmentListener, SelectedPointFragmentListener,
SaveAsNewTrackFragmentListener, MapControlsLayer.MapControlsThemeInfoProvider,
RouteOptionsBottomSheet.OnAppModeConfiguredCallback{
SaveAsNewTrackFragmentListener, MapControlsThemeInfoProvider,
OnAppModeConfiguredCallback {
public static final String TAG = MeasurementToolFragment.class.getSimpleName();
public static final String TAPS_DISABLED_KEY = "taps_disabled_key";
@ -546,7 +547,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
if (savedInstanceState == null) {
if (fileName != null) {
addNewGpxData(getGpxFile(fileName));
} else if (editingCtx.isApproximationNeeded()) {
} else if (editingCtx.isApproximationNeeded() && isFollowTrackMode()) {
enterApproximationMode(mapActivity);
}
} else {
@ -929,7 +930,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
if (isFollowTrackMode()) {
mapActivity.getMapActions().setGPXRouteParams(gpx);
app.getTargetPointsHelper().updateRouteAndRefresh(true);
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
} else {
mapActivity.getMapActions().stopNavigationActionConfirm(null , new Runnable() {
@Override

View file

@ -117,7 +117,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.record_plugin_description);
}

View file

@ -17,6 +17,7 @@ import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationCompat.BigTextStyle;
import androidx.core.app.NotificationCompat.Builder;
import net.osmand.Location;
import net.osmand.plus.NavigationService;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
@ -77,7 +78,7 @@ public class NavigationNotification extends OsmandNotification {
RoutingHelper routingHelper = app.getRoutingHelper();
routingHelper.setRoutePlanningMode(false);
routingHelper.setFollowingMode(true);
routingHelper.setCurrentLocation(app.getLocationProvider().getLastKnownLocation(), false);
routingHelper.setCurrentLocation(getLastKnownLocation(), false);
}
}, new IntentFilter(OSMAND_RESUME_NAVIGATION_SERVICE_ACTION));
@ -136,10 +137,15 @@ public class NavigationNotification extends OsmandNotification {
if (service != null && (service.getUsedBy() & USED_BY_NAVIGATION) != 0) {
color = app.getResources().getColor(R.color.osmand_orange);
String distanceStr = OsmAndFormatter.getFormattedDistance(app.getRoutingHelper().getLeftDistance(), app);
String timeStr = OsmAndFormatter.getFormattedDuration(app.getRoutingHelper().getLeftTime(), app);
String distanceStr = OsmAndFormatter.getFormattedDistance(routingHelper.getLeftDistance(), app);
String timeStr = OsmAndFormatter.getFormattedDuration(routingHelper.getLeftTime(), app);
String etaStr = SimpleDateFormat.getTimeInstance(DateFormat.SHORT)
.format(new Date(System.currentTimeMillis() + app.getRoutingHelper().getLeftTime() * 1000));
.format(new Date(System.currentTimeMillis() + routingHelper.getLeftTime() * 1000));
String speedStr = null;
Location location = getLastKnownLocation();
if (location != null && location.hasSpeed()) {
speedStr = OsmAndFormatter.getFormattedSpeed(location.getSpeed(), app);
}
TurnType turnType = null;
boolean deviatedFromRoute;
@ -199,9 +205,12 @@ public class NavigationNotification extends OsmandNotification {
notificationText.append("\n");
}
}
notificationText.append(distanceStr).append("").append(timeStr).append("").append(etaStr);
notificationText.append(distanceStr)
.append("").append(timeStr)
.append("").append(etaStr);
if (speedStr != null) {
notificationText.append("").append(speedStr);
}
} else {
notificationTitle = app.getString(R.string.shared_string_navigation);
String error = routingHelper.getLastRouteCalcErrorShort();
@ -211,7 +220,6 @@ public class NavigationNotification extends OsmandNotification {
notificationText.append(error);
}
}
} else if (routingHelper.isRoutePlanningMode() && routingHelper.isPauseNavigation()) {
ongoing = false;
notificationTitle = app.getString(R.string.shared_string_navigation);
@ -266,6 +274,10 @@ public class NavigationNotification extends OsmandNotification {
}
}
private Location getLastKnownLocation() {
return app.getLocationProvider().getLastKnownLocation();
}
public Bitmap drawableToBitmap(Drawable drawable) {
int height = (int) app.getResources().getDimension(android.R.dimen.notification_large_icon_height);
int width = (int) app.getResources().getDimension(android.R.dimen.notification_large_icon_width);

View file

@ -42,7 +42,7 @@ public class NauticalMapsPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(net.osmand.plus.R.string.plugin_nautical_descr);
}

View file

@ -378,7 +378,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.osm_editing_plugin_description);
}

View file

@ -168,7 +168,7 @@ public class ParkingPositionPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.osmand_parking_plugin_description);
}

View file

@ -16,7 +16,6 @@ import net.osmand.PlatformUtil;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -105,7 +104,7 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
holder.menuIcon.setVisibility(View.VISIBLE);
final ApplicationMode item = (ApplicationMode) obj;
holder.title.setText(item.toHumanString());
holder.descr.setText(BaseSettingsFragment.getAppModeDescription(app, item));
holder.descr.setText(ProfileDataUtils.getAppModeDescription(app, item));
holder.initSwitcher = true;
holder.compoundButton.setChecked(selectedItems.contains(item));

View file

@ -31,7 +31,6 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
import net.osmand.plus.views.controls.ReorderItemTouchHelperCallback;
import java.util.ArrayList;
@ -241,7 +240,7 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
if (order == null) {
order = mode.getOrder();
}
profiles.add(new EditProfileDataObject(modeKey, mode.toHumanString(), BaseSettingsFragment.getAppModeDescription(getContext(), mode),
profiles.add(new EditProfileDataObject(modeKey, mode.toHumanString(), ProfileDataUtils.getAppModeDescription(getContext(), mode),
mode.getIconRes(), false, mode.isCustomProfile(), deleted, mode.getIconColorInfo(), order));
}
}

View file

@ -3,6 +3,7 @@ package net.osmand.plus.profiles;
import androidx.annotation.ColorRes;
import androidx.annotation.NonNull;
public class ProfileDataObject implements Comparable<ProfileDataObject> {
private String name;
@ -62,4 +63,5 @@ public class ProfileDataObject implements Comparable<ProfileDataObject> {
public int compareTo(@NonNull ProfileDataObject another) {
return this.name.compareToIgnoreCase(another.name);
}
}

View file

@ -0,0 +1,136 @@
package net.osmand.plus.profiles;
import android.content.Context;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.router.GeneralRouter;
import net.osmand.router.RoutingConfiguration;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ProfileDataUtils {
public static final String OSMAND_NAVIGATION = "osmand_navigation";
public static List<ProfileDataObject> getDataObjects(OsmandApplication app,
List<ApplicationMode> appModes) {
List<ProfileDataObject> profiles = new ArrayList<>();
for (ApplicationMode mode : appModes) {
String description = mode.getDescription();
if (Algorithms.isEmpty(description)) {
description = getAppModeDescription(app, mode);
}
profiles.add(new ProfileDataObject(mode.toHumanString(), description,
mode.getStringKey(), mode.getIconRes(), false, mode.getIconColorInfo()));
}
return profiles;
}
public static String getAppModeDescription(Context ctx, ApplicationMode mode) {
String description;
if (mode.isCustomProfile()) {
description = ctx.getString(R.string.profile_type_user_string);
} else {
description = ctx.getString(R.string.profile_type_osmand_string);
}
return description;
}
public static List<RoutingProfileDataObject> getSortedRoutingProfiles(OsmandApplication app) {
List<RoutingProfileDataObject> result = new ArrayList<>();
Map<String, List<RoutingProfileDataObject>> routingProfilesByFileNames = getRoutingProfilesByFileNames(app);
List<String> fileNames = new ArrayList<>(routingProfilesByFileNames.keySet());
Collections.sort(fileNames, new Comparator<String>() {
@Override
public int compare(String s, String t1) {
return s.equals(OSMAND_NAVIGATION) ? -1 : t1.equals(OSMAND_NAVIGATION) ? 1 : s.compareToIgnoreCase(t1);
}
});
for (String fileName : fileNames) {
List<RoutingProfileDataObject> routingProfilesFromFile = routingProfilesByFileNames.get(fileName);
if (routingProfilesFromFile != null) {
Collections.sort(routingProfilesFromFile);
result.addAll(routingProfilesFromFile);
}
}
return result;
}
public static Map<String, List<RoutingProfileDataObject>> getRoutingProfilesByFileNames(OsmandApplication app) {
Map<String, List<RoutingProfileDataObject>> result = new HashMap<>();
for (final RoutingProfileDataObject profile : getRoutingProfiles(app).values()) {
String fileName = profile.getFileName() != null ? profile.getFileName() : OSMAND_NAVIGATION;
if (result.containsKey(fileName)) {
result.get(fileName).add(profile);
} else {
result.put(fileName, new ArrayList<RoutingProfileDataObject>() {
{ add(profile); }
});
}
}
return result;
}
public static Map<String, RoutingProfileDataObject> getRoutingProfiles(OsmandApplication context) {
Map<String, RoutingProfileDataObject> profilesObjects = new HashMap<>();
profilesObjects.put(RoutingProfileDataObject.RoutingProfilesResources.STRAIGHT_LINE_MODE.name(), new RoutingProfileDataObject(
RoutingProfileDataObject.RoutingProfilesResources.STRAIGHT_LINE_MODE.name(),
context.getString(RoutingProfileDataObject.RoutingProfilesResources.STRAIGHT_LINE_MODE.getStringRes()),
context.getString(R.string.special_routing_type),
RoutingProfileDataObject.RoutingProfilesResources.STRAIGHT_LINE_MODE.getIconRes(),
false, null));
profilesObjects.put(RoutingProfileDataObject.RoutingProfilesResources.DIRECT_TO_MODE.name(), new RoutingProfileDataObject(
RoutingProfileDataObject.RoutingProfilesResources.DIRECT_TO_MODE.name(),
context.getString(RoutingProfileDataObject.RoutingProfilesResources.DIRECT_TO_MODE.getStringRes()),
context.getString(R.string.special_routing_type),
RoutingProfileDataObject.RoutingProfilesResources.DIRECT_TO_MODE.getIconRes(),
false, null));
if (context.getBRouterService() != null) {
profilesObjects.put(RoutingProfileDataObject.RoutingProfilesResources.BROUTER_MODE.name(), new RoutingProfileDataObject(
RoutingProfileDataObject.RoutingProfilesResources.BROUTER_MODE.name(),
context.getString(RoutingProfileDataObject.RoutingProfilesResources.BROUTER_MODE.getStringRes()),
context.getString(R.string.third_party_routing_type),
RoutingProfileDataObject.RoutingProfilesResources.BROUTER_MODE.getIconRes(),
false, null));
}
List<String> disabledRouterNames = OsmandPlugin.getDisabledRouterNames();
for (RoutingConfiguration.Builder builder : context.getAllRoutingConfigs()) {
collectRoutingProfilesFromConfig(context, builder, profilesObjects, disabledRouterNames);
}
return profilesObjects;
}
private static void collectRoutingProfilesFromConfig(OsmandApplication app, RoutingConfiguration.Builder builder,
Map<String, RoutingProfileDataObject> profilesObjects, List<String> disabledRouterNames) {
for (Map.Entry<String, GeneralRouter> entry : builder.getAllRouters().entrySet()) {
String routerKey = entry.getKey();
GeneralRouter router = entry.getValue();
if (!routerKey.equals("geocoding") && !disabledRouterNames.contains(router.getFilename())) {
int iconRes = R.drawable.ic_action_gdirections_dark;
String name = router.getProfileName();
String description = app.getString(R.string.osmand_default_routing);
String fileName = router.getFilename();
if (!Algorithms.isEmpty(fileName)) {
description = fileName;
} else if (RoutingProfileDataObject.RoutingProfilesResources.isRpValue(name.toUpperCase())) {
iconRes = RoutingProfileDataObject.RoutingProfilesResources.valueOf(name.toUpperCase()).getIconRes();
name = app.getString(RoutingProfileDataObject.RoutingProfilesResources.valueOf(name.toUpperCase()).getStringRes());
}
profilesObjects.put(routerKey, new RoutingProfileDataObject(routerKey, name, description,
iconRes, false, fileName));
}
}
}
}

View file

@ -59,4 +59,5 @@ public class RoutingProfileDataObject extends ProfileDataObject {
return rpValues.contains(value);
}
}
}

View file

@ -19,7 +19,7 @@ import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
import net.osmand.plus.settings.fragments.NavigationFragment;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
import java.util.ArrayList;
@ -54,7 +54,8 @@ public class SelectMultipleProfilesBottomSheet extends BasePreferenceBottomSheet
private void refreshProfiles(OsmandApplication app) {
profiles.clear();
profiles.addAll(NavigationFragment.getBaseProfiles(app, true));
List<ApplicationMode> appModes = ApplicationMode.allPossibleValues();
profiles.addAll(ProfileDataUtils.getDataObjects(app, appModes));
for (ProfileDataObject profile : profiles) {
String key = profile.getStringKey();
profile.setSelected(selectedProfiles.contains(key));

View file

@ -2,8 +2,12 @@ package net.osmand.plus.profiles;
import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@ -15,6 +19,8 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
@ -28,10 +34,10 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.SimpleDividerItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
import net.osmand.plus.settings.fragments.MainSettingsFragment;
import net.osmand.plus.settings.fragments.NavigationFragment;
import net.osmand.plus.settings.fragments.ProfileAppearanceFragment;
import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
import net.osmand.router.RoutingConfiguration;
@ -42,35 +48,36 @@ import java.util.List;
import static net.osmand.plus.importfiles.ImportHelper.ImportType.ROUTING;
public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottomSheet {
public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
private static final Log LOG = PlatformUtil
.getLog(SelectProfileBottomSheetDialogFragment.class);
public static final String TAG = "SelectProfileBottomSheetDialogFragment";
private static final Log LOG = PlatformUtil.getLog(SelectProfileBottomSheet.class);
public static final String TAG = "SelectProfileBottomSheet";
public final static String DIALOG_TYPE = "dialog_type";
public final static String TYPE_BASE_APP_PROFILE = "base_profiles";
public final static String TYPE_NAV_PROFILE = "routing_profiles";
public final static String SELECTED_KEY = "selected_base";
public final static String PROFILE_KEY_ARG = "profile_key_arg";
public final static String USE_LAST_PROFILE_ARG = "use_last_profile_arg";
public final static String IS_PROFILE_IMPORTED_ARG = "is_profile_imported_arg";
String type;
private SelectProfileListener listener;
private DialogMode dialogMode;
private final List<ProfileDataObject> profiles = new ArrayList<>();
private String selectedItemKey;
public enum DialogMode {
BASE_PROFILE,
NAVIGATION_PROFILE,
DEFAULT_PROFILE
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OsmandApplication app = getMyApplication();
Bundle args = getArguments();
if (args != null && args.get(DIALOG_TYPE) != null) {
type = args.getString(DIALOG_TYPE);
String dialogModeName = args.getString(DIALOG_TYPE);
dialogMode = DialogMode.valueOf(dialogModeName);
selectedItemKey = args.getString(SELECTED_KEY, null);
refreshProfiles(app);
}
@ -96,7 +103,7 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
int space = (int) getResources().getDimension(R.dimen.empty_state_text_button_padding_top);
bottomSpaceView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, space));
if (type.equals(TYPE_BASE_APP_PROFILE)) {
if (dialogMode == DialogMode.BASE_PROFILE) {
items.add(new TitleItem(getString(R.string.select_base_profile_dialog_title)));
items.add(new LongDescriptionItem(getString(R.string.select_base_profile_dialog_message)));
for (int i = 0; i < profiles.size(); i++) {
@ -138,7 +145,7 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
.setCustomView(bottomSpaceView)
.create());*/
} else if (type.equals(TYPE_NAV_PROFILE)) {
} else if (dialogMode == DialogMode.NAVIGATION_PROFILE) {
items.add(new TitleItem(getString(R.string.select_nav_profile_dialog_title)));
items.add(new LongDescriptionItem(getString(R.string.select_nav_profile_dialog_message)));
for (int i = 0; i < profiles.size(); i++) {
@ -175,10 +182,39 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
items.add(new BaseBottomSheetItem.Builder()
.setCustomView(bottomSpaceView)
.create());
} else if (dialogMode == DialogMode.DEFAULT_PROFILE) {
items.add(new TitleItem(getString(R.string.settings_preset)));
items.add(new LongDescriptionItem(getString(R.string.profile_by_default_description)));
boolean useLastAppModeByDefault = app.getSettings().USE_LAST_APPLICATION_MODE_BY_DEFAULT.get();
addCheckableItem(R.string.shared_string_last_used, useLastAppModeByDefault, new OnClickListener() {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
args.putBoolean(USE_LAST_PROFILE_ARG, true);
Fragment target = getTargetFragment();
if (target instanceof OnSelectProfileCallback) {
((OnSelectProfileCallback) target).onProfileSelected(args);
}
dismiss();
}
});
items.add(new SimpleDividerItem(app));
for (int i = 0; i < profiles.size(); i++) {
ProfileDataObject profile = profiles.get(i);
addProfileItem(profile, false, !useLastAppModeByDefault);
}
}
}
private void addProfileItem(final ProfileDataObject profile, boolean showBottomDivider) {
addProfileItem(profile, showBottomDivider, true);
}
private void addProfileItem(final ProfileDataObject profile,
boolean showBottomDivider,
boolean setupSelected) {
OsmandApplication app = requiredMyApplication();
int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
@ -194,12 +230,12 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
tvTitle.setText(profile.getName());
tvDescription.setText(profile.getDescription());
boolean isSelected = profile.getStringKey().equals(selectedItemKey);
boolean isSelected = setupSelected && profile.getStringKey().equals(selectedItemKey);
int iconColor;
if (type.equals(TYPE_BASE_APP_PROFILE)) {
iconColor = profile.getIconColor(nightMode);
} else {
if (dialogMode == DialogMode.NAVIGATION_PROFILE) {
iconColor = isSelected ? activeColorResId : iconDefaultColorResId;
} else {
iconColor = profile.getIconColor(nightMode);
}
Drawable drawableIcon = app.getUIUtilities().getIcon(profile.getIconRes(), iconColor);
@ -213,18 +249,46 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (listener == null) {
getListener();
}
Bundle args = new Bundle();
args.putString(PROFILE_KEY_ARG, profile.getStringKey());
listener.onSelectedType(args);
Fragment target = getTargetFragment();
if (target instanceof OnSelectProfileCallback) {
((OnSelectProfileCallback) target).onProfileSelected(args);
}
dismiss();
}
})
.create());
}
private void addCheckableItem(int titleId,
boolean isSelected,
OnClickListener listener) {
OsmandApplication app = requiredMyApplication();
View itemView = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.bottom_sheet_item_with_descr_and_radio_btn, null);
itemView.findViewById(R.id.icon).setVisibility(View.GONE);
itemView.findViewById(R.id.description).setVisibility(View.GONE);
itemView.findViewById(R.id.divider_bottom).setVisibility(View.GONE);
Typeface typeface = FontCache.getRobotoMedium(app);
String title = getString(titleId);
SpannableString spannable = UiUtilities.createCustomFontSpannable(typeface, title, title, title);
int activeColor = ContextCompat.getColor(app, getActiveColorId());
ForegroundColorSpan colorSpan = new ForegroundColorSpan(activeColor);
spannable.setSpan(colorSpan, 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
((TextView) itemView.findViewById(R.id.title)).setText(spannable);
CompoundButton compoundButton = itemView.findViewById(R.id.compound_button);
compoundButton.setChecked(isSelected);
UiUtilities.setupCompoundButton(compoundButton, nightMode, UiUtilities.CompoundButtonType.GLOBAL);
items.add(new BaseBottomSheetItem.Builder()
.setCustomView(itemView)
.setOnClickListener(listener)
.create());
}
private void addButtonItem(int titleId, int iconId, OnClickListener listener) {
OsmandApplication app = requiredMyApplication();
Context themedCtx = UiUtilities.getThemedContext(app, nightMode);
@ -233,7 +297,7 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
View buttonView = View.inflate(themedCtx, R.layout.bottom_sheet_item_preference_btn, null);
TextView tvTitle = buttonView.findViewById(R.id.title);
tvTitle.setText(app.getString(titleId));
tvTitle.setText(getString(titleId));
ImageView ivIcon = buttonView.findViewById(R.id.icon);
ivIcon.setImageDrawable(app.getUIUtilities().getIcon(iconId, activeColorResId));
@ -244,18 +308,6 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
.create());
}
private void refreshProfiles(OsmandApplication app) {
profiles.clear();
if (type.equals(TYPE_NAV_PROFILE)) {
profiles.addAll(NavigationFragment.getSortedRoutingProfiles(app));
} else if (type.equals(TYPE_BASE_APP_PROFILE)) {
profiles.addAll(NavigationFragment.getBaseProfiles(app));
} else {
LOG.error("Check data type!");
dismiss();
}
}
private void refreshView() {
Activity activity = getActivity();
View mainView = getView();
@ -275,26 +327,23 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
}
}
private void getListener() {
FragmentActivity activity = getActivity();
if (activity != null) {
FragmentManager fragmentManager = activity.getSupportFragmentManager();
NavigationFragment navigationFragment = (NavigationFragment) fragmentManager.findFragmentByTag(NavigationFragment.class.getName());
ProfileAppearanceFragment profileAppearanceFragment = (ProfileAppearanceFragment) fragmentManager.findFragmentByTag(ProfileAppearanceFragment.TAG);
MainSettingsFragment mainSettingsFragment = (MainSettingsFragment) fragmentManager.findFragmentByTag(MainSettingsFragment.TAG);
private void refreshProfiles(OsmandApplication app) {
profiles.clear();
switch (dialogMode) {
case BASE_PROFILE:
List<ApplicationMode> appModes = new ArrayList<>(ApplicationMode.allPossibleValues());
appModes.remove(ApplicationMode.DEFAULT);
profiles.addAll(ProfileDataUtils.getDataObjects(app, appModes));
break;
if (navigationFragment != null) {
listener = navigationFragment.getNavProfileListener();
} else if (profileAppearanceFragment != null) {
listener = profileAppearanceFragment.getParentProfileListener();
} else if (mainSettingsFragment != null) {
listener = mainSettingsFragment.getParentProfileListener();
}
}
}
case NAVIGATION_PROFILE:
profiles.addAll(ProfileDataUtils.getSortedRoutingProfiles(app));
break;
public interface SelectProfileListener {
void onSelectedType(Bundle args);
case DEFAULT_PROFILE:
profiles.addAll(ProfileDataUtils.getDataObjects(app, ApplicationMode.values(app)));
break;
}
}
@Nullable
@ -305,4 +354,23 @@ public class SelectProfileBottomSheetDialogFragment extends BasePreferenceBottom
}
return null;
}
public static void showInstance(@NonNull FragmentActivity activity,
@NonNull DialogMode dialogMode,
@Nullable Fragment target,
String selectedItemKey,
boolean usedOnMap) {
SelectProfileBottomSheet fragment = new SelectProfileBottomSheet();
Bundle args = new Bundle();
args.putString(DIALOG_TYPE, dialogMode.name());
args.putString(SELECTED_KEY, selectedItemKey);
fragment.setArguments(args);
fragment.setUsedOnMap(usedOnMap);
fragment.setTargetFragment(target, 0);
fragment.show(activity.getSupportFragmentManager(), TAG);
}
public interface OnSelectProfileCallback {
void onProfileSelected(Bundle args);
}
}

View file

@ -19,7 +19,6 @@ import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -99,7 +98,7 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
holder.menuIcon.setVisibility(View.GONE);
final ApplicationMode item = (ApplicationMode) obj;
holder.title.setText(item.toHumanString());
holder.descr.setText(BaseSettingsFragment.getAppModeDescription(app, item));
holder.descr.setText(ProfileDataUtils.getAppModeDescription(app, item));
int profileColorResId = item.getIconColorInfo().getColor(nightMode);
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(profileColorResId, selectedIconColorRes));

View file

@ -89,7 +89,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
}
@Override
public String getDescription() {
public CharSequence getDescription() {
return app.getString(R.string.osmand_rastermaps_plugin_description);
}

View file

@ -301,7 +301,7 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
avoidSpecificRoads.removeImpassableRoad(routeLocation);
}
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
final MapRouteInfoMenu mapRouteInfoMenu = mapActivity.getMapRouteInfoMenu();

View file

@ -521,7 +521,7 @@ public class FollowTrackFragment extends ContextMenuScrollFragment implements Ca
}
mapActivity.getMapActions().setGPXRouteParams(gpxFile);
app.getTargetPointsHelper().updateRouteAndRefresh(true);
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
}
}

View file

@ -51,12 +51,8 @@ import net.osmand.plus.GeocodingLookupService;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.GeocodingLookupService.OnAddressLookupResult;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.backend.CommonPreference;
import net.osmand.plus.settings.backend.OsmandPreference;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
@ -70,6 +66,7 @@ import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenuFragment;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkerSelectionFragment;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.profiles.AppModesBottomSheetDialogFragment;
@ -101,9 +98,16 @@ import net.osmand.plus.routing.IRouteInformationListener;
import net.osmand.plus.routing.RouteCalculationResult;
import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.routing.TransportRoutingHelper;
import net.osmand.plus.search.QuickSearchHelper;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.CommonPreference;
import net.osmand.plus.settings.backend.OsmandPreference;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.OsmandMapLayer;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
import net.osmand.plus.widgets.TextViewExProgress;
import net.osmand.router.GeneralRouter;
import net.osmand.router.GeneralRouter.RoutingParameter;
@ -281,7 +285,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
if (selectFromMapTouch) {
selectFromMapTouch = false;
LatLon latLon = tileBox.getLatLonFromPixel(point.x, point.y);
choosePointTypeAction(mapActivity, latLon, selectFromMapPointType, null, null);
LatLon objectLatLon = getObjectLocation(mapActivity.getMapView(), point, tileBox);
LatLon selectedPoint = objectLatLon != null ? objectLatLon : latLon;
choosePointTypeAction(mapActivity, selectedPoint, selectFromMapPointType, null, null);
if (selectFromMapWaypoints) {
WaypointsFragment.showInstance(mapActivity.getSupportFragmentManager(), true);
} else {
@ -293,6 +299,24 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
return false;
}
private LatLon getObjectLocation(OsmandMapTileView mapView, PointF point, RotatedTileBox tileBox) {
LatLon latLon = null;
List<Object> objects = new ArrayList<>();
for (OsmandMapLayer layer : mapView.getLayers()) {
if (layer instanceof IContextMenuProvider) {
objects.clear();
IContextMenuProvider provider = (IContextMenuProvider) layer;
provider.collectObjectsFromPoint(point, tileBox, objects, true);
for (Object o : objects) {
if (provider.isObjectClickable(o)) {
latLon = provider.getObjectLocation(o);
}
}
}
}
return latLon;
}
private void choosePointTypeAction(MapActivity mapActivity, LatLon latLon, PointType pointType, PointDescription pd, String address) {
OsmandApplication app = getApp();
FavouritesDbHelper favorites = app.getFavorites();
@ -862,7 +886,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
}
routingHelper.setAppMode(next);
app.initVoiceCommandPlayer(mapActivity, next, true, null, false, false, true);
routingHelper.recalculateRouteDueToSettingsChange();
routingHelper.onSettingsChanged(true);
}
}
@ -1279,7 +1303,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
if (mapActivity != null) {
OsmandApplication app = mapActivity.getMyApplication();
app.getAvoidSpecificRoads().removeImpassableRoad(avoidRoadInfo);
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
if (app.getAvoidSpecificRoads().getImpassableRoads().isEmpty() && getAvoidedParameters(app).isEmpty()) {
mode.parameters.remove(parameter);
}
@ -1312,7 +1336,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
CommonPreference<Boolean> preference = settings.getCustomRoutingBooleanProperty(routingParameter.getId(), routingParameter.getDefaultBoolean());
preference.setModeValue(app.getRoutingHelper().getAppMode(), false);
avoidedParameters.remove(routingParameter);
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
if (app.getAvoidSpecificRoads().getImpassableRoads().isEmpty() && avoidedParameters.isEmpty()) {
mode.parameters.remove(parameter);
}
@ -2411,7 +2435,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
}
} else if (routingHelper.isRouteCalculated()) {
RouteCalculationResult result = routingHelper.getRoute();
QuadRect routeRect = routingHelper.getRouteRect(result);
QuadRect routeRect = RoutingHelperUtils.getRouteRect(app, result);
if (routeRect != null) {
rect = routeRect;
}

View file

@ -101,7 +101,8 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
DIRECTIONS(),
PLAN_ROUTE(MuteSoundRoutingParameter.class,
RouteSimulationItem.class,
GpxLocalRoutingParameter.class);
GpxLocalRoutingParameter.class,
ShowAlongTheRouteItem.class);
private final Class<? extends LocalRoutingParameter>[] excludeParameters;
@ -399,7 +400,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
boolean enabled = !settings.ENABLE_TIME_CONDITIONAL_ROUTING.getModeValue(applicationMode);
settings.ENABLE_TIME_CONDITIONAL_ROUTING.setModeValue(applicationMode, enabled);
timeConditionalRoutingItem[0].setChecked(enabled);
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
}
})
.create();

View file

@ -230,7 +230,7 @@ public class RoutingOptionsHelper {
if (rp instanceof OtherLocalRoutingParameter) {
updateGpxRoutingParameter((OtherLocalRoutingParameter) rp);
}
routingHelper.recalculateRouteDueToSettingsChange();
routingHelper.onSettingsChanged(true);
}
public void updateGpxRoutingParameter(OtherLocalRoutingParameter gpxParam) {
@ -377,7 +377,7 @@ public class RoutingOptionsHelper {
LocalRoutingParameter rp = group.getRoutingParameters().get(i);
rp.setSelected(settings, i == position);
}
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
mapActivity.getRoutingHelper().onSettingsChanged(true);
if (listener != null) {
listener.onClick();
}

View file

@ -108,7 +108,7 @@ public class MapMarkersCard extends BaseCard {
public void onClick(View v) {
LatLon point = new LatLon(marker.getLatitude(), marker.getLongitude());
app.getTargetPointsHelper().navigateToPoint(point, true, -1, marker.getPointDescription(mapActivity));
app.getRoutingHelper().recalculateRouteDueToSettingsChange();
app.getRoutingHelper().onSettingsChanged(true);
}
});
if (i > 0) {

View file

@ -0,0 +1,87 @@
package net.osmand.plus.routing;
import androidx.annotation.NonNull;
import net.osmand.Location;
import net.osmand.binary.RouteDataObject;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.router.RouteSegmentResult;
import net.osmand.router.TurnType;
import net.osmand.util.Algorithms;
public class CurrentStreetName {
public String text;
public TurnType turnType;
public boolean showMarker; // turn type has priority over showMarker
public RouteDataObject shieldObject;
public String exitRef;
@NonNull
private static String getRouteSegmentStreetName(@NonNull RoutingHelper routingHelper, @NonNull RouteSegmentResult rs, boolean includeRef) {
OsmandSettings settings = routingHelper.getSettings();
String nm = rs.getObject().getName(settings.MAP_PREFERRED_LOCALE.get(), settings.MAP_TRANSLITERATE_NAMES.get());
String rf = rs.getObject().getRef(settings.MAP_PREFERRED_LOCALE.get(), settings.MAP_TRANSLITERATE_NAMES.get(), rs.isForwardDirection());
String dn = rs.getObject().getDestinationName(settings.MAP_PREFERRED_LOCALE.get(),
settings.MAP_TRANSLITERATE_NAMES.get(), rs.isForwardDirection());
return RoutingHelperUtils.formatStreetName(nm, includeRef ? rf : null, dn, "»");
}
@NonNull
public static CurrentStreetName getCurrentName(@NonNull RoutingHelper routingHelper, @NonNull NextDirectionInfo n) {
CurrentStreetName streetName = new CurrentStreetName();
Location l = routingHelper.getLastFixedLocation();
float speed = 0;
if (l != null && l.hasSpeed()) {
speed = l.getSpeed();
}
boolean isSet = false;
// 1. turn is imminent
if (n.distanceTo > 0 && n.directionInfo != null && !n.directionInfo.getTurnType().isSkipToSpeak() &&
routingHelper.getVoiceRouter().isDistanceLess(speed, n.distanceTo, routingHelper.getVoiceRouter().PREPARE_DISTANCE * 0.75f)) {
String nm = n.directionInfo.getStreetName();
String rf = n.directionInfo.getRef();
String dn = n.directionInfo.getDestinationName();
isSet = !(Algorithms.isEmpty(nm) && Algorithms.isEmpty(rf) && Algorithms.isEmpty(dn));
streetName.text = RoutingHelperUtils.formatStreetName(nm, null, dn, "»");
streetName.turnType = n.directionInfo.getTurnType();
streetName.shieldObject = n.directionInfo.getRouteDataObject();
if (streetName.turnType == null) {
streetName.turnType = TurnType.valueOf(TurnType.C, false);
}
if (n.directionInfo.getExitInfo() != null) {
streetName.exitRef = n.directionInfo.getExitInfo().getRef();
if (!Algorithms.isEmpty(n.directionInfo.getExitInfo().getExitStreetName())) {
streetName.text = n.directionInfo.getExitInfo().getExitStreetName();
}
}
}
// 2. display current road street name
if (!isSet) {
RouteSegmentResult rs = routingHelper.getCurrentSegmentResult();
if (rs != null) {
streetName.text = getRouteSegmentStreetName(routingHelper, rs, false);
if (Algorithms.isEmpty(streetName.text)) {
isSet = !Algorithms.isEmpty(getRouteSegmentStreetName(routingHelper, rs, true));
} else {
isSet = true;
}
streetName.showMarker = true;
streetName.shieldObject = rs.getObject();
}
}
// 3. display next road street name if this one empty
if (!isSet) {
RouteSegmentResult rs = routingHelper.getNextStreetSegmentResult();
if (rs != null) {
streetName.text = getRouteSegmentStreetName(routingHelper, rs, false);
streetName.turnType = TurnType.valueOf(TurnType.C, false);
streetName.shieldObject = rs.getObject();
}
}
if (streetName.turnType == null) {
streetName.showMarker = true;
}
return streetName;
}
}

View file

@ -5,7 +5,6 @@ import net.osmand.data.LatLon;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback;
import net.osmand.router.RouteCalculationProgress;
import java.util.List;

View file

@ -0,0 +1,12 @@
package net.osmand.plus.routing;
public interface RouteCalculationProgressCallback {
void start();
void updateProgress(int progress);
void requestPrivateAccessRouting();
void finish();
}

View file

@ -435,7 +435,7 @@ public class RouteCalculationResult {
}
}
String description = toString(turn, ctx, false) + " " + RoutingHelper.formatStreetName(info.getStreetName(),
String description = toString(turn, ctx, false) + " " + RoutingHelperUtils.formatStreetName(info.getStreetName(),
info.getRef(), info.getDestinationName(), ctx.getString(R.string.towards));
description = description.trim();
String[] pointNames = s.getObject().getPointNames(s.getStartPointIndex());

View file

@ -0,0 +1,406 @@
package net.osmand.plus.routing;
import androidx.annotation.NonNull;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.router.RouteCalculationProgress;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static net.osmand.plus.notifications.OsmandNotification.NotificationType.NAVIGATION;
class RouteRecalculationHelper {
private static final int RECALCULATE_THRESHOLD_COUNT_CAUSING_FULL_RECALCULATE = 3;
private static final int RECALCULATE_THRESHOLD_CAUSING_FULL_RECALCULATE_INTERVAL = 2 * 60 * 1000;
private final OsmandApplication app;
private final RoutingHelper routingHelper;
private final ExecutorService executor = new RouteRecalculationExecutor();
private final Map<Future<?>, RouteRecalculationTask> tasksMap = new LinkedHashMap<>();
private RouteRecalculationTask lastTask;
private long lastTimeEvaluatedRoute = 0;
private String lastRouteCalcError;
private String lastRouteCalcErrorShort;
private long recalculateCountInInterval = 0;
private int evalWaitInterval = 0;
private RouteCalculationProgressCallback progressRoute;
RouteRecalculationHelper(@NonNull RoutingHelper routingHelper) {
this.routingHelper = routingHelper;
this.app = routingHelper.getApplication();
}
String getLastRouteCalcError() {
return lastRouteCalcError;
}
String getLastRouteCalcErrorShort() {
return lastRouteCalcErrorShort;
}
void setProgressBar(RouteCalculationProgressCallback progressRoute) {
this.progressRoute = progressRoute;
}
boolean isRouteBeingCalculated() {
synchronized (routingHelper) {
for (Future<?> future : tasksMap.keySet()) {
if (!future.isDone()) {
return true;
}
}
}
return false;
}
void resetEvalWaitInterval() {
evalWaitInterval = 0;
}
void stopCalculation() {
synchronized (routingHelper) {
for (Entry<Future<?>, RouteRecalculationTask> taskFuture : tasksMap.entrySet()) {
taskFuture.getValue().stopCalculation();
taskFuture.getKey().cancel(false);
}
}
}
void stopCalculationIfParamsNotChanged() {
synchronized (routingHelper) {
boolean hasPendingTasks = tasksMap.isEmpty();
for (Entry<Future<?>, RouteRecalculationTask> taskFuture : tasksMap.entrySet()) {
RouteRecalculationTask task = taskFuture.getValue();
if (!task.isParamsChanged()) {
taskFuture.getKey().cancel(false);
task.stopCalculation();
}
}
if (hasPendingTasks) {
if (isFollowingMode()) {
getVoiceRouter().announceBackOnRoute();
}
}
}
}
private OsmandSettings getSettings() {
return routingHelper.getSettings();
}
private ApplicationMode getAppMode() {
return routingHelper.getAppMode();
}
private boolean isFollowingMode() {
return routingHelper.isFollowingMode();
}
private VoiceRouter getVoiceRouter() {
return routingHelper.getVoiceRouter();
}
private Location getLastFixedLocation() {
return routingHelper.getLastFixedLocation();
}
private boolean isDeviatedFromRoute() {
return routingHelper.isDeviatedFromRoute();
}
private Location getLastProjection() {
return routingHelper.getLastProjection();
}
private void setNewRoute(RouteCalculationResult prevRoute, final RouteCalculationResult res, Location start) {
final boolean newRoute = !prevRoute.isCalculated();
if (isFollowingMode()) {
Location lastFixedLocation = getLastFixedLocation();
if (lastFixedLocation != null) {
start = lastFixedLocation;
}
// try remove false route-recalculated prompts by checking direction to second route node
boolean wrongMovementDirection = false;
List<Location> routeNodes = res.getImmutableAllLocations();
if (routeNodes != null && !routeNodes.isEmpty()) {
int newCurrentRoute = RoutingHelperUtils.lookAheadFindMinOrthogonalDistance(start, routeNodes, res.currentRoute, 15);
if (newCurrentRoute + 1 < routeNodes.size()) {
// This check is valid for Online/GPX services (offline routing is aware of route direction)
wrongMovementDirection = RoutingHelperUtils.checkWrongMovementDirection(start, routeNodes.get(newCurrentRoute + 1));
// set/reset evalWaitInterval only if new route is in forward direction
if (wrongMovementDirection) {
evalWaitInterval = 3000;
} else {
evalWaitInterval = Math.max(3000, evalWaitInterval * 3 / 2);
evalWaitInterval = Math.min(evalWaitInterval, 120000);
}
}
}
// trigger voice prompt only if new route is in forward direction
// If route is in wrong direction after one more setLocation it will be recalculated
if (!wrongMovementDirection || newRoute) {
getVoiceRouter().newRouteIsCalculated(newRoute);
}
}
app.getWaypointHelper().setNewRoute(res);
routingHelper.newRouteCalculated(newRoute, res);
}
void startRouteCalculationThread(RouteCalculationParams params, boolean paramsChanged, boolean updateProgress) {
synchronized (routingHelper) {
getSettings().LAST_ROUTE_APPLICATION_MODE.set(getAppMode());
RouteRecalculationTask newTask = new RouteRecalculationTask(this, params, paramsChanged);
lastTask = newTask;
startProgress(params);
if (updateProgress) {
updateProgress(params);
}
Future<?> future = executor.submit(newTask);
tasksMap.put(future, newTask);
}
}
public void recalculateRouteInBackground(final Location start, final LatLon end, final List<LatLon> intermediates,
final RouteProvider.GPXRouteParamsBuilder gpxRoute, final RouteCalculationResult previousRoute, boolean paramsChanged, boolean onlyStartPointChanged) {
if (start == null || end == null) {
return;
}
// do not evaluate very often
if ((!isRouteBeingCalculated() && System.currentTimeMillis() - lastTimeEvaluatedRoute > evalWaitInterval)
|| paramsChanged || !onlyStartPointChanged) {
if (System.currentTimeMillis() - lastTimeEvaluatedRoute < RECALCULATE_THRESHOLD_CAUSING_FULL_RECALCULATE_INTERVAL) {
recalculateCountInInterval++;
}
ApplicationMode mode = getAppMode();
final RouteCalculationParams params = new RouteCalculationParams();
params.start = start;
params.end = end;
params.intermediates = intermediates;
params.gpxRoute = gpxRoute == null ? null : gpxRoute.build(app);
params.onlyStartPointChanged = onlyStartPointChanged;
if (recalculateCountInInterval < RECALCULATE_THRESHOLD_COUNT_CAUSING_FULL_RECALCULATE
|| (gpxRoute != null && gpxRoute.isPassWholeRoute() && isDeviatedFromRoute())) {
params.previousToRecalculate = previousRoute;
} else {
recalculateCountInInterval = 0;
}
params.leftSide = getSettings().DRIVING_REGION.get().leftHandDriving;
params.fast = getSettings().FAST_ROUTE_MODE.getModeValue(mode);
params.mode = mode;
params.ctx = app;
boolean updateProgress = false;
if (params.mode.getRouteService() == RouteProvider.RouteService.OSMAND) {
params.calculationProgress = new RouteCalculationProgress();
updateProgress = true;
} else {
params.resultListener = new RouteCalculationParams.RouteCalculationResultListener() {
@Override
public void onRouteCalculated(RouteCalculationResult route) {
app.runInUIThread(new Runnable() {
@Override
public void run() {
finishProgress(params);
}
});
}
};
}
if (getLastProjection() != null) {
params.currentLocation = getLastFixedLocation();
}
startRouteCalculationThread(params, paramsChanged, updateProgress);
}
}
void startProgress(final RouteCalculationParams params) {
if (params.calculationProgressCallback != null) {
params.calculationProgressCallback.start();
} else if (progressRoute != null) {
progressRoute.start();
}
}
void updateProgress(final RouteCalculationParams params) {
final RouteCalculationProgressCallback progressRoute;
if (params.calculationProgressCallback != null) {
progressRoute = params.calculationProgressCallback;
} else {
progressRoute = this.progressRoute;
}
if (progressRoute != null) {
app.runInUIThread(new Runnable() {
@Override
public void run() {
RouteCalculationProgress calculationProgress = params.calculationProgress;
if (isRouteBeingCalculated()) {
if (lastTask != null && lastTask.params == params) {
progressRoute.updateProgress((int) calculationProgress.getLinearProgress());
if (calculationProgress.requestPrivateAccessRouting) {
progressRoute.requestPrivateAccessRouting();
}
updateProgress(params);
}
} else {
if (calculationProgress.requestPrivateAccessRouting) {
progressRoute.requestPrivateAccessRouting();
}
progressRoute.finish();
}
}
}, 300);
}
}
void finishProgress(RouteCalculationParams params) {
final RouteCalculationProgressCallback progressRoute;
if (params.calculationProgressCallback != null) {
progressRoute = params.calculationProgressCallback;
} else {
progressRoute = this.progressRoute;
}
if (progressRoute != null) {
progressRoute.finish();
}
}
private static class RouteRecalculationTask implements Runnable {
private final RouteRecalculationHelper routingThreadHelper;
private final RoutingHelper routingHelper;
private final RouteCalculationParams params;
private final boolean paramsChanged;
String routeCalcError;
String routeCalcErrorShort;
int evalWaitInterval = 0;
public RouteRecalculationTask(@NonNull RouteRecalculationHelper routingThreadHelper,
@NonNull RouteCalculationParams params, boolean paramsChanged) {
this.routingThreadHelper = routingThreadHelper;
this.routingHelper = routingThreadHelper.routingHelper;
this.params = params;
this.paramsChanged = paramsChanged;
if (params.calculationProgress == null) {
params.calculationProgress = new RouteCalculationProgress();
}
}
public boolean isParamsChanged() {
return paramsChanged;
}
public void stopCalculation() {
params.calculationProgress.isCancelled = true;
}
private OsmandSettings getSettings() {
return routingHelper.getSettings();
}
private void showMessage(final String msg) {
final OsmandApplication app = routingHelper.getApplication();
app.runInUIThread(new Runnable() {
@Override
public void run() {
app.showToastMessage(msg);
}
});
}
@Override
public void run() {
RouteProvider provider = routingHelper.getProvider();
OsmandSettings settings = getSettings();
RouteCalculationResult res = provider.calculateRouteImpl(params);
if (params.calculationProgress.isCancelled) {
return;
}
final boolean onlineSourceWithoutInternet = !res.isCalculated() &&
params.mode.getRouteService().isOnline() && !settings.isInternetConnectionAvailable();
if (onlineSourceWithoutInternet && settings.GPX_ROUTE_CALC_OSMAND_PARTS.get()) {
if (params.previousToRecalculate != null && params.previousToRecalculate.isCalculated()) {
res = provider.recalculatePartOfflineRoute(res, params);
}
}
RouteCalculationResult prev = routingHelper.getRoute();
synchronized (routingHelper) {
if (res.isCalculated()) {
if (!params.inSnapToRoadMode && !params.inPublicTransportMode) {
routingHelper.setRoute(res);
routingHelper.updateOriginalRoute();
}
if (params.resultListener != null) {
params.resultListener.onRouteCalculated(res);
}
} else {
evalWaitInterval = Math.max(3000, routingThreadHelper.evalWaitInterval * 3 / 2); // for Issue #3899
evalWaitInterval = Math.min(evalWaitInterval, 120000);
}
}
OsmandApplication app = routingHelper.getApplication();
if (res.isCalculated()) {
if (!params.inSnapToRoadMode && !params.inPublicTransportMode) {
routingThreadHelper.setNewRoute(prev, res, params.start);
}
} else if (onlineSourceWithoutInternet) {
routeCalcError = app.getString(R.string.error_calculating_route)
+ ":\n" + app.getString(R.string.internet_connection_required_for_online_route);
routeCalcErrorShort = app.getString(R.string.error_calculating_route);
showMessage(routeCalcError);
} else {
if (res.getErrorMessage() != null) {
routeCalcError = app.getString(R.string.error_calculating_route) + ":\n" + res.getErrorMessage();
routeCalcErrorShort = app.getString(R.string.error_calculating_route);
} else {
routeCalcError = app.getString(R.string.empty_route_calculated);
routeCalcErrorShort = app.getString(R.string.empty_route_calculated);
}
showMessage(routeCalcError);
}
app.getNotificationHelper().refreshNotification(NAVIGATION);
}
}
private class RouteRecalculationExecutor extends ThreadPoolExecutor {
public RouteRecalculationExecutor() {
super(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
RouteRecalculationTask task = null;
synchronized (routingHelper) {
if (r instanceof Future<?>) {
task = tasksMap.remove(r);
}
}
if (t == null && task != null) {
evalWaitInterval = task.evalWaitInterval;
lastRouteCalcError = task.routeCalcError;
lastRouteCalcErrorShort = task.routeCalcErrorShort;
}
lastTimeEvaluatedRoute = System.currentTimeMillis();
}
}
}

Some files were not shown because too many files have changed in this diff Show more