conflict resolved
This commit is contained in:
commit
79b542384d
174 changed files with 3497 additions and 2987 deletions
|
@ -27,7 +27,7 @@ public abstract class MapRenderingTypes {
|
|||
|
||||
private static final Log log = PlatformUtil.getLog(MapRenderingTypes.class);
|
||||
public static final String[] langs = new String[] { "af", "als", "ar", "az", "be", "bg", "bn", "bpy", "br", "bs", "ca", "ceb", "cs", "cy", "da", "de", "el", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gl", "he", "hi", "hsb",
|
||||
"hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lo", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sc", "sh", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh", "zh-hans", "zh-hant", };
|
||||
"hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "kn", "ko", "ku", "la", "lb", "lo", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sc", "sh", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh", "zh-hans", "zh-hant", };
|
||||
|
||||
|
||||
public final static byte RESTRICTION_NO_RIGHT_TURN = 1;
|
||||
|
|
|
@ -267,4 +267,8 @@
|
|||
<string name="status_widget_title">تتبع حالة أوسماند</string>
|
||||
<string name="back_to_osmand">العودة إلى OsmAnd</string>
|
||||
<string name="duration_ago">%1$s منذ</string>
|
||||
<string name="send_report">إرسال التقرير</string>
|
||||
<string name="shared_string_export">تصدير</string>
|
||||
<string name="logcat_buffer">سجل الاستخدام</string>
|
||||
<string name="logcat_buffer_descr">التحقق من السجلات التفصيلية للتطبيق ومشاركتها</string>
|
||||
</resources>
|
|
@ -268,4 +268,8 @@
|
|||
<string name="last_response_duration">Última respuesta: Hace %1$s</string>
|
||||
<string name="duration_ago">Hace %1$s</string>
|
||||
<string name="shared_string_error_short">ERR</string>
|
||||
<string name="shared_string_export">Exportar</string>
|
||||
<string name="logcat_buffer">Búfer de Logcat</string>
|
||||
<string name="logcat_buffer_descr">Comprueba y comparte los registros detallados de la aplicación</string>
|
||||
<string name="send_report">Enviar informe</string>
|
||||
</resources>
|
|
@ -267,4 +267,8 @@
|
|||
<string name="last_response_date">Última resposta: %1$s</string>
|
||||
<string name="last_update_from_telegram_date">Última atualização do Telegram: %1$s</string>
|
||||
<string name="shared_string_error_short">ERR</string>
|
||||
<string name="send_report">Enviar o relatório</string>
|
||||
<string name="shared_string_export">Exportar</string>
|
||||
<string name="logcat_buffer">Buffer de logcat</string>
|
||||
<string name="logcat_buffer_descr">Verifique e compartilhe registos detalhados da app</string>
|
||||
</resources>
|
24
OsmAnd/res/drawable/ic_action_route_part.xml
Normal file
24
OsmAnd/res/drawable/ic_action_route_part.xml
Normal file
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M7,13C5.8954,13 5,13.8954 5,15C5,16.1046 5.8954,17 7,17H20C20.5523,17 21,17.4477 21,18C21,18.5523 20.5523,19 20,19H7C4.7909,19 3,17.2091 3,15C3,12.7909 4.7909,11 7,11H16.5C17.0523,11 17.5,11.4477 17.5,12C17.5,12.5523 17.0523,13 16.5,13H7Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M21,18C21,19.1046 20.1046,20 19,20C17.8954,20 17,19.1046 17,18C17,16.8954 17.8954,16 19,16C20.1046,16 21,16.8954 21,18Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M3,6C3,4.3432 4.3432,3 6,3C7.3062,3 8.4175,3.8348 8.8293,5H17C19.2091,5 21,6.7909 21,9C21,11.2091 19.2091,13 17,13H16.5C15.9477,13 15.5,12.5523 15.5,12C15.5,11.4477 15.9477,11 16.5,11H17C18.1046,11 19,10.1046 19,9C19,7.8954 18.1046,7 17,7H8.8293C8.4175,8.1652 7.3062,9 6,9C4.3432,9 3,7.6568 3,6ZM7,6C7,5.4477 6.5523,5 6,5C5.4477,5 5,5.4477 5,6C5,6.5523 5.4477,7 6,7C6.5523,7 7,6.5523 7,6Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M7,6C7,6.5523 6.5523,7 6,7C5.4477,7 5,6.5523 5,6C5,5.4477 5.4477,5 6,5C6.5523,5 7,5.4477 7,6Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
</vector>
|
39
OsmAnd/res/drawable/ic_logo_openplacereview.xml
Normal file
39
OsmAnd/res/drawable/ic_logo_openplacereview.xml
Normal file
|
@ -0,0 +1,39 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="32dp"
|
||||
android:height="32dp"
|
||||
android:viewportWidth="32"
|
||||
android:viewportHeight="32">
|
||||
<path
|
||||
android:pathData="M16,16m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M23,22L21,22A1,1 0,0 0,20 23L20,23A1,1 0,0 0,21 24L23,24A1,1 0,0 0,24 23L24,23A1,1 0,0 0,23 22z"
|
||||
android:fillColor="#8AC826"/>
|
||||
<path
|
||||
android:pathData="M9,10L11,10A1,1 0,0 1,12 11L12,11A1,1 0,0 1,11 12L9,12A1,1 0,0 1,8 11L8,11A1,1 0,0 1,9 10z"
|
||||
android:fillColor="#140579"/>
|
||||
<path
|
||||
android:pathData="M14,10L16,10A1,1 0,0 1,17 11L17,11A1,1 0,0 1,16 12L14,12A1,1 0,0 1,13 11L13,11A1,1 0,0 1,14 10z"
|
||||
android:fillColor="#FFC93A"/>
|
||||
<path
|
||||
android:pathData="M19,10L23,10A1,1 0,0 1,24 11L24,11A1,1 0,0 1,23 12L19,12A1,1 0,0 1,18 11L18,11A1,1 0,0 1,19 10z"
|
||||
android:fillColor="#8AC826"/>
|
||||
<path
|
||||
android:pathData="M23,14L20,14A1,1 0,0 0,19 15L19,15A1,1 0,0 0,20 16L23,16A1,1 0,0 0,24 15L24,15A1,1 0,0 0,23 14z"
|
||||
android:fillColor="#8AC826"/>
|
||||
<path
|
||||
android:pathData="M17,14L15,14A1,1 0,0 0,14 15L14,15A1,1 0,0 0,15 16L17,16A1,1 0,0 0,18 15L18,15A1,1 0,0 0,17 14z"
|
||||
android:fillColor="#FFC93A"/>
|
||||
<path
|
||||
android:pathData="M12,14L9,14A1,1 0,0 0,8 15L8,15A1,1 0,0 0,9 16L12,16A1,1 0,0 0,13 15L13,15A1,1 0,0 0,12 14z"
|
||||
android:fillColor="#140579"/>
|
||||
<path
|
||||
android:pathData="M23,18L18,18A1,1 0,0 0,17 19L17,19A1,1 0,0 0,18 20L23,20A1,1 0,0 0,24 19L24,19A1,1 0,0 0,23 18z"
|
||||
android:fillColor="#8AC826"/>
|
||||
<path
|
||||
android:pathData="M15,18L12,18A1,1 0,0 0,11 19L11,19A1,1 0,0 0,12 20L15,20A1,1 0,0 0,16 19L16,19A1,1 0,0 0,15 18z"
|
||||
android:fillColor="#FFC93A"/>
|
||||
<path
|
||||
android:pathData="M9,18L9,18A1,1 0,0 0,8 19L8,19A1,1 0,0 0,9 20L9,20A1,1 0,0 0,10 19L10,19A1,1 0,0 0,9 18z"
|
||||
android:fillColor="#140579"/>
|
||||
</vector>
|
|
@ -6,33 +6,37 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
android:layout_weight="1"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="title"/>
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Some very long title to check overlapped texts" />
|
||||
|
||||
<Space
|
||||
android:layout_width="@dimen/content_padding"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@android:id/summary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="summary"/>
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="summary" />
|
||||
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.slider.Slider
|
||||
android:id="@+id/slider"
|
||||
|
|
|
@ -1074,7 +1074,7 @@
|
|||
<string name="rendering_category_routes">المسارات الرياضية</string>
|
||||
<string name="rendering_category_transport">وسائل المواصلات</string>
|
||||
<string name="rendering_category_others">سمات أخرى للخريطة</string>
|
||||
<string name="map_widget_appearance_rem">العناصر الاخرى</string>
|
||||
<string name="map_widget_appearance_rem">العناصر الأخرى</string>
|
||||
<string name="map_widget_top">شريط المعلومات</string>
|
||||
<string name="map_widget_right">العدادات على اليمين</string>
|
||||
<string name="map_widget_left">العدادات على اليسار</string>
|
||||
|
@ -3413,7 +3413,7 @@
|
|||
<string name="select_nav_icon_descr">سترى الأيقونة فقط أثناء الملاحة أو أثناء التحرك.</string>
|
||||
<string name="button_rate">قيم</string>
|
||||
<string name="select_map_icon_descr">تظهر أيقونة الخريطة فقط على الخريطة ، وتتغير أثناء التنقل إلى أيقونة التنقل.</string>
|
||||
<string name="logcat_buffer_descr">تحقق وتبادل سجلات مفصلة من التطبيق</string>
|
||||
<string name="logcat_buffer_descr">التحقق من السجلات التفصيلية للتطبيق ومشاركتها</string>
|
||||
<string name="search_offline_geo_error">تعذر تحليل الهدف الجغرافي \'%s\'.</string>
|
||||
<string name="permission_is_required">الإذن مطلوب لاستخدام هذا الخيار.</string>
|
||||
<string name="monitoring_min_speed_descr_side_effect">اعراض جانبية: سيفقد المسار الخاص بك جميع الأقسام التي لم يتحقق فيها معيار الحد الأدنى للسرعة (على سبيل المثال ، حيث تدفع دراجتك أعلى تل شديد الانحدار). أيضا ، لن تكون هناك معلومات حول فترات الراحة ، مثل الاستراحات. هذا له تأثيرات على أي تحليل أو مرحلة ما بعد المعالجة ، مثل عند محاولة تحديد المدة الإجمالية لرحلتك ، أو وقت الحركة ، أو متوسط سرعتك.</string>
|
||||
|
@ -3893,4 +3893,12 @@
|
|||
<string name="sort_name_ascending">الاسم: أ – ي</string>
|
||||
<string name="start_finish_icons">رموز البدء/الانتهاء</string>
|
||||
<string name="contour_lines_thanks">شكرا لشرائك \"خطوط الكنتور\"</string>
|
||||
<string name="osm_live_payment_desc_hw">رسوم الاشتراك ستفرض كل شهر. يمكنك إلغاء اشتراكك متى أردت عبر Google play.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">سيتم تحصيل المبلغ على حساب AppGallery الخاص بك عند تأكيد الشراء.
|
||||
\n
|
||||
\nيتم تجديد الاشتراك تلقائيًا ما لم يتم إلغاؤه قبل تاريخ التجديد. سيتم خصم حسابك على فترة التجديد (شهر/ثلاثة أشهر/سنة) فقط في تاريخ التجديد.
|
||||
\n
|
||||
\nيمكنك إدارة وإلغاء الاشتراكات الخاصة بك عن طريق الانتقال إلى إعدادات AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">تجنب الممرات</string>
|
||||
<string name="routing_attr_avoid_footways_name">تجنب الممرات</string>
|
||||
</resources>
|
|
@ -3826,7 +3826,7 @@
|
|||
<string name="plan_route_select_track_file_for_open">Wählen Sie eine Trackdatei zum Öffnen aus.</string>
|
||||
<string name="shared_string_done">Fertig</string>
|
||||
<string name="overwrite_track">Track überschreiben</string>
|
||||
<string name="threshold_distance">Schwellenwert-Distanz</string>
|
||||
<string name="threshold_distance">Maximaler Abstand</string>
|
||||
<string name="save_as_new_track">Als neuen Track speichern</string>
|
||||
<string name="reverse_route">Route umkehren</string>
|
||||
<string name="route_between_points_whole_track_button_desc">Der gesamte Track wird mit dem ausgewählten Profil neu berechnet.</string>
|
||||
|
@ -3910,4 +3910,12 @@
|
|||
<string name="sort_name_ascending">Name: A – Z</string>
|
||||
<string name="start_finish_icons">Start-/Ziel-Symbole</string>
|
||||
<string name="contour_lines_thanks">Vielen Dank für den Kauf von \'Höhenlinien\'</string>
|
||||
<string name="osm_live_payment_desc_hw">Das Abonnement wird pro ausgewähltem Zeitraum berechnet. Sie können das Abonnement jederzeit über die AppGallery kündigen.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Die Bezahlung wird Ihrem AppGallery-Konto bei der Bestätigung des Kaufs belastet.
|
||||
\n
|
||||
\n Das Abonnement verlängert sich automatisch, sofern es nicht vor dem Verlängerungsdatum gekündigt wird. Ihr Konto wird für den Verlängerungszeitraum (Monat / drei Monate / Jahr) nur am Verlängerungsdatum belastet.
|
||||
\n
|
||||
\n Sie können Ihre Abonnements verwalten und kündigen, indem Sie zu Ihren AppGallery-Einstellungen gehen.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Vermeidet Fußwege</string>
|
||||
<string name="routing_attr_avoid_footways_name">Keine Fußwege</string>
|
||||
</resources>
|
|
@ -3909,4 +3909,12 @@
|
|||
<string name="sort_name_ascending">Nombre: A – Z</string>
|
||||
<string name="start_finish_icons">Iconos de inicio/fin</string>
|
||||
<string name="contour_lines_thanks">Gracias por comprar las «Curvas de nivel»</string>
|
||||
<string name="osm_live_payment_desc_hw">La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en AppGallery.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">El pago será cargado a la cuenta de AppGallery al confirmar la compra.
|
||||
\n
|
||||
\nLa suscripción se renueva automáticamente a menos que se cancele antes de la fecha de renovación. La cuenta será cargada por el período de renovación (mes/trimestre/año) sólo en la fecha de renovación.
|
||||
\n
|
||||
\nPuedes administrar y cancelar las suscripciones accediendo a los ajustes de AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Evita pasar por las veredas o aceras</string>
|
||||
<string name="routing_attr_avoid_footways_name">Evitar veredas/aceras</string>
|
||||
</resources>
|
|
@ -3905,4 +3905,13 @@
|
|||
<string name="sort_name_ascending">Nombre: A – Z</string>
|
||||
<string name="sort_last_modified">Último modificado</string>
|
||||
<string name="start_finish_icons">Iconos de inicio/fin</string>
|
||||
<string name="contour_lines_thanks">Gracias por comprar las «Curvas de nivel»</string>
|
||||
<string name="osm_live_payment_desc_hw">La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en AppGallery.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">El pago será cargado a la cuenta de AppGallery al confirmar la compra.
|
||||
\n
|
||||
\nLa suscripción se renueva automáticamente a menos que se cancele antes de la fecha de renovación. La cuenta será cargada por el período de renovación (mes/trimestre/año) sólo en la fecha de renovación.
|
||||
\n
|
||||
\nPuedes administrar y cancelar las suscripciones accediendo a los ajustes de AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Evita pasar por aceras o veredas</string>
|
||||
<string name="routing_attr_avoid_footways_name">Evitar aceras</string>
|
||||
</resources>
|
|
@ -3764,4 +3764,13 @@
|
|||
<string name="sort_name_ascending">Nimi: A – Z</string>
|
||||
<string name="screen_timeout">Ekraani väljalülitamine</string>
|
||||
<string name="app_mode_wheelchair_forward">Ratastool edasi</string>
|
||||
<string name="routing_attr_avoid_footways_description">Väldi jalgteid</string>
|
||||
<string name="routing_attr_avoid_footways_name">Väldi jalgteid</string>
|
||||
<string name="contour_lines_thanks">Täname „Kõrgusjoonte“ ostu eest</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Ostukinnituse saabumisel arveldame tellimuse eest sinu AppGallery konto alusel.
|
||||
\n
|
||||
\nKui sa ei tühista tellimust enne uue perioodi algust, siis tellimus pikeneb automaatselt ning arveldame järgmise ajavahemiku eest (kuu/kvartal/aasta) selle alguses.
|
||||
\n
|
||||
\nTellimust saad hallata ja tühistada AppGallery seadistustest.</string>
|
||||
<string name="osm_live_payment_desc_hw">Arveldame tellimuse eest valitud ajavahemiku alusel. Seda saad sa vabalt valitud ajal tühistada AppGallery\'s.</string>
|
||||
</resources>
|
|
@ -3885,4 +3885,7 @@
|
|||
<string name="sort_name_ascending">Nom : A – Z</string>
|
||||
<string name="start_finish_icons">Icônes de départ / arrivée</string>
|
||||
<string name="contour_lines_thanks">Merci pour votre achat de \'Courbes de niveaux\'</string>
|
||||
<string name="osm_live_payment_desc_hw">Abonnement facturé pour chaque période sélectionnée. Annulation possible à tout moment sur AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Éviter les trottoirs</string>
|
||||
<string name="routing_attr_avoid_footways_name">Éviter les trottoirs</string>
|
||||
</resources>
|
|
@ -3911,4 +3911,12 @@
|
|||
<string name="sort_name_ascending">שם: א – ת</string>
|
||||
<string name="start_finish_icons">סמלי התחלה/סיום</string>
|
||||
<string name="contour_lines_thanks">תודה לך על רכישת ‚קווי מתאר’</string>
|
||||
<string name="routing_attr_avoid_footways_description">הימנעות משבילי הולכי רגל</string>
|
||||
<string name="routing_attr_avoid_footways_name">הימנעות משבילי הולכי רגל</string>
|
||||
<string name="osm_live_payment_desc_hw">המינוי חויב לתקופה הנבחרת. ניתן לבטל דרך ה־AppGallery בכל עת.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">התשלום יחויב דרך חשבון ה־AppGallery שלך עם אישור הרכישה.
|
||||
\n
|
||||
\nהמינוי מתחדש אוטומטי אלא אם כן בוטל בטרם תאריך החידוש. החשבון שלך יחויב על תקופת החידוש (חודש/שלושה חודשים/שנה) רק בתאריך החידוש.
|
||||
\n
|
||||
\nניתן לנהל ולבטל את המינויים שלך דרך ההגדרות ב־AppGallery שלך.</string>
|
||||
</resources>
|
|
@ -3901,4 +3901,12 @@
|
|||
<string name="sort_name_ascending">Nome: A – Z</string>
|
||||
<string name="start_finish_icons">Ícones de início/término</string>
|
||||
<string name="contour_lines_thanks">Obrigado por adquirir \'curvas de nível\'</string>
|
||||
<string name="osm_live_payment_desc_hw">Assinatura cobrada por período selecionado. Cancele no AppGallery a qualquer momento.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">O pagamento será cobrado em sua conta AppGallery na confirmação da compra.
|
||||
\n
|
||||
\nA assinatura é renovada automaticamente, a menos que seja cancelada antes da data de renovação. Sua conta será cobrada pelo período de renovação (mês/três meses/ano) apenas na data de renovação.
|
||||
\n
|
||||
\nVocê pode gerenciar e cancelar suas assinaturas acessando as configurações do AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Evite passarelas</string>
|
||||
<string name="routing_attr_avoid_footways_name">Evite passarelas</string>
|
||||
</resources>
|
|
@ -3908,4 +3908,12 @@
|
|||
<string name="sort_name_ascending">Nome: A – Z</string>
|
||||
<string name="start_finish_icons">Ícones de início/fim</string>
|
||||
<string name="contour_lines_thanks">Obrigado por comprar \'Curvas de nível\'</string>
|
||||
<string name="osm_live_payment_desc_hw">Assinatura cobrada por período selecionado. Cancele-a na AppGallery a qualquer momento.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">O pagamento será debitado na sua conta AppGallery no momento da confirmação da compra.
|
||||
\n
|
||||
\nA assinatura é renovada automaticamente, a menos que seja cancelada antes da data de renovação. A sua conta será cobrada pelo período de renovação (mês/três meses/ano) apenas na data de renovação.
|
||||
\n
|
||||
\nPode gerir e cancelar as suas subscrições a ir às definições da sua AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Evitar passeios</string>
|
||||
<string name="routing_attr_avoid_footways_name">Evitar passeios</string>
|
||||
</resources>
|
|
@ -73,7 +73,7 @@
|
|||
<string name="select_postcode">Поиск почтового индекса</string>
|
||||
<string name="quick_action_take_audio_note">Запись аудио</string>
|
||||
<string name="quick_action_take_video_note">Записать видео</string>
|
||||
<string name="quick_action_take_photo_note">Фотозаметка</string>
|
||||
<string name="quick_action_take_photo_note">Сделать фото</string>
|
||||
<string name="quick_action_add_osm_bug">OSM-заметка</string>
|
||||
<string name="parking_options">Функции парковки</string>
|
||||
<string name="full_version_thanks">Благодарим вас за покупку платной версии OsmAnd.</string>
|
||||
|
@ -531,10 +531,10 @@
|
|||
<string name="overlay_transparency">Прозрачность наложения</string>
|
||||
<string name="map_transparency_descr">Отрегулируйте прозрачность основной карты.</string>
|
||||
<string name="map_transparency">Прозрачность основной карты</string>
|
||||
<string name="layer_underlay">Карта подложки</string>
|
||||
<string name="layer_underlay">Карта подложки…</string>
|
||||
<string name="map_underlay">Карта подложки</string>
|
||||
<string name="map_underlay_descr">Выберите карту подложки</string>
|
||||
<string name="layer_overlay">Карта наложения</string>
|
||||
<string name="layer_overlay">Карта наложения…</string>
|
||||
<string name="map_overlay">Карта наложения</string>
|
||||
<string name="map_overlay_descr">Выберите слой наложения поверх основной карты</string>
|
||||
<string name="tile_source_already_installed">Карта уже установлена, настройки будут обновлены.</string>
|
||||
|
@ -689,7 +689,7 @@
|
|||
<string name="layer_route">Маршрут</string>
|
||||
<string name="layer_osm_bugs">OSM-заметки (онлайн)</string>
|
||||
<string name="layer_poi">POI…</string>
|
||||
<string name="layer_map">Источник карты</string>
|
||||
<string name="layer_map">Источник карты…</string>
|
||||
<string name="menu_layers">Слои</string>
|
||||
<string name="context_menu_item_search_poi">Поиск POI</string>
|
||||
<string name="use_trackball_descr">Использовать трекбол для перемещения по карте.</string>
|
||||
|
@ -1179,7 +1179,7 @@
|
|||
<string name="context_menu_item_last_intermediate_point">Последний промежуточный пункт</string>
|
||||
<string name="context_menu_item_first_intermediate_point">Сделать начальной остановкой</string>
|
||||
<string name="add_as_last_destination_point">Сделать последней остановкой</string>
|
||||
<string name="add_as_first_destination_point">Сделать начальной остановкой</string>
|
||||
<string name="add_as_first_destination_point">Первый промежуточный пункт</string>
|
||||
<string name="replace_destination_point">Заменить пункт назначения</string>
|
||||
<string name="new_destination_point_dialog">Пункт назначения уже задан</string>
|
||||
<string name="target_point">Пункт %1$s</string>
|
||||
|
@ -3580,8 +3580,7 @@
|
|||
<string name="monitoring_min_speed_descr_remark">Примечание: проверка скорости > 0: большинство модулей GPS сообщают значение скорости только в том случае, если алгоритм определяет, что вы движетесь, и ничего, если вы не перемещаетесь. Следовательно, использование параметра > 0 в этом фильтре в некотором смысле приводит к обнаружению факта перемещения модуля GPS. Но даже если мы не производим данную фильтрацию во время записи, то всё равно эта функция используется при анализе GPX для определения скорректированного расстояния, то есть значение, отображаемое в этом поле, является расстоянием, записанным во время движения.</string>
|
||||
<string name="multimedia_rec_split_title">Разделение записи</string>
|
||||
<string name="live_monitoring_adress_descr">Укажите веб-адрес со следующими параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
||||
<string name="monitoring_min_accuracy_descr">"Будут записываться только точки, отвечающие
|
||||
\n в минимальной точностью (в метрах/футах —зависит от настроек системы). Точность — это близость измерений к истинному положению, и она не связана напрямую с точностью, которая представляет собой разброс повторных измерений."</string>
|
||||
<string name="monitoring_min_accuracy_descr">"Будут записываться только точки, отвечающие по показателю минимальной точности (в метрах или футах — зависит от настроек системы). Точность — это близость измерений к истинному положению, и она не связана напрямую с точностью, которая представляет собой разброс повторных измерений."</string>
|
||||
<string name="monitoring_min_speed_descr_recommendation">Рекомендация: попробуйте сначала воспользоваться детектором движения через фильтр минимального смещения (B), что может дать лучшие результаты и вы потеряете меньше данных. Если треки остаются шумными на низких скоростях, попробуйте использовать ненулевые значения. Обратите внимание, что некоторые измерения могут вообще не указывать значения скорости (некоторые сетевые методы), и в этом случае ничего не будет записываться.</string>
|
||||
<string name="slope_description">Для визуализации крутизны рельефа используются цвета.</string>
|
||||
<string name="slope_read_more">Подробнее об уклонах можно прочитать в %1$s.</string>
|
||||
|
@ -3904,4 +3903,12 @@
|
|||
<string name="sort_name_ascending">Имя: А - Я</string>
|
||||
<string name="start_finish_icons">Значки старта и финиша</string>
|
||||
<string name="contour_lines_thanks">Спасибо за покупку \'Контурных линий\'</string>
|
||||
<string name="routing_attr_avoid_footways_description">Избегать пешеходных дорожек</string>
|
||||
<string name="routing_attr_avoid_footways_name">Избегать пешеходных дорожек</string>
|
||||
<string name="osm_live_payment_desc_hw">Подписка взимается за выбранный период. Отмените её в AppGallery в любое время.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Оплата будет снята с вашей учетной записи AppGallery при подтверждении покупки.
|
||||
\n
|
||||
\nПодписка продлевается автоматически, если она не будет отменена до даты продления. С вашего счета будет взиматься плата за период продления (месяц/три месяца/год) только в дату продления.
|
||||
\n
|
||||
\nВы можете управлять своими подписками и отменять их, перейдя в настройки AppGallery.</string>
|
||||
</resources>
|
|
@ -3887,7 +3887,7 @@
|
|||
<string name="shared_string_redo">Torra a fàghere</string>
|
||||
<string name="release_3_8">• Funtzionalidade de pranificatione de un\'àndala agiornada: permitit de impreare castas diferentes de navigatzione pro segmentu e s\'inclusione de rastas
|
||||
\n
|
||||
\n • New Appearance menu for tracks: select color, thickness, display direction arrows, start/finish icons
|
||||
\n • Menù de Aparèntzia nou pro sas rastas: ischerta su colore, grussària, visulaizatzione de sas fritzas de diretzione, iconas de incumintzu/fine
|
||||
\n
|
||||
\n • Visibilidade megiorada de sos nodos pro sas bitzicletas.
|
||||
\n
|
||||
|
@ -3905,4 +3905,12 @@
|
|||
<string name="sort_name_ascending">Nùmene: A – Z</string>
|
||||
<string name="start_finish_icons">Iconas de incumintzu/fine</string>
|
||||
<string name="contour_lines_thanks">Gràtzias pro àere comporadu \'Curvas de livellu\'</string>
|
||||
<string name="osm_live_payment_desc_hw">Costu periòdicu de s\'abbonamentu. Lu podes anullare in AppGallery cando boles.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Su pagamentu at a èssere addebitadu a su contu tuo de AppGallery cando sa còmpora at a èssere cunfirmada.
|
||||
\n
|
||||
\nS\'abbonamentu si rinnovat a sa sola automaticamente, francu chi siat istadu annulladu in antis de sa die de su rinnovu. Su contu tuo at a bènnere addebitadu pro su perìodu de rinnovu (mese/tres meses/annu) in sa die de rinnovu ebbia.
|
||||
\n
|
||||
\nPodes amministrare e annullare sos abbonamentos tuos intrende in sas impostatziones de AppGallery tuas.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Èvita sos martzapiedis</string>
|
||||
<string name="routing_attr_avoid_footways_name">Èvita sos martzapiedis</string>
|
||||
</resources>
|
|
@ -509,7 +509,7 @@
|
|||
<string name="poi_register_office">Matričný úrad</string>
|
||||
<string name="poi_pension_fund">Dôchodkový fond</string>
|
||||
<string name="poi_migration">Imigračný úrad</string>
|
||||
<string name="poi_tax_inspection">Daňová kontrola</string>
|
||||
<string name="poi_tax_inspection">Daňový úrad</string>
|
||||
<string name="poi_quarter">Štvrť</string>
|
||||
<string name="poi_attraction_summer_toboggan">Suchá bobová dráha</string>
|
||||
<string name="poi_attraction_swing_carousel">Kolotoč s hojdačkami</string>
|
||||
|
@ -3652,4 +3652,5 @@
|
|||
<string name="poi_covered_booth">Búdka</string>
|
||||
<string name="poi_sms_no">Nie</string>
|
||||
<string name="poi_sms_yes">Áno</string>
|
||||
<string name="poi_taxi_office">Kancelária taxislužby</string>
|
||||
</resources>
|
|
@ -3654,8 +3654,8 @@
|
|||
<string name="lang_lmo">Lombardsky</string>
|
||||
<string name="ltr_or_rtl_combine_via_slash_with_space">%1$s / %2$s</string>
|
||||
<string name="osm_live_payment_subscription_management">Platba bude stiahnutá z vášho účtu Google Play po potvrdení nákupu.
|
||||
\n
|
||||
\n Predplatné sa automaticky obnovuje ak nie je zrušené pred dátumom jeho obnovenia. Ďalšia platba za obdobie predplatného (mesiac/štvrťrok/rok) bude stiahnutá v deň obnovenia.
|
||||
\n
|
||||
\n Predplatné sa automaticky obnovuje, ak nie je zrušené pred dátumom jeho obnovenia. Ďalšia platba za obdobie predplatného (mesiac/štvrťrok/rok) bude stiahnutá v deň obnovenia.
|
||||
\n
|
||||
\n Vaše predplatné môžete spravovať a zrušiť v nastaveniach Google Play.</string>
|
||||
<string name="search_poi_types">Hľadať typy bodov záujmu</string>
|
||||
|
@ -3906,4 +3906,12 @@
|
|||
<string name="sort_name_ascending">Názov: A – Z</string>
|
||||
<string name="start_finish_icons">Ikony štartu/cieľa</string>
|
||||
<string name="contour_lines_thanks">Ďakujeme za zakúpenie modulu \'Vrstevnice\'</string>
|
||||
<string name="osm_live_payment_desc_hw">Predplatné bude spoplatnené v zvolenom intervale. Predplatné zrušte kedykoľvek na AppGallery.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Platba bude stiahnutá z vášho účtu AppGallery po potvrdení nákupu.
|
||||
\n
|
||||
\nPredplatné sa automaticky obnovuje, ak nie je zrušené pred dátumom jeho obnovenia. Ďalšia platba za obdobie predplatného (mesiac/štvrťrok/rok) bude stiahnutá v deň obnovenia.
|
||||
\n
|
||||
\n Vaše predplatné môžete spravovať a zrušiť v nastaveniach AppGallery.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Vyhnúť sa chodníkom pre chodcov</string>
|
||||
<string name="routing_attr_avoid_footways_name">Vyhnúť sa chodníkom</string>
|
||||
</resources>
|
|
@ -3861,4 +3861,12 @@
|
|||
<string name="sort_name_ascending">İsim: A – Z</string>
|
||||
<string name="start_finish_icons">Başlangıç/bitiş simgeleri</string>
|
||||
<string name="contour_lines_thanks">\'Eş yükselti eğrileri\'ni satın aldığınız için teşekkürler</string>
|
||||
<string name="osm_live_payment_desc_hw">Abonelik seçilen dönem başına ücretlendirilir. İstediğiniz zaman AppGallery\'den iptal edin.</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Ödeme, satın alma onaylandığında AppGallery hesabınızdan alınacaktır.
|
||||
\n
|
||||
\nYenileme tarihinden önce iptal edilmedikçe abonelik otomatik olarak yenilenir. Hesabınızdan yenileme süresi (ay/üç ay/yıl) için yalnızca yenileme tarihinde ücret alınacaktır.
|
||||
\n
|
||||
\n AppGallery ayarlarınıza giderek aboneliklerinizi yönetebilir ve iptal edebilirsiniz.</string>
|
||||
<string name="routing_attr_avoid_footways_description">Yaya yollarından kaçın</string>
|
||||
<string name="routing_attr_avoid_footways_name">Yaya yollarından kaçın</string>
|
||||
</resources>
|
|
@ -3901,4 +3901,12 @@
|
|||
<string name="sort_name_ascending">名稱:A – Z</string>
|
||||
<string name="start_finish_icons">開始/結束圖示</string>
|
||||
<string name="contour_lines_thanks">感謝您購買 \'Contour lines\'</string>
|
||||
<string name="osm_live_payment_desc_hw">按選定週期收取訂閱費用。隨時在 AppGallery 上取消。</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">確認購買後將會從您的 AppGallery 帳號中付款。
|
||||
\n
|
||||
\n除非在續訂日期前取消,否則就會自動續訂。您的帳號將只會在續訂日期收取訂閱週期(一個月/三個月/一年)的費用。
|
||||
\n
|
||||
\n您可以在您的 AppGallery 設定中管理與取消您的訂閱。</string>
|
||||
<string name="routing_attr_avoid_footways_description">避免人行道</string>
|
||||
<string name="routing_attr_avoid_footways_name">避免人行道</string>
|
||||
</resources>
|
|
@ -15,6 +15,14 @@
|
|||
<string name="clear_osm_token">Clear OpenStreetMap OAuth token</string>
|
||||
<string name="perform_oauth_authorization">Log in via OAuth</string>
|
||||
<string name="perform_oauth_authorization_description">Perform an OAuth Login to use osmedit features</string>
|
||||
<string name="use_native_pt_desc">Switch to Java (safe) Public Transport routing calculation</string>
|
||||
<string name="use_native_pt">Native Public Transport development</string>
|
||||
<string name="use_fast_recalculation_desc">Recalculates only the initial part of the route. Can be used for long trips.</string>
|
||||
<string name="complex_routing_descr">Two-phase routing for car navigation.</string>
|
||||
<string name="use_complex_routing">Complex routing</string>
|
||||
<string name="use_live_routing">OsmAnd Live data</string>
|
||||
<string name="use_live_public_transport">OsmAnd Live data</string>
|
||||
<string name="development">Development</string>
|
||||
<string name="routing_attr_avoid_footways_name">Avoid footways</string>
|
||||
<string name="routing_attr_avoid_footways_description">Avoid footways</string>
|
||||
<string name="osm_live_payment_subscription_management_hw">Payment will be charged to your AppGallery account at the confirmation of purchase.\n\nSubscription automatically renews unless it is canceled before the renewal date. Your account will be charged for renewal period(month/three month/year) only on the renewal date.\n\nYou can manage and cancel your subscriptions by going to your AppGallery settings.</string>
|
||||
|
@ -3666,7 +3674,6 @@
|
|||
<string name="plugin_install_needs_network">You need to be online to install this plugin.</string>
|
||||
<string name="get_plugin">Get</string>
|
||||
<string name="use_fast_recalculation">Smart route recalculation</string>
|
||||
<string name="use_fast_recalculation_desc">For long trips, only recalculate the initial part of the route.</string>
|
||||
<string name="do_you_like_osmand">Do you like OsmAnd?</string>
|
||||
<string name="we_really_care_about_your_opinion">Your opinion and feedback is valued.</string>
|
||||
<string name="rate_this_app">Rate this app</string>
|
||||
|
|
|
@ -25,46 +25,11 @@
|
|||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="@string/safe_mode" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="pt_safe_mode"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
android:summaryOff="@string/shared_string_disabled"
|
||||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="Native PT development" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="routing"
|
||||
android:layout="@layout/preference_category_with_descr"
|
||||
android:title="@string/routing_settings" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="disable_complex_routing"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
android:summaryOff="@string/shared_string_disabled"
|
||||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="@string/disable_complex_routing" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="use_fast_recalculation"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
android:summaryOff="@string/shared_string_disabled"
|
||||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="@string/use_fast_recalculation" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="enable_osmc_routing"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
android:summaryOff="@string/shared_string_disabled"
|
||||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="@string/use_osm_live_routing" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="enable_osmc_public_transport"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
android:summaryOff="@string/shared_string_disabled"
|
||||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="@string/use_osm_live_public_transport" />
|
||||
|
||||
<Preference
|
||||
android:key="simulate_your_location"
|
||||
android:layout="@layout/preference_with_descr"
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
android:layout="@layout/preference_button"
|
||||
android:persistent="false"
|
||||
android:title="@string/reorder_profiles"
|
||||
app:fragment="net.osmand.plus.profiles.EditProfilesFragment"
|
||||
app:fragment="net.osmand.plus.profiles.fragments.EditProfilesFragment"
|
||||
tools:icon="@drawable/ic_action_edit_dark" />
|
||||
|
||||
<Preference
|
||||
|
|
|
@ -23,6 +23,7 @@ import net.osmand.plus.inapp.InAppPurchases.InAppPurchase;
|
|||
import net.osmand.plus.inapp.InAppPurchases.InAppSubscription;
|
||||
import net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription;
|
||||
import net.osmand.plus.inapp.util.BillingManager;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
@ -407,7 +408,7 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
OsmandSettings.OsmandPreference<Long> subscriptionCancelledTime = ctx.getSettings().LIVE_UPDATES_PURCHASE_CANCELLED_TIME;
|
||||
OsmandPreference<Long> subscriptionCancelledTime = ctx.getSettings().LIVE_UPDATES_PURCHASE_CANCELLED_TIME;
|
||||
if (!subscribedToLiveUpdates && ctx.getSettings().LIVE_UPDATES_PURCHASED.get()) {
|
||||
if (subscriptionCancelledTime.get() == 0) {
|
||||
subscriptionCancelledTime.set(System.currentTimeMillis());
|
||||
|
|
|
@ -31,7 +31,7 @@ import net.osmand.plus.inapp.InAppPurchases.InAppSubscription;
|
|||
import net.osmand.plus.inapp.InAppPurchases.InAppSubscriptionIntroductoryInfo;
|
||||
import net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
|
|
@ -223,6 +223,19 @@ public class FileUtils {
|
|||
return tempDir;
|
||||
}
|
||||
|
||||
public static boolean isWritable(File dirToTest) {
|
||||
boolean isWriteable;
|
||||
try {
|
||||
dirToTest.mkdirs();
|
||||
File writeTestFile = File.createTempFile("osmand_", ".tmp", dirToTest);
|
||||
isWriteable = writeTestFile.exists();
|
||||
writeTestFile.delete();
|
||||
} catch (IOException e) {
|
||||
isWriteable = false;
|
||||
}
|
||||
return isWriteable;
|
||||
}
|
||||
|
||||
public interface RenameCallback {
|
||||
void renamedTo(File file);
|
||||
}
|
||||
|
|
|
@ -18,10 +18,10 @@ import net.osmand.AndroidUtils;
|
|||
import net.osmand.plus.ContextMenuAdapter;
|
||||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.views.OsmandMapLayer;
|
||||
import net.osmand.plus.views.layers.AidlMapLayer;
|
||||
import net.osmand.plus.views.layers.MapInfoLayer;
|
||||
|
|
|
@ -25,7 +25,7 @@ import net.osmand.core.jni.ResolvedMapStyle;
|
|||
import net.osmand.core.jni.SwigUtilities;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
import net.osmand.render.RenderingRuleProperty;
|
||||
import net.osmand.render.RenderingRuleStorageProperties;
|
||||
|
|
|
@ -13,8 +13,8 @@ import androidx.annotation.StringRes;
|
|||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.BooleanPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.BooleanPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.parkingpoint.ParkingPositionPlugin;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
|
|
@ -28,7 +28,7 @@ import net.osmand.map.OsmandRegions.RegionTranslation;
|
|||
import net.osmand.map.WorldRegion;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
import net.osmand.osm.MapPoiTypes;
|
||||
import net.osmand.plus.activities.DayNightHelper;
|
||||
import net.osmand.plus.helpers.DayNightHelper;
|
||||
import net.osmand.plus.activities.LocalIndexHelper;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
|
|
|
@ -3,7 +3,30 @@ package net.osmand.plus;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import net.osmand.data.FavouritePoint.SpecialPointType;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.AppInitializer.InitEvents;
|
||||
import net.osmand.plus.api.SettingsAPI;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.EnumStringPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
class AppVersionUpgradeOnInit {
|
||||
|
||||
public static final String FIRST_TIME_APP_RUN = "FIRST_TIME_APP_RUN"; //$NON-NLS-1$
|
||||
public static final String VERSION_INSTALLED_NUMBER = "VERSION_INSTALLED_NUMBER"; //$NON-NLS-1$
|
||||
public static final String NUMBER_OF_STARTS = "NUMBER_OF_STARTS"; //$NON-NLS-1$
|
||||
|
@ -43,7 +66,7 @@ class AppVersionUpgradeOnInit {
|
|||
|
||||
@SuppressLint("ApplySharedPref")
|
||||
void upgradeVersion(SharedPreferences startPrefs, int lastVersion) {
|
||||
if(!startPrefs.contains(NUMBER_OF_STARTS)) {
|
||||
if (!startPrefs.contains(NUMBER_OF_STARTS)) {
|
||||
startPrefs.edit().putInt(NUMBER_OF_STARTS, 1).commit();
|
||||
} else {
|
||||
startPrefs.edit().putInt(NUMBER_OF_STARTS, startPrefs.getInt(NUMBER_OF_STARTS, 0) + 1).commit();
|
||||
|
@ -59,27 +82,28 @@ class AppVersionUpgradeOnInit {
|
|||
} else {
|
||||
prevAppVersion = startPrefs.getInt(VERSION_INSTALLED_NUMBER, 0);
|
||||
if (needsUpgrade(startPrefs, lastVersion)) {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
if (prevAppVersion < VERSION_2_2) {
|
||||
app.getSettings().SHOW_DASHBOARD_ON_START.set(true);
|
||||
app.getSettings().SHOW_DASHBOARD_ON_MAP_SCREEN.set(true);
|
||||
app.getSettings().SHOW_CARD_TO_CHOOSE_DRAWER.set(true);
|
||||
settings.SHOW_DASHBOARD_ON_START.set(true);
|
||||
settings.SHOW_DASHBOARD_ON_MAP_SCREEN.set(true);
|
||||
settings.SHOW_CARD_TO_CHOOSE_DRAWER.set(true);
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_2_2).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_2_3) {
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_2_3).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_3_2) {
|
||||
app.getSettings().BILLING_PURCHASE_TOKENS_SENT.set("");
|
||||
settings.BILLING_PURCHASE_TOKENS_SENT.set("");
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_2).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_3_5 || Version.getAppVersion(app).equals("3.5.3")
|
||||
|| Version.getAppVersion(app).equals("3.5.4")) {
|
||||
app.getSettings().migratePreferences();
|
||||
migratePreferences();
|
||||
app.getAppInitializer().addListener(new AppInitializer.AppInitializeListener() {
|
||||
@Override
|
||||
public void onProgress(AppInitializer init, AppInitializer.InitEvents event) {
|
||||
if (event.equals(AppInitializer.InitEvents.FAVORITES_INITIALIZED)) {
|
||||
app.getSettings().migrateHomeWorkParkingToFavorites();
|
||||
migrateHomeWorkParkingToFavorites();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,21 +114,22 @@ class AppVersionUpgradeOnInit {
|
|||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_5).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_3_6) {
|
||||
app.getSettings().migratePreferences();
|
||||
migratePreferences();
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_6).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_3_7) {
|
||||
app.getSettings().migrateEnumPreferences();
|
||||
migrateEnumPreferences();
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_7).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_3_7_01) {
|
||||
app.getAppInitializer().addListener(new AppInitializer.AppInitializeListener() {
|
||||
app.getAppInitializer().addListener(new AppInitializeListener() {
|
||||
@Override
|
||||
public void onProgress(AppInitializer init, AppInitializer.InitEvents event) {
|
||||
if (event.equals(AppInitializer.InitEvents.FAVORITES_INITIALIZED)) {
|
||||
if (event.equals(InitEvents.FAVORITES_INITIALIZED)) {
|
||||
app.getFavorites().fixBlackBackground();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish(AppInitializer init) {
|
||||
}
|
||||
|
@ -112,7 +137,7 @@ class AppVersionUpgradeOnInit {
|
|||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_7_01).commit();
|
||||
}
|
||||
if (prevAppVersion < VERSION_3_8_00) {
|
||||
app.getSettings().migrateQuickActionStates();
|
||||
migrateQuickActionStates();
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, VERSION_3_8_00).commit();
|
||||
}
|
||||
startPrefs.edit().putInt(VERSION_INSTALLED_NUMBER, lastVersion).commit();
|
||||
|
@ -135,20 +160,20 @@ class AppVersionUpgradeOnInit {
|
|||
}
|
||||
|
||||
public void resetFirstTimeRun(SharedPreferences startPrefs) {
|
||||
if(startPrefs != null) {
|
||||
if (startPrefs != null) {
|
||||
startPrefs.edit().remove(FIRST_TIME_APP_RUN).commit();
|
||||
}
|
||||
}
|
||||
|
||||
public int getNumberOfStarts(SharedPreferences startPrefs) {
|
||||
if(startPrefs == null) {
|
||||
if (startPrefs == null) {
|
||||
return 0;
|
||||
}
|
||||
return startPrefs.getInt(NUMBER_OF_STARTS, 1);
|
||||
}
|
||||
|
||||
public long getFirstInstalledDays(SharedPreferences startPrefs) {
|
||||
if(startPrefs == null) {
|
||||
if (startPrefs == null) {
|
||||
return 0;
|
||||
}
|
||||
long nd = startPrefs.getLong(FIRST_INSTALLED, 0);
|
||||
|
@ -159,4 +184,165 @@ class AppVersionUpgradeOnInit {
|
|||
public boolean isFirstTime() {
|
||||
return firstTime;
|
||||
}
|
||||
}
|
||||
|
||||
public void migratePreferences() {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
migrateEnumPreferences();
|
||||
SharedPreferences globalSharedPreferences = (SharedPreferences) settings.getGlobalPreferences();
|
||||
Map<String, ?> globalPrefsMap = globalSharedPreferences.getAll();
|
||||
for (String key : globalPrefsMap.keySet()) {
|
||||
OsmandPreference<?> pref = settings.getPreference(key);
|
||||
if (pref instanceof CommonPreference) {
|
||||
CommonPreference<?> commonPreference = (CommonPreference<?>) pref;
|
||||
if (!commonPreference.isGlobal()) {
|
||||
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||
if (!commonPreference.isSetForMode(mode) && !commonPreference.hasDefaultValueForMode(mode)) {
|
||||
settings.setPreference(key, globalPrefsMap.get(key), mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SharedPreferences defaultProfilePreferences = (SharedPreferences) settings.getProfilePreferences(ApplicationMode.DEFAULT);
|
||||
Map<String, ?> defaultPrefsMap = defaultProfilePreferences.getAll();
|
||||
for (String key : defaultPrefsMap.keySet()) {
|
||||
OsmandPreference<?> pref = settings.getPreference(key);
|
||||
if (pref instanceof CommonPreference) {
|
||||
CommonPreference<?> commonPreference = (CommonPreference<?>) pref;
|
||||
if (commonPreference.isGlobal() && !commonPreference.isSet()) {
|
||||
settings.setPreference(key, defaultPrefsMap.get(key));
|
||||
}
|
||||
}
|
||||
}
|
||||
for (OsmandPreference<?> pref : getGeneralPrefs()) {
|
||||
if (pref instanceof CommonPreference) {
|
||||
CommonPreference<?> commonPref = (CommonPreference<?>) pref;
|
||||
Object defaultVal = commonPref.getModeValue(ApplicationMode.DEFAULT);
|
||||
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||
if (!commonPref.isSetForMode(mode) && !commonPref.hasDefaultValueForMode(mode)) {
|
||||
settings.setPreference(commonPref.getId(), defaultVal, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
String json = settings.getSettingsAPI().getString(settings.getGlobalPreferences(), "custom_app_profiles", "");
|
||||
if (!Algorithms.isEmpty(json)) {
|
||||
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
|
||||
Type t = new TypeToken<ArrayList<ApplicationMode.ApplicationModeBean>>() {
|
||||
}.getType();
|
||||
List<ApplicationMode.ApplicationModeBean> customProfiles = gson.fromJson(json, t);
|
||||
if (!Algorithms.isEmpty(customProfiles)) {
|
||||
for (ApplicationMode.ApplicationModeBean modeBean : customProfiles) {
|
||||
ApplicationMode.ApplicationModeBuilder builder = ApplicationMode.fromModeBean(app, modeBean);
|
||||
ApplicationMode.saveProfile(builder, app);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void migrateEnumPreferences() {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
for (OsmandPreference<?> pref : settings.getRegisteredPreferences().values()) {
|
||||
if (pref instanceof EnumStringPreference) {
|
||||
EnumStringPreference<?> enumPref = (EnumStringPreference<?>) pref;
|
||||
if (enumPref.isGlobal()) {
|
||||
migrateEnumPref(enumPref, (SharedPreferences) settings.getGlobalPreferences());
|
||||
} else {
|
||||
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||
migrateEnumPref(enumPref, (SharedPreferences) settings.getProfilePreferences(mode));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void migrateQuickActionStates() {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
String quickActionsJson = settings.getSettingsAPI().getString(settings.getGlobalPreferences(), "quick_action_new", "");
|
||||
if (!Algorithms.isEmpty(quickActionsJson)) {
|
||||
Gson gson = new GsonBuilder().create();
|
||||
Type type = new TypeToken<HashMap<String, Boolean>>() {
|
||||
}.getType();
|
||||
HashMap<String, Boolean> quickActions = gson.fromJson(quickActionsJson, type);
|
||||
if (!Algorithms.isEmpty(quickActions)) {
|
||||
for (ApplicationMode mode : ApplicationMode.allPossibleValues()) {
|
||||
settings.setQuickActions(quickActions, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void migrateEnumPref(EnumStringPreference enumPref, SharedPreferences sharedPreferences) {
|
||||
Object value = sharedPreferences.getAll().get(enumPref.getId());
|
||||
if (value instanceof Integer) {
|
||||
int enumIndex = (int) value;
|
||||
if (enumIndex >= 0 && enumIndex < enumPref.getValues().length) {
|
||||
Enum savedValue = enumPref.getValues()[enumIndex];
|
||||
enumPref.setValue(sharedPreferences, savedValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void migrateHomeWorkParkingToFavorites() {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
FavouritesDbHelper favorites = app.getFavorites();
|
||||
SettingsAPI settingsAPI = settings.getSettingsAPI();
|
||||
Object globalPreferences = settings.getGlobalPreferences();
|
||||
|
||||
LatLon homePoint = null;
|
||||
float lat = settingsAPI.getFloat(globalPreferences, "home_point_lat", 0);
|
||||
float lon = settingsAPI.getFloat(globalPreferences, "home_point_lon", 0);
|
||||
if (lat != 0 || lon != 0) {
|
||||
homePoint = new LatLon(lat, lon);
|
||||
}
|
||||
LatLon workPoint = null;
|
||||
lat = settingsAPI.getFloat(globalPreferences, "work_point_lat", 0);
|
||||
lon = settingsAPI.getFloat(globalPreferences, "work_point_lon", 0);
|
||||
if (lat != 0 || lon != 0) {
|
||||
workPoint = new LatLon(lat, lon);
|
||||
}
|
||||
if (homePoint != null) {
|
||||
favorites.setSpecialPoint(homePoint, SpecialPointType.HOME, null);
|
||||
}
|
||||
if (workPoint != null) {
|
||||
favorites.setSpecialPoint(workPoint, SpecialPointType.WORK, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public OsmandPreference<?>[] getGeneralPrefs() {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
return new OsmandPreference[] {
|
||||
settings.EXTERNAL_INPUT_DEVICE,
|
||||
settings.CENTER_POSITION_ON_MAP,
|
||||
settings.ROTATE_MAP,
|
||||
settings.MAP_SCREEN_ORIENTATION,
|
||||
settings.LIVE_MONITORING_URL,
|
||||
settings.LIVE_MONITORING_MAX_INTERVAL_TO_SEND,
|
||||
settings.LIVE_MONITORING_INTERVAL,
|
||||
settings.LIVE_MONITORING,
|
||||
settings.SHOW_TRIP_REC_NOTIFICATION,
|
||||
settings.AUTO_SPLIT_RECORDING,
|
||||
settings.SAVE_TRACK_MIN_SPEED,
|
||||
settings.SAVE_TRACK_PRECISION,
|
||||
settings.SAVE_TRACK_MIN_DISTANCE,
|
||||
settings.SAVE_TRACK_INTERVAL,
|
||||
settings.TRACK_STORAGE_DIRECTORY,
|
||||
settings.SAVE_HEADING_TO_GPX,
|
||||
settings.DISABLE_RECORDING_ONCE_APP_KILLED,
|
||||
settings.SAVE_TRACK_TO_GPX,
|
||||
settings.SAVE_GLOBAL_TRACK_REMEMBER,
|
||||
settings.SAVE_GLOBAL_TRACK_INTERVAL,
|
||||
settings.MAP_EMPTY_STATE_ALLOWED,
|
||||
settings.DO_NOT_USE_ANIMATIONS,
|
||||
settings.USE_KALMAN_FILTER_FOR_COMPASS,
|
||||
settings.USE_MAGNETIC_FIELD_SENSOR_COMPASS,
|
||||
settings.USE_TRACKBALL_FOR_MOVEMENTS,
|
||||
settings.SPEED_SYSTEM,
|
||||
settings.ANGULAR_UNITS,
|
||||
settings.METRIC_SYSTEM,
|
||||
settings.DRIVING_REGION,
|
||||
settings.DRIVING_REGION_AUTOMATIC
|
||||
};
|
||||
}
|
||||
}
|
|
@ -38,9 +38,8 @@ import net.osmand.plus.dialogs.HelpArticleDialogFragment;
|
|||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.ContextMenuItemsPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.ContextMenuItemsPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -137,14 +136,18 @@ public class ContextMenuAdapter {
|
|||
Collections.sort(items, new Comparator<ContextMenuItem>() {
|
||||
@Override
|
||||
public int compare(ContextMenuItem item1, ContextMenuItem item2) {
|
||||
if (DRAWER_SWITCH_PROFILE_ID.equals(item1.getId())) {
|
||||
return -1;
|
||||
}
|
||||
if (DRAWER_CONFIGURE_PROFILE_ID.equals(item1.getId()) && DRAWER_SWITCH_PROFILE_ID.equals(item2.getId())) {
|
||||
if (DRAWER_CONFIGURE_PROFILE_ID.equals(item1.getId())
|
||||
&& DRAWER_SWITCH_PROFILE_ID.equals(item2.getId())) {
|
||||
return 1;
|
||||
}
|
||||
if (DRAWER_CONFIGURE_PROFILE_ID.equals(item1.getId())) {
|
||||
} else if (DRAWER_SWITCH_PROFILE_ID.equals(item1.getId())
|
||||
&& DRAWER_CONFIGURE_PROFILE_ID.equals(item2.getId())) {
|
||||
return -1;
|
||||
} else if (DRAWER_SWITCH_PROFILE_ID.equals(item1.getId())
|
||||
|| DRAWER_CONFIGURE_PROFILE_ID.equals(item1.getId())) {
|
||||
return -1;
|
||||
} else if (DRAWER_SWITCH_PROFILE_ID.equals(item2.getId())
|
||||
|| DRAWER_CONFIGURE_PROFILE_ID.equals(item2.getId())) {
|
||||
return 1;
|
||||
}
|
||||
int order1 = item1.getOrder();
|
||||
int order2 = item2.getOrder();
|
||||
|
@ -643,7 +646,7 @@ public class ContextMenuAdapter {
|
|||
return makeDeleteAction(prefs.toArray(new OsmandPreference[prefs.size()]));
|
||||
}
|
||||
|
||||
private static void resetSetting(ApplicationMode appMode, OsmandSettings.OsmandPreference preference, boolean profileOnly) {
|
||||
private static void resetSetting(ApplicationMode appMode, OsmandPreference preference, boolean profileOnly) {
|
||||
if (profileOnly) {
|
||||
preference.resetModeToDefault(appMode);
|
||||
} else {
|
||||
|
|
|
@ -29,7 +29,7 @@ import net.osmand.plus.helpers.GpxUiHelper;
|
|||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;
|
||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
||||
import net.osmand.plus.routing.RouteProvider;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.track.GpxSplitType;
|
||||
import net.osmand.plus.track.GradientScaleType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
|
|
@ -15,9 +15,9 @@ import net.osmand.osm.PoiCategory;
|
|||
import net.osmand.osm.PoiType;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.AngularConstants;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.SpeedConstants;
|
||||
import net.osmand.plus.helpers.enums.AngularConstants;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.helpers.enums.SpeedConstants;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.text.DateFormatSymbols;
|
||||
|
|
|
@ -30,6 +30,7 @@ import androidx.multidex.MultiDex;
|
|||
import androidx.multidex.MultiDexApplication;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.FileUtils;
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.access.AccessibilityPlugin;
|
||||
|
@ -42,7 +43,7 @@ import net.osmand.osm.MapPoiTypes;
|
|||
import net.osmand.osm.io.NetworkUtils;
|
||||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.access.AccessibilityMode;
|
||||
import net.osmand.plus.activities.DayNightHelper;
|
||||
import net.osmand.plus.helpers.DayNightHelper;
|
||||
import net.osmand.plus.activities.ExitActivity;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
|
@ -56,7 +57,9 @@ import net.osmand.plus.download.DownloadIndexesThread;
|
|||
import net.osmand.plus.download.DownloadService;
|
||||
import net.osmand.plus.download.IndexItem;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads;
|
||||
import net.osmand.plus.helpers.enums.DrivingRegion;
|
||||
import net.osmand.plus.helpers.LockHelper;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.helpers.WaypointHelper;
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
|
@ -189,7 +192,7 @@ public class OsmandApplication extends MultiDexApplication {
|
|||
osmandSettings.initExternalStorageDirectory();
|
||||
}
|
||||
externalStorageDirectory = osmandSettings.getExternalStorageDirectory();
|
||||
if (!OsmandSettings.isWritable(externalStorageDirectory)) {
|
||||
if (!FileUtils.isWritable(externalStorageDirectory)) {
|
||||
externalStorageDirectoryReadOnly = true;
|
||||
externalStorageDirectory = osmandSettings.getInternalAppPath();
|
||||
}
|
||||
|
@ -983,15 +986,15 @@ public class OsmandApplication extends MultiDexApplication {
|
|||
}
|
||||
|
||||
public void setupDrivingRegion(WorldRegion reg) {
|
||||
OsmandSettings.DrivingRegion drg = null;
|
||||
DrivingRegion drg = null;
|
||||
WorldRegion.RegionParams params = reg.getParams();
|
||||
// boolean americanSigns = "american".equals(params.getRegionRoadSigns());
|
||||
boolean leftHand = "yes".equals(params.getRegionLeftHandDriving());
|
||||
OsmandSettings.MetricsConstants mc1 = "miles".equals(params.getRegionMetric()) ?
|
||||
OsmandSettings.MetricsConstants.MILES_AND_FEET : OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS;
|
||||
OsmandSettings.MetricsConstants mc2 = "miles".equals(params.getRegionMetric()) ?
|
||||
OsmandSettings.MetricsConstants.MILES_AND_METERS : OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS;
|
||||
for (OsmandSettings.DrivingRegion r : OsmandSettings.DrivingRegion.values()) {
|
||||
MetricsConstants mc1 = "miles".equals(params.getRegionMetric()) ?
|
||||
MetricsConstants.MILES_AND_FEET : MetricsConstants.KILOMETERS_AND_METERS;
|
||||
MetricsConstants mc2 = "miles".equals(params.getRegionMetric()) ?
|
||||
MetricsConstants.MILES_AND_METERS : MetricsConstants.KILOMETERS_AND_METERS;
|
||||
for (DrivingRegion r : DrivingRegion.values()) {
|
||||
if (r.leftHandDriving == leftHand && (r.defMetrics == mc1 || r.defMetrics == mc2)) {
|
||||
drg = r;
|
||||
break;
|
||||
|
|
|
@ -47,6 +47,8 @@ import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
|||
import net.osmand.plus.search.QuickSearchDialogFragment;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
|
||||
import net.osmand.plus.skimapsplugin.SkiMapsPlugin;
|
||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||
|
@ -80,7 +82,7 @@ public abstract class OsmandPlugin {
|
|||
|
||||
protected OsmandApplication app;
|
||||
|
||||
protected List<OsmandSettings.OsmandPreference> pluginPreferences = new ArrayList<>();
|
||||
protected List<OsmandPreference> pluginPreferences = new ArrayList<>();
|
||||
|
||||
private boolean active;
|
||||
private String installURL = null;
|
||||
|
@ -118,7 +120,7 @@ public abstract class OsmandPlugin {
|
|||
return null;
|
||||
}
|
||||
|
||||
public List<OsmandSettings.OsmandPreference> getPreferences() {
|
||||
public List<OsmandPreference> getPreferences() {
|
||||
return pluginPreferences;
|
||||
}
|
||||
|
||||
|
@ -919,44 +921,44 @@ public abstract class OsmandPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
protected OsmandSettings.CommonPreference<Boolean> registerBooleanPreference(OsmandApplication app, String prefId, boolean defValue) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference = app.getSettings().registerBooleanPreference(prefId, defValue);
|
||||
protected CommonPreference<Boolean> registerBooleanPreference(OsmandApplication app, String prefId, boolean defValue) {
|
||||
CommonPreference<Boolean> preference = app.getSettings().registerBooleanPreference(prefId, defValue);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
||||
private OsmandSettings.CommonPreference<Boolean> registerBooleanAccessibilityPreference(OsmandApplication app, String prefId, boolean defValue) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference = app.getSettings().registerBooleanAccessibilityPreference(prefId, defValue);
|
||||
private CommonPreference<Boolean> registerBooleanAccessibilityPreference(OsmandApplication app, String prefId, boolean defValue) {
|
||||
CommonPreference<Boolean> preference = app.getSettings().registerBooleanAccessibilityPreference(prefId, defValue);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
||||
protected OsmandSettings.CommonPreference<String> registerStringPreference(OsmandApplication app, String prefId, String defValue) {
|
||||
OsmandSettings.CommonPreference<String> preference = app.getSettings().registerStringPreference(prefId, defValue);
|
||||
protected CommonPreference<String> registerStringPreference(OsmandApplication app, String prefId, String defValue) {
|
||||
CommonPreference<String> preference = app.getSettings().registerStringPreference(prefId, defValue);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
||||
protected OsmandSettings.CommonPreference<Integer> registerIntPreference(OsmandApplication app, String prefId, int defValue) {
|
||||
OsmandSettings.CommonPreference<Integer> preference = app.getSettings().registerIntPreference(prefId, defValue);
|
||||
protected CommonPreference<Integer> registerIntPreference(OsmandApplication app, String prefId, int defValue) {
|
||||
CommonPreference<Integer> preference = app.getSettings().registerIntPreference(prefId, defValue);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
||||
protected OsmandSettings.CommonPreference<Long> registerLongPreference(OsmandApplication app, String prefId, long defValue) {
|
||||
OsmandSettings.CommonPreference<Long> preference = app.getSettings().registerLongPreference(prefId, defValue);
|
||||
protected CommonPreference<Long> registerLongPreference(OsmandApplication app, String prefId, long defValue) {
|
||||
CommonPreference<Long> preference = app.getSettings().registerLongPreference(prefId, defValue);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
||||
protected OsmandSettings.CommonPreference<Float> registerFloatPreference(OsmandApplication app, String prefId, float defValue) {
|
||||
OsmandSettings.CommonPreference<Float> preference = app.getSettings().registerFloatPreference(prefId, defValue);
|
||||
protected CommonPreference<Float> registerFloatPreference(OsmandApplication app, String prefId, float defValue) {
|
||||
CommonPreference<Float> preference = app.getSettings().registerFloatPreference(prefId, defValue);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
||||
protected <T extends Enum> OsmandSettings.CommonPreference<T> registerEnumIntPreference(OsmandApplication app, String prefId, Enum defaultValue, Enum[] values, Class<T> clz) {
|
||||
OsmandSettings.CommonPreference<T> preference = app.getSettings().registerEnumIntPreference(prefId, defaultValue, values, clz);
|
||||
protected <T extends Enum> CommonPreference<T> registerEnumIntPreference(OsmandApplication app, String prefId, Enum defaultValue, Enum[] values, Class<T> clz) {
|
||||
CommonPreference<T> preference = app.getSettings().registerEnumIntPreference(prefId, defaultValue, values, clz);
|
||||
pluginPreferences.add(preference);
|
||||
return preference;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
package net.osmand.plus;
|
||||
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
public class Version {
|
||||
|
||||
private final String appVersion;
|
||||
|
@ -149,4 +151,21 @@ public class Version {
|
|||
return v;
|
||||
}
|
||||
|
||||
}
|
||||
public static boolean isOpenGlAvailable(OsmandApplication app) {
|
||||
if ("qnx".equals(System.getProperty("os.name"))) {
|
||||
return false;
|
||||
}
|
||||
File nativeLibraryDir = new File(app.getApplicationInfo().nativeLibraryDir);
|
||||
if (nativeLibraryDir.exists() && nativeLibraryDir.canRead()) {
|
||||
File[] files = nativeLibraryDir.listFiles();
|
||||
if (files != null) {
|
||||
for (File file : files) {
|
||||
if ("libOsmAndCoreWithJNI.so".equals(file.getName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -43,6 +43,7 @@ import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
|||
import net.osmand.plus.FavouritesDbHelper.FavoritesListener;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
@ -96,7 +97,7 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen
|
|||
private Set<FavoriteGroup> groupsToDelete = new LinkedHashSet<>();
|
||||
private ActionMode actionMode;
|
||||
private Drawable arrowImageDisabled;
|
||||
private HashMap<String, OsmandSettings.OsmandPreference<Boolean>> preferenceCache = new HashMap<>();
|
||||
private HashMap<String, OsmandPreference<Boolean>> preferenceCache = new HashMap<>();
|
||||
private View footerView;
|
||||
private Location lastLocation;
|
||||
private float lastHeading;
|
||||
|
@ -763,8 +764,8 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment implemen
|
|||
}
|
||||
}
|
||||
|
||||
private OsmandSettings.OsmandPreference<Boolean> getGroupExpandedPreference(String groupName) {
|
||||
OsmandSettings.OsmandPreference<Boolean> preference = preferenceCache.get(groupName);
|
||||
private OsmandPreference<Boolean> getGroupExpandedPreference(String groupName) {
|
||||
OsmandPreference<Boolean> preference = preferenceCache.get(groupName);
|
||||
if (preference == null) {
|
||||
String groupKey = groupName + GROUP_EXPANDED_POSTFIX;
|
||||
preference = getSettings().registerBooleanPreference(groupKey, false);
|
||||
|
|
|
@ -74,6 +74,9 @@ import net.osmand.plus.OsmAndConstants;
|
|||
import net.osmand.plus.OsmAndLocationSimulation;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.helpers.DayNightHelper;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.TargetPointsHelper;
|
||||
import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
||||
|
@ -130,7 +133,6 @@ import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchTab;
|
|||
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchType;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
|
||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType;
|
||||
import net.osmand.plus.settings.fragments.ConfigureProfileFragment;
|
||||
|
@ -533,7 +535,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
@Override
|
||||
public void requestPrivateAccessRouting() {
|
||||
if (!settings.FORCE_PRIVATE_ACCESS_ROUTING_ASKED.getModeValue(getRoutingHelper().getAppMode())) {
|
||||
final OsmandSettings.CommonPreference<Boolean> allowPrivate
|
||||
final CommonPreference<Boolean> allowPrivate
|
||||
= settings.getCustomRoutingBooleanProperty(GeneralRouter.ALLOW_PRIVATE, false);
|
||||
final List<ApplicationMode> modes = ApplicationMode.values(app);
|
||||
for (ApplicationMode mode : modes) {
|
||||
|
|
|
@ -29,7 +29,7 @@ import net.osmand.plus.DialogListItemAdapter;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.SQLiteTileSource;
|
||||
import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode;
|
||||
|
|
|
@ -25,13 +25,13 @@ import net.osmand.AndroidUtils;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.profiles.AppProfileArrayAdapter;
|
||||
import net.osmand.plus.profiles.ProfileDataObject;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
|
|
|
@ -42,9 +42,9 @@ import net.osmand.osm.io.NetworkUtils;
|
|||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.AngularConstants;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.DrivingRegion;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.plus.helpers.enums.AngularConstants;
|
||||
import net.osmand.plus.helpers.enums.DrivingRegion;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.base.MapViewTrackingUtilities;
|
||||
|
|
|
@ -34,6 +34,12 @@ import net.osmand.plus.ContextMenuAdapter;
|
|||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.helpers.enums.AutoZoomMap;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.helpers.enums.SpeedConstants;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.Version;
|
||||
|
@ -44,10 +50,6 @@ import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper;
|
|||
import net.osmand.plus.routing.RouteProvider.RouteService;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.AutoZoomMap;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.SpeedConstants;
|
||||
import net.osmand.plus.voice.CommandPlayer;
|
||||
import net.osmand.router.GeneralRouter;
|
||||
import net.osmand.router.GeneralRouter.GeneralRouterProfile;
|
||||
|
@ -171,7 +173,7 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
|
|||
//array size must be equal!
|
||||
Float[] speedLimitsKmhPos = new Float[]{0f, 5f, 7f, 10f, 15f, 20f};
|
||||
Float[] speedLimitsMphPos = new Float[]{0f, 3f, 5f, 7f, 10f, 15f};
|
||||
if (settings.METRIC_SYSTEM.get() == OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS) {
|
||||
if (settings.METRIC_SYSTEM.get() == MetricsConstants.KILOMETERS_AND_METERS) {
|
||||
String[] speedNames = new String[speedLimitsKmh.length];
|
||||
String[] speedNamesPos = new String[speedLimitsKmhPos.length];
|
||||
for (int i = 0; i < speedLimitsKmh.length; i++) {
|
||||
|
@ -407,7 +409,7 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
|
|||
}
|
||||
|
||||
public static boolean isRoutingParameterSelected(OsmandSettings settings, ApplicationMode am, RoutingParameter routingParameter) {
|
||||
final OsmandSettings.CommonPreference<Boolean> property =
|
||||
final CommonPreference<Boolean> property =
|
||||
settings.getCustomRoutingBooleanProperty(routingParameter.getId(), routingParameter.getDefaultBoolean());
|
||||
if(am != null) {
|
||||
return property.getModeValue(am);
|
||||
|
@ -417,7 +419,7 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
|
|||
}
|
||||
|
||||
public static void setRoutingParameterSelected(OsmandSettings settings, ApplicationMode am, String routingParameterId, boolean defaultBoolean, boolean isChecked) {
|
||||
final OsmandSettings.CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameterId, defaultBoolean);
|
||||
final CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameterId, defaultBoolean);
|
||||
if (am != null) {
|
||||
property.setModeValue(am, isChecked);
|
||||
} else {
|
||||
|
|
|
@ -53,8 +53,8 @@ import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
|
|||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -38,7 +38,6 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.NotesSortByMode;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.ActionBarProgressActivity;
|
||||
|
|
14
OsmAnd/src/net/osmand/plus/audionotes/NotesSortByMode.java
Normal file
14
OsmAnd/src/net/osmand/plus/audionotes/NotesSortByMode.java
Normal file
|
@ -0,0 +1,14 @@
|
|||
package net.osmand.plus.audionotes;
|
||||
|
||||
public enum NotesSortByMode {
|
||||
BY_TYPE,
|
||||
BY_DATE;
|
||||
|
||||
public boolean isByType() {
|
||||
return this == BY_TYPE;
|
||||
}
|
||||
|
||||
public boolean isByDate() {
|
||||
return this == BY_DATE;
|
||||
}
|
||||
}
|
|
@ -3,8 +3,7 @@ package net.osmand.plus.audionotes;
|
|||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.NotesSortByMode;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
|
@ -53,7 +52,7 @@ public class SortByMenuBottomSheetDialogFragment extends MenuBottomSheetDialogFr
|
|||
}
|
||||
|
||||
private void selectSortByMode(NotesSortByMode mode) {
|
||||
final OsmandSettings.CommonPreference<NotesSortByMode> sortByMode = getMyApplication().getSettings().NOTES_SORT_BY_MODE;
|
||||
final CommonPreference<NotesSortByMode> sortByMode = getMyApplication().getSettings().NOTES_SORT_BY_MODE;
|
||||
if (sortByMode.get() != mode) {
|
||||
sortByMode.set(mode);
|
||||
if (listener != null) {
|
||||
|
|
|
@ -25,7 +25,7 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.BaseOsmAndDialogFragment;
|
||||
|
|
|
@ -30,6 +30,7 @@ import androidx.fragment.app.Fragment;
|
|||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.FileUtils;
|
||||
import net.osmand.ValueHolder;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
|
@ -113,7 +114,7 @@ public class DashChooseAppDirFragment {
|
|||
boolean copyFiles = !currentAppFile.getAbsolutePath().equals(selectedFile.getAbsolutePath()) && !mapsCopied;
|
||||
warningReadonly.setVisibility(copyFiles ? View.VISIBLE : View.GONE);
|
||||
if (copyFiles) {
|
||||
if (!OsmandSettings.isWritable(currentAppFile)) {
|
||||
if (!FileUtils.isWritable(currentAppFile)) {
|
||||
warningReadonly.setText(activity.getString(R.string.android_19_location_disabled,
|
||||
currentAppFile.getAbsolutePath()));
|
||||
} else {
|
||||
|
@ -385,7 +386,7 @@ public class DashChooseAppDirFragment {
|
|||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
boolean wr = OsmandSettings.isWritable(selectedFile);
|
||||
boolean wr = FileUtils.isWritable(selectedFile);
|
||||
if (wr) {
|
||||
boolean changed = !currentAppFile.getAbsolutePath().equals(selectedFile.getAbsolutePath());
|
||||
getMyApplication().setExternalStorageDirectory(type, selectedFile.getAbsolutePath());
|
||||
|
|
|
@ -24,7 +24,7 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -35,12 +35,7 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment {
|
|||
|
||||
setupOpenglRenderPref();
|
||||
setupSafeModePref();
|
||||
setupPTSafeMode();
|
||||
|
||||
setupDisableComplexRoutingPref();
|
||||
setupFastRecalculationPref();
|
||||
setupOsmLiveForRoutingPref();
|
||||
setupOsmLiveForPublicTransportPref();
|
||||
setupSimulateYourLocationPref();
|
||||
|
||||
Preference debuggingAndDevelopment = findPreference("debugging_and_development");
|
||||
|
@ -62,13 +57,17 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment {
|
|||
}
|
||||
|
||||
private void setupOpenglRenderPref() {
|
||||
SwitchPreferenceEx useOpenglRender = (SwitchPreferenceEx) findPreference(settings.USE_OPENGL_RENDER.getId());
|
||||
useOpenglRender.setDescription(getString(R.string.use_opengl_render_descr));
|
||||
useOpenglRender.setIconSpaceReserved(false);
|
||||
SwitchPreferenceEx useOpenglRender = findPreference(settings.USE_OPENGL_RENDER.getId());
|
||||
if (Version.isOpenGlAvailable(app)) {
|
||||
useOpenglRender.setDescription(getString(R.string.use_opengl_render_descr));
|
||||
useOpenglRender.setIconSpaceReserved(false);
|
||||
} else {
|
||||
useOpenglRender.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupSafeModePref() {
|
||||
SwitchPreferenceEx safeMode = (SwitchPreferenceEx) findPreference(settings.SAFE_MODE.getId());
|
||||
SwitchPreferenceEx safeMode = findPreference(settings.SAFE_MODE.getId());
|
||||
if (!Version.isBlackberry(app)) {
|
||||
safeMode.setDescription(getString(R.string.safe_mode_description));
|
||||
safeMode.setIconSpaceReserved(false);
|
||||
|
@ -82,40 +81,6 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment {
|
|||
}
|
||||
}
|
||||
|
||||
private void setupPTSafeMode() {
|
||||
SwitchPreferenceEx ptSafeMode = (SwitchPreferenceEx) findPreference(settings.PT_SAFE_MODE.getId());
|
||||
if (!Version.isBlackberry(app)) {
|
||||
ptSafeMode.setDescription("Switch to Java (safe) Public Transport routing calculation");
|
||||
ptSafeMode.setIconSpaceReserved(false);
|
||||
} else {
|
||||
ptSafeMode.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupDisableComplexRoutingPref() {
|
||||
SwitchPreferenceEx disableComplexRouting = (SwitchPreferenceEx) findPreference(settings.DISABLE_COMPLEX_ROUTING.getId());
|
||||
disableComplexRouting.setDescription(getString(R.string.disable_complex_routing_descr));
|
||||
disableComplexRouting.setIconSpaceReserved(false);
|
||||
}
|
||||
|
||||
private void setupFastRecalculationPref() {
|
||||
SwitchPreferenceEx useFastRecalculation = (SwitchPreferenceEx) findPreference(settings.USE_FAST_RECALCULATION.getId());
|
||||
useFastRecalculation.setDescription(getString(R.string.use_fast_recalculation_desc));
|
||||
useFastRecalculation.setIconSpaceReserved(false);
|
||||
}
|
||||
|
||||
private void setupOsmLiveForRoutingPref() {
|
||||
SwitchPreferenceEx useOsmLiveForRouting = (SwitchPreferenceEx) findPreference(settings.USE_OSM_LIVE_FOR_ROUTING.getId());
|
||||
useOsmLiveForRouting.setDescription(getString(R.string.use_osm_live_routing_description));
|
||||
useOsmLiveForRouting.setIconSpaceReserved(false);
|
||||
}
|
||||
|
||||
private void setupOsmLiveForPublicTransportPref() {
|
||||
SwitchPreferenceEx useOsmLiveForPublicTransport = (SwitchPreferenceEx) findPreference(settings.USE_OSM_LIVE_FOR_PUBLIC_TRANSPORT.getId());
|
||||
useOsmLiveForPublicTransport.setDescription(getString(R.string.use_osm_live_public_transport_description));
|
||||
useOsmLiveForPublicTransport.setIconSpaceReserved(false);
|
||||
}
|
||||
|
||||
private void setupSimulateYourLocationPref() {
|
||||
final Preference simulateYourLocation = findPreference(SIMULATE_YOUR_LOCATION);
|
||||
simulateYourLocation.setIconSpaceReserved(false);
|
||||
|
|
|
@ -14,11 +14,11 @@ import android.preference.PreferenceScreen;
|
|||
|
||||
import net.osmand.plus.OsmAndLocationSimulation;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.SettingsBaseActivity;
|
||||
import net.osmand.plus.render.NativeOsmandLibrary;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.util.SunriseSunset;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
|
@ -34,41 +34,27 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
app.applyTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
getToolbar().setTitle(R.string.debugging_and_development);
|
||||
PreferenceScreen cat = getPreferenceScreen();
|
||||
PreferenceScreen category = getPreferenceScreen();
|
||||
Preference pref;
|
||||
|
||||
cat.addPreference(createCheckBoxPreference(settings.USE_OPENGL_RENDER,
|
||||
R.string.use_opengl_render, R.string.use_opengl_render_descr));
|
||||
if (Version.isOpenGlAvailable(app)) {
|
||||
category.addPreference(createCheckBoxPreference(settings.USE_OPENGL_RENDER,
|
||||
R.string.use_opengl_render, R.string.use_opengl_render_descr));
|
||||
}
|
||||
|
||||
if (!Version.isBlackberry(app)) {
|
||||
CheckBoxPreference nativeCheckbox = createCheckBoxPreference(settings.SAFE_MODE, R.string.safe_mode, R.string.safe_mode_description);
|
||||
CheckBoxPreference nativePTCheckbox = createCheckBoxPreference(settings.PT_SAFE_MODE, "Native PT routing development", "Switch to Java (safe) Public Transport routing calculation");
|
||||
// disable the checkbox if the library cannot be used
|
||||
if ((NativeOsmandLibrary.isLoaded() && !NativeOsmandLibrary.isSupported()) || settings.NATIVE_RENDERING_FAILED.get()) {
|
||||
nativeCheckbox.setEnabled(false);
|
||||
nativeCheckbox.setChecked(true);
|
||||
}
|
||||
cat.addPreference(nativeCheckbox);
|
||||
cat.addPreference(nativePTCheckbox);
|
||||
category.addPreference(nativeCheckbox);
|
||||
}
|
||||
|
||||
PreferenceCategory navigation = new PreferenceCategory(this);
|
||||
navigation.setTitle(R.string.routing_settings);
|
||||
cat.addPreference(navigation);
|
||||
navigation.addPreference(createCheckBoxPreference(settings.DISABLE_COMPLEX_ROUTING,
|
||||
R.string.disable_complex_routing, R.string.disable_complex_routing_descr));
|
||||
|
||||
navigation.addPreference(createCheckBoxPreference(settings.USE_FAST_RECALCULATION,
|
||||
R.string.use_fast_recalculation, R.string.use_fast_recalculation_desc));
|
||||
|
||||
navigation.addPreference(createCheckBoxPreference(settings.USE_OSM_LIVE_FOR_ROUTING,
|
||||
R.string.use_osm_live_routing,
|
||||
R.string.use_osm_live_routing_description));
|
||||
|
||||
navigation.addPreference(createCheckBoxPreference(settings.USE_OSM_LIVE_FOR_PUBLIC_TRANSPORT,
|
||||
R.string.use_osm_live_public_transport,
|
||||
R.string.use_osm_live_public_transport_description));
|
||||
|
||||
category.addPreference(navigation);
|
||||
pref = new Preference(this);
|
||||
final Preference simulate = pref;
|
||||
final OsmAndLocationSimulation sim = getMyApplication().getLocationProvider().getLocationSimulation();
|
||||
|
@ -95,7 +81,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
|
||||
PreferenceCategory debug = new PreferenceCategory(this);
|
||||
debug.setTitle(R.string.debugging_and_development);
|
||||
cat.addPreference(debug);
|
||||
category.addPreference(debug);
|
||||
|
||||
CheckBoxPreference dbg = createCheckBoxPreference(settings.DEBUG_RENDERING_INFO,
|
||||
R.string.trace_rendering, R.string.trace_rendering_descr);
|
||||
|
@ -125,10 +111,6 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
debug.addPreference(createCheckBoxPreference(settings.SHOULD_SHOW_FREE_VERSION_BANNER,
|
||||
R.string.show_free_version_banner,
|
||||
R.string.show_free_version_banner_description));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
pref = new Preference(this);
|
||||
pref.setTitle(R.string.test_voice_prompts);
|
||||
|
@ -141,7 +123,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
return true;
|
||||
}
|
||||
});
|
||||
cat.addPreference(pref);
|
||||
category.addPreference(pref);
|
||||
|
||||
pref = new Preference(this);
|
||||
pref.setTitle(R.string.logcat_buffer);
|
||||
|
@ -154,11 +136,11 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
return true;
|
||||
}
|
||||
});
|
||||
cat.addPreference(pref);
|
||||
category.addPreference(pref);
|
||||
|
||||
PreferenceCategory info = new PreferenceCategory(this);
|
||||
info.setTitle(R.string.info_button);
|
||||
cat.addPreference(info);
|
||||
category.addPreference(info);
|
||||
|
||||
pref = new Preference(this);
|
||||
pref.setTitle(R.string.global_app_allocated_memory);
|
||||
|
|
|
@ -19,7 +19,7 @@ import android.widget.Toast;
|
|||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||
import net.osmand.plus.routing.data.StreetName;
|
||||
|
@ -151,7 +151,7 @@ public class TestVoiceActivity extends OsmandActionBarActivity {
|
|||
v += "\n \u25CF BT SCO: The current app profile is not set to use 'Phone call audio'.";
|
||||
}
|
||||
|
||||
//OsmandSettings.OsmandPreference<Integer> pref = ((OsmandApplication) getApplication()).getSettings().VOICE_PROMPT_DELAY[stream];
|
||||
//OsmandPreference<Integer> pref = ((OsmandApplication) getApplication()).getSettings().VOICE_PROMPT_DELAY[stream];
|
||||
//if(pref != null) {
|
||||
// v += "\n \u25CF Voice prompt delay for selected output: " + pref.get() + "\u00A0ms";
|
||||
//}
|
||||
|
@ -299,7 +299,7 @@ public class TestVoiceActivity extends OsmandActionBarActivity {
|
|||
}
|
||||
if (description.startsWith("\u25BA (11.2)")) {
|
||||
int ams = ((OsmandApplication) getApplication()).getSettings().AUDIO_MANAGER_STREAM.get();
|
||||
OsmandSettings.OsmandPreference<Integer> pref = ((OsmandApplication) getApplication()).getSettings().VOICE_PROMPT_DELAY[ams];
|
||||
OsmandPreference<Integer> pref = ((OsmandApplication) getApplication()).getSettings().VOICE_PROMPT_DELAY[ams];
|
||||
if (pref != null) {
|
||||
if (pref.get() >= 3000) {
|
||||
pref.set(0);
|
||||
|
|
|
@ -33,6 +33,11 @@ import net.osmand.plus.ContextMenuItem;
|
|||
import net.osmand.plus.DialogListItemAdapter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.helpers.enums.DayNightMode;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.ListStringPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
@ -40,9 +45,6 @@ import net.osmand.plus.activities.SettingsActivity;
|
|||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.ListStringPreference;
|
||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||
import net.osmand.plus.transport.TransportLinesMenu;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
|
@ -307,7 +309,7 @@ public class ConfigureMapMenu {
|
|||
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
|
||||
String sunriseTime = dateFormat.format(sunriseSunset.getSunrise());
|
||||
String sunsetTime = dateFormat.format(sunriseSunset.getSunset());
|
||||
OsmandSettings.DayNightMode dayNightMode = activity.getMyApplication().getSettings().DAYNIGHT_MODE.get();
|
||||
DayNightMode dayNightMode = activity.getMyApplication().getSettings().DAYNIGHT_MODE.get();
|
||||
if (dayNightMode.isDay() || dayNightMode.isNight()) {
|
||||
if (sunriseSunset.isDaytime()) {
|
||||
description = String.format(app.getString(R.string.sunset_at), sunsetTime);
|
||||
|
@ -334,9 +336,9 @@ public class ConfigureMapMenu {
|
|||
final OsmandMapTileView view = activity.getMapView();
|
||||
AlertDialog.Builder bld = new AlertDialog.Builder(new ContextThemeWrapper(view.getContext(), themeRes));
|
||||
bld.setTitle(R.string.daynight);
|
||||
final String[] items = new String[OsmandSettings.DayNightMode.values().length];
|
||||
final String[] items = new String[DayNightMode.values().length];
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(app);
|
||||
items[i] = DayNightMode.values()[i].toHumanString(app);
|
||||
}
|
||||
int i = view.getSettings().DAYNIGHT_MODE.get().ordinal();
|
||||
bld.setNegativeButton(R.string.shared_string_dismiss, null);
|
||||
|
@ -345,7 +347,7 @@ public class ConfigureMapMenu {
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
int which = (int) v.getTag();
|
||||
view.getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]);
|
||||
view.getSettings().DAYNIGHT_MODE.set(DayNightMode.values()[which]);
|
||||
refreshMapComplete(activity);
|
||||
activity.getDashboard().refreshContent(true);
|
||||
// adapter.getItem(pos).setDescription(s, getDayNightDescr(activity));
|
||||
|
@ -376,7 +378,7 @@ public class ConfigureMapMenu {
|
|||
return false;
|
||||
}
|
||||
final OsmandMapTileView view = activity.getMapView();
|
||||
final OsmandSettings.OsmandPreference<Float> mapDensity = view.getSettings().MAP_DENSITY;
|
||||
final OsmandPreference<Float> mapDensity = view.getSettings().MAP_DENSITY;
|
||||
AlertDialog.Builder bld = new AlertDialog.Builder(new ContextThemeWrapper(view.getContext(), themeRes));
|
||||
int p = (int) (mapDensity.get() * 100);
|
||||
final TIntArrayList tlist = new TIntArrayList(new int[]{25, 33, 50, 75, 100, 125, 150, 200, 300, 400});
|
||||
|
@ -669,25 +671,25 @@ public class ConfigureMapMenu {
|
|||
@ColorInt final int selectedProfileColor) {
|
||||
|
||||
final List<RenderingRuleProperty> ps = new ArrayList<>();
|
||||
final List<OsmandSettings.CommonPreference<Boolean>> prefs = new ArrayList<>();
|
||||
final List<CommonPreference<Boolean>> prefs = new ArrayList<>();
|
||||
Iterator<RenderingRuleProperty> it = customRules.iterator();
|
||||
|
||||
while (it.hasNext()) {
|
||||
RenderingRuleProperty p = it.next();
|
||||
if (category.equals(p.getCategory()) && p.isBoolean()) {
|
||||
ps.add(p);
|
||||
final OsmandSettings.CommonPreference<Boolean> pref = activity.getMyApplication().getSettings()
|
||||
final CommonPreference<Boolean> pref = activity.getMyApplication().getSettings()
|
||||
.getCustomRenderBooleanProperty(p.getAttrName());
|
||||
prefs.add(pref);
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
if (prefs.size() > 0) {
|
||||
final List<OsmandSettings.CommonPreference<String>> includedPrefs = new ArrayList<>();
|
||||
final List<CommonPreference<String>> includedPrefs = new ArrayList<>();
|
||||
if (customRulesIncluded != null) {
|
||||
for (RenderingRuleProperty p : customRulesIncluded) {
|
||||
if (!p.isBoolean()) {
|
||||
final OsmandSettings.CommonPreference<String> pref = activity.getMyApplication().getSettings()
|
||||
final CommonPreference<String> pref = activity.getMyApplication().getSettings()
|
||||
.getCustomRenderProperty(p.getAttrName());
|
||||
includedPrefs.add(pref);
|
||||
}
|
||||
|
@ -729,14 +731,14 @@ public class ConfigureMapMenu {
|
|||
.setId(id)
|
||||
.setIcon(icon).setListener(clickListener);
|
||||
boolean selected = false;
|
||||
for (OsmandSettings.CommonPreference<Boolean> p : prefs) {
|
||||
for (CommonPreference<Boolean> p : prefs) {
|
||||
if (p.get()) {
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!selected && includedPrefs.size() > 0) {
|
||||
for (OsmandSettings.CommonPreference<String> p : includedPrefs) {
|
||||
for (CommonPreference<String> p : includedPrefs) {
|
||||
if (!Algorithms.isEmpty(p.get())) {
|
||||
selected = true;
|
||||
break;
|
||||
|
@ -773,17 +775,17 @@ public class ConfigureMapMenu {
|
|||
return null;
|
||||
}
|
||||
|
||||
protected String getDescription(final List<OsmandSettings.CommonPreference<Boolean>> prefs,
|
||||
final List<OsmandSettings.CommonPreference<String>> includedPrefs) {
|
||||
protected String getDescription(final List<CommonPreference<Boolean>> prefs,
|
||||
final List<CommonPreference<String>> includedPrefs) {
|
||||
int count = 0;
|
||||
int enabled = 0;
|
||||
for (OsmandSettings.CommonPreference<Boolean> p : prefs) {
|
||||
for (CommonPreference<Boolean> p : prefs) {
|
||||
count++;
|
||||
if (p.get()) {
|
||||
enabled++;
|
||||
}
|
||||
}
|
||||
for (OsmandSettings.CommonPreference<String> p : includedPrefs) {
|
||||
for (CommonPreference<String> p : includedPrefs) {
|
||||
count++;
|
||||
if (!Algorithms.isEmpty(p.get())) {
|
||||
enabled++;
|
||||
|
@ -856,11 +858,11 @@ public class ConfigureMapMenu {
|
|||
prefs.get(i).set(tempPrefs[i]);
|
||||
selected |= tempPrefs[i];
|
||||
}
|
||||
final List<OsmandSettings.CommonPreference<String>> includedPrefs = new ArrayList<>();
|
||||
final List<CommonPreference<String>> includedPrefs = new ArrayList<>();
|
||||
if (customRulesIncluded != null) {
|
||||
for (RenderingRuleProperty p : customRulesIncluded) {
|
||||
if (p.getAttrName().equals(HIKING_ROUTES_OSMC_ATTR)) {
|
||||
final OsmandSettings.CommonPreference<String> pref = activity.getMyApplication().getSettings()
|
||||
final CommonPreference<String> pref = activity.getMyApplication().getSettings()
|
||||
.getCustomRenderProperty(p.getAttrName());
|
||||
includedPrefs.add(pref);
|
||||
if (hikingRouteOSMCValue == 0) {
|
||||
|
@ -894,7 +896,7 @@ public class ConfigureMapMenu {
|
|||
if (customRulesIncluded != null) {
|
||||
for (RenderingRuleProperty p : customRulesIncluded) {
|
||||
if (!p.isBoolean()) {
|
||||
final OsmandSettings.CommonPreference<String> pref = activity.getMyApplication().getSettings()
|
||||
final CommonPreference<String> pref = activity.getMyApplication().getSettings()
|
||||
.getCustomRenderProperty(p.getAttrName());
|
||||
|
||||
View spinnerView = View.inflate(new ContextThemeWrapper(activity, themeRes), R.layout.spinner_rule_layout, null);
|
||||
|
@ -1031,7 +1033,7 @@ public class ConfigureMapMenu {
|
|||
final String propertyDescr = SettingsActivity.getStringPropertyDescription(view.getContext(),
|
||||
p.getAttrName(), p.getName());
|
||||
if (p.isBoolean()) {
|
||||
final OsmandSettings.CommonPreference<Boolean> pref = view.getApplication().getSettings()
|
||||
final CommonPreference<Boolean> pref = view.getApplication().getSettings()
|
||||
.getCustomRenderBooleanProperty(p.getAttrName());
|
||||
return ContextMenuItem.createBuilder(propertyName)
|
||||
.setId(id)
|
||||
|
@ -1047,7 +1049,7 @@ public class ConfigureMapMenu {
|
|||
.setSelected(pref.get())
|
||||
.createItem();
|
||||
} else {
|
||||
final OsmandSettings.CommonPreference<String> pref = view.getApplication().getSettings()
|
||||
final CommonPreference<String> pref = view.getApplication().getSettings()
|
||||
.getCustomRenderProperty(p.getAttrName());
|
||||
final String descr;
|
||||
if (!Algorithms.isEmpty(pref.get())) {
|
||||
|
|
|
@ -27,7 +27,7 @@ import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemTwoChoicesButton.OnBo
|
|||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem;
|
||||
import net.osmand.plus.helpers.FontCache;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
|
||||
import net.osmand.render.RenderingRuleProperty;
|
||||
import net.osmand.render.RenderingRuleStorageProperties;
|
||||
|
|
|
@ -10,8 +10,9 @@ import net.osmand.plus.ContextMenuAdapter;
|
|||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.LayerTransparencySeekbarMode;
|
||||
import net.osmand.plus.rastermaps.LayerTransparencySeekbarMode;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.MapActivityLayers;
|
||||
|
@ -39,9 +40,9 @@ public class RasterMapMenu {
|
|||
final OsmandSettings settings = app.getSettings();
|
||||
final OsmandRasterMapsPlugin plugin = OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class);
|
||||
assert plugin != null;
|
||||
final OsmandSettings.CommonPreference<Integer> mapTransparencyPreference;
|
||||
final OsmandSettings.CommonPreference<String> mapTypePreference;
|
||||
final OsmandSettings.CommonPreference<String> exMapTypePreference;
|
||||
final CommonPreference<Integer> mapTransparencyPreference;
|
||||
final CommonPreference<String> mapTypePreference;
|
||||
final CommonPreference<String> exMapTypePreference;
|
||||
final LayerTransparencySeekbarMode currentMapTypeSeekbarMode =
|
||||
type == RasterMapType.OVERLAY ? LayerTransparencySeekbarMode.OVERLAY : LayerTransparencySeekbarMode.UNDERLAY;
|
||||
@StringRes final int mapTypeString;
|
||||
|
@ -62,7 +63,7 @@ public class RasterMapMenu {
|
|||
throw new RuntimeException("Unexpected raster map type");
|
||||
}
|
||||
|
||||
final OsmandSettings.CommonPreference<Boolean> hidePolygonsPref =
|
||||
final CommonPreference<Boolean> hidePolygonsPref =
|
||||
mapActivity.getMyApplication().getSettings().getCustomRenderBooleanProperty("noPolygons");
|
||||
|
||||
String mapTypeDescr = mapTypePreference.get();
|
||||
|
@ -181,8 +182,8 @@ public class RasterMapMenu {
|
|||
|
||||
@NonNull
|
||||
public static Boolean isSeekbarVisible(OsmandApplication app, RasterMapType type) {
|
||||
final OsmandSettings.LayerTransparencySeekbarMode currentMapTypeSeekbarMode =
|
||||
type == RasterMapType.OVERLAY ? OsmandSettings.LayerTransparencySeekbarMode.OVERLAY : OsmandSettings.LayerTransparencySeekbarMode.UNDERLAY;
|
||||
final LayerTransparencySeekbarMode currentMapTypeSeekbarMode =
|
||||
type == RasterMapType.OVERLAY ? LayerTransparencySeekbarMode.OVERLAY : LayerTransparencySeekbarMode.UNDERLAY;
|
||||
LayerTransparencySeekbarMode seekbarMode = app.getSettings().LAYER_TRANSPARENCY_SEEKBAR_MODE.get();
|
||||
return seekbarMode == LayerTransparencySeekbarMode.UNDEFINED || seekbarMode == currentMapTypeSeekbarMode;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ import androidx.fragment.app.FragmentManager;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
||||
|
|
|
@ -23,7 +23,7 @@ import net.osmand.map.WorldRegion;
|
|||
import net.osmand.map.WorldRegion.RegionParams;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.base.BasicProgressAsyncTask;
|
||||
|
|
|
@ -21,6 +21,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.FileUtils;
|
||||
import net.osmand.IProgress;
|
||||
import net.osmand.plus.OnDismissDialogFragmentListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
@ -71,7 +72,7 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment {
|
|||
|
||||
File internalStorage = getInternalStorageDirectory(activity);
|
||||
File external1Storage = getExternal1StorageDirectory(activity);
|
||||
if (external1Storage != null && external1Storage.exists() && OsmandSettings.isWritable(external1Storage)) {
|
||||
if (external1Storage != null && external1Storage.exists() && FileUtils.isWritable(external1Storage)) {
|
||||
deviceStorage = external1Storage;
|
||||
deviceStorageType = OsmandSettings.EXTERNAL_STORAGE_TYPE_EXTERNAL_FILE;
|
||||
deviceStorageName = getString(R.string.storage_directory_external);
|
||||
|
@ -246,7 +247,7 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment {
|
|||
};
|
||||
|
||||
public boolean saveFilesLocation(int type, File selectedFile, Activity context) {
|
||||
boolean wr = OsmandSettings.isWritable(selectedFile);
|
||||
boolean wr = FileUtils.isWritable(selectedFile);
|
||||
if (wr) {
|
||||
((OsmandApplication) context.getApplication())
|
||||
.setExternalStorageDirectory(type, selectedFile.getAbsolutePath());
|
||||
|
|
|
@ -1,20 +1,6 @@
|
|||
package net.osmand.plus.activities;
|
||||
package net.osmand.plus.helpers;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import net.osmand.Location;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.StateChangedListener;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.DayNightMode;
|
||||
import net.osmand.util.SunriseSunset;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
|
@ -22,6 +8,20 @@ import android.hardware.SensorEventListener;
|
|||
import android.hardware.SensorManager;
|
||||
import android.location.LocationManager;
|
||||
|
||||
import net.osmand.Location;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.StateChangedListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.helpers.enums.DayNightMode;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.util.SunriseSunset;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* Class to help determine if we want to render day or night map - it uses the
|
||||
* DayNightMode enumeration for its behavior<BR>
|
|
@ -80,6 +80,10 @@ import net.osmand.plus.OsmAndConstants;
|
|||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.helpers.enums.SpeedConstants;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.Version;
|
||||
|
@ -93,7 +97,6 @@ import net.osmand.plus.dialogs.GpxAppearanceAdapter;
|
|||
import net.osmand.plus.dialogs.GpxAppearanceAdapter.AppearanceListItem;
|
||||
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||
import net.osmand.plus.routing.RouteCalculationResult;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.render.RenderingRuleProperty;
|
||||
import net.osmand.render.RenderingRulesStorage;
|
||||
import net.osmand.router.RouteStatisticsHelper;
|
||||
|
@ -514,9 +517,9 @@ public class GpxUiHelper {
|
|||
} else {
|
||||
final View apprTitleView = View.inflate(new ContextThemeWrapper(activity, themeRes), R.layout.select_gpx_appearance_title, null);
|
||||
|
||||
final OsmandSettings.CommonPreference<String> prefWidth
|
||||
final CommonPreference<String> prefWidth
|
||||
= app.getSettings().getCustomRenderProperty(CURRENT_TRACK_WIDTH_ATTR);
|
||||
final OsmandSettings.CommonPreference<String> prefColor
|
||||
final CommonPreference<String> prefColor
|
||||
= app.getSettings().getCustomRenderProperty(CURRENT_TRACK_COLOR_ATTR);
|
||||
|
||||
updateAppearanceTitle(activity, app, trackWidthProp, renderer, apprTitleView, prefWidth.get(), prefColor.get());
|
||||
|
@ -574,7 +577,7 @@ public class GpxUiHelper {
|
|||
if (SHOW_START_FINISH_ATTR.equals(entry.getKey())) {
|
||||
app.getSettings().SHOW_START_FINISH_ICONS.set("true".equals(entry.getValue()));
|
||||
} else {
|
||||
final OsmandSettings.CommonPreference<String> pref
|
||||
final CommonPreference<String> pref
|
||||
= app.getSettings().getCustomRenderProperty(entry.getKey());
|
||||
pref.set(entry.getValue());
|
||||
}
|
||||
|
@ -1039,7 +1042,7 @@ public class GpxUiHelper {
|
|||
|
||||
private static float setupAxisDistance(OsmandApplication ctx, AxisBase axisBase, float meters) {
|
||||
OsmandSettings settings = ctx.getSettings();
|
||||
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||
MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||
float divX;
|
||||
|
||||
String format1 = "{0,number,0.#} ";
|
||||
|
@ -1048,10 +1051,10 @@ public class GpxUiHelper {
|
|||
float granularity = 1f;
|
||||
int mainUnitStr;
|
||||
float mainUnitInMeters;
|
||||
if (mc == OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS) {
|
||||
if (mc == MetricsConstants.KILOMETERS_AND_METERS) {
|
||||
mainUnitStr = R.string.km;
|
||||
mainUnitInMeters = METERS_IN_KILOMETER;
|
||||
} else if (mc == OsmandSettings.MetricsConstants.NAUTICAL_MILES) {
|
||||
} else if (mc == MetricsConstants.NAUTICAL_MILES) {
|
||||
mainUnitStr = R.string.nm;
|
||||
mainUnitInMeters = METERS_IN_ONE_NAUTICALMILE;
|
||||
} else {
|
||||
|
@ -1065,10 +1068,10 @@ public class GpxUiHelper {
|
|||
if (meters >= 100 * mainUnitInMeters ||
|
||||
meters > 9.99f * mainUnitInMeters ||
|
||||
meters > 0.999f * mainUnitInMeters ||
|
||||
mc == OsmandSettings.MetricsConstants.MILES_AND_FEET && meters > 0.249f * mainUnitInMeters ||
|
||||
mc == OsmandSettings.MetricsConstants.MILES_AND_METERS && meters > 0.249f * mainUnitInMeters ||
|
||||
mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS && meters > 0.249f * mainUnitInMeters ||
|
||||
mc == OsmandSettings.MetricsConstants.NAUTICAL_MILES && meters > 0.99f * mainUnitInMeters) {
|
||||
mc == MetricsConstants.MILES_AND_FEET && meters > 0.249f * mainUnitInMeters ||
|
||||
mc == MetricsConstants.MILES_AND_METERS && meters > 0.249f * mainUnitInMeters ||
|
||||
mc == MetricsConstants.MILES_AND_YARDS && meters > 0.249f * mainUnitInMeters ||
|
||||
mc == MetricsConstants.NAUTICAL_MILES && meters > 0.99f * mainUnitInMeters) {
|
||||
|
||||
divX = mainUnitInMeters;
|
||||
if (fmt == null) {
|
||||
|
@ -1078,13 +1081,13 @@ public class GpxUiHelper {
|
|||
} else {
|
||||
fmt = null;
|
||||
granularity = 1f;
|
||||
if (mc == OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS || mc == OsmandSettings.MetricsConstants.MILES_AND_METERS) {
|
||||
if (mc == MetricsConstants.KILOMETERS_AND_METERS || mc == MetricsConstants.MILES_AND_METERS) {
|
||||
divX = 1f;
|
||||
mainUnitStr = R.string.m;
|
||||
} else if (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) {
|
||||
} else if (mc == MetricsConstants.MILES_AND_FEET) {
|
||||
divX = 1f / FEET_IN_ONE_METER;
|
||||
mainUnitStr = R.string.foot;
|
||||
} else if (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS) {
|
||||
} else if (mc == MetricsConstants.MILES_AND_YARDS) {
|
||||
divX = 1f / YARDS_IN_ONE_METER;
|
||||
mainUnitStr = R.string.yard;
|
||||
} else {
|
||||
|
@ -1306,8 +1309,8 @@ public class GpxUiHelper {
|
|||
boolean drawFilled,
|
||||
boolean calcWithoutGaps) {
|
||||
OsmandSettings settings = ctx.getSettings();
|
||||
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||
boolean useFeet = (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) || (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS);
|
||||
MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||
boolean useFeet = (mc == MetricsConstants.MILES_AND_FEET) || (mc == MetricsConstants.MILES_AND_YARDS);
|
||||
boolean light = settings.isLightContent();
|
||||
final float convEle = useFeet ? 3.28084f : 1.0f;
|
||||
|
||||
|
@ -1408,19 +1411,19 @@ public class GpxUiHelper {
|
|||
divX = setupAxisDistance(ctx, xAxis, calcWithoutGaps ? analysis.totalDistanceWithoutGaps : analysis.totalDistance);
|
||||
}
|
||||
|
||||
OsmandSettings.SpeedConstants sps = settings.SPEED_SYSTEM.get();
|
||||
SpeedConstants sps = settings.SPEED_SYSTEM.get();
|
||||
float mulSpeed = Float.NaN;
|
||||
float divSpeed = Float.NaN;
|
||||
final String mainUnitY = sps.toShortString(ctx);
|
||||
if (sps == OsmandSettings.SpeedConstants.KILOMETERS_PER_HOUR) {
|
||||
if (sps == SpeedConstants.KILOMETERS_PER_HOUR) {
|
||||
mulSpeed = 3.6f;
|
||||
} else if (sps == OsmandSettings.SpeedConstants.MILES_PER_HOUR) {
|
||||
} else if (sps == SpeedConstants.MILES_PER_HOUR) {
|
||||
mulSpeed = 3.6f * METERS_IN_KILOMETER / METERS_IN_ONE_MILE;
|
||||
} else if (sps == OsmandSettings.SpeedConstants.NAUTICALMILES_PER_HOUR) {
|
||||
} else if (sps == SpeedConstants.NAUTICALMILES_PER_HOUR) {
|
||||
mulSpeed = 3.6f * METERS_IN_KILOMETER / METERS_IN_ONE_NAUTICALMILE;
|
||||
} else if (sps == OsmandSettings.SpeedConstants.MINUTES_PER_KILOMETER) {
|
||||
} else if (sps == SpeedConstants.MINUTES_PER_KILOMETER) {
|
||||
divSpeed = METERS_IN_KILOMETER / 60;
|
||||
} else if (sps == OsmandSettings.SpeedConstants.MINUTES_PER_MILE) {
|
||||
} else if (sps == SpeedConstants.MINUTES_PER_MILE) {
|
||||
divSpeed = METERS_IN_ONE_MILE / 60;
|
||||
} else {
|
||||
mulSpeed = 1f;
|
||||
|
@ -1571,8 +1574,8 @@ public class GpxUiHelper {
|
|||
}
|
||||
OsmandSettings settings = ctx.getSettings();
|
||||
boolean light = settings.isLightContent();
|
||||
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||
boolean useFeet = (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) || (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS);
|
||||
MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||
boolean useFeet = (mc == MetricsConstants.MILES_AND_FEET) || (mc == MetricsConstants.MILES_AND_YARDS);
|
||||
final float convEle = useFeet ? 3.28084f : 1.0f;
|
||||
final float totalDistance = calcWithoutGaps ? analysis.totalDistanceWithoutGaps : analysis.totalDistance;
|
||||
|
||||
|
|
|
@ -20,7 +20,8 @@ import net.osmand.plus.OsmandApplication;
|
|||
import net.osmand.plus.routing.VoiceRouter.VoiceMessageListener;
|
||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.routing.VoiceRouter.VoiceMessageListener;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@ import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
|||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.IntermediatePointsDialog;
|
||||
import net.osmand.plus.base.PointImageDrawable;
|
||||
import net.osmand.plus.helpers.enums.DrivingRegion;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.helpers.enums.SpeedConstants;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.render.RenderingIcons;
|
||||
import net.osmand.plus.routing.AlarmInfo;
|
||||
|
@ -31,8 +34,6 @@ import net.osmand.plus.routing.AlarmInfo.AlarmInfoType;
|
|||
import net.osmand.plus.routing.RouteCalculationResult;
|
||||
import net.osmand.plus.routing.VoiceRouter;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -193,7 +194,7 @@ public class WaypointHelper {
|
|||
return found;
|
||||
}
|
||||
|
||||
public AlarmInfo getMostImportantAlarm(OsmandSettings.SpeedConstants sc, boolean showCameras) {
|
||||
public AlarmInfo getMostImportantAlarm(SpeedConstants sc, boolean showCameras) {
|
||||
Location lastProjection = app.getRoutingHelper().getLastProjection();
|
||||
float mxspeed = route.getCurrentMaxSpeed();
|
||||
float delta = app.getSettings().SPEED_LIMIT_EXCEED_KMH.get() / 3.6f;
|
||||
|
@ -291,7 +292,7 @@ public class WaypointHelper {
|
|||
}
|
||||
|
||||
public AlarmInfo calculateMostImportantAlarm(RouteDataObject ro, Location loc, MetricsConstants mc,
|
||||
OsmandSettings.SpeedConstants sc, boolean showCameras) {
|
||||
SpeedConstants sc, boolean showCameras) {
|
||||
float mxspeed = ro.getMaximumSpeed(ro.bearingVsRouteDirection(loc));
|
||||
float delta = app.getSettings().SPEED_LIMIT_EXCEED_KMH.get() / 3.6f;
|
||||
AlarmInfo speedAlarm = createSpeedAlarm(sc, mxspeed, loc, delta);
|
||||
|
@ -331,7 +332,7 @@ public class WaypointHelper {
|
|||
return null;
|
||||
}
|
||||
|
||||
private static AlarmInfo createSpeedAlarm(OsmandSettings.SpeedConstants sc, float mxspeed, Location loc, float delta) {
|
||||
private static AlarmInfo createSpeedAlarm(SpeedConstants sc, float mxspeed, Location loc, float delta) {
|
||||
AlarmInfo speedAlarm = null;
|
||||
if (mxspeed != 0 && loc != null && loc.hasSpeed() && mxspeed != RouteDataObject.NONE_MAX_SPEED) {
|
||||
if (loc.getSpeed() > mxspeed + delta) {
|
||||
|
@ -790,7 +791,7 @@ public class WaypointHelper {
|
|||
} else if (type == ALARMS) {
|
||||
//assign alarm list icons manually for now
|
||||
String typeString = ((AlarmInfo) point).getType().toString();
|
||||
OsmandSettings.DrivingRegion region = app.getSettings().DRIVING_REGION.get();
|
||||
DrivingRegion region = app.getSettings().DRIVING_REGION.get();
|
||||
if (typeString.equals("SPEED_CAMERA")) {
|
||||
return AppCompatResources.getDrawable(uiCtx, R.drawable.mx_highway_speed_camera);
|
||||
} else if (typeString.equals("BORDER_CONTROL")) {
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum AngularConstants {
|
||||
DEGREES(R.string.shared_string_degrees, "°"),
|
||||
DEGREES360(R.string.shared_string_degrees, "°"),
|
||||
MILLIRADS(R.string.shared_string_milliradians, "mil");
|
||||
|
||||
private final int key;
|
||||
private final String unit;
|
||||
|
||||
AngularConstants(int key, String unit) {
|
||||
this.key = key;
|
||||
this.unit = unit;
|
||||
}
|
||||
|
||||
public String toHumanString(Context ctx) {
|
||||
return ctx.getString(key);
|
||||
}
|
||||
|
||||
public String getUnitSymbol() {
|
||||
return unit;
|
||||
}
|
||||
}
|
19
OsmAnd/src/net/osmand/plus/helpers/enums/AutoZoomMap.java
Normal file
19
OsmAnd/src/net/osmand/plus/helpers/enums/AutoZoomMap.java
Normal file
|
@ -0,0 +1,19 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum AutoZoomMap {
|
||||
FARTHEST(R.string.auto_zoom_farthest, 1f, 15.5f),
|
||||
FAR(R.string.auto_zoom_far, 1.4f, 17f),
|
||||
CLOSE(R.string.auto_zoom_close, 2f, 19f);
|
||||
|
||||
public final float coefficient;
|
||||
public final int name;
|
||||
public final float maxZoom;
|
||||
|
||||
AutoZoomMap(int name, float coefficient, float maxZoom) {
|
||||
this.name = name;
|
||||
this.coefficient = coefficient;
|
||||
this.maxZoom = maxZoom;
|
||||
}
|
||||
}
|
62
OsmAnd/src/net/osmand/plus/helpers/enums/DayNightMode.java
Normal file
62
OsmAnd/src/net/osmand/plus/helpers/enums/DayNightMode.java
Normal file
|
@ -0,0 +1,62 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorManager;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum DayNightMode {
|
||||
AUTO(R.string.daynight_mode_auto, R.drawable.ic_action_map_sunset),
|
||||
DAY(R.string.daynight_mode_day, R.drawable.ic_action_map_day),
|
||||
NIGHT(R.string.daynight_mode_night, R.drawable.ic_action_map_night),
|
||||
SENSOR(R.string.daynight_mode_sensor, R.drawable.ic_action_map_light_sensor);
|
||||
|
||||
private final int key;
|
||||
@DrawableRes
|
||||
private final int drawableRes;
|
||||
|
||||
DayNightMode(@StringRes int key, @DrawableRes int drawableRes) {
|
||||
this.key = key;
|
||||
this.drawableRes = drawableRes;
|
||||
}
|
||||
|
||||
public String toHumanString(Context ctx) {
|
||||
return ctx.getString(key);
|
||||
}
|
||||
|
||||
@DrawableRes
|
||||
public int getIconRes() {
|
||||
return drawableRes;
|
||||
}
|
||||
|
||||
public boolean isSensor() {
|
||||
return this == SENSOR;
|
||||
}
|
||||
|
||||
public boolean isAuto() {
|
||||
return this == AUTO;
|
||||
}
|
||||
|
||||
public boolean isDay() {
|
||||
return this == DAY;
|
||||
}
|
||||
|
||||
public boolean isNight() {
|
||||
return this == NIGHT;
|
||||
}
|
||||
|
||||
public static DayNightMode[] possibleValues(Context context) {
|
||||
SensorManager mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
|
||||
Sensor mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
|
||||
boolean isLightSensorEnabled = mLight != null;
|
||||
if (isLightSensorEnabled) {
|
||||
return DayNightMode.values();
|
||||
} else {
|
||||
return new DayNightMode[]{AUTO, DAY, NIGHT};
|
||||
}
|
||||
}
|
||||
}
|
62
OsmAnd/src/net/osmand/plus/helpers/enums/DrivingRegion.java
Normal file
62
OsmAnd/src/net/osmand/plus/helpers/enums/DrivingRegion.java
Normal file
|
@ -0,0 +1,62 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Class represents specific for driving region
|
||||
* Signs, leftHandDriving
|
||||
*/
|
||||
public enum DrivingRegion {
|
||||
|
||||
EUROPE_ASIA(R.string.driving_region_europe_asia, MetricsConstants.KILOMETERS_AND_METERS, false),
|
||||
US(R.string.driving_region_us, MetricsConstants.MILES_AND_FEET, false),
|
||||
CANADA(R.string.driving_region_canada, MetricsConstants.KILOMETERS_AND_METERS, false),
|
||||
UK_AND_OTHERS(R.string.driving_region_uk, MetricsConstants.MILES_AND_METERS, true),
|
||||
JAPAN(R.string.driving_region_japan, MetricsConstants.KILOMETERS_AND_METERS, true),
|
||||
AUSTRALIA(R.string.driving_region_australia, MetricsConstants.KILOMETERS_AND_METERS, true);
|
||||
|
||||
public final boolean leftHandDriving;
|
||||
public final MetricsConstants defMetrics;
|
||||
public final int name;
|
||||
|
||||
DrivingRegion(int name, MetricsConstants def, boolean leftHandDriving) {
|
||||
this.name = name;
|
||||
defMetrics = def;
|
||||
this.leftHandDriving = leftHandDriving;
|
||||
}
|
||||
|
||||
public boolean isAmericanTypeSigns() {
|
||||
return this == DrivingRegion.AUSTRALIA ||
|
||||
this == DrivingRegion.US ||
|
||||
this == DrivingRegion.CANADA;
|
||||
}
|
||||
|
||||
public String getDescription(Context ctx) {
|
||||
return ctx.getString(leftHandDriving ? R.string.left_side_navigation : R.string.right_side_navigation) +
|
||||
", " +
|
||||
defMetrics.toHumanString(ctx).toLowerCase();
|
||||
}
|
||||
|
||||
public static DrivingRegion getDrivingRegionByLocale() {
|
||||
Locale df = Locale.getDefault();
|
||||
if (df == null) {
|
||||
return DrivingRegion.EUROPE_ASIA;
|
||||
}
|
||||
if (df.getCountry().equalsIgnoreCase(Locale.US.getCountry())) {
|
||||
return DrivingRegion.US;
|
||||
} else if (df.getCountry().equalsIgnoreCase(Locale.CANADA.getCountry())) {
|
||||
return DrivingRegion.CANADA;
|
||||
} else if (df.getCountry().equalsIgnoreCase(Locale.JAPAN.getCountry())) {
|
||||
return DrivingRegion.JAPAN;
|
||||
} else if (df.getCountry().equalsIgnoreCase("au")) {
|
||||
return DrivingRegion.AUSTRALIA;
|
||||
} else if (df.getCountry().equalsIgnoreCase(Locale.UK.getCountry())) {
|
||||
return DrivingRegion.UK_AND_OTHERS;
|
||||
}
|
||||
return DrivingRegion.EUROPE_ASIA;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum MetricsConstants {
|
||||
KILOMETERS_AND_METERS(R.string.si_km_m, "km-m"),
|
||||
MILES_AND_FEET(R.string.si_mi_feet, "mi-f"),
|
||||
MILES_AND_METERS(R.string.si_mi_meters, "mi-m"),
|
||||
MILES_AND_YARDS(R.string.si_mi_yard, "mi-y"),
|
||||
NAUTICAL_MILES(R.string.si_nm, "nm");
|
||||
|
||||
private final int key;
|
||||
private final String ttsString;
|
||||
|
||||
MetricsConstants(int key, String ttsString) {
|
||||
this.key = key;
|
||||
this.ttsString = ttsString;
|
||||
}
|
||||
|
||||
public String toHumanString(Context ctx) {
|
||||
return ctx.getString(key);
|
||||
}
|
||||
|
||||
public String toTTSString() {
|
||||
return ttsString;
|
||||
}
|
||||
}
|
32
OsmAnd/src/net/osmand/plus/helpers/enums/SpeedConstants.java
Normal file
32
OsmAnd/src/net/osmand/plus/helpers/enums/SpeedConstants.java
Normal file
|
@ -0,0 +1,32 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum SpeedConstants {
|
||||
KILOMETERS_PER_HOUR(R.string.km_h, R.string.si_kmh, false),
|
||||
MILES_PER_HOUR(R.string.mile_per_hour, R.string.si_mph, true),
|
||||
METERS_PER_SECOND(R.string.m_s, R.string.si_m_s, false),
|
||||
MINUTES_PER_MILE(R.string.min_mile, R.string.si_min_m, true),
|
||||
MINUTES_PER_KILOMETER(R.string.min_km, R.string.si_min_km, false),
|
||||
NAUTICALMILES_PER_HOUR(R.string.nm_h, R.string.si_nm_h, true);
|
||||
|
||||
public final int key;
|
||||
public final int descr;
|
||||
public final boolean imperial;
|
||||
|
||||
SpeedConstants(int key, int descr, boolean imperial) {
|
||||
this.key = key;
|
||||
this.descr = descr;
|
||||
this.imperial = imperial;
|
||||
}
|
||||
|
||||
public String toHumanString(Context ctx) {
|
||||
return ctx.getString(descr);
|
||||
}
|
||||
|
||||
public String toShortString(Context ctx) {
|
||||
return ctx.getString(key);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package net.osmand.plus.helpers.enums;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum TracksSortByMode {
|
||||
BY_DATE(R.string.sort_last_modified, R.drawable.ic_action_time_start),
|
||||
BY_NAME_ASCENDING(R.string.sort_name_ascending, R.drawable.ic_action_sort_by_name_ascending),
|
||||
BY_NAME_DESCENDING(R.string.sort_name_descending, R.drawable.ic_action_sort_by_name_descending);
|
||||
|
||||
private final int iconId;
|
||||
private final int nameId;
|
||||
|
||||
TracksSortByMode(int nameId, int iconId) {
|
||||
this.nameId = nameId;
|
||||
this.iconId = iconId;
|
||||
}
|
||||
|
||||
public boolean isByName() {
|
||||
return this == BY_NAME_ASCENDING || this == BY_NAME_DESCENDING;
|
||||
}
|
||||
|
||||
public boolean isByDate() {
|
||||
return this == BY_DATE;
|
||||
}
|
||||
|
||||
@StringRes
|
||||
public int getNameId() {
|
||||
return nameId;
|
||||
}
|
||||
|
||||
@DrawableRes
|
||||
public int getIconId() {
|
||||
return iconId;
|
||||
}
|
||||
}
|
|
@ -17,6 +17,8 @@ import net.osmand.AndroidNetworkUtils.OnRequestsResultListener;
|
|||
import net.osmand.AndroidNetworkUtils.RequestResponse;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.inapp.InAppPurchases.InAppPurchase;
|
||||
|
|
|
@ -35,6 +35,8 @@ import androidx.fragment.app.FragmentManager;
|
|||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.LocalIndexHelper;
|
||||
|
@ -49,7 +51,6 @@ import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseListener;
|
|||
import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseTaskType;
|
||||
import net.osmand.plus.inapp.InAppPurchases.InAppSubscription;
|
||||
import net.osmand.plus.resources.IncrementalChangesManager;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.File;
|
||||
|
@ -312,7 +313,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
|
|||
}
|
||||
|
||||
public void add(LocalIndexInfo info) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference = preferenceLiveUpdatesOn(
|
||||
CommonPreference<Boolean> preference = preferenceLiveUpdatesOn(
|
||||
info.getFileName(), app.getSettings());
|
||||
if (preference.get()) {
|
||||
dataShouldUpdate.add(info);
|
||||
|
@ -324,8 +325,8 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
|
|||
public void notifyLiveUpdatesChanged() {
|
||||
Set<LocalIndexInfo> changedSet = new HashSet<>();
|
||||
for (LocalIndexInfo localIndexInfo : dataShouldUpdate) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference =
|
||||
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), app.getSettings());
|
||||
CommonPreference<Boolean> preference =
|
||||
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), getSettings());
|
||||
if (!preference.get()) {
|
||||
changedSet.add(localIndexInfo);
|
||||
}
|
||||
|
@ -334,8 +335,8 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
|
|||
dataShouldNotUpdate.addAll(changedSet);
|
||||
changedSet.clear();
|
||||
for (LocalIndexInfo localIndexInfo : dataShouldNotUpdate) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference =
|
||||
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), app.getSettings());
|
||||
CommonPreference<Boolean> preference =
|
||||
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), getSettings());
|
||||
if (preference.get()) {
|
||||
changedSet.add(localIndexInfo);
|
||||
}
|
||||
|
@ -473,10 +474,10 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
|
|||
String fileName = li.getFileName();
|
||||
PendingIntent alarmIntent = getPendingIntent(ctx, fileName);
|
||||
if (enable) {
|
||||
final OsmandSettings.CommonPreference<Integer> updateFrequencyPreference =
|
||||
preferenceUpdateFrequency(fileName, app.getSettings());
|
||||
final OsmandSettings.CommonPreference<Integer> timeOfDayPreference =
|
||||
preferenceTimeOfDayToUpdate(fileName, app.getSettings());
|
||||
final CommonPreference<Integer> updateFrequencyPreference =
|
||||
preferenceUpdateFrequency(fileName, getSettings());
|
||||
final CommonPreference<Integer> timeOfDayPreference =
|
||||
preferenceTimeOfDayToUpdate(fileName, getSettings());
|
||||
UpdateFrequency updateFrequency = UpdateFrequency.values()[updateFrequencyPreference.get()];
|
||||
TimeOfDay timeOfDayToUpdate = TimeOfDay.values()[timeOfDayPreference.get()];
|
||||
setAlarmForPendingIntent(alarmIntent, alarmMgr, updateFrequency, timeOfDayToUpdate);
|
||||
|
@ -570,7 +571,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
|
|||
|
||||
public void bindLocalIndexInfo(@NonNull final String item, boolean isLastChild) {
|
||||
OsmandApplication context = fragment.getMyActivity().getMyApplication();
|
||||
final OsmandSettings.CommonPreference<Boolean> shouldUpdatePreference =
|
||||
final CommonPreference<Boolean> shouldUpdatePreference =
|
||||
preferenceLiveUpdatesOn(item, fragment.getSettings());
|
||||
IncrementalChangesManager changesManager = context.getResourceManager().getChangesManager();
|
||||
|
||||
|
@ -600,7 +601,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
|
|||
Algorithms.getFileNameWithoutExtension(new File(item));
|
||||
final long timestamp = changesManager.getTimestamp(fileNameWithoutExtension);
|
||||
final long lastCheck = preferenceLastCheck(item, fragment.getSettings()).get();
|
||||
OsmandSettings.CommonPreference<Boolean> liveUpdateOn = preferenceLiveUpdatesOn(item, fragment.getSettings());
|
||||
CommonPreference<Boolean> liveUpdateOn = preferenceLiveUpdatesOn(item, fragment.getSettings());
|
||||
if(liveUpdateOn.get() && lastCheck != DEFAULT_LAST_CHECK) {
|
||||
String lastCheckString = formatDateTime(fragment.getActivity(), lastCheck );
|
||||
descriptionTextView.setText(context.getString(R.string.last_update, lastCheckString));
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.os.AsyncTask;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||
|
@ -32,7 +33,7 @@ public class LiveUpdatesHelper {
|
|||
|
||||
public static final int DEFAULT_LAST_CHECK = -1;
|
||||
|
||||
private static <T> OsmandSettings.CommonPreference<T> checkPref(OsmandSettings.CommonPreference<T> p) {
|
||||
private static <T> CommonPreference<T> checkPref(CommonPreference<T> p) {
|
||||
if (p.isSet()) {
|
||||
T vl = p.get();
|
||||
p = p.makeGlobal();
|
||||
|
@ -44,37 +45,37 @@ public class LiveUpdatesHelper {
|
|||
}
|
||||
return p;
|
||||
}
|
||||
public static OsmandSettings.CommonPreference<Boolean> preferenceForLocalIndex(
|
||||
public static CommonPreference<Boolean> preferenceForLocalIndex(
|
||||
String fileName, OsmandSettings settings) {
|
||||
final String settingId = fileName + LIVE_UPDATES_ON_POSTFIX;
|
||||
return checkPref(settings.registerBooleanPreference(settingId, false));
|
||||
}
|
||||
|
||||
public static OsmandSettings.CommonPreference<Boolean> preferenceLiveUpdatesOn(
|
||||
public static CommonPreference<Boolean> preferenceLiveUpdatesOn(
|
||||
String fileName, OsmandSettings settings) {
|
||||
final String settingId = fileName + LIVE_UPDATES_ON_POSTFIX;
|
||||
return checkPref(settings.registerBooleanPreference(settingId, false));
|
||||
}
|
||||
|
||||
public static OsmandSettings.CommonPreference<Boolean> preferenceDownloadViaWiFi(
|
||||
public static CommonPreference<Boolean> preferenceDownloadViaWiFi(
|
||||
String fileName, OsmandSettings settings) {
|
||||
final String settingId = fileName + DOWNLOAD_VIA_WIFI_POSTFIX;
|
||||
return checkPref(settings.registerBooleanPreference(settingId, false));
|
||||
}
|
||||
|
||||
public static OsmandSettings.CommonPreference<Integer> preferenceUpdateFrequency(
|
||||
public static CommonPreference<Integer> preferenceUpdateFrequency(
|
||||
String fileName, OsmandSettings settings) {
|
||||
final String settingId = fileName + UPDATE_TIMES_POSTFIX;
|
||||
return checkPref(settings.registerIntPreference(settingId, UpdateFrequency.HOURLY.ordinal()));
|
||||
}
|
||||
|
||||
public static OsmandSettings.CommonPreference<Integer> preferenceTimeOfDayToUpdate(
|
||||
public static CommonPreference<Integer> preferenceTimeOfDayToUpdate(
|
||||
String fileName, OsmandSettings settings) {
|
||||
final String settingId = fileName + TIME_OF_DAY_TO_UPDATE_POSTFIX;
|
||||
return checkPref(settings.registerIntPreference(settingId, TimeOfDay.NIGHT.ordinal()));
|
||||
}
|
||||
|
||||
public static OsmandSettings.CommonPreference<Long> preferenceLastCheck(
|
||||
public static CommonPreference<Long> preferenceLastCheck(
|
||||
String fileName, OsmandSettings settings) {
|
||||
final String settingId = fileName + LAST_UPDATE_ATTEMPT_ON_POSTFIX;
|
||||
return checkPref(settings.registerLongPreference(settingId, DEFAULT_LAST_CHECK));
|
||||
|
|
|
@ -23,6 +23,7 @@ import androidx.fragment.app.DialogFragment;
|
|||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.download.AbstractDownloadActivity;
|
||||
|
@ -85,7 +86,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
|
|||
final long lastCheck = preferenceLastCheck(fileName, getSettings()).get();
|
||||
|
||||
|
||||
OsmandSettings.CommonPreference<Boolean> preference = preferenceLiveUpdatesOn(fileName,
|
||||
CommonPreference<Boolean> preference = preferenceLiveUpdatesOn(fileName,
|
||||
getSettings());
|
||||
if (preference.get() && lastCheck != DEFAULT_LAST_CHECK) {
|
||||
String lastCheckString = formatDateTime(getActivity(), lastCheck);
|
||||
|
@ -94,13 +95,13 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
|
|||
lastUpdateTextView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
final OsmandSettings.CommonPreference<Boolean> liveUpdatePreference =
|
||||
final CommonPreference<Boolean> liveUpdatePreference =
|
||||
preferenceForLocalIndex(fileName, getSettings());
|
||||
final OsmandSettings.CommonPreference<Boolean> downloadViaWiFiPreference =
|
||||
final CommonPreference<Boolean> downloadViaWiFiPreference =
|
||||
preferenceDownloadViaWiFi(fileName, getSettings());
|
||||
final OsmandSettings.CommonPreference<Integer> updateFrequencyPreference =
|
||||
final CommonPreference<Integer> updateFrequencyPreference =
|
||||
preferenceUpdateFrequency(fileName, getSettings());
|
||||
final OsmandSettings.CommonPreference<Integer> timeOfDayPreference =
|
||||
final CommonPreference<Integer> timeOfDayPreference =
|
||||
preferenceTimeOfDayToUpdate(fileName, getSettings());
|
||||
|
||||
downloadOverWiFiCheckBox.setChecked(!liveUpdatePreference.get() || downloadViaWiFiPreference.get());
|
||||
|
|
|
@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
|
|||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.download.AbstractDownloadActivity;
|
||||
|
@ -50,7 +51,7 @@ public class PerformLiveUpdateAsyncTask
|
|||
activity.setSupportProgressBarIndeterminateVisibility(true);
|
||||
}
|
||||
final OsmandApplication myApplication = getMyApplication();
|
||||
OsmandSettings.CommonPreference<Long> lastCheckPreference =
|
||||
CommonPreference<Long> lastCheckPreference =
|
||||
LiveUpdatesHelper.preferenceLastCheck(localIndexFileName, myApplication.getSettings());
|
||||
lastCheckPreference.set(System.currentTimeMillis());
|
||||
}
|
||||
|
@ -148,7 +149,7 @@ public class PerformLiveUpdateAsyncTask
|
|||
public static void tryRescheduleDownload(@NonNull Context context,
|
||||
@NonNull OsmandSettings settings,
|
||||
@NonNull String localIndexFileName) {
|
||||
final OsmandSettings.CommonPreference<Integer> updateFrequencyPreference =
|
||||
final CommonPreference<Integer> updateFrequencyPreference =
|
||||
preferenceUpdateFrequency(localIndexFileName, settings);
|
||||
final Integer frequencyOrdinal = updateFrequencyPreference.get();
|
||||
if (LiveUpdatesHelper.UpdateFrequency.values()[frequencyOrdinal]
|
||||
|
|
|
@ -4,7 +4,7 @@ import android.view.View;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.mapcontextmenu.MenuBuilder.CollapseExpandListener;
|
||||
|
||||
public class CollapsableView {
|
||||
|
|
|
@ -58,6 +58,8 @@ import net.osmand.plus.ContextMenuItem;
|
|||
import net.osmand.plus.LockableScrollView;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.MainContextMenuItemsSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.UiUtilities.DialogButtonType;
|
||||
|
@ -74,7 +76,6 @@ import net.osmand.plus.mapcontextmenu.MenuController.TitleProgressController;
|
|||
import net.osmand.plus.mapcontextmenu.controllers.TransportStopController;
|
||||
import net.osmand.plus.routepreparationmenu.ChooseRouteFragment;
|
||||
import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.transport.TransportStopRoute;
|
||||
import net.osmand.plus.views.AnimateDraggingMapThread;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
|
@ -642,7 +643,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
|||
// Action buttons
|
||||
ContextMenuAdapter adapter = menu.getActionsContextMenuAdapter(false);
|
||||
List<ContextMenuItem> items = adapter.getVisibleItems();
|
||||
List<String> mainIds = ((OsmandSettings.MainContextMenuItemsSettings) mapActivity.getMyApplication()
|
||||
List<String> mainIds = ((MainContextMenuItemsSettings) mapActivity.getMyApplication()
|
||||
.getSettings().CONTEXT_MENU_ACTIONS_ITEMS.get()).getMainIds();
|
||||
ContextMenuAdapter mainAdapter = new ContextMenuAdapter(requireMyApplication());
|
||||
ContextMenuAdapter additionalAdapter = new ContextMenuAdapter(requireMyApplication());
|
||||
|
|
|
@ -36,8 +36,7 @@ import net.osmand.plus.mapcontextmenu.CollapsableView;
|
|||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||
import net.osmand.plus.osmedit.OsmEditingPlugin;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.views.layers.POIMapLayer;
|
||||
import net.osmand.plus.widgets.TextViewEx;
|
||||
import net.osmand.plus.widgets.tools.ClickableSpanTouchListener;
|
||||
|
@ -70,7 +69,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
private static final String WIKI_LINK = ".wikipedia.org/w";
|
||||
public final static Log LOG = PlatformUtil.getLog(AmenityMenuBuilder.class);
|
||||
private final static DecimalFormat DF = new DecimalFormat("#.##");
|
||||
private OsmandSettings.MetricsConstants metricSystem;
|
||||
private MetricsConstants metricSystem;
|
||||
private final Amenity amenity;
|
||||
|
||||
|
||||
|
@ -714,10 +713,10 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
case "seamark_height":
|
||||
if (Algorithms.isFloat(value)) {
|
||||
double valueAsDouble = Double.valueOf(value);
|
||||
if (metricSystem == OsmandSettings.MetricsConstants.MILES_AND_FEET) {
|
||||
if (metricSystem == MetricsConstants.MILES_AND_FEET) {
|
||||
formattedValue = String.valueOf(DF.format(valueAsDouble * OsmAndFormatter.FEET_IN_ONE_METER))
|
||||
+ " " + mapActivity.getResources().getString(R.string.foot);
|
||||
} else if (metricSystem == OsmandSettings.MetricsConstants.MILES_AND_YARDS) {
|
||||
} else if (metricSystem == MetricsConstants.MILES_AND_YARDS) {
|
||||
formattedValue = String.valueOf(DF.format(valueAsDouble * OsmAndFormatter.YARDS_IN_ONE_METER))
|
||||
+ " " + mapActivity.getResources().getString(R.string.yard);
|
||||
} else {
|
||||
|
|
|
@ -13,7 +13,7 @@ import androidx.core.content.ContextCompat;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.helpers.MapMarkerDialogHelper;
|
||||
|
@ -56,7 +56,7 @@ public class MapMarkerMenuController extends MenuController {
|
|||
public void buttonPressed() {
|
||||
MapActivity activity = getMapActivity();
|
||||
if (activity != null) {
|
||||
OsmandSettings.OsmandPreference<Boolean> indication
|
||||
OsmandPreference<Boolean> indication
|
||||
= activity.getMyApplication().getSettings().MARKERS_DISTANCE_INDICATION_ENABLED;
|
||||
if (!indication.get()) {
|
||||
indication.set(true);
|
||||
|
|
|
@ -6,6 +6,7 @@ import android.graphics.drawable.Drawable;
|
|||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
|
@ -83,7 +84,7 @@ public class CoordinateInputBottomSheetDialogFragment extends MenuBottomSheetDia
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
OsmandSettings.CommonPreference<Boolean> pref = settings.COORDS_INPUT_TWO_DIGITS_LONGTITUDE;
|
||||
CommonPreference<Boolean> pref = settings.COORDS_INPUT_TWO_DIGITS_LONGTITUDE;
|
||||
pref.set(!pref.get());
|
||||
listener.onInputSettingsChanged();
|
||||
}
|
||||
|
@ -108,7 +109,7 @@ public class CoordinateInputBottomSheetDialogFragment extends MenuBottomSheetDia
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
OsmandSettings.CommonPreference<Boolean> pref = settings.COORDS_INPUT_USE_RIGHT_SIDE;
|
||||
CommonPreference<Boolean> pref = settings.COORDS_INPUT_USE_RIGHT_SIDE;
|
||||
pref.set(!pref.get());
|
||||
listener.onHandChanged();
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ import net.osmand.plus.MapMarkersHelper;
|
|||
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.Version;
|
||||
|
@ -1023,7 +1024,7 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
|
|||
}
|
||||
|
||||
private void changeOsmandKeyboardSetting() {
|
||||
OsmandSettings.OsmandPreference<Boolean> pref = getMyApplication().getSettings().COORDS_INPUT_USE_OSMAND_KEYBOARD;
|
||||
OsmandPreference<Boolean> pref = getMyApplication().getSettings().COORDS_INPUT_USE_OSMAND_KEYBOARD;
|
||||
pref.set(!pref.get());
|
||||
}
|
||||
|
||||
|
|
|
@ -32,8 +32,7 @@ import com.github.ksoichiro.android.observablescrollview.ScrollState;
|
|||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.MapMarkersMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
37
OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersMode.java
Normal file
37
OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersMode.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum MapMarkersMode {
|
||||
TOOLBAR(R.string.shared_string_topbar),
|
||||
WIDGETS(R.string.shared_string_widgets),
|
||||
NONE(R.string.shared_string_none);
|
||||
|
||||
private final int key;
|
||||
|
||||
MapMarkersMode(int key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String toHumanString(Context ctx) {
|
||||
return ctx.getString(key);
|
||||
}
|
||||
|
||||
public boolean isToolbar() {
|
||||
return this == TOOLBAR;
|
||||
}
|
||||
|
||||
public boolean isWidgets() {
|
||||
return this == WIDGETS;
|
||||
}
|
||||
|
||||
public boolean isNone() {
|
||||
return this == NONE;
|
||||
}
|
||||
|
||||
public static MapMarkersMode[] possibleValues(Context context) {
|
||||
return new MapMarkersMode[]{TOOLBAR, WIDGETS, NONE};
|
||||
}
|
||||
}
|
|
@ -14,7 +14,6 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.BottomSheetDialogFragment;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
|
@ -63,7 +62,7 @@ public class OptionsBottomSheetDialogFragment extends BottomSheetDialogFragment
|
|||
}
|
||||
|
||||
((ImageView) mainView.findViewById(R.id.sort_by_icon)).setImageDrawable(getContentIcon(R.drawable.ic_sort_waypoint_dark));
|
||||
OsmandSettings.MapMarkersMode mode = getMyApplication().getSettings().MAP_MARKERS_MODE.get();
|
||||
MapMarkersMode mode = getMyApplication().getSettings().MAP_MARKERS_MODE.get();
|
||||
int displayedCount = getMyApplication().getSettings().DISPLAYED_MARKERS_WIDGETS_COUNT.get();
|
||||
ImageView showDirectionIcon = (ImageView) mainView.findViewById(R.id.show_direction_icon);
|
||||
int imageResId = 0;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package net.osmand.plus.measurementtool;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
@ -61,6 +60,7 @@ import net.osmand.plus.measurementtool.OptionsBottomSheetDialogFragment.OptionsF
|
|||
import net.osmand.plus.measurementtool.RouteBetweenPointsBottomSheetDialogFragment.RouteBetweenPointsDialogMode;
|
||||
import net.osmand.plus.measurementtool.RouteBetweenPointsBottomSheetDialogFragment.RouteBetweenPointsDialogType;
|
||||
import net.osmand.plus.measurementtool.RouteBetweenPointsBottomSheetDialogFragment.RouteBetweenPointsFragmentListener;
|
||||
import net.osmand.plus.measurementtool.SaveGpxRouteAsyncTask.SaveGpxRouteListener;
|
||||
import net.osmand.plus.measurementtool.SelectedPointBottomSheetDialogFragment.SelectedPointFragmentListener;
|
||||
import net.osmand.plus.measurementtool.adapter.MeasurementToolAdapter;
|
||||
import net.osmand.plus.measurementtool.adapter.MeasurementToolAdapter.MeasurementAdapterListener;
|
||||
|
@ -83,6 +83,8 @@ import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarView;
|
|||
import net.osmand.router.RoutePlannerFrontEnd.GpxRouteApproximation;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.text.MessageFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
@ -145,9 +147,6 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
private MeasurementEditingContext editingCtx = new MeasurementEditingContext();
|
||||
|
||||
private LatLon initialPoint;
|
||||
private OsmandApplication app;
|
||||
private MapActivity mapActivity;
|
||||
private MeasurementToolLayer measurementToolLayer;
|
||||
|
||||
enum SaveType {
|
||||
ROUTE_POINT,
|
||||
|
@ -160,6 +159,10 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
SHOW_IS_SAVED_FRAGMENT
|
||||
}
|
||||
|
||||
protected MeasurementEditingContext getEditingCtx() {
|
||||
return editingCtx;
|
||||
}
|
||||
|
||||
private void setEditingCtx(MeasurementEditingContext editingCtx) {
|
||||
this.editingCtx = editingCtx;
|
||||
}
|
||||
|
@ -168,7 +171,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
this.initialPoint = initialPoint;
|
||||
}
|
||||
|
||||
void setMode(int mode, boolean on) {
|
||||
private void setMode(int mode, boolean on) {
|
||||
int modes = this.modes;
|
||||
if (on) {
|
||||
modes |= mode;
|
||||
|
@ -207,7 +210,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
final MapActivity mapActivity = (MapActivity) getActivity();
|
||||
if (mapActivity == null) {
|
||||
return null;
|
||||
|
@ -1059,7 +1062,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
}
|
||||
|
||||
@Nullable
|
||||
GpxData setupGpxData(@Nullable GPXFile gpxFile) {
|
||||
private GpxData setupGpxData(@Nullable GPXFile gpxFile) {
|
||||
GpxData gpxData = null;
|
||||
if (gpxFile != null) {
|
||||
QuadRect rect = gpxFile.getRect();
|
||||
|
@ -1524,25 +1527,118 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
return displayedName;
|
||||
}
|
||||
|
||||
private void saveNewGpx(File dir, String fileName, boolean showOnMap, SaveType saveType, FinalSaveAction finalSaveAction) {
|
||||
saveGpx(dir, fileName, showOnMap, null, null, saveType, finalSaveAction);
|
||||
private void saveNewGpx(@NonNull File dir, @NonNull String fileName, boolean showOnMap, SaveType saveType, FinalSaveAction finalSaveAction) {
|
||||
saveGpx(new File(dir, fileName), null, null, saveType, finalSaveAction, showOnMap);
|
||||
}
|
||||
|
||||
private void saveExistingGpx(GPXFile gpx, boolean showOnMap, ActionType actionType, SaveType saveType,
|
||||
FinalSaveAction finalSaveAction) {
|
||||
saveGpx(null, null, showOnMap, gpx, actionType, saveType, finalSaveAction);
|
||||
private void saveExistingGpx(@NonNull GPXFile gpx, boolean showOnMap, ActionType actionType,
|
||||
SaveType saveType, FinalSaveAction finalSaveAction) {
|
||||
saveGpx(new File(gpx.path), gpx, actionType, saveType, finalSaveAction, showOnMap);
|
||||
}
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private void saveGpx(final File dir,
|
||||
final String fileName,
|
||||
final boolean showOnMap,
|
||||
final GPXFile gpxFile,
|
||||
final ActionType actionType,
|
||||
final SaveType saveType,
|
||||
final FinalSaveAction finalSaveAction) {
|
||||
private void saveGpx(@NonNull final File outFile, @Nullable GPXFile gpxFile, final ActionType actionType,
|
||||
SaveType saveType, final FinalSaveAction finalSaveAction, final boolean showOnMap) {
|
||||
SaveGpxRouteListener saveGpxRouteListener = new SaveGpxRouteListener() {
|
||||
@Override
|
||||
public void gpxSavingFinished(Exception warning, GPXFile savedGpxFile, File backupFile) {
|
||||
onGpxSaved(warning, savedGpxFile, outFile, backupFile, actionType, finalSaveAction, showOnMap);
|
||||
}
|
||||
};
|
||||
|
||||
new SaveGPX(this, gpxFile, dir, fileName, saveType, showOnMap, actionType, finalSaveAction, app, mapActivity, measurementToolLayer, nightMode).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
SaveGpxRouteAsyncTask saveTask = new SaveGpxRouteAsyncTask(this, outFile, gpxFile, actionType, saveType, showOnMap, saveGpxRouteListener);
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
private void onGpxSaved(Exception warning, GPXFile savedGpxFile, final File outFile, final File backupFile,
|
||||
final ActionType actionType, FinalSaveAction finalSaveAction, final boolean showOnMap) {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
if (mapActivity == null) {
|
||||
return;
|
||||
}
|
||||
mapActivity.refreshMap();
|
||||
if (warning == null) {
|
||||
if (editingCtx.isNewData() && savedGpxFile != null) {
|
||||
QuadRect rect = savedGpxFile.getRect();
|
||||
TrkSegment segment = savedGpxFile.getNonEmptyTrkSegment();
|
||||
GpxData gpxData = new GpxData(savedGpxFile, rect, ActionType.EDIT_SEGMENT, segment);
|
||||
editingCtx.setGpxData(gpxData);
|
||||
updateToolbar();
|
||||
}
|
||||
if (isInEditMode()) {
|
||||
editingCtx.setChangesSaved();
|
||||
dismiss(mapActivity);
|
||||
} else {
|
||||
switch (finalSaveAction) {
|
||||
case SHOW_SNACK_BAR_AND_CLOSE:
|
||||
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
|
||||
snackbar = Snackbar.make(mapActivity.getLayout(),
|
||||
MessageFormat.format(getString(R.string.gpx_saved_sucessfully), outFile.getName()),
|
||||
Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.shared_string_undo, new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
MapActivity mapActivity = mapActivityRef.get();
|
||||
if (mapActivity != null) {
|
||||
OsmandApplication app = mapActivity.getMyApplication();
|
||||
FileUtils.removeGpxFile(app, outFile);
|
||||
if (backupFile != null) {
|
||||
FileUtils.renameGpxFile(app, backupFile, outFile);
|
||||
GPXFile gpx = GPXUtilities.loadGPXFile(outFile);
|
||||
setupGpxData(gpx);
|
||||
if (showOnMap) {
|
||||
showGpxOnMap(app, gpx, actionType, false);
|
||||
}
|
||||
} else {
|
||||
setupGpxData(null);
|
||||
}
|
||||
setMode(UNDO_MODE, true);
|
||||
MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager(),
|
||||
editingCtx, modes);
|
||||
}
|
||||
}
|
||||
})
|
||||
.addCallback(new Snackbar.Callback() {
|
||||
@Override
|
||||
public void onDismissed(Snackbar transientBottomBar, int event) {
|
||||
if (event != DISMISS_EVENT_ACTION) {
|
||||
editingCtx.setChangesSaved();
|
||||
}
|
||||
super.onDismissed(transientBottomBar, event);
|
||||
}
|
||||
});
|
||||
snackbar.getView().<TextView>findViewById(com.google.android.material.R.id.snackbar_action)
|
||||
.setAllCaps(false);
|
||||
UiUtilities.setupSnackbar(snackbar, nightMode);
|
||||
snackbar.show();
|
||||
dismiss(mapActivity, false);
|
||||
break;
|
||||
case SHOW_IS_SAVED_FRAGMENT:
|
||||
editingCtx.setChangesSaved();
|
||||
SavedTrackBottomSheetDialogFragment.showInstance(mapActivity.getSupportFragmentManager(),
|
||||
outFile.getAbsolutePath());
|
||||
dismiss(mapActivity);
|
||||
break;
|
||||
case SHOW_TOAST:
|
||||
editingCtx.setChangesSaved();
|
||||
if (savedGpxFile != null && !savedGpxFile.showCurrentTrack) {
|
||||
Toast.makeText(mapActivity,
|
||||
MessageFormat.format(getString(R.string.gpx_saved_sucessfully), outFile.getAbsolutePath()),
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(mapActivity, warning.getMessage(), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
protected static void showGpxOnMap(OsmandApplication app, GPXFile gpx, ActionType actionType, boolean isNewGpx) {
|
||||
SelectedGpxFile sf = app.getSelectedGpxHelper().selectGpxFile(gpx, true, false);
|
||||
if (sf != null && !isNewGpx) {
|
||||
if (actionType == ActionType.ADD_SEGMENT || actionType == ActionType.EDIT_SEGMENT) {
|
||||
sf.processPoints(app);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateUndoRedoButton(boolean enable, View view) {
|
||||
|
@ -1575,7 +1671,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
updateToolbar();
|
||||
}
|
||||
|
||||
void updateToolbar() {
|
||||
private void updateToolbar() {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
if (mapActivity == null) {
|
||||
return;
|
||||
|
@ -1706,7 +1802,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
}
|
||||
}
|
||||
|
||||
void dismiss(@NonNull MapActivity mapActivity) {
|
||||
private void dismiss(@NonNull MapActivity mapActivity) {
|
||||
dismiss(mapActivity, true);
|
||||
}
|
||||
|
||||
|
@ -1928,5 +2024,4 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
|||
public boolean isNightModeForMapControls() {
|
||||
return nightMode;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,297 +0,0 @@
|
|||
package net.osmand.plus.measurementtool;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.ProgressDialog;
|
||||
import android.os.AsyncTask;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import net.osmand.FileUtils;
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.data.QuadRect;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.IndexConstants.GPX_FILE_EXT;
|
||||
|
||||
class SaveGPX extends AsyncTask<Void, Void, Exception> {
|
||||
|
||||
private final MeasurementToolFragment measurementToolFragment;
|
||||
private final GPXUtilities.GPXFile gpxFile;
|
||||
private final File dir;
|
||||
private final String fileName;
|
||||
private final MeasurementToolFragment.SaveType saveType;
|
||||
private final boolean showOnMap;
|
||||
private final GpxData.ActionType actionType;
|
||||
private final MeasurementToolFragment.FinalSaveAction finalSaveAction;
|
||||
private final OsmandApplication app;
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private final MapActivity mapActivity;
|
||||
private MeasurementToolLayer measurementToolLayer;
|
||||
private boolean nightMode;
|
||||
private ProgressDialog progressDialog;
|
||||
private File backupFile;
|
||||
private File outFile;
|
||||
private GPXUtilities.GPXFile savedGpxFile;
|
||||
public MeasurementEditingContext editingCtx = new MeasurementEditingContext();
|
||||
private static final int UNDO_MODE = 0x8;
|
||||
|
||||
public SaveGPX(MeasurementToolFragment measurementToolFragment, GPXUtilities.GPXFile gpxFile, File dir, String fileName, MeasurementToolFragment.SaveType saveType, boolean showOnMap, GpxData.ActionType actionType, MeasurementToolFragment.FinalSaveAction finalSaveAction, OsmandApplication app, MapActivity mapActivity, MeasurementToolLayer measurementToolLayer, boolean nightMode) {
|
||||
this.measurementToolFragment = measurementToolFragment;
|
||||
this.gpxFile = gpxFile;
|
||||
this.dir = dir;
|
||||
this.fileName = fileName;
|
||||
this.saveType = saveType;
|
||||
this.showOnMap = showOnMap;
|
||||
this.actionType = actionType;
|
||||
this.finalSaveAction = finalSaveAction;
|
||||
this.app = app;
|
||||
this.mapActivity = mapActivity;
|
||||
this.measurementToolLayer = measurementToolLayer;
|
||||
this.nightMode = nightMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
measurementToolFragment.cancelModes();
|
||||
if (mapActivity != null) {
|
||||
progressDialog = new ProgressDialog(mapActivity);
|
||||
progressDialog.setMessage(measurementToolFragment.getString(R.string.saving_gpx_tracks));
|
||||
progressDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Exception doInBackground(Void... voids) {
|
||||
if (app == null) {
|
||||
return null;
|
||||
}
|
||||
List<GPXUtilities.WptPt> points = editingCtx.getPoints();
|
||||
GPXUtilities.TrkSegment before = editingCtx.getBeforeTrkSegmentLine();
|
||||
GPXUtilities.TrkSegment after = editingCtx.getAfterTrkSegmentLine();
|
||||
if (gpxFile == null) {
|
||||
outFile = new File(dir, fileName);
|
||||
String trackName = fileName.substring(0, fileName.length() - GPX_FILE_EXT.length());
|
||||
GPXUtilities.GPXFile gpx = new GPXUtilities.GPXFile(Version.getFullVersion(app));
|
||||
if (measurementToolLayer != null) {
|
||||
if (saveType == MeasurementToolFragment.SaveType.LINE) {
|
||||
GPXUtilities.TrkSegment segment = new GPXUtilities.TrkSegment();
|
||||
if (editingCtx.hasRoute()) {
|
||||
segment.points.addAll(editingCtx.getRoutePoints());
|
||||
} else {
|
||||
segment.points.addAll(before.points);
|
||||
segment.points.addAll(after.points);
|
||||
}
|
||||
GPXUtilities.Track track = new GPXUtilities.Track();
|
||||
track.name = trackName;
|
||||
track.segments.add(segment);
|
||||
gpx.tracks.add(track);
|
||||
} else if (saveType == MeasurementToolFragment.SaveType.ROUTE_POINT) {
|
||||
if (editingCtx.hasRoute()) {
|
||||
GPXUtilities.GPXFile newGpx = editingCtx.exportRouteAsGpx(trackName);
|
||||
if (newGpx != null) {
|
||||
gpx = newGpx;
|
||||
}
|
||||
}
|
||||
gpx.addRoutePoints(points);
|
||||
}
|
||||
}
|
||||
Exception res = GPXUtilities.writeGpxFile(outFile, gpx);
|
||||
gpx.path = outFile.getAbsolutePath();
|
||||
savedGpxFile = gpx;
|
||||
if (showOnMap) {
|
||||
showGpxOnMap(app, gpx, true);
|
||||
}
|
||||
return res;
|
||||
} else {
|
||||
GPXUtilities.GPXFile gpx = gpxFile;
|
||||
outFile = new File(gpx.path);
|
||||
backupFile = FileUtils.backupFile(app, outFile);
|
||||
String trackName = Algorithms.getFileNameWithoutExtension(outFile);
|
||||
if (measurementToolLayer != null) {
|
||||
if (measurementToolFragment.isPlanRouteMode()) {
|
||||
if (saveType == MeasurementToolFragment.SaveType.LINE) {
|
||||
GPXUtilities.TrkSegment segment = new GPXUtilities.TrkSegment();
|
||||
if (editingCtx.hasRoute()) {
|
||||
segment.points.addAll(editingCtx.getRoutePoints());
|
||||
} else {
|
||||
segment.points.addAll(before.points);
|
||||
segment.points.addAll(after.points);
|
||||
}
|
||||
GPXUtilities.Track track = new GPXUtilities.Track();
|
||||
track.name = trackName;
|
||||
track.segments.add(segment);
|
||||
gpx.tracks.add(track);
|
||||
} else if (saveType == MeasurementToolFragment.SaveType.ROUTE_POINT) {
|
||||
if (editingCtx.hasRoute()) {
|
||||
GPXUtilities.GPXFile newGpx = editingCtx.exportRouteAsGpx(trackName);
|
||||
if (newGpx != null) {
|
||||
gpx = newGpx;
|
||||
}
|
||||
}
|
||||
gpx.addRoutePoints(points);
|
||||
}
|
||||
} else if (actionType != null) {
|
||||
GpxData gpxData = editingCtx.getGpxData();
|
||||
switch (actionType) {
|
||||
case ADD_SEGMENT: {
|
||||
List<GPXUtilities.WptPt> snappedPoints = new ArrayList<>();
|
||||
snappedPoints.addAll(before.points);
|
||||
snappedPoints.addAll(after.points);
|
||||
gpx.addTrkSegment(snappedPoints);
|
||||
break;
|
||||
}
|
||||
case ADD_ROUTE_POINTS: {
|
||||
gpx.replaceRoutePoints(points);
|
||||
break;
|
||||
}
|
||||
case EDIT_SEGMENT: {
|
||||
if (gpxData != null) {
|
||||
GPXUtilities.TrkSegment segment = new GPXUtilities.TrkSegment();
|
||||
segment.points.addAll(points);
|
||||
gpx.replaceSegment(gpxData.getTrkSegment(), segment);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case OVERWRITE_SEGMENT: {
|
||||
if (gpxData != null) {
|
||||
List<GPXUtilities.WptPt> snappedPoints = new ArrayList<>();
|
||||
snappedPoints.addAll(before.points);
|
||||
snappedPoints.addAll(after.points);
|
||||
GPXUtilities.TrkSegment segment = new GPXUtilities.TrkSegment();
|
||||
segment.points.addAll(snappedPoints);
|
||||
gpx.replaceSegment(gpxData.getTrkSegment(), segment);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
gpx.addRoutePoints(points);
|
||||
}
|
||||
}
|
||||
Exception res = null;
|
||||
if (!gpx.showCurrentTrack) {
|
||||
res = GPXUtilities.writeGpxFile(outFile, gpx);
|
||||
}
|
||||
savedGpxFile = gpx;
|
||||
if (showOnMap) {
|
||||
showGpxOnMap(app, gpx, false);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
private void showGpxOnMap(OsmandApplication app, GPXUtilities.GPXFile gpx, boolean isNewGpx) {
|
||||
GpxSelectionHelper.SelectedGpxFile sf = app.getSelectedGpxHelper().selectGpxFile(gpx, true, false);
|
||||
if (sf != null && !isNewGpx) {
|
||||
if (actionType == GpxData.ActionType.ADD_SEGMENT || actionType == GpxData.ActionType.EDIT_SEGMENT) {
|
||||
sf.processPoints(app);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Exception warning) {
|
||||
onGpxSaved(warning);
|
||||
}
|
||||
|
||||
private void onGpxSaved(Exception warning) {
|
||||
if (mapActivity == null) {
|
||||
return;
|
||||
}
|
||||
if (progressDialog != null && progressDialog.isShowing()) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
mapActivity.refreshMap();
|
||||
if (warning == null) {
|
||||
if (editingCtx.isNewData() && savedGpxFile != null) {
|
||||
QuadRect rect = savedGpxFile.getRect();
|
||||
GPXUtilities.TrkSegment segment = savedGpxFile.getNonEmptyTrkSegment();
|
||||
GpxData gpxData = new GpxData(savedGpxFile, rect, GpxData.ActionType.EDIT_SEGMENT, segment);
|
||||
editingCtx.setGpxData(gpxData);
|
||||
measurementToolFragment.updateToolbar();
|
||||
}
|
||||
if (measurementToolFragment.isInEditMode()) {
|
||||
editingCtx.setChangesSaved();
|
||||
measurementToolFragment.dismiss(mapActivity);
|
||||
} else {
|
||||
switch (finalSaveAction) {
|
||||
case SHOW_SNACK_BAR_AND_CLOSE:
|
||||
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
|
||||
Snackbar snackbar = Snackbar.make(mapActivity.getLayout(),
|
||||
MessageFormat.format(measurementToolFragment.getString(R.string.gpx_saved_sucessfully), outFile.getName()),
|
||||
Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
MapActivity mapActivity = mapActivityRef.get();
|
||||
if (mapActivity != null) {
|
||||
if (outFile != null) {
|
||||
OsmandApplication app = mapActivity.getMyApplication();
|
||||
FileUtils.removeGpxFile(app, outFile);
|
||||
if (backupFile != null) {
|
||||
FileUtils.renameGpxFile(app, backupFile, outFile);
|
||||
GPXUtilities.GPXFile gpx = GPXUtilities.loadGPXFile(outFile);
|
||||
measurementToolFragment.setupGpxData(gpx);
|
||||
if (showOnMap) {
|
||||
showGpxOnMap(app, gpx, false);
|
||||
}
|
||||
} else {
|
||||
measurementToolFragment.setupGpxData(null);
|
||||
}
|
||||
}
|
||||
measurementToolFragment.setMode(UNDO_MODE, true);
|
||||
MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager()
|
||||
);
|
||||
}
|
||||
}
|
||||
})
|
||||
.addCallback(new Snackbar.Callback() {
|
||||
@Override
|
||||
public void onDismissed(Snackbar transientBottomBar, int event) {
|
||||
if (event != DISMISS_EVENT_ACTION) {
|
||||
editingCtx.setChangesSaved();
|
||||
}
|
||||
super.onDismissed(transientBottomBar, event);
|
||||
}
|
||||
});
|
||||
snackbar.getView().<TextView>findViewById(com.google.android.material.R.id.snackbar_action)
|
||||
.setAllCaps(false);
|
||||
UiUtilities.setupSnackbar(snackbar, nightMode);
|
||||
snackbar.show();
|
||||
measurementToolFragment.dismiss(mapActivity);
|
||||
break;
|
||||
case SHOW_IS_SAVED_FRAGMENT:
|
||||
editingCtx.setChangesSaved();
|
||||
SavedTrackBottomSheetDialogFragment.showInstance(mapActivity.getSupportFragmentManager(),
|
||||
outFile.getAbsolutePath());
|
||||
measurementToolFragment.dismiss(mapActivity);
|
||||
break;
|
||||
case SHOW_TOAST:
|
||||
editingCtx.setChangesSaved();
|
||||
if (!savedGpxFile.showCurrentTrack) {
|
||||
Toast.makeText(mapActivity,
|
||||
MessageFormat.format(measurementToolFragment.getString(R.string.gpx_saved_sucessfully), outFile.getAbsolutePath()),
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(mapActivity, warning.getMessage(), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,210 @@
|
|||
package net.osmand.plus.measurementtool;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.FileUtils;
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.GPXUtilities.GPXFile;
|
||||
import net.osmand.GPXUtilities.Track;
|
||||
import net.osmand.GPXUtilities.TrkSegment;
|
||||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.measurementtool.GpxData.ActionType;
|
||||
import net.osmand.plus.measurementtool.MeasurementToolFragment.SaveType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.IndexConstants.GPX_FILE_EXT;
|
||||
|
||||
class SaveGpxRouteAsyncTask extends AsyncTask<Void, Void, Exception> {
|
||||
|
||||
private WeakReference<MeasurementToolFragment> fragmentRef;
|
||||
private ProgressDialog progressDialog;
|
||||
|
||||
private SaveType saveType;
|
||||
private ActionType actionType;
|
||||
|
||||
private File outFile;
|
||||
private File backupFile;
|
||||
private GPXFile gpxFile;
|
||||
private GPXFile savedGpxFile;
|
||||
private boolean showOnMap;
|
||||
|
||||
private SaveGpxRouteListener saveGpxRouteListener;
|
||||
|
||||
|
||||
public SaveGpxRouteAsyncTask(MeasurementToolFragment fragment, File outFile, GPXFile gpxFile,
|
||||
ActionType actionType, SaveType saveType, boolean showOnMap, SaveGpxRouteListener saveGpxRouteListener) {
|
||||
fragmentRef = new WeakReference<>(fragment);
|
||||
this.outFile = outFile;
|
||||
this.showOnMap = showOnMap;
|
||||
this.gpxFile = gpxFile;
|
||||
this.actionType = actionType;
|
||||
this.saveType = saveType;
|
||||
this.saveGpxRouteListener = saveGpxRouteListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
MeasurementToolFragment fragment = fragmentRef.get();
|
||||
if (fragment != null && fragment.getContext() != null) {
|
||||
fragment.cancelModes();
|
||||
|
||||
Context ctx = fragment.getContext();
|
||||
progressDialog = new ProgressDialog(ctx);
|
||||
progressDialog.setMessage(ctx.getString(R.string.saving_gpx_tracks));
|
||||
progressDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Exception doInBackground(Void... voids) {
|
||||
MeasurementToolFragment fragment = fragmentRef.get();
|
||||
if (fragment == null || fragment.getActivity() == null) {
|
||||
return null;
|
||||
}
|
||||
MapActivity mapActivity = (MapActivity) fragment.getActivity();
|
||||
OsmandApplication app = mapActivity.getMyApplication();
|
||||
MeasurementToolLayer measurementLayer = mapActivity.getMapLayers().getMeasurementToolLayer();
|
||||
MeasurementEditingContext editingCtx = fragment.getEditingCtx();
|
||||
|
||||
List<WptPt> points = editingCtx.getPoints();
|
||||
TrkSegment before = editingCtx.getBeforeTrkSegmentLine();
|
||||
TrkSegment after = editingCtx.getAfterTrkSegmentLine();
|
||||
if (gpxFile == null) {
|
||||
String fileName = outFile.getName();
|
||||
String trackName = fileName.substring(0, fileName.length() - GPX_FILE_EXT.length());
|
||||
GPXFile gpx = new GPXFile(Version.getFullVersion(app));
|
||||
if (measurementLayer != null) {
|
||||
if (saveType == MeasurementToolFragment.SaveType.LINE) {
|
||||
TrkSegment segment = new TrkSegment();
|
||||
if (editingCtx.hasRoute()) {
|
||||
segment.points.addAll(editingCtx.getRoutePoints());
|
||||
} else {
|
||||
segment.points.addAll(before.points);
|
||||
segment.points.addAll(after.points);
|
||||
}
|
||||
Track track = new Track();
|
||||
track.name = trackName;
|
||||
track.segments.add(segment);
|
||||
gpx.tracks.add(track);
|
||||
} else if (saveType == MeasurementToolFragment.SaveType.ROUTE_POINT) {
|
||||
if (editingCtx.hasRoute()) {
|
||||
GPXFile newGpx = editingCtx.exportRouteAsGpx(trackName);
|
||||
if (newGpx != null) {
|
||||
gpx = newGpx;
|
||||
}
|
||||
}
|
||||
gpx.addRoutePoints(points);
|
||||
}
|
||||
}
|
||||
Exception res = GPXUtilities.writeGpxFile(outFile, gpx);
|
||||
gpx.path = outFile.getAbsolutePath();
|
||||
savedGpxFile = gpx;
|
||||
if (showOnMap) {
|
||||
MeasurementToolFragment.showGpxOnMap(app, gpx, actionType, true);
|
||||
}
|
||||
return res;
|
||||
} else {
|
||||
GPXFile gpx = gpxFile;
|
||||
backupFile = FileUtils.backupFile(app, outFile);
|
||||
String trackName = Algorithms.getFileNameWithoutExtension(outFile);
|
||||
if (measurementLayer != null) {
|
||||
if (fragment.isPlanRouteMode()) {
|
||||
if (saveType == MeasurementToolFragment.SaveType.LINE) {
|
||||
TrkSegment segment = new TrkSegment();
|
||||
if (editingCtx.hasRoute()) {
|
||||
segment.points.addAll(editingCtx.getRoutePoints());
|
||||
} else {
|
||||
segment.points.addAll(before.points);
|
||||
segment.points.addAll(after.points);
|
||||
}
|
||||
Track track = new Track();
|
||||
track.name = trackName;
|
||||
track.segments.add(segment);
|
||||
gpx.tracks.add(track);
|
||||
} else if (saveType == MeasurementToolFragment.SaveType.ROUTE_POINT) {
|
||||
if (editingCtx.hasRoute()) {
|
||||
GPXFile newGpx = editingCtx.exportRouteAsGpx(trackName);
|
||||
if (newGpx != null) {
|
||||
gpx = newGpx;
|
||||
}
|
||||
}
|
||||
gpx.addRoutePoints(points);
|
||||
}
|
||||
} else if (actionType != null) {
|
||||
GpxData gpxData = editingCtx.getGpxData();
|
||||
switch (actionType) {
|
||||
case ADD_SEGMENT: {
|
||||
List<WptPt> snappedPoints = new ArrayList<>();
|
||||
snappedPoints.addAll(before.points);
|
||||
snappedPoints.addAll(after.points);
|
||||
gpx.addTrkSegment(snappedPoints);
|
||||
break;
|
||||
}
|
||||
case ADD_ROUTE_POINTS: {
|
||||
gpx.replaceRoutePoints(points);
|
||||
break;
|
||||
}
|
||||
case EDIT_SEGMENT: {
|
||||
if (gpxData != null) {
|
||||
TrkSegment segment = new TrkSegment();
|
||||
segment.points.addAll(points);
|
||||
gpx.replaceSegment(gpxData.getTrkSegment(), segment);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case OVERWRITE_SEGMENT: {
|
||||
if (gpxData != null) {
|
||||
List<WptPt> snappedPoints = new ArrayList<>();
|
||||
snappedPoints.addAll(before.points);
|
||||
snappedPoints.addAll(after.points);
|
||||
TrkSegment segment = new TrkSegment();
|
||||
segment.points.addAll(snappedPoints);
|
||||
gpx.replaceSegment(gpxData.getTrkSegment(), segment);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
gpx.addRoutePoints(points);
|
||||
}
|
||||
}
|
||||
Exception res = null;
|
||||
if (!gpx.showCurrentTrack) {
|
||||
res = GPXUtilities.writeGpxFile(outFile, gpx);
|
||||
}
|
||||
savedGpxFile = gpx;
|
||||
if (showOnMap) {
|
||||
MeasurementToolFragment.showGpxOnMap(app, gpx, actionType, false);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Exception warning) {
|
||||
MeasurementToolFragment fragment = fragmentRef.get();
|
||||
if (fragment != null && progressDialog != null && AndroidUtils.isActivityNotDestroyed(fragment.getActivity())) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
if (saveGpxRouteListener != null) {
|
||||
saveGpxRouteListener.gpxSavingFinished(warning, savedGpxFile, backupFile);
|
||||
}
|
||||
}
|
||||
|
||||
public interface SaveGpxRouteListener {
|
||||
|
||||
void gpxSavingFinished(Exception warning, GPXFile savedGpxFile, File backupFile);
|
||||
}
|
||||
}
|
|
@ -25,6 +25,7 @@ import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
|||
import net.osmand.plus.helpers.GpxTrackAdapter;
|
||||
import net.osmand.plus.helpers.GpxTrackAdapter.OnItemClickListener;
|
||||
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
||||
import net.osmand.plus.helpers.enums.TracksSortByMode;
|
||||
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter;
|
||||
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionAdapterListener;
|
||||
|
||||
|
@ -38,7 +39,6 @@ import java.util.Map;
|
|||
|
||||
import static net.osmand.plus.SimplePopUpMenuItemAdapter.*;
|
||||
import static net.osmand.plus.helpers.GpxUiHelper.getSortedGPXFilesInfo;
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.*;
|
||||
import static net.osmand.util.Algorithms.collectDirs;
|
||||
|
||||
public class SelectFileBottomSheet extends BottomSheetBehaviourDialogFragment {
|
||||
|
|
|
@ -13,7 +13,8 @@ import androidx.preference.Preference;
|
|||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.helpers.FontCache;
|
||||
|
@ -288,11 +289,11 @@ public class MonitoringSettingsFragment extends BaseSettingsFragment
|
|||
@Override
|
||||
public void onApplyPreferenceChange(String prefId, boolean applyToAllProfiles, Object newValue) {
|
||||
if (SAVE_GLOBAL_TRACK_INTERVAL.equals(prefId)) {
|
||||
OsmandSettings.OsmandPreference pref = settings.getPreference(prefId);
|
||||
OsmandPreference pref = settings.getPreference(prefId);
|
||||
if (newValue instanceof Boolean) {
|
||||
applyPreference(settings.SAVE_GLOBAL_TRACK_REMEMBER.getId(), applyToAllProfiles, false);
|
||||
} else if (pref instanceof OsmandSettings.CommonPreference
|
||||
&& !((OsmandSettings.CommonPreference) pref).hasDefaultValueForMode(getSelectedAppMode())) {
|
||||
} else if (pref instanceof CommonPreference
|
||||
&& !((CommonPreference) pref).hasDefaultValueForMode(getSelectedAppMode())) {
|
||||
applyPreference(SAVE_GLOBAL_TRACK_INTERVAL, applyToAllProfiles, newValue);
|
||||
applyPreference(settings.SAVE_GLOBAL_TRACK_REMEMBER.getId(), applyToAllProfiles, true);
|
||||
}
|
||||
|
|
|
@ -84,7 +84,7 @@ import net.osmand.plus.mapmarkers.CoordinateInputDialogFragment;
|
|||
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||
import net.osmand.plus.osmedit.OsmEditingPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.TracksSortByMode;
|
||||
import net.osmand.plus.helpers.enums.TracksSortByMode;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DateFormat;
|
||||
|
|
|
@ -50,14 +50,14 @@ import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
|||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.TrackActivity;
|
||||
import net.osmand.plus.dialogs.GpxAppearanceAdapter;
|
||||
import net.osmand.plus.measurementtool.GpxData;
|
||||
import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.track.GpxSplitType;
|
||||
import net.osmand.plus.track.SplitTrackAsyncTask;
|
||||
import net.osmand.plus.track.SplitTrackAsyncTask.SplitTrackListener;
|
||||
|
|
|
@ -25,6 +25,12 @@ import net.osmand.osm.PoiType;
|
|||
import net.osmand.osm.edit.Entity;
|
||||
import net.osmand.plus.*;
|
||||
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
|
||||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.EnumAdapter;
|
||||
import net.osmand.plus.activities.EnumAdapter.IEnumWithResource;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
@ -342,7 +348,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
|||
@Override
|
||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
||||
if (itemId == R.string.layer_osm_bugs) {
|
||||
OsmandSettings.OsmandPreference<Boolean> showOsmBugs = settings.SHOW_OSM_BUGS;
|
||||
OsmandPreference<Boolean> showOsmBugs = settings.SHOW_OSM_BUGS;
|
||||
showOsmBugs.set(isChecked);
|
||||
adapter.getItem(pos).setColorRes(showOsmBugs.get() ?
|
||||
R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
||||
|
@ -365,7 +371,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
|||
@Override
|
||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
||||
if (itemId == R.string.layer_osm_edits) {
|
||||
OsmandSettings.OsmandPreference<Boolean> showOsmEdits = settings.SHOW_OSM_EDITS;
|
||||
OsmandPreference<Boolean> showOsmEdits = settings.SHOW_OSM_EDITS;
|
||||
showOsmEdits.set(isChecked);
|
||||
adapter.getItem(pos).setColorRes(showOsmEdits.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
||||
adapter.notifyDataSetChanged();
|
||||
|
|
|
@ -14,8 +14,8 @@ import net.osmand.plus.DialogListItemAdapter;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ import android.content.Intent;
|
|||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.format.DateFormat;
|
||||
import android.text.format.Time;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.CheckBox;
|
||||
|
@ -27,6 +26,8 @@ import net.osmand.plus.ContextMenuItem;
|
|||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
@ -34,20 +35,15 @@ import net.osmand.plus.dashboard.tools.DashFragmentData;
|
|||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||
import net.osmand.plus.quickaction.QuickActionType;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.views.AnimateDraggingMapThread;
|
||||
import net.osmand.plus.views.layers.MapInfoLayer;
|
||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
import net.osmand.plus.views.mapwidgets.widgets.TextInfoWidget;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_MARK_AS_PARKING_LOC;
|
||||
|
||||
|
|
|
@ -6,8 +6,7 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.DayNightMode;
|
||||
import net.osmand.plus.helpers.enums.DayNightMode;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
|
@ -27,9 +26,9 @@ public class DayNightModeAction extends QuickAction {
|
|||
@Override
|
||||
public void execute(MapActivity activity) {
|
||||
if (activity.getMyApplication().getDaynightHelper().isNightMode()) {
|
||||
activity.getMyApplication().getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.DAY);
|
||||
activity.getMyApplication().getSettings().DAYNIGHT_MODE.set(DayNightMode.DAY);
|
||||
} else {
|
||||
activity.getMyApplication().getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.NIGHT);
|
||||
activity.getMyApplication().getSettings().DAYNIGHT_MODE.set(DayNightMode.NIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package net.osmand.plus.rastermaps;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
public enum LayerTransparencySeekbarMode {
|
||||
OVERLAY(R.string.overlay_transparency),
|
||||
UNDERLAY(R.string.map_transparency),
|
||||
OFF(R.string.shared_string_off),
|
||||
UNDEFINED(R.string.shared_string_none);
|
||||
|
||||
private final int key;
|
||||
|
||||
LayerTransparencySeekbarMode(int key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String toHumanString(Context ctx) {
|
||||
return ctx.getString(key);
|
||||
}
|
||||
}
|
|
@ -16,7 +16,6 @@ import com.google.gson.reflect.TypeToken;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.LayerTransparencySeekbarMode;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
@ -137,7 +136,7 @@ public class MapOverlayAction extends SwitchableAction<Pair<String, String>> {
|
|||
if (settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == LayerTransparencySeekbarMode.UNDEFINED) {
|
||||
settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.set(LayerTransparencySeekbarMode.OVERLAY);
|
||||
}
|
||||
if (settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == OsmandSettings.LayerTransparencySeekbarMode.OVERLAY) {
|
||||
if (settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == LayerTransparencySeekbarMode.OVERLAY) {
|
||||
activity.getMapLayers().getMapControlsLayer().showTransparencyBar(settings.MAP_OVERLAY_TRANSPARENCY, true);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -15,8 +15,8 @@ import com.google.gson.reflect.TypeToken;
|
|||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.LayerTransparencySeekbarMode;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
@ -144,7 +144,7 @@ public class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
|||
|
||||
|
||||
}
|
||||
final OsmandSettings.CommonPreference<Boolean> hidePolygonsPref =
|
||||
final CommonPreference<Boolean> hidePolygonsPref =
|
||||
activity.getMyApplication().getSettings().getCustomRenderBooleanProperty("noPolygons");
|
||||
hidePolygonsPref.set(hasUnderlay);
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue