Fix problems and improve UI
diff --git a/OsmAnd/res/layout/bottom_sheet_select_folder.xml b/OsmAnd/res/layout/bottom_sheet_select_folder.xml
index 4693c7d..9db0e3a 100644
--- a/OsmAnd/res/layout/bottom_sheet_select_folder.xml
+++ b/OsmAnd/res/layout/bottom_sheet_select_folder.xml
@@ -9,7 +9,8 @@
<net.osmand.plus.widgets.OsmandTextFieldBoxes
android:id="@+id/edit_text_otfb"
android:layout_width="match_parent"
- android:layout_height="@dimen/dialog_button_ex_height"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/dialog_button_ex_height"
android:layout_marginTop="@dimen/text_margin_small"
android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
@@ -19,10 +20,11 @@
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
android:id="@+id/text"
+ android:inputType="textMultiLine|textNoSuggestions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:maxLines="1"
+ android:maxLines="10"
android:textColor="?android:textColorPrimary"
tools:text="Folder path ... " />
diff --git a/OsmAnd/res/layout/data_storage_memory_used_item.xml b/OsmAnd/res/layout/data_storage_memory_used_item.xml
index 0653b8b..abcb38e 100644
--- a/OsmAnd/res/layout/data_storage_memory_used_item.xml
+++ b/OsmAnd/res/layout/data_storage_memory_used_item.xml
@@ -2,46 +2,71 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
- android:background="?attr/list_background_color"
android:layout_width="match_parent"
- android:layout_height="@dimen/card_row_min_height"
- android:orientation="horizontal">
+ android:layout_height="wrap_content"
+ android:background="?attr/list_background_color"
+ android:orientation="vertical">
- <android.support.v7.widget.AppCompatImageView
- android:id="@android:id/icon"
- android:layout_width="@dimen/standard_icon_size"
- android:layout_height="@dimen/standard_icon_size"
- android:layout_gravity="center"
- android:layout_marginLeft="@dimen/content_padding"
- android:layout_marginRight="@dimen/content_padding"
- android:src="@drawable/mm_storage_tank"
- android:tint="?attr/default_icon_color"
- tools:tint="?attr/default_icon_color" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/card_row_min_height">
- <net.osmand.plus.widgets.TextViewEx
- android:id="@android:id/title"
- android:layout_width="0dp"
+ <android.support.v7.widget.AppCompatImageView
+ android:id="@android:id/icon"
+ android:layout_width="@dimen/standard_icon_size"
+ android:layout_height="@dimen/standard_icon_size"
+ android:layout_gravity="center"
+ android:layout_marginLeft="@dimen/content_padding"
+ android:layout_marginRight="@dimen/content_padding"
+ android:src="@drawable/mm_storage_tank"
+ android:tint="?attr/default_icon_color"
+ tools:tint="?attr/default_icon_color" />
+
+ <net.osmand.plus.widgets.TextViewEx
+ android:id="@android:id/title"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:paddingLeft="@dimen/content_padding"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="@dimen/default_desc_text_size"
+ osmand:typeface="@string/font_roboto_regular"
+ tools:text="Internal application memory" />
+
+ <net.osmand.plus.widgets.TextViewEx
+ android:id="@+id/memory"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:background="@null"
+ android:clickable="true"
+ android:focusable="true"
+ android:paddingLeft="@dimen/content_padding"
+ android:paddingRight="@dimen/content_padding"
+ android:textSize="@dimen/default_desc_text_size"
+ osmand:typeface="@string/font_roboto_regular"
+ tools:text="6.7 GB" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/divider"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:textColor="?android:textColorPrimary"
- android:textSize="@dimen/default_desc_text_size"
- android:paddingLeft="@dimen/content_padding"
- osmand:typeface="@string/font_roboto_regular"
- tools:text="Internal application memory" />
+ android:background="?attr/list_background_color"
+ android:visibility="gone"
+ android:orientation="vertical">
- <net.osmand.plus.widgets.TextViewEx
- android:id="@+id/memory"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:background="@null"
- android:clickable="true"
- android:focusable="true"
- android:paddingLeft="@dimen/content_padding"
- android:paddingRight="@dimen/content_padding"
- android:textSize="@dimen/default_desc_text_size"
- osmand:typeface="@string/font_roboto_regular"
- tools:text="6.7 GB" />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/content_padding_half" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?attr/dashboard_divider"
+ android:focusable="false" />
+
+ </LinearLayout>
</LinearLayout>
\ No newline at end of file
diff --git a/OsmAnd/res/layout/divider_padding_half.xml b/OsmAnd/res/layout/divider_padding_half.xml
deleted file mode 100644
index 55fec44..0000000
--- a/OsmAnd/res/layout/divider_padding_half.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?attr/list_background_color">
-
- <View
- android:id="@+id/topSpace"
- android:layout_width="match_parent"
- android:layout_height="@dimen/content_padding_half" />
-
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:background="?attr/dashboard_divider"
- android:focusable="false" />
-
- <View
- android:id="@+id/bottomSpace"
- android:layout_width="match_parent"
- android:layout_height="@dimen/content_padding_half" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml
index 7b7f274..334a91e 100644
--- a/OsmAnd/res/values-be/strings.xml
+++ b/OsmAnd/res/values-be/strings.xml
@@ -3290,8 +3290,6 @@
<string name="shared_string_by_default">Прадвызначана</string>
<string name="change_data_storage_full_description">Перамясціць файлы даных OsmAnd у новае месца\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • выкарыстоўваецца %2$s Гб</string>
- <string name="data_storage_space_description">Вольна %1$s • %2$s / %3$s Гб</string>
<string name="enter_path_to_folder">Увядзіце шлях да каталога</string>
<string name="shared_string_select_folder">Абраць каталог</string>
</resources>
\ No newline at end of file
diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml
index 11d6c3f..42b8347 100644
--- a/OsmAnd/res/values-ca/strings.xml
+++ b/OsmAnd/res/values-ca/strings.xml
@@ -3268,8 +3268,6 @@
<string name="route_parameters">Paràmetres de la ruta</string>
<string name="change_data_storage_full_description">Voleu moure els arxius de dades OsmAnd a una nova destinació\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Usat %2$s GB</string>
- <string name="data_storage_space_description">Lliure %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Introduïu el camí a la carpeta</string>
<string name="shared_string_select_folder">Seleccioneu la carpeta</string>
<string name="paste_Osmand_data_folder_path">Enganxa el camí a la carpeta amb les dades d\'OsmAnd</string>
diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml
index 2e42f22..30b7a82 100644
--- a/OsmAnd/res/values-da/strings.xml
+++ b/OsmAnd/res/values-da/strings.xml
@@ -3299,8 +3299,6 @@
<string name="download_detailed_map">Hent detaljeret %s kort, for at se området.</string>
<string name="change_data_storage_full_description">Flyt datafiler til den nye destination\?
\n%1$s>%2$s</string>
- <string name="data_storage_preference_summary">%1$s • Anvendt %2$s GB</string>
- <string name="data_storage_space_description">Tilgængeligt %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Indtast sti til mappen</string>
<string name="shared_string_select_folder">Vælg mappe</string>
<string name="paste_Osmand_data_folder_path">Indsæt sti til mappen med data</string>
diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml
index d00065f..1ee70e4 100644
--- a/OsmAnd/res/values-de/strings.xml
+++ b/OsmAnd/res/values-de/strings.xml
@@ -3299,8 +3299,6 @@
<string name="download_detailed_map">Laden Sie die detaillierte %s-Karte herunter, um diesen Bereich zu sehen.</string>
<string name="change_data_storage_full_description">OsmAnd-Datendateien an das neue Ziel verschieben\?
\n%1 s > %2 s</string>
- <string name="data_storage_preference_summary">%1$s • Verwendet %2$s GB</string>
- <string name="data_storage_space_description">Frei %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Geben Sie den Pfad zum Ordner ein</string>
<string name="shared_string_select_folder">Ordner auswählen</string>
<string name="paste_Osmand_data_folder_path">Einfügen des Pfades zum Ordner mit OsmAnd-Daten</string>
diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml
index 04a720c..8312a66 100644
--- a/OsmAnd/res/values-eo/strings.xml
+++ b/OsmAnd/res/values-eo/strings.xml
@@ -3274,8 +3274,6 @@
<string name="download_detailed_map">Elŝutu la detalan mapon %s, por vidi tiun ĉi areon.</string>
<string name="change_data_storage_full_description">Ĉu movi datum‑dosierojn OsmAnd al la nova loko\?
\n%1$s → %2$s</string>
- <string name="data_storage_preference_summary">%1$s • uzita: %2$s GB</string>
- <string name="data_storage_space_description">Libera: %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Entajpu dosier‑indikon</string>
<string name="shared_string_select_folder">Elektu dosierujon</string>
<string name="paste_Osmand_data_folder_path">Algluu dosier‑indikon por dosierujo de OsmAnd‑datumoj</string>
diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml
index 2bd3b40..d872a49 100644
--- a/OsmAnd/res/values-es-rAR/strings.xml
+++ b/OsmAnd/res/values-es-rAR/strings.xml
@@ -3293,8 +3293,6 @@
<string name="download_detailed_map">Descarga el mapa detallado de «%s», para ver esta área.</string>
<string name="change_data_storage_full_description">¿Mover los archivos de datos de OsmAnd al nuevo destino\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Usado %2$s GB</string>
- <string name="data_storage_space_description">Libre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Ingresa la ruta a la carpeta</string>
<string name="shared_string_select_folder">Elegir carpeta</string>
<string name="paste_Osmand_data_folder_path">Pegar la ruta a la carpeta con los datos de OsmAnd</string>
diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml
index efaad8e..777a413 100644
--- a/OsmAnd/res/values-es-rUS/strings.xml
+++ b/OsmAnd/res/values-es-rUS/strings.xml
@@ -3294,8 +3294,6 @@
<string name="download_detailed_map">Descarga el mapa detallado de «%s», para ver esta área.</string>
<string name="change_data_storage_full_description">¿Mover los archivos de datos de OsmAnd al nuevo destino\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Usado %2$s GB</string>
- <string name="data_storage_space_description">Libre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Ingresa la ruta a la carpeta</string>
<string name="shared_string_select_folder">Elegir carpeta</string>
<string name="paste_Osmand_data_folder_path">Pegar la ruta a la carpeta con los datos de OsmAnd</string>
diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml
index 688a7f0..2a67ab7 100644
--- a/OsmAnd/res/values-es/strings.xml
+++ b/OsmAnd/res/values-es/strings.xml
@@ -3309,8 +3309,6 @@
<string name="plugins_settings">Ajustes de plugin</string>
<string name="shared_string_by_default">Por defecto</string>
<string name="download_detailed_map">Descarga el mapa detallado de %s para ver este área.</string>
- <string name="data_storage_preference_summary">%1$s • Usado %2$s GB</string>
- <string name="data_storage_space_description">Libre %1$s • %2$s / %3$s GB</string>
<string name="shared_string_select_folder">Seleccionar carpeta</string>
<string name="move_maps_to_new_destination">Mover al nuevo destino</string>
<string name="change_data_storage_folder">Cambiar la carpeta de almacenamiento de datos</string>
diff --git a/OsmAnd/res/values-eu/strings.xml b/OsmAnd/res/values-eu/strings.xml
index 439a7cf..bee40ef 100644
--- a/OsmAnd/res/values-eu/strings.xml
+++ b/OsmAnd/res/values-eu/strings.xml
@@ -3279,8 +3279,6 @@
<string name="download_detailed_map">Deskargatu %s(e)ko mapa xehetsua ingurune hau ikusteko.</string>
<string name="change_data_storage_full_description">Eraman OsmAnd datu fitxategiak xede berrira\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Erabilita %2$s GB</string>
- <string name="data_storage_space_description">Libre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Sartu karpetara bidea</string>
<string name="shared_string_select_folder">Hautatu karpeta</string>
<string name="paste_Osmand_data_folder_path">Itsatsi OsmAnd datuak dituen karpetara bidea</string>
diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml
index e2e823b..4768793 100644
--- a/OsmAnd/res/values-fa/strings.xml
+++ b/OsmAnd/res/values-fa/strings.xml
@@ -3335,8 +3335,6 @@
<string name="download_detailed_map">برای دیدن این منطقه، نقشهٔ باجزئیات %s را دانلود کنید.</string>
<string name="change_data_storage_full_description">فایلهای دادهٔ OsmAnd را به مقصد جدید انتقال میدهید؟
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • %2$s گب استفاده شده</string>
- <string name="data_storage_space_description">خالی %1$s • %2$s از %3$s گب</string>
<string name="enter_path_to_folder">مسیر پوشه را وارد کنید</string>
<string name="shared_string_select_folder">انتخاب پوشه</string>
<string name="paste_Osmand_data_folder_path">مسیر پوشهٔ دادههای OsmAnd را درج کنید</string>
diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml
index cba39d2..6399872 100644
--- a/OsmAnd/res/values-fr/strings.xml
+++ b/OsmAnd/res/values-fr/strings.xml
@@ -3261,8 +3261,6 @@
<string name="download_detailed_map">Télécharger la carte détaillée %s pour voir cette zone.</string>
<string name="change_data_storage_full_description">Déplacer les fichiers de données OsmAnd vers la nouvelle destination \?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • %2$s GB utilisés</string>
- <string name="data_storage_space_description">Libre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Saisissez le chemin du dossier</string>
<string name="shared_string_select_folder">Sélectionner le dossier</string>
<string name="paste_Osmand_data_folder_path">Coller le chemin du dossier contenant les données OsmAnd</string>
diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml
index 132052e..d4c1889 100644
--- a/OsmAnd/res/values-gl/strings.xml
+++ b/OsmAnd/res/values-gl/strings.xml
@@ -3334,8 +3334,6 @@
<string name="download_detailed_map">Baixa o mapa detallado de %s para ollar esta área.</string>
<string name="change_data_storage_full_description">Mover os ficheiros de datos do OsmAnd ó novo destino\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Empregado %2$s GB</string>
- <string name="data_storage_space_description">Libre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Insire a ruta do cartafol</string>
<string name="shared_string_select_folder">Escoller cartafol</string>
<string name="paste_Osmand_data_folder_path">Colar ou pegar a ruta do cartafol cos datos do OsmAnd</string>
diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml
index 8111066..f77791f 100644
--- a/OsmAnd/res/values-he/strings.xml
+++ b/OsmAnd/res/values-he/strings.xml
@@ -3279,8 +3279,6 @@
<string name="routing_attr_freeride_policy_name">ללא מסלול</string>
<string name="change_data_storage_full_description">להעביר את קובצי הנתונים של OsmAnd ליעד החדש\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • %2$s ג״ב מנוצלים</string>
- <string name="data_storage_space_description">%1$s פנויים • %2$s / %3$s ג״ב</string>
<string name="enter_path_to_folder">נא לספק נתיב לתיקייה</string>
<string name="shared_string_select_folder">בחירת תיקייה</string>
<string name="paste_Osmand_data_folder_path">נא להדביק את הנתיב לתיקייה עם הנתונים של OsmAnd</string>
diff --git a/OsmAnd/res/values-is/strings.xml b/OsmAnd/res/values-is/strings.xml
index 12ca416..c7975f3 100644
--- a/OsmAnd/res/values-is/strings.xml
+++ b/OsmAnd/res/values-is/strings.xml
@@ -3306,8 +3306,6 @@
<string name="download_detailed_map">Sæktu nákvæma %s kortið til að skoða þetta svæði.</string>
<string name="change_data_storage_full_description">Færa gagnaskrár OsmAnd á nýjan stað\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Notuð %2$s GB</string>
- <string name="data_storage_space_description">Laust %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Settu inn slóð á möppu</string>
<string name="shared_string_select_folder">Veldu möppu</string>
<string name="paste_Osmand_data_folder_path">Límdu slóð á möppuna með OsmAnd-gögnum</string>
diff --git a/OsmAnd/res/values-my/strings.xml b/OsmAnd/res/values-my/strings.xml
index cfa3eac..73e5da9 100644
--- a/OsmAnd/res/values-my/strings.xml
+++ b/OsmAnd/res/values-my/strings.xml
@@ -28,8 +28,6 @@
<string name="configure_profile">ပရိုဖိုင်းကိုပြုပြင်မြည်</string>
<string name="switch_profile">ပရိုဖိုင်းကိုပြောင်းလဲမည်</string>
<string name="change_data_storage_full_description">OsmAnd အချက်အလက်ဖိုင်များကိုနေရာအသစ်သို့ရွှေ့ပါ။ \n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • သုံးပြီး %2$s GB</string>
- <string name="data_storage_space_description">"နေရာလွပ် %1$s • %2$s / %3$s GB"</string>
<string name="enter_path_to_folder">folder ကိုရှိနေရာကိုရိုက်ထည့်ပါ</string>
<string name="shared_string_select_folder">ဖိုလ်ဒါကိုရွေးပါ</string>
<string name="paste_Osmand_data_folder_path">OsmAnd ဒေတာရှိသော ဖိုလ်ဒါနေရာကိုကူးထည့်ပါ</string>
diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml
index 00e945b..8a8511848 100644
--- a/OsmAnd/res/values-pl/strings.xml
+++ b/OsmAnd/res/values-pl/strings.xml
@@ -3299,8 +3299,6 @@
<string name="download_detailed_map">Pobierz szczegółową mapę %S, aby zobaczyć ten obszar.</string>
<string name="change_data_storage_full_description">Przenieść pliki danych OsmAnd do nowego położenia\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">"%1$s • Użyto %2$s GB"</string>
- <string name="data_storage_space_description">Wolne %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Proszę wprowadzić ścieżkę do katalogu</string>
<string name="shared_string_select_folder">Wybierz folder</string>
<string name="paste_Osmand_data_folder_path">Wklej ścieżkę do folderu z danymi OsmAnd</string>
diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml
index 874b037..36d2a43 100644
--- a/OsmAnd/res/values-pt-rBR/strings.xml
+++ b/OsmAnd/res/values-pt-rBR/strings.xml
@@ -3279,8 +3279,6 @@
<string name="download_detailed_map">Faça o download do mapa %s detalhado, para visualizar esta área.</string>
<string name="change_data_storage_full_description">Mover arquivos de dados OsmAnd para o novo destino\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Usado %2$s GB</string>
- <string name="data_storage_space_description">Livre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Digite o caminho para a pasta</string>
<string name="shared_string_select_folder">Selecionar pasta</string>
<string name="paste_Osmand_data_folder_path">Cole o caminho para a pasta com os dados OsmAnd</string>
diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml
index 4140b04..f98595c 100644
--- a/OsmAnd/res/values-pt/strings.xml
+++ b/OsmAnd/res/values-pt/strings.xml
@@ -3290,8 +3290,6 @@
<string name="download_detailed_map">Descarregue o mapa detalhado de %s para ver esta área.</string>
<string name="change_data_storage_full_description">Mover ficheiros de dados OsmAnd para o novo destino\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Usado %2$s GB</string>
- <string name="data_storage_space_description">Livre %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Insira o caminho para a pasta</string>
<string name="shared_string_select_folder">Selecionar pasta</string>
<string name="paste_Osmand_data_folder_path">Colar caminho para a pasta com dados OsmAnd</string>
diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml
index 87e2cc6..a6aaecc 100644
--- a/OsmAnd/res/values-sc/strings.xml
+++ b/OsmAnd/res/values-sc/strings.xml
@@ -3300,8 +3300,6 @@
<string name="download_detailed_map">Iscàrriga sa mapa de %s fata a sa minuda pro pompiare cust\'àrea.</string>
<string name="change_data_storage_full_description">Tramudare sos datos de OsmAnd in sa destinatzione noa\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Impreados: %2$s GB</string>
- <string name="data_storage_space_description">Lìberos: %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Inserta s\'àndala pro sa cartella</string>
<string name="shared_string_select_folder">Ischerta sa cartella</string>
<string name="paste_Osmand_data_folder_path">Incolla s\'àndala pro sa cartella cun sos datos de OsmAnd</string>
diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml
index 2a3d68e..02555d4 100644
--- a/OsmAnd/res/values-sk/strings.xml
+++ b/OsmAnd/res/values-sk/strings.xml
@@ -3280,8 +3280,6 @@
<string name="download_detailed_map">Pre zobrazenie tejto oblasti si stiahnite podrobnú mapu %s.</string>
<string name="change_data_storage_full_description">Presunúť dátové súbory OsmAnd do nového umiestnenia\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Použité %2$s GB</string>
- <string name="data_storage_space_description">Voľné %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Zadajte cestu k priečinku</string>
<string name="shared_string_select_folder">Zvoľte priečinok</string>
<string name="paste_Osmand_data_folder_path">Vložte cestu k priečinku s dátami OsmAnd</string>
diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml
index e21b385..3818b8a 100644
--- a/OsmAnd/res/values-tr/strings.xml
+++ b/OsmAnd/res/values-tr/strings.xml
@@ -3243,8 +3243,6 @@
\nHesaplama: %.1f sn, %d yol, %d döşeme)</string>
<string name="change_data_storage_full_description">OsmAnd veri dosyaları yeni hedefe taşınsın mı\?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Kullanılan %2$s GB</string>
- <string name="data_storage_space_description">Boş %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">Klasörün yolunu girin</string>
<string name="shared_string_select_folder">Klasör seç</string>
<string name="paste_Osmand_data_folder_path">OsmAnd verilerinin bulunduğu klasörün yolunu yapıştırın</string>
diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml
index f6e805f..c3d1613 100644
--- a/OsmAnd/res/values-zh-rTW/strings.xml
+++ b/OsmAnd/res/values-zh-rTW/strings.xml
@@ -3282,8 +3282,6 @@
<string name="download_detailed_map">下載更詳細的 %s 地圖以檢視此區域。</string>
<string name="change_data_storage_full_description">移動 OsmAnd 資料檔案到新目的地?
\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • 已使用 %2$s GB</string>
- <string name="data_storage_space_description">剩餘 %1$s • %2$s / %3$s GB</string>
<string name="enter_path_to_folder">輸入到資料夾的路徑</string>
<string name="shared_string_select_folder">選取資料夾</string>
<string name="paste_Osmand_data_folder_path">貼上有 OsmAnd 資料的資料夾路徑</string>
diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index 4f72c59..a95c3d5 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -11,6 +11,11 @@
Thx - Hardy
-->
+ <string name="shared_string_memory_used_tb_desc">Used %1$s TB</string>
+ <string name="shared_string_memory_used_gb_desc">Used %1$s GB</string>
+ <string name="shared_string_memory_used_mb_desc">Used %1$s MB</string>
+ <string name="shared_string_memory_used_kb_desc">Used %1$s KB</string>
+ <string name="contour_lines_and_hillshade">Contour lines and Hillshade</string>
<string name="shared_string_calculate">Calculate</string>
<string name="shared_string_osmand_usage">OsmAnd Usage</string>
<string name="shared_sting_tiles">Tiles</string>
@@ -24,8 +29,8 @@
<string name="rendering_attr_piste_difficulty_connection_name">Connection</string>
<string name="avoid_in_routing_descr_">Avoid certain routes and road types</string>
<string name="change_data_storage_full_description">Move OsmAnd data files to the new destination?\n%1$s > %2$s</string>
- <string name="data_storage_preference_summary">%1$s • Used %2$s GB</string>
- <string name="data_storage_space_description">Free %1$s GB • Total %2$s GB</string>
+ <string name="data_storage_preference_summary">%1$s\t•\t%2$s</string>
+ <string name="data_storage_space_description">Free %1$s GB\t•\tTotal %2$s GB</string>
<string name="enter_path_to_folder">Enter path to the folder</string>
<string name="shared_string_select_folder">Select folder</string>
<string name="paste_Osmand_data_folder_path">Paste path to the folder with OsmAnd data</string>
diff --git a/OsmAnd/res/xml/data_storage.xml b/OsmAnd/res/xml/data_storage.xml
index 242418b..a153ec4 100644
--- a/OsmAnd/res/xml/data_storage.xml
+++ b/OsmAnd/res/xml/data_storage.xml
@@ -14,6 +14,12 @@
android:title="@string/shared_string_maps"/>
<Preference
+ android:key="contour_lines_and_hillshade_memory"
+ android:layout="@layout/data_storage_memory_used_item"
+ android:icon="@drawable/ic_map"
+ android:title="@string/contour_lines_and_hillshade"/>
+
+ <Preference
android:key="tracks_memory_used"
android:layout="@layout/data_storage_memory_used_item"
android:icon="@drawable/ic_action_polygom_dark"
@@ -36,9 +42,6 @@
android:layout="@layout/data_storage_memory_used_item"
android:icon="@drawable/ic_action_folder"
android:title="@string/shared_string_other"/>
-
- <Preference
- android:layout="@layout/divider_padding_half" />
<PreferenceCategory
android:key="application_profiles"
diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java
index 34436b5..c8d27d8 100644
--- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java
+++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java
@@ -1985,6 +1985,7 @@
public static final int EXTERNAL_STORAGE_TYPE_INTERNAL_FILE = 2; // ctx.getFilesDir()
public static final int EXTERNAL_STORAGE_TYPE_OBB = 3; // ctx.getObbDirs
public static final int EXTERNAL_STORAGE_TYPE_SPECIFIED = 4;
+ public final OsmandPreference<Long> OSMAND_USAGE_SPACE = new LongPreference("osmand_usage_space", 0).makeGlobal();
public void freezeExternalStorageDirectory() {
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index 5549953..d460488 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -128,6 +128,7 @@
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchType;
import net.osmand.plus.settings.BaseSettingsFragment;
import net.osmand.plus.settings.BaseSettingsFragment.SettingsScreenType;
+import net.osmand.plus.settings.DataStorageFragment;
import net.osmand.plus.views.AddGpxPointBottomSheetHelper.NewGpxPoint;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.plus.views.MapControlsLayer;
@@ -161,6 +162,9 @@
import java.util.regex.Pattern;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SETTINGS_ID;
+import static net.osmand.plus.views.MapControlsLayer.REQUEST_LOCATION_FOR_ADD_DESTINATION_PERMISSION;
+import static net.osmand.plus.views.MapControlsLayer.REQUEST_LOCATION_FOR_NAVIGATION_FAB_PERMISSION;
+import static net.osmand.plus.views.MapControlsLayer.REQUEST_LOCATION_FOR_NAVIGATION_PERMISSION;
public class MapActivity extends OsmandActionBarActivity implements DownloadEvents,
OnRequestPermissionsResultCallback, IRouteInformationListener, AMapPointUpdateListener,
@@ -1864,11 +1868,21 @@
OsmandPlugin.onRequestPermissionsResult(requestCode, permissions, grantResults);
MapControlsLayer mcl = mapView.getLayerByClass(MapControlsLayer.class);
- if (mcl != null) {
+ if (mcl != null && (requestCode == REQUEST_LOCATION_FOR_NAVIGATION_PERMISSION
+ || requestCode == REQUEST_LOCATION_FOR_NAVIGATION_FAB_PERMISSION
+ || requestCode == REQUEST_LOCATION_FOR_ADD_DESTINATION_PERMISSION)) {
mcl.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
- if (requestCode == DownloadActivity.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE
+ if (requestCode == DataStorageFragment.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE
+ && grantResults.length > 0 && permissions.length > 0
+ && Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permissions[0])) {
+ if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this,
+ R.string.missing_write_external_storage_permission,
+ Toast.LENGTH_LONG).show();
+ }
+ } else if (requestCode == DownloadActivity.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE
&& grantResults.length > 0 && permissions.length > 0
&& Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permissions[0])) {
permissionAsked = true;
diff --git a/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java b/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java
index b944501..96363f4 100644
--- a/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/DataStorageFragment.java
@@ -5,6 +5,7 @@
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -27,6 +28,7 @@
import net.osmand.plus.ProgressImplementation;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
+import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.OsmandActionBarActivity;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.settings.bottomsheets.ChangeDataStorageBottomSheet;
@@ -43,16 +45,18 @@
import java.util.ArrayList;
import java.util.Locale;
-import static net.osmand.plus.settings.DataStorageItemsHolder.INTERNAL_STORAGE;
-import static net.osmand.plus.settings.DataStorageItemsHolder.MANUALLY_SPECIFIED;
-import static net.osmand.plus.settings.DataStorageItemsHolder.TILES_MEMORY;
+import static net.osmand.plus.settings.DataStorageHelper.INTERNAL_STORAGE;
+import static net.osmand.plus.settings.DataStorageHelper.MANUALLY_SPECIFIED;
+import static net.osmand.plus.settings.DataStorageHelper.OTHER_MEMORY;
+import static net.osmand.plus.settings.DataStorageHelper.TILES_MEMORY;
import static net.osmand.plus.settings.bottomsheets.ChangeDataStorageBottomSheet.CHOSEN_DIRECTORY;
import static net.osmand.plus.settings.bottomsheets.ChangeDataStorageBottomSheet.MOVE_DATA;
import static net.osmand.plus.settings.bottomsheets.SelectFolderBottomSheet.PATH_CHANGED;
import static net.osmand.plus.settings.bottomsheets.SelectFolderBottomSheet.NEW_PATH;
-public class DataStorageFragment extends BaseSettingsFragment implements DataStorageItemsHolder.UpdateMemoryInfoUIAdapter {
-
+public class DataStorageFragment extends BaseSettingsFragment implements DataStorageHelper.UpdateMemoryInfoUIAdapter {
+ public final static int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 500;
+
private final static String CHANGE_DIRECTORY_BUTTON = "change_directory";
private final static String OSMAND_USAGE = "osmand_usage";
private final static String CALCULATE_TILES_BTN_PRESSED = "calculate_tiles_btn_pressed";
@@ -64,11 +68,11 @@
private Preference changeButton;
private DataStorageMenuItem currentDataStorage;
private String tmpManuallySpecifiedPath;
- private DataStorageItemsHolder itemsHolder;
+ private DataStorageHelper itemsHolder;
private boolean calculateTilesBtnPressed;
- private DataStorageItemsHolder.RefreshMemoryUsedInfo calculateMemoryTask;
- private DataStorageItemsHolder.RefreshMemoryUsedInfo calculateTilesMemoryTask;
+ private DataStorageHelper.RefreshMemoryUsedInfo calculateMemoryTask;
+ private DataStorageHelper.RefreshMemoryUsedInfo calculateTilesMemoryTask;
private OsmandApplication app;
private OsmandActionBarActivity activity;
@@ -180,7 +184,7 @@
&& !DownloadActivity.hasPermissionToWriteExternalStorage(activity)) {
ActivityCompat.requestPermissions(activity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
- DownloadActivity.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
+ DataStorageFragment.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
} else if (key.equals(MANUALLY_SPECIFIED)) {
showFolderSelectionDialog();
} else {
@@ -212,6 +216,14 @@
int activeColor = ContextCompat.getColor(app, activeColorResId);
int primaryTextColorResId = isNightMode() ? R.color.text_color_primary_dark : R.color.text_color_primary_light;
int primaryTextColor = ContextCompat.getColor(app, primaryTextColorResId);
+
+ String[] memoryUnitsFormats = new String[] {
+ getString(R.string.shared_string_memory_kb_desc),
+ getString(R.string.shared_string_memory_mb_desc),
+ getString(R.string.shared_string_memory_gb_desc),
+ getString(R.string.shared_string_memory_tb_desc)
+ };
+
final View itemView = holder.itemView;
if (preference instanceof CheckBoxPreference) {
DataStorageMenuItem item = itemsHolder.getStorage(key);
@@ -243,7 +255,12 @@
divider.setVisibility(View.VISIBLE);
secondPart.setVisibility(View.VISIBLE);
String space = getSpaceDescription(item.getDirectory());
- tvSummary.setText(space);
+ if (!space.equals("")) {
+ tvSummary.setText(space);
+ tvSummary.setVisibility(View.VISIBLE);
+ } else {
+ tvSummary.setVisibility(View.GONE);
+ }
if (currentKey.equals(INTERNAL_STORAGE)) {
tvAdditionalDescription.setText(item.getDescription());
} else {
@@ -259,12 +276,9 @@
icon.setVisibility(View.INVISIBLE);
title.setText(R.string.shared_string_change);
} else if(key.equals(OSMAND_USAGE)) {
- long totalUsageBytes = 0;
- for (DataStorageMemoryItem mi : memoryItems) {
- totalUsageBytes += mi.getUsedMemoryBytes();
- }
+ long totalUsageBytes = itemsHolder.getTotalUsedBytes();
TextView tvSummary = itemView.findViewById(R.id.summary);
- tvSummary.setText(getFormattedMemoryUsedInfo(totalUsageBytes));
+ tvSummary.setText(DataStorageHelper.getFormattedMemoryInfo(totalUsageBytes, memoryUnitsFormats));
} else {
for (DataStorageMemoryItem mi : memoryItems) {
if (key.equals(mi.getKey())) {
@@ -285,7 +299,13 @@
} else {
tvMemory.setOnClickListener(null);
color = primaryTextColor;
- summary = getFormattedMemoryUsedInfo(mi.getUsedMemoryBytes());
+ summary = DataStorageHelper.getFormattedMemoryInfo(mi.getUsedMemoryBytes(), memoryUnitsFormats);
+ }
+ View divider = itemView.findViewById(R.id.divider);
+ if (mi.getKey().equals(OTHER_MEMORY)) {
+ divider.setVisibility(View.VISIBLE);
+ } else {
+ divider.setVisibility(View.GONE);
}
tvMemory.setTextColor(color);
tvMemory.setText(summary);
@@ -416,7 +436,7 @@
app.setExternalStorageDirectory(type, newDirectory);
reloadData();
if (silentRestart) {
- android.os.Process.killProcess(android.os.Process.myPid());
+ MapActivity.doRestart(activity);
} else {
app.restartApp(activity);
}
@@ -430,7 +450,7 @@
private void refreshDataInfo() {
calculateTilesBtnPressed = false;
- itemsHolder = DataStorageItemsHolder.refreshInfo(app);
+ itemsHolder = DataStorageHelper.refreshInfo(app);
calculateMemoryTask = itemsHolder.calculateMemoryUsedInfo(this);
}
@@ -443,29 +463,14 @@
}
if (dir.exists()) {
DecimalFormat formatter = new DecimalFormat("#.##");
+ float freeSpace = AndroidUtils.getFreeSpaceGb(dir);
+ float totalSpace = AndroidUtils.getTotalSpaceGb(dir);
+ if (freeSpace < 0 || totalSpace < 0) {
+ return "";
+ }
return String.format(getString(R.string.data_storage_space_description),
- formatter.format(AndroidUtils.getFreeSpaceGb(dir)),
- formatter.format(AndroidUtils.getTotalSpaceGb(dir)));
- }
- return "";
- }
-
- private String getFormattedMemoryUsedInfo(long bytes) {
- int type = 1;
- double used = (double) bytes / 1024;
- while (used > 1024) {
- ++type;
- used = used / 1024;
- }
- String formattedUsed = new DecimalFormat("#.##").format(used);
- if (type == 1) {
- return String.format(getString(R.string.shared_string_memory_kb_desc), formattedUsed);
- } else if (type == 2) {
- return String.format(getString(R.string.shared_string_memory_mb_desc), formattedUsed);
- } else if (type == 3){
- return String.format(getString(R.string.shared_string_memory_gb_desc), formattedUsed);
- } else if (type == 4){
- return String.format(getString(R.string.shared_string_memory_tb_desc), formattedUsed);
+ formatter.format(freeSpace),
+ formatter.format(totalSpace));
}
return "";
}
@@ -477,6 +482,7 @@
@Override
public void onMemoryInfoUpdate() {
updateAllSettings();
+ app.getSettings().OSMAND_USAGE_SPACE.set(itemsHolder.getTotalUsedBytes());
}
public static class MoveFilesToDifferentDirectory extends AsyncTask<Void, Void, Boolean> {
diff --git a/OsmAnd/src/net/osmand/plus/settings/DataStorageHelper.java b/OsmAnd/src/net/osmand/plus/settings/DataStorageHelper.java
new file mode 100644
index 0000000..f2b611f
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/settings/DataStorageHelper.java
@@ -0,0 +1,507 @@
+package net.osmand.plus.settings;
+
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import net.osmand.IndexConstants;
+import net.osmand.ValueHolder;
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.OsmandSettings;
+import net.osmand.plus.R;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+
+import static net.osmand.plus.settings.DataStorageMemoryItem.Directory;
+import static net.osmand.plus.settings.DataStorageMemoryItem.EXTENSIONS;
+import static net.osmand.plus.settings.DataStorageMemoryItem.PREFIX;
+
+public class DataStorageHelper implements Parcelable {
+ public final static String INTERNAL_STORAGE = "internal_storage";
+ public final static String EXTERNAL_STORAGE = "external_storage";
+ public final static String SHARED_STORAGE = "shared_storage";
+ public final static String MULTIUSER_STORAGE = "multiuser_storage";
+ public final static String MANUALLY_SPECIFIED = "manually_specified";
+
+ public final static String MAPS_MEMORY = "maps_memory_used";
+ public final static String SRTM_AND_HILLSHADE_MEMORY = "contour_lines_and_hillshade_memory";
+ public final static String TRACKS_MEMORY = "tracks_memory_used";
+ public final static String NOTES_MEMORY = "notes_memory_used";
+ public final static String TILES_MEMORY = "tiles_memory_used";
+ public final static String OTHER_MEMORY = "other_memory_used";
+
+ private ArrayList<DataStorageMenuItem> menuItems = new ArrayList<>();
+ private DataStorageMenuItem currentDataStorage;
+ private DataStorageMenuItem manuallySpecified;
+
+ private ArrayList<DataStorageMemoryItem> memoryItems = new ArrayList<>();
+ private DataStorageMemoryItem mapsMemory;
+ private DataStorageMemoryItem srtmAndHillshadeMemory;
+ private DataStorageMemoryItem tracksMemory;
+ private DataStorageMemoryItem notesMemory;
+ private DataStorageMemoryItem tilesMemory;
+ private DataStorageMemoryItem otherMemory;
+
+ private int currentStorageType;
+ private String currentStoragePath;
+
+ private DataStorageHelper(OsmandApplication app) {
+ prepareData(app);
+ }
+
+ public static DataStorageHelper refreshInfo(OsmandApplication app) {
+ return new DataStorageHelper(app);
+ }
+
+ private void prepareData(OsmandApplication app) {
+
+ if (app == null) {
+ return;
+ }
+
+ OsmandSettings settings = app.getSettings();
+
+ if (settings.getExternalStorageDirectoryTypeV19() >= 0) {
+ currentStorageType = settings.getExternalStorageDirectoryTypeV19();
+ } else {
+ ValueHolder<Integer> vh = new ValueHolder<Integer>();
+ if (vh.value != null && vh.value >= 0) {
+ currentStorageType = vh.value;
+ } else {
+ currentStorageType = 0;
+ }
+ }
+ currentStoragePath = settings.getExternalStorageDirectory().getAbsolutePath();
+
+ String path;
+ File dir;
+ int iconId;
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+
+ //internal storage
+ path = settings.getInternalAppPath().getAbsolutePath();
+ dir = new File(path);
+ iconId = R.drawable.ic_action_phone;
+
+ DataStorageMenuItem internalStorageItem = DataStorageMenuItem.builder()
+ .setKey(INTERNAL_STORAGE)
+ .setTitle(app.getString(R.string.storage_directory_internal_app))
+ .setDirectory(path)
+ .setDescription(app.getString(R.string.internal_app_storage_description))
+ .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_INTERNAL_FILE)
+ .setIconResId(iconId)
+ .createItem();
+ addItem(internalStorageItem);
+
+ //shared_storage
+ dir = settings.getDefaultInternalStorage();
+ path = dir.getAbsolutePath();
+ iconId = R.drawable.ic_action_phone;
+
+ DataStorageMenuItem sharedStorageItem = DataStorageMenuItem.builder()
+ .setKey(SHARED_STORAGE)
+ .setTitle(app.getString(R.string.storage_directory_shared))
+ .setDirectory(path)
+ .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_DEFAULT)
+ .setIconResId(iconId)
+ .createItem();
+ addItem(sharedStorageItem);
+
+ //external storage
+ File[] externals = app.getExternalFilesDirs(null);
+ if (externals != null) {
+ int i = 0;
+ for (File external : externals) {
+ if (external != null) {
+ ++i;
+ dir = external;
+ path = dir.getAbsolutePath();
+ iconId = getIconForStorageType(dir);
+ DataStorageMenuItem externalStorageItem = DataStorageMenuItem.builder()
+ .setKey(EXTERNAL_STORAGE + i)
+ .setTitle(app.getString(R.string.storage_directory_external) + " " + i)
+ .setDirectory(path)
+ .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_EXTERNAL_FILE)
+ .setIconResId(iconId)
+ .createItem();
+ addItem(externalStorageItem);
+ }
+ }
+ }
+
+ //multi user storage
+ File[] obbDirs = app.getObbDirs();
+ if (obbDirs != null) {
+ int i = 0;
+ for (File obb : obbDirs) {
+ if (obb != null) {
+ ++i;
+ dir = obb;
+ path = dir.getAbsolutePath();
+ iconId = getIconForStorageType(dir);
+ DataStorageMenuItem multiuserStorageItem = DataStorageMenuItem.builder()
+ .setKey(MULTIUSER_STORAGE + i)
+ .setTitle(app.getString(R.string.storage_directory_multiuser) + " " + i)
+ .setDirectory(path)
+ .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_OBB)
+ .setIconResId(iconId)
+ .createItem();
+ addItem(multiuserStorageItem);
+ }
+ }
+ }
+ }
+
+ //manually specified storage
+ manuallySpecified = DataStorageMenuItem.builder()
+ .setKey(MANUALLY_SPECIFIED)
+ .setTitle(app.getString(R.string.storage_directory_manual))
+ .setDirectory(currentStoragePath)
+ .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_SPECIFIED)
+ .setIconResId(R.drawable.ic_action_folder)
+ .createItem();
+ menuItems.add(manuallySpecified);
+
+ if (currentDataStorage == null) {
+ currentDataStorage = manuallySpecified;
+ }
+
+ initMemoryUsed(app);
+ }
+
+ private void initMemoryUsed(OsmandApplication app) {
+ mapsMemory = DataStorageMemoryItem.builder()
+ .setKey(MAPS_MEMORY)
+ .setExtensions(IndexConstants.BINARY_MAP_INDEX_EXT)
+ .setDirectories(
+ new Directory(app.getAppPath(IndexConstants.MAPS_PATH).getAbsolutePath(), false, EXTENSIONS, false),
+ new Directory(app.getAppPath(IndexConstants.ROADS_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false),
+ new Directory(app.getAppPath(IndexConstants.WIKI_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false),
+ new Directory(app.getAppPath(IndexConstants.WIKIVOYAGE_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false),
+ new Directory(app.getAppPath(IndexConstants.BACKUP_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false))
+ .createItem();
+ memoryItems.add(mapsMemory);
+
+ srtmAndHillshadeMemory = DataStorageMemoryItem.builder()
+ .setKey(SRTM_AND_HILLSHADE_MEMORY)
+ .setExtensions(IndexConstants.BINARY_SRTM_MAP_INDEX_EXT)
+ .setDirectories(
+ new Directory(app.getAppPath(IndexConstants.SRTM_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false),
+ new Directory(app.getAppPath(IndexConstants.TILES_INDEX_DIR).getAbsolutePath(), false, PREFIX, true))
+ .setPrefixes("Hillshade")
+ .createItem();
+ memoryItems.add(srtmAndHillshadeMemory);
+
+ tracksMemory = DataStorageMemoryItem.builder()
+ .setKey(TRACKS_MEMORY)
+// .setExtensions(".gpx", ".gpx.bz2")
+ .setDirectories(
+ new Directory(app.getAppPath(IndexConstants.GPX_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false))
+ .createItem();
+ memoryItems.add(tracksMemory);
+
+ notesMemory = DataStorageMemoryItem.builder()
+ .setKey(NOTES_MEMORY)
+// .setExtensions("")
+ .setDirectories(
+ new Directory(app.getAppPath(IndexConstants.AV_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false))
+ .createItem();
+ memoryItems.add(notesMemory);
+
+ tilesMemory = DataStorageMemoryItem.builder()
+ .setKey(TILES_MEMORY)
+// .setExtensions("")
+ .setDirectories(
+ new Directory(app.getAppPath(IndexConstants.TILES_INDEX_DIR).getAbsolutePath(), true, EXTENSIONS, false))
+ .createItem();
+ memoryItems.add(tilesMemory);
+
+ otherMemory = DataStorageMemoryItem.builder()
+ .setKey(OTHER_MEMORY)
+ .createItem();
+ memoryItems.add(otherMemory);
+ }
+
+ public ArrayList<DataStorageMenuItem> getStorageItems() {
+ return menuItems;
+ }
+
+ private int getIconForStorageType(File dir) {
+ return R.drawable.ic_action_folder;
+ }
+
+ public DataStorageMenuItem getCurrentStorage() {
+ return currentDataStorage;
+ }
+
+ private void addItem(DataStorageMenuItem item) {
+ if (currentStorageType == item.getType() && currentStoragePath.equals(item.getDirectory())) {
+ currentDataStorage = item;
+ }
+ menuItems.add(item);
+ }
+
+ public DataStorageMenuItem getManuallySpecified() {
+ return manuallySpecified;
+ }
+
+ public DataStorageMenuItem getStorage(String key) {
+ if (menuItems != null && key != null) {
+ for (DataStorageMenuItem menuItem : menuItems) {
+ if (key.equals(menuItem.getKey())) {
+ return menuItem;
+ }
+ }
+ }
+ return null;
+ }
+
+ public int getCurrentType() {
+ return currentStorageType;
+ }
+
+ public String getCurrentPath() {
+ return currentStoragePath;
+ }
+
+ public ArrayList<DataStorageMemoryItem> getMemoryInfoItems() {
+ return memoryItems;
+ }
+
+ public RefreshMemoryUsedInfo calculateMemoryUsedInfo(UpdateMemoryInfoUIAdapter listener) {
+ File rootDir = new File(currentStoragePath);
+ RefreshMemoryUsedInfo task = new RefreshMemoryUsedInfo(listener, otherMemory, rootDir, null, null);
+ task.execute(mapsMemory, srtmAndHillshadeMemory, tracksMemory, notesMemory);
+ return task;
+ }
+
+ public RefreshMemoryUsedInfo calculateTilesMemoryUsed(UpdateMemoryInfoUIAdapter listener) {
+ File rootDir = new File(tilesMemory.getDirectories()[0].getAbsolutePath());
+ RefreshMemoryUsedInfo task = new RefreshMemoryUsedInfo(listener, otherMemory, rootDir, null, srtmAndHillshadeMemory.getPrefixes());
+ task.execute(tilesMemory);
+ return task;
+ }
+
+ public static class RefreshMemoryUsedInfo extends AsyncTask<DataStorageMemoryItem, Void, Void> {
+ private UpdateMemoryInfoUIAdapter listener;
+ private File rootDir;
+ private DataStorageMemoryItem otherMemory;
+ private String[] directoriesToAvoid;
+ private String[] prefixesToAvoid;
+
+ public RefreshMemoryUsedInfo(UpdateMemoryInfoUIAdapter listener, DataStorageMemoryItem otherMemory, File rootDir, String[] directoriesToAvoid, String[] prefixesToAvoid) {
+ this.listener = listener;
+ this.otherMemory = otherMemory;
+ this.rootDir = rootDir;
+ this.directoriesToAvoid = directoriesToAvoid;
+ this.prefixesToAvoid = prefixesToAvoid;
+ }
+
+ @Override
+ protected Void doInBackground(DataStorageMemoryItem... items) {
+ if (rootDir.canRead()) {
+ calculateMultiTypes(rootDir, items);
+ }
+ return null;
+ }
+
+ private void calculateMultiTypes(File rootDir, DataStorageMemoryItem... items) {
+ File[] subFiles = rootDir.listFiles();
+
+ for (File file : subFiles) {
+ if (isCancelled()) {
+ break;
+ }
+ nextFile : {
+ if (file.isDirectory()) {
+ //check current directory should be avoid
+ if (directoriesToAvoid != null) {
+ for (String directoryToAvoid : directoriesToAvoid) {
+ if (file.getAbsolutePath().equals(directoryToAvoid)) {
+ break nextFile;
+ }
+ }
+ }
+ //check current directory matched items type
+ for (DataStorageMemoryItem item : items) {
+ Directory[] directories = item.getDirectories();
+ if (directories == null) {
+ continue;
+ }
+ for (Directory dir : directories) {
+ if (file.getAbsolutePath().equals(dir.getAbsolutePath())
+ || (file.getAbsolutePath().startsWith(dir.getAbsolutePath()) && dir.isGoDeeper())) {
+ calculateMultiTypes(file, items);
+ break nextFile;
+ }
+ }
+ }
+ //current directory did not match to any type
+ otherMemory.addBytes(getDirectorySize(file));
+ } else if (file.isFile()) {
+ //check current file should be avoid
+ if (prefixesToAvoid != null) {
+ for (String prefixToAvoid : prefixesToAvoid) {
+ if (file.getName().toLowerCase().startsWith(prefixToAvoid.toLowerCase())) {
+ break nextFile;
+ }
+ }
+ }
+ //check current file matched items type
+ for (DataStorageMemoryItem item : items) {
+ Directory[] directories = item.getDirectories();
+ if (directories == null) {
+ continue;
+ }
+ for (Directory dir : directories) {
+ if (rootDir.getAbsolutePath().equals(dir.getAbsolutePath())
+ || (rootDir.getAbsolutePath().startsWith(dir.getAbsolutePath()) && dir.isGoDeeper())) {
+ int checkingType = dir.getCheckingType();
+ switch (checkingType) {
+ case EXTENSIONS : {
+ String[] extensions = item.getExtensions();
+ if (extensions != null) {
+ for (String extension : extensions) {
+ if (file.getAbsolutePath().endsWith(extension)) {
+ item.addBytes(file.length());
+ break nextFile;
+ }
+ }
+ } else {
+ item.addBytes(file.length());
+ break nextFile;
+ }
+ break ;
+ }
+ case PREFIX : {
+ String[] prefixes = item.getPrefixes();
+ if (prefixes != null) {
+ for (String prefix : prefixes) {
+ if (file.getName().toLowerCase().startsWith(prefix.toLowerCase())) {
+ item.addBytes(file.length());
+ break nextFile;
+ }
+ }
+ } else {
+ item.addBytes(file.length());
+ break nextFile;
+ }
+ break ;
+ }
+ }
+ if (dir.isSkipOther()) {
+ break nextFile;
+ }
+ }
+ }
+ }
+ //current file did not match any type
+ otherMemory.addBytes(file.length());
+ }
+ }
+ publishProgress();
+ }
+ }
+
+ private long getDirectorySize(File dir) {
+ long bytes = 0;
+ if (dir.isDirectory()) {
+ File[] files = dir.listFiles();
+ for (File file : files) {
+ if (isCancelled()) {
+ break;
+ }
+ if (file.isDirectory()) {
+ bytes += getDirectorySize(file);
+ } else if (file.isFile()) {
+ bytes += file.length();
+ }
+ }
+ }
+ return bytes;
+ }
+
+ @Override
+ protected void onProgressUpdate(Void... values) {
+ super.onProgressUpdate(values);
+ if (listener != null) {
+ listener.onMemoryInfoUpdate();
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ if (listener != null) {
+ listener.onMemoryInfoUpdate();
+ }
+ }
+ }
+
+ public long getTotalUsedBytes() {
+ long total = 0;
+ if (memoryItems != null && memoryItems.size() > 0) {
+ for (DataStorageMemoryItem mi : memoryItems) {
+ total += mi.getUsedMemoryBytes();
+ }
+ return total;
+ }
+ return -1;
+ }
+
+ public static String getFormattedMemoryInfo(long bytes, String[] formatStrings) {
+ int type = 0;
+ double memory = (double) bytes / 1024;
+ while (memory > 1024 && type < formatStrings.length) {
+ ++type;
+ memory = memory / 1024;
+ }
+ String formattedUsed = new DecimalFormat("#.##").format(memory);
+ return String.format(formatStrings[type], formattedUsed);
+ }
+
+ public interface UpdateMemoryInfoUIAdapter {
+
+ void onMemoryInfoUpdate();
+
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ private DataStorageHelper(Parcel in) {
+ menuItems = in.readArrayList(DataStorageMenuItem.class.getClassLoader());
+ currentDataStorage = in.readParcelable(DataStorageMenuItem.class.getClassLoader());
+ memoryItems = in.readArrayList(DataStorageMemoryItem.class.getClassLoader());
+ currentStorageType = in.readInt();
+ currentStoragePath = in.readString();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeArray(menuItems.toArray());
+ dest.writeParcelable(currentDataStorage, flags);
+ dest.writeArray(memoryItems.toArray());
+ dest.writeInt(currentStorageType);
+ dest.writeString(currentStoragePath);
+ }
+
+ public static final Parcelable.Creator<DataStorageHelper> CREATOR = new Parcelable.Creator<DataStorageHelper>() {
+
+ @Override
+ public DataStorageHelper createFromParcel(Parcel source) {
+ return new DataStorageHelper(source);
+ }
+
+ @Override
+ public DataStorageHelper[] newArray(int size) {
+ return new DataStorageHelper[size];
+ }
+ };
+}
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/settings/DataStorageItemsHolder.java b/OsmAnd/src/net/osmand/plus/settings/DataStorageItemsHolder.java
deleted file mode 100644
index 6c1f4a8..0000000
--- a/OsmAnd/src/net/osmand/plus/settings/DataStorageItemsHolder.java
+++ /dev/null
@@ -1,437 +0,0 @@
-package net.osmand.plus.settings;
-
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import net.osmand.IndexConstants;
-import net.osmand.ValueHolder;
-import net.osmand.plus.OsmandApplication;
-import net.osmand.plus.OsmandSettings;
-import net.osmand.plus.R;
-
-import java.io.File;
-import java.util.ArrayList;
-
-public class DataStorageItemsHolder implements Parcelable {
- public final static String INTERNAL_STORAGE = "internal_storage";
- public final static String EXTERNAL_STORAGE = "external_storage";
- public final static String SHARED_STORAGE = "shared_storage";
- public final static String MULTIUSER_STORAGE = "multiuser_storage";
- public final static String MANUALLY_SPECIFIED = "manually_specified";
-
- public final static String MAPS_MEMORY = "maps_memory_used";
- public final static String TRACKS_MEMORY = "tracks_memory_used";
- public final static String NOTES_MEMORY = "notes_memory_used";
- public final static String TILES_MEMORY = "tiles_memory_used";
- public final static String OTHER_MEMORY = "other_memory_used";
-
- private ArrayList<DataStorageMenuItem> menuItems = new ArrayList<>();
- private DataStorageMenuItem currentDataStorage;
- private DataStorageMenuItem manuallySpecified;
-
- private ArrayList<DataStorageMemoryItem> memoryItems = new ArrayList<>();
- private DataStorageMemoryItem mapsMemory;
- private DataStorageMemoryItem tracksMemory;
- private DataStorageMemoryItem notesMemory;
- private DataStorageMemoryItem tilesMemory;
- private DataStorageMemoryItem otherMemory;
-
- private int currentStorageType;
- private String currentStoragePath;
-
- private DataStorageItemsHolder(OsmandApplication app) {
- prepareData(app);
- }
-
- public static DataStorageItemsHolder refreshInfo(OsmandApplication app) {
- return new DataStorageItemsHolder(app);
- }
-
- private void prepareData(OsmandApplication app) {
-
- if (app == null) {
- return;
- }
-
- OsmandSettings settings = app.getSettings();
-
- if (settings.getExternalStorageDirectoryTypeV19() >= 0) {
- currentStorageType = settings.getExternalStorageDirectoryTypeV19();
- } else {
- ValueHolder<Integer> vh = new ValueHolder<Integer>();
- if (vh.value != null && vh.value >= 0) {
- currentStorageType = vh.value;
- } else {
- currentStorageType = 0;
- }
- }
- currentStoragePath = settings.getExternalStorageDirectory().getAbsolutePath();
-
- String path;
- File dir;
- int iconId;
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-
- //internal storage
- path = settings.getInternalAppPath().getAbsolutePath();
- dir = new File(path);
- iconId = R.drawable.ic_action_phone;
-
- DataStorageMenuItem internalStorageItem = DataStorageMenuItem.builder()
- .setKey(INTERNAL_STORAGE)
- .setTitle(app.getString(R.string.storage_directory_internal_app))
- .setDirectory(path)
- .setDescription(app.getString(R.string.internal_app_storage_description))
- .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_INTERNAL_FILE)
- .setIconResId(iconId)
- .createItem();
- addItem(internalStorageItem);
-
- //shared_storage
- dir = settings.getDefaultInternalStorage();
- path = dir.getAbsolutePath();
- iconId = R.drawable.ic_action_phone;
-
- DataStorageMenuItem sharedStorageItem = DataStorageMenuItem.builder()
- .setKey(SHARED_STORAGE)
- .setTitle(app.getString(R.string.storage_directory_shared))
- .setDirectory(path)
- .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_DEFAULT)
- .setIconResId(iconId)
- .createItem();
- addItem(sharedStorageItem);
-
- //external storage
- File[] externals = app.getExternalFilesDirs(null);
- if (externals != null) {
- int i = 0;
- for (File external : externals) {
- if (external != null) {
- ++i;
- dir = external;
- path = dir.getAbsolutePath();
- iconId = getIconForStorageType(dir);
- DataStorageMenuItem externalStorageItem = DataStorageMenuItem.builder()
- .setKey(EXTERNAL_STORAGE + i)
- .setTitle(app.getString(R.string.storage_directory_external) + " " + i)
- .setDirectory(path)
- .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_EXTERNAL_FILE)
- .setIconResId(iconId)
- .createItem();
- addItem(externalStorageItem);
- }
- }
- }
-
- //multi user storage
- File[] obbDirs = app.getObbDirs();
- if (obbDirs != null) {
- int i = 0;
- for (File obb : obbDirs) {
- if (obb != null) {
- ++i;
- dir = obb;
- path = dir.getAbsolutePath();
- iconId = getIconForStorageType(dir);
- DataStorageMenuItem multiuserStorageItem = DataStorageMenuItem.builder()
- .setKey(MULTIUSER_STORAGE + i)
- .setTitle(app.getString(R.string.storage_directory_multiuser) + " " + i)
- .setDirectory(path)
- .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_OBB)
- .setIconResId(iconId)
- .createItem();
- addItem(multiuserStorageItem);
- }
- }
- }
- }
-
- //manually specified storage
- manuallySpecified = DataStorageMenuItem.builder()
- .setKey(MANUALLY_SPECIFIED)
- .setTitle(app.getString(R.string.storage_directory_manual))
- .setDirectory(currentStoragePath)
- .setType(OsmandSettings.EXTERNAL_STORAGE_TYPE_SPECIFIED)
- .setIconResId(R.drawable.ic_action_folder)
- .createItem();
- menuItems.add(manuallySpecified);
-
- if (currentDataStorage == null) {
- currentDataStorage = manuallySpecified;
- }
-
- initMemoryUsed(app);
- }
-
- private void initMemoryUsed(OsmandApplication app) {
- mapsMemory = DataStorageMemoryItem.builder()
- .setKey(MAPS_MEMORY)
- .setExtensions(IndexConstants.BINARY_MAP_INDEX_EXT, IndexConstants.BINARY_MAP_INDEX_EXT_ZIP)
- .setDirectories(
- app.getAppPath(IndexConstants.MAPS_PATH).getAbsolutePath(),
- app.getAppPath(IndexConstants.ROADS_INDEX_DIR).getAbsolutePath(),
- app.getAppPath(IndexConstants.SRTM_INDEX_DIR).getAbsolutePath(),
- app.getAppPath(IndexConstants.WIKI_INDEX_DIR).getAbsolutePath(),
- app.getAppPath(IndexConstants.WIKIVOYAGE_INDEX_DIR).getAbsolutePath(),
- app.getAppPath(IndexConstants.BACKUP_INDEX_DIR).getAbsolutePath())
- .createItem();
- memoryItems.add(mapsMemory);
-
- tracksMemory = DataStorageMemoryItem.builder()
- .setKey(TRACKS_MEMORY)
-// .setExtensions(".gpx", ".gpx.bz2")
- .setDirectories(app.getAppPath(IndexConstants.GPX_INDEX_DIR).getAbsolutePath())
- .createItem();
- memoryItems.add(tracksMemory);
-
- notesMemory = DataStorageMemoryItem.builder()
- .setKey(NOTES_MEMORY)
-// .setExtensions("")
- .setDirectories(app.getAppPath(IndexConstants.AV_INDEX_DIR).getAbsolutePath())
- .createItem();
- memoryItems.add(notesMemory);
-
- tilesMemory = DataStorageMemoryItem.builder()
- .setKey(TILES_MEMORY)
-// .setExtensions("")
- .setDirectories(app.getAppPath(IndexConstants.TILES_INDEX_DIR).getAbsolutePath())
- .createItem();
- memoryItems.add(tilesMemory);
-
- otherMemory = DataStorageMemoryItem.builder()
- .setKey(OTHER_MEMORY)
- .createItem();
- memoryItems.add(otherMemory);
- }
-
- public ArrayList<DataStorageMenuItem> getStorageItems() {
- return menuItems;
- }
-
- private int getIconForStorageType(File dir) {
- return R.drawable.ic_action_folder;
- }
-
- public DataStorageMenuItem getCurrentStorage() {
- return currentDataStorage;
- }
-
- private void addItem(DataStorageMenuItem item) {
- if (currentStorageType == item.getType() && currentStoragePath.equals(item.getDirectory())) {
- currentDataStorage = item;
- }
- menuItems.add(item);
- }
-
- public DataStorageMenuItem getManuallySpecified() {
- return manuallySpecified;
- }
-
- public DataStorageMenuItem getStorage(String key) {
- if (menuItems != null && key != null) {
- for (DataStorageMenuItem menuItem : menuItems) {
- if (key.equals(menuItem.getKey())) {
- return menuItem;
- }
- }
- }
- return null;
- }
-
- public int getCurrentType() {
- return currentStorageType;
- }
-
- public String getCurrentPath() {
- return currentStoragePath;
- }
-
- public ArrayList<DataStorageMemoryItem> getMemoryInfoItems() {
- return memoryItems;
- }
-
- public RefreshMemoryUsedInfo calculateMemoryUsedInfo(UpdateMemoryInfoUIAdapter listener) {
- File rootDir = new File(currentStoragePath);
- RefreshMemoryUsedInfo task = new RefreshMemoryUsedInfo(listener, otherMemory, rootDir, tilesMemory.getDirectories());
- task.execute(mapsMemory, tracksMemory, notesMemory);
- return task;
- }
-
- public RefreshMemoryUsedInfo calculateTilesMemoryUsed(UpdateMemoryInfoUIAdapter listener) {
- File rootDir = new File(tilesMemory.getDirectories()[0]);
- RefreshMemoryUsedInfo task = new RefreshMemoryUsedInfo(listener, otherMemory, rootDir);
- task.execute(tilesMemory);
- return task;
- }
-
- public static class RefreshMemoryUsedInfo extends AsyncTask<DataStorageMemoryItem, Void, Void> {
- private UpdateMemoryInfoUIAdapter listener;
- private File rootDir;
- private DataStorageMemoryItem otherMemory;
- private String[] directoriesToAvoid;
-
- public RefreshMemoryUsedInfo(UpdateMemoryInfoUIAdapter listener, DataStorageMemoryItem otherMemory, File rootDir, String... directoriesToAvoid) {
- this.listener = listener;
- this.otherMemory = otherMemory;
- this.rootDir = rootDir;
- this.directoriesToAvoid = directoriesToAvoid;
- }
-
- @Override
- protected Void doInBackground(DataStorageMemoryItem... items) {
- if (items.length == 1) {
- DataStorageMemoryItem item = items[0];
- item.addBytes(getDirectorySize(rootDir, item.getExtensions()));
- } else {
- calculateMultiTypes(items);
- }
- return null;
- }
-
- private void calculateMultiTypes(DataStorageMemoryItem[] items) {
- File[] files = rootDir.listFiles();
-
- for (File f : files) {
- boolean matched = false;
- if (f.isDirectory()) {
- boolean avoid = false;
- for (String directoryToAvoid : directoriesToAvoid) {
- if (f.getAbsolutePath().equals(directoryToAvoid)) {
- avoid = true;
- break;
- }
- }
- if (!avoid) {
- for (DataStorageMemoryItem item : items) {
- String[] directories = item.getDirectories();
- if (directories != null) {
- for (String directory : directories) {
- if (f.getAbsolutePath().equals(directory)) {
- item.addBytes(getDirectorySize(f, item.getExtensions()));
- matched = true;
- break;
- }
- }
- }
- }
- if (!matched) {
- otherMemory.addBytes(getDirectorySize(f, null));
- }
- }
- } else if (f.isFile()) {
- for (DataStorageMemoryItem item : items) {
- String[] extensions = item.getExtensions();
- if (extensions != null) {
- for (String extension : extensions) {
- if (f.getAbsolutePath().endsWith(extension)) {
- item.addBytes(f.length());
- matched = true;
- break;
- }
- }
- }
- }
- if (!matched) {
- otherMemory.addBytes(f.length());
- }
- publishProgress();
- }
- }
- }
-
- private long getDirectorySize(File dir, String[] extensions) {
- long bytes = 0;
- if (dir.isDirectory()) {
- File[] files = dir.listFiles();
- for (File file : files) {
- if (isCancelled()) {
- break;
- }
- if (file.isDirectory()) {
- bytes += getDirectorySize(file, extensions);
- } else if (file.isFile()) {
- //check file extension
- boolean matched = false;
- if (extensions != null) {
- for (String extension : extensions) {
- if (file.getName().endsWith(extension)) {
- matched = true;
- break;
- }
- }
- } else {
- matched = true;
- }
- if (matched) {
- bytes += file.length();
- } else {
- otherMemory.addBytes(file.length());
- }
- publishProgress();
- }
- }
- }
- return bytes;
- }
-
- @Override
- protected void onProgressUpdate(Void... values) {
- super.onProgressUpdate(values);
- if (listener != null) {
- listener.onMemoryInfoUpdate();
- }
- }
-
- @Override
- protected void onPostExecute(Void aVoid) {
- super.onPostExecute(aVoid);
- if (listener != null) {
- listener.onMemoryInfoUpdate();
- }
- }
- }
-
- public interface UpdateMemoryInfoUIAdapter {
-
- void onMemoryInfoUpdate();
-
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- private DataStorageItemsHolder(Parcel in) {
- menuItems = in.readArrayList(DataStorageMenuItem.class.getClassLoader());
- currentDataStorage = in.readParcelable(DataStorageMenuItem.class.getClassLoader());
- memoryItems = in.readArrayList(DataStorageMemoryItem.class.getClassLoader());
- currentStorageType = in.readInt();
- currentStoragePath = in.readString();
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeArray(menuItems.toArray());
- dest.writeParcelable(currentDataStorage, flags);
- dest.writeArray(memoryItems.toArray());
- dest.writeInt(currentStorageType);
- dest.writeString(currentStoragePath);
- }
-
- public static final Parcelable.Creator<DataStorageItemsHolder> CREATOR = new Parcelable.Creator<DataStorageItemsHolder>() {
-
- @Override
- public DataStorageItemsHolder createFromParcel(Parcel source) {
- return new DataStorageItemsHolder(source);
- }
-
- @Override
- public DataStorageItemsHolder[] newArray(int size) {
- return new DataStorageItemsHolder[size];
- }
- };
-}
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/settings/DataStorageMemoryItem.java b/OsmAnd/src/net/osmand/plus/settings/DataStorageMemoryItem.java
index a13d87f..dd75764 100644
--- a/OsmAnd/src/net/osmand/plus/settings/DataStorageMemoryItem.java
+++ b/OsmAnd/src/net/osmand/plus/settings/DataStorageMemoryItem.java
@@ -4,14 +4,19 @@
import android.os.Parcelable;
public class DataStorageMemoryItem implements Parcelable {
+ public final static int EXTENSIONS = 0;
+ public final static int PREFIX = 1;
+
private String key;
private String[] extensions;
- private String[] directories;
+ private String[] prefixes;
+ private Directory[] directories;
private long usedMemoryBytes;
- private DataStorageMemoryItem(String key, String[] extensions, long usedMemoryBytes, String[] directories) {
+ private DataStorageMemoryItem(String key, String[] extensions, String[] prefixes, long usedMemoryBytes, Directory[] directories) {
this.key = key;
this.extensions = extensions;
+ this.prefixes = prefixes;
this.usedMemoryBytes = usedMemoryBytes;
this.directories = directories;
}
@@ -19,7 +24,8 @@
private DataStorageMemoryItem(Parcel in) {
key = in.readString();
in.readStringArray(extensions);
- in.readStringArray(directories);
+ in.writeStringArray(prefixes);
+ directories = (Directory[]) in.readArray(Directory.class.getClassLoader());
usedMemoryBytes = in.readLong();
}
@@ -35,10 +41,6 @@
this.key = key;
}
- public void setUsedMemoryBytes(long usedMemoryBytes) {
- this.usedMemoryBytes = usedMemoryBytes;
- }
-
public static DataStorageMemoryItemBuilder builder() {
return new DataStorageMemoryItemBuilder();
}
@@ -47,16 +49,16 @@
return extensions;
}
- public void setExtensions(String[] extensions) {
- this.extensions = extensions;
+ public String[] getPrefixes() {
+ return prefixes;
}
- public String[] getDirectories() {
+ public Directory[] getDirectories() {
return directories;
}
- public void setDirectories(String[] directories) {
- this.directories = directories;
+ public void addBytes(long bytes) {
+ this.usedMemoryBytes += bytes;
}
@Override
@@ -68,7 +70,8 @@
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(key);
dest.writeStringArray(extensions);
- dest.writeStringArray(directories);
+ dest.writeStringArray(prefixes);
+ dest.writeArray(directories);
dest.writeLong(usedMemoryBytes);
}
@@ -88,7 +91,8 @@
public static class DataStorageMemoryItemBuilder {
private String key;
private String[] extensions;
- private String[] directories;
+ private String[] prefixes;
+ private Directory[] directories;
private long usedMemoryBytes;
public DataStorageMemoryItemBuilder setKey(String key) {
@@ -100,8 +104,13 @@
this.extensions = extensions;
return this;
}
+
+ public DataStorageMemoryItemBuilder setPrefixes(String ... prefixes) {
+ this.prefixes = prefixes;
+ return this;
+ }
- public DataStorageMemoryItemBuilder setDirectories(String ... directories) {
+ public DataStorageMemoryItemBuilder setDirectories(Directory ... directories) {
this.directories = directories;
return this;
}
@@ -112,11 +121,70 @@
}
public DataStorageMemoryItem createItem() {
- return new DataStorageMemoryItem(key, extensions, usedMemoryBytes, directories);
+ return new DataStorageMemoryItem(key, extensions, prefixes, usedMemoryBytes, directories);
}
}
- public void addBytes(long bytes) {
- this.usedMemoryBytes += bytes;
+ public static class Directory implements Parcelable {
+ private String absolutePath;
+ private boolean goDeeper;
+ private int checkingType;
+ private boolean skipOther;
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(absolutePath);
+ dest.writeInt(goDeeper ? 1 : 0);
+ dest.writeInt(checkingType);
+ dest.writeInt(skipOther ? 1 : 0);
+ }
+
+ public Directory(String absolutePath, boolean goDeeper, int checkingType, boolean skipOther) {
+ this.absolutePath = absolutePath;
+ this.goDeeper = goDeeper;
+ this.checkingType = checkingType;
+ this.skipOther = skipOther;
+ }
+
+ public String getAbsolutePath() {
+ return absolutePath;
+ }
+
+ public boolean isGoDeeper() {
+ return goDeeper;
+ }
+
+ public int getCheckingType() {
+ return checkingType;
+ }
+
+ public boolean isSkipOther() {
+ return skipOther;
+ }
+
+ private Directory(Parcel in) {
+ absolutePath = in.readString();
+ goDeeper = in.readInt() == 1;
+ checkingType = in.readInt();
+ skipOther = in.readInt() == 1;
+ }
+
+ public static final Parcelable.Creator<Directory> CREATOR = new Parcelable.Creator<Directory>() {
+
+ @Override
+ public Directory createFromParcel(Parcel source) {
+ return new Directory(source);
+ }
+
+ @Override
+ public Directory[] newArray(int size) {
+ return new Directory[size];
+ }
+ };
}
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/GlobalSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/GlobalSettingsFragment.java
index d39263f..f9acdae 100644
--- a/OsmAnd/src/net/osmand/plus/settings/GlobalSettingsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/GlobalSettingsFragment.java
@@ -7,7 +7,6 @@
import android.support.v7.preference.SwitchPreferenceCompat;
import android.util.Pair;
-import net.osmand.AndroidUtils;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
@@ -17,9 +16,6 @@
import net.osmand.plus.settings.preferences.ListPreferenceEx;
import net.osmand.plus.settings.preferences.SwitchPreferenceEx;
-import java.io.File;
-import java.text.DecimalFormat;
-
public class GlobalSettingsFragment extends BaseSettingsFragment implements SendAnalyticsBottomSheetDialogFragment.OnSendAnalyticsPrefsUpdate, OnPreferenceChanged {
@@ -141,14 +137,24 @@
Preference externalStorageDir = (Preference) findPreference(OsmandSettings.EXTERNAL_STORAGE_DIR);
externalStorageDir.setIcon(getContentIcon(R.drawable.ic_action_folder));
- DataStorageItemsHolder holder = DataStorageItemsHolder.refreshInfo(app);
+ DataStorageHelper holder = DataStorageHelper.refreshInfo(app);
DataStorageMenuItem currentStorage = holder.getCurrentStorage();
- File dir = new File(currentStorage.getDirectory());
- DecimalFormat formatter = new DecimalFormat("#.##");
- String summary = String.format(getString(R.string.data_storage_preference_summary),
- currentStorage.getTitle(),
- formatter.format(AndroidUtils.getUsedSpaceGb(dir)));
- externalStorageDir.setSummary(summary);
+ long totalUsed = app.getSettings().OSMAND_USAGE_SPACE.get();
+ if (totalUsed > 0) {
+ String[] usedMemoryFormats = new String[] {
+ getString(R.string.shared_string_memory_used_kb_desc),
+ getString(R.string.shared_string_memory_used_mb_desc),
+ getString(R.string.shared_string_memory_used_gb_desc),
+ getString(R.string.shared_string_memory_used_tb_desc)
+ };
+ String sTotalUsed = DataStorageHelper.getFormattedMemoryInfo(totalUsed, usedMemoryFormats);
+ String summary = String.format(getString(R.string.data_storage_preference_summary),
+ currentStorage.getTitle(),
+ sTotalUsed);
+ externalStorageDir.setSummary(summary);
+ } else {
+ externalStorageDir.setSummary(currentStorage.getTitle());
+ }
}
private void setupSendAnonymousDataPref() {
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeDataStorageBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeDataStorageBottomSheet.java
index 27016b7..6df896b 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeDataStorageBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ChangeDataStorageBottomSheet.java
@@ -24,7 +24,7 @@
import java.io.File;
-import static net.osmand.plus.settings.DataStorageItemsHolder.MANUALLY_SPECIFIED;
+import static net.osmand.plus.settings.DataStorageHelper.MANUALLY_SPECIFIED;
public class ChangeDataStorageBottomSheet extends BasePreferenceBottomSheet {
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java
index c9efa0d..a64724f 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java
@@ -155,7 +155,7 @@
protected void onRightBottomButtonClick() {
Fragment fragment = getTargetFragment();
if (fragment instanceof BaseSettingsFragment) {
- String newPath = editText.getText().toString();
+ String newPath = editText.getText().toString().trim();
if (!newPath.equals("")) {
boolean pathChanged = !newPath.equals(currentPath);
Bundle bundle = new Bundle();
diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java
index 2b97229..2380f28 100644
--- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java
@@ -75,9 +75,9 @@
public class MapControlsLayer extends OsmandMapLayer {
private static final int TIMEOUT_TO_SHOW_BUTTONS = 7000;
- private static final int REQUEST_LOCATION_FOR_NAVIGATION_PERMISSION = 200;
- private static final int REQUEST_LOCATION_FOR_NAVIGATION_FAB_PERMISSION = 201;
- private static final int REQUEST_LOCATION_FOR_ADD_DESTINATION_PERMISSION = 202;
+ public static final int REQUEST_LOCATION_FOR_NAVIGATION_PERMISSION = 200;
+ public static final int REQUEST_LOCATION_FOR_NAVIGATION_FAB_PERMISSION = 201;
+ public static final int REQUEST_LOCATION_FOR_ADD_DESTINATION_PERMISSION = 202;
private static final int COMPASS_PRESSED_TIME_INTERVAL_MS = 5000;