Merge branch 'master' into continue_settings_refactor

This commit is contained in:
Vitaliy 2020-10-08 20:24:07 +03:00
commit e7fc000036
29 changed files with 391 additions and 70 deletions

View file

@ -27,7 +27,7 @@ public abstract class MapRenderingTypes {
private static final Log log = PlatformUtil.getLog(MapRenderingTypes.class); 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", 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; public final static byte RESTRICTION_NO_RIGHT_TURN = 1;

View file

@ -942,4 +942,20 @@ public class Algorithms {
} }
return res; return res;
} }
public static boolean isValidMessageFormat(CharSequence sequence) {
if (!isEmpty(sequence)) {
int counter = 0;
for (int i = 0; i < sequence.length(); i++) {
char ch = sequence.charAt(i);
if (ch == '{') {
counter++;
} else if (ch == '}') {
counter--;
}
}
return counter == 0;
}
return false;
}
} }

View file

@ -267,4 +267,8 @@
<string name="status_widget_title">تتبع حالة أوسماند</string> <string name="status_widget_title">تتبع حالة أوسماند</string>
<string name="back_to_osmand">العودة إلى OsmAnd</string> <string name="back_to_osmand">العودة إلى OsmAnd</string>
<string name="duration_ago">%1$s منذ</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> </resources>

View file

@ -267,4 +267,8 @@
<string name="last_response_duration">Letzte Antwort: vor %1$s</string> <string name="last_response_duration">Letzte Antwort: vor %1$s</string>
<string name="duration_ago">vor %1$s</string> <string name="duration_ago">vor %1$s</string>
<string name="shared_string_error_short">ERR</string> <string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Export</string>
<string name="logcat_buffer">Logcat-Puffer</string>
<string name="logcat_buffer_descr">Protokolle der Anwendung einsehen und freigeben</string>
<string name="send_report">Bericht senden</string>
</resources> </resources>

View file

@ -268,4 +268,8 @@
<string name="last_response_duration">Ùrtima risposta: %1$s a como</string> <string name="last_response_duration">Ùrtima risposta: %1$s a como</string>
<string name="duration_ago">%1$s a como</string> <string name="duration_ago">%1$s a como</string>
<string name="shared_string_error_short">ERR</string> <string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Esporta</string>
<string name="logcat_buffer">Buffer de Logcat</string>
<string name="logcat_buffer_descr">Verìfica e cumpartzi sos registros de s\'aplicatzione fatos a sa minuda</string>
<string name="send_report">Imbia resumu</string>
</resources> </resources>

View file

@ -110,7 +110,7 @@ private const val PROXY_ENABLED = "proxy_enabled"
private const val PROXY_PREFERENCES_KEY = "proxy_preferences" private const val PROXY_PREFERENCES_KEY = "proxy_preferences"
private const val SHARING_INITIALIZATION_TIME = 60 * 2L // 2 minutes private const val SHARING_INITIALIZATION_TIME = 60 * 2L // 2 minutes
private const val WAITING_TDLIB_TIME = 3 // 3 seconds private const val WAITING_TDLIB_TIME = 7 // 7 seconds
private const val GPS_UPDATE_EXPIRED_TIME = 60 * 3L // 3 minutes private const val GPS_UPDATE_EXPIRED_TIME = 60 * 3L // 3 minutes

View 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>

View file

@ -6,33 +6,37 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<FrameLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingLeft="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"> android:paddingRight="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@android:id/title" android:id="@android:id/title"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start" android:layout_weight="1"
osmand:typeface="@string/font_roboto_regular"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size" 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 <net.osmand.plus.widgets.TextViewEx
android:id="@android:id/summary" android:id="@android:id/summary"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end"
osmand:typeface="@string/font_roboto_medium"
android:textColor="?attr/active_color_basic" android:textColor="?attr/active_color_basic"
android:textSize="@dimen/default_list_text_size" 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 <com.google.android.material.slider.Slider
android:id="@+id/slider" android:id="@+id/slider"

View file

@ -1074,7 +1074,7 @@
<string name="rendering_category_routes">المسارات الرياضية</string> <string name="rendering_category_routes">المسارات الرياضية</string>
<string name="rendering_category_transport">وسائل المواصلات</string> <string name="rendering_category_transport">وسائل المواصلات</string>
<string name="rendering_category_others">سمات أخرى للخريطة</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_top">شريط المعلومات</string>
<string name="map_widget_right">العدادات على اليمين</string> <string name="map_widget_right">العدادات على اليمين</string>
<string name="map_widget_left">العدادات على اليسار</string> <string name="map_widget_left">العدادات على اليسار</string>
@ -3413,7 +3413,7 @@
<string name="select_nav_icon_descr">سترى الأيقونة فقط أثناء الملاحة أو أثناء التحرك.</string> <string name="select_nav_icon_descr">سترى الأيقونة فقط أثناء الملاحة أو أثناء التحرك.</string>
<string name="button_rate">قيم</string> <string name="button_rate">قيم</string>
<string name="select_map_icon_descr">تظهر أيقونة الخريطة فقط على الخريطة ، وتتغير أثناء التنقل إلى أيقونة التنقل.</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="search_offline_geo_error">تعذر تحليل الهدف الجغرافي \'%s\'.</string>
<string name="permission_is_required">الإذن مطلوب لاستخدام هذا الخيار.</string> <string name="permission_is_required">الإذن مطلوب لاستخدام هذا الخيار.</string>
<string name="monitoring_min_speed_descr_side_effect">اعراض جانبية: سيفقد المسار الخاص بك جميع الأقسام التي لم يتحقق فيها معيار الحد الأدنى للسرعة (على سبيل المثال ، حيث تدفع دراجتك أعلى تل شديد الانحدار). أيضا ، لن تكون هناك معلومات حول فترات الراحة ، مثل الاستراحات. هذا له تأثيرات على أي تحليل أو مرحلة ما بعد المعالجة ، مثل عند محاولة تحديد المدة الإجمالية لرحلتك ، أو وقت الحركة ، أو متوسط سرعتك.</string> <string name="monitoring_min_speed_descr_side_effect">اعراض جانبية: سيفقد المسار الخاص بك جميع الأقسام التي لم يتحقق فيها معيار الحد الأدنى للسرعة (على سبيل المثال ، حيث تدفع دراجتك أعلى تل شديد الانحدار). أيضا ، لن تكون هناك معلومات حول فترات الراحة ، مثل الاستراحات. هذا له تأثيرات على أي تحليل أو مرحلة ما بعد المعالجة ، مثل عند محاولة تحديد المدة الإجمالية لرحلتك ، أو وقت الحركة ، أو متوسط سرعتك.</string>
@ -3893,4 +3893,12 @@
<string name="sort_name_ascending">الاسم: أ ي</string> <string name="sort_name_ascending">الاسم: أ ي</string>
<string name="start_finish_icons">رموز البدء/الانتهاء</string> <string name="start_finish_icons">رموز البدء/الانتهاء</string>
<string name="contour_lines_thanks">شكرا لشرائك \"خطوط الكنتور\"</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> </resources>

View file

