Merge branch 'master' into continue_settings_refactor
This commit is contained in:
commit
e7fc000036
29 changed files with 391 additions and 70 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;
|
||||
|
|
|
@ -942,4 +942,20 @@ public class Algorithms {
|
|||
}
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -267,4 +267,8 @@
|
|||
<string name="last_response_duration">Letzte Antwort: vor %1$s</string>
|
||||
<string name="duration_ago">vor %1$s</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>
|
|
@ -268,4 +268,8 @@
|
|||
<string name="last_response_duration">Ùrtima risposta: %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_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>
|
|
@ -110,7 +110,7 @@ private const val PROXY_ENABLED = "proxy_enabled"
|
|||
private const val PROXY_PREFERENCES_KEY = "proxy_preferences"
|
||||
|
||||
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
|
||||
|
||||
|
|
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>
|
|
@ -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,6 @@
|
|||
<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>
|
||||
</resources>
|
|
@ -1625,7 +1625,7 @@ POIの更新は利用できません</string>
|
|||
<string name="rendering_value_walkingRoutesScopeOSMC_name">所属ネットワークに応じたカラー変更</string>
|
||||
<string name="rendering_value_walkingRoutesOSMC_name">OSMCのハイキングシンボルカラー</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="download_live_updates">ライブ更新</string>
|
||||
<string name="we_really_care_about_your_opinion">ユーザーからの意見やフィードバックを大切にしています。</string>
|
||||
|
@ -2496,7 +2496,7 @@ POIの更新は利用できません</string>
|
|||
<string name="this_year">今年</string>
|
||||
<string name="move_all_to_history">全て履歴に移動</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="exit_without_saving">保存せずに終了しますか?</string>
|
||||
<string name="line">線</string>
|
||||
|
|
|
@ -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>
|
||||
|
@ -202,7 +202,7 @@
|
|||
<string name="shared_string_continue">Продолжить</string>
|
||||
<string name="shared_string_pause">Пауза</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="gpx_logging_no_data">Нет данных</string>
|
||||
<string name="save_track_min_speed">Минимальная скорость для записи</string>
|
||||
|
@ -726,14 +726,14 @@
|
|||
<string name="sd_mounted_ro">Карта памяти доступна только для чтения.
|
||||
\nТеперь можно только просматривать предварительно загруженную карту, а не загружать новые области.</string>
|
||||
<string name="unzipping_file">Файл распаковывается…</string>
|
||||
<string name="route_tr">Направо ⇒</string>
|
||||
<string name="route_tshr">Резко направо ⇘</string>
|
||||
<string name="route_tslr">Плавно направо ⇗</string>
|
||||
<string name="route_tl">Налево ⇐</string>
|
||||
<string name="route_tshl">Резко налево ⇙</string>
|
||||
<string name="route_tsll">Плавно налево ⇖</string>
|
||||
<string name="route_tu">Выполните разворот ⇓</string>
|
||||
<string name="route_head">Двигайтесь прямо ⇑</string>
|
||||
<string name="route_tr">Направо</string>
|
||||
<string name="route_tshr">Резко направо</string>
|
||||
<string name="route_tslr">Плавно направо</string>
|
||||
<string name="route_tl">Налево</string>
|
||||
<string name="route_tshl">Резко налево</string>
|
||||
<string name="route_tsll">Плавно налево</string>
|
||||
<string name="route_tu">Выполните разворот</string>
|
||||
<string name="route_head">Двигайтесь прямо</string>
|
||||
<string name="first_time_continue">Продолжить</string>
|
||||
<string name="first_time_download">Загрузить детальные карты регионов</string>
|
||||
<string name="search_poi_location">Поиск сигнала…</string>
|
||||
|
@ -1024,8 +1024,8 @@
|
|||
<string name="rendering_attr_hmRendered_description">Показывать больше деталей на карте.</string>
|
||||
<string name="rendering_attr_hmRendered_name">Больше деталей</string>
|
||||
<string name="route_roundabout">Круговое движение, %1$d съезд</string>
|
||||
<string name="route_kl">Держитесь левее ⇖</string>
|
||||
<string name="route_kr">Держитесь правее ⇗</string>
|
||||
<string name="route_kl">Держитесь левее</string>
|
||||
<string name="route_kr">Держитесь правее</string>
|
||||
<string name="asap">Скорее</string>
|
||||
<string name="gpxup_public">Общедоступный</string>
|
||||
<string name="gpxup_identifiable">Идентифицируемый</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>
|
||||
|
@ -1539,7 +1539,7 @@
|
|||
<string name="rendering_attr_subwayMode_name">Линии метро</string>
|
||||
<string name="continue_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="arrival_distance_factor_early">Раннее</string>
|
||||
<string name="arrival_distance_factor_normally">По умолчанию</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>
|
||||
|
@ -3790,7 +3789,7 @@
|
|||
<string name="use_volume_buttons_as_zoom_descr">Изменение масштаба карты кнопками громкости.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Масштабирование кнопками громкости</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="quick_action_remove_next_destination_descr">Следующая точка маршрута будет удалена. Если это конечный пункт, навигация завершится.</string>
|
||||
<string name="plugin_wikipedia_description">Информация о достопримечательностях из Википедии. Ваш карманный офлайн-путеводитель — просто включите плагин Википедии и читайте об объектах вокруг вас.</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>
|
|
@ -3904,4 +3904,13 @@
|
|||
<string name="sort_name_descending">Nùmene: Z – A</string>
|
||||
<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>
|
|
@ -224,7 +224,7 @@
|
|||
<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="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_address">Adresa…</string>
|
||||
<string name="search_position_favorites">Obľúbené miesta…</string>
|
||||
|
@ -325,11 +325,11 @@
|
|||
<string name="foot">ft</string>
|
||||
<string name="mile_per_hour">mph</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_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="context_menu_item_share_location">Zdieľať umiestnenie</string>
|
||||
<string name="send_location">Poslať polohu</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_title">Pridať waypoint do nahranej GPX stopy</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="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="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="transport_searching_transport">Hľadá sa preprava (bez cieľa):</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_time_limit">Časovo obmedzené 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_pm">popoludní</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_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="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">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).
|
||||
|
@ -886,7 +886,7 @@
|
|||
\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>
|
||||
<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="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>
|
||||
|
@ -1393,7 +1393,9 @@
|
|||
\n
|
||||
\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="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="days_behind">dní pozadu</string>
|
||||
<string name="rename_failed">Premenovanie zlyhalo.</string>
|
||||
|
@ -2632,7 +2634,7 @@
|
|||
<string name="touring_view_renderer">Cestovný pohľad</string>
|
||||
<string name="nautical_renderer">Námorný</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="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>
|
||||
|
@ -3890,17 +3892,18 @@
|
|||
\n
|
||||
\n • Zlepšená viditeľnosť bodov pre bicykle.
|
||||
\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 • Zlepšený algoritmus vyhľadávania
|
||||
\n
|
||||
\n • Zlepšené možnosti nasledovania stopy v navigácii
|
||||
\n
|
||||
\n • Opravené problému s importom a exportom nastavení profilov
|
||||
\n • Opravené problémy s importom a exportom nastavení profilov
|
||||
\n
|
||||
\n</string>
|
||||
<string name="sort_last_modified">Naposledy zmenené</string>
|
||||
<string name="sort_name_descending">Názov: Z – A</string>
|
||||
<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>
|
||||
</resources>
|
|
@ -1740,8 +1740,8 @@
|
|||
<string name="poi_seamark_clearance_width">Açıklık genişliği</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_repair">Onarım</string>
|
||||
<string name="poi_service_repair_no">Onarım yok</string>
|
||||
<string name="poi_service_repair">Tamir</string>
|
||||
<string name="poi_service_repair_no">Tamir yok</string>
|
||||
<string name="poi_service_electrical">Elektrikli araçların tamiri</string>
|
||||
<string name="poi_motorcycle_repair">Motosiklet tamiri</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_pump_yes">Pompa</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_no">Kendin-Yap onarım için bisiklet araçları: hayır</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 tamir için bisiklet araçları: hayır</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_chaintool_yes">Zincir aleti</string>
|
||||
|
@ -2477,7 +2477,7 @@
|
|||
<string name="poi_conveying_yes">Taşıma: evet</string>
|
||||
<string name="poi_aerialway_length">Uzunluk</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_fitness_station">Fitness istasyonu</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_rental">Tekne kiralama</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>
|
|
@ -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>
|
|
@ -11,6 +11,8 @@
|
|||
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_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>
|
||||
|
|
|
@ -52,6 +52,9 @@ import java.util.LinkedHashSet;
|
|||
import java.util.List;
|
||||
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 {
|
||||
private static final Log LOG = PlatformUtil.getLog(ContextMenuAdapter.class);
|
||||
|
||||
|
@ -133,6 +136,15 @@ 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())) {
|
||||
return 1;
|
||||
}
|
||||
if (DRAWER_CONFIGURE_PROFILE_ID.equals(item1.getId())) {
|
||||
return -1;
|
||||
}
|
||||
int order1 = item1.getOrder();
|
||||
int order2 = item2.getOrder();
|
||||
if (order1 < order2) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,9 @@ package net.osmand.plus.mapcontextmenu.builders.cards;
|
|||
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.TrafficStats;
|
||||
import android.os.AsyncTask;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
|
@ -14,21 +16,28 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatButton;
|
||||
|
||||
import net.osmand.AndroidNetworkUtils;
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.Location;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import net.osmand.*;
|
||||
import net.osmand.data.Amenity;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.osm.PoiType;
|
||||
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.activities.SettingsBaseActivity;
|
||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||
import net.osmand.plus.mapillary.MapillaryContributeCard;
|
||||
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.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
@ -36,18 +45,16 @@ import org.json.JSONObject;
|
|||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
import static net.osmand.data.FavouritePoint.DEFAULT_BACKGROUND_TYPE;
|
||||
|
||||
public abstract class ImageCard extends AbstractCard {
|
||||
|
||||
public static String TYPE_MAPILLARY_PHOTO = "mapillary-photo";
|
||||
public static String TYPE_MAPILLARY_CONTRIBUTE = "mapillary-contribute";
|
||||
|
||||
private static final Log LOG = PlatformUtil.getLog(ImageCard.class);
|
||||
protected String type;
|
||||
// Image location
|
||||
protected LatLon location;
|
||||
|
@ -191,6 +198,14 @@ public abstract class ImageCard extends AbstractCard {
|
|||
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() {
|
||||
return ca;
|
||||
}
|
||||
|
@ -403,6 +418,7 @@ public abstract class ImageCard extends AbstractCard {
|
|||
private Map<String, String> params;
|
||||
private GetImageCardsListener listener;
|
||||
private List<ImageCard> result;
|
||||
private static final int GET_IMAGE_CARD_THREAD_ID = 10104;
|
||||
|
||||
public interface GetImageCardsListener {
|
||||
void onPostProcess(List<ImageCard> cardList);
|
||||
|
@ -411,7 +427,7 @@ public abstract class ImageCard extends AbstractCard {
|
|||
}
|
||||
|
||||
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.app = mapActivity.getMyApplication();
|
||||
this.latLon = latLon;
|
||||
|
@ -421,7 +437,14 @@ public abstract class ImageCard extends AbstractCard {
|
|||
|
||||
@Override
|
||||
protected List<ImageCard> doInBackground(Void... params) {
|
||||
TrafficStats.setThreadStatsTag(GET_IMAGE_CARD_THREAD_ID);
|
||||
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 {
|
||||
final Map<String, String> pms = new LinkedHashMap<>();
|
||||
pms.put("lat", "" + (float) latLon.getLatitude());
|
||||
|
@ -482,6 +505,35 @@ public abstract class ImageCard extends AbstractCard {
|
|||
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
|
||||
protected void onPostExecute(List<ImageCard> cardList) {
|
||||
result = cardList;
|
||||
|
|
|
@ -131,7 +131,14 @@ public class LiveMonitoringHelper {
|
|||
}
|
||||
|
||||
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 {
|
||||
// Parse the URL and let the URI constructor handle proper encoding of special characters such as spaces
|
||||
URL url = new URL(urlStr);
|
||||
|
@ -172,12 +179,11 @@ public class LiveMonitoringHelper {
|
|||
}
|
||||
}
|
||||
|
||||
private String getLiveUrl(LiveMonitoringData data) {
|
||||
String st = app.getSettings().LIVE_MONITORING_URL.get();
|
||||
private String getLiveUrl(String baseUrl, LiveMonitoringData data) {
|
||||
List<String> prm = new ArrayList<String>();
|
||||
int maxLen = 0;
|
||||
for (int i = 0; i < 7; i++) {
|
||||
boolean b = st.contains("{"+i+"}");
|
||||
boolean b = baseUrl.contains("{"+i+"}");
|
||||
if(b) {
|
||||
maxLen = i;
|
||||
}
|
||||
|
@ -210,6 +216,6 @@ public class LiveMonitoringHelper {
|
|||
break;
|
||||
}
|
||||
}
|
||||
return MessageFormat.format(st, prm.toArray());
|
||||
return MessageFormat.format(baseUrl, prm.toArray());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.graphics.Typeface;
|
|||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
|
@ -23,11 +24,11 @@ import android.view.Window;
|
|||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmAndTaskManager.OsmAndTaskRunnable;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
@ -35,6 +36,8 @@ import net.osmand.plus.R;
|
|||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
import net.osmand.plus.activities.SettingsBaseActivity;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -172,8 +175,20 @@ public class SettingsMonitoringActivity extends SettingsBaseActivity {
|
|||
cat.setTitle(R.string.live_monitoring_m);
|
||||
grp.addPreference(cat);
|
||||
|
||||
cat.addPreference(createEditTextPreference(settings.LIVE_MONITORING_URL, R.string.live_monitoring_url,
|
||||
R.string.live_monitoring_url_descr));
|
||||
EditTextPreference urlPreference = createEditTextPreference(settings.LIVE_MONITORING_URL, R.string.live_monitoring_url,
|
||||
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,
|
||||
R.string.live_monitoring_m_descr);
|
||||
cat.addPreference(liveMonitoring);
|
||||
|
|
|
@ -54,6 +54,8 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
|
||||
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.plus.settings.fragments.RearrangeMenuItemsAdapter.AdapterItemType.BUTTON;
|
||||
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) {
|
||||
List<ContextMenuItem> items = new ArrayList<>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
@ -12,11 +13,12 @@ import androidx.preference.Preference;
|
|||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.R;
|
||||
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.ListPreferenceEx;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import static net.osmand.plus.UiUtilities.CompoundButtonType.TOOLBAR;
|
||||
import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.MAX_INTERVAL_TO_SEND_MINUTES;
|
||||
|
@ -60,6 +62,19 @@ public class LiveMonitoringFragment extends BaseSettingsFragment {
|
|||
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() {
|
||||
View view = getView();
|
||||
if (view == null) {
|
||||
|
|
|
@ -135,6 +135,7 @@ public class SearchRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
}
|
||||
|
||||
private LayerDrawable getPlaceholder(boolean history) {
|
||||
int colorDefault = ContextCompat.getColor(app, R.color.icon_color_default_light);
|
||||
LayerDrawable res = (LayerDrawable) AppCompatResources.getDrawable(
|
||||
app, history
|
||||
? 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,
|
||||
R.color.icon_color_default_light
|
||||
));
|
||||
} else {
|
||||
res.setTint(colorDefault);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue