diff --git a/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_bottom.png b/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_bottom.png
new file mode 100644
index 0000000000..6db8b74514
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_center.png b/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_center.png
new file mode 100644
index 0000000000..09eceefe2a
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_center.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_top.png b/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_top.png
new file mode 100644
index 0000000000..a499949379
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_bicycle_location_top.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_car_bearing_bottom.png b/OsmAnd/res/drawable-large-hdpi/map_car_bearing_bottom.png
new file mode 100644
index 0000000000..b03171421c
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_car_bearing_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_car_bearing_center.png b/OsmAnd/res/drawable-large-hdpi/map_car_bearing_center.png
new file mode 100644
index 0000000000..906ec0426d
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_car_bearing_center.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_car_bearing_top.png b/OsmAnd/res/drawable-large-hdpi/map_car_bearing_top.png
new file mode 100644
index 0000000000..b7fac1773a
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_car_bearing_top.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_car_location_bottom.png b/OsmAnd/res/drawable-large-hdpi/map_car_location_bottom.png
new file mode 100644
index 0000000000..88bcceaa28
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_car_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_car_location_center.png b/OsmAnd/res/drawable-large-hdpi/map_car_location_center.png
new file mode 100644
index 0000000000..a6e3ea1a9f
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_car_location_center.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_car_location_top.png b/OsmAnd/res/drawable-large-hdpi/map_car_location_top.png
new file mode 100644
index 0000000000..ddd42aaf6b
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_car_location_top.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_default_location_bottom.png b/OsmAnd/res/drawable-large-hdpi/map_default_location_bottom.png
new file mode 100644
index 0000000000..375f514475
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_default_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_default_location_center.png b/OsmAnd/res/drawable-large-hdpi/map_default_location_center.png
new file mode 100644
index 0000000000..4367f4c64f
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_default_location_center.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_default_location_top.png b/OsmAnd/res/drawable-large-hdpi/map_default_location_top.png
new file mode 100644
index 0000000000..921bdcaab0
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_default_location_top.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_bottom.png b/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_bottom.png
new file mode 100644
index 0000000000..b3819474af
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_center.png b/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_center.png
new file mode 100644
index 0000000000..ebcfa3dcec
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_center.png differ
diff --git a/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_top.png b/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_top.png
new file mode 100644
index 0000000000..dda27a46f9
Binary files /dev/null and b/OsmAnd/res/drawable-large-hdpi/map_nautical_bearing_top.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_bottom.png b/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_bottom.png
new file mode 100644
index 0000000000..faa02b03e2
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_center.png b/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_center.png
new file mode 100644
index 0000000000..2f34bb4cf4
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_center.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_top.png b/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_top.png
new file mode 100644
index 0000000000..ea22e18543
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_bicycle_location_top.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_bottom.png b/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_bottom.png
new file mode 100644
index 0000000000..a3e1551495
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_center.png b/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_center.png
new file mode 100644
index 0000000000..2e4bd781b7
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_center.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_top.png b/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_top.png
new file mode 100644
index 0000000000..a2c15d4fa1
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_car_bearing_top.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_car_location_bottom.png b/OsmAnd/res/drawable-large-xhdpi/map_car_location_bottom.png
new file mode 100644
index 0000000000..62dc671ec9
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_car_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_car_location_center.png b/OsmAnd/res/drawable-large-xhdpi/map_car_location_center.png
new file mode 100644
index 0000000000..5c51d05a34
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_car_location_center.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_car_location_top.png b/OsmAnd/res/drawable-large-xhdpi/map_car_location_top.png
new file mode 100644
index 0000000000..9fb25c73f9
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_car_location_top.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_default_location_bottom.png b/OsmAnd/res/drawable-large-xhdpi/map_default_location_bottom.png
new file mode 100644
index 0000000000..07620168aa
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_default_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_default_location_center.png b/OsmAnd/res/drawable-large-xhdpi/map_default_location_center.png
new file mode 100644
index 0000000000..bb91309b8e
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_default_location_center.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_default_location_top.png b/OsmAnd/res/drawable-large-xhdpi/map_default_location_top.png
new file mode 100644
index 0000000000..24eea3f8f3
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_default_location_top.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_bottom.png b/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_bottom.png
new file mode 100644
index 0000000000..dd31c7a5d8
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_bottom.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_center.png b/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_center.png
new file mode 100644
index 0000000000..44c5ce44d8
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_center.png differ
diff --git a/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_top.png b/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_top.png
new file mode 100644
index 0000000000..906561c5b8
Binary files /dev/null and b/OsmAnd/res/drawable-large-xhdpi/map_nautical_bearing_top.png differ
diff --git a/OsmAnd/res/drawable-large/map_bicycle_location_bottom.png b/OsmAnd/res/drawable-large/map_bicycle_location_bottom.png
new file mode 100644
index 0000000000..454127991b
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_bicycle_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large/map_bicycle_location_center.png b/OsmAnd/res/drawable-large/map_bicycle_location_center.png
new file mode 100644
index 0000000000..189087522d
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_bicycle_location_center.png differ
diff --git a/OsmAnd/res/drawable-large/map_bicycle_location_top.png b/OsmAnd/res/drawable-large/map_bicycle_location_top.png
new file mode 100644
index 0000000000..d3164aaddd
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_bicycle_location_top.png differ
diff --git a/OsmAnd/res/drawable-large/map_car_bearing_bottom.png b/OsmAnd/res/drawable-large/map_car_bearing_bottom.png
new file mode 100644
index 0000000000..ef7476abc9
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_car_bearing_bottom.png differ
diff --git a/OsmAnd/res/drawable-large/map_car_bearing_center.png b/OsmAnd/res/drawable-large/map_car_bearing_center.png
new file mode 100644
index 0000000000..a64378bdf4
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_car_bearing_center.png differ
diff --git a/OsmAnd/res/drawable-large/map_car_bearing_top.png b/OsmAnd/res/drawable-large/map_car_bearing_top.png
new file mode 100644
index 0000000000..055bada005
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_car_bearing_top.png differ
diff --git a/OsmAnd/res/drawable-large/map_car_location_bottom.png b/OsmAnd/res/drawable-large/map_car_location_bottom.png
new file mode 100644
index 0000000000..7abacf999c
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_car_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large/map_car_location_center.png b/OsmAnd/res/drawable-large/map_car_location_center.png
new file mode 100644
index 0000000000..6bcc605ba3
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_car_location_center.png differ
diff --git a/OsmAnd/res/drawable-large/map_car_location_top.png b/OsmAnd/res/drawable-large/map_car_location_top.png
new file mode 100644
index 0000000000..15b4bf87da
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_car_location_top.png differ
diff --git a/OsmAnd/res/drawable-large/map_default_location_bottom.png b/OsmAnd/res/drawable-large/map_default_location_bottom.png
new file mode 100644
index 0000000000..ee294b37c5
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_default_location_bottom.png differ
diff --git a/OsmAnd/res/drawable-large/map_default_location_center.png b/OsmAnd/res/drawable-large/map_default_location_center.png
new file mode 100644
index 0000000000..e0d6878129
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_default_location_center.png differ
diff --git a/OsmAnd/res/drawable-large/map_default_location_top.png b/OsmAnd/res/drawable-large/map_default_location_top.png
new file mode 100644
index 0000000000..dcb7f61db7
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_default_location_top.png differ
diff --git a/OsmAnd/res/drawable-large/map_nautical_bearing_bottom.png b/OsmAnd/res/drawable-large/map_nautical_bearing_bottom.png
new file mode 100644
index 0000000000..5418a83afd
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_nautical_bearing_bottom.png differ
diff --git a/OsmAnd/res/drawable-large/map_nautical_bearing_center.png b/OsmAnd/res/drawable-large/map_nautical_bearing_center.png
new file mode 100644
index 0000000000..9e9d79e0c2
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_nautical_bearing_center.png differ
diff --git a/OsmAnd/res/drawable-large/map_nautical_bearing_top.png b/OsmAnd/res/drawable-large/map_nautical_bearing_top.png
new file mode 100644
index 0000000000..ae8fa022c2
Binary files /dev/null and b/OsmAnd/res/drawable-large/map_nautical_bearing_top.png differ
diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml
index e6e739f0d4..83dd6438de 100644
--- a/OsmAnd/res/values-de/strings.xml
+++ b/OsmAnd/res/values-de/strings.xml
@@ -3425,5 +3425,5 @@ Lon %2$s
Durch das Auswählen von %1$s werden alle Änderungen verlorengehen.
Alle Profil-Einstellungen werden auf den Ausgangszustand nach App-Installation zurückgesetzt.
Alle Profil-Einstellungen auf den Standard zurücksetzen\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml
index 82744fcc88..458901cef0 100644
--- a/OsmAnd/res/values-eo/strings.xml
+++ b/OsmAnd/res/values-eo/strings.xml
@@ -3400,5 +3400,5 @@ Indikas lokon: %1$s x %2$s"
Per klaki “%1$s”, ĉiuj viaj ŝanĝoj perdiĝos.
Ĉiuj agordoj pri profiloj revenos al la post-instala stato.
Ĉu rekomencigi ĉiujn agordojn pri profiloj\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-et/strings.xml b/OsmAnd/res/values-et/strings.xml
index 37c6cf0f4b..ad137b0035 100644
--- a/OsmAnd/res/values-et/strings.xml
+++ b/OsmAnd/res/values-et/strings.xml
@@ -3352,5 +3352,5 @@
Vajutades nupul %1$s kaovad kõik muudatused.
Kõik profiiliseaded lähtestatakse paigaldusjärgsesse olekusse.
Taasta kõikide profiiliseadete vaikeväärtused\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml
index 1d1470f839..1eed014f75 100644
--- a/OsmAnd/res/values-fr/strings.xml
+++ b/OsmAnd/res/values-fr/strings.xml
@@ -3393,5 +3393,5 @@ représentant la zone : %1$s x %2$s
En cliquant sur %1$s, toutes vos modifications seront perdues.
Tous les paramètres de profil vont être ré-initialisés aux valeurs par défaut.
Ré-initialiser tous les paramètres de profil \?
- %1$s : %2$s
+ %1$s : %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml
index d76e6ab4f5..3d0b111958 100644
--- a/OsmAnd/res/values-he/strings.xml
+++ b/OsmAnd/res/values-he/strings.xml
@@ -3411,5 +3411,5 @@
לחיצה על %1$s תוביל לאבדן כל השינויים שערכת.
כל הגדרות הפרופיל יאופסו למצב כמו שלאחר ההתקנה.
לאפס את הגדרות הפרופיל לבררת המחדל\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml
index 92b475dce3..b52d8f3b5b 100644
--- a/OsmAnd/res/values-hu/strings.xml
+++ b/OsmAnd/res/values-hu/strings.xml
@@ -3420,5 +3420,5 @@ Ha szereted az OsmAndot és az OSM-et, és szeretnéd támogatni a fejlődésük
Minden profilbeállítás vissza fog állni a telepítést követő állapotba.
Minden profil visszaálljon az alapértelmezett helyzetbe\?
Családi autó
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml
index bd3920c445..2c0bd4e1fb 100644
--- a/OsmAnd/res/values-nb/strings.xml
+++ b/OsmAnd/res/values-nb/strings.xml
@@ -3427,5 +3427,5 @@
Ved å klikke %1$s vil alle endringene dine gå tapt.
Alle profilinnstillinger må tilbakestilles til forvalg.
Tilbakestill alle innstillinger til forvalg\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml
index 06c418ddf6..7352597b2f 100644
--- a/OsmAnd/res/values-pl/strings.xml
+++ b/OsmAnd/res/values-pl/strings.xml
@@ -3419,5 +3419,5 @@ Reprezentuje obszar: %1$s x %2$s
Kliknięcie %1$s spowoduje utratę wszystkich zmian.
Wszystkie ustawienia profilu zostaną przywrócone do stanu po instalacji.
Czy zresetować wszystkie ustawienia profilu do wartości domyślnych\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml
index a01e9b125e..f59bfef513 100644
--- a/OsmAnd/res/values-pt-rBR/strings.xml
+++ b/OsmAnd/res/values-pt-rBR/strings.xml
@@ -3407,5 +3407,5 @@ Pôr do Sol: %2$s
Ao clicar em %1$s, você perderá todas as suas alterações.
Todas as configurações de perfil serão redefinidas para o estado após a instalação.
Redefinir todas as configurações de perfil para o padrão\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml
index a8059e6a5e..b4afe017b8 100644
--- a/OsmAnd/res/values-ru/strings.xml
+++ b/OsmAnd/res/values-ru/strings.xml
@@ -3412,5 +3412,5 @@
Нажимая %1$s, вы потеряете все свои изменения.
Все настройки профиля будут сброшены в значения по умолчанию после установки.
Сбросить все настройки профиля в значения по умолчанию\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml
index ed2d83a643..8bfe1c9441 100644
--- a/OsmAnd/res/values-sc/strings.xml
+++ b/OsmAnd/res/values-sc/strings.xml
@@ -3420,5 +3420,5 @@ Pro praghere iscrie su còdighe intreu
Incarchende %1$s, as a pèrdere totu sas modìficas tuas.
Totu sas impostatziones de su profilu ant a torrare a s\'istadu chi teniant in antis de s\'installatzione.
Ripristinare totu sas impostatziones de su profilu a sos valores predefinidos\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml
index f5f60d6089..ca85e0f879 100644
--- a/OsmAnd/res/values-sk/strings.xml
+++ b/OsmAnd/res/values-sk/strings.xml
@@ -3408,5 +3408,5 @@ Zodpovedá oblasti: %1$s x %2$s
Stlačením %1$s stratíte všetky zmeny.
Všetky nastavenia profilu budú vrátené do východzieho stavu.
Resetovať nastavenia profilu na predvolené hodnoty\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml
index 73f4099bbf..3330a4402b 100644
--- a/OsmAnd/res/values-tr/strings.xml
+++ b/OsmAnd/res/values-tr/strings.xml
@@ -3371,5 +3371,5 @@
%1$s\'e tıkladığınızda, tüm değişikliklerinizi kaybedeceksiniz.
Tüm profil ayarları kurulumdan sonraki duruma sıfırlanacaktır.
Tüm profil ayarları varsayılana sıfırlansın mı\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml
index 5463825807..1c4480a46b 100644
--- a/OsmAnd/res/values-uk/strings.xml
+++ b/OsmAnd/res/values-uk/strings.xml
@@ -3411,5 +3411,5 @@
Натискаючи %1$s, ви втратите всі свої зміни.
Усі налаштування профілю буде скинуто після встановлення.
Скинути всі усталені налаштування профілю\?
- %1$s: %2$s
+ %1$s: %2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml
index 225157c1bf..224604bd07 100644
--- a/OsmAnd/res/values-zh-rTW/strings.xml
+++ b/OsmAnd/res/values-zh-rTW/strings.xml
@@ -3408,5 +3408,5 @@
點擊 %1$s,您將會失去您所有的變更。
所有設定檔都將被重設為安裝後的狀態。
將所有設定檔重設為預設值?
- %1$s:%2$s
+ %1$s:%2$s
\ No newline at end of file
diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index b270b156a6..89b6bd1019 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -11,7 +11,8 @@
Thx - Hardy
-->
- %1$s: %2$s
+ %1$s %2$s
+ %1$s: %2$s
By clicking %1$s, you will lose all your changes.
All profile settings will be reset to the state after installation.
Reset all profile settings to default?
diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java
index e960678869..73fcc4108e 100644
--- a/OsmAnd/src/net/osmand/AndroidUtils.java
+++ b/OsmAnd/src/net/osmand/AndroidUtils.java
@@ -60,6 +60,7 @@ import net.osmand.plus.download.DownloadActivity;
import net.osmand.util.Algorithms;
import java.io.File;
+import java.text.MessageFormat;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -76,6 +77,9 @@ import static android.util.TypedValue.COMPLEX_UNIT_SP;
public class AndroidUtils {
public static final String STRING_PLACEHOLDER = "%s";
+ public static final MessageFormat formatKb = new MessageFormat("{0, number,##.#}", Locale.US);
+ public static final MessageFormat formatGb = new MessageFormat("{0, number,#.##}", Locale.US);
+ public static final MessageFormat formatMb = new MessageFormat("{0, number,##.#}", Locale.US);
/**
* @param context
@@ -211,16 +215,26 @@ public class AndroidUtils {
return DateFormat.getTimeFormat(ctx).format(new Date(time));
}
- public static String formatSize(long sizeBytes) {
+
+ public static String formatSize(Context ctx, long sizeBytes) {
int sizeKb = (int) ((sizeBytes + 512) >> 10);
if (sizeKb > 0) {
+
+ String size = "";
+ String numSuffix = "MB";
if (sizeKb > 1 << 20) {
- return DownloadActivity.formatGb.format(new Object[]{(float) sizeKb / (1 << 20)});
+ size = formatGb.format(new Object[]{(float) sizeKb / (1 << 20)});
+ numSuffix = "GB";
} else if (sizeBytes > (100 * (1 << 10))) {
- return DownloadActivity.formatMb.format(new Object[]{(float) sizeBytes / (1 << 20)});
+ size = formatMb.format(new Object[]{(float) sizeBytes / (1 << 20)});
} else {
- return DownloadActivity.formatKb.format(new Object[]{(float) sizeBytes / (1 << 10)});
+ size = formatKb.format(new Object[]{(float) sizeBytes / (1 << 10)});
+ numSuffix = "kB";
}
+ if(ctx == null) {
+ return size + " " + numSuffix;
+ }
+ return ctx.getString(R.string.ltr_or_rtl_combine_via_colon, size, numSuffix);
}
return "";
}
diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
index 33a30aa522..8699027ea0 100644
--- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
@@ -467,7 +467,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
public String getExtendedDescription(Context ctx) {
DateFormat dateFormat = android.text.format.DateFormat.getMediumDateFormat(ctx);
String date = dateFormat.format(file.lastModified());
- String size = AndroidUtils.formatSize(file.length());
+ String size = AndroidUtils.formatSize(ctx, file.length());
if (isPhoto()) {
return date + " • " + size;
}
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java
index 0fabf870ec..9026efb2d1 100644
--- a/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java
@@ -28,6 +28,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import net.osmand.AndroidUtils;
import net.osmand.ValueHolder;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
@@ -313,19 +314,10 @@ public class DashChooseAppDirFragment {
@SuppressLint("StaticFieldLeak")
MoveFilesToDifferentDirectory task = new MoveFilesToDifferentDirectory(activity, currentAppFile, selectedFile) {
- private MessageFormat formatMb = new MessageFormat("{0, number,##.#} MB", Locale.US);
@NonNull
private String getFormattedSize(long sizeBytes) {
- int size = (int) ((sizeBytes + 512) >> 10);
- if (size >= 0) {
- if (size > 100) {
- return formatMb.format(new Object[]{(float) size / (1 << 10)});
- } else {
- return size + " kB";
- }
- }
- return "";
+ return AndroidUtils.formatSize(activity, sizeBytes);
}
private void showResultsDialog() {
diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java
index 6a936817a7..ce3738ff49 100644
--- a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java
+++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java
@@ -34,6 +34,7 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
+import net.osmand.AndroidUtils;
import net.osmand.IProgress;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
@@ -103,9 +104,8 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
public static final String DOWNLOAD_TAB = "download";
public static final String UPDATES_TAB = "updates";
public static final String REGION_TO_SEARCH = "search_region";
- public static final MessageFormat formatGb = new MessageFormat("{0, number,#.##} GB", Locale.US);
- public static final MessageFormat formatMb = new MessageFormat("{0, number,##.#} MB", Locale.US);
- public static final MessageFormat formatKb = new MessageFormat("{0, number,##.#} kB", Locale.US);
+
+
private static boolean SUGGESTED_TO_DOWNLOAD_BASEMAP = false;
private BannerAndDownloadFreeVersion visibleBanner;
@@ -666,11 +666,11 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
ProgressBar sizeProgress = (ProgressBar) view.findViewById(R.id.progressBar);
File dir = activity.getMyApplication().getAppPath("").getParentFile();
- String size = formatGb.format(new Object[]{0});
+ String size = "";
int percent = 0;
if (dir.canRead()) {
StatFs fs = new StatFs(dir.getAbsolutePath());
- size = formatGb.format(new Object[]{(float) (fs.getAvailableBlocks()) * fs.getBlockSize() / (1 << 30)});
+ size = AndroidUtils.formatSize(activity, ((long)fs.getAvailableBlocks()) * fs.getBlockSize());
percent = 100 - fs.getAvailableBlocks() * 100 / fs.getBlockCount();
}
sizeProgress.setIndeterminate(false);
diff --git a/OsmAnd/src/net/osmand/plus/download/IndexItem.java b/OsmAnd/src/net/osmand/plus/download/IndexItem.java
index 4334ef28f1..f5f72e3fed 100644
--- a/OsmAnd/src/net/osmand/plus/download/IndexItem.java
+++ b/OsmAnd/src/net/osmand/plus/download/IndexItem.java
@@ -89,7 +89,7 @@ public class IndexItem implements Comparable {
}
public String getSizeDescription(Context ctx) {
- return size + " MB";
+ return ctx.getString(R.string.ltr_or_rtl_combine_via_colon, size, "MB");
}
diff --git a/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java
index 72bb2a435b..72a262891b 100644
--- a/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java
@@ -19,6 +19,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
+import net.osmand.AndroidUtils;
import net.osmand.IProgress;
import net.osmand.plus.OnDismissDialogFragmentListener;
import net.osmand.plus.OsmandApplication;
@@ -188,13 +189,9 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment {
if (dir != null && dir.canRead()) {
StatFs fs = new StatFs(dir.getAbsolutePath());
@SuppressWarnings("deprecation")
- float size = (float) fs.getAvailableBlocks() * fs.getBlockSize();
+ long size = (long) fs.getAvailableBlocks() * fs.getBlockSize();
if (size > 0) {
- if (size > 1 << 20) {
- sz = DownloadActivity.formatGb.format(new Object[]{size / (1 << 30)});
- } else {
- sz = DownloadActivity.formatMb.format(new Object[]{size / (1 << 20)});
- }
+ sz = AndroidUtils.formatSize(getActivity(), size);
}
}
return sz;
diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java
index 3c883974cc..291f7b4b60 100644
--- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java
+++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java
@@ -1036,11 +1036,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
}
String sz = "";
if (size > 0) {
- if (size > 1 << 20) {
- sz = DownloadActivity.formatGb.format(new Object[]{(float) size / (1 << 20)});
- } else {
- sz = DownloadActivity.formatMb.format(new Object[]{(float) size / (1 << 10)});
- }
+ sz = AndroidUtils.formatSize(v.getContext(), size * 1024l);
}
sizeView.setText(sz);
sizeView.setVisibility(View.VISIBLE);
@@ -1157,11 +1153,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
if (builder.length() > 0) {
builder.append(" • ");
}
- if (child.getSize() > 100) {
- builder.append(DownloadActivity.formatMb.format(new Object[]{(float) child.getSize() / (1 << 10)}));
- } else {
- builder.append(child.getSize()).append(" KB");
- }
+ builder.append(AndroidUtils.formatSize(ctx, child.getSize() * 1024l));
}
if (!Algorithms.isEmpty(child.getDescription())) {
diff --git a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java
index 97100d0850..0a769b8396 100644
--- a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java
+++ b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java
@@ -123,8 +123,6 @@ import static net.osmand.plus.OsmAndFormatter.YARDS_IN_ONE_METER;
import static net.osmand.plus.UiUtilities.CompoundButtonType.PROFILE_DEPENDENT;
import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_COLOR_ATTR;
import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_WIDTH_ATTR;
-import static net.osmand.plus.download.DownloadActivity.formatKb;
-import static net.osmand.plus.download.DownloadActivity.formatMb;
public class GpxUiHelper {
@@ -812,11 +810,7 @@ public class GpxUiHelper {
String date = "";
String size = "";
if (info.getFileSize() >= 0) {
- if (info.getFileSize() > (100 * (1 << 10))) {
- size = formatMb.format(new Object[]{(float) info.getFileSize() / (1 << 20)});
- } else {
- size = formatKb.format(new Object[]{(float) info.getFileSize() / (1 << 10)});
- }
+ size = AndroidUtils.formatSize(v.getContext(), info.getFileSize());
}
DateFormat df = app.getResourceManager().getDateFormat();
long fd = info.getLastModified();
diff --git a/OsmAnd/src/net/osmand/plus/liveupdates/LiveUpdatesSettingsDialogFragment.java b/OsmAnd/src/net/osmand/plus/liveupdates/LiveUpdatesSettingsDialogFragment.java
index bdb09145f6..780cf2f9f4 100644
--- a/OsmAnd/src/net/osmand/plus/liveupdates/LiveUpdatesSettingsDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/liveupdates/LiveUpdatesSettingsDialogFragment.java
@@ -19,6 +19,7 @@ import android.widget.CheckBox;
import android.widget.Spinner;
import android.widget.TextView;
+import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
@@ -104,7 +105,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
downloadOverWiFiCheckBox.setChecked(!liveUpdatePreference.get() || downloadViaWiFiPreference.get());
- sizeTextView.setText(getUpdatesSize(fileNameWithoutExtension, changesManager));
+ sizeTextView.setText(getUpdatesSize(getMyActivity(), fileNameWithoutExtension, changesManager));
TimeOfDay[] timeOfDays = TimeOfDay.values();
String[] timeOfDaysStrings = new String[timeOfDays.length];
@@ -194,7 +195,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
} else {
runLiveUpdate(getActivity(), fileName, true);
final IncrementalChangesManager changesManager = getMyApplication().getResourceManager().getChangesManager();
- sizeTextView.setText(getUpdatesSize(fileNameWithoutExtension, changesManager));
+ sizeTextView.setText(getUpdatesSize(getMyActivity(), fileNameWithoutExtension, changesManager));
dialog.dismiss();
}
}
@@ -214,17 +215,10 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
}
}
- private static String getUpdatesSize(String fileNameWithoutExtension,
+ private static String getUpdatesSize(Context ctx, String fileNameWithoutExtension,
IncrementalChangesManager changesManager) {
- String size;
long updatesSize = changesManager.getUpdatesSize(fileNameWithoutExtension);
- updatesSize /= (1 << 10);
- if (updatesSize > 100) {
- size = DownloadActivity.formatMb.format(new Object[]{(float) updatesSize / (1 << 10)});
- } else {
- size = updatesSize + " KB";
- }
- return size;
+ return AndroidUtils.formatSize(ctx, updatesSize);
}
private LiveUpdatesFragment getLiveUpdatesFragment() {
@@ -263,8 +257,10 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
final String fileNameWithoutExtension =
Algorithms.getFileNameWithoutExtension(new File(localIndexInfo));
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(getString(R.string.clear_updates_proposition_message)
- + " " + getUpdatesSize(fileNameWithoutExtension, changesManager))
+ builder.setMessage(
+ getString(R.string.ltr_or_rtl_combine_via_space,
+ getString(R.string.clear_updates_proposition_message),
+ getUpdatesSize(getContext(), fileNameWithoutExtension, changesManager)))
.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java
index f216a847d8..8cf67a83b7 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java
@@ -9,6 +9,7 @@ import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
+import net.osmand.AndroidUtils;
import net.osmand.IProgress;
import net.osmand.IndexConstants;
import net.osmand.data.LatLon;
@@ -311,11 +312,7 @@ public class MapDataMenuController extends MenuController {
}
StringBuilder sizeStr = new StringBuilder();
if (localIndexInfo.getSize() >= 0) {
- if (localIndexInfo.getSize() > 100) {
- sizeStr.append(DownloadActivity.formatMb.format(new Object[]{(float) localIndexInfo.getSize() / (1 << 10)}));
- } else {
- sizeStr.append(localIndexInfo.getSize()).append(" KB");
- }
+ sizeStr.append(AndroidUtils.formatSize(mapActivity, localIndexInfo.getSize() * 1024l));
}
if (backuped) {
if (sizeStr.length() > 0) {
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java
index dc4c6bbaa9..a5b0653c5b 100644
--- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java
+++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java
@@ -118,7 +118,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
private ActionMode actionMode;
private LoadGpxTask asyncLoader;
private GpxIndexesAdapter allGpxAdapter;
- private static MessageFormat formatMb = new MessageFormat("{0, number,##.#} MB", Locale.US);
private ContextMenuAdapter optionsMenuAdapter;
private AsyncTask operationTask;
private GpxSelectionHelper selectedGpxHelper;
@@ -1802,12 +1801,9 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
v.findViewById(R.id.unknown_section).setVisibility(View.VISIBLE);
String date = "";
String size = "";
+
if (child.getSize() >= 0) {
- if (child.getSize() > 100) {
- size = formatMb.format(new Object[]{(float) child.getSize() / (1 << 10)});
- } else {
- size = child.getSize() + " kB";
- }
+ size = AndroidUtils.formatSize(v.getContext(), child.getSize() * 1024l);
}
DateFormat df = app.getResourceManager().getDateFormat();
long fd = child.getFileDate();
diff --git a/OsmAnd/src/net/osmand/plus/settings/CoordinatesFormatFragment.java b/OsmAnd/src/net/osmand/plus/settings/CoordinatesFormatFragment.java
index 44501c7b44..c62ac01ddd 100644
--- a/OsmAnd/src/net/osmand/plus/settings/CoordinatesFormatFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/CoordinatesFormatFragment.java
@@ -77,7 +77,7 @@ public class CoordinatesFormatFragment extends BaseSettingsFragment {
String formattedCoordinates = OsmAndFormatter.getFormattedCoordinates(lat, lon, format);
if (format == PointDescription.UTM_FORMAT) {
SpannableStringBuilder spannableBuilder = new SpannableStringBuilder();
- String combined = getString(R.string.ltr_or_rtl_combine, getString(R.string.shared_string_example), formattedCoordinates);
+ String combined = getString(R.string.ltr_or_rtl_combine_via_colon, getString(R.string.shared_string_example), formattedCoordinates);
spannableBuilder.append(combined);
spannableBuilder.append("\n");
spannableBuilder.append(getString(R.string.utm_format_descr));
@@ -105,7 +105,7 @@ public class CoordinatesFormatFragment extends BaseSettingsFragment {
return spannableBuilder;
}
- return getString(R.string.ltr_or_rtl_combine, getString(R.string.shared_string_example), formattedCoordinates);
+ return getString(R.string.ltr_or_rtl_combine_via_colon, getString(R.string.shared_string_example), formattedCoordinates);
}
@Override
diff --git a/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java b/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java
index 2e357ac497..dd4ef57b7c 100644
--- a/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java
@@ -341,19 +341,10 @@ public class DataStorageFragment extends BaseSettingsFragment implements DataSto
@SuppressLint("StaticFieldLeak")
MoveFilesToDifferentDirectory task = new MoveFilesToDifferentDirectory(activity, fromDirectory, toDirectory) {
- private MessageFormat formatMb = new MessageFormat("{0, number,##.#} MB", Locale.US);
@NonNull
private String getFormattedSize(long sizeBytes) {
- int size = (int) ((sizeBytes + 512) >> 10);
- if (size >= 0) {
- if (size > 100) {
- return formatMb.format(new Object[]{(float) size / (1 << 10)});
- } else {
- return size + " kB";
- }
- }
- return "";
+ return AndroidUtils.formatSize(activity.get(), sizeBytes);
}
private void showResultsDialog() {