@ -3826,7 +3826,7 @@
<string name="plan_route_select_track_file_for_open">Wählen Sie eine Trackdatei zum Öffnen aus.</string> <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="shared_string_done">Fertig</string>
<string name="overwrite_track">Track überschreiben</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="save_as_new_track">Als neuen Track speichern</string>
<string name="reverse_route">Route umkehren</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> <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="sort_name_ascending">Name: A Z</string>
<string name="start_finish_icons">Start-/Ziel-Symbole</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="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> </resources>

View file

@ -3764,4 +3764,13 @@
<string name="sort_name_ascending">Nimi: A Z</string> <string name="sort_name_ascending">Nimi: A Z</string>
<string name="screen_timeout">Ekraani väljalülitamine</string> <string name="screen_timeout">Ekraani väljalülitamine</string>
<string name="app_mode_wheelchair_forward">Ratastool edasi</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> </resources>

View file

@ -3885,4 +3885,7 @@
<string name="sort_name_ascending">Nom : A Z</string> <string name="sort_name_ascending">Nom : A Z</string>
<string name="start_finish_icons">Icônes de départ / arrivée</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="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> </resources>

View file

@ -3911,4 +3911,6 @@
<string name="sort_name_ascending">שם: א ת</string> <string name="sort_name_ascending">שם: א ת</string>
<string name="start_finish_icons">סמלי התחלה/סיום</string> <string name="start_finish_icons">סמלי התחלה/סיום</string>
<string name="contour_lines_thanks">תודה לך על רכישת ‚קווי מתאר’</string> <string name="contour_lines_thanks">תודה לך על רכישת ‚קווי מתאר’</string>
<string name="routing_attr_avoid_footways_description">הימנעות משבילי הולכי רגל</string>
<string name="routing_attr_avoid_footways_name">הימנעות משבילי הולכי רגל</string>
</resources> </resources>

View file

@ -1625,7 +1625,7 @@ POIの更新は利用できません</string>
<string name="rendering_value_walkingRoutesScopeOSMC_name">所属ネットワークに応じたカラー変更</string> <string name="rendering_value_walkingRoutesScopeOSMC_name">所属ネットワークに応じたカラー変更</string>
<string name="rendering_value_walkingRoutesOSMC_name">OSMCのハイキングシンボルカラー</string> <string name="rendering_value_walkingRoutesOSMC_name">OSMCのハイキングシンボルカラー</string>
<string name="traffic_warning_hazard">被災域</string> <string name="traffic_warning_hazard">被災域</string>
<string name="rendering_value_boldOutline_name">太線</string> <string name="rendering_value_boldOutline_name">輪郭強調</string>
<string name="no_updates_available">更新はありません</string> <string name="no_updates_available">更新はありません</string>
<string name="download_live_updates">ライブ更新</string> <string name="download_live_updates">ライブ更新</string>
<string name="we_really_care_about_your_opinion">ユーザーからの意見やフィードバックを大切にしています。</string> <string name="we_really_care_about_your_opinion">ユーザーからの意見やフィードバックを大切にしています。</string>
@ -2496,7 +2496,7 @@ POIの更新は利用できません</string>
<string name="this_year">今年</string> <string name="this_year">今年</string>
<string name="move_all_to_history">全て履歴に移動</string> <string name="move_all_to_history">全て履歴に移動</string>
<string name="show_direction">距離表示</string> <string name="show_direction">距離表示</string>
<string name="sort_by">並び順の変更</string> <string name="sort_by">並び順:</string>
<string name="keep_showing_on_map">マップ上に表示し続ける</string> <string name="keep_showing_on_map">マップ上に表示し続ける</string>
<string name="exit_without_saving">保存せずに終了しますか?</string> <string name="exit_without_saving">保存せずに終了しますか?</string>
<string name="line"></string> <string name="line"></string>

View file

