Merge pull request #10164 from osmandapp/master

update test branch
This commit is contained in:
Hardy 2020-11-11 20:44:20 +01:00 committed by GitHub
commit 864da5da79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
100 changed files with 2139 additions and 969 deletions

View file

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/bottom_sheet_content_margin"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:letterSpacing="@dimen/text_button_letter_spacing"
android:text="@string/send_files_to_openstreetmap"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_medium" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/message_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/bottom_sheet_content_margin"
android:hint="@string/shared_string_description"
app:boxStrokeColor="@color/osmand_orange"
app:hintTextColor="@color/text_color_secondary_light">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/message_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/tags_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/bottom_sheet_content_margin"
android:hint="@string/gpx_tags_txt"
app:boxStrokeColor="@color/osmand_orange"
app:helperText="@string/enter_text_separated"
app:helperTextEnabled="true"
app:hintTextColor="@color/text_color_secondary_light">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/tags_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:text="osmand" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/dashboard_divider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<net.osmand.plus.widgets.TextViewEx
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:letterSpacing="@dimen/description_letter_spacing"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/context_menu_first_line_top_margin"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
android:text="@string/gpx_visibility_txt"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_regular" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/visibility_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:letterSpacing="@dimen/description_letter_spacing"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/context_menu_first_line_top_margin"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_medium"
tools:text="@string/gpx_visibility_txt" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/description_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:orientation="horizontal"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
tools:itemCount="4"
tools:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/point_editor_icon_category_item"
tools:orientation="horizontal" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/visibility_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="@dimen/description_letter_spacing"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/context_menu_first_line_top_margin"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_regular" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/dashboard_divider" />
<LinearLayout
android:id="@+id/account_block"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/context_menu_buttons_bottom_height"
tools:background="?android:attr/selectableItemBackground">
<androidx.appcompat.widget.AppCompatImageView
android:id="@android:id/icon"
android:layout_width="@dimen/standard_icon_size"
android:layout_height="@dimen/standard_icon_size"
android:layout_gravity="center"
android:layout_marginStart="@dimen/content_padding"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/bottom_sheet_icon_margin"
android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/bottom_sheet_icon_margin_large"
android:layout_marginBottom="@dimen/bottom_sheet_icon_margin"
android:tint="@color/active_buttons_and_links_text_disabled_light"
osmand:srcCompat="@drawable/ic_action_user_account" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/account_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:letterSpacing="@dimen/text_button_letter_spacing"
android:singleLine="true"
android:text="@string/login_account"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_regular" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/user_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="@dimen/description_letter_spacing"
android:maxLines="4"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_regular" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TextView
android:id="@+id/DescriptionTextTop"
android:textSize="@dimen/default_list_text_size_large"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:gravity="center_horizontal"
android:text="@string/send_files_to_osm"
android:layout_marginStart="5dp" />
<TableRow android:layout_width="fill_parent">
<TextView
android:id="@+id/TextView"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/shared_string_description"
android:layout_marginStart="5dp" />
<EditText
android:id="@+id/memory_size"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:minLines="3"
android:text=""
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp" />
</TableRow>
<TableRow android:layout_width="fill_parent">
<TextView
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/gpx_tags_txt"
android:layout_marginStart="5dp" />
<EditText
android:id="@+id/TagsText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="osmand"
android:layout_marginEnd="5dp"
android:layout_marginStart="5dp" />
</TableRow>
<TableRow android:layout_width="fill_parent">
<TextView
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/gpx_visibility_txt"
android:layout_marginStart="5dp" />
<Spinner
android:id="@+id/Visibility"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginEnd="5dp"
android:layout_marginStart="5dp" />
</TableRow>
</TableLayout>

File diff suppressed because it is too large Load diff

View file

@ -3117,7 +3117,7 @@
<string name="utm_format_descr">يستخدم أوسماند تنسيق UTM وهو مشابه ولكن غير مطابق لتنسيق UTM الناتو.</string>
<string name="shared_string_example">مثال</string>
<string name="navigate_point_format_utm">معيار الإحداثيات</string>
<string name="navigate_point_format_olc">فتح رمز الموقع</string>
<string name="navigate_point_format_olc">رمز الموقع المفتوح (OLC)</string>
<string name="coordinates_format_info">سيتم تطبيق التنسيق المحدد في كل أنحاء التطبيق.</string>
<string name="pref_selected_by_default_for_profiles">يتم تحديد هذا الاعداد بشكل افتراضي للأوضاع: %s</string>
<string name="change_default_settings">تغيير الإعدادات</string>
@ -3658,15 +3658,15 @@
<string name="osmand_purchases_item">مشتريات أوسماند</string>
<string name="legend_item_description">دليل رموز الخريطة.</string>
<string name="navigation_profiles_item">أوضاع الملاحة</string>
<string name="release_3_7">• خرائط جديدة للمنحدرات غير المتصلة بالإنترنت
<string name="release_3_7">• خرائط جديدة للتضاريس توضح المنحدرات من دون الحاجة للاتصال بالإنترنت
\n
\n • التخصيص الكامل للمفضلات ونقاط الطرق GPX - الألوان المخصصة والأيقونات والأشكال
\n
\n • تخصيص ترتيب العناصر في قائمة السياق ، تكوين الخريطة ، درج
\n
\n • ويكيبيديا كطبقة منفصلة في تكوين الخريطة ، حدد اللغات المطلوبة فقط
\n  عرض ويكيبيديا كطبقة منفصلة في تكوين الخريطة ، حدد اللغات المطلوبة فقط
\n
\n • إنشاء مرشح / خرائط POI الخاصة بك مع مرونة تامة
\n • إنشاء مرشح / خرائط للمعالم الخاصة بك مع مرونة تامة
\n
\n • تمت إضافة خيارات لاستعادة إعدادات الأوضاع المخصصة
\n
@ -3674,7 +3674,7 @@
\n
\n • إصلاح أحجام واجهة المستخدم على الأجهزة اللوحية
\n
\n • إصلاح الخلل مع RTL
\n • إصلاح الخلل مع اللغات التي تكتب من اليمين
\n
\n</string>
<string name="shared_string_resume">إستئناف</string>
@ -3683,7 +3683,7 @@
<string name="quick_action_transport_show">إظهار وسائل النقل العام</string>
<string name="quick_action_show_hide_transport">إظهار/إخفاء وسائل النقل العام</string>
<string name="quick_action_transport_descr">زر لإظهار أو إخفاء وسائل النقل العام على الخريطة.</string>
<string name="create_edit_poi">إنشاء /تحرير POI</string>
<string name="create_edit_poi">إنشاء /تحرير موضع مكان</string>
<string name="parking_positions">مكان الموقف</string>
<string name="add_edit_favorite">إضافة / تحرير المفضلة</string>
<string name="reset_deafult_order">استعادة ترتيب العناصر الافتراضية</string>
@ -3940,4 +3940,13 @@
<string name="subscription_expired_title">انتهت صلاحية اشتراك OsmAnd Live</string>
<string name="subscription_paused_title">تم إيقاف اشتراك OsmAnd Live مؤقتًا</string>
<string name="subscription_on_hold_title">اشتراك OsmAnd Live معلق</string>
<string name="login_open_street_map">تسجيل الدخول إلى خريطة الشارع المفتوح</string>
<string name="login_open_street_map_org">تسجيل الدخول إلى OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">تسجيل الخروج</string>
<string name="open_street_map_login_mode">تحتاج إلى تسجيل الدخول لرفع التغييرات الجديدة أو المعدلة.
\n
\nيمكنك تسجيل الدخول باستخدام طريقة التفويض الآمنة أو استخدام تسجيل الدخول وكلمة المرور.</string>
<string name="use_login_password">استخدام تسجيل الدخول وكلمة المرور</string>
<string name="login_account">الحساب</string>
<string name="user_login">تسجيل الدخول</string>
</resources>

View file

@ -562,7 +562,7 @@
<string name="global_app_settings">Агульныя налады праграмы</string>
<string name="user_name">Вашае імя карыстальніка OSM</string>
<string name="open_street_map_login_descr">Патрэбна для падачы ў openstreetmap.org.</string>
<string name="user_password">Ваш пароль OSM</string>
<string name="user_password">Пароль</string>
<string name="osmand_service">Фонавы рэжым</string>
<string name="osmand_service_descr">OsmAnd працуе ў фоне з адключаным экранам.</string>
<string name="download_files_not_enough_space">Не стае вольнага месца для спампоўвання %1$s МБ (вольна: %2$s).</string>
@ -905,7 +905,7 @@
<string name="uploading">Запампоўванне…</string>
<string name="search_nothing_found">Нічога не знойдзена</string>
<string name="searching">Пошук…</string>
<string name="searching_address">Пошук адрасу</string>
<string name="searching_address">Пошук адраса</string>
<string name="search_osm_nominatim">Сеціўны пошук праз OSM Nominatim</string>
<string name="hint_search_online">Сеціўны пошук: горад, вуліца, дом</string>
<string name="search_offline_address">Пазасеціўны пошук</string>
@ -3478,7 +3478,7 @@
<string name="photo_notes">Фотанататкі</string>
<string name="route_recalculation">Пераразлік маршруту</string>
<string name="login_and_pass">Імя карыстальніка і пароль</string>
<string name="plugin_global_prefs_info">Гэтыя алады распаўсюджваюцца на ўсе профілі.</string>
<string name="plugin_global_prefs_info">Гэтыя налады ўбудовы распаўсюджваюцца на ўсе профілі</string>
<string name="osm_editing">Рэдагаванне OSM</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Значок будзе паказвацца падчас навігацыі або руху.</string>

View file