@ -73,7 +73,7 @@
<string name="select_postcode">Поиск почтового индекса</string> <string name="select_postcode">Поиск почтового индекса</string>
<string name="quick_action_take_audio_note">Запись аудио⁣</string> <string name="quick_action_take_audio_note">Запись аудио⁣</string>
<string name="quick_action_take_video_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="quick_action_add_osm_bug">OSM-заметка</string>
<string name="parking_options">Функции парковки</string> <string name="parking_options">Функции парковки</string>
<string name="full_version_thanks">Благодарим вас за покупку платной версии OsmAnd.</string> <string name="full_version_thanks">Благодарим вас за покупку платной версии OsmAnd.</string>
@ -202,7 +202,7 @@
<string name="shared_string_continue">Продолжить</string> <string name="shared_string_continue">Продолжить</string>
<string name="shared_string_pause">Пауза</string> <string name="shared_string_pause">Пауза</string>
<string name="shared_string_trip">Поездка</string> <string name="shared_string_trip">Поездка</string>
<string name="shared_string_recorded">Записано</string> <string name="shared_string_recorded">Записано в трек</string>
<string name="shared_string_record">Запись</string> <string name="shared_string_record">Запись</string>
<string name="gpx_logging_no_data">Нет данных</string> <string name="gpx_logging_no_data">Нет данных</string>
<string name="save_track_min_speed">Минимальная скорость для записи</string> <string name="save_track_min_speed">Минимальная скорость для записи</string>
@ -726,14 +726,14 @@
<string name="sd_mounted_ro">Карта памяти доступна только для чтения. <string name="sd_mounted_ro">Карта памяти доступна только для чтения.
\nТеперь можно только просматривать предварительно загруженную карту, а не загружать новые области.</string> \nТеперь можно только просматривать предварительно загруженную карту, а не загружать новые области.</string>
<string name="unzipping_file">Файл распаковывается…</string> <string name="unzipping_file">Файл распаковывается…</string>
<string name="route_tr">Направо</string> <string name="route_tr">Направо</string>
<string name="route_tshr">Резко направо</string> <string name="route_tshr">Резко направо</string>
<string name="route_tslr">Плавно направо</string> <string name="route_tslr">Плавно направо</string>
<string name="route_tl">Налево</string> <string name="route_tl">Налево</string>
<string name="route_tshl">Резко налево</string> <string name="route_tshl">Резко налево</string>
<string name="route_tsll">Плавно налево</string> <string name="route_tsll">Плавно налево</string>
<string name="route_tu">Выполните разворот</string> <string name="route_tu">Выполните разворот</string>
<string name="route_head">Двигайтесь прямо</string> <string name="route_head">Двигайтесь прямо</string>
<string name="first_time_continue">Продолжить</string> <string name="first_time_continue">Продолжить</string>
<string name="first_time_download">Загрузить детальные карты регионов</string> <string name="first_time_download">Загрузить детальные карты регионов</string>
<string name="search_poi_location">Поиск сигнала…</string> <string name="search_poi_location">Поиск сигнала…</string>
@ -1024,8 +1024,8 @@
<string name="rendering_attr_hmRendered_description">Показывать больше деталей на карте.</string> <string name="rendering_attr_hmRendered_description">Показывать больше деталей на карте.</string>
<string name="rendering_attr_hmRendered_name">Больше деталей</string> <string name="rendering_attr_hmRendered_name">Больше деталей</string>
<string name="route_roundabout">Круговое движение, %1$d съезд</string> <string name="route_roundabout">Круговое движение, %1$d съезд</string>
<string name="route_kl">Держитесь левее</string> <string name="route_kl">Держитесь левее</string>
<string name="route_kr">Держитесь правее</string> <string name="route_kr">Держитесь правее</string>
<string name="asap">Скорее</string> <string name="asap">Скорее</string>
<string name="gpxup_public">Общедоступный</string> <string name="gpxup_public">Общедоступный</string>
<string name="gpxup_identifiable">Идентифицируемый</string> <string name="gpxup_identifiable">Идентифицируемый</string>
@ -1179,7 +1179,7 @@
<string name="context_menu_item_last_intermediate_point">Последний промежуточный пункт</string> <string name="context_menu_item_last_intermediate_point">Последний промежуточный пункт</string>
<string name="context_menu_item_first_intermediate_point">Сделать начальной остановкой</string> <string name="context_menu_item_first_intermediate_point">Сделать начальной остановкой</string>
<string name="add_as_last_destination_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="replace_destination_point">Заменить пункт назначения</string>
<string name="new_destination_point_dialog">Пункт назначения уже задан</string> <string name="new_destination_point_dialog">Пункт назначения уже задан</string>
<string name="target_point">Пункт %1$s</string> <string name="target_point">Пункт %1$s</string>
@ -1539,7 +1539,7 @@
<string name="rendering_attr_subwayMode_name">Линии метро</string> <string name="rendering_attr_subwayMode_name">Линии метро</string>
<string name="continue_navigation">Продолжить навигацию</string> <string name="continue_navigation">Продолжить навигацию</string>
<string name="pause_navigation">Приостановить навигацию</string> <string name="pause_navigation">Приостановить навигацию</string>
<string name="rendering_attr_alpineHiking_description">Визуализация маршрута по шкале SAC.</string> <string name="rendering_attr_alpineHiking_description">Отрисовка дорог cогласно шкале SAC.</string>
<string name="rendering_attr_hikingRoutesOSMC_description">Отрисовка дорог согласно трассам OSMC.</string> <string name="rendering_attr_hikingRoutesOSMC_description">Отрисовка дорог согласно трассам OSMC.</string>
<string name="arrival_distance_factor_early">Раннее</string> <string name="arrival_distance_factor_early">Раннее</string>
<string name="arrival_distance_factor_normally">По умолчанию</string> <string name="arrival_distance_factor_normally">По умолчанию</string>
@ -3580,8 +3580,7 @@
<string name="monitoring_min_speed_descr_remark">Примечание: проверка скорости &gt; 0: большинство модулей GPS сообщают значение скорости только в том случае, если алгоритм определяет, что вы движетесь, и ничего, если вы не перемещаетесь. Следовательно, использование параметра &gt; 0 в этом фильтре в некотором смысле приводит к обнаружению факта перемещения модуля GPS. Но даже если мы не производим данную фильтрацию во время записи, то всё равно эта функция используется при анализе GPX для определения скорректированного расстояния, то есть значение, отображаемое в этом поле, является расстоянием, записанным во время движения.</string> <string name="monitoring_min_speed_descr_remark">Примечание: проверка скорости &gt; 0: большинство модулей GPS сообщают значение скорости только в том случае, если алгоритм определяет, что вы движетесь, и ничего, если вы не перемещаетесь. Следовательно, использование параметра &gt; 0 в этом фильтре в некотором смысле приводит к обнаружению факта перемещения модуля GPS. Но даже если мы не производим данную фильтрацию во время записи, то всё равно эта функция используется при анализе GPX для определения скорректированного расстояния, то есть значение, отображаемое в этом поле, является расстоянием, записанным во время движения.</string>
<string name="multimedia_rec_split_title">Разделение записи</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="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">"Будут записываться только точки, отвечающие <string name="monitoring_min_accuracy_descr">"Будут записываться только точки, отвечающие по показателю минимальной точности (в метрах или футах — зависит от настроек системы). Точность — это близость измерений к истинному положению, и она не связана напрямую с точностью, которая представляет собой разброс повторных измерений."</string>
\n в минимальной точностью (в метрах/футах —зависит от настроек системы). Точность — это близость измерений к истинному положению, и она не связана напрямую с точностью, которая представляет собой разброс повторных измерений."</string>
<string name="monitoring_min_speed_descr_recommendation">Рекомендация: попробуйте сначала воспользоваться детектором движения через фильтр минимального смещения (B), что может дать лучшие результаты и вы потеряете меньше данных. Если треки остаются шумными на низких скоростях, попробуйте использовать ненулевые значения. Обратите внимание, что некоторые измерения могут вообще не указывать значения скорости (некоторые сетевые методы), и в этом случае ничего не будет записываться.</string> <string name="monitoring_min_speed_descr_recommendation">Рекомендация: попробуйте сначала воспользоваться детектором движения через фильтр минимального смещения (B), что может дать лучшие результаты и вы потеряете меньше данных. Если треки остаются шумными на низких скоростях, попробуйте использовать ненулевые значения. Обратите внимание, что некоторые измерения могут вообще не указывать значения скорости (некоторые сетевые методы), и в этом случае ничего не будет записываться.</string>
<string name="slope_description">Для визуализации крутизны рельефа используются цвета.</string> <string name="slope_description">Для визуализации крутизны рельефа используются цвета.</string>
<string name="slope_read_more">Подробнее об уклонах можно прочитать в %1$s.</string> <string name="slope_read_more">Подробнее об уклонах можно прочитать в %1$s.</string>
@ -3790,7 +3789,7 @@
<string name="use_volume_buttons_as_zoom_descr">Изменение масштаба карты кнопками громкости.</string> <string name="use_volume_buttons_as_zoom_descr">Изменение масштаба карты кнопками громкости.</string>
<string name="use_volume_buttons_as_zoom">Масштабирование кнопками громкости</string> <string name="use_volume_buttons_as_zoom">Масштабирование кнопками громкости</string>
<string name="lenght_limit_description">Укажите длину автомобиля, для длинных транспортных средств могут применяться ограничения на маршруте.</string> <string name="lenght_limit_description">Укажите длину автомобиля, для длинных транспортных средств могут применяться ограничения на маршруте.</string>
<string name="quick_action_remove_next_destination">Удалить следующую</string> <string name="quick_action_remove_next_destination">Удалить ближайший пункт</string>
<string name="please_provide_point_name_error">Задайте название точки</string> <string name="please_provide_point_name_error">Задайте название точки</string>
<string name="quick_action_remove_next_destination_descr">Следующая точка маршрута будет удалена. Если это конечный пункт, навигация завершится.</string> <string name="quick_action_remove_next_destination_descr">Следующая точка маршрута будет удалена. Если это конечный пункт, навигация завершится.</string>
<string name="plugin_wikipedia_description">Информация о достопримечательностях из Википедии. Ваш карманный офлайн-путеводитель — просто включите плагин Википедии и читайте об объектах вокруг вас.</string> <string name="plugin_wikipedia_description">Информация о достопримечательностях из Википедии. Ваш карманный офлайн-путеводитель — просто включите плагин Википедии и читайте об объектах вокруг вас.</string>
@ -3904,4 +3903,12 @@
<string name="sort_name_ascending">Имя: А - Я</string> <string name="sort_name_ascending">Имя: А - Я</string>
<string name="start_finish_icons">Значки старта и финиша</string> <string name="start_finish_icons">Значки старта и финиша</string>
<string name="contour_lines_thanks">Спасибо за покупку \'Контурных линий\'</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> </resources>

View file

@ -3904,4 +3904,13 @@
<string name="sort_name_descending">Nùmene: Z A</string> <string name="sort_name_descending">Nùmene: Z A</string>
<string name="sort_name_ascending">Nùmene: A Z</string> <string name="sort_name_ascending">Nùmene: A Z</string>
<string name="start_finish_icons">Iconas de incumintzu/fine</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> </resources>

View file

@ -224,7 +224,7 @@
<string name="button_upgrade_osmandplus">Aktualizovať OsmAnd+</string> <string name="button_upgrade_osmandplus">Aktualizovať OsmAnd+</string>
<string name="map_version_changed_info">Stiahnite novú verziu aplikácie, aby ste mohli použiť nové mapové súbory.</string> <string name="map_version_changed_info">Stiahnite novú verziu aplikácie, aby ste mohli použiť nové mapové súbory.</string>
<string name="poi_filter_nominatim">Online filter Nominatim</string> <string name="poi_filter_nominatim">Online filter Nominatim</string>
<string name="search_position_current_location_search">Hľadám umiestnenie</string> <string name="search_position_current_location_search">Hľadám polohu</string>
<string name="search_position_current_location_found">Moja poloha (nájdená)</string> <string name="search_position_current_location_found">Moja poloha (nájdená)</string>
<string name="search_position_address">Adresa…</string> <string name="search_position_address">Adresa…</string>
<string name="search_position_favorites">Obľúbené miesta…</string> <string name="search_position_favorites">Obľúbené miesta…</string>
@ -325,11 +325,11 @@
<string name="foot">ft</string> <string name="foot">ft</string>
<string name="mile_per_hour">mph</string> <string name="mile_per_hour">mph</string>
<string name="mile">mi</string> <string name="mile">mi</string>
<string name="send_location_way_choose_title">Zdieľať umiestnenie cez</string> <string name="send_location_way_choose_title">Zdieľať polohu cez</string>
<string name="send_location_sms_pattern">Pozícia: %1$s\n%2$s</string> <string name="send_location_sms_pattern">Pozícia: %1$s\n%2$s</string>
<string name="send_location_email_pattern">Na zobrazenie umiestnenia nasledujte webový odkaz %1$s alebo odkaz androidovského obsahu (intent link) %2$s</string> <string name="send_location_email_pattern">Na zobrazenie umiestnenia nasledujte webový odkaz %1$s alebo odkaz androidovského obsahu (intent link) %2$s</string>
<string name="send_location">Poslať umiestnenie</string> <string name="send_location">Poslať polohu</string>
<string name="context_menu_item_share_location">Zdieľať umiestnenie</string> <string name="context_menu_item_share_location">Zdieľať polohu</string>
<string name="add_waypoint_dialog_added">GPX bod (waypoint) \"{0}\" pridaný</string> <string name="add_waypoint_dialog_added">GPX bod (waypoint) \"{0}\" pridaný</string>
<string name="add_waypoint_dialog_title">Pridať waypoint do nahranej GPX stopy</string> <string name="add_waypoint_dialog_title">Pridať waypoint do nahranej GPX stopy</string>
<string name="amenity_type_administrative">Administratíva</string> <string name="amenity_type_administrative">Administratíva</string>
@ -419,7 +419,7 @@
<string name="download_type_to_filter">sem zadajte čo chcete nájsť</string> <string name="download_type_to_filter">sem zadajte čo chcete nájsť</string>
<string name="use_high_res_maps">Mapa s vysokým rozlíšením</string> <string name="use_high_res_maps">Mapa s vysokým rozlíšením</string>
<string name="use_high_res_maps_descr">Nerozťahovať (a nerozmazať) mapové dlaždice na obrazovkách s vysokou hustotou bodov.</string> <string name="use_high_res_maps_descr">Nerozťahovať (a nerozmazať) mapové dlaždice na obrazovkách s vysokou hustotou bodov.</string>
<string name="unknown_location">Umiestnenie zatiaľ nenájdené.</string> <string name="unknown_location">Poloha zatiaľ nezistená.</string>
<string name="context_menu_item_search_transport">Hľadať hromadnú dopravu</string> <string name="context_menu_item_search_transport">Hľadať hromadnú dopravu</string>
<string name="transport_searching_transport">Hľadá sa preprava (bez cieľa):</string> <string name="transport_searching_transport">Hľadá sa preprava (bez cieľa):</string>
<string name="transport_searching_route">Hľadá sa preprava ({0} ako cieľ):</string> <string name="transport_searching_route">Hľadá sa preprava ({0} ako cieľ):</string>
@ -743,7 +743,7 @@
<string name="osmand_parking_add_event">Pridať pripomienku do aplikácie Kalendár</string> <string name="osmand_parking_add_event">Pridať pripomienku do aplikácie Kalendár</string>
<string name="osmand_parking_time_limit">Časovo obmedzené parkovanie</string> <string name="osmand_parking_time_limit">Časovo obmedzené parkovanie</string>
<string name="osmand_parking_time_no_limit">Časovo neobmedzené parkovanie</string> <string name="osmand_parking_time_no_limit">Časovo neobmedzené parkovanie</string>
<string name="osmand_parking_position_description">Umiestnenie vášho zaparkovaného vozidla. %1$s</string> <string name="osmand_parking_position_description">Poloha vášho zaparkovaného vozidla. %1$s</string>
<string name="osmand_parking_position_description_add">Vyzdvihnúť vozidlo o:</string> <string name="osmand_parking_position_description_add">Vyzdvihnúť vozidlo o:</string>
<string name="osmand_parking_pm">popoludní</string> <string name="osmand_parking_pm">popoludní</string>
<string name="osmand_parking_am">dopoludnia</string> <string name="osmand_parking_am">dopoludnia</string>
@ -754,7 +754,7 @@
<string name="context_menu_item_add_parking_point">Označiť ako parkovacie miesto</string> <string name="context_menu_item_add_parking_point">Označiť ako parkovacie miesto</string>
<string name="context_menu_item_delete_parking_point">Odstrániť parkovaciu značku</string> <string name="context_menu_item_delete_parking_point">Odstrániť parkovaciu značku</string>
<string name="starting_point_too_far">Východzí bod je príliš ďaleko od najbližšej cesty.</string> <string name="starting_point_too_far">Východzí bod je príliš ďaleko od najbližšej cesty.</string>
<string name="shared_location">Zdieľané umiestnenie</string> <string name="shared_location">Zdieľaná poloha</string>
<string name="global_app_allocated_memory_descr">Pridelená pamäť %1$s MB (Android limit %2$s MB, Dalvik %3$s MB).</string> <string name="global_app_allocated_memory_descr">Pridelená pamäť %1$s MB (Android limit %2$s MB, Dalvik %3$s MB).</string>
<string name="global_app_allocated_memory">Pridelená pamäť</string> <string name="global_app_allocated_memory">Pridelená pamäť</string>
<string name="native_app_allocated_memory_descr">Celková natívna pamäť pridelená aplikácii %1$s MB (Dalvik %2$s MB, iné %3$s MB). <string name="native_app_allocated_memory_descr">Celková natívna pamäť pridelená aplikácii %1$s MB (Dalvik %2$s MB, iné %3$s MB).
@ -886,7 +886,7 @@
\n \n
\nGlobálne údaje (medzi 70° severne a 70° južne) sú založené na meraní SRTM (Shuttle Radar Topography Mission) a ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), zobrazovacieho nástroja na palube Terra, vlajkového satelitu NASA Earth Observing System. ASTER je kooperatívne úsilie medzi NASA, Japonským ministerstvom hospodárstva, obchodu a priemyslu (METI) a Japonských vesmírnych systémov (J-spacesystems).</string> \nGlobálne údaje (medzi 70° severne a 70° južne) sú založené na meraní SRTM (Shuttle Radar Topography Mission) a ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), zobrazovacieho nástroja na palube Terra, vlajkového satelitu NASA Earth Observing System. ASTER je kooperatívne úsilie medzi NASA, Japonským ministerstvom hospodárstva, obchodu a priemyslu (METI) a Japonských vesmírnych systémov (J-spacesystems).</string>
<string name="map_widget_distancemeasurement">Meranie vzdialenosti</string> <string name="map_widget_distancemeasurement">Meranie vzdialenosti</string>
<string name="audionotes_location_not_defined">Stlačte \"Použiť umiestnenie…\" pre pridanie poznámky k polohe.</string> <string name="audionotes_location_not_defined">Stlačte \"Použiť polohu…\" pre pridanie poznámky k polohe.</string>
<string name="map_widget_audionotes">Zvukové poznámky</string> <string name="map_widget_audionotes">Zvukové poznámky</string>
<string name="audionotes_plugin_description">Vytvárajte obrazové/zvukové/video poznámky počas výletu, buď tlačidlom na mape alebo v kontextovom menu polohy na mape.</string> <string name="audionotes_plugin_description">Vytvárajte obrazové/zvukové/video poznámky počas výletu, buď tlačidlom na mape alebo v kontextovom menu polohy na mape.</string>
<string name="audionotes_plugin_name">Audio/video poznámky</string> <string name="audionotes_plugin_name">Audio/video poznámky</string>
@ -1393,7 +1393,9 @@
\n \n
\nTento pohľad môže byť vypnutý jeho deaktivovaním tu alebo zmenou hodnoty v \"Štýl vykresľovania\" v \"Nastaviť mapu\".</string> \nTento pohľad môže byť vypnutý jeho deaktivovaním tu alebo zmenou hodnoty v \"Štýl vykresľovania\" v \"Nastaviť mapu\".</string>
<string name="plugin_touringview_name">Cestovný mapový pohľad</string> <string name="plugin_touringview_name">Cestovný mapový pohľad</string>
<string name="location_on_map">Umiestnenie:\n Šírka %1$s\n Dĺžka %2$s</string> <string name="location_on_map">Poloha:
\n Šírka %1$s
\n Dĺžka %2$s</string>
<string name="watch">Zobraziť</string> <string name="watch">Zobraziť</string>
<string name="days_behind">dní pozadu</string> <string name="days_behind">dní pozadu</string>
<string name="rename_failed">Premenovanie zlyhalo.</string> <string name="rename_failed">Premenovanie zlyhalo.</string>
@ -2632,7 +2634,7 @@
<string name="touring_view_renderer">Cestovný pohľad</string> <string name="touring_view_renderer">Cestovný pohľad</string>
<string name="nautical_renderer">Námorný</string> <string name="nautical_renderer">Námorný</string>
<string name="copy_location_name">Kopírovať názov bodu/umiestnenia</string> <string name="copy_location_name">Kopírovať názov bodu/umiestnenia</string>
<string name="toast_empty_name_error">Nepomenované umiestnenie</string> <string name="toast_empty_name_error">Nepomenované miesto</string>
<string name="show_closed_notes">Zobraziť uzavreté poznámky</string> <string name="show_closed_notes">Zobraziť uzavreté poznámky</string>
<string name="switch_osm_notes_visibility_desc">Zobraziť/skryť OSM poznámky na mape.</string> <string name="switch_osm_notes_visibility_desc">Zobraziť/skryť OSM poznámky na mape.</string>
<string name="gpx_file_desc">GPX - vhodné na export do JOSM a iných editorov OSM.</string> <string name="gpx_file_desc">GPX - vhodné na export do JOSM a iných editorov OSM.</string>
@ -3890,17 +3892,18 @@
\n \n
\n • Zlepšená viditeľnosť bodov pre bicykle. \n • Zlepšená viditeľnosť bodov pre bicykle.
\n \n
\n • Stopy je teraz možné aktivovať, pre kontextové menu sú základnými údajmi. \n • Stopy je teraz možné aktivovať a majú kontextové menu so základnými údajmi.
\n \n
\n • Zlepšený algoritmus vyhľadávania \n • Zlepšený algoritmus vyhľadávania
\n \n
\n • Zlepšené možnosti nasledovania stopy v navigácii \n • Zlepšené možnosti nasledovania stopy v navigácii
\n \n
\n • Opravené problému s importom a exportom nastavení profilov \n • Opravené problémy s importom a exportom nastavení profilov
\n \n
\n</string> \n</string>
<string name="sort_last_modified">Naposledy zmenené</string> <string name="sort_last_modified">Naposledy zmenené</string>
<string name="sort_name_descending">Názov: Z A</string> <string name="sort_name_descending">Názov: Z A</string>
<string name="sort_name_ascending">Názov: A Z</string> <string name="sort_name_ascending">Názov: A Z</string>
<string name="start_finish_icons">Ikony štartu/cieľa</string> <string name="start_finish_icons">Ikony štartu/cieľa</string>
<string name="contour_lines_thanks">Ďakujeme za zakúpenie modulu \'Vrstevnice\'</string>
</resources> </resources>