@ -3654,4 +3654,78 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="keep_screen_on">Nechat obrazovku zapnutou</string>
<string name="keep_screen_off">Nechat obrazovku vypnutou</string>
<string name="route_between_points_warning_desc">Dále, pro použití této možnosti připojte vaši stopu k nejbližší povolené cestě s některým z vašich navigačních profilů.</string>
<string name="use_system_screen_timeout">Použít systémový časový limit obrazovky</string>
<string name="reset_to_default_category_button_promo">\"Obnovit do základního nastavení\" nastaví výchozí pořadí.</string>
<string name="copy_coordinates">Kopírovat souřadnice</string>
<string name="release_3_6">• Profily: nyní můžete změnit pořadí, nastavit ikonu pro mapu, změnit všechna nastavení základních profilů a resetovat je zpět do výchozího stavu
\n
\n • V navigaci přibylo číslo výjezdu
\n
\n • Přepracovaná nastavení modulů
\n
\n • Přepracovaná obrazovka nastavení pro rychlý přístup ke všem profilům
\n
\n • Přidaná možnost kopírovat nastavení z jiného profilu
\n
\n • Přidaná možnost skrýt nebo změnit pořadí kategorií bodů zájmu při hledání
\n
\n • Zpřesněné umístění ikon bodů zájmu na mapě
\n
\n • Přidané údaje o východu a západu slunce v nastavení mapy
\n
\n • Přidané ikony Domov a Práce na mapě
\n
\n • Přidaná podpora pro víceřádkové popisy v nastavení
\n
\n • Přidaná správná transliterace v mapě Japonska
\n
\n • Přidaná mapa Antarktidy
\n
\n</string>
<string name="clear_recorded_data">Vymazat zaznamenaná data</string>
<string name="routing_profile_direct_to">Přímo k bodu</string>
<string name="ui_customization_description">Nastavte počet položek v \"Úvodním panelu\", \"Nastavení mapy\" a \"Kontextovém menu\".
\n
\nVypněte nepoužívané moduly, abyste skryli jejich ovládací prvky. %1$s.</string>
<string name="ui_customization_short_descr">Položky v úvodním panelu a kontextovém menu</string>
<string name="ui_customization">Nastavení uživatelského rozhraní</string>
<string name="shared_string_drawer">Úvodní panel</string>
<string name="quick_action_transport_hide">Skrýt veřejnou dopravu</string>
<string name="quick_action_transport_show">Zobrazit veřejnou dopravu</string>
<string name="quick_action_show_hide_transport">Zobrazit/skrýt veřejnou dopravu</string>
<string name="quick_action_transport_descr">Tlačítko pro zobrazení nebo skrytí veřejné dopravy na mapě.</string>
<string name="create_edit_poi">Vytvořit / upravit bod zájmu</string>
<string name="parking_positions">Parkovací místa</string>
<string name="add_edit_favorite">Přidat / upravit oblíbený bod</string>
<string name="reset_deafult_order">Obnovit výchozí pořadí položek</string>
<string name="back_to_editing">Zpět k úpravám</string>
<string name="quick_action_switch_profile_descr">Tlačítko akce přepne mezi zvolenými profily.</string>
<string name="shared_string_add_profile">Přidat profil</string>
<string name="change_application_profile">Změnit profil aplikace</string>
<string name="profiles_for_action_not_found">Nebyly nalezeny žádné vhodné profily.</string>
<string name="index_item_world_basemap_detailed">Přehledová mapa světa (detailní)</string>
<string name="unsupported_type_error">Nepodporovaný typ</string>
<string name="width_limit_description">Zadejte šířku svého vozidla, na trase mohou být omezení pro široká vozidla.</string>
<string name="height_limit_description">Zadejte výšku svého vozidla, na trase mohou být omezení pro vysoká vozidla.</string>
<string name="weight_limit_description">Zadejte hmotnost svého vozidla, na trase mohou být omezení pro těžká vozidla.</string>
<string name="lenght_limit_description">Zadejte délku svého vozidla, na trase mohou být omezení pro dlouhá vozidla.</string>
<string name="gpx_parse_error">GPX nemá správný tvar pro OsmAnd, kontaktujte prosím podporu pro další přezkoumání.</string>
<string name="shared_string_always">Vždy</string>
<string name="screen_control">Ovládání obrazovky</string>
<string name="system_screen_timeout_descr">Vypne obrazovku po uplynutí systémového časového limitu.</string>
<string name="system_screen_timeout">Použít systémový časový limit obrazovky</string>
<string name="turn_screen_on_descr">Zvolte možnosti probuzení obrazovky (při zamykání zařízení se ujistěte, že je OsmAnd na popředí):</string>
<string name="turn_screen_on_navigation_instructions_descr">Každý navigační pokyn zapne obrazovku.</string>
<string name="turn_screen_on_navigation_instructions">Navigační pokyny</string>
<string name="turn_screen_on_power_button_disabled">Vypnuto. Vyžaduje \"Nechat obrazovku zapnutou\" pod \"Časový limit obrazovky po probuzení\".</string>
<string name="turn_screen_on_power_button_descr">Stisknutím tlačítka napájení zapnete obrazovku s aplikací OsmAnd na zamčené obrazovce.</string>
<string name="turn_screen_on_power_button">Tlačítko napájení</string>
<string name="turn_screen_on_proximity_sensor">Senzor přiblížení</string>
<string name="turn_screen_on_wake_time_descr">Zvolte časový limit vypnutí obrazovky po probuzení (\"%1$s\" znamená bez časového limitu.)</string>
<string name="message_you_need_add_two_points_to_show_graphs">Musíte přidat aspoň dva body.</string>
<string name="manage_subscription">Spravovat předplatné</string>
<string name="subscription_payment_issue_title">S vaším předplatným je problém. Klikněte na tlačítko pro přechod do nastavení předplatného v Google Play a opravte způsob platby.</string>
<string name="subscription_expired_title">Předplatné OsmAnd Live skončilo</string>
<string name="subscription_paused_title">Předplatné OsmAnd Live je pozastaveno</string>
<string name="subscription_on_hold_title">Předplatné OsmAnd Live je zablokované</string>
</resources>

View file

@ -3951,4 +3951,10 @@
<string name="icon_group_symbols">Symbole</string>
<string name="shared_string_local_maps">Lokale Karten</string>
<string name="icon_group_special">Spezial</string>
<string name="message_you_need_add_two_points_to_show_graphs">Sie müssen mindestens zwei Punkte hinzufügen.</string>
<string name="manage_subscription">Abonnement verwalten</string>
<string name="subscription_payment_issue_title">Es gibt ein Problem mit Ihrem Abonnement. Klicken Sie auf die Schaltfläche, um zu den Einstellungen des Google Play Abonnements zu gelangen und Ihre Zahlungsmethode zu überprüfen.</string>
<string name="subscription_expired_title">OsmAnd Live Abonnement ist abgelaufen</string>
<string name="subscription_paused_title">OsmAnd Live Abonnement wurde ausgesetzt</string>
<string name="subscription_on_hold_title">OsmAnd Live Abonnement liegt auf Eis</string>
</resources>

View file

@ -3946,4 +3946,10 @@
<string name="navigate_point_mgrs">MGRS</string>
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="mgrs_format_descr">OsmAnd uzas MGRS, kiu estas simila al la formo UTM NATO.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Aldonu almenaŭ du punktojn.</string>
<string name="manage_subscription">Administri abonon</string>
<string name="subscription_payment_issue_title">Okazis problemo pri via abono. Premu la butonon por iri al agordoj pri abonoj ĉe Google Play por korekti vian pagmanieron.</string>
<string name="subscription_expired_title">Abono OsmAnd Live senvalidiĝis</string>
<string name="subscription_paused_title">Abono OsmAnd Live estas paŭziigita</string>
<string name="subscription_on_hold_title">Abono OsmAnd Live estas ĉesigita</string>
</resources>

View file

@ -1033,7 +1033,7 @@
<string name="global_app_settings">Ajustes globales de la aplicación</string>
<string name="user_name">Nombre de usuario de OSM</string>
<string name="open_street_map_login_descr">Necesario para envíos a OpenStreetMap.org.</string>
<string name="user_password">Contraseña de OSM</string>
<string name="user_password">Contraseña</string>
<string name="osmand_service">Modo reposo</string>
<string name="osmand_service_descr">OsmAnd se ejecuta en modo reposo con la pantalla apagada.</string>
<string name="download_files_not_enough_space">Sin espacio suficiente para descargar %1$s MB (disponible: %2$s).</string>
@ -3430,7 +3430,7 @@
<string name="route_recalculation">Recálculo de la ruta</string>
<string name="accessibility_announce">Anunciar</string>
<string name="login_and_pass">Nombre de usuario y contraseña</string>
<string name="plugin_global_prefs_info">Estos ajustes se aplican a todos los perfiles.</string>
<string name="plugin_global_prefs_info">Los ajustes de este complemento son globales y se aplican a todos los perfiles</string>
<string name="osm_editing">Edición de OSM</string>
<string name="osm_edits_view_descr">Puedes ver todas tus ediciones no subidas o errores de OSM en «%1$s». Los puntos subidos no se muestran en OsmAnd.</string>
<string name="app_mode_osm">OSM</string>
@ -3952,4 +3952,18 @@
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="mgrs_format_descr">OsmAnd usa MGRS, similar al formato UTM de la OTAN.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Debes añadir al menos dos puntos.</string>
<string name="manage_subscription">Gestionar suscripción</string>
<string name="subscription_payment_issue_title">Hay un problema con la suscripción. Pulsa el botón para ir a los ajustes de la suscripción de Google Play y corregir el método de pago.</string>
<string name="subscription_expired_title">La suscripción a OsmAnd Live ha caducado</string>
<string name="subscription_paused_title">La suscripción a OsmAnd Live se ha pausado</string>
<string name="subscription_on_hold_title">La suscripción a OsmAnd Live está en espera</string>
<string name="sing_in_with_open_street_map">Ingresar con OpenStreetMap</string>
<string name="login_open_street_map">Iniciar sesión en OpenStreetMap</string>
<string name="login_open_street_map_org">Ingresar a OpenStreetMap.org</string>
<string name="open_street_map_login_mode">Necesitas iniciar sesión para subir cambios nuevos o modificados.
\n
\nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña.</string>
<string name="use_login_password">Utilice nombre de usuario y contraseña</string>
<string name="login_account">Cuenta</string>
<string name="user_login">Iniciar sesión</string>
</resources>

View file

@ -1943,7 +1943,7 @@
<string name="general_settings_descr">Seadista ekraan ja rakenduse üldised seaded.</string>
<string name="global_app_settings">Rakenduse üldised seaded</string>
<string name="user_name">Sinu OSM kasutajanimi</string>
<string name="user_password">Sinu OSM salasõna</string>
<string name="user_password">Salasõna</string>
<string name="osmand_service">Taustarežiim</string>
<string name="osmand_service_descr">OsmAnd töötab taustal, ekraan välja lülitatud.</string>
<string name="download_files_question_space">Kas laeme alla {0} fail(i)\?
@ -3358,7 +3358,7 @@
<string name="route_recalculation">Teekonna ümberarvutamine</string>
<string name="accessibility_announce">Teata</string>
<string name="login_and_pass">Kasutajanimi ja salasõna</string>
<string name="plugin_global_prefs_info">Need seaded rakenduvad kõikidele profiilidele.</string>
<string name="plugin_global_prefs_info">Need seaded on üldised ja rakenduvad kõikidele profiilidele</string>
<string name="osm_editing">OSM\'i andmete muutmine</string>
<string name="osm_edits_view_descr">Kõiki üleslaadimata muudatusi või OSM vigu saad vaadata menüüs %1$s. Üleslaaditud punkte OsmAnd ei kuva.</string>
<string name="app_mode_osm">OSM</string>
@ -3798,4 +3798,17 @@
<string name="mgrs_format_descr">OsmAnd kasutab MGRS-vormingut, mis on sarnane NATO UTM-vormingule.</string>
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="navigate_point_mgrs">MGRS</string>
<string name="message_you_need_add_two_points_to_show_graphs">Graafiku joonistamiseks pead lisama vähemalt kaks punkti.</string>
<string name="subscription_on_hold_title">OsmAnd Live tellimus on ootel</string>
<string name="subscription_paused_title">OsmAnd Live tellimus on peatatud</string>
<string name="subscription_expired_title">OsmAnd Live tellimus on aegunud</string>
<string name="subscription_payment_issue_title">Sinu tellimusega on üks pisikene segadus. Selleks et Google Play seadistuses makseviisi parandada, palun klõpsi seda nuppu.</string>
<string name="manage_subscription">Halda tellimusi</string>
<string name="sing_in_with_open_street_map">Logi sisse OpenStreetMapi kasutajakontoga</string>
<string name="user_login">Kasutajanimi</string>
<string name="use_login_password">Pruugi kasutajanime ja salasõna</string>
<string name="open_street_map_login_mode">Täienduste või muudatuste üleslaadimiseks pead sisse logima.
\n
\nSa võid selleks kasutada mõnd turvalust OAuth võimalust või oma kasutajanime ning salasõna.</string>
<string name="login_account">Kasutajakonto</string>
</resources>

View file

@ -1494,4 +1494,32 @@
<string name="poi_embassy">Suurlähetystö</string>
<string name="poi_silo">Siilo</string>
<string name="poi_windmill">Tuulimylly</string>
<string name="poi_railway_level_crossing">Tasoristeys</string>
<string name="poi_railway_crossing">Rautatien ylitys</string>
<string name="poi_crossing_traffic_signals">Liikennevaloilla</string>
<string name="poi_highway_crossing">Valtatien ylitys</string>
<string name="poi_building_type_pyramid">Rakennuksen tyyppi: pyramidi</string>
<string name="poi_building_type_shrine">Rakennuksen tyyppi: pyhäkkö</string>
<string name="poi_building_type_synagogue">Rakennuksen tyyppi: synagoga</string>
<string name="poi_building_type_basilica">Rakennuksen tyyppi: basilika</string>
<string name="poi_building_type_monastery">Rakennuksen tyyppi: luostari</string>
<string name="poi_building_type_cathedral">Rakennuksen tyyppi: katedraali</string>
<string name="poi_building_type_temple">Rakennuksen tyyppi: temppeli</string>
<string name="poi_building_type_mosque">Rakennuksen tyyppi: moskeija</string>
<string name="poi_building_type_chapel">Rakennuksen tyyppi: kappeli</string>
<string name="poi_building_type_church">Rakennuksen tyyppi: kirkko</string>
<string name="poi_building">Rakennus</string>
<string name="poi_viewpoint">Näköalapaikka</string>
<string name="poi_charging_station">Latausasema</string>
<string name="poi_marina">Venesatama</string>
<string name="poi_firepit">Nuotiopaikka</string>
<string name="poi_leisure_track">Urheilurata</string>
<string name="poi_dog_park">Koirapuisto</string>
<string name="poi_pitch">Urheilukenttä</string>
<string name="poi_religion_pagan">Pakanuus</string>
<string name="poi_religion_jain">Jainalaisuus</string>
<string name="poi_chalet">Alppimaja</string>
<string name="poi_guest_house">Vieras talo</string>
<string name="poi_lodging">Majapaikka</string>
<string name="poi_attraction_roller_coaster">Vuoristorata</string>
</resources>

View file

@ -174,7 +174,8 @@
<string name="open_street_map_login_descr">Tarvitaan openstreetmap.org ehdotuksia varten</string>
<string name="user_password">OSM salasanasi</string>
<string name="download_files_not_enough_space">Ei ole tarpeeksi tilaa jotta voitaisiin ladata %1$s MB (vapaana: %2$s).</string>
<string name="download_files_question_space">Lataa {0} tiedosto(a)\? {1} Mt (/ {2} Mt) käytetään.</string>
<string name="download_files_question_space">Lataa {0} tiedosto(a)\?
\n{1} Mt (/ {2} Mt) käytetään.</string>
<string name="delete_confirmation_msg">Poista %1$s?</string>
<string name="city_type_suburb">Lähiö</string>
<string name="city_type_hamlet">Kylä</string>
@ -315,7 +316,7 @@
<string name="error_calculating_route">Virhe reitin laskennassa</string>
<string name="new_route_calculated_dist">Uusi reitti laskettu, etäisyys</string>
<string name="arrived_at_destination">Olet saapunut perille.</string>
<string name="invalid_locations">Koordinaatit ovat virheelliset!</string>
<string name="invalid_locations">Virheelliset koordinaatit</string>
<string name="shared_string_close">Sulje</string>
<string name="loading_data">Ladataan tietoja…</string>
<string name="reading_indexes">Luetaan paikallista dataa…</string>
@ -510,7 +511,7 @@
<string name="local_index_installed">Paikallinen versio</string>
<string name="poi_remove_confirm_template">Poista {0} (lisää kommentti)?</string>
<string name="osb_comment_dialog_author">Tekijän nimi</string>
<string name="download_roads_only_item">"Tiet "</string>
<string name="download_roads_only_item">Vain tiet</string>
<string name="download_regular_maps">Tavalliset kartat</string>
<string name="no_buildings_found">Rakennuksia ei löytynyt.</string>
<string name="search_villages_and_postcodes">Etsi lisää paikkakuntia/postinumeroita</string>
@ -579,7 +580,7 @@
<string name="recording_description">Nauhoitus %1$s %2$s / %3$s</string>
<string name="destination_point">Kohde %1$s</string>
<string name="context_menu_item_destination_point">Valitse määränpääksi</string>
<string name="please_select_address">Valitse kaupunki tai katu ensin</string>
<string name="please_select_address">Aseta kaupunki tai katu ensin</string>
<string name="search_street_in_neighborhood_cities">Etsi katua lähikaupungeista</string>
<string name="intermediate_items_sort_by_distance">Lajittele ovelta ovelle</string>
<string name="local_osm_changes_backup_successful">OSM muutostiedosto luotiin onnistuneesti %1$s</string>
@ -608,8 +609,8 @@
<string name="driving_region_japan">Japani</string>
<string name="driving_region_us">Yhdysvallat</string>
<string name="driving_region_canada">Kanada</string>
<string name="driving_region_europe_asia">Eurooppa &amp; Aasia</string>
<string name="driving_region_uk">Iso Britannia, Intia, Australia ja vastaavat</string>
<string name="driving_region_europe_asia">Eurooppa, Aasia, Latinalainen Amerikka ja vastaavat</string>
<string name="driving_region_uk">Iso Britannia, Intia ja vastaavat</string>
<string name="amenity_type_seamark">Merimerkki</string>
<string name="app_modes_choose_descr">Valitse näkyvät profiilit.</string>
<string name="shared_string_is_open">Avoinna nyt</string>
@ -730,7 +731,7 @@
<string name="waypoint_visit_before">Käy ennen</string>
<string name="simulate_your_location">Simuloi sijaintisi</string>
<string name="short_location_on_map">Lev %1$s
Pit %2$s</string>
\nPit %2$s</string>
<string name="tips_and_tricks_descr">Usein kysytyt kysymykset, viimeaikaiset muutokset, ja muut.</string>
<string name="general_settings_2">Yleiset asetukset</string>
<string name="shared_string_ellipsis"></string>
@ -824,7 +825,7 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
<string name="route_calculation">Reitin laskenta</string>
<string name="gpx_no_tracks_title">Sinulla ei ole vielä yhtään GPX-tiedostoa</string>
<string name="gpx_no_tracks_title_folder">Voit myös lisätä GPX-tiedostoja hakemistoon</string>
<string name="gpx_add_track">Lisää jälki</string>
<string name="gpx_add_track">Lisää enemmän…</string>
<string name="shared_string_appearance">Ulkoasu</string>
<string name="trip_rec_notification_settings">Ota pikanauhoitus käyttöön</string>
<string name="trip_rec_notification_settings_desc">Näytä ilmoitus, josta voi aloittaa matkan tallennuksen painamalla Nauhoita-näppäintä.</string>
@ -1008,7 +1009,9 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
\n- hallita ryhmiä ja laitteita henkilökohtaisella hallintapaneelilla websivustolla.</string>
<string name="osm_user_stat">Muokkauksia %1$s, sijoitus %2$s, muokkaukset yhteensä %3$s</string>
<string name="osm_editors_ranking">OSM-muokkaajien sijoitukset</string>
<string name="download_files_error_not_enough_space">Tilaa ei ole tarpeeksi! {3} Mt tarvitaan väliaikaisesti, {1} Mt pysyvästi. (Vain {2} Mt on käytettävissä.)</string>
<string name="download_files_error_not_enough_space">Tilaa ei ole tarpeeksi!
\n{3} Mt tarvitaan väliaikaisesti, {1} Mt pysyvästi.
\n(Vain {2} Mt on käytettävissä.)</string>
<string name="download_files_question_space_with_temp">Lataa {0} tiedosto(a)?
Tallennnustilaa käytetään {3} Mt hetkellisesti, {1} Mt pysyvästi.
(Vapaata tilaa on {2} Mt.)</string>
@ -1058,7 +1061,7 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
<string name="av_video_quality_high">Korkein laatu</string>
<string name="av_video_quality">Video tulosteen laatu</string>
<string name="av_video_quality_descr">Valitse videon laatu.</string>
<string name="av_audio_format">"Ääni tulosteen laatu"</string>
<string name="av_audio_format">Ääni tulosteen laatu</string>
<string name="av_audio_format_descr">Valitse äänilähdön muoto.</string>
<string name="please_specify_poi_type_only_from_list">Ole hyvä ja valitse oikea KP tyyppi tai ohita se.</string>
<string name="access_from_map_description">Valikkonäppäin käynnistää hallintapaneelin eikä valikkoa</string>
@ -1179,8 +1182,8 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
<string name="osm_settings">OSM muokkaus</string>
<string name="share_note">Jaa huomautus</string>
<string name="location_on_map">Sijainti:
Lat %1$s
Lon %2$s</string>
\nLev %1$s
\nPit %2$s</string>
<string name="watch">Katso</string>
<string name="online_map">Online kartta</string>
<string name="rendering_attr_pisteRoutes_name">Laskettelurinteet</string>
@ -1388,10 +1391,10 @@ Maailmanlaajuiset tiedot (välillä 70 astetta pohjoista ja 70 astetta eteläist
<string name="gpx_timespan">AIkajänne: %1$s</string>
<string name="gpx_timemoving">Aika liikkeessä: %1$s</string>
<string name="gpx_selection_segment_title">Segmentti</string>
<string name="gpx_selection_number_of_points">" %1$s pistettä"</string>
<string name="gpx_selection_number_of_points">%1$s pistettä</string>
<string name="gpx_selection_point">Piste %1$s</string>
<string name="gpx_selection_route_points">%1$s
Reitin pisteet %2$s</string>
\nReitin pisteet %2$s</string>
<string name="gpx_selection_points">%1$s
\nPisteet</string>
<string name="gpx_selection_track">%1$s
@ -1444,10 +1447,10 @@ Reitin pisteet %2$s</string>
<string name="osmand_play_title_30_chars">OsmAnd kartat &amp; suunnistus</string>
<string name="osmand_plus_play_title_30_chars">OsmAnd+ kartat ja suunnistus</string>
<string name="bg_service_sleep_mode_off">Suorita
sovellutus taustalla</string>
\nsovellus taustalla</string>
<string name="map_widget_renderer">Karttatyyli</string>
<string name="bg_service_sleep_mode_on">Pysäytä
sovellutuksen suoritus taustalta</string>
\nsovelluksen suoritus taustalta</string>
<string name="map_widget_mini_route">Pienoisreittikartta</string>
<string name="bg_service_interval">Aseta virkistyksen aikaväli:</string>
<string name="select_animate_speedup">Aseta nopeus reitin simuloinnille</string>
@ -1472,7 +1475,7 @@ Reitin pisteet %2$s</string>
<string name="arrival_distance_factor_early">Aikaisin</string>
<string name="arrival_distance_factor_normally">Normaali</string>
<string name="arrival_distance_factor_late">Myöhään</string>
<string name="arrival_distance_factor_at_last">"Viime metreillä"</string>
<string name="arrival_distance_factor_at_last">Viime metreillä</string>
<string name="arrival_distance">Saapumisilmoitus</string>
<string name="arrival_distance_descr">Kuinka aikaisin haluat saapumisilmoituksen?</string>
<string name="rendering_out_of_memory">Ei tarpeeksi prosessointimuistia valitun alueen näyttämiseksi</string>
@ -1537,7 +1540,7 @@ Reitin pisteet %2$s</string>
<string name="app_modes_choose">Sovellusprofiilit</string>
<string name="app_mode_hiking">Retkeily</string>
<string name="local_osm_changes_delete_all_confirm">Olet poistamassa %1$d OSM muutosta. Oletko varma?</string>
<string name="route_descr_map_location">"Kartta: "</string>
<string name="route_descr_map_location">Kartta:</string>
<string name="route_descr_lat_lon">Pit %1$.3f, lev %2$.3f</string>
<string name="route_descr_destination">Päämäärä</string>
<string name="route_via">Kautta:</string>
@ -1645,12 +1648,12 @@ Reitin pisteet %2$s</string>
<string name="loading_smth">Ladataan %1$s…</string>
<string name="map_widget_plain_time">Aika nyt</string>
<string name="shared_string_waypoint">Väyläpiste</string>
<string name="gpx_info_waypoints">"Väyläpisteet: %1$s "</string>
<string name="gpx_info_distance">"Etäisyys: %1$s (%2$s pistettä) "</string>
<string name="gpx_info_start_time">"Lähtöaika: %1$tF, %1$tT "</string>
<string name="gpx_info_end_time">"Saapumisaika: %1$tF, %1$tT "</string>
<string name="gpx_info_average_speed">"Keskinopeus: %1$s "</string>
<string name="gpx_info_maximum_speed">"Maksiminopeus: %1$s "</string>
<string name="gpx_info_waypoints">Väyläpisteet: %1$s</string>
<string name="gpx_info_distance">Etäisyys: %1$s (%2$s pistettä)</string>
<string name="gpx_info_start_time">Lähtöaika: %1$tF, %1$tT</string>
<string name="gpx_info_end_time">Saapumisaika: %1$tF, %1$tT</string>
<string name="gpx_info_average_speed">Keskinopeus: %1$s</string>
<string name="gpx_info_maximum_speed">Maksiminopeus: %1$s</string>
<string name="gpx_info_avg_altitude">Keskikorkeus: %1$s</string>
<string name="gpx_info_diff_altitude">Korkeusväli: %1$s</string>
<string name="lang_zh">Kiina</string>
@ -1718,9 +1721,9 @@ Reitin pisteet %2$s</string>
<string name="text_size_descr">Aseta tekstin koko kartalle.</string>
<string name="background_service_is_enabled_question">OsmAnd taustapalvelu on vielä suorituksessa. Haluatko puysäyttää myös sen?</string>
<string name="save_track_to_gpx_globally_headline">Jäljen kirjaus tarpeen vaatiessa</string>
<string name="selected_gpx_info_show">
Paina ja pidä nähdäksesi kartalla</string>
<string name="selected_gpx_info_show">"
\n
\nPaina pitkään nähdäksesi kartalla"</string>
<string name="local_index_gpx_info_show">
Paina ja pidä nähdäksesi kartalla</string>
@ -1760,7 +1763,7 @@ Paina ja pidä nähdäksesi kartalla</string>
<string name="interrupt_music_descr">Keskeytä musiikki täydellisesti ääniohjeiden ajaksi (ei ainoastaan hiljennystä)</string>
<string name="map_widget_next_next_turn">Toinen käännös</string>
<string name="native_app_allocated_memory_descr">Sovelluksen varaama natiivi muisti yhteensä %1$s MB (Dalvik %2$s MB, muut %3$s MB).
Suhteellinen muisti %4$s MB (Android raja %5$s MB, Dalvik %6$s MB).</string>
\nSuhteellinen muisti %4$s MB (Android raja %5$s MB, Dalvik %6$s MB).</string>
<string name="rendering_attr_noPolygons_description">Tee kaikki maankäyttäominaisuudet läpikuultaviksi kartalla.</string>
<string name="direction_style_sidewise">Sivuittain (8 sektoria)</string>
<string name="settings_direction_style_descr">Valitse tyyli ilmaistaksesi suhteelliset suunnat liikuttaessa</string>
@ -1846,7 +1849,7 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="incomplete_locale">epätäydellinen</string>
<string name="send_location_way_choose_title">Jaa sijainti käyttäen</string>
<string name="send_location_sms_pattern">Sijainti: %1$s
%2$s</string>
\n%2$s</string>
<string name="add_waypoint_dialog_added">GPX väyläpiste \'\'{0}\'\' lisätty</string>
<string name="add_waypoint_dialog_title">Lisää väyläpiste tallennettuun GPX jälkeen</string>
<string name="amenity_type_administrative">Hallinnollinen</string>
@ -1881,7 +1884,7 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="failed_to_upload">Vieminen epäonnistui</string>
<string name="successfully_uploaded_pattern">Viety {0}/{1}</string>
<string name="offline_maps_and_navigation">Offline Kartat
&amp; Suunnistus</string>
\n&amp; Suunnistus</string>
<string name="commit_poi"/>
<string name="tab_title_advanced"/>
<string name="confirm_download_roadmaps">Vain tiet-karttaa ei tarvita, koska sinulla on jo vakio (täysi) kartta. Ladataanko se silti\?</string>
@ -2545,7 +2548,7 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="radius_ruler_item">Sädeviivain</string>
<string name="download_unsupported_action">Ei tuettu toiminto %1$s</string>
<string name="travel_item">Matkailu (Wikivoyage ja Wikipedia)</string>
<string name="select_track_file">"Valitse reitti tiedosto "</string>
<string name="select_track_file">Valitse reitti tiedosto</string>
<string name="wiki_menu_download_descr">Lisäkarttoja tarvitaan Wikipedian erikoiskohteiden tarkastelemiseen kartalla.</string>
<string name="select_wikipedia_article_langs">Valitse kielet, joilla Wikipedia-artikkelit näkyvät kartalla. Voit vaihtaa kaikkien käytettävissä olevien kielten välillä lukiessasi artikkelia.</string>
<string name="some_articles_may_not_available_in_lang">Jotkut Wikipedia-artikkelit eivät välttämättä ole saatavilla omalla kielelläsi.</string>
@ -2560,4 +2563,14 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="settings_item_read_error">Ei voitu lukea \'%1$s\'.</string>
<string name="settings_item_write_error">Ei voitu kirjoittaa \'%1$s\'.</string>
<string name="settings_item_import_error">Ei voitu tuoda kohteesta \'%1$s\'.</string>
<string name="days_5">Päivää</string>
<string name="days_2_4">Päivää</string>
<string name="day">Päivä</string>
<string name="weeks_5">Viikkoa</string>
<string name="weeks_2_4">Viikkoa</string>
<string name="week">Viikko</string>
<string name="shared_string_bearing">Suuntima</string>
<string name="plan_a_route">Suunnittele reitti</string>
<string name="plan_route_last_edited">Viimeksi muokattu</string>
<string name="plan_route_create_new_route">Luo uusi reitti</string>
</resources>

View file

@ -51,7 +51,7 @@
<string name="global_app_settings">Paramètres globaux de l\'application</string>
<string name="user_name">Votre identifiant OSM</string>
<string name="open_street_map_login_descr">Nécessaire pour les contributions à openstreetmap.org.</string>
<string name="user_password">Votre mot de passe OSM</string>
<string name="user_password">Mot de passe</string>
<string name="osmand_service">Mode arrière-plan</string>
<string name="osmand_service_descr">OsmAnd s\'exécute en arrière-plan, écran éteint.</string>
<string name="switch_to_raster_map_to_see">Téléchargez une carte vectorielle hors-ligne pour ce lieu (depuis «Paramètres» &gt; «Gérer les cartes») ou utilisez le greffon «cartes en ligne».</string>
@ -3406,7 +3406,7 @@
<string name="route_recalculation">Recalcul de l\'itinéraire</string>
<string name="accessibility_announce">Annonce</string>
<string name="login_and_pass">Nom d\'utilisateur et mot de passe</string>
<string name="plugin_global_prefs_info">Ces paramètres s\'appliquent à tous les profils.</string>
<string name="plugin_global_prefs_info">Les paramètres du greffon sont globaux et s\'appliquent à tous les profils.</string>
<string name="osm_editing">Édition OSM</string>
<string name="osm_edits_view_descr">Vous pouvez consulter vos modifications non téléversées comme vos bugs OSM dans %1$s. Les points envoyés ne sont plus affichés dans OsmAnd.</string>
<string name="app_mode_osm">OSM</string>
@ -3926,5 +3926,15 @@
<string name="mgrs_format_descr">OsmAnd utilise le système de référence MDRS de l\'OTAN dérivé des formats UTM et UPS.</string>
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="navigate_point_mgrs">MGRS</string>
<string name="message_you_need_add_two_points_to_show_graphs">Vous devez ajouter, au moins, deux points.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Vous devez, au moins, ajouter deux points.</string>
<string name="subscription_on_hold_title">L\'abonnement OsmAnd Live est en attente</string>
<string name="subscription_expired_title">Labonnement OsmAnd Live a expiré</string>
<string name="subscription_paused_title">L\'abonnement OsmAnd Live a été suspendu</string>
<string name="login_open_street_map">Se connecter à OpenStreetMap</string>
<string name="login_open_street_map_org">Se connecter à OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">Se connecter avec OpenStreetMap</string>
<string name="user_login">Identifiant</string>
<string name="use_login_password">Utiliser un identifiant et un mot de passe</string>
<string name="login_account">Compte</string>
<string name="manage_subscription">Gérer l\'abonnement</string>
</resources>

View file

@ -3842,4 +3842,5 @@
<string name="poi_parking_sheds">Pendellos</string>
<string name="poi_parking_rooftop">Terrazo</string>
<string name="poi_gpx_point">Punto GPX</string>
<string name="poi_radar_tower">Torre de radar</string>
</resources>

View file

@ -3971,4 +3971,10 @@ Lon %2$s</string>
<string name="icon_group_sport">Deporte</string>
<string name="icon_group_emergency">Emerxencia</string>
<string name="icon_group_travel">Viaxe</string>
<string name="message_you_need_add_two_points_to_show_graphs">Tes que engadir polo menos dous puntos.</string>
<string name="manage_subscription">Xestionar subscrición</string>
<string name="subscription_payment_issue_title">Hai un problema coa túa subscrición. Preme no botón para ir ós axustes de subscrición da Google Play e corrixir o teu método de pagamento.</string>
<string name="subscription_expired_title">A subscrición do OsmAnd Live expirou</string>
<string name="subscription_paused_title">A subscrición do OsmAnd Live foi detida</string>
<string name="subscription_on_hold_title">A subscrición do OsmAnd Live está en espera</string>
</resources>

View file

@ -114,7 +114,7 @@
<string name="global_app_settings">Globális beállítások az alkalmazáshoz</string>
<string name="user_name">OSM felhasználóneved</string>
<string name="open_street_map_login_descr">Az openstreetmap.org felé történő adatküldéshez szükséges.</string>
<string name="user_password">OSM jelszavad</string>
<string name="user_password">Jelszó</string>
<string name="osmand_service">Háttérmód</string>
<string name="osmand_service_descr">Az OsmAnd háttérben fut kikapcsolt kijelzővel.</string>
<string name="switch_to_raster_map_to_see">Erre a területre letölthet offline vektoros térképet a Beállításokban (Térképfájlok kezelése), vagy váltson át az Online térképek bővítményre.</string>
@ -239,7 +239,7 @@
<string name="map_overlay_descr">Rátéttérkép kiválasztása</string>
<string name="tile_source_already_installed">A térkép már telepítve van, a beállítások frissülnek.</string>
<string name="select_tile_source_to_install">(Csempés) térkép kiválasztása telepítéshez vagy frissítéshez.</string>
<string name="internet_not_available">Nem lehet végrehajtani a műveletet internetkapcsolat nélkül.</string>
<string name="internet_not_available">A műveletet nem lehetséges internetkapcsolat nélkül végrehajtani.</string>
<string name="install_more">További telepítése…</string>
<string name="level_to_switch_vector_raster_descr">Raszteres térképek használata ezen nagyítási szint alatt.</string>
<string name="level_to_switch_vector_raster">Legkisebb vektoros nagyítási szint</string>
@ -1228,7 +1228,7 @@
<string name="import_file_favourites">Mented az adatokat GPX fájlként, vagy importálod az útpontokat a „Kedvencek”-be?</string>
<string name="shared_string_share">Megosztás</string>
<string name="share_fav_subject">OsmAndból megosztott kedvencek</string>
<string name="no_index_file_to_download">Nem találhatók letöltések, ellenőrizd az internetkapcsolatot.</string>
<string name="no_index_file_to_download">Nem találhatók letöltések, ellenőrizze az internetkapcsolatot.</string>
<string name="none_selected_gpx">Először egy hosszú koppintással adjon meg egy GPX-fájlt.</string>
<string name="local_index_select_gpx_file">Nyomvonal kijelölése</string>
<string name="sort_by_distance">Rendezés távolság szerint</string>
@ -1370,7 +1370,7 @@
<string name="download_tab_updates">Frissítések</string>
<string name="download_tab_downloads">Letöltés</string>
<string name="download_tab_local">Helyi</string>
<string name="no_internet_connection">A letöltés nem lehetséges, ellenőrizd az internet-kapcsolatot.</string>
<string name="no_internet_connection">A letöltés nem lehetséges, ellenőrizze az internetkapcsolatot.</string>
<string name="shared_string_dismiss">Bezárás</string>
<string name="everything_up_to_date">Minden fájl naprakész</string>
<string name="use_opengl_render">OpenGL megjelenítő használata</string>
@ -2493,9 +2493,9 @@
<string name="context_menu_points_of_group">A csoport összes pontja</string>
<string name="open_from">Nyitva ekkortól:</string>
<string name="open_till">Nyitva eddig:</string>
<string name="will_close_at">Bezár ekkor:</string>
<string name="will_open_at">Kinyit ekkor:</string>
<string name="will_open_on">Kinyit ekkor:</string>
<string name="will_close_at">Ekkor zár:</string>
<string name="will_open_at">Ekkor nyit:</string>
<string name="will_open_on">Ekkor nyit:</string>
<string name="additional_actions">További műveletek</string>
<string name="av_locations_selected_desc">GPX fájl a kijelölt jegyzetek koordinátáival és adataival.</string>
<string name="av_locations_all_desc">GPX fájl az összes jegyzet koordinátáival és adataival.</string>
@ -3420,7 +3420,7 @@
<string name="route_recalculation">Útvonal újraszámítása</string>
<string name="accessibility_announce">Bejelentés</string>
<string name="login_and_pass">Felhasználónév és jelszó</string>
<string name="plugin_global_prefs_info">Ezek a beállítások minden profilra vonatkoznak.</string>
<string name="plugin_global_prefs_info">Ezek a bővítménybeállítások globálisak, és minden profilra vonatkoznak</string>
<string name="osm_editing">OSM-szerkesztés</string>
<string name="osm_edits_view_descr">Az összes még fel nem töltött szerkesztés vagy OSM-hiba megtalálható a %1$s helyen. A már feltöltött pontok nem láthatók az OsmAndban.</string>
<string name="app_mode_osm">OSM</string>
@ -3939,4 +3939,5 @@
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="mgrs_format_descr">Az OsmAnd a NATO által is használt MGRS (Military Grid Reference System) koordinátákat alkamazza, amely hasonlít az UTM-formátumhoz.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Legalább két pontot kell hozzáadnia.</string>
<string name="manage_subscription">Előfizetés kezelése</string>
</resources>

View file

@ -303,7 +303,7 @@
<string name="global_app_settings">הגדרות יישומים כלליות</string>
<string name="user_name">שם המשתמש שלך ב־OSM</string>
<string name="open_street_map_login_descr">נדרש לטובת שליחת נתונים אל openstreetmap.org.</string>
<string name="user_password">הססמה שלך ב־OSM</string>
<string name="user_password">ססמה</string>
<string name="osmand_service">מצב רקע</string>
<string name="osmand_service_descr">OsmAnd פועל ברקע בזמן שהמסך כבוי.</string>
<string name="download_files_not_enough_space">אין די מקום כדי להוריד %1$s מ״ב (פנויים: %2$s).</string>
@ -3951,4 +3951,19 @@
<string name="mgrs_format_descr">ב־OsmAnd נעשה שימוש ב־MGRS, שדומה לתצורת UTM NATO.</string>
<string name="navigate_point_mgrs">MGRS</string>
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="message_you_need_add_two_points_to_show_graphs">עליך להוסיף שתי נקודות לפחות.</string>
<string name="login_open_street_map">כניסה ל־OpenStreetMap</string>
<string name="login_open_street_map_org">כניסה ל־OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">כניסה עם OpenStreetMap</string>
<string name="use_login_password">להשתמש בשם כניסה וססמה</string>
<string name="login_account">חשבון</string>
<string name="user_login">כניסה</string>
<string name="manage_subscription">ניהול מינוי</string>
<string name="subscription_expired_title">תוקף המינוי ל־OsmAnd Live פג</string>
<string name="subscription_paused_title">המינוי ל־OsmAnd Live הושהה</string>
<string name="open_street_map_login_mode">עליך להיכנס כדי להעלות דברים חדשים או כאלו ששינית.
\n
\nניתן להיכנס בשיטת OAuth המאובטחת או להשתמש בשם הכניסה והססמה שלך.</string>
<string name="subscription_payment_issue_title">יש בעיה עם המינוי שלך. יש ללחוץ על הכפתור כדי לגשת להגדרות המינוי של Google Play ולתקן את שיטת התשלום שלך.</string>
<string name="subscription_on_hold_title">המינוי ל־OsmAnd Live מוחזק</string>
</resources>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -3562,10 +3562,10 @@
<string name="poi_hazard">Zagrożenie</string>
<string name="poi_health_specialty_radiotherapy_yes">Radioterapia</string>
<string name="poi_change_delete">Usunięty obiekt</string>
<string name="poi_rtsa_scale_nc">н/к</string>
<string name="poi_rtsa_scale_nc_asterisk">н/к*</string>
<string name="poi_rtsa_scale_nc">n/c</string>
<string name="poi_rtsa_scale_nc_asterisk">n/c*</string>
<string name="poi_rtsa_scale_1a">1A</string>
<string name="poi_rtsa_scale_1a_asterisk">1А*</string>
<string name="poi_rtsa_scale_1a_asterisk">1A*</string>
<string name="poi_rtsa_scale_1b">1B</string>
<string name="poi_rtsa_scale_1b_asterisk">1B*</string>
<string name="poi_rtsa_scale_2a">2A</string>
@ -3817,7 +3817,7 @@
<string name="poi_seamark_water_level_below_mwl">Poziom wody: poniżej średniego poziomu wody</string>
<string name="poi_seamark_water_level_awash">Poziom wody: obmywający falami</string>
<string name="poi_seamark_water_level_covers">Poziom wody: pokrywający</string>
<string name="poi_internet_access_fee_customers">Dostęp do Internetu dla klientów</string>
<string name="poi_internet_access_fee_customers">Dostęp do Internetu: klienci</string>
<string name="poi_osmand_fire_hydrant_pressure_suction">Ssanie</string>
<string name="poi_osmand_fire_hydrant_pressure_pressurized">Pod ciśnieniem</string>
<string name="poi_fire_hydrant_style_water_source_groundwater">Woda podziemna</string>

View file

@ -127,7 +127,7 @@
<string name="system_locale">Systemowy</string>
<string name="preferred_locale_descr">Wybiera język interfejsu (po zmianie należy uruchomić OsmAnd ponownie).</string>
<string name="preferred_locale">Język interfejsu</string>
<string name="shared_string_next">Naprzód</string>
<string name="shared_string_next">Dalej</string>
<string name="shared_string_previous">Poprzedni</string>
<string name="unit_of_length_descr">Zmienia jednostki długości.</string>
<string name="unit_of_length">Jednostki długości</string>
@ -422,7 +422,7 @@
<string name="finished_task">Zakończono</string>
<string name="use_online_routing_descr">Użyj Internetu do wyznaczenia trasy.</string>
<string name="use_online_routing">Użyj nawigacji online</string>
<string name="user_password">Hasło konta OSM</string>
<string name="user_password">Hasło</string>
<string name="osm_settings_descr">Skonfiguruj ustawienia potrzebne do wysyłania danych do Openstreetmap.org (OSM).</string>
<string name="data_settings_descr">Ustaw język, pobierz/wczytaj ponownie dane.</string>
<string name="data_settings">Dane</string>
@ -3426,7 +3426,7 @@
<string name="route_recalculation">Ponowne wyliczenie trasy</string>
<string name="accessibility_announce">Zapowiedź</string>
<string name="login_and_pass">Nazwa użytkownika i hasło</string>
<string name="plugin_global_prefs_info">Te ustawienia mają zastosowanie do wszystkich profilów.</string>
<string name="plugin_global_prefs_info">Ustawienia tej wtyczki są globalne i dotyczą wszystkich profili</string>
<string name="osm_editing">Edycja OSM</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Ikona wyświetlana podczas nawigacji lub ruchu.</string>
@ -3549,7 +3549,7 @@
<string name="shared_string_quick_actions">Szybka czynność</string>
<string name="keep_both">Zatrzymaj oba</string>
<string name="shared_string_rendering_style">Styl renderowania</string>
<string name="osm_edits_view_descr">Zobacz swoje zmiany lub błędy OSM, które nie zostały jeszcze przesłane w %1$s. Przesłane punkty nie będą już wyświetlane.</string>
<string name="osm_edits_view_descr">Możesz zobaczyć wszystkie nieopublikowane edycje lub błędy OSM w %1$s. Przesłane punkty nie są wyświetlane w OsmAnd.</string>
<string name="import_rendering_file">Importowanie pliku renderowania</string>
<string name="restore_all_profile_settings">Przywrócić wszystkie ustawienia profilu\?</string>
<string name="saving_new_profile">Zapisywanie nowego profilu</string>
@ -3813,7 +3813,7 @@
<string name="select_track_width">Wybierz szerokość</string>
<string name="gpx_split_interval_none_descr">Wybierz żądaną opcję podziału: według czasu lub odległości.</string>
<string name="track_coloring_solid">Stałe</string>
<string name="gpx_parse_error">OsmAnd GPX nie jest dobrze uformowany, prosimy o kontakt z zespołem wsparcia technicznego w celu dalszego zbadania sprawy.</string>
<string name="gpx_parse_error">Plik OsmAnd GPX nie jest poprawnie skonstruowany, prosimy o kontakt z zespołem wsparcia technicznego w celu dalszego zbadania sprawy.</string>
<string name="turn_screen_on_wake_time_descr">Wybierz limit czasu ekranu po przebudzeniu. (\"%1$s\" nie powoduje przekroczenia limitu czasu.)</string>
<string name="track_show_start_finish_icons">Pokaż ikony początku i końca</string>
<string name="gpx_split_interval_descr">Wybierz przedział czasowy, w którym będą wyświetlane znaki z odległością lub czasem na torze.</string>
@ -3837,9 +3837,7 @@
<string name="route_between_points_whole_track_button_desc">Cała trasa zostanie ponownie wyznaczona przy użyciu wybranego profilu.</string>
<string name="route_between_points_next_segment_button_desc">Tylko następny segment zostanie przeliczony przy użyciu wybranego profilu.</string>
<string name="route_between_points_desc">Wybierz sposób łączenia punktów, za pomocą linii prostej, lub oblicz trasę między nimi w sposób określony poniżej.</string>
<string name="route_between_points_warning_desc">Aby skorzystać z tej opcji, OsmAnd musi przyciągnąć ślad do dróg mapy.
\n
\nW następnym kroku należy wybrać profil nawigacji w celu wykrycia dozwolonych dróg i odległości progowej w celu przybliżenia śledzenia drogi.</string>
<string name="route_between_points_warning_desc">Następnie przyciągnij trasę do najbliższej dozwolonej drogi za pomocą jednego z profili nawigacji, aby skorzystać z tej opcji.</string>
<string name="street_level_imagery">Zdjęcia z poziomu ulicy</string>
<string name="plan_route_exit_dialog_descr">Czy na pewno chcesz odrzucić wszystkie zmiany w zaplanowanej trasie, zamykając ją\?</string>
<string name="in_case_of_reverse_direction">W przypadku odwrotnego kierunku</string>
@ -3945,7 +3943,7 @@
<string name="shared_string_local_maps">Mapy lokalne</string>
<string name="app_mode_gap">Luka</string>
<string name="icon_group_amenity">Udogodnienie</string>
<string name="icon_group_special">Specjalne</string>
<string name="icon_group_special">Specjalny</string>
<string name="icon_group_transport">Transport</string>
<string name="icon_group_service">Usługi</string>
<string name="icon_group_symbols">Symbole</string>
@ -3956,4 +3954,17 @@
<string name="manage_subscription">Zarządzaj subskrypcją</string>
<string name="subscription_expired_title">Subskrypcja OsmAnd Live wygasła</string>
<string name="subscription_paused_title">Subskrypcja OsmAnd Live została wstrzymana</string>
<string name="snowmobile_render_descr">Do jazdy skuterem śnieżnym z wyznaczonymi drogami i torami.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Należy dodać co najmniej dwa punkty.</string>
<string name="subscription_payment_issue_title">Wystąpił problem z Twoją subskrypcją. Kliknij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności.</string>
<string name="subscription_on_hold_title">Subskrypcja OsmAnd Live jest wstrzymana</string>
<string name="user_login">Login</string>
<string name="login_open_street_map">Zaloguj się do OpenStreetMap</string>
<string name="login_open_street_map_org">Zaloguj się do OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">Zaloguj się za pomocą OpenStreetMap</string>
<string name="open_street_map_login_mode">Musisz się zalogować, aby przesłać nowe lub zmodyfikowane zmiany.
\n
\nMożesz zalogować się za pomocą bezpiecznej metody autoryzacji OAuth lub użyć swojego loginu i hasła.</string>
<string name="use_login_password">Użyj loginu i hasła</string>
<string name="login_account">Konto</string>
</resources>

View file

@ -1020,7 +1020,7 @@
<string name="global_app_settings">Configurações globais do aplicativo</string>
<string name="user_name">Seu nome de usuário OSM</string>
<string name="open_street_map_login_descr">Necessário para envios ao openstreetmap.org.</string>
<string name="user_password">Sua senha do OSM</string>
<string name="user_password">Senha</string>
<string name="osmand_service">Modo em segundo plano</string>
<string name="osmand_service_descr">OsmAnd é executado em segundo plano com a tela desligada.</string>
<string name="arrival_distance_factor_late">Atrasado</string>
@ -3421,9 +3421,9 @@
<string name="route_recalculation">Recálculo da rota</string>
<string name="accessibility_announce">Anunciar</string>
<string name="login_and_pass">Usuário e senha</string>
<string name="plugin_global_prefs_info">Essas configurações se aplicam a todos os perfis.</string>
<string name="plugin_global_prefs_info">Essas configurações de plug-in são globais e se aplicam a todos os perfis</string>
<string name="osm_editing">Edição OSM</string>
<string name="osm_edits_view_descr">Você pode ver todos os erros de osm do editor carregado em %1$s. Os pontos enviados não são exibidos no OsmAnd.</string>
<string name="osm_edits_view_descr">Você pode ver todas as suas edições descarregadas ou erros do OSM em %1$s. Os pontos carregados não aparecem no OsmAnd.</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Ícone mostrado ao navegar ou mover.</string>
<string name="select_map_icon_descr">Ícone mostrado em repouso.</string>
@ -3947,4 +3947,14 @@
<string name="subscription_expired_title">A assinatura do OsmAnd Live expirou</string>
<string name="subscription_paused_title">A assinatura do OsmAnd Live foi pausada</string>
<string name="subscription_on_hold_title">A assinatura do OsmAnd Live está em espera</string>
<string name="app_mode_gap">Diferença</string>
<string name="login_open_street_map">Entrar para OpenStreetMap</string>
<string name="login_open_street_map_org">Entrar com OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">Entrar com OpenStreetMap</string>
<string name="open_street_map_login_mode">Você precisa entrar para enviar alterações novas ou modificadas.
\n
\nVocê pode entrar usando o método OAuth seguro ou usar sua entrada e senha.</string>
<string name="use_login_password">Usar a entrada e senha</string>
<string name="login_account">Conta</string>
<string name="user_login">Entrar</string>
</resources>

View file

@ -269,7 +269,7 @@
<string name="finished_task">Concluído</string>
<string name="use_online_routing_descr">Utilize a Internet para calcular uma rota.</string>
<string name="use_online_routing">Utilizar navegação online</string>
<string name="user_password">A sua palavra-passe no OSM</string>
<string name="user_password">Palavra-passe</string>
<string name="osm_settings_descr">Especifique as configurações de OpenStreetMap.org (OSM) necessárias para envios ao OSM.</string>
<string name="data_settings_descr">Especifique o idioma, descarregar/enviar dados.</string>
<string name="data_settings">Dados</string>
@ -3566,9 +3566,9 @@
<string name="logcat_buffer_descr">Verifique e compartilhe registos detalhados da app</string>
<string name="select_map_icon_descr">Ícone mostrado em repouso.</string>
<string name="select_nav_icon_descr">Ícone mostrado ao navegar ou mover.</string>
<string name="osm_edits_view_descr">Pode ver todos os erros de OSM do editor carregado em %1$s. Os pontos enviados não são exibidos no OsmAnd.</string>
<string name="osm_edits_view_descr">Pode ver todas as suas edições descarregadas ou bugs OSM em %1$s. Pontos enviados não aparecem no OsmAnd.</string>
<string name="osm_editing">Edição OSM</string>
<string name="plugin_global_prefs_info">Essas configurações aplicam-se a todos os perfis.</string>
<string name="plugin_global_prefs_info">Estas configurações de extensão são globais e aplicam-se a todos os perfis</string>
<string name="login_and_pass">Utilizador e palavra-passe</string>
<string name="accessibility_announce">Anunciar</string>
<string name="route_recalculation">Recálculo da rota</string>
@ -3950,4 +3950,18 @@
<string name="icon_group_emergency">Emergência</string>
<string name="icon_group_travel">Viagem</string>
<string name="message_you_need_add_two_points_to_show_graphs">Deve adicionar pelo menos dois pontos.</string>
<string name="manage_subscription">Gerir a assinatura</string>
<string name="subscription_payment_issue_title">Há um problema com a sua assinatura. Clique no botão para ir às definições de assinatura do Google Play para corrigir o seu método de pagamento.</string>
<string name="subscription_expired_title">A assinatura do OsmAnd Live expirou</string>
<string name="subscription_paused_title">A assinatura do OsmAnd Live foi pausada</string>
<string name="subscription_on_hold_title">A assinatura do OsmAnd Live está em espera</string>
<string name="open_street_map_login_mode">Precisa fazer login para enviar alterações novas ou modificadas.
\n
\nPode entrar a usar o método seguro OAuth ou usar o seu nome de utilizador e a sua palavra-passe.</string>
<string name="login_open_street_map">Fazer login ao OpenStreetMap</string>
<string name="login_open_street_map_org">Entrar com OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">Entrar com OpenStreetMap</string>
<string name="use_login_password">Usar nome do utilizador e palavra-passe</string>
<string name="login_account">Conta</string>
<string name="user_login">Entrar</string>
</resources>

View file

@ -3845,4 +3845,5 @@
<string name="poi_parking_sheds">Cabannas</string>
<string name="poi_parking_rooftop">Cobertura</string>
<string name="poi_gpx_point">Puntu GPX</string>
<string name="poi_radar_tower">Torre ràdar</string>
</resources>

View file

@ -261,7 +261,7 @@
<string name="amenity_type_osmwiki">Wikipedia (çevrim dışı)</string>
<string name="amenity_type_user_defined">Kullanıcı tanımlı</string>
<string name="settings_preset">Öntanımlı profil</string>
<string name="user_password">OSM şifreniz</string>
<string name="user_password">Parola</string>
<string name="download_files_not_enough_space">İndirme için yeterli yer yok: %1$s MB (free: %2$s).</string>
<string name="animate_route_off">Animasyonu durdur</string>
<string name="animate_route">Animasyonu başlat</string>
@ -3382,9 +3382,9 @@
<string name="route_recalculation">Rotanın yeniden hesaplanması</string>
<string name="accessibility_announce">Duyuru</string>
<string name="login_and_pass">Kullanıcı adı ve parola</string>
<string name="plugin_global_prefs_info">Bu ayarlar tüm profiller için geçerlidir.</string>
<string name="plugin_global_prefs_info">Bu eklenti ayarları geneldir ve tüm profiller için geçerlidir</string>
<string name="osm_editing">OSM düzenleme</string>
<string name="osm_edits_view_descr">Karşıya yüklenmemiş tüm düzenlemelerinizi veya osm hatalarınızı %1$s içinde görüntüleyebilirsiniz. Yüklenen noktalar OsmAnd\'de gösterilmez.</string>
<string name="osm_edits_view_descr">Yüklenmemiş tüm düzenlemelerinizi veya OSM hatalarınızı %1$s\'de görüntüleyebilirsiniz. Karşıya yüklenen noktalar OsmAnd\'da gösterilmez.</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Navigasyon sırasında veya harekete halindeyken gösterilen simge.</string>
<string name="select_map_icon_descr">Dinlenme anında gösterilen simge.</string>
@ -3903,4 +3903,18 @@
<string name="icon_group_emergency">Acil</string>
<string name="icon_group_travel">Seyahat</string>
<string name="message_you_need_add_two_points_to_show_graphs">En az iki nokta eklemelisiniz.</string>
<string name="login_open_street_map">OpenStreetMap\'te oturum aç</string>
<string name="login_open_street_map_org">OpenStreetMap.org\'da oturum aç</string>
<string name="sing_in_with_open_street_map">OpenStreetMap ile giriş yap</string>
<string name="open_street_map_login_mode">Yenilikleri veya değişiklikleri karşıya yüklemek için oturum açmanız gerekir.
\n
\nGüvenli OAuth yöntemini kullanarak oturum açabilir veya kullanıcı adı ve parolanızı kullanabilirsiniz.</string>
<string name="use_login_password">Kullanıcı adı ve parola kullan</string>
<string name="user_login">Kullanıcı adı</string>
<string name="login_account">Hesap</string>
<string name="manage_subscription">Aboneliği yönet</string>
<string name="subscription_payment_issue_title">Aboneliğinizle ilgili bir sorun var. Ödeme yönteminizi düzeltmek üzere Google Play abonelik ayarlarına gitmek için düğmeye tıklayın.</string>
<string name="subscription_expired_title">OsmAnd Live aboneliğinin süresi doldu</string>
<string name="subscription_paused_title">OsmAnd Live aboneliği duraklatıldı</string>
<string name="subscription_on_hold_title">OsmAnd Live aboneliği beklemede</string>
</resources>

View file

@ -2038,7 +2038,7 @@
<string name="osm_live_subscription_desc">Передплата включає щогодинні, щоденні та щотижневі оновлення, а також, необмежену кількість доступних завантажень для всіх мап з усього світу.</string>
<string name="get_it">Отримати</string>
<string name="get_for">Отримати на %1$s</string>
<string name="osm_live_banner_desc">Отримайте необмежені завантаження для мап, а також оновлення мап частіше ніж один раз на місяць: щотижня, щодня або щогодини.</string>
<string name="osm_live_banner_desc">Отримайте для мап необмежені завантаження та оновлення частіше ніж раз на місяць: щотижня, щодня або щогодини.</string>
<string name="osmand_plus_banner_desc">Втулок для необмеженого доступу до мап, їх оновлень та отримання відомостей з Wikipedia.</string>
<string name="si_mi_meters">Милі/метри</string>
<string name="skip_map_downloading">Пропустити завантаження мап</string>
@ -2741,8 +2741,8 @@
\nРозкажіть нам про це.</string>
<string name="send_search_query">Надіслати пошуковий запит?</string>
<string name="shared_string_world">Світ</string>
<string name="monthly_map_updates">Оновлення мап: щомісячне</string>
<string name="daily_map_updates">Оновлення мап: щогодинне</string>
<string name="monthly_map_updates">Оновлення мап: щомісячно</string>
<string name="daily_map_updates">Оновлення мап: щогодинно</string>
<string name="in_app_purchase">Купівля в застосунку</string>
<string name="in_app_purchase_desc">Одноразовий платіж</string>
<string name="in_app_purchase_desc_ex">Після покупки він буде завжди доступний для вас.</string>
@ -3425,9 +3425,9 @@
<string name="route_recalculation">Перерахунок маршруту</string>
<string name="accessibility_announce">Оголошення</string>
<string name="login_and_pass">Ім\'я користувача і пароль</string>
<string name="plugin_global_prefs_info">Ці налаштування стосуються всіх профілів.</string>
<string name="plugin_global_prefs_info">Ці налаштування втулка стосуються всіх профілів</string>
<string name="osm_editing">OSM-правлення</string>
<string name="osm_edits_view_descr">Ви можете переглянути всі не завантажені зміни або помилки в OSM в %1$s. Завантажені точки не відображаються в OsmAnd.</string>
<string name="osm_edits_view_descr">Ви можете переглянути всі вивантажені зміни або вади OSM у %1$s. Вивантажені точки не показано в OsmAnd.</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">Значок відображається під час навігації чи переміщення.</string>
<string name="select_map_icon_descr">Значок показано в спокої.</string>
@ -3661,7 +3661,7 @@
<string name="subscription_osmandlive_item">Передплата - OsmAnd Live</string>
<string name="osmand_purchases_item">OsmAnd покупки</string>
<string name="legend_item_description">Довідник умовних позначень мапи.</string>
<string name="osm_live_payment_subscription_management">Оплату буде здійснено з рахунку, прив\'язаного до вашого облікового запису Google Play, під час підтвердженні придбання.
<string name="osm_live_payment_subscription_management">Оплату буде здійснено під час підтвердження придбання з пов\'язаного з вашим обліковим записом Google Play рахунку.
\n
\nПередплата продовжується автоматично, якщо ви не скасуєте її до дати продовження. З вашого рахунку буде стягуватися плата за період продовження (щомісяця/щотримісяці/щорік) разово в день продовження.
\n
@ -3949,4 +3949,13 @@
<string name="subscription_expired_title">Термін дії передплати OsmAnd Live закінчився</string>
<string name="subscription_paused_title">Передплату OsmAnd Live зупинено</string>
<string name="subscription_on_hold_title">Передплата OsmAnd Live на утриманні</string>
<string name="login_open_street_map">Увійти до OpenStreetMap.org</string>
<string name="login_open_street_map_org">Увійти до OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">Увійти за допомогою OpenStreetMap</string>
<string name="open_street_map_login_mode">Увійдіть, щоб вивантажити нові або внесені зміни.
\n
\nВи можете увійти, за допомогою безпечного методу OAuth, або скористатися своїм ім\'ям та паролем.</string>
<string name="use_login_password">Використовувати ім\'я і пароль</string>
<string name="login_account">Обліковий запис</string>
<string name="user_login">Ім\'я користувача</string>
</resources>

View file

@ -335,7 +335,7 @@
<string name="global_app_settings">整體程式設定</string>
<string name="user_name">您 OSM 的使用者名稱</string>
<string name="open_street_map_login_descr">需要向 openstreetmap.org 提出意見。</string>
<string name="user_password">您 OSM 的密碼</string>
<string name="user_password">密碼</string>
<string name="osmand_service">背景模式</string>
<string name="osmand_service_descr">當螢幕關閉後,讓 OsmAnd 在背景運行。</string>
<string name="download_files_not_enough_space">空間不足以下載 %1$s MB (空間剩餘:%2$s)。</string>
@ -3420,7 +3420,7 @@
<string name="route_recalculation">路徑重新計算</string>
<string name="accessibility_announce">公告</string>
<string name="login_and_pass">使用者名稱與密碼</string>
<string name="plugin_global_prefs_info">這些設定會套用到所有設定檔中。</string>
<string name="plugin_global_prefs_info">這些外掛程式是全域的,會套用到所有設定檔中</string>
<string name="osm_editing">OSM 編輯</string>
<string name="app_mode_osm">OSM</string>
<string name="select_nav_icon_descr">在導航或移動時顯示的圖示。</string>
@ -3429,7 +3429,7 @@
<string name="search_offline_geo_error">無法解析地理含義「%s」。</string>
<string name="tracks_view_descr">您已紀錄的軌跡位於 %1$s或是 OsmAnd 資料夾。</string>
<string name="multimedia_notes_view_descr">您的 OSM 註記位於 %1$s。</string>
<string name="osm_edits_view_descr">檢視您的編輯或 OSM 臭蟲尚未上傳到 %1$s。已上傳的點將不會再顯示。</string>
<string name="osm_edits_view_descr">您可以在 %1$s 中檢視您所有未上傳的編輯或 OSM 臭蟲。已上傳的點不會在 OsmAnd 中顯示。</string>
<string name="permission_is_required">使用此選項需要權限。</string>
<string name="monitoring_min_speed_descr">這是一個低速過濾器,不記錄低於特定速度的點。在地圖上查看時,這可能會使記錄的軌跡看起來更平滑。</string>
<string name="monitoring_min_speed_descr_side_effect">副作用:您的軌跡將會遺失所有未達到最低速度標準的部份(例如,您將自行車推上陡峭的山坡)。此外,也將沒有其餘的資訊,如休息等。這會影響任何分析或後處理,例如試圖確定行程的總長度,運動時間或平均速度時。</string>
@ -3943,4 +3943,18 @@
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="mgrs_format_descr">OsmAnd 使用 MGRS其類似於 UTM NATO 格式。</string>
<string name="message_you_need_add_two_points_to_show_graphs">您必須新增至少兩個點。</string>
<string name="manage_subscription">管理訂閱</string>
<string name="subscription_payment_issue_title">您的訂閱似乎有點問題。點擊按鈕以跳到 Google Play 訂閱設定以修復您的付款方式。</string>
<string name="subscription_expired_title">OsmAnd Live 訂閱已過期</string>
<string name="subscription_paused_title">OsmAnd Live 訂閱已暫停</string>
<string name="subscription_on_hold_title">OsmAnd Live 訂閱已暫停</string>
<string name="login_open_street_map">登入到 OpenStreetMap</string>
<string name="login_open_street_map_org">登入到 OpenStreetMap.org</string>
<string name="sing_in_with_open_street_map">以 OpenStreetMap 登入</string>
<string name="open_street_map_login_mode">您必須登入以上傳新的或修正過的變更。
\n
\n您可以使用安全的 OAuth 方法或使用您的登入與密碼來登入。</string>
<string name="use_login_password">使用登入與密碼</string>
<string name="login_account">帳號</string>
<string name="user_login">登入</string>
</resources>

View file

@ -11,6 +11,13 @@
Thx - Hardy
-->
<string name="gpx_upload_trackable_visibility_descr">Trackable means that the trace will not show up in any public listings but trackpoints from it will still be available through the public GPS API with timestamps. Other users will only be able to download processed trackpoints from your trace which can\'t be associated with you directly.</string>
<string name="gpx_upload_identifiable_visibility_descr">Identifiable means that the trace will be shown publicly in Your GPS traces and in public GPS trace listings, i.e. other users will be able to download the raw trace and associate it with your username. Data served via the trackpoints API will reference your original trace page. Timestamps of the trace points are available through the public GPS API.</string>
<string name="gpx_upload_private_visibility_descr">Private means that the trace will not show up in any public listings, but trackpoints from it will still be available through the public GPS API without timestamps but will not be chronologically ordered.</string>
<string name="gpx_upload_public_visibility_descr">Public means that the trace will be shown publicly in Your GPS traces and in public GPS trace listings. Data served via the API does not reference your trace page. Timestamps of the trace points are not available through the public GPS API, and the points are not chronologically ordered. However, other users are still able to download the raw trace from the public trace list and any timestamps contained within.</string>
<string name="enter_text_separated">Enter tags separated by comma.</string>
<string name="send_files_to_openstreetmap">Send GPX file to OpenStreetMap</string>
<string name="markers_history">Markers history</string>
<string name="subscription_on_hold_title">OsmAnd Live subscription is on hold</string>
<string name="subscription_paused_title">OsmAnd Live subscription has been paused</string>
<string name="subscription_expired_title">OsmAnd Live subscription has been expired</string>
@ -22,11 +29,11 @@
<string name="use_login_password">Use login and password</string>
<string name="open_street_map_login_mode">You need to login to upload new or modified changes. \n\nYou can log in using the safe OAuth method or use your login and password.</string>
<string name="osm_edits_view_descr">You can view all your unloaded edits or OSM bugs in %1$s. Uploaded points dont show in OsmAnd.</string>
<string name="sing_in_with_open_street_map">Sing in with OpenStreetMap</string>
<string name="sign_in_with_open_street_map">Sign in with OpenStreetMap</string>
<string name="login_open_street_map_org">Login to OpenStreetMap.org</string>
<string name="login_open_street_map">Login to OpenStreetMap</string>
<string name="plugin_global_prefs_info">These plugin setting are global, and apply to all profiles</string>
<string name="message_you_need_add_two_points_to_show_graphs">You must add at least two points.</string>
<string name="message_you_need_add_two_points_to_show_graphs">You need to add at least two points</string>
<string name="icon_group_travel">Travel</string>
<string name="icon_group_emergency">Emergency</string>
<string name="icon_group_sport">Sport</string>

View file

@ -55,8 +55,8 @@ import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.SQLiteTileSource;

View file

@ -41,6 +41,7 @@ import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.inapp.InAppPurchaseHelperImpl;
import net.osmand.plus.liveupdates.LiveUpdatesHelper;
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.monitoring.LiveMonitoringHelper;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.poi.PoiFiltersHelper;

View file

@ -16,7 +16,8 @@ import net.osmand.PlatformUtil;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
import net.osmand.util.Algorithms;

View file

@ -23,7 +23,8 @@ import net.osmand.PlatformUtil;
import net.osmand.StateChangedListener;
import net.osmand.data.LatLon;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.activities.SavingTrackHelper;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;

View file

@ -63,6 +63,7 @@ import net.osmand.plus.helpers.enums.MetricsConstants;
import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.monitoring.LiveMonitoringHelper;
import net.osmand.plus.poi.PoiFiltersHelper;
import net.osmand.plus.quickaction.QuickActionRegistry;

View file

@ -27,8 +27,8 @@ import androidx.fragment.app.FragmentManager;
import net.osmand.AndroidUtils;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;

View file

@ -1,38 +0,0 @@
package net.osmand.plus.activities;
import net.osmand.plus.activities.EnumAdapter.IEnumWithResource;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class EnumAdapter<T extends IEnumWithResource>
extends ArrayAdapter<T>
{
public EnumAdapter(Context context, int textViewResourceId, T[] enums)
{
super(context, textViewResourceId, enums);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
T item = getItem(position);
textView.setText(item.stringResource());
return textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent);
T item = getItem(position);
textView.setText(item.stringResource());
return textView;
}
public static interface IEnumWithResource {
int stringResource();
}
}

View file

@ -41,7 +41,7 @@ import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.FavouritesDbHelper.FavoritesListener;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandPreference;
import net.osmand.plus.settings.backend.OsmandSettings;

View file

@ -67,8 +67,8 @@ import net.osmand.plus.AppInitializer;
import net.osmand.plus.AppInitializer.AppInitializeListener;
import net.osmand.plus.AppInitializer.InitEvents;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.OnDismissDialogFragmentListener;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndLocationSimulation;

View file

@ -39,8 +39,8 @@ import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.ContextMenuItem.ItemBuilder;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;

View file

@ -13,8 +13,8 @@ import net.osmand.data.LatLon;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.IMapLocationListener;
import net.osmand.map.WorldRegion;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
@ -88,7 +88,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
}
@Override
public void onMapMarkerChanged(MapMarkersHelper.MapMarker mapMarker) {
public void onMapMarkerChanged(MapMarker mapMarker) {
}
@Override

View file

@ -31,8 +31,8 @@ import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;

View file

@ -11,7 +11,7 @@ import net.osmand.PlatformUtil;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.map.TileSourceManager;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
@ -207,7 +207,7 @@ public class IntentHelper {
if (intent.hasExtra(MapMarkersDialogFragment.OPEN_MAP_MARKERS_GROUPS)) {
Bundle openMapMarkersGroupsExtra = intent.getBundleExtra(MapMarkersDialogFragment.OPEN_MAP_MARKERS_GROUPS);
if (openMapMarkersGroupsExtra != null) {
MapMarkersDialogFragment.showInstance(mapActivity, openMapMarkersGroupsExtra.getString(MapMarkersHelper.MapMarkersGroup.MARKERS_SYNC_GROUP_ID));
MapMarkersDialogFragment.showInstance(mapActivity, openMapMarkersGroupsExtra.getString(MapMarkersGroup.MARKERS_SYNC_GROUP_ID));
}
mapActivity.setIntent(null);
}

View file

@ -10,7 +10,7 @@ import android.widget.TextView;
import net.osmand.AndroidUtils;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;

View file

@ -25,8 +25,8 @@ import net.osmand.data.TransportStop;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;

View file

@ -32,7 +32,7 @@ import net.osmand.data.TransportStop;
import net.osmand.map.OsmandRegions;
import net.osmand.map.WorldRegion;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;

View file

@ -12,7 +12,7 @@ import net.osmand.data.TransportStop;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiFilter;
import net.osmand.osm.PoiType;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -14,8 +14,8 @@ import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.TransportStop;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -11,8 +11,8 @@ import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import net.osmand.data.PointDescription;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.settings.backend.OsmandPreference;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -11,8 +11,8 @@ import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.PointImageDrawable;

View file

@ -2,7 +2,7 @@ package net.osmand.plus.mapcontextmenu.editors;
import androidx.annotation.NonNull;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.activities.MapActivity;
public class MapMarkerEditor extends PointEditor {

View file

@ -14,7 +14,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.data.PointDescription;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -17,8 +17,8 @@ import net.osmand.GPXUtilities.WptPt;
import net.osmand.data.LatLon;
import net.osmand.data.WptLocationPoint;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -20,8 +20,8 @@ import net.osmand.data.FavouritePoint.BackgroundType;
import net.osmand.data.LatLon;
import net.osmand.data.WptLocationPoint;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;

View file

@ -0,0 +1,24 @@
package net.osmand.plus.mapmarkers;
import androidx.annotation.DrawableRes;
public class CategoriesSubHeader {
@DrawableRes
private int iconRes;
private MapMarkersGroup group;
public CategoriesSubHeader(int iconRes, MapMarkersGroup group) {
this.iconRes = iconRes;
this.group = group;
}
@DrawableRes
public int getIconRes() {
return iconRes;
}
public MapMarkersGroup getGroup() {
return group;
}
}

View file

@ -63,7 +63,6 @@ import net.osmand.GPXUtilities.WptPt;
import net.osmand.IndexConstants;
import net.osmand.Location;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;
@ -79,7 +78,6 @@ import net.osmand.plus.mapmarkers.CoordinateInputFormats.DDM;
import net.osmand.plus.mapmarkers.CoordinateInputFormats.DMS;
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
import net.osmand.plus.mapmarkers.adapters.CoordinateInputAdapter;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.widgets.EditTextEx;
import net.osmand.util.Algorithms;
import net.osmand.util.LocationParser;
@ -171,7 +169,7 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
private void syncGpx(GPXFile gpxFile) {
MapMarkersHelper helper = getMyApplication().getMapMarkersHelper();
MapMarkersHelper.MapMarkersGroup group = helper.getMarkersGroup(gpxFile);
MapMarkersGroup group = helper.getMarkersGroup(gpxFile);
if (group != null) {
helper.runSynchronization(group);
}

View file

@ -0,0 +1,24 @@
package net.osmand.plus.mapmarkers;
import androidx.annotation.DrawableRes;
public class GroupHeader {
@DrawableRes
private int iconRes;
private MapMarkersGroup group;
public GroupHeader(int iconRes, MapMarkersGroup group) {
this.iconRes = iconRes;
this.group = group;
}
@DrawableRes
public int getIconRes() {
return iconRes;
}
public MapMarkersGroup getGroup() {
return group;
}
}

View file

@ -3,7 +3,6 @@ package net.osmand.plus.mapmarkers;
import android.os.Bundle;
import android.view.View;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.R;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;

View file

@ -0,0 +1,149 @@
package net.osmand.plus.mapmarkers;
import android.content.Context;
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat;
import net.osmand.GPXUtilities.WptPt;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.R;
import net.osmand.util.Algorithms;
import static net.osmand.data.PointDescription.POINT_TYPE_MAP_MARKER;
public class MapMarker implements LocationPoint {
private static int[] colors;
public String id;
public LatLon point;
private PointDescription pointDescription;
public int colorIndex;
public int index;
public boolean history;
public boolean selected;
public int dist;
public long creationDate;
public long visitedDate;
public String nextKey;
public String groupKey;
public String groupName;
public WptPt wptPt;
public FavouritePoint favouritePoint;
public String mapObjectName;
public MapMarker(LatLon point, PointDescription name, int colorIndex, boolean selected, int index) {
this.point = point;
this.pointDescription = name;
this.colorIndex = colorIndex;
this.selected = selected;
this.index = index;
}
public int getType() {
return favouritePoint == null ?
(wptPt == null ? MapMarkersGroup.ANY_TYPE : MapMarkersGroup.GPX_TYPE) :
MapMarkersGroup.FAVORITES_TYPE;
}
public PointDescription getPointDescription(Context ctx) {
return new PointDescription(POINT_TYPE_MAP_MARKER, ctx.getString(R.string.map_marker), getOnlyName());
}
public String getName(Context ctx) {
String name;
PointDescription pd = getPointDescription(ctx);
if (Algorithms.isEmpty(pd.getName())) {
name = pd.getTypeName();
} else {
name = pd.getName();
}
return name;
}
public PointDescription getOriginalPointDescription() {
return pointDescription;
}
public void setOriginalPointDescription(PointDescription pointDescription) {
this.pointDescription = pointDescription;
}
public String getOnlyName() {
return pointDescription == null ? "" : pointDescription.getName();
}
public double getLatitude() {
return point.getLatitude();
}
public double getLongitude() {
return point.getLongitude();
}
@Override
public int getColor() {
return 0;
}
@Override
public boolean isVisible() {
return false;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MapMarker mapMarker = (MapMarker) o;
return colorIndex == mapMarker.colorIndex && point.equals(mapMarker.point);
}
@Override
public int hashCode() {
int result = point.hashCode();
result = 31 * result + colorIndex;
return result;
}
private static final int[] colorsIds = new int[] {
R.color.marker_blue,
R.color.marker_green,
R.color.marker_orange,
R.color.marker_red,
R.color.marker_yellow,
R.color.marker_teal,
R.color.marker_purple
};
public static int[] getColors(Context context) {
if (colors != null) {
return colors;
}
colors = new int[colorsIds.length];
for (int i = 0; i < colorsIds.length; i++) {
colors[i] = ContextCompat.getColor(context, colorsIds[i]);
}
return colors;
}
public static int getColorId(int colorIndex) {
return (colorIndex >= 0 && colorIndex < colorsIds.length) ? colorsIds[colorIndex] : colorsIds[0];
}
public static int getColorIndex(Context context, @ColorInt int color) {
int[] colors = getColors(context);
for (int i = 0; i < colors.length; i++) {
if (color == colors[i]) {
return i;
}
}
return 0;
}
}

View file

@ -15,7 +15,6 @@ import androidx.annotation.Nullable;
import net.osmand.AndroidUtils;
import net.osmand.data.LatLon;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -21,7 +21,6 @@ import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.WptLocationPoint;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;

View file

@ -4,8 +4,6 @@ import androidx.annotation.Nullable;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
@ -13,7 +11,6 @@ import net.osmand.plus.helpers.SearchHistoryHelper;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;

View file

@ -29,9 +29,8 @@ import net.osmand.AndroidUtils;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.plus.LockableViewPager;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersSortByDef;
import net.osmand.plus.MapMarkersHelper.OnGroupSyncedListener;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkersSortByDef;
import net.osmand.plus.mapmarkers.MapMarkersHelper.OnGroupSyncedListener;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
@ -430,7 +429,7 @@ public class MapMarkersDialogFragment extends DialogFragment implements OnGroupS
public void moveAllToHistoryOnClick() {
if (mapActivity != null) {
final MapMarkersHelper helper = mapActivity.getMyApplication().getMapMarkersHelper();
final List<MapMarkersHelper.MapMarker> markers = new ArrayList<>(helper.getMapMarkers());
final List<MapMarker> markers = new ArrayList<>(helper.getMapMarkers());
helper.moveAllActiveMarkersToHistory();
if (viewPager.getCurrentItem() == ACTIVE_MARKERS_POSITION) {
activeFragment.updateAdapter();
@ -482,7 +481,7 @@ public class MapMarkersDialogFragment extends DialogFragment implements OnGroupS
@Override
public void saveGpx(final String fileName) {
final String gpxPath = mapActivity.getMyApplication().getMapMarkersHelper().generateGpx(fileName);
final String gpxPath = mapActivity.getMyApplication().getMapMarkersHelper().saveMarkersToFile(fileName);
snackbar = Snackbar.make(viewPager, String.format(getString(R.string.shared_string_file_is_saved), fileName) + ".", Snackbar.LENGTH_LONG)
.setAction(R.string.shared_string_show, new View.OnClickListener() {
@Override

View file

@ -0,0 +1,183 @@
package net.osmand.plus.mapmarkers;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.plus.wikivoyage.data.TravelArticle;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class MapMarkersGroup {
public static final int ANY_TYPE = -1;
public static final int FAVORITES_TYPE = 0;
public static final int GPX_TYPE = 1;
public static final String MARKERS_SYNC_GROUP_ID = "markers_sync_group_id";
private String id;
private String name;
private int type = ANY_TYPE;
private Set<String> wptCategories;
private long creationDate;
private boolean disabled;
private boolean visible = true;
private boolean wasShown = false;
private boolean visibleUntilRestart;
private List<MapMarker> markers = new ArrayList<>();
private TravelArticle wikivoyageArticle;
// TODO should be removed from this class:
private GroupHeader header;
private CategoriesSubHeader categoriesSubHeader;
private ShowHideHistoryButton showHideHistoryButton;
public MapMarkersGroup() {
}
public MapMarkersGroup(@NonNull String id, @NonNull String name, int type) {
this.id = id;
this.name = name;
this.type = type;
}
public String getId() {
return id;
}
public String getGpxPath() {
return id;
}
public TravelArticle getWikivoyageArticle() {
return wikivoyageArticle;
}
public long getCreationDate() {
return creationDate;
}
public void setCreationDate(long creationDate) {
this.creationDate = creationDate;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public void setMarkers(List<MapMarker> markers) {
this.markers = markers;
}
public void setHeader(GroupHeader header) {
this.header = header;
}
public void setCategoriesSubHeader(CategoriesSubHeader categoriesSubHeader) {
this.categoriesSubHeader = categoriesSubHeader;
}
public void setShowHideHistoryButton(ShowHideHistoryButton showHideHistoryButton) {
this.showHideHistoryButton = showHideHistoryButton;
}
public boolean isWasShown() {
return wasShown;
}
public boolean isVisibleUntilRestart() {
return visibleUntilRestart;
}
public void setWikivoyageArticle(TravelArticle wikivoyageArticle) {
this.wikivoyageArticle = wikivoyageArticle;
}
public String getName() {
return name;
}
public int getType() {
return type;
}
public void setWptCategories(Set<String> wptCategories) {
this.wptCategories = wptCategories;
}
public Set<String> getWptCategories() {
return wptCategories;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public boolean isVisible() {
return visible;
}
public boolean wasShown() {
return wasShown;
}
public void setWasShown(boolean wasShown) {
this.wasShown = wasShown;
}
public void setVisibleUntilRestart(boolean visibleUntilRestart) {
this.visibleUntilRestart = visibleUntilRestart;
}
public List<MapMarker> getMarkers() {
return markers;
}
public GroupHeader getGroupHeader() {
return header;
}
public CategoriesSubHeader getCategoriesSubHeader() {
return categoriesSubHeader;
}
public ShowHideHistoryButton getShowHideHistoryButton() {
return showHideHistoryButton;
}
@Nullable
public String getWptCategoriesString() {
if (wptCategories != null) {
return Algorithms.encodeStringSet(wptCategories);
}
return null;
}
public List<MapMarker> getActiveMarkers() {
List<MapMarker> markers = new ArrayList<>(this.markers);
List<MapMarker> activeMarkers = new ArrayList<>(markers.size());
for (MapMarker marker : markers) {
if (!marker.history) {
activeMarkers.add(marker);
}
}
return activeMarkers;
}
public List<MapMarker> getHistoryMarkers() {
List<MapMarker> historyMarkers = new ArrayList<>();
for (MapMarker marker : markers) {
if (marker.history) {
historyMarkers.add(marker);
}
}
return historyMarkers;
}
}

View file

@ -28,7 +28,6 @@ import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.WptLocationPoint;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;

View file

@ -1,6 +1,5 @@
package net.osmand.plus;
package net.osmand.plus.mapmarkers;
import android.content.Context;
import android.os.AsyncTask;
import androidx.annotation.IntDef;
@ -16,13 +15,16 @@ import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.GPXDatabase;
import net.osmand.plus.GeocodingLookupService;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
import net.osmand.plus.mapmarkers.MarkersPlanRouteContext;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.wikivoyage.data.TravelArticle;
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
import net.osmand.util.Algorithms;
@ -57,6 +59,9 @@ public class MapMarkersHelper {
public static final int BY_DATE_ADDED_ASC = 4;
public static final String VISITED_DATE = "visited_date";
public static final String CREATION_DATE = "creation_date";
private static final Log LOG = PlatformUtil.getLog(MapMarkersHelper.class);
@Retention(RetentionPolicy.SOURCE)
@ -148,12 +153,12 @@ public class MapMarkersHelper {
if (group == null) {
if (noGroup == null) {
noGroup = new MapMarkersGroup();
noGroup.creationDate = Long.MAX_VALUE;
noGroup.setCreationDate(Long.MAX_VALUE);
}
noGroup.getMarkers().add(marker);
} else {
if (marker.creationDate < group.creationDate) {
group.creationDate = marker.creationDate;
if (marker.creationDate < group.getCreationDate()) {
group.setCreationDate(marker.creationDate);
}
group.getMarkers().add(marker);
}
@ -190,16 +195,17 @@ public class MapMarkersHelper {
}
private void lookupAddress(final MapMarker mapMarker) {
if (mapMarker != null && mapMarker.pointDescription.isSearchingAddress(ctx)) {
if (mapMarker != null && mapMarker.getOriginalPointDescription().isSearchingAddress(ctx)) {
cancelPointAddressRequests(mapMarker.point);
AddressLookupRequest lookupRequest = new AddressLookupRequest(mapMarker.point,
new GeocodingLookupService.OnAddressLookupResult() {
@Override
public void geocodingDone(String address) {
PointDescription pointDescription = mapMarker.getOriginalPointDescription();
if (Algorithms.isEmpty(address)) {
mapMarker.pointDescription.setName(PointDescription.getAddressNotFoundStr(ctx));
pointDescription.setName(PointDescription.getAddressNotFoundStr(ctx));
} else {
mapMarker.pointDescription.setName(address);
pointDescription.setName(address);
}
markersDbHelper.updateMarker(mapMarker);
refreshMarker(mapMarker);
@ -291,7 +297,6 @@ public class MapMarkersHelper {
});
}
public void runSynchronization(final @NonNull MapMarkersGroup group) {
ctx.runInUIThread(new Runnable() {
@Override
@ -301,9 +306,8 @@ public class MapMarkersHelper {
});
}
public MapMarkersGroup getMarkersGroup(GPXFile gpx) {
if(gpx == null || gpx.path == null) {
if (gpx == null || gpx.path == null) {
return null;
}
return getMapMarkerGroupById(getMarkerGroupId(new File(gpx.path)), MapMarkersGroup.GPX_TYPE);
@ -313,7 +317,6 @@ public class MapMarkersHelper {
return getMapMarkerGroupById(getMarkerGroupId(favGroup), MapMarkersGroup.FAVORITES_TYPE);
}
public MapMarkersGroup addOrEnableGpxGroup(@NonNull File file) {
updateGpxShowAsMarkers(file);
MapMarkersGroup gr = getMapMarkerGroupById(getMarkerGroupId(file), MapMarkersGroup.GPX_TYPE);
@ -336,7 +339,6 @@ public class MapMarkersHelper {
return gr;
}
public MapMarkersGroup addOrEnableGroup(@NonNull FavoriteGroup group) {
MapMarkersGroup gr = getMarkersGroup(group);
if (gr == null) {
@ -349,7 +351,7 @@ public class MapMarkersHelper {
public void enableGroup(@NonNull MapMarkersGroup gr) {
// check if group doesn't exist internally
if(!mapMarkersGroups.contains(gr)) {
if (!mapMarkersGroups.contains(gr)) {
addGroupInternally(gr);
}
if (gr.isDisabled()) {
@ -393,14 +395,14 @@ public class MapMarkersHelper {
String id = group.getId();
if (id != null) {
markersDbHelper.updateGroupDisabled(id, disabled);
group.disabled = disabled;
group.setDisabled(disabled);
}
}
public void updateGroupWptCategories(@NonNull MapMarkersGroup group, Set<String> wptCategories) {
String id = group.getId();
if (id != null) {
group.wptCategories = wptCategories;
group.setWptCategories(wptCategories);
if (wptCategories != null) {
markersDbHelper.updateGroupCategories(id, group.getWptCategoriesString());
}
@ -412,7 +414,7 @@ public class MapMarkersHelper {
markersDbHelper.removeActiveMarkersFromGroup(group.getId());
removeFromMapMarkersList(group.getActiveMarkers());
if (updateGroup) {
group.markers = group.getHistoryMarkers();
group.setMarkers(group.getHistoryMarkers());
updateGroup(group);
}
reorderActiveMarkersIfNeeded();
@ -435,12 +437,12 @@ public class MapMarkersHelper {
ShowHideHistoryButton showHideHistoryButton = mapMarkersGroup.getShowHideHistoryButton();
if (showHideHistoryButton != null) {
if (historyMarkersCount == 0) {
mapMarkersGroup.showHideHistoryButton = null;
mapMarkersGroup.setShowHideHistoryButton(null);
}
} else if (historyMarkersCount > 0) {
showHideHistoryButton = new ShowHideHistoryButton();
showHideHistoryButton.showHistory = false;
mapMarkersGroup.showHideHistoryButton = showHideHistoryButton;
mapMarkersGroup.setShowHideHistoryButton(showHideHistoryButton);
}
}
@ -460,10 +462,8 @@ public class MapMarkersHelper {
sortMarkers(mapMarkersGroup.getMarkers(), false, BY_DATE_ADDED_DESC);
}
} else {
mapMarkersGroup = new MapMarkersGroup();
mapMarkersGroup.id = marker.groupKey;
mapMarkersGroup.name = marker.groupName;
mapMarkersGroup.creationDate = Long.MAX_VALUE;
mapMarkersGroup = new MapMarkersGroup(marker.groupKey, marker.groupName, MapMarkersGroup.ANY_TYPE);
mapMarkersGroup.setCreationDate(Long.MAX_VALUE);
mapMarkersGroup.getMarkers().add(marker);
addToGroupsList(mapMarkersGroup);
sortGroups();
@ -473,18 +473,19 @@ public class MapMarkersHelper {
}
private void createHeadersInGroup(@NonNull MapMarkersGroup group) {
GroupHeader header = new GroupHeader();
CategoriesSubHeader categoriesSubHeader = new CategoriesSubHeader();
int type = group.getType();
int headerIconId = 0;
int subHeaderIconId = 0;
if (type != -1) {
header.iconRes = type == MapMarkersGroup.FAVORITES_TYPE
headerIconId = type == MapMarkersGroup.FAVORITES_TYPE
? R.drawable.ic_action_favorite : R.drawable.ic_action_polygom_dark;
categoriesSubHeader.iconRes = R.drawable.ic_action_filter;
subHeaderIconId = R.drawable.ic_action_filter;
}
header.group = group;
categoriesSubHeader.group = group;
group.header = header;
group.categoriesSubHeader = categoriesSubHeader;
GroupHeader header = new GroupHeader(headerIconId, group);
CategoriesSubHeader categoriesSubHeader = new CategoriesSubHeader(subHeaderIconId, group);
group.setHeader(header);
group.setCategoriesSubHeader(categoriesSubHeader);
}
private void removeMarkerFromGroup(MapMarker marker) {
@ -502,8 +503,8 @@ public class MapMarkersHelper {
Collections.sort(mapMarkersGroups, new Comparator<MapMarkersGroup>() {
@Override
public int compare(MapMarkersGroup group1, MapMarkersGroup group2) {
long t1 = group1.creationDate;
long t2 = group2.creationDate;
long t1 = group1.getCreationDate();
long t2 = group2.getCreationDate();
return (t1 > t2) ? -1 : ((t1 == t2) ? 0 : 1);
}
});
@ -515,7 +516,7 @@ public class MapMarkersHelper {
for (MapMarkersGroup group : mapMarkersGroups) {
if ((id == null && group.getId() == null)
|| (group.getId() != null && group.getId().equals(id))) {
if(type == MapMarkersGroup.ANY_TYPE || type == group.type) {
if (type == MapMarkersGroup.ANY_TYPE || type == group.getType()) {
return group;
}
}
@ -549,7 +550,7 @@ public class MapMarkersHelper {
MapMarkersGroup search = getMarkersGroup(selected.getGpxFile());
if (search == null && selected.getGpxFile() != null && selected.getGpxFile().path != null) {
MapMarkersGroup group = createGPXMarkerGroup(new File(selected.getGpxFile().path));
group.disabled = true;
group.setDisabled(true);
createHeadersInGroup(group);
res.add(group);
}
@ -561,16 +562,16 @@ public class MapMarkersHelper {
public List<MapMarkersGroup> getGroupsForSavedArticlesTravelBook() {
List<MapMarkersGroup> res = new ArrayList<>();
TravelDbHelper travelDbHelper = ctx.getTravelDbHelper();
if(travelDbHelper.getSelectedTravelBook() != null) {
if (travelDbHelper.getSelectedTravelBook() != null) {
List<TravelArticle> savedArticles = travelDbHelper.getLocalDataHelper().getSavedArticles();
for (TravelArticle art : savedArticles) {
String gpxName = travelDbHelper.getGPXName(art);
File path = ctx.getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName);
LOG.debug("Article group " + path.getAbsolutePath() + " " + path.exists()) ;
LOG.debug("Article group " + path.getAbsolutePath() + " " + path.exists());
MapMarkersGroup search = getMapMarkerGroupById(getMarkerGroupId(path), MapMarkersGroup.GPX_TYPE);
if (search == null) {
MapMarkersGroup group = createGPXMarkerGroup(path);
group.disabled = true;
group.setDisabled(true);
createHeadersInGroup(group);
res.add(group);
}
@ -1004,7 +1005,8 @@ public class MapMarkersHelper {
});
}
public String generateGpx(String fileName) {
public String saveMarkersToFile(String fileName) {
GPXFile gpxFile = generateGpx();
String dirName = IndexConstants.GPX_INDEX_DIR + IndexConstants.MAP_MARKERS_INDEX_DIR;
File dir = ctx.getAppPath(dirName);
if (!dir.exists()) {
@ -1012,18 +1014,54 @@ public class MapMarkersHelper {
}
String uniqueFileName = FileUtils.createUniqueFileName(ctx, fileName, dirName, IndexConstants.GPX_FILE_EXT);
File fout = new File(dir, uniqueFileName + IndexConstants.GPX_FILE_EXT);
GPXUtilities.writeGpxFile(fout, gpxFile);
GPXFile file = new GPXFile(Version.getFullVersion(ctx));
for (MapMarker marker : mapMarkers) {
return fout.getAbsolutePath();
}
public GPXFile generateGpx() {
return generateGpx(mapMarkers, false);
}
public GPXFile generateGpx(List<MapMarker> markers, boolean completeBackup) {
GPXFile gpxFile = new GPXFile(Version.getFullVersion(ctx));
for (MapMarker marker : markers) {
WptPt wpt = new WptPt();
wpt.lat = marker.getLatitude();
wpt.lon = marker.getLongitude();
wpt.setColor(ctx.getResources().getColor(MapMarker.getColorId(marker.colorIndex)));
wpt.name = marker.getOnlyName();
file.addPoint(wpt);
wpt.setColor(ContextCompat.getColor(ctx, MapMarker.getColorId(marker.colorIndex)));
if (completeBackup) {
if (marker.creationDate != 0) {
wpt.getExtensionsToWrite().put(CREATION_DATE, String.valueOf(marker.creationDate));
}
GPXUtilities.writeGpxFile(fout, file);
return fout.getAbsolutePath();
if (marker.visitedDate != 0) {
wpt.getExtensionsToWrite().put(VISITED_DATE, String.valueOf(marker.visitedDate));
}
}
gpxFile.addPoint(wpt);
}
return gpxFile;
}
public List<MapMarker> readMarkersFromGpx(GPXFile gpxFile, boolean history) {
List<MapMarker> mapMarkers = new ArrayList<>();
for (WptPt point : gpxFile.getPoints()) {
LatLon latLon = new LatLon(point.lat, point.lon);
int colorIndex = MapMarker.getColorIndex(ctx, point.getColor());
PointDescription name = new PointDescription(PointDescription.POINT_TYPE_LOCATION, point.name);
MapMarker marker = new MapMarker(latLon, name, colorIndex, false, 0);
String visitedDateStr = point.getExtensionsToRead().get(VISITED_DATE);
String creationDateStr = point.getExtensionsToRead().get(CREATION_DATE);
marker.visitedDate = Algorithms.parseLongSilently(visitedDateStr, 0);
marker.creationDate = Algorithms.parseLongSilently(creationDateStr, 0);
marker.nextKey = history ? MapMarkersDbHelper.HISTORY_NEXT_VALUE : MapMarkersDbHelper.TAIL_NEXT_VALUE;
mapMarkers.add(marker);
}
return mapMarkers;
}
// ---------------------------------------------------------------------------------------------
@ -1155,7 +1193,7 @@ public class MapMarkersHelper {
if (favGroup == null) {
return;
}
group.visible = favGroup.isVisible();
group.setVisible(favGroup.isVisible());
if (!group.isVisible() || group.isDisabled()) {
removeGroupActiveMarkers(group, true);
return;
@ -1175,17 +1213,17 @@ public class MapMarkersHelper {
String gpxPath = group.getId();
SelectedGpxFile selectedGpxFile = gpxHelper.getSelectedFileByPath(gpxPath);
GPXFile gpx = selectedGpxFile == null ? null : selectedGpxFile.getGpxFile();
group.visible = gpx != null || group.visibleUntilRestart;
group.setVisible(gpx != null || group.isVisibleUntilRestart());
if (gpx == null || group.isDisabled()) {
removeGroupActiveMarkers(group, true);
return;
}
boolean addAll = group.wptCategories == null || group.wptCategories.isEmpty();
boolean addAll = group.getWptCategories() == null || group.getWptCategories().isEmpty();
List<WptPt> gpxPoints = new ArrayList<>(gpx.getPoints());
for (WptPt pt : gpxPoints) {
if (addAll || group.wptCategories.contains(pt.category)
|| (pt.category == null && group.wptCategories.contains(""))) {
if (addAll || group.getWptCategories().contains(pt.category)
|| (pt.category == null && group.getWptCategories().contains(""))) {
addNewMarkerIfNeeded(group, groupMarkers, new LatLon(pt.lat, pt.lon), pt.name, null, pt);
}
}
@ -1208,295 +1246,4 @@ public class MapMarkersHelper {
}
}
}
public static class MapMarkersGroup {
public static final int ANY_TYPE = -1;
public static final int FAVORITES_TYPE = 0;
public static final int GPX_TYPE = 1;
public static final String MARKERS_SYNC_GROUP_ID = "markers_sync_group_id";
private String id;
private String name;
private int type = -1;
private Set<String> wptCategories;
private long creationDate;
private boolean disabled;
private boolean visible = true;
private boolean wasShown = false;
private boolean visibleUntilRestart;
private List<MapMarker> markers = new ArrayList<>();
private TravelArticle wikivoyageArticle;
// TODO should be removed from this class:
private GroupHeader header;
private CategoriesSubHeader categoriesSubHeader;
private ShowHideHistoryButton showHideHistoryButton;
public MapMarkersGroup() {
}
public MapMarkersGroup(@NonNull String id, @NonNull String name, int type) {
this.id = id;
this.name = name;
this.type = type;
}
public String getId() {
return id;
}
public String getGpxPath() {
return id;
}
public TravelArticle getWikivoyageArticle() {
return wikivoyageArticle;
}
public void setWikivoyageArticle(TravelArticle wikivoyageArticle) {
this.wikivoyageArticle = wikivoyageArticle;
}
public String getName() {
return name;
}
public int getType() {
return type;
}
public void setWptCategories(Set<String> wptCategories) {
this.wptCategories = wptCategories;
}
public Set<String> getWptCategories() {
return wptCategories;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public boolean isVisible() {
return visible;
}
public boolean wasShown() {
return wasShown;
}
public void setWasShown(boolean wasShown) {
this.wasShown = wasShown;
}
public void setVisibleUntilRestart(boolean visibleUntilRestart) {
this.visibleUntilRestart = visibleUntilRestart;
}
public List<MapMarker> getMarkers() {
return markers;
}
public GroupHeader getGroupHeader() {
return header;
}
public CategoriesSubHeader getCategoriesSubHeader() {
return categoriesSubHeader;
}
public ShowHideHistoryButton getShowHideHistoryButton() {
return showHideHistoryButton;
}
@Nullable
public String getWptCategoriesString() {
if (wptCategories != null) {
return Algorithms.encodeStringSet(wptCategories);
}
return null;
}
public List<MapMarker> getActiveMarkers() {
List<MapMarker> markers = new ArrayList<>(this.markers);
List<MapMarker> activeMarkers = new ArrayList<>(markers.size());
for (MapMarker marker : markers) {
if (!marker.history) {
activeMarkers.add(marker);
}
}
return activeMarkers;
}
public List<MapMarker> getHistoryMarkers() {
List<MapMarker> historyMarkers = new ArrayList<>();
for (MapMarker marker : markers) {
if (marker.history) {
historyMarkers.add(marker);
}
}
return historyMarkers;
}
}
public static class ShowHideHistoryButton {
public boolean showHistory;
}
public static class GroupHeader {
private int iconRes;
private MapMarkersGroup group;
public int getIconRes() {
return iconRes;
}
public MapMarkersGroup getGroup() {
return group;
}
}
public static class CategoriesSubHeader {
private int iconRes;
private MapMarkersGroup group;
public int getIconRes() {
return iconRes;
}
public MapMarkersGroup getGroup() {
return group;
}
}
public static class MapMarker implements LocationPoint {
private static int[] colors;
public String id;
public LatLon point;
private PointDescription pointDescription;
public int colorIndex;
public int index;
public boolean history;
public boolean selected;
public int dist;
public long creationDate;
public long visitedDate;
public String nextKey;
public String groupKey;
public String groupName;
public WptPt wptPt;
public FavouritePoint favouritePoint;
public String mapObjectName;
public MapMarker(LatLon point, PointDescription name, int colorIndex, boolean selected, int index) {
this.point = point;
this.pointDescription = name;
this.colorIndex = colorIndex;
this.selected = selected;
this.index = index;
}
public int getType() {
return favouritePoint == null ?
(wptPt == null ? MapMarkersGroup.ANY_TYPE : MapMarkersGroup.GPX_TYPE) :
MapMarkersGroup.FAVORITES_TYPE;
}
public PointDescription getPointDescription(Context ctx) {
return new PointDescription(POINT_TYPE_MAP_MARKER, ctx.getString(R.string.map_marker), getOnlyName());
}
public String getName(Context ctx) {
String name;
PointDescription pd = getPointDescription(ctx);
if (Algorithms.isEmpty(pd.getName())) {
name = pd.getTypeName();
} else {
name = pd.getName();
}
return name;
}
public PointDescription getOriginalPointDescription() {
return pointDescription;
}
public void setOriginalPointDescription(PointDescription pointDescription) {
this.pointDescription = pointDescription;
}
public String getOnlyName() {
return pointDescription == null ? "" : pointDescription.getName();
}
public double getLatitude() {
return point.getLatitude();
}
public double getLongitude() {
return point.getLongitude();
}
@Override
public int getColor() {
return 0;
}
@Override
public boolean isVisible() {
return false;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MapMarker mapMarker = (MapMarker) o;
return colorIndex == mapMarker.colorIndex && point.equals(mapMarker.point);
}
@Override
public int hashCode() {
int result = point.hashCode();
result = 31 * result + colorIndex;
return result;
}
private static final int[] colorsIds = new int[]{
R.color.marker_blue,
R.color.marker_green,
R.color.marker_orange,
R.color.marker_red,
R.color.marker_yellow,
R.color.marker_teal,
R.color.marker_purple
};
public static int[] getColors(Context context) {
if (colors != null) {
return colors;
}
colors = new int[colorsIds.length];
for (int i = 0; i < colorsIds.length; i++) {
colors[i] = ContextCompat.getColor(context, colorsIds[i]);
}
return colors;
}
public static int getColorId(int colorIndex) {
return (colorIndex >= 0 && colorIndex < colorsIds.length) ? colorsIds[colorIndex] : colorsIds[0];
}
}
}

View file

@ -20,8 +20,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;

View file

@ -7,7 +7,6 @@ import net.osmand.data.LatLon;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.GPXUtilities.TrkSegment;
import net.osmand.GPXUtilities.WptPt;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.routing.RouteCalculationParams;
import net.osmand.plus.routing.RouteCalculationResult;

View file

@ -4,8 +4,7 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersSortByDef;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkersSortByDef;
import net.osmand.plus.R;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;

View file

@ -39,8 +39,6 @@ import net.osmand.TspAnt;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;

View file

@ -13,8 +13,6 @@ import net.osmand.GPXUtilities.WptPt;
import net.osmand.IndexConstants;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;

View file

@ -0,0 +1,5 @@
package net.osmand.plus.mapmarkers;
public class ShowHideHistoryButton {
public boolean showHistory;
}

View file

@ -13,9 +13,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import net.osmand.data.LatLon;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
@ -215,7 +214,7 @@ public class MapMarkersActiveAdapter extends RecyclerView.Adapter<MapMarkerItemV
final int pos = holder.getAdapterPosition();
final MapMarker marker = getItem(pos);
mapActivity.getMyApplication().getMapMarkersHelper().moveMapMarkerToHistory(marker);
MapMarkersHelper.MapMarkersGroup group = mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkerGroupById(marker.groupKey,
MapMarkersGroup group = mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkerGroupById(marker.groupKey,
MapMarkersGroup.ANY_TYPE);
if (group != null) {
mapActivity.getMyApplication().getMapMarkersHelper().updateGroup(group);

View file

@ -21,11 +21,12 @@ import net.osmand.IndexConstants;
import net.osmand.data.LatLon;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.GroupHeader;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.MapMarkersHelper.ShowHideHistoryButton;
import net.osmand.plus.mapmarkers.CategoriesSubHeader;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.GroupHeader;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.mapmarkers.ShowHideHistoryButton;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
@ -159,7 +160,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
items.add(header);
if (!group.isDisabled()) {
if (group.getWptCategories() != null && !group.getWptCategories().isEmpty()) {
MapMarkersHelper.CategoriesSubHeader categoriesSubHeader = group.getCategoriesSubHeader();
CategoriesSubHeader categoriesSubHeader = group.getCategoriesSubHeader();
items.add(categoriesSubHeader);
}
TravelDbHelper travelDbHelper = mapActivity.getMyApplication().getTravelDbHelper();
@ -526,8 +527,8 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
} else if (holder instanceof MapMarkerCategoriesViewHolder) {
final MapMarkerCategoriesViewHolder categoriesViewHolder = (MapMarkerCategoriesViewHolder) holder;
final Object header = getItem(position);
if (header instanceof MapMarkersHelper.CategoriesSubHeader) {
final MapMarkersHelper.CategoriesSubHeader categoriesSubHeader = (MapMarkersHelper.CategoriesSubHeader) header;
if (header instanceof CategoriesSubHeader) {
final CategoriesSubHeader categoriesSubHeader = (CategoriesSubHeader) header;
final MapMarkersGroup group = categoriesSubHeader.getGroup();
View.OnClickListener openChooseCategoriesDialog = new View.OnClickListener() {
@Override
@ -599,7 +600,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
return HEADER_TYPE;
} else if (item instanceof ShowHideHistoryButton) {
return SHOW_HIDE_HISTORY_TYPE;
} else if (item instanceof MapMarkersHelper.CategoriesSubHeader) {
} else if (item instanceof CategoriesSubHeader) {
return CATEGORIES_TYPE;
} else {
throw new IllegalArgumentException("Unsupported view type");

View file

@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;

View file

@ -17,7 +17,7 @@ import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.GeocodingLookupService.OnAddressLookupResult;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;

View file

@ -67,7 +67,7 @@ public class LoginBottomSheetFragment extends MenuBottomSheetDialogFragment {
@Override
protected int getThirdBottomButtonTextId() {
return R.string.sing_in_with_open_street_map;
return R.string.sign_in_with_open_street_map;
}
@Override

View file

@ -28,8 +28,8 @@ import net.osmand.GPXUtilities.GPXFile;
import net.osmand.GPXUtilities.WptPt;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.EditFavoriteGroupDialogFragment.FavoriteColorAdapter;

View file

@ -54,8 +54,8 @@ import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;

View file

@ -6,18 +6,14 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.StyleSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
@ -34,8 +30,6 @@ import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.EnumAdapter;
import net.osmand.plus.activities.EnumAdapter.IEnumWithResource;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.TabActivity;
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
@ -45,6 +39,7 @@ import net.osmand.plus.myplaces.AvailableGPXFragment;
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
import net.osmand.plus.myplaces.FavoritesActivity;
import net.osmand.plus.osmedit.OsmPoint.Action;
import net.osmand.plus.osmedit.dialogs.SendGpxBottomSheetFragment;
import net.osmand.plus.quickaction.QuickActionType;
import net.osmand.plus.settings.backend.OsmandPreference;
import net.osmand.plus.settings.backend.OsmandSettings;
@ -437,24 +432,34 @@ public class OsmEditingPlugin extends OsmandPlugin {
}
}
public enum UploadVisibility implements IEnumWithResource {
Public(R.string.gpxup_public),
Identifiable(R.string.gpxup_identifiable),
Trackable(R.string.gpxup_trackable),
Private(R.string.gpxup_private);
private final int resourceId;
public enum UploadVisibility {
PUBLIC(R.string.gpxup_public, R.string.gpx_upload_public_visibility_descr),
IDENTIFIABLE(R.string.gpxup_identifiable, R.string.gpx_upload_identifiable_visibility_descr),
TRACKABLE(R.string.gpxup_trackable, R.string.gpx_upload_trackable_visibility_descr),
PRIVATE(R.string.gpxup_private, R.string.gpx_upload_private_visibility_descr);
UploadVisibility(int resourceId) {
this.resourceId = resourceId;
@StringRes
private final int titleId;
@StringRes
private final int descriptionId;
UploadVisibility(int titleId, int descriptionId) {
this.titleId = titleId;
this.descriptionId = descriptionId;
}
public String asURLparam() {
return name().toLowerCase();
}
@Override
public int stringResource() {
return resourceId;
@StringRes
public int getTitleId() {
return titleId;
}
@StringRes
public int getDescriptionId() {
return descriptionId;
}
}
@ -465,36 +470,11 @@ public class OsmEditingPlugin extends OsmandPlugin {
if ((Algorithms.isEmpty(name) || Algorithms.isEmpty(pwd)) && Algorithms.isEmpty(authToken)) {
LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), fragment.getTargetFragment());
return false;
}
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View view = inflater.inflate(R.layout.send_gpx_osm, null);
final EditText descr = (EditText) view.findViewById(R.id.memory_size);
if (info.length > 0 && info[0].getFileName() != null) {
int dt = info[0].getFileName().indexOf('.');
descr.setText(info[0].getFileName().substring(0, dt));
}
final EditText tags = (EditText) view.findViewById(R.id.TagsText);
final Spinner visibility = ((Spinner) view.findViewById(R.id.Visibility));
EnumAdapter<UploadVisibility> adapter = new EnumAdapter<>(activity, android.R.layout.simple_spinner_item, UploadVisibility.values());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
visibility.setAdapter(adapter);
visibility.setSelection(0);
builder.setView(view);
builder.setNegativeButton(R.string.shared_string_no, null);
builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new UploadGPXFilesTask(activity, descr.getText().toString(), tags.getText().toString(),
(UploadVisibility) visibility.getItemAtPosition(visibility.getSelectedItemPosition())
).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, info);
}
});
builder.show();
} else {
SendGpxBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), fragment.getTargetFragment(), info);
return true;
}
}
@Override
public String getName() {

View file

@ -1,29 +1,36 @@
package net.osmand.plus.osmedit;
import java.io.File;
import android.app.Activity;
import android.os.AsyncTask;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.AndroidUtils;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
import net.osmand.plus.osmedit.OsmEditingPlugin.UploadVisibility;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.Toast;
import java.io.File;
import java.lang.ref.WeakReference;
public class UploadGPXFilesTask extends AsyncTask<GpxInfo, String, String> {
private final OsmandApplication app;
private final WeakReference<Activity> activityRef;
private final String visibility;
private final String description;
private final String tagstring;
private Activity la;
public UploadGPXFilesTask(Activity la,
String description, String tagstring, UploadVisibility visibility) {
this.la = la;
public UploadGPXFilesTask(@NonNull Activity activity, String description, String tagsString,
@Nullable UploadVisibility visibility) {
app = (OsmandApplication) activity.getApplication();
this.activityRef = new WeakReference<>(activity);
this.description = description;
this.tagstring = tagstring;
this.visibility = visibility != null ? visibility.asURLparam() : UploadVisibility.Private.asURLparam();
this.tagstring = tagsString;
this.visibility = visibility != null ? visibility.asURLparam() : UploadVisibility.PRIVATE.asURLparam();
}
@Override
@ -32,10 +39,9 @@ public class UploadGPXFilesTask extends AsyncTask<GpxInfo, String, String> {
int total = 0;
for (GpxInfo info : params) {
if (!isCancelled() && info.file != null) {
String warning = null;
File file = info.file;
warning = new OpenstreetmapRemoteUtil((OsmandApplication) la.getApplication()).uploadGPXFile(tagstring, description, visibility,
file);
OpenstreetmapRemoteUtil remoteUtil = new OpenstreetmapRemoteUtil(app);
String warning = remoteUtil.uploadGPXFile(tagstring, description, visibility, file);
total++;
if (warning == null) {
count++;
@ -44,7 +50,7 @@ public class UploadGPXFilesTask extends AsyncTask<GpxInfo, String, String> {
}
}
}
return la.getString(R.string.local_index_items_uploaded, count, total);
return app.getString(R.string.local_index_items_uploaded, count, total);
}
@Override
@ -57,19 +63,24 @@ public class UploadGPXFilesTask extends AsyncTask<GpxInfo, String, String> {
}
b.append(values[i]);
}
Toast.makeText(la, b.toString(), Toast.LENGTH_LONG).show();
app.showToastMessage(b.toString());
}
}
@Override
protected void onPreExecute() {
la.setProgressBarIndeterminateVisibility(true);
Activity activity = activityRef.get();
if (AndroidUtils.isActivityNotDestroyed(activity)) {
activity.setProgressBarIndeterminateVisibility(true);
}
}
@Override
protected void onPostExecute(String result) {
la.setProgressBarIndeterminateVisibility(false);
Toast.makeText(la, result, Toast.LENGTH_LONG).show();
Activity activity = activityRef.get();
if (AndroidUtils.isActivityNotDestroyed(activity)) {
activity.setProgressBarIndeterminateVisibility(false);
}
app.showToastMessage(result);
}
}

View file

@ -0,0 +1,145 @@
package net.osmand.plus.osmedit.dialogs;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textfield.TextInputEditText;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionAdapterListener;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionItem;
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.osmedit.OsmEditingPlugin.UploadVisibility;
import net.osmand.plus.osmedit.UploadGPXFilesTask;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.List;
public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
public static final String TAG = SendGpxBottomSheetFragment.class.getSimpleName();
private GpxInfo[] gpxInfos;
private UploadVisibility selectedUploadVisibility = UploadVisibility.PUBLIC;
private TextInputEditText tagsField;
private TextInputEditText messageField;
public void setGpxInfos(GpxInfo[] gpxInfos) {
this.gpxInfos = gpxInfos;
}
@Override
public void createMenuItems(Bundle savedInstanceState) {
OsmandApplication app = requiredMyApplication();
OsmandSettings settings = app.getSettings();
LayoutInflater themedInflater = UiUtilities.getInflater(app, nightMode);
View sendOsmPoiView = themedInflater.inflate(R.layout.send_gpx_fragment, null);
tagsField = sendOsmPoiView.findViewById(R.id.tags_field);
messageField = sendOsmPoiView.findViewById(R.id.message_field);
TextView accountName = sendOsmPoiView.findViewById(R.id.user_name);
if (!Algorithms.isEmpty(settings.USER_DISPLAY_NAME.get())) {
accountName.setText(settings.USER_DISPLAY_NAME.get());
} else {
accountName.setText(settings.USER_NAME.get());
}
String fileName = gpxInfos[0].getFileName();
messageField.setText(Algorithms.getFileNameWithoutExtension(fileName));
final TextView visibilityName = sendOsmPoiView.findViewById(R.id.visibility_name);
final TextView visibilityDescription = sendOsmPoiView.findViewById(R.id.visibility_description);
visibilityName.setText(selectedUploadVisibility.getTitleId());
visibilityDescription.setText(selectedUploadVisibility.getDescriptionId());
List<HorizontalSelectionItem> itemsVisibility = new ArrayList<>();
for (UploadVisibility visibilityType : UploadVisibility.values()) {
String title = getString(visibilityType.getTitleId());
HorizontalSelectionItem item = new HorizontalSelectionAdapter.HorizontalSelectionItem(title, visibilityType);
itemsVisibility.add(item);
}
final HorizontalSelectionAdapter horizontalSelectionAdapter = new HorizontalSelectionAdapter(app, nightMode);
horizontalSelectionAdapter.setItems(itemsVisibility);
horizontalSelectionAdapter.setSelectedItemByTitle(getString(selectedUploadVisibility.getTitleId()));
horizontalSelectionAdapter.setListener(new HorizontalSelectionAdapterListener() {
@Override
public void onItemSelected(HorizontalSelectionAdapter.HorizontalSelectionItem item) {
selectedUploadVisibility = (OsmEditingPlugin.UploadVisibility) item.getObject();
visibilityName.setText(selectedUploadVisibility.getTitleId());
visibilityDescription.setText(selectedUploadVisibility.getDescriptionId());
horizontalSelectionAdapter.notifyDataSetChanged();
}
});
RecyclerView iconCategoriesRecyclerView = sendOsmPoiView.findViewById(R.id.description_view);
iconCategoriesRecyclerView.setAdapter(horizontalSelectionAdapter);
iconCategoriesRecyclerView.setLayoutManager(new LinearLayoutManager(app, RecyclerView.HORIZONTAL, false));
horizontalSelectionAdapter.notifyDataSetChanged();
SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
.setCustomView(sendOsmPoiView)
.create();
items.add(titleItem);
}
@Override
protected DialogButtonType getRightBottomButtonType() {
return DialogButtonType.PRIMARY;
}
@Override
protected int getRightBottomButtonTextId() {
return R.string.shared_string_upload;
}
@Override
protected void onRightBottomButtonClick() {
FragmentActivity activity = getActivity();
if (activity != null) {
Editable tagsText = tagsField.getText();
Editable descrText = messageField.getText();
String tags = tagsText != null ? tagsText.toString() : "";
String descr = descrText != null ? descrText.toString() : "";
UploadGPXFilesTask uploadGPXFilesTask = new UploadGPXFilesTask(activity, descr, tags, selectedUploadVisibility);
uploadGPXFilesTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, gpxInfos);
}
dismiss();
}
public static void showInstance(@NonNull FragmentManager fragmentManager, @Nullable Fragment targetFragment, GpxInfo[] info) {
if (!fragmentManager.isStateSaved()) {
SendGpxBottomSheetFragment fragment = new SendGpxBottomSheetFragment();
fragment.setTargetFragment(targetFragment, 0);
fragment.setGpxInfos(info);
fragment.setRetainInstance(true);
fragment.show(fragmentManager, TAG);
}
}
}

View file

@ -27,8 +27,8 @@ import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;

View file

@ -51,7 +51,7 @@ import net.osmand.plus.GeocodingLookupService;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.GeocodingLookupService.OnAddressLookupResult;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandSettings;

View file

@ -14,7 +14,7 @@ import androidx.appcompat.view.ContextThemeWrapper;
import net.osmand.AndroidUtils;
import net.osmand.data.LatLon;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.MapViewTrackingUtilities;

View file

@ -16,5 +16,7 @@ public enum ExportSettingsType {
OFFLINE_MAPS,
FAVORITES,
TTS_VOICE,
VOICE
VOICE,
ACTIVE_MARKERS,
HISTORY_MARKERS
}

View file

@ -16,10 +16,7 @@ import net.osmand.plus.R;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@ -69,11 +66,6 @@ public class FavoritesSettingsItem extends CollectionSettingsItem<FavoriteGroup>
return ctx.getString(R.string.shared_string_favorites);
}
@NonNull
public String getDefaultFileName() {
return getName() + getDefaultFileExtension();
}
@NonNull
public String getDefaultFileExtension() {
return GPX_FILE_EXT;
@ -177,21 +169,9 @@ public class FavoritesSettingsItem extends CollectionSettingsItem<FavoriteGroup>
@Nullable
@Override
SettingsItemWriter<FavoritesSettingsItem> getWriter() {
return new SettingsItemWriter<FavoritesSettingsItem>(this) {
@Override
public boolean writeToStream(@NonNull OutputStream outputStream) throws IOException {
SettingsItemWriter<? extends SettingsItem> getWriter() {
List<FavouritePoint> favourites = getPointsFromGroups(items);
GPXFile gpxFile = favoritesHelper.asGpxFile(favourites);
Exception error = GPXUtilities.writeGpx(new OutputStreamWriter(outputStream, "UTF-8"), gpxFile);
if (error != null) {
warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
SettingsHelper.LOG.error("Failed write to gpx file", error);
return false;
}
return true;
}
};
return getGpxWriter(gpxFile);
}
}

View file

@ -0,0 +1,160 @@
package net.osmand.plus.settings.backend.backup;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.GPXUtilities;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.settings.backend.ExportSettingsType;
import net.osmand.util.Algorithms;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import static net.osmand.IndexConstants.GPX_FILE_EXT;
public class HistoryMarkersSettingsItem extends CollectionSettingsItem<MapMarker> {
private MapMarkersHelper markersHelper;
public HistoryMarkersSettingsItem(@NonNull OsmandApplication app, @NonNull List<MapMarker> items) {
super(app, null, items);
}
public HistoryMarkersSettingsItem(@NonNull OsmandApplication app, @Nullable HistoryMarkersSettingsItem baseItem, @NonNull List<MapMarker> items) {
super(app, baseItem, items);
}
HistoryMarkersSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(app, json);
}
@Override
protected void init() {
super.init();
markersHelper = app.getMapMarkersHelper();
existingItems = new ArrayList<>(markersHelper.getMapMarkersHistory());
}
@NonNull
@Override
public SettingsItemType getType() {
return SettingsItemType.HISTORY_MARKERS;
}
@NonNull
@Override
public String getName() {
return "history_markers";
}
@NonNull
@Override
public String getPublicName(@NonNull Context ctx) {
return ctx.getString(R.string.markers_history);
}
@NonNull
public String getDefaultFileExtension() {
return GPX_FILE_EXT;
}
@Override
public void apply() {
List<MapMarker> newItems = getNewItems();
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
appliedItems = new ArrayList<>(newItems);
for (MapMarker duplicate : duplicateItems) {
if (shouldReplace) {
MapMarker existingMarker = markersHelper.getMapMarker(duplicate.point);
markersHelper.removeMarker(existingMarker);
}
appliedItems.add(shouldReplace ? duplicate : renameItem(duplicate));
}
for (MapMarker marker : appliedItems) {
markersHelper.moveMapMarkerToHistory(marker);
}
}
}
@Override
public boolean isDuplicate(@NonNull MapMarker mapMarker) {
for (MapMarker marker : existingItems) {
if (marker.equals(mapMarker)
&& Algorithms.objectEquals(marker.getOriginalPointDescription(), mapMarker.getOriginalPointDescription())) {
return true;
}
}
return false;
}
@Override
public boolean shouldReadOnCollecting() {
return true;
}
@NonNull
@Override
public MapMarker renameItem(@NonNull MapMarker item) {
int number = 0;
while (true) {
number++;
String name = item.getOnlyName() + "_" + number;
PointDescription description = new PointDescription(PointDescription.POINT_TYPE_LOCATION, name);
MapMarker renamedMarker = new MapMarker(item.point, description, item.getColor(), item.selected, item.index);
if (!isDuplicate(renamedMarker)) {
renamedMarker.nextKey = MapMarkersDbHelper.HISTORY_NEXT_VALUE;
return renamedMarker;
}
}
}
public MapMarkersGroup getMarkersGroup() {
String name = app.getString(R.string.markers_history);
String groupId = ExportSettingsType.HISTORY_MARKERS.name();
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
markersGroup.setMarkers(items);
return markersGroup;
}
@Nullable
@Override
SettingsItemReader<HistoryMarkersSettingsItem> getReader() {
return new SettingsItemReader<HistoryMarkersSettingsItem>(this) {
@Override
public void readFromStream(@NonNull InputStream inputStream, String entryName) throws IllegalArgumentException {
GPXFile gpxFile = GPXUtilities.loadGPXFile(inputStream);
if (gpxFile.error != null) {
warnings.add(app.getString(R.string.settings_item_read_error, String.valueOf(getType())));
SettingsHelper.LOG.error("Failed read gpx file", gpxFile.error);
} else {
List<MapMarker> mapMarkers = markersHelper.readMarkersFromGpx(gpxFile, true);
items.addAll(mapMarkers);
}
}
};
}
@Nullable
@Override
SettingsItemWriter<? extends SettingsItem> getWriter() {
GPXFile gpxFile = markersHelper.generateGpx(items, true);
return getGpxWriter(gpxFile);
}
}

View file

@ -0,0 +1,160 @@
package net.osmand.plus.settings.backend.backup;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.GPXUtilities;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.settings.backend.ExportSettingsType;
import net.osmand.util.Algorithms;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import static net.osmand.IndexConstants.GPX_FILE_EXT;
public class MarkersSettingsItem extends CollectionSettingsItem<MapMarker> {
private MapMarkersHelper markersHelper;
public MarkersSettingsItem(@NonNull OsmandApplication app, @NonNull List<MapMarker> items) {
super(app, null, items);
}
public MarkersSettingsItem(@NonNull OsmandApplication app, @Nullable MarkersSettingsItem baseItem, @NonNull List<MapMarker> items) {
super(app, baseItem, items);
}
MarkersSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(app, json);
}
@Override
protected void init() {
super.init();
markersHelper = app.getMapMarkersHelper();
existingItems = new ArrayList<>(markersHelper.getMapMarkers());
}
@NonNull
@Override
public SettingsItemType getType() {
return SettingsItemType.ACTIVE_MARKERS;
}
@NonNull
@Override
public String getName() {
return "markers";
}
@NonNull
@Override
public String getPublicName(@NonNull Context ctx) {
return ctx.getString(R.string.map_markers);
}
@NonNull
public String getDefaultFileExtension() {
return GPX_FILE_EXT;
}
@Override
public void apply() {
List<MapMarker> newItems = getNewItems();
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
appliedItems = new ArrayList<>(newItems);
for (MapMarker duplicate : duplicateItems) {
if (shouldReplace) {
MapMarker existingMarker = markersHelper.getMapMarker(duplicate.point);
markersHelper.removeMarker(existingMarker);
}
appliedItems.add(shouldReplace ? duplicate : renameItem(duplicate));
}
for (MapMarker marker : appliedItems) {
markersHelper.addMarker(marker);
}
}
}
@Override
public boolean isDuplicate(@NonNull MapMarker mapMarker) {
for (MapMarker marker : existingItems) {
if (marker.equals(mapMarker)
&& Algorithms.objectEquals(marker.getOriginalPointDescription(), mapMarker.getOriginalPointDescription())) {
return true;
}
}
return false;
}
@Override
public boolean shouldReadOnCollecting() {
return true;
}
@NonNull
@Override
public MapMarker renameItem(@NonNull MapMarker item) {
int number = 0;
while (true) {
number++;
String name = item.getOnlyName() + "_" + number;
PointDescription description = new PointDescription(PointDescription.POINT_TYPE_LOCATION, name);
MapMarker renamedMarker = new MapMarker(item.point, description, item.getColor(), item.selected, item.index);
if (!isDuplicate(renamedMarker)) {
renamedMarker.nextKey = MapMarkersDbHelper.TAIL_NEXT_VALUE;
return renamedMarker;
}
}
}
public MapMarkersGroup getMarkersGroup() {
String name = app.getString(R.string.map_markers);
String groupId = ExportSettingsType.ACTIVE_MARKERS.name();
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
markersGroup.setMarkers(items);
return markersGroup;
}
@Nullable
@Override
SettingsItemReader<MarkersSettingsItem> getReader() {
return new SettingsItemReader<MarkersSettingsItem>(this) {
@Override
public void readFromStream(@NonNull InputStream inputStream, String entryName) throws IllegalArgumentException {
GPXFile gpxFile = GPXUtilities.loadGPXFile(inputStream);
if (gpxFile.error != null) {
warnings.add(app.getString(R.string.settings_item_read_error, String.valueOf(getType())));
SettingsHelper.LOG.error("Failed read gpx file", gpxFile.error);
} else {
List<MapMarker> mapMarkers = markersHelper.readMarkersFromGpx(gpxFile, false);
items.addAll(mapMarkers);
}
}
};
}
@Nullable
@Override
SettingsItemWriter<? extends SettingsItem> getWriter() {
GPXFile gpxFile = markersHelper.generateGpx(items, true);
return getGpxWriter(gpxFile);
}
}

View file

@ -18,6 +18,7 @@ import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.activities.LocalIndexHelper;
import net.osmand.plus.activities.LocalIndexInfo;
@ -28,6 +29,8 @@ import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.osmedit.OpenstreetmapPoint;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.osmedit.OsmNotesPoint;
@ -594,6 +597,22 @@ public class SettingsHelper {
if (!files.isEmpty()) {
dataList.put(ExportSettingsType.VOICE, files);
}
List<MapMarker> mapMarkers = app.getMapMarkersHelper().getMapMarkers();
if (!mapMarkers.isEmpty()) {
String name = app.getString(R.string.map_markers);
String groupId = ExportSettingsType.ACTIVE_MARKERS.name();
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
markersGroup.setMarkers(mapMarkers);
dataList.put(ExportSettingsType.ACTIVE_MARKERS, Collections.singletonList(markersGroup));
}
List<MapMarker> markersHistory = app.getMapMarkersHelper().getMapMarkersHistory();
if (!markersHistory.isEmpty()) {
String name = app.getString(R.string.shared_string_history);
String groupId = ExportSettingsType.HISTORY_MARKERS.name();
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
markersGroup.setMarkers(markersHistory);
dataList.put(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup));
}
return dataList;
}
@ -633,6 +652,8 @@ public class SettingsHelper {
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
List<OsmNotesPoint> osmNotesPointList = new ArrayList<>();
List<OpenstreetmapPoint> osmEditsPointList = new ArrayList<>();
List<MapMarkersGroup> markersGroups = new ArrayList<>();
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
for (Object object : data) {
if (object instanceof QuickAction) {
@ -657,6 +678,13 @@ public class SettingsHelper {
osmEditsPointList.add((OpenstreetmapPoint) object);
} else if (object instanceof FavoriteGroup) {
favoriteGroups.add((FavoriteGroup) object);
} else if (object instanceof MapMarkersGroup) {
MapMarkersGroup markersGroup = (MapMarkersGroup) object;
if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) {
markersGroups.add((MapMarkersGroup) object);
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
markersHistoryGroups.add((MapMarkersGroup) object);
}
}
}
if (!quickActions.isEmpty()) {
@ -688,6 +716,20 @@ public class SettingsHelper {
if (!favoriteGroups.isEmpty()) {
settingsItems.add(new FavoritesSettingsItem(app, favoriteGroups));
}
if (!markersGroups.isEmpty()) {
List<MapMarker> mapMarkers = new ArrayList<>();
for (MapMarkersGroup group : markersGroups) {
mapMarkers.addAll(group.getMarkers());
}
settingsItems.add(new MarkersSettingsItem(app, mapMarkers));
}
if (!markersHistoryGroups.isEmpty()) {
List<MapMarker> mapMarkers = new ArrayList<>();
for (MapMarkersGroup group : markersHistoryGroups) {
mapMarkers.addAll(group.getMarkers());
}
settingsItems.add(new HistoryMarkersSettingsItem(app, mapMarkers));
}
return settingsItems;
}
@ -709,6 +751,8 @@ public class SettingsHelper {
List<OsmNotesPoint> notesPointList = new ArrayList<>();
List<OpenstreetmapPoint> editsPointList = new ArrayList<>();
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
List<MapMarkersGroup> markersGroups = new ArrayList<>();
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
for (SettingsItem item : settingsItems) {
switch (item.getType()) {
@ -788,6 +832,14 @@ public class SettingsHelper {
FavoritesSettingsItem favoritesSettingsItem = (FavoritesSettingsItem) item;
favoriteGroups.addAll(favoritesSettingsItem.getItems());
break;
case ACTIVE_MARKERS:
MarkersSettingsItem markersSettingsItem = (MarkersSettingsItem) item;
markersGroups.add(markersSettingsItem.getMarkersGroup());
break;
case HISTORY_MARKERS:
HistoryMarkersSettingsItem historyMarkersSettingsItem = (HistoryMarkersSettingsItem) item;
markersHistoryGroups.add(historyMarkersSettingsItem.getMarkersGroup());
break;
default:
break;
}
@ -841,6 +893,12 @@ public class SettingsHelper {
if (!voiceFilesList.isEmpty()) {
settingsToOperate.put(ExportSettingsType.VOICE, voiceFilesList);
}
if (!markersGroups.isEmpty()) {
settingsToOperate.put(ExportSettingsType.ACTIVE_MARKERS, markersGroups);
}
if (!markersGroups.isEmpty()) {
settingsToOperate.put(ExportSettingsType.HISTORY_MARKERS, markersHistoryGroups);
}
return settingsToOperate;
}

View file

@ -5,7 +5,10 @@ import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.GPXUtilities;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.util.Algorithms;
import org.json.JSONException;
@ -17,6 +20,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
@ -205,6 +209,7 @@ public abstract class SettingsItem {
String s = json.toString(2);
outputStream.write(s.getBytes("UTF-8"));
} catch (JSONException e) {
warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
SettingsHelper.LOG.error("Failed to write json to stream", e);
}
return true;
@ -214,6 +219,22 @@ public abstract class SettingsItem {
};
}
@NonNull
SettingsItemWriter<? extends SettingsItem> getGpxWriter(@NonNull final GPXFile gpxFile) {
return new SettingsItemWriter<SettingsItem>(this) {
@Override
public boolean writeToStream(@NonNull OutputStream outputStream) throws IOException {
Exception error = GPXUtilities.writeGpx(new OutputStreamWriter(outputStream, "UTF-8"), gpxFile);
if (error != null) {
warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
SettingsHelper.LOG.error("Failed write to gpx file", error);
return false;
}
return true;
}
};
}
@Override
public int hashCode() {
return (getType().name() + getName()).hashCode();

View file

@ -15,5 +15,7 @@ public enum SettingsItemType {
DOWNLOADS,
OSM_NOTES,
OSM_EDITS,
FAVOURITES
FAVOURITES,
ACTIVE_MARKERS,
HISTORY_MARKERS
}

View file

@ -134,6 +134,12 @@ class SettingsItemsFactory {
case FAVOURITES:
item = new FavoritesSettingsItem(app, json);
break;
case ACTIVE_MARKERS:
item = new MarkersSettingsItem(app, json);
break;
case HISTORY_MARKERS:
item = new HistoryMarkersSettingsItem(app, json);
break;
}
return item;
}

View file

@ -14,20 +14,21 @@ import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.map.ITileSource;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.profiles.ProfileIconColors;
import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.render.RenderingIcons;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -35,7 +36,7 @@ import org.apache.commons.logging.Log;
import java.io.File;
import java.util.List;
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.*;
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -155,6 +156,10 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView
} else if (currentItem instanceof FavoriteGroup) {
itemHolder.title.setText(((FavoriteGroup) currentItem).getDisplayName(app));
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_favorite, activeColorRes));
} else if (currentItem instanceof MapMarkersGroup) {
MapMarkersGroup markersGroup = (MapMarkersGroup) currentItem;
itemHolder.title.setText(markersGroup.getName());
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_flag, activeColorRes));
}
itemHolder.divider.setVisibility(shouldShowDivider(position) ? View.VISIBLE : View.GONE);
}

View file

@ -302,6 +302,14 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName()));
setupIcon(icon, R.drawable.ic_action_volume_up, itemSelected);
break;
case ACTIVE_MARKERS:
title.setText(R.string.map_markers);
setupIcon(icon, R.drawable.ic_action_flag, itemSelected);
break;
case HISTORY_MARKERS:
title.setText(R.string.markers_history);
setupIcon(icon, R.drawable.ic_action_flag, itemSelected);
break;
default:
return child;
}
@ -402,6 +410,10 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
return R.string.local_indexes_cat_tts;
case VOICE:
return R.string.local_indexes_cat_voice;
case ACTIVE_MARKERS:
return R.string.map_markers;
case HISTORY_MARKERS:
return R.string.markers_history;
default:
return R.string.access_empty_list;
}

View file

@ -32,11 +32,13 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.osmedit.OpenstreetmapPoint;
import net.osmand.plus.osmedit.OsmNotesPoint;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.ExportSettingsType;
import net.osmand.plus.settings.backend.backup.SettingsHelper;
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask;
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType;
@ -48,7 +50,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.*;
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
import static net.osmand.plus.settings.fragments.ImportSettingsFragment.IMPORT_SETTINGS_TAG;
@ -200,6 +202,8 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment {
List<File> ttsVoiceFilesList = new ArrayList<>();
List<File> voiceFilesList = new ArrayList<>();
List<File> mapFilesList = new ArrayList<>();
List<MapMarkersGroup> markersGroups = new ArrayList<>();
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
for (Object object : duplicatesList) {
if (object instanceof ApplicationMode.ApplicationModeBean) {
@ -236,6 +240,13 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment {
osmNotesPointList.add((OsmNotesPoint) object);
} else if (object instanceof OpenstreetmapPoint) {
osmEditsPointList.add((OpenstreetmapPoint) object);
} else if (object instanceof MapMarkersGroup) {
MapMarkersGroup markersGroup = (MapMarkersGroup) object;
if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) {
markersGroups.add(markersGroup);
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
markersHistoryGroups.add(markersGroup);
}
}
}
if (!profiles.isEmpty()) {
@ -298,6 +309,14 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment {
duplicates.add(getString(R.string.local_indexes_cat_voice));
duplicates.addAll(voiceFilesList);
}
if (!markersGroups.isEmpty()) {
duplicates.add(getString(R.string.map_markers));
duplicates.addAll(markersGroups);
}
if (!markersHistoryGroups.isEmpty()) {
duplicates.add(getString(R.string.markers_history));
duplicates.addAll(markersHistoryGroups);
}
return duplicates;
}

View file

@ -41,25 +41,29 @@ import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.osmedit.OpenstreetmapPoint;
import net.osmand.plus.osmedit.OsmNotesPoint;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
import net.osmand.plus.settings.backend.ExportSettingsType;
import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem;
import net.osmand.plus.settings.backend.backup.FavoritesSettingsItem;
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
import net.osmand.plus.settings.backend.backup.GlobalSettingsItem;
import net.osmand.plus.settings.backend.backup.HistoryMarkersSettingsItem;
import net.osmand.plus.settings.backend.backup.MapSourcesSettingsItem;
import net.osmand.plus.settings.backend.backup.MarkersSettingsItem;
import net.osmand.plus.settings.backend.backup.OsmEditsSettingsItem;
import net.osmand.plus.settings.backend.backup.OsmNotesSettingsItem;
import net.osmand.plus.settings.backend.backup.SettingsHelper;
import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem;
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask;
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType;
import net.osmand.plus.settings.backend.backup.MapSourcesSettingsItem;
import net.osmand.plus.settings.backend.backup.PoiUiFiltersSettingsItem;
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
import net.osmand.plus.settings.backend.backup.QuickActionsSettingsItem;
import net.osmand.plus.settings.backend.backup.SettingsHelper;
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask;
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType;
import net.osmand.plus.settings.backend.backup.SettingsItem;
import net.osmand.plus.settings.backend.backup.SettingsItemType;
import net.osmand.plus.widgets.TextViewEx;
@ -436,6 +440,8 @@ public class ImportSettingsFragment extends BaseOsmAndFragment {
List<OsmNotesPoint> osmNotesPointList = new ArrayList<>();
List<OpenstreetmapPoint> osmEditsPointList = new ArrayList<>();
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
List<MapMarkersGroup> markersGroups = new ArrayList<>();
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
for (Object object : data) {
if (object instanceof ApplicationModeBean) {
appModeBeans.add((ApplicationModeBean) object);
@ -459,6 +465,13 @@ public class ImportSettingsFragment extends BaseOsmAndFragment {
favoriteGroups.add((FavoriteGroup) object);
} else if (object instanceof GlobalSettingsItem) {
settingsItems.add((GlobalSettingsItem) object);
} else if (object instanceof MapMarkersGroup) {
MapMarkersGroup markersGroup = (MapMarkersGroup) object;
if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) {
markersGroups.add((MapMarkersGroup) object);
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
markersHistoryGroups.add((MapMarkersGroup) object);
}
}
}
if (!appModeBeans.isEmpty()) {
@ -490,6 +503,23 @@ public class ImportSettingsFragment extends BaseOsmAndFragment {
FavoritesSettingsItem baseItem = getBaseItem(SettingsItemType.FAVOURITES, FavoritesSettingsItem.class);
settingsItems.add(new FavoritesSettingsItem(app, baseItem, favoriteGroups));
}
if (!markersGroups.isEmpty()) {
List<MapMarker> mapMarkers = new ArrayList<>();
for (MapMarkersGroup group : markersGroups) {
mapMarkers.addAll(group.getMarkers());
}
MarkersSettingsItem baseItem = getBaseItem(SettingsItemType.ACTIVE_MARKERS, MarkersSettingsItem.class);
settingsItems.add(new MarkersSettingsItem(app, baseItem, mapMarkers));
}
if (!markersHistoryGroups.isEmpty()) {
List<MapMarker> mapMarkers = new ArrayList<>();
for (MapMarkersGroup group : markersHistoryGroups) {
mapMarkers.addAll(group.getMarkers());
}
HistoryMarkersSettingsItem baseItem = getBaseItem(SettingsItemType.HISTORY_MARKERS, HistoryMarkersSettingsItem.class);
settingsItems.add(new HistoryMarkersSettingsItem(app, baseItem, mapMarkers));
}
return settingsItems;
}

View file

@ -142,6 +142,14 @@ public class ImportedSettingsItemsAdapter extends
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_settings, activeColorRes));
holder.title.setText(R.string.general_settings_2);
break;
case ACTIVE_MARKERS:
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_flag, activeColorRes));
holder.title.setText(R.string.map_markers);
break;
case HISTORY_MARKERS:
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_flag, activeColorRes));
holder.title.setText(R.string.markers_history);
break;
}
}

View file

@ -17,8 +17,8 @@ import net.osmand.data.QuadTree;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.base.PointImageDrawable;

View file

@ -37,9 +37,9 @@ import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersGroup;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;

View file

@ -31,8 +31,8 @@ import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadPoint;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;

View file

@ -9,8 +9,8 @@ import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.MapMarkersHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;

View file

@ -12,7 +12,7 @@ import android.view.View;
import net.osmand.Location;
import net.osmand.binary.RouteDataObject;
import net.osmand.data.LatLon;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;