View file

@ -1740,8 +1740,8 @@
<string name="poi_seamark_clearance_width">ıklık genişliği</string> <string name="poi_seamark_clearance_width">ıklık genişliği</string>
<string name="poi_payment_coins_0_5">0.5$ madeni para</string> <string name="poi_payment_coins_0_5">0.5$ madeni para</string>
<string name="poi_service_dealer">Satıcı</string> <string name="poi_service_dealer">Satıcı</string>
<string name="poi_service_repair">Onarım</string> <string name="poi_service_repair">Tamir</string>
<string name="poi_service_repair_no">Onarım yok</string> <string name="poi_service_repair_no">Tamir yok</string>
<string name="poi_service_electrical">Elektrikli araçların tamiri</string> <string name="poi_service_electrical">Elektrikli araçların tamiri</string>
<string name="poi_motorcycle_repair">Motosiklet tamiri</string> <string name="poi_motorcycle_repair">Motosiklet tamiri</string>
<string name="poi_self_service_yes">Evet</string> <string name="poi_self_service_yes">Evet</string>
@ -2043,8 +2043,8 @@
<string name="poi_service_bicycle_rental_no">Bisiklet kiralama: hayır</string> <string name="poi_service_bicycle_rental_no">Bisiklet kiralama: hayır</string>
<string name="poi_service_bicycle_pump_yes">Pompa</string> <string name="poi_service_bicycle_pump_yes">Pompa</string>
<string name="poi_service_bicycle_pump_no">Bisiklet pompası: hayır</string> <string name="poi_service_bicycle_pump_no">Bisiklet pompası: hayır</string>
<string name="poi_service_bicycle_diy_yes">Kendin-Yap onarım için araçlar</string> <string name="poi_service_bicycle_diy_yes">Kendin-Yap tamir için araçlar</string>
<string name="poi_service_bicycle_diy_no">Kendin-Yap onarım için bisiklet araçları: hayır</string> <string name="poi_service_bicycle_diy_no">Kendin-Yap tamir için bisiklet araçları: hayır</string>
<string name="poi_service_bicycle_cleaning_yes">Temizleme</string> <string name="poi_service_bicycle_cleaning_yes">Temizleme</string>
<string name="poi_service_bicycle_cleaning_no">Bisiklet temizleme: hayır</string> <string name="poi_service_bicycle_cleaning_no">Bisiklet temizleme: hayır</string>
<string name="poi_service_bicycle_chaintool_yes">Zincir aleti</string> <string name="poi_service_bicycle_chaintool_yes">Zincir aleti</string>
@ -2477,7 +2477,7 @@
<string name="poi_conveying_yes">Taşıma: evet</string> <string name="poi_conveying_yes">Taşıma: evet</string>
<string name="poi_aerialway_length">Uzunluk</string> <string name="poi_aerialway_length">Uzunluk</string>
<string name="poi_fireworks">Havai fişek mağazası</string> <string name="poi_fireworks">Havai fişek mağazası</string>
<string name="poi_craft_electronics_repair">Elektronik onarımı</string> <string name="poi_craft_electronics_repair">Elektronik tamiri</string>
<string name="poi_hackerspace">Hackerspace</string> <string name="poi_hackerspace">Hackerspace</string>
<string name="poi_fitness_station">Fitness istasyonu</string> <string name="poi_fitness_station">Fitness istasyonu</string>
<string name="poi_building_type_pyramid">Bina türü: piramit</string> <string name="poi_building_type_pyramid">Bina türü: piramit</string>
@ -2882,4 +2882,37 @@
<string name="poi_boat_motorboat_rental_yes">Motorlu tekneler: evet</string> <string name="poi_boat_motorboat_rental_yes">Motorlu tekneler: evet</string>
<string name="poi_boat_rental">Tekne kiralama</string> <string name="poi_boat_rental">Tekne kiralama</string>
<string name="poi_location_entrance">Konum: giriş</string> <string name="poi_location_entrance">Konum: giriş</string>
<string name="poi_forestry_allotment">Yön tabelası: orman tahsisi</string>
<string name="poi_forestry_compartment">Yön tabelası: orman bölmesi</string>
<string name="poi_motorcycle_clothes_no">Motosiklet giysileri: hayır</string>
<string name="poi_motorcycle_clothes_yes">Motosiklet giysileri</string>
<string name="poi_motorcycle_tyres_no">Lastik: hayır</string>
<string name="poi_motorcycle_tyres_yes">Lastik</string>
<string name="poi_motorcycle_parts_no">Yedek parça: hayır</string>
<string name="poi_motorcycle_parts_yes">Yedek parça</string>
<string name="poi_motorcycle_repair_no">Tamir: hayır</string>
<string name="poi_motorcycle_repair_yes">Tamir</string>
<string name="poi_motorcycle_rental_no">Kiralama: hayır</string>
<string name="poi_motorcycle_rental_yes">Kiralama</string>
<string name="poi_music_school">Müzik okulu</string>
<string name="poi_drink_wine_served">Şarap: servis</string>
<string name="poi_party">Parti malzemeleri</string>
<string name="poi_cuisine_cajun">Cajun</string>
<string name="poi_cuisine_tex_mex">Tex-mex</string>
<string name="poi_cuisine_baguette">Baget</string>
<string name="poi_cuisine_waffle">Waffle</string>
<string name="poi_cuisine_crepes">Krep</string>
<string name="poi_cuisine_falafel">Falafel</string>
<string name="poi_cuisine_tacos">Taco</string>
<string name="poi_cuisine_canteen">Kantin</string>
<string name="poi_cuisine_savory_pancakes">Tuzlu krep</string>
<string name="poi_cuisine_fried_chicken">Kızarmış tavuk</string>
<string name="poi_cuisine_couscous">Kuskus</string>
<string name="poi_cuisine_bakery">Fırın</string>
<string name="poi_cuisine_bistro">Bistro</string>
<string name="poi_cuisine_fried_food">Kızarmış yiyecekler</string>
<string name="poi_cuisine_frozen_yogurt">Dondurulmuş yoğurt</string>
<string name="poi_cuisine_deli">Şarküteri</string>
<string name="poi_cuisine_pie">Turta</string>
<string name="poi_cuisine_tea_shop">Çay dükkanı</string>
</resources> </resources>

View file

@ -3861,4 +3861,12 @@
<string name="sort_name_ascending">İsim: A Z</string> <string name="sort_name_ascending">İsim: A Z</string>
<string name="start_finish_icons">Başlangıç/bitiş simgeleri</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="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> </resources>

View file

@ -3901,4 +3901,12 @@
<string name="sort_name_ascending">名稱A Z</string> <string name="sort_name_ascending">名稱A Z</string>
<string name="start_finish_icons">開始/結束圖示</string> <string name="start_finish_icons">開始/結束圖示</string>
<string name="contour_lines_thanks">感謝您購買 \'Contour lines\'</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> </resources>

View file

@ -11,6 +11,8 @@
Thx - Hardy Thx - Hardy
--> -->
<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> <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>
<string name="osm_live_payment_desc_hw">Subscription charged per selected period. Cancel it on AppGallery at any time.</string> <string name="osm_live_payment_desc_hw">Subscription charged per selected period. Cancel it on AppGallery at any time.</string>
<string name="contour_lines_thanks">Thank you for purchasing \'Contour lines\'</string> <string name="contour_lines_thanks">Thank you for purchasing \'Contour lines\'</string>

View file

@ -52,6 +52,9 @@ import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_CONFIGURE_PROFILE_ID;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SWITCH_PROFILE_ID;
public class ContextMenuAdapter { public class ContextMenuAdapter {
private static final Log LOG = PlatformUtil.getLog(ContextMenuAdapter.class); private static final Log LOG = PlatformUtil.getLog(ContextMenuAdapter.class);
@ -133,6 +136,15 @@ public class ContextMenuAdapter {
Collections.sort(items, new Comparator<ContextMenuItem>() { Collections.sort(items, new Comparator<ContextMenuItem>() {
@Override @Override
public int compare(ContextMenuItem item1, ContextMenuItem item2) { 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())) {
return 1;
}
if (DRAWER_CONFIGURE_PROFILE_ID.equals(item1.getId())) {
return -1;
}
int order1 = item1.getOrder(); int order1 = item1.getOrder();
int order2 = item2.getOrder(); int order2 = item2.getOrder();
if (order1 < order2) { if (order1 < order2) {

View file

@ -0,0 +1,43 @@
package net.osmand.plus.mapcontextmenu.builders.cards;
import android.view.View;
import net.osmand.AndroidNetworkUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.activities.MapActivity;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import org.json.JSONException;
import org.json.JSONObject;
public class IPFSImageCard extends ImageCard {
private static final String BASE_URL = "https://test.openplacereviews.org/api/ipfs/image-ipfs?cid=";
private static final Log LOG = PlatformUtil.getLog(IPFSImageCard.class);
public IPFSImageCard(MapActivity mapActivity, JSONObject imageObject) {
super(mapActivity, imageObject);
String cid = "";
try {
cid = (String) imageObject.get("cid");
} catch (JSONException e) {
LOG.error(e);
}
url = BASE_URL + cid;
imageHiresUrl = BASE_URL + cid;
imageUrl = BASE_URL + cid;
if (!Algorithms.isEmpty(getUrl())) {
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
openUrl(getMapActivity(), getMyApplication(), getTitle(), getUrl(),
isExternalLink() || Algorithms.isEmpty(getImageHiresUrl()),
!Algorithms.isEmpty(getImageHiresUrl()));
}
};
if (!Algorithms.isEmpty(buttonText)) {
onButtonClickListener = onClickListener;
} else {
this.onClickListener = onClickListener;
}
}
}
}

View file

@ -2,7 +2,9 @@ package net.osmand.plus.mapcontextmenu.builders.cards;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.PointF;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.TrafficStats;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
@ -14,21 +16,28 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatButton; import androidx.appcompat.widget.AppCompatButton;
import net.osmand.AndroidNetworkUtils; import com.google.gson.JsonArray;
import net.osmand.AndroidUtils; import com.google.gson.JsonObject;
import net.osmand.Location; import net.osmand.*;
import net.osmand.data.Amenity; import net.osmand.data.Amenity;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.RotatedTileBox;
import net.osmand.osm.PoiType;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.Version; import net.osmand.plus.Version;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.SettingsBaseActivity;
import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.plus.mapillary.MapillaryContributeCard; import net.osmand.plus.mapillary.MapillaryContributeCard;
import net.osmand.plus.mapillary.MapillaryImageCard; import net.osmand.plus.mapillary.MapillaryImageCard;
import net.osmand.plus.osmedit.OsmBugsLayer;
import net.osmand.plus.views.layers.ContextMenuLayer;
import net.osmand.plus.wikimedia.WikiImageHelper; import net.osmand.plus.wikimedia.WikiImageHelper;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -36,18 +45,16 @@ import org.json.JSONObject;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.LinkedHashMap; import static net.osmand.data.FavouritePoint.DEFAULT_BACKGROUND_TYPE;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public abstract class ImageCard extends AbstractCard { public abstract class ImageCard extends AbstractCard {
public static String TYPE_MAPILLARY_PHOTO = "mapillary-photo"; public static String TYPE_MAPILLARY_PHOTO = "mapillary-photo";
public static String TYPE_MAPILLARY_CONTRIBUTE = "mapillary-contribute"; public static String TYPE_MAPILLARY_CONTRIBUTE = "mapillary-contribute";
private static final Log LOG = PlatformUtil.getLog(ImageCard.class);
protected String type; protected String type;
// Image location // Image location
protected LatLon location; protected LatLon location;
@ -191,6 +198,14 @@ public abstract class ImageCard extends AbstractCard {
return imageCard; return imageCard;
} }
private static ImageCard createCardOpr(MapActivity mapActivity, JSONObject imageObject) {
ImageCard imageCard = null;
if (imageObject.has("cid")) {
imageCard = new IPFSImageCard(mapActivity, imageObject);
}
return imageCard;
}
public double getCa() { public double getCa() {
return ca; return ca;
} }
@ -403,6 +418,7 @@ public abstract class ImageCard extends AbstractCard {
private Map<String, String> params; private Map<String, String> params;
private GetImageCardsListener listener; private GetImageCardsListener listener;
private List<ImageCard> result; private List<ImageCard> result;
private static final int GET_IMAGE_CARD_THREAD_ID = 10104;
public interface GetImageCardsListener { public interface GetImageCardsListener {
void onPostProcess(List<ImageCard> cardList); void onPostProcess(List<ImageCard> cardList);
@ -411,7 +427,7 @@ public abstract class ImageCard extends AbstractCard {
} }
public GetImageCardsTask(@NonNull MapActivity mapActivity, LatLon latLon, public GetImageCardsTask(@NonNull MapActivity mapActivity, LatLon latLon,
@Nullable Map<String, String> params, GetImageCardsListener listener) { @Nullable Map<String, String> params, GetImageCardsListener listener) {
this.mapActivity = mapActivity; this.mapActivity = mapActivity;
this.app = mapActivity.getMyApplication(); this.app = mapActivity.getMyApplication();
this.latLon = latLon; this.latLon = latLon;
@ -421,7 +437,14 @@ public abstract class ImageCard extends AbstractCard {
@Override @Override
protected List<ImageCard> doInBackground(Void... params) { protected List<ImageCard> doInBackground(Void... params) {
TrafficStats.setThreadStatsTag(GET_IMAGE_CARD_THREAD_ID);
List<ImageCard> result = new ArrayList<>(); List<ImageCard> result = new ArrayList<>();
Object o = mapActivity.getMapLayers().getContextMenuLayer().getSelectedObject();
if (o instanceof Amenity) {
Amenity am = (Amenity) o;
long amenityId = am.getId() >> 1;
getPicturesForPlace(result, amenityId);
}
try { try {
final Map<String, String> pms = new LinkedHashMap<>(); final Map<String, String> pms = new LinkedHashMap<>();
pms.put("lat", "" + (float) latLon.getLatitude()); pms.put("lat", "" + (float) latLon.getLatitude());
@ -482,6 +505,35 @@ public abstract class ImageCard extends AbstractCard {
return result; return result;
} }
private void getPicturesForPlace(List<ImageCard> result, long l) {
String url = "https://test.openplacereviews.org/api/objects-by-index?type=opr.place&index=osmid&limit=1&key=" + l;
String response = AndroidNetworkUtils.sendRequest(app, url, Collections.<String, String>emptyMap(),
"Requesting location images...", false, false);
try {
if (!Algorithms.isEmpty(response)) {
JSONArray obj = new JSONObject(response).getJSONArray("objects");
JSONArray images = ((JSONObject) ((JSONObject) obj.get(0)).get("images")).getJSONArray("outdoor");
if (images.length() > 0) {
for (int i = 0; i < images.length(); i++) {
try {
JSONObject imageObject = (JSONObject) images.get(i);
if (imageObject != JSONObject.NULL) {
ImageCard imageCard = ImageCard.createCardOpr(mapActivity, imageObject);
if (imageCard != null) {
result.add(imageCard);
}
}
} catch (JSONException e) {
LOG.error(e);
}
}
}
}
} catch (Exception e) {
LOG.error(e);
}
}
@Override @Override
protected void onPostExecute(List<ImageCard> cardList) { protected void onPostExecute(List<ImageCard> cardList) {
result = cardList; result = cardList;

View file

@ -131,7 +131,14 @@ public class LiveMonitoringHelper {
} }
public void sendData(LiveMonitoringData data) { public void sendData(LiveMonitoringData data) {
String urlStr = getLiveUrl(data); String baseUrl = app.getSettings().LIVE_MONITORING_URL.get();
String urlStr;
try {
urlStr = getLiveUrl(baseUrl, data);
} catch (IllegalArgumentException e) {
log.error("Could not construct live url from base url: " + baseUrl, e);
return;
}
try { try {
// Parse the URL and let the URI constructor handle proper encoding of special characters such as spaces // Parse the URL and let the URI constructor handle proper encoding of special characters such as spaces
URL url = new URL(urlStr); URL url = new URL(urlStr);
@ -172,12 +179,11 @@ public class LiveMonitoringHelper {
} }
} }
private String getLiveUrl(LiveMonitoringData data) { private String getLiveUrl(String baseUrl, LiveMonitoringData data) {
String st = app.getSettings().LIVE_MONITORING_URL.get();
List<String> prm = new ArrayList<String>(); List<String> prm = new ArrayList<String>();
int maxLen = 0; int maxLen = 0;
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
boolean b = st.contains("{"+i+"}"); boolean b = baseUrl.contains("{"+i+"}");
if(b) { if(b) {
maxLen = i; maxLen = i;
} }
@ -210,6 +216,6 @@ public class LiveMonitoringHelper {
break; break;
} }
} }
return MessageFormat.format(st, prm.toArray()); return MessageFormat.format(baseUrl, prm.toArray());
} }
} }

View file

@ -8,6 +8,7 @@ import android.graphics.Typeface;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference; import android.preference.ListPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener; import android.preference.Preference.OnPreferenceClickListener;
@ -23,11 +24,11 @@ import android.view.Window;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndTaskManager.OsmAndTaskRunnable; import net.osmand.plus.OsmAndTaskManager.OsmAndTaskRunnable;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
@ -35,6 +36,8 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.SavingTrackHelper; import net.osmand.plus.activities.SavingTrackHelper;
import net.osmand.plus.activities.SettingsBaseActivity; import net.osmand.plus.activities.SettingsBaseActivity;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.util.Algorithms;
import java.util.Map; import java.util.Map;
@ -172,8 +175,20 @@ public class SettingsMonitoringActivity extends SettingsBaseActivity {
cat.setTitle(R.string.live_monitoring_m); cat.setTitle(R.string.live_monitoring_m);
grp.addPreference(cat); grp.addPreference(cat);
cat.addPreference(createEditTextPreference(settings.LIVE_MONITORING_URL, R.string.live_monitoring_url, EditTextPreference urlPreference = createEditTextPreference(settings.LIVE_MONITORING_URL, R.string.live_monitoring_url,
R.string.live_monitoring_url_descr)); R.string.live_monitoring_url_descr);
urlPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (Algorithms.isValidMessageFormat((String) newValue)) {
return SettingsMonitoringActivity.super.onPreferenceChange(preference, newValue);
} else {
Toast.makeText(SettingsMonitoringActivity.this, R.string.wrong_format, Toast.LENGTH_SHORT).show();
return false;
}
}
});
cat.addPreference(urlPreference);
final CheckBoxPreference liveMonitoring = createCheckBoxPreference(settings.LIVE_MONITORING, R.string.live_monitoring_m, final CheckBoxPreference liveMonitoring = createCheckBoxPreference(settings.LIVE_MONITORING, R.string.live_monitoring_m,
R.string.live_monitoring_m_descr); R.string.live_monitoring_m_descr);
cat.addPreference(liveMonitoring); cat.addPreference(liveMonitoring);

View file

@ -54,6 +54,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.APP_PROFILES_ID; import static net.osmand.aidlapi.OsmAndCustomizationConstants.APP_PROFILES_ID;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_CONFIGURE_PROFILE_ID;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SWITCH_PROFILE_ID;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_MORE_ID; import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_MORE_ID;
import static net.osmand.plus.settings.fragments.RearrangeMenuItemsAdapter.AdapterItemType.BUTTON; import static net.osmand.plus.settings.fragments.RearrangeMenuItemsAdapter.AdapterItemType.BUTTON;
import static net.osmand.plus.settings.fragments.RearrangeMenuItemsAdapter.AdapterItemType.DESCRIPTION; import static net.osmand.plus.settings.fragments.RearrangeMenuItemsAdapter.AdapterItemType.DESCRIPTION;
@ -186,7 +188,9 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
public static List<ContextMenuItem> getCustomizableDefaultItems(List<ContextMenuItem> defItems) { public static List<ContextMenuItem> getCustomizableDefaultItems(List<ContextMenuItem> defItems) {
List<ContextMenuItem> items = new ArrayList<>(); List<ContextMenuItem> items = new ArrayList<>();
for (ContextMenuItem item : defItems) { for (ContextMenuItem item : defItems) {
if (!APP_PROFILES_ID.equals(item.getId())) { if (!APP_PROFILES_ID.equals(item.getId())
&& !DRAWER_CONFIGURE_PROFILE_ID.equals(item.getId())
&& !DRAWER_SWITCH_PROFILE_ID.equals(item.getId())) {
items.add(item); items.add(item);
} }
} }

View file

@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -12,11 +13,12 @@ import androidx.preference.Preference;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.preferences.EditTextPreferenceEx; import net.osmand.plus.settings.preferences.EditTextPreferenceEx;
import net.osmand.plus.settings.preferences.ListPreferenceEx; import net.osmand.plus.settings.preferences.ListPreferenceEx;
import net.osmand.util.Algorithms;
import static net.osmand.plus.UiUtilities.CompoundButtonType.TOOLBAR; import static net.osmand.plus.UiUtilities.CompoundButtonType.TOOLBAR;
import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.MAX_INTERVAL_TO_SEND_MINUTES; import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.MAX_INTERVAL_TO_SEND_MINUTES;
@ -60,6 +62,19 @@ public class LiveMonitoringFragment extends BaseSettingsFragment {
updateToolbarSwitch(); updateToolbarSwitch();
} }
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference.getKey().equals(settings.LIVE_MONITORING_URL.getId())) {
if (Algorithms.isValidMessageFormat((String) newValue)) {
return super.onPreferenceChange(preference, newValue);
} else {
Toast.makeText(app, R.string.wrong_format, Toast.LENGTH_SHORT).show();
return false;
}
}
return super.onPreferenceChange(preference, newValue);
}
private void updateToolbarSwitch() { private void updateToolbarSwitch() {
View view = getView(); View view = getView();
if (view == null) { if (view == null) {

View file

@ -135,6 +135,7 @@ public class SearchRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView
} }
private LayerDrawable getPlaceholder(boolean history) { private LayerDrawable getPlaceholder(boolean history) {
int colorDefault = ContextCompat.getColor(app, R.color.icon_color_default_light);
LayerDrawable res = (LayerDrawable) AppCompatResources.getDrawable( LayerDrawable res = (LayerDrawable) AppCompatResources.getDrawable(
app, history app, history
? R.drawable.wikivoyage_search_history_placeholder ? R.drawable.wikivoyage_search_history_placeholder
@ -145,6 +146,8 @@ public class SearchRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView
history ? R.drawable.ic_action_history : R.drawable.ic_action_placeholder_city, history ? R.drawable.ic_action_history : R.drawable.ic_action_placeholder_city,
R.color.icon_color_default_light R.color.icon_color_default_light
)); ));
} else {
res.setTint(colorDefault);
} }
return res; return res;
} }