Merge branch 'master' of ssh://github.com/osmandapp/Osmand into Fix_5324

This commit is contained in:
Chumva 2018-05-15 14:02:55 +03:00
commit e4b93c9d2f
43 changed files with 962 additions and 463 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1,14 +1,30 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto" xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/expandable_list_item_background"
android:minHeight="@dimen/list_item_height"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout
android:id="@+id/group_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible">
<include layout="@layout/list_item_divider"/>
</LinearLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/expandable_list_item_background"
android:minHeight="@dimen/wpt_list_item_height">
<View <View
android:id="@+id/divider" android:id="@+id/divider"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -20,7 +36,7 @@
android:id="@+id/list_divider" android:id="@+id/list_divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_marginLeft="54dp" android:layout_marginLeft="64dp"
android:background="?attr/dashboard_divider" android:background="?attr/dashboard_divider"
android:visibility="gone"/> android:visibility="gone"/>
@ -29,14 +45,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:paddingLeft="@dimen/list_content_padding"
android:paddingLeft="@dimen/list_content_padding"> android:orientation="horizontal">
<CheckBox <CheckBox
android:id="@+id/toggle_item" android:id="@+id/toggle_item"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="@dimen/list_content_padding" android:layout_marginRight="@dimen/favorites_icon_right_margin"
android:focusable="false" android:focusable="false"
android:visibility="gone" android:visibility="gone"
tools:visibility="visible"/> tools:visibility="visible"/>
@ -45,7 +61,7 @@
android:id="@+id/icon" android:id="@+id/icon"
android:layout_width="@dimen/standard_icon_size" android:layout_width="@dimen/standard_icon_size"
android:layout_height="@dimen/standard_icon_size" android:layout_height="@dimen/standard_icon_size"
android:layout_marginRight="@dimen/list_content_padding"/> android:layout_marginRight="@dimen/favorites_icon_right_margin"/>
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
@ -56,14 +72,37 @@
android:paddingRight="@dimen/list_content_padding" android:paddingRight="@dimen/list_content_padding"
android:paddingTop="8dp"> android:paddingTop="8dp">
<TextView <net.osmand.plus.widgets.TextViewEx
android:id="@+id/bold_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="?attr/wikivoyage_primary_text_color"
android:textSize="@dimen/text_button_text_size"
osmand:typeface="@string/font_roboto_medium"
android:visibility="gone"
tools:visibility="visible"
tools:text="Category name"/>
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/label" android:id="@+id/label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?android:textColorPrimary" android:textColor="?attr/wikivoyage_primary_text_color"
android:textSize="@dimen/default_list_text_size" android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_regular"
tools:text="Point title"/> tools:text="Point title"/>
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="2"
android:textColor="@color/wikivoyage_secondary_text"
android:textSize="@dimen/default_sub_text_size"
osmand:typeface="@string/font_roboto_regular"
tools:text="Point description"/>
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/button" android:id="@+id/button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -76,21 +115,28 @@
tools:text="SHOW ALL" tools:text="SHOW ALL"
tools:visibility="visible"/> tools:visibility="visible"/>
<TextView </LinearLayout>
android:id="@+id/description"
<LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary" android:layout_marginEnd="@dimen/list_item_button_padding"
android:textSize="@dimen/default_sub_text_size" android:layout_marginRight="@dimen/list_item_button_padding"
android:maxLines="2" android:orientation="horizontal">
tools:text="Point description"/>
</LinearLayout> <ImageView
android:id="@+id/expand_image"
android:layout_width="@dimen/acceptable_touch_radius"
android:layout_height="@dimen/acceptable_touch_radius"
android:scaleType="center"
android:src="@drawable/ic_action_arrow_up"
android:visibility="gone"
tools:visibility="visible"/>
<ImageButton <ImageButton
android:id="@+id/options" android:id="@+id/options"
android:layout_width="@dimen/list_item_height" android:layout_width="@dimen/acceptable_touch_radius"
android:layout_height="@dimen/list_item_height" android:layout_height="@dimen/acceptable_touch_radius"
android:background="?attr/dashboard_button" android:background="?attr/dashboard_button"
android:contentDescription="@string/shared_string_more" android:contentDescription="@string/shared_string_more"
android:src="@drawable/ic_overflow_menu_white" android:src="@drawable/ic_overflow_menu_white"
@ -98,4 +144,8 @@
</LinearLayout> </LinearLayout>
</LinearLayout>
</FrameLayout> </FrameLayout>
</LinearLayout>

View file

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
@ -18,19 +19,19 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingLeft="@dimen/list_content_padding"
android:minHeight="@dimen/list_item_height"
android:background="?attr/bg_color" android:background="?attr/bg_color"
android:orientation="horizontal"> android:minHeight="@dimen/wpt_list_category_height"
android:orientation="horizontal"
android:paddingLeft="@dimen/list_content_padding">
<CheckBox <CheckBox
android:id="@+id/toggle_item" android:id="@+id/toggle_item"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginRight="@dimen/list_content_padding"
android:background="?attr/dashboard_button" android:background="?attr/dashboard_button"
android:focusable="false" android:focusable="false"
android:layout_marginRight="@dimen/list_content_padding"
android:visibility="gone" android:visibility="gone"
tools:visiblity="visible"/> tools:visiblity="visible"/>
@ -45,19 +46,19 @@
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:paddingTop="8dp" android:layout_weight="1"
android:paddingBottom="8dp"> android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingTop="8dp">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/category_name" android:id="@+id/category_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:textColor="?android:textColorPrimary" android:textColor="?attr/wikivoyage_primary_text_color"
android:textSize="@dimen/default_sub_text_size" android:textSize="@dimen/text_button_text_size"
osmand:typeface="@string/font_roboto_medium" osmand:typeface="@string/font_roboto_medium"
tools:text="Category name"/> tools:text="Category name"/>
@ -66,20 +67,21 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:textColor="?android:textColorSecondary" android:textColor="@color/wikivoyage_secondary_text"
android:textSize="@dimen/default_sub_text_size" android:textSize="@dimen/default_sub_text_size"
osmand:typeface="@string/font_roboto_regular"
tools:text="Important points in this route"/> tools:text="Important points in this route"/>
</LinearLayout> </LinearLayout>
<ImageView <ImageView
android:id="@+id/options" android:id="@+id/options"
android:contentDescription="@string/shared_string_more"
android:layout_width="46dp" android:layout_width="46dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginRight="4dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginRight="4dp"
android:background="?attr/dashboard_button" android:background="?attr/dashboard_button"
android:contentDescription="@string/shared_string_more"
android:focusable="false" android:focusable="false"
android:scaleType="center" android:scaleType="center"
android:src="@drawable/ic_overflow_menu_white" android:src="@drawable/ic_overflow_menu_white"
@ -90,9 +92,9 @@
android:id="@+id/explist_indicator" android:id="@+id/explist_indicator"
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scaleType="center"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginRight="@dimen/list_content_padding" android:layout_marginRight="@dimen/list_content_padding"
android:scaleType="center"
android:visibility="gone"/> android:visibility="gone"/>
</LinearLayout> </LinearLayout>

View file

@ -9,8 +9,8 @@
<string name="poi_air_transport">Tresporte aereu</string> <string name="poi_air_transport">Tresporte aereu</string>
<string name="poi_water_transport">Tresporte acuáticu</string> <string name="poi_water_transport">Tresporte acuáticu</string>
<string name="poi_communication">Comunicación</string> <string name="poi_communication">Comunicación</string>
<string name="poi_fuel_type">Triba</string> <string name="poi_fuel_type">Triba de combustible</string>
<string name="poi_fuel_avia_type">Triba</string> <string name="poi_fuel_avia_type">Triba de combustible (avia)</string>
<string name="poi_payment_type">Triba de pagu</string> <string name="poi_payment_type">Triba de pagu</string>
<string name="poi_payment_fuel_type">Tarxetes pa gasolineres</string> <string name="poi_payment_fuel_type">Tarxetes pa gasolineres</string>
<string name="poi_additional_type">Adicional</string> <string name="poi_additional_type">Adicional</string>

View file

@ -973,7 +973,7 @@ Puntos</string>
<string name="import_file">Importar ficheru</string> <string name="import_file">Importar ficheru</string>
<string name="waypoints_added_to_map_markers">Puntos de ruta añadíos a los marcadores del mapa</string> <string name="waypoints_added_to_map_markers">Puntos de ruta añadíos a los marcadores del mapa</string>
<string name="plan_route_no_markers_toast">Hai qu\'amestar polo menos un marcador pa usar esta función.</string> <string name="plan_route_no_markers_toast">Hai qu\'amestar polo menos un marcador pa usar esta función.</string>
<string name="osn_modify_dialog_error">Hebo una esceición: Nun se camudó la nota</string> <string name="osn_modify_dialog_error">Nun pudo camudase la nota</string>
<string name="empty_state_av_notes">¡Toma notes!</string> <string name="empty_state_av_notes">¡Toma notes!</string>
<string name="yesterday">Ayeri</string> <string name="yesterday">Ayeri</string>
<string name="this_year">Esti añu</string> <string name="this_year">Esti añu</string>
@ -1050,8 +1050,15 @@ Puntos</string>
<string name="additional_actions">Más aiciones</string> <string name="additional_actions">Más aiciones</string>
<string name="av_locations_selected_desc">Ficheru GPX con coordenaes y datos de les notes esbillaes.</string> <string name="av_locations_selected_desc">Ficheru GPX con coordenaes y datos de les notes esbillaes.</string>
<string name="av_locations_all_desc">Ficheru GPX con coordenaes y datos de toles notes.</string> <string name="av_locations_all_desc">Ficheru GPX con coordenaes y datos de toles notes.</string>
<string name="release_3_0">\\022 <string name="release_3_0">\\022 Nuevu menú Viaxe : consultar los artículos de WikiVoyage ensin conexón
\n \n
\n • Wikipedia : nuevu aspeutu, imaxes
\n
\n • Interfazd\'apertura de traces : ver grupos de puntos de ruta
\n
\n • Marcadores del mapa : importar grupos seleicionaos dende ficheros GPX, nuevu aspeutu de la entrada de coordenaes
\n
\n • La suscripción a OsmAnd Live agora incluye toles funciones d\'OsmAnd
\n</string> \n</string>
<string name="modify_the_search_query">Cambiar la consulta de la gueta.</string> <string name="modify_the_search_query">Cambiar la consulta de la gueta.</string>
<string name="shared_string_actions">Aiciones</string> <string name="shared_string_actions">Aiciones</string>
@ -1076,11 +1083,11 @@ Puntos</string>
<string name="track_waypoints">Puntos de ruta de la traza</string> <string name="track_waypoints">Puntos de ruta de la traza</string>
<string name="favourites_group">Categoría de favoritos</string> <string name="favourites_group">Categoría de favoritos</string>
<string name="add_group">Amestar un grupu</string> <string name="add_group">Amestar un grupu</string>
<string name="add_group_descr">Puedes importar grupos dende favoritos o de puntos de ruta d\\\'una traza.</string> <string name="add_group_descr">Importar grupos dende favoritos o de puntos de ruta de la traza.</string>
<string name="empty_state_markers_active">¡Crea marcadores de mapa!</string> <string name="empty_state_markers_active">¡Crea marcadores de mapa!</string>
<string name="empty_state_markers_active_desc">Da un toque llargu o curtiu en «Llugares», llueu toca nel botón de bandera de marcador.</string> <string name="empty_state_markers_active_desc">Da un toque llargu o curtiu en «Llugares», llueu toca nel botón de bandera de marcador.</string>
<string name="empty_state_markers_groups">Importar grupos</string> <string name="empty_state_markers_groups">Importar grupos</string>
<string name="empty_state_markers_groups_desc">Puedes importar grupos de favoritos o puntos de ruta d\\\'una traza como marcadores.</string> <string name="empty_state_markers_groups_desc">Importar grupos de favoritos o puntos de ruta de la traza como marcadores.</string>
<string name="shared_string_two">Dos</string> <string name="shared_string_two">Dos</string>
<string name="shared_string_one">Un</string> <string name="shared_string_one">Un</string>
<string name="show_guide_line_descr">Amosar llinies de direición dende la to posición a les de marcadores activos.</string> <string name="show_guide_line_descr">Amosar llinies de direición dende la to posición a les de marcadores activos.</string>

View file

@ -3930,4 +3930,15 @@
<string name="poi_glacier_ele_bottom">Laveste punkt</string> <string name="poi_glacier_ele_bottom">Laveste punkt</string>
<string name="poi_glacier_slope">Gennemsnitlig hældning</string> <string name="poi_glacier_slope">Gennemsnitlig hældning</string>
<string name="poi_checkpoint_type">Kontrolpunktstype</string>
<string name="poi_checkpoint_hiking">Vandretur kontrolpunkt</string>
<string name="poi_checkpoint_type_stamp">Stemplepunkt</string>
<string name="poi_checkpoint_type_code">Kode</string>
<string name="poi_checkpoint_type_notebook">Notesbog</string>
<string name="poi_checkpoint_type_needler">Nåle</string>
<string name="poi_checkpoint_type_quize">Quiz</string>
<string name="poi_checkpoint_type_electronic">Elektronisk</string>
<string name="poi_course">Bane</string>
</resources> </resources>

View file

@ -1413,4 +1413,89 @@
<string name="poi_animal_shelter_fish">Ψάρια</string> <string name="poi_animal_shelter_fish">Ψάρια</string>
<string name="poi_seats">Θέσεις</string> <string name="poi_seats">Θέσεις</string>
<string name="poi_crossing_unmarked">Χωρίς οδική σήμανση</string>
<string name="poi_trees_rubber">Καουτσουκόδεντρο</string>
<string name="poi_backrest_yes">Πλάτη καθίσματος: ναι</string>
<string name="poi_backrest_no">Πλάτη καθίσματος: όχι</string>
<string name="poi_intermittent">Διακεκομμένο</string>
<string name="poi_building">Κτίριο</string>
<string name="poi_deadlock">Αδιέξοδος</string>
<string name="poi_generator_source_coal">Πηγή ενέργειας: κάρβουνο</string>
<string name="poi_generator_source_gas">Πηγή ενέργειας: γκάζι</string>
<string name="poi_generator_source_nuclear">Πηγή ενέργειας: πυρηνική</string>
<string name="poi_generator_source_solar">Πηγή ενέργειας: ηλιακή</string>
<string name="poi_generator_source_hydro">Πηγή ενέργειας: υδροηλεκτρική</string>
<string name="poi_generator_source_wind">Πηγή ενέργειας: άνεμος</string>
<string name="poi_generator_source_geothermal">Πηγή ενέργειας: γεωθερμική</string>
<string name="poi_generator_source_oil">Πηγή ενέργειας: πετρέλαιο</string>
<string name="poi_generator_source_diesel">Πηγή ενέργειας: ντίζελ</string>
<string name="poi_int_name">Διεθνές όνομα</string>
<string name="poi_nat_name">Εθνικό όνομα</string>
<string name="poi_reg_name">Περιφερειακό όνομα</string>
<string name="poi_loc_name">Τοπικό όνομα</string>
<string name="poi_old_name">Παλιό όνομα</string>
<string name="poi_alt_name">Εναλλακτικό όνομα</string>
<string name="poi_pump_manual">Χειροκίνητη</string>
<string name="poi_pump_powered">Τροφοδοτούμενη</string>
<string name="poi_pump_no">Χωρίς αντλία</string>
<string name="poi_pump_yes">Ναι</string>
<string name="poi_water_characteristic_mineral">Μεταλλικό</string>
<string name="poi_water_characteristic_mud">Χαρακτηριστικό νερού: λάσπη</string>
<string name="poi_water_characteristic_sulfuric">Θειικό</string>
<string name="poi_water_point">Σημείο νερού</string>
<string name="poi_information_guidepost">Οδοδείκτης</string>
<string name="poi_information_board">Πίνακας</string>
<string name="poi_information_map">Χάρτης</string>
<string name="poi_information_office">Γραφείο</string>
<string name="poi_information_trail_blaze">Σημάδι μονοπατιού</string>
<string name="poi_information_terminal">Τερματικό</string>
<string name="poi_information_route_marker">Δείκτης διαδρομής</string>
<string name="poi_information_hikingmap">Πεζοπορικός χάρτης</string>
<string name="poi_information_nature">Φύση</string>
<string name="poi_information_history">Ιστορικό</string>
<string name="poi_information_sign">Σήμα</string>
<string name="poi_information_audioguide">Ηχητικός οδηγός</string>
<string name="poi_information_bicyclemap">Ποδηλατικός χάρτης</string>
<string name="poi_information_tactile_model">Απτικό πρότυπο</string>
<string name="poi_information_tactile_map">Απτικός χάρτης</string>
<string name="poi_board_type_notice">Πίνακας ανακοινώσεων</string>
<string name="poi_board_type_plants">Φυτά</string>
<string name="poi_board_type_geology">Γεωλογία</string>
<string name="poi_board_type_public_transport">Δημόσιες συγκοινωνίες</string>
<string name="poi_board_type_technology">Τεχνολογία</string>
<string name="poi_board_type_astronomy">Αστρονομία</string>
<string name="poi_fireplace_yes">Ναι</string>
<string name="poi_fireplace_no">Χωρίς τζάκι</string>
<string name="poi_covered_yes">Ναι</string>
<string name="poi_covered_no">Δεν καλύπτεται</string>
<string name="poi_smoking_no">Δεν επιτρέπεται</string>
<string name="poi_smoking_outside">Μόνο έξω</string>
<string name="poi_smoking_yes">Επιτρέπεται</string>
<string name="poi_smoking_separated">Σε ξεχωριστό δωμάτιο</string>
<string name="poi_smoking_isolated">Σε απομονωμένο δωμάτιο</string>
<string name="poi_smoking_dedicated">Μόνο για καπνιστές</string>
<string name="poi_toll_yes">Διόδια</string>
<string name="poi_toll_no">Χωρίς διόδια</string>
<string name="poi_toll_hgv_yes">Διόδια για βαρέα οχήματα</string>
<string name="poi_tactile_paving_yes">Ναι</string>
<string name="poi_tactile_paving_no">Χωρίς απτικό πλακόστρωτο</string>
<string name="poi_traffic_signals_sound_yes">Ναι</string>
<string name="poi_traffic_signals_sound_no">Όχι</string>
<string name="poi_traffic_signals_sound_walk">Μόνο όταν επιτρέπεται το περπάτημα</string>
<string name="poi_rescue_station">Σταθμός διάσωσης</string>
<string name="poi_services">ΣΕΑ</string>
</resources> </resources>

View file

@ -2832,8 +2832,15 @@ Indikas lokon: %1$s x %2$s"</string>
<string name="by_date">Laŭ dato</string> <string name="by_date">Laŭ dato</string>
<string name="by_type">Laŭ speco</string> <string name="by_type">Laŭ speco</string>
<string name="modify_the_search_query">Modifi serĉpeton</string> <string name="modify_the_search_query">Modifi serĉpeton</string>
<string name="release_3_0">\\022 <string name="release_3_0">• nova menuo “Vojaĝo”: legi artikolojn de Vikivojaĝo seninterrete
\n \n
\n• Vikipedio: nova stilo, aktivaj ligiloj, bildoj
\n
\n• menuo de malfermita kurso: vidigi grupojn de navigadpunktojn
\n
\n• map-markoj: enporti elektitajn grupojn el GPX-dosieroj, plibonigita vido de koordinata enigo
\n
\n• abono al OsmAnd-Live nur inkluzivas ĉiujn eblaĵojn de OsmAnd
\n</string> \n</string>
<string name="what_is_here">Tie ĉi:</string> <string name="what_is_here">Tie ĉi:</string>
<string name="parked_at">parkumita je</string> <string name="parked_at">parkumita je</string>

View file

@ -3038,7 +3038,15 @@ représentant la zone : %1$s x %2$s</string>
<string name="by_date">Par date</string> <string name="by_date">Par date</string>
<string name="by_type">Par type</string> <string name="by_type">Par type</string>
<string name="modify_the_search_query">Modifier la recherche.</string> <string name="modify_the_search_query">Modifier la recherche.</string>
<string name="release_3_0">\\022 <string name="release_3_0">\\022 Nouveau Menu Voyage : consulter les articles WikiVoyage hors connexion
\n
\n • Wikipedia : nouvelle apparence, images
\n
\n • Ouverture des traces : affichage de groupes d\'étapes
\n
\n • Marques : import depuis des fichiers GPX, création par saisie de coordonnées
\n
\n • L\'abonnement OsmAnd Live inclut désormais toutes les fonctionnalités d\'OsmAnd
\n \n
\n</string> \n</string>
<string name="total_donations">Total des dons</string> <string name="total_donations">Total des dons</string>

View file

@ -3859,4 +3859,6 @@
<string name="poi_glacier_ele_bottom">Legalacsonyabb pont</string> <string name="poi_glacier_ele_bottom">Legalacsonyabb pont</string>
<string name="poi_glacier_slope">Átlagos lejtés (%)</string> <string name="poi_glacier_slope">Átlagos lejtés (%)</string>
<string name="poi_checkpoint_type">Ellenőrzőpont típusa</string>
</resources> </resources>

View file

@ -148,21 +148,21 @@
<string name="osmand_distance_planning_plugin_description">Այս plugin-նը ապահովում է քարտեզի էկրանի վրա վիջեթ, որը հնարավորություն է տալիս ստեղծել ուղիներ, քարտեզի վրա կտտացնելով, նաև օգտագործել կամ փոփոխել առկա GPX ֆայլերը, ուղեւորություն պլանավորել և չափել կետերի միջև հեռավորությունը։</string> <string name="osmand_distance_planning_plugin_description">Այս plugin-նը ապահովում է քարտեզի էկրանի վրա վիջեթ, որը հնարավորություն է տալիս ստեղծել ուղիներ, քարտեզի վրա կտտացնելով, նաև օգտագործել կամ փոփոխել առկա GPX ֆայլերը, ուղեւորություն պլանավորել և չափել կետերի միջև հեռավորությունը։</string>
<string name="shared_string_no">Ոչ</string> <string name="shared_string_no">Ոչ</string>
<string name="shared_string_yes">Այո</string> <string name="shared_string_yes">Այո</string>
<string name="osn_modify_dialog_error">Բացառություն է տեղի ունեցել՝ նշումը չի փոփոխվել</string> <string name="osn_modify_dialog_error">Չհաջողվեց փոփոխել նշումը</string>
<string name="osn_modify_dialog_title">Ձևափոխել նշումը</string> <string name="osn_modify_dialog_title">Ձևափոխել նշումը</string>
<string name="context_menu_item_modify_note">Ձևափոխել OSM նշումը</string> <string name="context_menu_item_modify_note">Ձևափոխել OSM նշումը</string>
<string name="make_round_trip_descr">Ավելացնել սկզբնակետի պատճեն որպես նպատակակետ։</string> <string name="make_round_trip_descr">Ավելացնել սկզբնակետի պատճեն որպես նպատակակետ։</string>
<string name="make_round_trip">Կլոր ուղևորություն</string> <string name="make_round_trip">Կլոր ուղևորություն</string>
<string name="shared_string_markers">Մարկերներ</string> <string name="shared_string_markers">Մարկերներ</string>
<string name="coordinates_format">Կոորդինատների ձեւաչափը</string> <string name="coordinates_format">Կոորդինատների ձևաչափը</string>
<string name="use_system_keyboard">Օգտագործել համակարգի ստեղնաշարը</string> <string name="use_system_keyboard">Օգտագործել համակարգի ստեղնաշարը</string>
<string name="fast_coordinates_input_descr">Ընտրեք կոորդինատների մուտքագրման ձեւաչափը: Դուք միշտ կարող եք փոխել այն սեղմելով Հատկություններ։</string> <string name="fast_coordinates_input_descr">Ընտրեք կոորդինատների մուտքագրման ձևաչափը: Դուք միշտ կարող եք փոխել այն սեղմելով Հատկություններ։</string>
<string name="fast_coordinates_input">Կոորդինատների արագ մուտքագրումը</string> <string name="fast_coordinates_input">Կոորդինատների արագ մուտքագրում</string>
<string name="routing_attr_avoid_ice_roads_fords_name">Խուսափել սառույցի ճանապարհներից, ծանծաղուտ</string> <string name="routing_attr_avoid_ice_roads_fords_name">Խուսափել սառույցի ճանապարհներից, ծանծաղուտ</string>
<string name="routing_attr_avoid_ice_roads_fords_description">Խուսափել սառույցի ճանապարհներից և ծանծաղուտներից։</string> <string name="routing_attr_avoid_ice_roads_fords_description">Խուսափել սառույցի ճանապարհներից և ծանծաղուտներից։</string>
<string name="use_location">Օգտագործել դիրքը</string> <string name="use_location">Օգտագործել դիրքը</string>
<string name="add_location_as_first_point_descr">Ավելացրեք ձեր դիրքը, որպես առաջին կետ, երթուղին կատարյալ պլանավորելու համար։</string> <string name="add_location_as_first_point_descr">Ավելացրեք ձեր դիրքը, որպես մեկնարկային կետ, երթուղին կատարյալ պլանավորելու համար։</string>
<string name="my_location">Իմ դիրքը</string> <string name="my_location">Իմ դիրքը</string>
<string name="shared_string_finish">Վերջ</string> <string name="shared_string_finish">Վերջ</string>
<string name="plan_route">Պլանավորել երթուղին</string> <string name="plan_route">Պլանավորել երթուղին</string>
@ -172,19 +172,19 @@
<string name="marker_save_as_track_descr">Արտահանեք ձեր մարկերները այն ֆայլի մեջ, որը կարող եք նշել այստեղ:</string> <string name="marker_save_as_track_descr">Արտահանեք ձեր մարկերները այն ֆայլի մեջ, որը կարող եք նշել այստեղ:</string>
<string name="marker_save_as_track">Պահպանել որպես հետեւել</string> <string name="marker_save_as_track">Պահպանել որպես հետեւել</string>
<string name="move_to_history">Տեղափոխեք պատմություն</string> <string name="move_to_history">Տեղափոխեք պատմություն</string>
<string name="group_will_be_removed_after_restart">Հերթական ծրագրի վերագործարկվելուց հետո խումբը կհեռացվի։</string> <string name="group_will_be_removed_after_restart">Ծրագրի հերթական վերագործարկվելուց հետո խումբը կհեռացվի։</string>
<string name="show_guide_line">Ցույց տալ ուղեցույցներ</string> <string name="show_guide_line">Ցույց տալ ուղեցույցներ</string>
<string name="show_arrows_on_the_map">Ցույց տալ սլաքները քարտեզի վրա</string> <string name="show_arrows_on_the_map">Ցույց տալ սլաքները քարտեզի վրա</string>
<string name="show_passed">Ցույց տալ անցած</string> <string name="show_passed">Ցույց տալ անցած</string>
<string name="hide_passed">Թաքցնել անցած</string> <string name="hide_passed">Թաքցնել անցած</string>
<string name="remove_from_map_markers">Մաքրել Մարկերները քարտեզից</string> <string name="remove_from_map_markers">Ջնջել քարտեզի Մարկերներից</string>
<string name="descendingly">նվազում</string> <string name="descendingly">նվազում</string>
<string name="ascendingly">աճող</string> <string name="ascendingly">աճող</string>
<string name="date_added">Ամսաթիվ ավելացված է</string> <string name="date_added">Ամսաթիվ ավելացված է</string>
<string name="order_by">Դասավորել ըստ:</string> <string name="order_by">Դասավորել ըստ:</string>
<string name="marker_show_distance_descr">Ընտրեք, թե ինչպես ցույց տա քարտեզի էկրանին մարկերները քարտեզագրելու հեռավորությունը եւ ուղղությունը:</string> <string name="marker_show_distance_descr">Ընտրեք, թե ինչպես ցույց տա քարտեզի էկրանին մարկերները քարտեզագրելու հեռավորությունը եւ ուղղությունը:</string>
<string name="map_orientation_change_in_accordance_with_speed">Քարտեզի կողմնորոշման շեմը</string> <string name="map_orientation_change_in_accordance_with_speed">Քարտեզի կողմնորոշման շեմը</string>
<string name="map_orientation_change_in_accordance_with_speed_descr">"Ընտրեք ստորեւ, թե ինչ արագության հասնելուց քարտեզի կողմնորոշումը կպոխվի \"Շարժման ուղղություն\" դեպի «Կողմնացույց»։"</string> <string name="map_orientation_change_in_accordance_with_speed_descr">"Ընտրեք, թե ինչ արագության հասնելուց քարտեզի կողմնորոշումը կպոխվի \"Շարժման ուղղություն\" դեպի «Կողմնացույց»։"</string>
<string name="all_markers_moved_to_history">Բոլոր Մարկերները տեղափոխվել են պատմություն</string> <string name="all_markers_moved_to_history">Բոլոր Մարկերները տեղափոխվել են պատմություն</string>
<string name="marker_moved_to_history">Քարտեզի Մարկերները տեղափոխվել են պատմություն</string> <string name="marker_moved_to_history">Քարտեզի Մարկերները տեղափոխվել են պատմություն</string>
<string name="marker_moved_to_active">Քարտեզի Մարկերները տեղափոխվեցին ակտիվ</string> <string name="marker_moved_to_active">Քարտեզի Մարկերները տեղափոխվեցին ակտիվ</string>
@ -199,7 +199,7 @@
<string name="move_all_to_history">Բոլորը տեղափոխել պատմություն</string> <string name="move_all_to_history">Բոլորը տեղափոխել պատմություն</string>
<string name="show_direction">Հեռավորության ցուցիչ</string> <string name="show_direction">Հեռավորության ցուցիչ</string>
<string name="sort_by">Դասավորել ըստ</string> <string name="sort_by">Դասավորել ըստ</string>
<string name="do_not_use_animations">Մի օգտագործեք անիմացիաները</string> <string name="do_not_use_animations">Առանց անիմացիաները</string>
<string name="do_not_use_animations_descr">Անջատում է անիմացիաները։</string> <string name="do_not_use_animations_descr">Անջատում է անիմացիաները։</string>
<string name="keep_showing_on_map">Ցուցադրել քարտեզի վրա</string> <string name="keep_showing_on_map">Ցուցադրել քարտեզի վրա</string>
<string name="exit_without_saving">Ելք առանց պահպանման?</string> <string name="exit_without_saving">Ելք առանց պահպանման?</string>
@ -212,25 +212,25 @@
<string name="add_point_after">Ավելացել կետ</string> <string name="add_point_after">Ավելացել կետ</string>
<string name="shared_string_options">Ընտրանքներ</string> <string name="shared_string_options">Ընտրանքներ</string>
<string name="measurement_tool_snap_to_road_descr">OsmAnd կմիացնի կետերը երթուղիների հետ ընտրված պրոֆիլի համար։</string> <string name="measurement_tool_snap_to_road_descr">OsmAnd կմիացնի կետերը երթուղիների հետ ընտրված պրոֆիլի համար։</string>
<string name="measurement_tool_save_as_new_track_descr">"Դուք կարող եք պահպանել կետերը որպես երթուղի կամ որպես գիծ:"</string> <string name="measurement_tool_save_as_new_track_descr">"Պահպանել կետերը որպես երթուղի կամ որպես գիծ:"</string>
<string name="choose_navigation_type">Ընտրեք նավիգացիոն պրոֆիլը</string> <string name="choose_navigation_type">Ընտրեք նավիգացիոն պրոֆիլը</string>
<string name="none_point_error">Անհրաժեշտ է ավելացնել գոնե մեկ կետ։</string> <string name="none_point_error">Անհրաժեշտ է ավելացնել գոնե մեկ կետ։</string>
<string name="enter_gpx_name">GPX Ֆայլի անունը՝</string> <string name="enter_gpx_name">GPX Ֆայլի անունը՝</string>
<string name="show_on_map_after_saving">Ցույց տալ քարտեզի վրա պահպանելուց հետո</string> <string name="show_on_map_after_saving">Ցույց տալ քարտեզի վրա պահպանելուց հետո</string>
<string name="measurement_tool_action_bar">Դիտեք քարտեզը եւ ավելացրեք կետերը</string> <string name="measurement_tool_action_bar">Դիտեք քարտեզը եւ ավելացրեք կետերը</string>
<string name="measurement_tool">Չափել հեռավորությունը</string> <string name="measurement_tool">Չափել հեռավորությունը</string>
<string name="quick_action_resume_pause_navigation">Վերսկսել/կասեցնել նավիգացիյան</string> <string name="quick_action_resume_pause_navigation">Դադար/վերսկսել նավիգացիյան</string>
<string name="quick_action_resume_pause_navigation_descr">"Սեղմել այս կոճակը նավիգացիան կասեցնելու կամ վերսկսելու։"</string> <string name="quick_action_resume_pause_navigation_descr">"Սեղմել այս կոճակը նավիգացիան կասեցնելու կամ վերսկսելու։"</string>
<string name="quick_action_show_navigation_finish_dialog">Ցույց տալ նավարկության վերջնական երկխոսությունը</string> <string name="quick_action_show_navigation_finish_dialog">Ցույց տալ \'Նավիգացիան ավարտվեց\' երկխոսությունը</string>
<string name="quick_action_start_stop_navigation">Սկսել / ավարտել նավարկությունը</string> <string name="quick_action_start_stop_navigation">Սկսել / ավարտել նավարկությունը</string>
<string name="quick_action_start_stop_navigation_descr">Հպեք այս կոճակը, նավիգացիան սկսելու կամ ավարտելու համար:</string> <string name="quick_action_start_stop_navigation_descr">Հպեք այս կոճակը, նավիգացիան սկսելու կամ ավարտելու համար:</string>
<string name="store_tracks_in_monthly_directories">Պահպանել թղթապանակներում գրանցված տրեկերը ամսական</string> <string name="store_tracks_in_monthly_directories">Պահպանել թղթապանակներում գրանցված տրեկերը ամսական</string>
<string name="store_tracks_in_monthly_directories_descrp">Պահպանել տրեկները ենթա-թղթապանակներում ըստ գրանցված ամսին (օրինակ 2017-01)։</string> <string name="store_tracks_in_monthly_directories_descrp">Պահպանել տրեկները ենթա-թղթապանակներում ըստ գրանցված ամսին (օրինակ 2018-01)։</string>
<string name="shared_string_reset">Վերագործարկեք</string> <string name="shared_string_reset">Վերագործարկեք</string>
<string name="shared_string_reload">Վերբեռնել</string> <string name="shared_string_reload">Վերբեռնել</string>
<string name="mapillary_menu_descr_tile_cache">Վերբեռնել սալիկներ ընթացիկ տվյալները ցուցադրելու համար:</string> <string name="mapillary_menu_descr_tile_cache">Վերբեռնել սալիկներ ընթացիկ տվյալները ցուցադրելու համար:</string>
<string name="mapillary_menu_title_tile_cache">Սալիկներ կեշ</string> <string name="mapillary_menu_title_tile_cache">Սալիկներ կեշ</string>
<string name="wrong_user_name">Սխալ օգտագործողի անուն!</string> <string name="wrong_user_name">Սխալ օգտագործողի անուն (username)</string>
<string name="shared_string_to">Մինչև</string> <string name="shared_string_to">Մինչև</string>
<string name="mapillary_menu_date_from">Սկսած</string> <string name="mapillary_menu_date_from">Սկսած</string>
<string name="mapillary_menu_descr_dates">Դիտել միայն ավելացրած լուսանկարներ</string> <string name="mapillary_menu_descr_dates">Դիտել միայն ավելացրած լուսանկարներ</string>
@ -238,7 +238,7 @@
<string name="mapillary_menu_edit_text_hint">"Մուտքագրեք օգտատերի անունը"</string> <string name="mapillary_menu_edit_text_hint">"Մուտքագրեք օգտատերի անունը"</string>
<string name="mapillary_menu_descr_username">Դիտել լուսանկարները ավելացրած օգտագործողի կողմից</string> <string name="mapillary_menu_descr_username">Դիտել լուսանկարները ավելացրած օգտագործողի կողմից</string>
<string name="mapillary_menu_title_username">Օգտատերի անունը</string> <string name="mapillary_menu_title_username">Օգտատերի անունը</string>
<string name="mapillary_menu_filter_description">Դուք կարող եք դասավորել լուսանկարներ ըստ ուղարկողի կամ ամսաթվի: Զտիչները օգտագործվում են միայն մեծ չափերի համար:</string> <string name="mapillary_menu_filter_description">Դասավորել լուսանկարները ըստ ուղարկողի կամ ամսաթվի: Միայն մեծ չափերի համար:</string>
<string name="map_widget_ruler_control">Շառավիղ-քանոն</string> <string name="map_widget_ruler_control">Շառավիղ-քանոն</string>
<string name="shared_string_permissions">Թույլտվություն</string> <string name="shared_string_permissions">Թույլտվություն</string>
<string name="import_gpx_failed_descr">OsmAnd-ը չի կարող ներմուծել ֆայլը: Ստուգեք, արդյոք OsmAnd-ը իրավունք ունի կարդալ ֆայլը իր գտնվելու վայրից:</string> <string name="import_gpx_failed_descr">OsmAnd-ը չի կարող ներմուծել ֆայլը: Ստուգեք, արդյոք OsmAnd-ը իրավունք ունի կարդալ ֆայլը իր գտնվելու վայրից:</string>
@ -247,8 +247,7 @@
<string name="open_mapillary">Բացել Mapillary</string> <string name="open_mapillary">Բացել Mapillary</string>
<string name="shared_string_install">Տեղադրել</string> <string name="shared_string_install">Տեղադրել</string>
<string name="improve_coverage_mapillary">Կատարելագործել լուսանկարի ծածկույթը Mapillary- ի միջոցով</string> <string name="improve_coverage_mapillary">Կատարելագործել լուսանկարի ծածկույթը Mapillary- ի միջոցով</string>
<string name="improve_coverage_install_mapillary_desc">"Դուք կարող եք ձեր սեփական լուսանկարները կամ մի շարք լուսանկարներ կցել քարտեզի գտնվելու վայրի: <string name="improve_coverage_install_mapillary_desc">"Տեղադրել Mapillary ծրագիրը լուսանկարն կամ մի շարք լուսանկարներ կցելու քարտեզին գտնվելու վայրում:"</string>
\nԴա անելու համարանհրաժեշտ է տեղադրել Mapillary ծրագիրը Google Play խանութից:"</string>
<string name="online_photos">Առցանց լուսանկարներ</string> <string name="online_photos">Առցանց լուսանկարներ</string>
<string name="shared_string_add_photos">Ավելացնել լուսանկարներ</string> <string name="shared_string_add_photos">Ավելացնել լուսանկարներ</string>
<string name="no_photos_descr">Այս վայրի համար լուսանկարներ չունենք։</string> <string name="no_photos_descr">Այս վայրի համար լուսանկարներ չունենք։</string>
@ -258,23 +257,23 @@
<string name="mapillary_descr">Առցանց փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը:</string> <string name="mapillary_descr">Առցանց փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը:</string>
<string name="mapillary">Մափիլարի(Mapillary)</string> <string name="mapillary">Մափիլարի(Mapillary)</string>
<string name="plugin_mapillary_descr">Փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը:</string> <string name="plugin_mapillary_descr">Փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը:</string>
<string name="private_access_routing_req">"Նպատակակետը գտնվում է մասնավորի տարածքում: Ցանկանում եք թույլատրել այս ուղեւորությանը մասնավոր ճանապարհներ մուտք գործել?"</string> <string name="private_access_routing_req">"Նպատակակետը գտնվում է մասնավորի տարածքում: Թույլատրել այս ուղևորությանը մասնավոր ճանապարհներ մուտք գործել?"</string>
<string name="restart_search">Նորից որոնեք</string> <string name="restart_search">Նորից որոնեք</string>
<string name="increase_search_radius">Ավելացնել որոնման շառավղը</string> <string name="increase_search_radius">Ավելացնել որոնման շառավղը</string>
<string name="nothing_found">Ոչինչ չի գտնվել :(</string> <string name="nothing_found">Ոչինչ չի գտնվել</string>
<string name="nothing_found_descr">"Փոխել հարցումը կամ ավելացնել որոնման շառավիղը։"</string> <string name="nothing_found_descr">"Փոխել հարցումը կամ ավելացնել որոնման շառավիղը։"</string>
<string name="quick_action_showhide_osmbugs_title">Ցույց տալ/թաքցնել OSM նշումները</string> <string name="quick_action_showhide_osmbugs_title">Ցույց տալ/թաքցնել OSM նշումները</string>
<string name="quick_action_osmbugs_show">Ցույց տալ OSM նշումները</string> <string name="quick_action_osmbugs_show">Ցույց տալ OSM նշումները</string>
<string name="quick_action_osmbugs_hide">Թաքցնել OSM նշումները</string> <string name="quick_action_osmbugs_hide">Թաքցնել OSM նշումները</string>
<string name="quick_action_showhide_osmbugs_descr">Գործողությունների կոճակը հպելով, քարտեզի վրա ցույց կտա կամ կթաքցնի OSM- ի նշումները:</string> <string name="quick_action_showhide_osmbugs_descr">Գործողությունների կոճակը սխմելով, քարտեզի վրա ցույց կտա կամ կթաքցնի OSM-ի նշումները:</string>
<string name="sorted_by_distance">Դասավորված է ըստ հեռավորության</string> <string name="sorted_by_distance">Դասավորված է ըստ հեռավորության</string>
<string name="search_favorites">Որոնում Սիրվածում</string> <string name="search_favorites">Որոնում Սիրվածում</string>
<string name="hillshade_menu_download_descr">Ռելիեֆի ստվերները ցուցադրելու համար անհրաժեշտ է ներբեռնել հատուկ քարտեզ այս տարածքի համար:</string> <string name="hillshade_menu_download_descr">Ներբեռնել \"Ռելիեֆի ստվերները\" հատուկ քարտեզ այս տարածքի համար:</string>
<string name="hillshade_purchase_header">Ռելիեֆի ստվերները ցուցադրելու համար անհրաժեշտ է գնել եւ տեղադրել Contour Lines plugin</string> <string name="hillshade_purchase_header">Տեղադրել Contour Lines plugin \"Ռելիեֆի ստվերները\" ցուցադրելու համար</string>
<string name="hide_from_zoom_level">"Թաքցնել մոտեցման մասշտաբից"</string> <string name="hide_from_zoom_level">"Թաքցնել մոտեցման մասշտաբից"</string>
<string name="srtm_menu_download_descr">Եզրագծերը դիտելու համար անհրաժեշտ է ներբեռնել հատուկ քարտեզ այս տարածքի համար:</string> <string name="srtm_menu_download_descr">Ներբեռնել \"Եզրագծեր\" հատուկ քարտեզ այս տարածքի համար:</string>
<string name="shared_string_plugin">Պլագին</string> <string name="shared_string_plugin">Պլագին</string>
<string name="srtm_purchase_header">Եզրագծերը դիտելու համար անհրաժեշտ անհրաժեշտ է գնել եւ տեղադրել Contour Lines plugin</string> <string name="srtm_purchase_header">"\"Եզրագծերը\" դիտելու համար անհրաժեշտ է գնել և տեղադրել \"Contour Lines\" plugin"</string>
<string name="srtm_color_scheme">Գունային սխեմա</string> <string name="srtm_color_scheme">Գունային սխեմա</string>
<string name="show_from_zoom_level">Ցուցադրել խոշորացման մակարդակից</string> <string name="show_from_zoom_level">Ցուցադրել խոշորացման մակարդակից</string>
<string name="routing_attr_allow_private_name">Թույլ տալ մասնավոր մուտք</string> <string name="routing_attr_allow_private_name">Թույլ տալ մասնավոր մուտք</string>
@ -294,21 +293,21 @@
<string name="select_city">Ընտրեք քաղաքը</string> <string name="select_city">Ընտրեք քաղաքը</string>
<string name="select_postcode">Ընտրեք փոստային կոդը</string> <string name="select_postcode">Ընտրեք փոստային կոդը</string>
<string name="quick_action_auto_zoom">Քարտեզի ավտոմասշտաբ on/off</string> <string name="quick_action_auto_zoom">Քարտեզի ավտոմասշտաբ on/off</string>
<string name="quick_action_auto_zoom_desc">"Գործողությունների կոճակը հպելով, ավտոմասշտաբի on/off համաձայն ձեր արագությանը:"</string> <string name="quick_action_auto_zoom_desc">Սխմելով այս գործողությունների կոճակը ակտիվացնում է ավտոմասշտաբի on/off համաձայն ձեր արագությանը:</string>
<string name="quick_action_auto_zoom_on">Միացնել ավտոմասշտաբ</string> <string name="quick_action_auto_zoom_on">Միացնել ավտոմասշտաբ</string>
<string name="quick_action_auto_zoom_off">Անջատել ավտոմաստաբ</string> <string name="quick_action_auto_zoom_off">Անջատել ավտոմաստաբ</string>
<string name="quick_action_add_destination">Ավելացնել նպատակակետ</string> <string name="quick_action_add_destination">Ավելացնել նպատակակետ</string>
<string name="quick_action_replace_destination">Փոխարինել նպատակակետը</string> <string name="quick_action_replace_destination">Փոխարինել նպատակակետը</string>
<string name="quick_action_add_first_intermediate">Ավելացնել առաջին միջանկյալ կետը</string> <string name="quick_action_add_first_intermediate">Ավելացնել առաջին միջանկյալ կետը</string>
<string name="quick_action_add_destination_desc">Գործողությունների կոճակը հպելով, ավելացննում նպատակակետ էկրանի կենտրոնում։ Մինչ այդ ընտրած նպատակակետը կդառնա միջանկյալ կետ։</string> <string name="quick_action_add_destination_desc">Սխմելով այս գործողությունների կոճակը, ավելացննում նպատակակետ էկրանի կենտրոնում։ Մինչ այդ ընտրած նպատակակետը կդառնա միջանկյալ կետ։</string>
<string name="quick_action_replace_destination_desc">Գործողությունների կոճակը հպելով, տեղափոխում նպատակակետը էկրանի կենտրոն։</string> <string name="quick_action_replace_destination_desc">Սխմելով այս գործողությունների կոճակը, տեղափոխում նպատակակետը էկրանի կենտրոն։</string>
<string name="quick_action_add_first_intermediate_desc">Գործողությունների կոճակը հպելով, ավելացննում է առաջին միջանկյալ կետ էկրանի կենտրոնում։</string> <string name="quick_action_add_first_intermediate_desc">Սխմելով այս գործողությունների կոճակը, ավելացննում է առաջին միջանկյալ կետ էկրանի կենտրոնում։</string>
<string name="no_overlay">Ծածկույթի քարտեզը անջատված է</string> <string name="no_overlay">Ծածկույթի քարտեզը անջատված է</string>
<string name="no_underlay">Նեքեվի շերնը անջատված է</string> <string name="no_underlay">Նեքեվի շերնը անջատված է</string>
<string name="subscribe_email_error">Սխալ</string> <string name="subscribe_email_error">Սխալ</string>
<string name="subscribe_email_desc">Բաժանորդագրվեք մեր էլեկտրոնային փոստի առաքմանը `OsmAnd զեղչերի մասին եւ ստացիր 3 լրացուցիչ քարտեզների ներբեռնում:</string> <string name="subscribe_email_desc">Բաժանորդագրվեք մեր էլեկտրոնային փոստի առաքմանը `OsmAnd զեղչերի մասին և ստացիր 3 լրացուցիչ քարտեզների ներբեռնում:</string>
<string name="depth_contour_descr">Քարտեզներ, որոնք պարունակոմ են եզրագծեր և ծովային խորության կետեր։</string> <string name="depth_contour_descr">Քարտեզներ՝ ծովային եզրագծեր և խորության կետեր։</string>
<string name="sea_depth_thanks">Շնորհակալություն ծովային խորքային ուրվագծերի ձեռքբերման համար:</string> <string name="sea_depth_thanks">Շնորհակալություն \"Ծովային խորքային ուրվագծերի\" ձեռքբերման համար</string>
<string name="index_item_depth_contours_osmand_ext">Ծովային խորքային ուրվագծեր</string> <string name="index_item_depth_contours_osmand_ext">Ծովային խորքային ուրվագծեր</string>
<string name="download_depth_countours">Ծովային խորքային ուրվագիծը</string> <string name="download_depth_countours">Ծովային խորքային ուրվագիծը</string>
<string name="nautical_maps">Ծովային քարտեզներ</string> <string name="nautical_maps">Ծովային քարտեզներ</string>
@ -321,17 +320,17 @@
<string name="do_not_send_anonymous_app_usage">Չհավաքել օգտագործման վիճակագրությունը</string> <string name="do_not_send_anonymous_app_usage">Չհավաքել օգտագործման վիճակագրությունը</string>
<string name="do_not_show_startup_messages">Չցուցադրել հաղորդագրությունները մեկնարկին</string> <string name="do_not_show_startup_messages">Չցուցադրել հաղորդագրությունները մեկնարկին</string>
<string name="parking_options">Ավտոկանգառի ընտրանքներ</string> <string name="parking_options">Ավտոկանգառի ընտրանքներ</string>
<string name="full_version_thanks">Շնորհակալություն OsmAnd-ի ամբողջական տարբերակի ձեռք բերեման համար!</string> <string name="full_version_thanks">Շնորհակալություն OsmAnd-ի վճարովի տարբերակի ձեռք բերեման համար։</string>
<string name="routing_attr_relief_smoothness_factor_hills_name">Լեռնոտ</string> <string name="routing_attr_relief_smoothness_factor_hills_name">Լեռնոտ</string>
<string name="routing_attr_relief_smoothness_factor_plains_name">Քիչ լեռնոտ</string> <string name="routing_attr_relief_smoothness_factor_plains_name">Քիչ լեռնոտ</string>
<string name="routing_attr_relief_smoothness_factor_more_plains_name">Բնակարան</string> <string name="routing_attr_relief_smoothness_factor_more_plains_name">Բնակարան</string>
<string name="routing_attr_driving_style_speed_name">Կարճ երթուղիները</string> <string name="routing_attr_driving_style_speed_name">Կարճ երթուղիները</string>
<string name="routing_attr_driving_style_balance_name">Հավասարակշռված</string> <string name="routing_attr_driving_style_balance_name">Հավասարակշռված</string>
<string name="routing_attr_driving_style_safety_name">նախընտրում անընդմեջ</string> <string name="routing_attr_driving_style_safety_name">նախընտրում անընդմեջ</string>
<string name="relief_smoothness_factor_descr">Նախընտրելի տեղանք`հարթ կամ լեռնոտ։</string> <string name="relief_smoothness_factor_descr">Նախընտրելի տեղանք`Հարթ կամ լեռնոտ։</string>
<string name="shared_string_slope">Լանջ</string> <string name="shared_string_slope">Լանջ</string>
<string name="add_new_folder">Ավելացնել նոր թղթապանակ</string> <string name="add_new_folder">Ավելացնել նոր թղթապանակ</string>
<string name="points_delete_multiple_succesful">Կետ(եր)ը հաջողությամբ ջնջված է:</string> <string name="points_delete_multiple_succesful">Կետ(եր)ը ջնջված է:</string>
<string name="points_delete_multiple">Դուք մտադիր եք ջնջել կետ(եր)ը: Համոզված եք?</string> <string name="points_delete_multiple">Դուք մտադիր եք ջնջել կետ(եր)ը: Համոզված եք?</string>
<string name="track_points_category_name">Հայտնի կետեր այս երթուղու վրա</string> <string name="track_points_category_name">Հայտնի կետեր այս երթուղու վրա</string>
<string name="gpx_track">Տրեկ</string> <string name="gpx_track">Տրեկ</string>
@ -340,8 +339,8 @@
<string name="shared_string_time_moving">Ժամանակն շարժման մեջ</string> <string name="shared_string_time_moving">Ժամանակն շարժման մեջ</string>
<string name="shared_string_time_span">Ընդհանուր ժամանակը</string> <string name="shared_string_time_span">Ընդհանուր ժամանակը</string>
<string name="shared_string_max">Առավելագույն</string> <string name="shared_string_max">Առավելագույն</string>
<string name="shared_string_start_time">Սկսման Ժամկետ</string> <string name="shared_string_start_time">Մեկնում</string>
<string name="shared_string_end_time">Ավարտման Ժամկետ</string> <string name="shared_string_end_time">Ժամանում</string>
<string name="shared_string_color">Գույնը</string> <string name="shared_string_color">Գույնը</string>
<string name="select_gpx_folder">Ընտրեք թղթապանակ տրեկերի համար</string> <string name="select_gpx_folder">Ընտրեք թղթապանակ տրեկերի համար</string>
<string name="file_can_not_be_moved">Ֆայլը չի կարող տեղափոխվել:</string> <string name="file_can_not_be_moved">Ֆայլը չի կարող տեղափոխվել:</string>
@ -373,7 +372,7 @@
<string name="show_legacy_search">Ցույց տալ հին որոնման տեսակը</string> <string name="show_legacy_search">Ցույց տալ հին որոնման տեսակը</string>
<string name="routing_attr_allow_motorway_name">Թույլատրել ավտոմայրուղիներ</string> <string name="routing_attr_allow_motorway_name">Թույլատրել ավտոմայրուղիներ</string>
<string name="routing_attr_allow_motorway_description">Թույլատրել ավտոմայրուղիներ։</string> <string name="routing_attr_allow_motorway_description">Թույլատրել ավտոմայրուղիներ։</string>
<string name="upload_osm_note_description">Դուք կարող եք վերբեռնել ձեր OSM Նշումը անանուն կամ ձեր OpenStreetMap.org պրոֆիլի միջոցով:</string> <string name="upload_osm_note_description">Վերբեռնել ձեր OSM \"Նշումը\" անանուն կամ ձեր OpenStreetMap.org պրոֆիլի միջոցով:</string>
<string name="wiki_around">Վիքիպեդիայի հոդվածներ</string> <string name="wiki_around">Վիքիպեդիայի հոդվածներ</string>
<string name="search_map_hint">Որոնել քաղաք կամ երկիր</string> <string name="search_map_hint">Որոնել քաղաք կամ երկիր</string>
<string name="route_roundabout_short">Վերցրեք %1$d ելքը</string> <string name="route_roundabout_short">Վերցրեք %1$d ելքը</string>
@ -405,10 +404,10 @@
<string name="save_filter">Պահպանել ֆիլտրը</string> <string name="save_filter">Պահպանել ֆիլտրը</string>
<string name="delete_filter">Ջնջել ֆիլտրը</string> <string name="delete_filter">Ջնջել ֆիլտրը</string>
<string name="new_filter">Նոր ֆիլտր</string> <string name="new_filter">Նոր ֆիլտր</string>
<string name="new_filter_desc">Մուտքագրեք նոր ֆիլտրի անունը: Դուք կարող եք գտնել այն Կատեգորիաների ցանկում:</string> <string name="new_filter_desc">Մուտքագրեք նոր ֆիլտրի անունը: Դուք կարող եք գտնել այն \"Կատեգորիաների\" ցանկում:</string>
<string name="osm_live_payment_desc">"Բաժանորդային վճարը գանձվում է ամսական կտրվածքով:Դուք կարող եք չեղարկել բաժանորդագրությունը Google Play-յում ցանկացած պահի:"</string> <string name="osm_live_payment_desc">"Բաժանորդային վճարը գանձվում է ամսական կտրվածքով:Դուք կարող եք չեղարկել բաժանորդագրությունը Google Play-յում ցանկացած պահի:"</string>
<string name="donation_to_osm">Նվիրատվություն OpenStreetMap համայնքին</string> <string name="donation_to_osm">Նվիրատվություն OpenStreetMap համայնքին</string>
<string name="donation_to_osm_desc">Ձեր նվիրատվության մի մասը կուղարկվի OSM մասնակիցներին, որոնք փոփոխություններ են մտցմում OpenStreetMap-ուն: Բաժանորդագրության արժեքը մնում է նույնը:</string> <string name="donation_to_osm_desc">Ձեր նվիրատվության մի մասը ուղարկվում է OSM մասնակիցներին, որոնք փոփոխություններ են մտցմում OpenStreetMap-ուն: Բաժանորդագրության արժեքը մնում է նույնը:</string>
<string name="osm_live_subscription_desc">Բաժանորդագրությունը հնարավորութուն է տալիս անսահմանափակ թարմացումներ ներբեռնել աշխարհի ցանկացած քարտեզներ ամեն ժամ, ամենօրյա, շաբաթական:</string> <string name="osm_live_subscription_desc">Բաժանորդագրությունը հնարավորութուն է տալիս անսահմանափակ թարմացումներ ներբեռնել աշխարհի ցանկացած քարտեզներ ամեն ժամ, ամենօրյա, շաբաթական:</string>
<string name="get_it">Ստանալ այն</string> <string name="get_it">Ստանալ այն</string>
<string name="get_for">Ստանալ %1$s</string> <string name="get_for">Ստանալ %1$s</string>
@ -417,7 +416,7 @@
<string name="osmand_plus_banner_desc">Անսահմանափակ քարտեզների ներբեռնում , թարմացումներ, եւ Wikipedia plugin։</string> <string name="osmand_plus_banner_desc">Անսահմանափակ քարտեզների ներբեռնում , թարմացումներ, եւ Wikipedia plugin։</string>
<string name="si_mi_meters">Մղոններ/մետր</string> <string name="si_mi_meters">Մղոններ/մետր</string>
<string name="skip_map_downloading">Բաց թողնել քարտեզների ներբեռնումը</string> <string name="skip_map_downloading">Բաց թողնել քարտեզների ներբեռնումը</string>
<string name="skip_map_downloading_desc">Դուք չունեք անցանց քարտեզներ: Դուք կարող եք ընտրել քարտեզը ցուցակից կամ ներբեռնել քարտեզները հետագայում Menu - %1$s միջոցով:</string> <string name="skip_map_downloading_desc">Դուք չունեք անցանց քարտեզներ: Դուք կարող եք ընտրել քարտեզը ցուցակից կամ ներբեռնել քարտեզները հետագայում \"Menu - %1$s\" միջոցով:</string>
<string name="search_another_country">Ընտրեք այլ տարածաշրջան</string> <string name="search_another_country">Ընտրեք այլ տարածաշրջան</string>
<string name="search_map">Քարտեզների որոնում…</string> <string name="search_map">Քարտեզների որոնում…</string>
<string name="first_usage_wizard_desc">OsmAnd-ը կորոշի ձեր դիրքը և առաջարկի քարտեզներ ներբեռնման համար այդ տարածաշրջանի համար:</string> <string name="first_usage_wizard_desc">OsmAnd-ը կորոշի ձեր դիրքը և առաջարկի քարտեզներ ներբեռնման համար այդ տարածաշրջանի համար:</string>
@ -436,22 +435,22 @@
<string name="auto_split_recording_descr">Սկսել նոր սեգմենտ 6 րոպեանոց ընդմիջումից հետո, նոր տրեկ 2 ժամանոց ընդմիջումից հետո կամ նոր ֆայլ երկարատև ընդմիջումից հետո (եթե ամսաթիվը փոխվել է):</string> <string name="auto_split_recording_descr">Սկսել նոր սեգմենտ 6 րոպեանոց ընդմիջումից հետո, նոր տրեկ 2 ժամանոց ընդմիջումից հետո կամ նոր ֆայլ երկարատև ընդմիջումից հետո (եթե ամսաթիվը փոխվել է):</string>
<string name="rendering_attr_contourColorScheme_description">Եզրագծերի գունային սխեման</string> <string name="rendering_attr_contourColorScheme_description">Եզրագծերի գունային սխեման</string>
<string name="save_track_min_speed">Նվազագույն արագությունը մուտքագրելու համար</string> <string name="save_track_min_speed">Նվազագույն արագությունը մուտքագրելու համար</string>
<string name="save_track_min_speed_descr">Ֆիլտր՝ Նշանակել նվազագույն արագություն կետի համար։</string> <string name="save_track_min_speed_descr">Ֆիլտր՝ Չգրանցել կետերը այս արագությունից ցածր լինելու դեպքում:</string>
<string name="save_track_min_distance">Նվազագույն տեղաշարժը մուտքագրելու համար</string> <string name="save_track_min_distance">Նվազագույն տեղաշարժը մուտքագրելու համար</string>
<string name="save_track_min_distance_descr">Ֆիլտր՝ Նշանակել նվազագույն հեռավորությունը կետի համար վերջին դիրքից։</string> <string name="save_track_min_distance_descr">Ֆիլտր՝ Նշանակել նվազագույն հեռավորությունը այս կետից նոր կետ գրանցելու համար։</string>
<string name="save_track_precision">Նվազագույն ճշգրտությունը մուտքագրելու համար</string> <string name="save_track_precision">Նվազագույն ճշգրտությունը մուտքագրելու համար</string>
<string name="save_track_precision_descr">Ֆիլտր՝ Նշանակել նվազագույն ճշգրտություն կետի համար։</string> <string name="save_track_precision_descr">Ֆիլտր՝ Չարձանագրել, եթե այդ ճշգրտության չի հասել։</string>
<string name="christmas_desc">Սուրբ Ծննդյան եւ Ամանորյա տոների նախօրեին դուք կարող եք ընտրել Սուրբ Ծնունդի հետ կապված POI-ների ցուցադրումը՝ տոնածառեր, տոնավաճառներ և այլն:</string> <string name="christmas_desc">Սուրբ Ծննդյան եւ Ամանորյա տոների նախօրեին դուք կարող եք ընտրել Սուրբ Ծնունդի հետ կապված POI-ների ցուցադրումը՝ տոնածառեր, տոնավաճառներ և այլն:</string>
<string name="rendering_value_light_brown_name">Բաց-շագանակագույն</string> <string name="rendering_value_light_brown_name">Բաց-շագանակագույն</string>
<string name="rendering_value_dark_brown_name">Մուգ շագանակագույն</string> <string name="rendering_value_dark_brown_name">Մուգ շագանակագույն</string>
<string name="rendering_attr_contourColorScheme_name">Contour lines գունային սխեման</string> <string name="rendering_attr_contourColorScheme_name">Contour lines գունային սխեման</string>
<string name="translit_name_if_miss">Transliterate եթե %1$s անունը բացակայում է</string> <string name="translit_name_if_miss">Transliterate եթե %1$s անունը բացակայում է</string>
<string name="translit_names">Transliterate անունները</string> <string name="translit_names">Transliterate անունները</string>
<string name="first_usage_greeting">Ստացեք երթուղիներ եւ հայտնաբերեք նոր վայրեր առանց ինտերնետ կապի</string> <string name="first_usage_greeting">Ստացեք երթուղիներ և հայտնաբերեք նոր վայրեր առանց ինտերնետ կապի</string>
<string name="search_my_location">Գտնել իմ դիրքը</string> <string name="search_my_location">Գտնել իմ դիրքը</string>
<string name="no_update_info_desc">Չստուգել թարմացումների համար կամ թարմացումներ կապված OsmAnd-ի զեղչեր հետ։</string> <string name="no_update_info_desc">Չստուգել թարմացումների համար կամ թարմացումներ կապված OsmAnd-ի զեղչեր հետ։</string>
<string name="no_update_info">Չցուցադրել թարմացումներ</string> <string name="no_update_info">Չցուցադրել թարմացումներ/նոր տարբերակներ</string>
<string name="update_all_maps_now">Ցանկանում եք թարմացնել բոլոր քարտեզները հիմա?</string> <string name="update_all_maps_now">Թարմացնել բոլոր քարտեզները հիմա?</string>
<string name="clear_tile_data">"Ջնջել բոլոր տայլերը"</string> <string name="clear_tile_data">"Ջնջել բոլոր տայլերը"</string>
<string name="routing_attr_short_way_name">Վառելիք տնտեսող ճանապարհ</string> <string name="routing_attr_short_way_name">Վառելիք տնտեսող ճանապարհ</string>
<string name="routing_attr_short_way_description">Կիրառել վառելիք տնտեսող ճանապարհ (սովորաբար ավելի կարճ)։</string> <string name="routing_attr_short_way_description">Կիրառել վառելիք տնտեսող ճանապարհ (սովորաբար ավելի կարճ)։</string>
@ -463,7 +462,7 @@
<string name="coords_search">Որոնել ըստ կոորդինատների</string> <string name="coords_search">Որոնել ըստ կոորդինատների</string>
<string name="advanced_coords_search">Ընդլայնված որոնում ըստ կոորդինատների</string> <string name="advanced_coords_search">Ընդլայնված որոնում ըստ կոորդինատների</string>
<string name="back_to_search">Վերադառնալ որոնմանը</string> <string name="back_to_search">Վերադառնալ որոնմանը</string>
<string name="confirmation_to_delete_history_items">Ցանկանում եք ջնջե՞լ ընտրված առարկաները պատմությունից?</string> <string name="confirmation_to_delete_history_items">Ջնջե՞լ ընտրված առարկաները \"Պատմությունից\"?</string>
<string name="show_something_on_map">Ցույց տալ %1$s քարտեզի վրա</string> <string name="show_something_on_map">Ցույց տալ %1$s քարտեզի վրա</string>
<string name="dist_away_from_my_location">Որոնում %1$s գտնվելու դիքից</string> <string name="dist_away_from_my_location">Որոնում %1$s գտնվելու դիքից</string>
<string name="search_categories">Կատեգորիաներ</string> <string name="search_categories">Կատեգորիաներ</string>
@ -480,13 +479,13 @@
<string name="app_mode_train">Գնացք</string> <string name="app_mode_train">Գնացք</string>
<string name="current_track">Ընթացիկ տրեկ</string> <string name="current_track">Ընթացիկ տրեկ</string>
<string name="map_widget_battery">Մարտկոցի լիցքավորման մակարդակը</string> <string name="map_widget_battery">Մարտկոցի լիցքավորման մակարդակը</string>
<string name="change_markers_position">Տեղափոխել մարկերը դիրքը</string> <string name="change_markers_position">Տեղափոխել մարկերի դիրքը</string>
<string name="move_marker_bottom_sheet_title">Տեքաշարժեք քարտեզը որպեսզի փոխեք մարկերի դիրքը</string> <string name="move_marker_bottom_sheet_title">Տեքաշարժեք քարտեզը որպեսզի փոխեք մարկերի դիրքը</string>
<string name="follow_us">Բաժանորդագրվեք մեզ</string> <string name="follow_us">Բաժանորդագրվեք մեզ</string>
<string name="access_direction_audio_feedback_descr">Ձայնով ազդարարել նպատակակետի ուղղութունը։</string> <string name="access_direction_audio_feedback_descr">Ձայնով ազդարարել նպատակակետի ուղղութունը։</string>
<string name="use_osm_live_routing_description">"Միացնել նավիգացիան հաշվը առնելով OsmAnd Live թարմացումները։"</string> <string name="use_osm_live_routing_description">"Միացնել նավիգացիան հաշվը առնելով OsmAnd Live թարմացումները։"</string>
<string name="use_osm_live_routing">OsmAnd Live նավիգացիա</string> <string name="use_osm_live_routing">OsmAnd Live նավիգացիա</string>
<string name="access_no_destination">Նպատակը սահմանված չէ</string> <string name="access_no_destination">Նպատակակետը սահմանված չէ</string>
<string name="map_widget_magnetic_bearing">Մագնիսական կրող</string> <string name="map_widget_magnetic_bearing">Մագնիսական կրող</string>
<string name="access_disable_offroute_recalc">Երթուղին դադարեցնելուց հետո երթուղու վերահաշվարկ չի կատարվում</string> <string name="access_disable_offroute_recalc">Երթուղին դադարեցնելուց հետո երթուղու վերահաշվարկ չի կատարվում</string>
<string name="access_disable_offroute_recalc_descr">Կանխել երթուղու ավտոմատ վերահաշվարկը երթուղին դադարեցնելուց հետո։</string> <string name="access_disable_offroute_recalc_descr">Կանխել երթուղու ավտոմատ վերահաշվարկը երթուղին դադարեցնելուց հետո։</string>
@ -961,13 +960,13 @@
<string name="shared_string_my_favorites">Իմ Սիրածները</string> <string name="shared_string_my_favorites">Իմ Սիրածները</string>
<string name="release_2_6">Նոր առանձնահատկություն. Արագ գործողության կոճակ <string name="release_2_6">Նոր առանձնահատկություն. Արագ գործողության կոճակ
\n \n
\n• Բարելավված սենսորային էկրանի արձագանք (օրինակ `զուգահեռ համաժամանակ եւ մեծացնելու) \n• Բարելավված սենսորային էկրանի արձագանք (օրինակ `զուգահեռ համաժամանակ և մեծացնելու)
\n \n
\n• Նոր քարտեզ տառատեսակներ, որոնք ընդգրկելով ավելի շատ տեղական վայրեր \n• Նոր քարտեզ տառատեսակներ, որոնք ընդգրկելով ավելի շատ տեղական վայրեր
\n \n
\n•Աջակցություն TTS-ը տարածաշրջանային լեզվական տարբերակների (եւ շեշտադրումները) \n•Աջակցություն TTS-ը տարածաշրջանային լեզվական տարբերակների (և շեշտադրումները)
\n \n
\n• Տեսանելիության բարելավում մի քանի քարտեզի ոճերում եւ վիքիպեդիայում \n• Տեսանելիության բարելավում մի քանի քարտեզի ոճերում և Վիքիպեդիայում(Wikipedia)
\n \n
\n• Աջակցում Բաց գտնվելու վայրի կոդը (OLC) \n• Աջակցում Բաց գտնվելու վայրի կոդը (OLC)
\n \n
@ -2207,8 +2206,8 @@
<string name="shared_string_right">Աջ</string> <string name="shared_string_right">Աջ</string>
<string name="shared_string_left">Ձախ</string> <string name="shared_string_left">Ձախ</string>
<string name="shared_string_paste">Տեղադրել</string> <string name="shared_string_paste">Տեղադրել</string>
<string name="go_to_next_field">Տեղափոխվեք հաջորդ դաշտ</string> <string name="go_to_next_field">Հաջորդ դաշտը</string>
<string name="import_gpx_file_description">կարող են ներմուծվել որպես «Սիրելի» կետեր, կամ որպես հետևի(track) ֆայլ:</string> <string name="import_gpx_file_description">կարող են ներմուծվել որպես «Սիրելի», կամ որպես track ֆայլ:</string>
@ -2582,9 +2581,9 @@
<string name="retry">Կրկնել</string> <string name="retry">Կրկնել</string>
<string name="track_waypoints">Տրեկի (track) կետերը</string> <string name="track_waypoints">Տրեկի (track) կետերը</string>
<string name="add_group">Ավելացնել խումբ</string> <string name="add_group">Ավելացնել խումբ</string>
<string name="add_group_descr">Դուք կարող եք ներմուծել խումբ «Սիրված»-ներից կամ տրեկի կետերից:</string> <string name="add_group_descr">Ներմուծել խումբեր «Սիրված»-ներից կամ տրեկի կետերից:</string>
<string name="empty_state_markers_groups">Ներմուծել խմբերը</string> <string name="empty_state_markers_groups">Ներմուծել խմբերը</string>
<string name="empty_state_markers_groups_desc">Դուք կարող եք ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ:</string> <string name="empty_state_markers_groups_desc">Ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ:</string>
<string name="shared_string_two">Երկու</string> <string name="shared_string_two">Երկու</string>
<string name="shared_string_one">Մեկ</string> <string name="shared_string_one">Մեկ</string>
<string name="add_waypoint">Ավելացնել կետ</string> <string name="add_waypoint">Ավելացնել կետ</string>
@ -2603,11 +2602,11 @@
<string name="add_segment_to_the_track">Ավելացնել սեգմենտը GPX-ին</string> <string name="add_segment_to_the_track">Ավելացնել սեգմենտը GPX-ին</string>
<string name="shared_string_more_without_dots">Ավելին</string> <string name="shared_string_more_without_dots">Ավելին</string>
<string name="appearance_on_the_map">Տեսքը քարտեզի վրա</string> <string name="appearance_on_the_map">Տեսքը քարտեզի վրա</string>
<string name="add_track_to_markers_descr">"Ընտրեք տրեկը ճանապարհային կետերը ավելացնելու մարկերներին։ (Ցուցադրված միայն այն տրեկների որոնք ունեն ճանապարհային կետեր։)"</string> <string name="add_track_to_markers_descr">"Ճանապարհային կետերը կարող եք ավելացնել մարկերներին ընտրելով այս տրեկերից մեկը, որը պարունակոմ է ճանապարհային կետեր(waypoints)։"</string>
<string name="add_favourites_group_to_markers_descr">Ընտրեք «Սիրված» խումբը, որը ցանկանում եք ավելացնել մարկերներին։</string> <string name="add_favourites_group_to_markers_descr">Ընտրեք «Սիրված» խումբը, որը ցանկանում եք ավելացնել մարկերներին։</string>
<string name="favourites_group">«Սիրված»-ի կատեգորիան</string> <string name="favourites_group">«Սիրված»-ի կատեգորիան</string>
<string name="empty_state_markers_active">Ստեղծեք քարտեզի մարկերներ!</string> <string name="empty_state_markers_active">Ստեղծեք քարտեզի մարկերներ!</string>
<string name="empty_state_markers_active_desc">Սեղմեք ցանկալի վայրում, ապա մարկերի վրա:</string> <string name="empty_state_markers_active_desc">Սեղմեք ցանկալի վայրում, ապա մարկերի կոճակի վրա:</string>
<string name="empty_state_markers_history_desc">Այս էկրանին կհայտնվեն մարկերներ, որոնք նշված են ինչպես անցած։</string> <string name="empty_state_markers_history_desc">Այս էկրանին կհայտնվեն մարկերներ, որոնք նշված են ինչպես անցած։</string>
<string name="digits_quantity">Տասներորդ թվերի թվաքանակը</string> <string name="digits_quantity">Տասներորդ թվերի թվաքանակը</string>
<string name="show_number_pad">Ցուցադրել թվային վահանակը</string> <string name="show_number_pad">Ցուցադրել թվային վահանակը</string>
@ -2635,6 +2634,15 @@
<string name="av_locations_all_desc">GPX ֆայլը կոորդինատներով և բոլոր նշումների տվյալները։</string> <string name="av_locations_all_desc">GPX ֆայլը կոորդինատներով և բոլոր նշումների տվյալները։</string>
<string name="release_3_0">\\022 <string name="release_3_0">\\022
\n \n
\nՆոր Ճամփորդության մենյու. Դիտեք WikiVoyage- ի հոդվածները առանց ինտերնետի օգտագործման
\n
\n • Wikipedia՝ նոր տեսք, ակտիվ հղումներ, պատկերներ
\n
\n • Open Track UI՝ ցուցադրում waypoint խմբերը
\n
\n • Քարտեզի մարկերներ՝ Ընտրված խմբերի ներմուծում GPX ֆայլերից, կոորդինատների մուտքագրման նոր տեսքը
\n
\n • OsmAnd Live բաժանորդագրությունը այժմ ներառում է բոլոր OsmAnd առանձնահատկությունները
\n \n
\n \n
\n</string> \n</string>
@ -2654,7 +2662,7 @@
<string name="show_guide_line_descr">Ցուցադրել ուղեցույցները ձեր գտնվելու վայրից մինչև ակտիվ մարկերներ:</string> <string name="show_guide_line_descr">Ցուցադրել ուղեցույցները ձեր գտնվելու վայրից մինչև ակտիվ մարկերներ:</string>
<string name="show_arrows_descr">Ցուցադրել մեկ կամ երկու նետ, նշելով ակտիվ մարկերների ուղղությունը:</string> <string name="show_arrows_descr">Ցուցադրել մեկ կամ երկու նետ, նշելով ակտիվ մարկերների ուղղությունը:</string>
<string name="distance_indication_descr">Ընտրեք, թե ինչպես ցուցադրեք հեռավորությունը մինչև ակտիվ մարկերներին:</string> <string name="distance_indication_descr">Ընտրեք, թե ինչպես ցուցադրեք հեռավորությունը մինչև ակտիվ մարկերներին:</string>
<string name="active_markers_descr">Ընտրեք, թե որքան ուղղության ցուցիչներ ցույց տալ:</string> <string name="active_markers_descr">Ընտրեք, թե որքան \"ուղղության ցուցիչներ\" ցույց տալ:</string>
<string name="coordinate_input_accuracy_description">Ավտոմատ առաջընթաց հաջորդ դաշտ տասնորդական կետից հետո մուտքագրելուց %1$d թվեր:</string> <string name="coordinate_input_accuracy_description">Ավտոմատ առաջընթաց հաջորդ դաշտ տասնորդական կետից հետո մուտքագրելուց %1$d թվեր:</string>
<string name="tap_on_map_to_hide_interface_descr">Սեղմելով քարտեզի վրա փոխարինում են հսկողության կոճակները եւ վիջեթները:</string> <string name="tap_on_map_to_hide_interface_descr">Սեղմելով քարտեզի վրա փոխարինում են հսկողության կոճակները եւ վիջեթները:</string>
<string name="tap_on_map_to_hide_interface">Ամբողջ էկրանով ռեժիմ</string> <string name="tap_on_map_to_hide_interface">Ամբողջ էկրանով ռեժիմ</string>
@ -2705,11 +2713,11 @@
<string name="osm_edits_export_desc">Ընտրեք արտահանման տեսակը`OSM նշումներ, POI կամ երկուսն էլ:</string> <string name="osm_edits_export_desc">Ընտրեք արտահանման տեսակը`OSM նշումներ, POI կամ երկուսն էլ:</string>
<string name="all_data">Բոլոր տվյալները</string> <string name="all_data">Բոլոր տվյալները</string>
<string name="osm_notes">OSM նշումներ</string> <string name="osm_notes">OSM նշումներ</string>
<string name="will_open_tomorrow_at">Վաղը կբացվի ժամը</string> <string name="will_open_tomorrow_at">"Վաղը կբացվի "</string>
<string name="rendering_attr_hidePOILabels_name">POI պիտակներ</string> <string name="rendering_attr_hidePOILabels_name">POI պիտակներ</string>
<string name="shared_string_without_name">Առանց անունի</string> <string name="shared_string_without_name">Առանց անունի</string>
<string name="show_closed_notes">Ցույց տալ փակած նշումները</string> <string name="show_closed_notes">Ցույց տալ փակած նշումները</string>
<string name="switch_osm_notes_visibility_desc">Ցույց տալ/թաքցնել OSM նշումները քարտեզի վրա</string> <string name="switch_osm_notes_visibility_desc">Ցույց տալ/թաքցնել OSM նշումները քարտեզի վրա:</string>
<string name="release_2_9">"\\022 <string name="release_2_9">"\\022
\n • Թարմացվել է համատեքստային մենյու`ցույց տալ, թե երբ POI- ն բացվում է / փակվում է \n • Թարմացվել է համատեքստային մենյու`ցույց տալ, թե երբ POI- ն բացվում է / փակվում է
\n \n
@ -2767,4 +2775,16 @@
<string name="unlock_all_features">Ստանալ OsmAnd բոլոր գործառույթները</string> <string name="unlock_all_features">Ստանալ OsmAnd բոլոր գործառույթները</string>
<string name="purchase_dialog_title">Ընտրեք Փաթեթ</string> <string name="purchase_dialog_title">Ընտրեք Փաթեթ</string>
<string name="hide_full_description">Թաքցնել ամբողջական նկարագրությունը</string>
<string name="show_full_description">Ցույց տալ ամբողջական նկարագրությունը</string>
<string name="off_road_render_descr">Հարմար է օգտագործել անանցանելի ճանապարհներին երթեւեկության ժամանակ: Հարմար է կանաչ արբանյակային պատկերներով օգտագործելու համար, որպես քարտի հիմքը: Հիմնական առանձնահատկությունները`նվազեցված հիմնական ճանապարհների հաստությունը, ավալացված հաստությունը արահետների, ուղիներ, հեծանիվային և այլ երթուղիների: Այն հիմնված է «Տոպո» ոճովի վրա:</string>
<string name="nautical_render_descr">Ծովային նավարկության ոճը։ Հիմնական առանձնահատկությունները ` փարոսներ, գետի երթուղիները, ծովային երթուղիները և նշանները, նավահանգիստները, ծովային նավերի ծառայությունները, խորքային ուրվագիծը:</string>
<string name="ski_map_render_descr">Դահուկային ոճ: Հիմնական առանձնահատկություններ. ցուցադրում - երթուղիների, լեռնադահուկային վերելակների և այլ լեռնադահուկային առանձնահատկություններ: Ավելի քիչ շեղող երկրորդային օբյեկտներ:</string>
<string name="light_rs_render_descr">Պարզ և հակապատկեր ոճը ավտոմեքենաների նավարկության համար: Աչքերի համար հարմար է գիշերային ռեժիմում: Հիմնական առանձնահատկությունները. Եզրագծերը, հակապատկեր նարնջագույն ճանապարհներ, ավելի քիչ շեղող երկրորդային օբյեկտներ:</string>
<string name="topo_render_descr">"Հակապատկեր ոճը, որը նախատեսված է հիմնականում արշավային զբոսանքի, հետիոտն և հեծանվային զբոսանքի համար. Լավ ընթեռնելիություն բարդ արտաքին լուսավորման ժամանակ. Հիմնական առանձնահատկությունները. հակապատկեր ճանապարհներ և բնական օբյեկտներ, տարբեր տեսակի երթուղիներ, ուրվագծային գծի առաջադեմ պարամետրերով, ավելի մանրամասն տեղեկատվություններ ներկայացված են համապատասխան մակարդակների չափման, քան հիմնական ոճում. Ճանապարհային որակի ծածկույթը տարբերակը թույլ է տալիս տարբերակել ճանապարհի տարբեր որակի մակերեսին. Չկան գիշերային ռեժիմ."</string>
<string name="mapnik_render_descr">Հին ցուցադրման ոճը «Mapnik» է: Հիմնական առանձնահատկությունները` Գույները նման են «Mapnik» ոճին:</string>
<string name="touring_view_render_descr">"Բարձր մանրամասն ոճ շրջագայության համար: Ներառում է կանխադրված ոճի բոլոր կազմաձևային տարբերակները, բացի այդ, ցուցադրվում է որքան հնարավոր է մանրամասն, մասնավորապես, բոլոր ճանապարհները, ճանապարհները և ճանապարհորդելու այլ ուղիներ: Հստակ տեսողական տարբերություն բոլոր տեսակների ճանապարհների միջև, բազմաթիվ զբոսաշրջային ատլասների հիշեցում: Արտաքին օգտագործման, ցերեկային և գիշերային ռեժիմի բարձր հակադրություն գունային սխեման:"</string>
<string name="default_render_descr">Ընդհանուր ոճ: Խիտ բնակեցված քաղաքներում պարզեցված ռենդերինգ: Հիմնական առանձնահատկություններ՝ Եզրագծային գծեր, երթուղիներ, ճանապարհերի մակերեսային որակնը, մուտքի սահմանափակումներ, ճանապարհային նշաններ, SAC սանդղակի երթուղիների արտացոլում, սպորտային համաձուլվածքների բնութագրեր:</string>
<string name="open_wikipedia_link_online">Բացել Wikipedia հղումը առցանց</string>
<string name="open_wikipedia_link_online_description">Հղումը կբացվի վեբ բրաուզերում:</string>
</resources> </resources>

View file

@ -3831,4 +3831,13 @@
<string name="poi_glacier_ele_bottom">Lægsti punktur</string> <string name="poi_glacier_ele_bottom">Lægsti punktur</string>
<string name="poi_glacier_slope">Meðalhalli</string> <string name="poi_glacier_slope">Meðalhalli</string>
<string name="poi_checkpoint_type">Gerð eftirlitsstöðvar</string>
<string name="poi_checkpoint_hiking">Gönguferðastöð</string>
<string name="poi_checkpoint_type_stamp">Stimpilstöð</string>
<string name="poi_checkpoint_type_code">Kóði</string>
<string name="poi_checkpoint_type_notebook">Gestabók</string>
<string name="poi_checkpoint_type_electronic">Rafrænt</string>
<string name="poi_course">Leið</string>
</resources> </resources>

View file

@ -3167,4 +3167,6 @@ Rappresenta l\'area: %1$s x %2$s</string>
<string name="read_wikipedia_offline">Leggi Wikipedia senza una connessione dati</string> <string name="read_wikipedia_offline">Leggi Wikipedia senza una connessione dati</string>
<string name="download_all">Scarica tutto</string> <string name="download_all">Scarica tutto</string>
<string name="shared_string_bookmark">Segnalibro</string> <string name="shared_string_bookmark">Segnalibro</string>
<string name="off_road_render_descr">Adatto alluso durante la guida fuoristrada. Adatto alluso con immagini satellitari come sfondo. Caratteristiche principali: Larghezza delle strade principali ridotta, larghezza di sentieri, carrarecce, piste ciclabili ed altri percorsi aumentata. Basato sullo stile Topo.</string>
<string name="touring_view_render_descr">Stile molto dettagliato per le necessità del turista. Include tutte le opzioni di configurazioni dello stile predefinito e in più: Mostra più dettaglio possibile, in particolare, le strade, i percorsi e altri itinerari per chi viaggia. Distinzione chiara dei vari tipi di strada, come avviene negli atlanti per turisti. Schema dei colori ad alto contrasto per luso allesterno, modalità diurna e notturna.</string>
</resources> </resources>

View file

@ -2890,7 +2890,7 @@
<string name="lang_lo">Лаосский</string> <string name="lang_lo">Лаосский</string>
<string name="day_off_label">вых.</string> <string name="day_off_label">вых.</string>
<string name="winter_and_ski_renderer">Зимний/лыжный</string> <string name="winter_and_ski_renderer">Зимний/лыжный</string>
<string name="touring_view_renderer">Туристический (контраст и детали)</string> <string name="touring_view_renderer">Туристический</string>
<string name="nautical_renderer">Морской</string> <string name="nautical_renderer">Морской</string>
<string name="rendering_attr_hidePOILabels_name">Названия POI</string> <string name="rendering_attr_hidePOILabels_name">Названия POI</string>

View file

@ -2859,7 +2859,15 @@ Zodpovedá oblasti: %1$s x %2$s</string>
<string name="by_type">Podľa typu</string> <string name="by_type">Podľa typu</string>
<string name="one_tap_active">Jedno stlačenie aktívne</string> <string name="one_tap_active">Jedno stlačenie aktívne</string>
<string name="modify_the_search_query">Upraviť vyhľadávacie kritériá.</string> <string name="modify_the_search_query">Upraviť vyhľadávacie kritériá.</string>
<string name="release_3_0">\\022 <string name="release_3_0">\\022 Nové menu Cestovanie: zobrazte si články WikiVoyage bez použitia Internetu
\n
\n • Wikipédia: nový vzhľad, aktívne linky, obrázky
\n
\n • Rozhranie zobrazovania stôp: zobrazuje skupiny prechodných bodov (waypointov)
\n
\n • Mapové značky: import vybraných skupín z GPX súborov, nový vzhľad zadávania súradníc
\n
\n • Predplatné OsmAnd Live zahŕňa všetky funkcie OsmAnd
\n</string> \n</string>
<string name="what_is_here">Čo je tu:</string> <string name="what_is_here">Čo je tu:</string>
<string name="parked_at">zaparkované o</string> <string name="parked_at">zaparkované o</string>

View file

@ -1749,8 +1749,15 @@
<string name="first_intermediate_dest_description">Додаје прво стајање</string> <string name="first_intermediate_dest_description">Додаје прво стајање</string>
<string name="switch_osm_notes_visibility_desc">Прикажи/Сакриј ОСМ белешке на карти.</string> <string name="switch_osm_notes_visibility_desc">Прикажи/Сакриј ОСМ белешке на карти.</string>
<string name="gpx_file">GPX фајл</string> <string name="gpx_file">GPX фајл</string>
<string name="release_3_0">\\022 <string name="release_3_0">\\022 Нови турустички мени: гледајте WikiVoyage чланке без коришћења интернета
\n \n
\n • Википедија: нови изглед, активне везе, слике
\n
\n • Open Track UI: приказ група пролазних тачака
\n
\n • Маркери на карти: увезите означене групе из GPX фајлова
\n
\n • OsmAnd Live претплата сада укључује све OsmAnd функционалности
\n</string> \n</string>
<string name="gpx_file_desc">GPX - погодно за извоз у ЈОСМ и друге ОСМ уређиваче.</string> <string name="gpx_file_desc">GPX - погодно за извоз у ЈОСМ и друге ОСМ уређиваче.</string>
<string name="osc_file_desc">ОСЦ - погодно за извоз у OpenStreetMap.</string> <string name="osc_file_desc">ОСЦ - погодно за извоз у OpenStreetMap.</string>
@ -2571,13 +2578,13 @@
<string name="online_webpage_warning">Страна доступна само док сте на мрежи. Отворити је у веб читачу?</string> <string name="online_webpage_warning">Страна доступна само док сте на мрежи. Отворити је у веб читачу?</string>
<string name="images_cache">Кеш слика</string> <string name="images_cache">Кеш слика</string>
<string name="delete_search_history">Обриши историјат претрага</string> <string name="delete_search_history">Обриши историјат претрага</string>
<string name="download_images">Преузми слике</string> <string name="download_images">Прикажи слике</string>
<string name="download_maps_travel">Карте путовања</string> <string name="download_maps_travel">Карте путовања</string>
<string name="shared_string_wikivoyage">Wikivoyage</string> <string name="shared_string_wikivoyage">Wikivoyage</string>
<string name="article_removed">Чланак уклоњен</string> <string name="article_removed">Чланак уклоњен</string>
<string name="wikivoyage_search_hint">Претрага: држава, град, покрајина</string> <string name="wikivoyage_search_hint">Претрага: држава, град, покрајина</string>
<string name="shared_string_read">Читај</string> <string name="shared_string_read">Читај</string>
<string name="saved_articles">Сачувани чланци</string> <string name="saved_articles">Забележени чланци</string>
<string name="shared_string_explore">Истражи</string> <string name="shared_string_explore">Истражи</string>
<string name="shared_string_contents">Садржаји</string> <string name="shared_string_contents">Садржаји</string>
<string name="shared_string_result">Резултат</string> <string name="shared_string_result">Резултат</string>
@ -2717,7 +2724,7 @@
<string name="quick_action_interim_dialog">Прикажи дијалог међувремена</string> <string name="quick_action_interim_dialog">Прикажи дијалог међувремена</string>
<string name="quick_action_duplicates">Задато име брзе радње је већ у употреби, промењено је у %1$s да би се избегло дуплирање.</string> <string name="quick_action_duplicates">Задато име брзе радње је већ у употреби, промењено је у %1$s да би се избегло дуплирање.</string>
<string name="quick_action_duplicate">Већ постоји брза радња са овим именом</string> <string name="quick_action_duplicate">Већ постоји брза радња са овим именом</string>
<string name="maps_you_need_descr">На основу чланака који сте читали, предлажено је да скинете следеће карте:</string> <string name="maps_you_need_descr">На основу чланака који сте забележили, предложено је да скинете следеће карте:</string>
<string name="osmand_accessibility_description">Са овим додатком, функције приступачности из уређаја могу да се користе директно у OsmAnd-у. Може да управља брзином изговора синтетизованих гласова, коришћење трекбола за контролу зумирања, изговара текст, нпр. да Вам каже положај.</string> <string name="osmand_accessibility_description">Са овим додатком, функције приступачности из уређаја могу да се користе директно у OsmAnd-у. Може да управља брзином изговора синтетизованих гласова, коришћење трекбола за контролу зумирања, изговара текст, нпр. да Вам каже положај.</string>
<string name="intermediate_items_sort_return">Оптимизуј редослед успутних одредишта ка крајњем одредишту.</string> <string name="intermediate_items_sort_return">Оптимизуј редослед успутних одредишта ка крајњем одредишту.</string>
<string name="osmand_short_description_80_chars">Глобални преглед карти на мобилним уређајима &amp; навигација за ОСМ карте на мрежи и ван мреже</string> <string name="osmand_short_description_80_chars">Глобални преглед карти на мобилним уређајима &amp; навигација за ОСМ карте на мрежи и ван мреже</string>
@ -2799,11 +2806,11 @@
<string name="reports_for">Извештај за</string> <string name="reports_for">Извештај за</string>
<string name="quick_favorites_name_preset">Унапред постављено име</string> <string name="quick_favorites_name_preset">Унапред постављено име</string>
<string name="import_track_desc">Фајл %1$s не садржи пролазне тачке, да га увезем као путању?</string> <string name="import_track_desc">Фајл %1$s не садржи пролазне тачке, да га увезем као путању?</string>
<string name="touring_view_renderer">Туристички преглед (контраст и детаљи)</string> <string name="touring_view_renderer">Туристички преглед</string>
<string name="hide_full_description">Сакриј цео опис</string> <string name="hide_full_description">Сакриј цео опис</string>
<string name="show_full_description">Прикажи цео опис</string> <string name="show_full_description">Прикажи цео опис</string>
<string name="nautical_render_descr">Стил за речно и морско навођење. Главне одлике: бове, светионици, речни и морски путеви, луке, поморске ознаке, изобате.</string> <string name="nautical_render_descr">Стил за речно и морско навођење. Главне одлике: бове, светионици, речни и морски путеви, луке, поморске ознаке, изобате.</string>
<string name="ski_map_render_descr">Стил за скијање. Главне одлике: исцртавање стаза, ваздушних путева и остали скијашких објеката на лак начин. Остали објекти на карти мање одвраћају пажњу.</string> <string name="ski_map_render_descr">Стил за скијање. Главне одлике: исцртавање стаза, ски лифтова и осталих скијашких објеката на лак начин. Остали објекти на карти мање одвраћају пажњу.</string>
<string name="light_rs_render_descr">Једноставан стил са контрастом за навођење у колима. Пријатан за очи ноћу. Главне одлике: изохипсе, наранџасти путеви са добрим контрастом, остали објекти на карти мање одвраћају пажњу.</string> <string name="light_rs_render_descr">Једноставан стил са контрастом за навођење у колима. Пријатан за очи ноћу. Главне одлике: изохипсе, наранџасти путеви са добрим контрастом, остали објекти на карти мање одвраћају пажњу.</string>
<string name="topo_render_descr">Контрастни стил примарно намењен шетању, пешачењу, трекингу и бициклизму у природи. Добра читљивост у тешким спољним условима осветљености. Главне одлике: добар контраст за путеве и природне објекте, различити типови путања, изохипсе са напредним подешавањима, више детаља на истим нивоима увећања у односу на основни стил. Опција интегритета подлоге Вам омогућава да разликујете путеве са различитим квалитетима подлога. Нема ноћног режима.</string> <string name="topo_render_descr">Контрастни стил примарно намењен шетању, пешачењу, трекингу и бициклизму у природи. Добра читљивост у тешким спољним условима осветљености. Главне одлике: добар контраст за путеве и природне објекте, различити типови путања, изохипсе са напредним подешавањима, више детаља на истим нивоима увећања у односу на основни стил. Опција интегритета подлоге Вам омогућава да разликујете путеве са различитим квалитетима подлога. Нема ноћног режима.</string>
<string name="mapnik_render_descr">Стари \"Мапник\" стил исцртавања. Главне одлике: боје су сличне као у \"Мапник\" стилу.</string> <string name="mapnik_render_descr">Стари \"Мапник\" стил исцртавања. Главне одлике: боје су сличне као у \"Мапник\" стилу.</string>
@ -2855,4 +2862,11 @@
<string name="send_location_email_pattern">Да видите положај, пратите везу ка веб локацији %1$s или Андроид intent везу %2$s</string> <string name="send_location_email_pattern">Да видите положај, пратите везу ка веб локацији %1$s или Андроид intent везу %2$s</string>
<string name="voice_is_not_available_msg">Нема доступног гласовног навођења, идите у \"Поставке\" → \"Опште\" → \"Гласовно навођење\" и одаберите или скините пакет са гласовима.</string> <string name="voice_is_not_available_msg">Нема доступног гласовног навођења, идите у \"Поставке\" → \"Опште\" → \"Гласовно навођење\" и одаберите или скините пакет са гласовима.</string>
<string name="number_of_rows_in_dash">Број редова на табли %1$s</string> <string name="number_of_rows_in_dash">Број редова на табли %1$s</string>
<string name="shared_string_bookmark">Забележи</string>
<string name="switch_to_vector_map_to_see">Постојеће векторске карте за овај положај.
\n\t
\n\tДа бисте их користили, идите на \'Мени\' → \'Подеси карту\' → \'Извор карте…\' → \'Векторске карте ван мреже\'.</string>
<string name="osmand_routing_experimental">OsmAnd навођење ван мреже је експериментална функционалност и не ради за удаљености преко 20 km.
\n
\nНавођење привремено пребачено на мрежни CloudMade сервис.</string>
</resources> </resources>

View file

@ -894,10 +894,10 @@
<string name="poi_rcn_ref">地區性自行車網路節點</string> <string name="poi_rcn_ref">地區性自行車網路節點</string>
<string name="poi_lcn_ref">本地自行車網路節點</string> <string name="poi_lcn_ref">本地自行車網路節點</string>
<string name="poi_iwn_ref">國際行網路節點</string> <string name="poi_iwn_ref">國際登山健行網路節點</string>
<string name="poi_nwn_ref">全國行網路節點</string> <string name="poi_nwn_ref">全國登山健行網路節點</string>
<string name="poi_rwn_ref">地區性行網路節點</string> <string name="poi_rwn_ref">地區性登山健行網路節點</string>
<string name="poi_lwn_ref">本地行網路節點</string> <string name="poi_lwn_ref">本地登山健行網路節點</string>
<string name="poi_opening_hours">營業時間</string> <string name="poi_opening_hours">營業時間</string>
<string name="poi_collection_times">採收時間</string> <string name="poi_collection_times">採收時間</string>
@ -925,14 +925,14 @@
<string name="poi_fee_yes">費用</string> <string name="poi_fee_yes">費用</string>
<string name="poi_abandoned_poi">已遺棄的物件</string> <string name="poi_abandoned_poi">已遺棄的物件</string>
<string name="poi_route_hiking_iwn_poi">國際徒步登山路線</string> <string name="poi_route_hiking_iwn_poi">國際登山健行登山路線</string>
<string name="poi_route_hiking_nwn_poi">全國徒步登山路線</string> <string name="poi_route_hiking_nwn_poi">全國登山健行路線</string>
<string name="poi_route_hiking_rwn_poi">地區性徒步登山路線</string> <string name="poi_route_hiking_rwn_poi">地區性登山健行路線</string>
<string name="poi_route_hiking_lwn_poi">當地徒步登山路線</string> <string name="poi_route_hiking_lwn_poi">當地登山健行路線</string>
<string name="poi_route_hiking_ref_poi">徒步旅行路線參考</string> <string name="poi_route_hiking_ref_poi">登山健行路線參考</string>
<string name="poi_node_networks">徒步旅行/自行車網路節點</string> <string name="poi_node_networks">登山健行/自行車網路節點</string>
<string name="poi_hiking_routes">徒步路線</string> <string name="poi_hiking_routes">登山健行路線</string>
<string name="poi_traffic_enforcement">交通執法</string> <string name="poi_traffic_enforcement">交通執法</string>
<string name="poi_access_private">私人通路</string> <string name="poi_access_private">私人通路</string>
<string name="poi_access_no">禁止通行</string> <string name="poi_access_no">禁止通行</string>
@ -1275,7 +1275,7 @@
<string name="poi_information_trail_blaze">小徑</string> <string name="poi_information_trail_blaze">小徑</string>
<string name="poi_information_terminal">資訊終端機</string> <string name="poi_information_terminal">資訊終端機</string>
<string name="poi_information_route_marker">路線標識</string> <string name="poi_information_route_marker">路線標識</string>
<string name="poi_information_hikingmap">徒步旅行地圖</string> <string name="poi_information_hikingmap">登山健行地圖</string>
<string name="poi_information_nature">資訊標誌:大自然</string> <string name="poi_information_nature">資訊標誌:大自然</string>
<string name="poi_doors"></string> <string name="poi_doors"></string>
<string name="poi_bicycle_parking_anchors">錨泊點</string> <string name="poi_bicycle_parking_anchors">錨泊點</string>
@ -3877,4 +3877,10 @@
<string name="poi_glacier_ele_bottom">最低點</string> <string name="poi_glacier_ele_bottom">最低點</string>
<string name="poi_glacier_slope">平均坡度</string> <string name="poi_glacier_slope">平均坡度</string>
<string name="poi_checkpoint_type">檢查站類型</string>
<string name="poi_checkpoint_hiking">登山健行檢查站</string>
<string name="poi_checkpoint_type_code">程式碼</string>
<string name="poi_checkpoint_type_notebook">筆記電腦</string>
<string name="poi_checkpoint_type_electronic">電子</string>
</resources> </resources>

View file

@ -3019,8 +3019,16 @@
<string name="by_type">按照類型</string> <string name="by_type">按照類型</string>
<string name="one_tap_active_descr">輕點在地圖上的標記,將其移動到活動標記的頂端,而不用打開內容選單。</string> <string name="one_tap_active_descr">輕點在地圖上的標記,將其移動到活動標記的頂端,而不用打開內容選單。</string>
<string name="modify_the_search_query">變更搜尋的查詢。</string> <string name="modify_the_search_query">變更搜尋的查詢。</string>
<string name="release_3_0">"\\022 <string name="release_3_0">\\022 新的旅行選單:檢視不用網路的維基導遊文章
\n "</string> \n
\n• 維基百科:嶄新的面貌、活動連結、圖片
\n
\n• 開放式軌跡使用者介面:顯示航點群組
\n
\n• 地圖標記:從 GPX 檔案匯入所選擇的群組,嶄新的座標輸入外觀
\n
\n• OsmAnd Live 訂閱,現在包括了 OsmAnd 所有的功能
\n</string>
<string name="av_locations_selected_desc">包括座標和所選註解資料的 GPX 檔案。</string> <string name="av_locations_selected_desc">包括座標和所選註解資料的 GPX 檔案。</string>
<string name="av_locations_all_desc">包括座標和所有註解資料的 GPX 檔案。</string> <string name="av_locations_all_desc">包括座標和所有註解資料的 GPX 檔案。</string>
<string name="osm_recipient_stat">編輯 %1$s合計 %2$s mBTC</string> <string name="osm_recipient_stat">編輯 %1$s合計 %2$s mBTC</string>

View file

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<dimen name="wpt_list_category_height">60dp</dimen>
<dimen name="wpt_list_item_height">56dp</dimen>
<dimen name="list_item_button_padding">4dp</dimen>
<dimen name="action_bar_height">64dp</dimen> <dimen name="action_bar_height">64dp</dimen>
<dimen name="list_content_padding_large">32dp</dimen> <dimen name="list_content_padding_large">32dp</dimen>
<dimen name="title_padding">20dp</dimen> <dimen name="title_padding">20dp</dimen>

View file

@ -81,7 +81,7 @@
<string name="images_cache">Images cache</string> <string name="images_cache">Images cache</string>
<string name="delete_search_history">Delete search history</string> <string name="delete_search_history">Delete search history</string>
<string name="download_images">Show images</string> <string name="download_images">Show images</string>
<string name="download_maps_travel">Travel maps</string> <string name="download_maps_travel">Travel guides</string>
<string name="shared_string_wikivoyage">Wikivoyage</string> <string name="shared_string_wikivoyage">Wikivoyage</string>
<string name="article_removed">Article removed</string> <string name="article_removed">Article removed</string>
<string name="wikivoyage_search_hint">Search: Country, city, province</string> <string name="wikivoyage_search_hint">Search: Country, city, province</string>
@ -416,7 +416,7 @@
<string name="points_delete_multiple_succesful">Point(s) deleted.</string> <string name="points_delete_multiple_succesful">Point(s) deleted.</string>
<string name="points_delete_multiple">You are going to delete %1$d point(s). Are you sure?</string> <string name="points_delete_multiple">You are going to delete %1$d point(s). Are you sure?</string>
<string name="route_points_category_name">Turns to pass on this route</string> <string name="route_points_category_name">Turns to pass on this route</string>
<string name="track_points_category_name">Prominent points on this route</string> <string name="track_points_category_name">Waypoints, points of interest, named features</string>
<string name="gpx_track">Track</string> <string name="gpx_track">Track</string>
<string name="max_speed">Maximum speed</string> <string name="max_speed">Maximum speed</string>
<string name="average_speed">Average speed</string> <string name="average_speed">Average speed</string>

View file

@ -12,7 +12,10 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable;
import android.os.Build; import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.support.annotation.AttrRes;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes; import android.support.annotation.ColorRes;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.text.Spannable; import android.text.Spannable;
@ -284,6 +287,13 @@ public class AndroidUtils {
); );
} }
@ColorInt
public static int getColorFromAttr(@NonNull Context ctx, @AttrRes int colorAttribute) {
TypedValue typedValue = new TypedValue();
ctx.getTheme().resolveAttribute(colorAttribute, typedValue, true);
return typedValue.data;
}
public static int resolveAttribute(Context ctx, int attribute) { public static int resolveAttribute(Context ctx, int attribute) {
TypedValue outValue = new TypedValue(); TypedValue outValue = new TypedValue();
ctx.getTheme().resolveAttribute(attribute, outValue, true); ctx.getTheme().resolveAttribute(attribute, outValue, true);

View file

@ -761,6 +761,10 @@ public class GpxSelectionHelper {
public int getColor() { public int getColor() {
return color; return color;
} }
public void setColor(int color) {
this.color = color;
}
} }
public static class GpxDisplayItem { public static class GpxDisplayItem {

View file

@ -1,5 +1,43 @@
package net.osmand.plus.download.ui; package net.osmand.plus.download.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import net.osmand.AndroidUtils;
import net.osmand.Collator;
import net.osmand.IndexConstants;
import net.osmand.OsmAndCollator;
import net.osmand.map.ITileSource;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.IconsCache;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexHelper;
import net.osmand.plus.activities.LocalIndexHelper.LocalIndexType;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
import net.osmand.plus.base.OsmandExpandableListFragment;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.IndexItem;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.util.Algorithms;
import android.app.Activity; import android.app.Activity;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.res.Resources; import android.content.res.Resources;
@ -36,44 +74,6 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
import net.osmand.map.ITileSource;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.IconsCache;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexHelper;
import net.osmand.plus.activities.LocalIndexHelper.LocalIndexType;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
import net.osmand.plus.base.OsmandExpandableListFragment;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.IndexItem;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.util.Algorithms;
import java.io.File;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
public class LocalIndexesFragment extends OsmandExpandableListFragment implements DownloadEvents { public class LocalIndexesFragment extends OsmandExpandableListFragment implements DownloadEvents {
public static final Pattern ILLEGAL_FILE_NAME_CHARACTERS = Pattern.compile("[?:\"*|/\\<>]"); public static final Pattern ILLEGAL_FILE_NAME_CHARACTERS = Pattern.compile("[?:\"*|/\\<>]");
@ -851,7 +851,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
} }
public void sortData() { public void sortData() {
final Collator cl = Collator.getInstance(); final Collator cl = OsmAndCollator.primaryCollator();
for (List<LocalIndexInfo> i : data.values()) { for (List<LocalIndexInfo> i : data.values()) {
Collections.sort(i, new Comparator<LocalIndexInfo>() { Collections.sort(i, new Comparator<LocalIndexInfo>() {
@Override @Override

View file

@ -1,8 +1,24 @@
package net.osmand.plus.download.ui; package net.osmand.plus.download.ui;
import java.util.Comparator;
import java.util.List;
import net.osmand.Collator;
import net.osmand.OsmAndCollator;
import net.osmand.map.OsmandRegions;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.base.OsmAndListFragment;
import net.osmand.plus.chooseplan.ChoosePlanDialogFragment;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.DownloadResources;
import net.osmand.plus.download.IndexItem;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.util.Algorithms;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.icu.text.Collator;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar;
@ -16,21 +32,6 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import net.osmand.map.OsmandRegions;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.base.OsmAndListFragment;
import net.osmand.plus.chooseplan.ChoosePlanDialogFragment;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.DownloadResources;
import net.osmand.plus.download.IndexItem;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.util.Algorithms;
import java.util.Comparator;
import java.util.List;
public class UpdatesIndexFragment extends OsmAndListFragment implements DownloadEvents { public class UpdatesIndexFragment extends OsmAndListFragment implements DownloadEvents {
private static final int RELOAD_ID = 5; private static final int RELOAD_ID = 5;
@ -94,7 +95,7 @@ public class UpdatesIndexFragment extends OsmAndListFragment implements Download
OsmandSettings settings = getMyApplication().getSettings(); OsmandSettings settings = getMyApplication().getSettings();
listAdapter = new UpdateIndexAdapter(a, R.layout.download_index_list_item, indexItems, listAdapter = new UpdateIndexAdapter(a, R.layout.download_index_list_item, indexItems,
!InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication()) || settings.SHOULD_SHOW_FREE_VERSION_BANNER.get()); !InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication()) || settings.SHOULD_SHOW_FREE_VERSION_BANNER.get());
final Collator collator = Collator.getInstance(); final Collator collator = OsmAndCollator.primaryCollator();
listAdapter.sort(new Comparator<IndexItem>() { listAdapter.sort(new Comparator<IndexItem>() {
@Override @Override
public int compare(IndexItem indexItem, IndexItem indexItem2) { public int compare(IndexItem indexItem, IndexItem indexItem2) {

View file

@ -56,6 +56,8 @@ import java.util.Map;
public class AmenityMenuBuilder extends MenuBuilder { public class AmenityMenuBuilder extends MenuBuilder {
private static final String WIKI_LINK = ".wikipedia.org/w";
private final Amenity amenity; private final Amenity amenity;
public AmenityMenuBuilder(MapActivity mapActivity, final Amenity amenity) { public AmenityMenuBuilder(MapActivity mapActivity, final Amenity amenity) {
@ -100,7 +102,12 @@ public class AmenityMenuBuilder extends MenuBuilder {
ll.setOnLongClickListener(new View.OnLongClickListener() { ll.setOnLongClickListener(new View.OnLongClickListener() {
@Override @Override
public boolean onLongClick(View v) { public boolean onLongClick(View v) {
String textToCopy = !Algorithms.isEmpty(textPrefix) ? textPrefix + ": " + txt : txt; String textToCopy;
if (txt.contains(WIKI_LINK)) {
textToCopy = txt;
} else {
textToCopy = !Algorithms.isEmpty(textPrefix) ? textPrefix + ": " + txt : txt;
}
copyToClipboard(textToCopy, view.getContext()); copyToClipboard(textToCopy, view.getContext());
return true; return true;
} }
@ -293,7 +300,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
ll.setOnClickListener(new View.OnClickListener() { ll.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (text.contains(".wikipedia.org/w")) { if (text.contains(WIKI_LINK)) {
if (Version.isPaidVersion(app)) { if (Version.isPaidVersion(app)) {
WikiArticleHelper wikiArticleHelper = new WikiArticleHelper(mapActivity, !light); WikiArticleHelper wikiArticleHelper = new WikiArticleHelper(mapActivity, !light);
wikiArticleHelper.showWikiArticle(amenity.getLocation(), text); wikiArticleHelper.showWikiArticle(amenity.getLocation(), text);

View file

@ -130,6 +130,11 @@ public class AmenityMenuController extends MenuController {
return 0; return 0;
} }
@Override
public boolean isWaypointButtonEnabled() {
return marker == null;
}
@Override @Override
public boolean displayDistanceDirection() { public boolean displayDistanceDirection() {
return true; return true;

View file

@ -447,7 +447,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (mapActivity.getSupportFragmentManager() != null) { if (mapActivity.getSupportFragmentManager() != null) {
WikivoyageArticleDialogFragment.showInstance(app, mapActivity.getSupportFragmentManager(), article.getCityId(), article.getLang()); WikivoyageArticleDialogFragment.showInstance(app, mapActivity.getSupportFragmentManager(), article.getTripId(), article.getLang());
} }
} }
}; };

View file

@ -15,8 +15,11 @@ import android.support.v4.content.ContextCompat;
import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.view.ActionMode; import android.support.v7.view.ActionMode;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -42,6 +45,7 @@ import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GPXDatabase.GpxDataItem; import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup; import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
@ -58,21 +62,23 @@ import net.osmand.plus.activities.SavingTrackHelper;
import net.osmand.plus.activities.TrackActivity; import net.osmand.plus.activities.TrackActivity;
import net.osmand.plus.base.FavoriteImageDrawable; import net.osmand.plus.base.FavoriteImageDrawable;
import net.osmand.plus.base.OsmandExpandableListFragment; import net.osmand.plus.base.OsmandExpandableListFragment;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener; import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener;
import net.osmand.plus.widgets.TextViewEx; import net.osmand.plus.widgets.TextViewEx;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import java.io.File; import java.io.File;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.text.Collator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
public class TrackPointFragment extends OsmandExpandableListFragment implements TrackBitmapDrawerListener { public class TrackPointFragment extends OsmandExpandableListFragment implements TrackBitmapDrawerListener {
@ -100,7 +106,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
private boolean routePointsExpanded; private boolean routePointsExpanded;
private View mainView; private View mainView;
private PopupMenu popupItemMenu;
private Menu optionsMenu; private Menu optionsMenu;
@Override @Override
@ -145,9 +150,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
setUpdateEnable(false); setUpdateEnable(false);
if (popupItemMenu != null) {
popupItemMenu.dismiss();
}
if (optionsMenu != null) { if (optionsMenu != null) {
optionsMenu.close(); optionsMenu.close();
} }
@ -453,15 +455,19 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
if (activity == null) { if (activity == null) {
return; return;
} }
GPXFile gpxFile = getGpx(); final GPXFile gpxFile = getGpx();
MapMarkersGroup markersSearch = markersHelper.getMarkersGroup(gpxFile); MapMarkersGroup markersSearch = markersHelper.getMarkersGroup(gpxFile);
final MapMarkersGroup markersGr; final MapMarkersGroup markersGr;
final boolean markersRemoved;
if (markersSearch != null) { if (markersSearch != null) {
markersGr = markersSearch; markersGr = markersSearch;
markersHelper.removeMarkersGroup(markersGr); markersHelper.removeMarkersGroup(markersGr);
markersRemoved = true;
} else if (gpxFile != null) { } else if (gpxFile != null) {
markersGr = markersHelper.addOrEnableGroup(gpxFile); markersGr = markersHelper.addOrEnableGroup(gpxFile);
markersRemoved = false;
} else { } else {
markersRemoved = false;
markersGr = null; markersGr = null;
} }
if (markersGr != null) { if (markersGr != null) {
@ -474,14 +480,24 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
fragmentAdapter.closeFabMenu(activity); fragmentAdapter.closeFabMenu(activity);
fragmentAdapter.updateMenuFabVisibility(false); fragmentAdapter.updateMenuFabVisibility(false);
} }
Snackbar snackbar = Snackbar.make(mainView, R.string.waypoints_removed_from_map_markers, Snackbar snackbar = Snackbar.make(mainView, markersRemoved ?
R.string.waypoints_removed_from_map_markers : R.string.waypoints_added_to_map_markers,
Snackbar.LENGTH_LONG) Snackbar.LENGTH_LONG)
.setAction(R.string.shared_string_undo, new View.OnClickListener() { .setAction(R.string.shared_string_undo, new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
TrackActivity trackActivity = getTrackActivity(); TrackActivity trackActivity = getTrackActivity();
if (trackActivity != null) { if (trackActivity != null) {
markersHelper.removeMarkersGroup(markersGr); if (markersRemoved) {
if (gpxFile != null) {
markersHelper.addOrEnableGroup(gpxFile);
}
} else {
MapMarkersGroup group = markersHelper.getMarkersGroup(gpxFile);
if (group != null) {
markersHelper.removeMarkersGroup(group);
}
}
trackActivity.invalidateOptionsMenu(); trackActivity.invalidateOptionsMenu();
} }
} }
@ -662,6 +678,18 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
List<GpxDisplayGroup> groups = new ArrayList<>(); List<GpxDisplayGroup> groups = new ArrayList<>();
Filter myFilter; Filter myFilter;
private Set<?> filter; private Set<?> filter;
Comparator<String> comparator;
PointGPXAdapter() {
final Collator collator = Collator.getInstance();
collator.setStrength(Collator.SECONDARY);
comparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return collator.compare(s1, s2);
}
};
}
public void synchronizeGroups(@NonNull List<GpxDisplayGroup> gs) { public void synchronizeGroups(@NonNull List<GpxDisplayGroup> gs) {
itemGroups.clear(); itemGroups.clear();
@ -680,22 +708,82 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
continue; continue;
} }
boolean empty = true; boolean empty = true;
List<GpxDisplayItem> displayItems = g.getModifiableList();
Map<String, List<GpxDisplayItem>> itemsMap = new HashMap<>();
for (GpxDisplayItem item : displayItems) {
String category;
if (item.locationStart != null && g.getType() == GpxDisplayItemType.TRACK_POINTS) {
category = item.locationStart.category;
if (TextUtils.isEmpty(category)) {
category = "";
}
} else {
category = "";
}
List<GpxDisplayItem> items = itemsMap.get(category);
if (items == null) {
items = new ArrayList<>();
itemsMap.put(category, items);
}
items.add(item);
}
if (flt == null) { if (flt == null) {
empty = false; empty = false;
itemGroups.put(g, new ArrayList<>(g.getModifiableList()));
} else { } else {
ArrayList<GpxDisplayItem> list = new ArrayList<>(); Map<String, List<GpxDisplayItem>> itemsMapFiltered = new HashMap<>();
for (GpxDisplayItem i : g.getModifiableList()) { for (Entry<String, List<GpxDisplayItem>> e : itemsMap.entrySet()) {
String category = e.getKey();
List<GpxDisplayItem> items = e.getValue();
if (flt.contains(category)) {
itemsMapFiltered.put(category, items);
empty = false;
} else {
for (GpxDisplayItem i : items) {
if (flt.contains(i)) { if (flt.contains(i)) {
list.add(i); List<GpxDisplayItem> itemsFiltered = itemsMapFiltered.get(category);
if (itemsFiltered == null) {
itemsFiltered = new ArrayList<>();
itemsMapFiltered.put(category, itemsFiltered);
}
itemsFiltered.add(i);
empty = false; empty = false;
} }
} }
itemGroups.put(g, list); }
}
itemsMap = itemsMapFiltered;
} }
if (!empty) { if (!empty) {
List<GpxDisplayItem> items = new ArrayList<>();
List<String> categories = new ArrayList<>(itemsMap.keySet());
Collections.sort(categories, comparator);
if (g.getType() == GpxDisplayItemType.TRACK_POINTS) {
itemGroups.put(g, items);
groups.add(g); groups.add(g);
} }
for (String category : categories) {
List<GpxDisplayItem> values = itemsMap.get(category);
if (g.getType() == GpxDisplayItemType.TRACK_POINTS) {
GpxDisplayGroup headerGroup = g.cloneInstance();
headerGroup.setType(GpxDisplayItemType.TRACK_POINTS);
headerGroup.setName(category);
for (GpxDisplayItem i : values) {
if (i.locationStart != null && i.locationStart.getColor() != 0) {
headerGroup.setColor(i.locationStart.getColor(g.getColor()));
break;
}
}
itemGroups.put(headerGroup, values);
groups.add(headerGroup);
} else {
items.addAll(values);
}
}
if (items.size() > 0) {
itemGroups.put(g, items);
groups.add(g);
}
}
} }
notifyDataSetChanged(); notifyDataSetChanged();
} }
@ -757,23 +845,94 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View row = convertView; View row = convertView;
final GpxDisplayGroup group = getGroup(groupPosition); final GpxDisplayGroup group = getGroup(groupPosition);
boolean checkBox = row != null && row.findViewById(R.id.toggle_item) instanceof CheckBox; IconsCache iconsCache = app.getIconsCache();
boolean same = (selectionMode && checkBox) || (!selectionMode && !checkBox); if (row == null) {
if (row == null || !same) {
LayoutInflater inflater = getLayoutInflater(); LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.wpt_list_item_category, parent, false); row = inflater.inflate(R.layout.wpt_list_item, parent, false);
ImageView options = (ImageView) row.findViewById(R.id.options);
options.setFocusable(false);
options.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_overflow_menu_white));
} }
ImageView icon = (ImageView) row.findViewById(R.id.icon);
TextView groupTitle = (TextView) row.findViewById(R.id.bold_label);
TextView title = (TextView) row.findViewById(R.id.label);
TextViewEx button = (TextViewEx) row.findViewById(R.id.button);
TextView description = (TextView) row.findViewById(R.id.description);
ImageView expandImage = (ImageView) row.findViewById(R.id.expand_image);
ImageView options = (ImageView) row.findViewById(R.id.options);
button.setVisibility(View.GONE);
if (groupPosition == 0 || group.getType() == GpxDisplayItemType.TRACK_ROUTE_POINTS) {
icon.setVisibility(View.GONE);
options.setVisibility(View.GONE);
expandImage.setVisibility(View.GONE);
title.setVisibility(View.GONE);
groupTitle.setVisibility(View.VISIBLE);
description.setVisibility(View.VISIBLE);
row.findViewById(R.id.divider).setVisibility(View.GONE);
row.findViewById(R.id.list_divider).setVisibility(View.GONE);
row.setOnClickListener(null); row.setOnClickListener(null);
row.findViewById(R.id.group_divider).setVisibility(groupPosition == 0 ? View.GONE : View.VISIBLE);
TextView label = (TextView) row.findViewById(R.id.category_name);
TextView description = (TextView) row.findViewById(R.id.category_desc);
if (group.getType() == GpxDisplayItemType.TRACK_POINTS) { if (group.getType() == GpxDisplayItemType.TRACK_POINTS) {
label.setText(getString(R.string.waypoints)); groupTitle.setText(getString(R.string.waypoints));
description.setText(getString(R.string.track_points_category_name)); description.setText(getString(R.string.track_points_category_name));
} else { } else {
label.setText(getString(R.string.route_points)); groupTitle.setText(getString(R.string.route_points));
description.setText(getString(R.string.route_points_category_name)); description.setText(getString(R.string.route_points_category_name));
} }
} else {
icon.setVisibility(View.VISIBLE);
boolean expanded = listView.isGroupExpanded(groupPosition);
expandImage.setImageDrawable(iconsCache.getThemedIcon(
expanded ? R.drawable.ic_action_arrow_up : R.drawable.ic_action_arrow_down));
expandImage.setVisibility(View.VISIBLE);
description.setVisibility(View.GONE);
expandImage.setVisibility(View.VISIBLE);
options.setVisibility(View.VISIBLE);
row.findViewById(R.id.divider).setVisibility(View.VISIBLE);
row.findViewById(R.id.list_divider).setVisibility(View.GONE);
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listView.isGroupExpanded(groupPosition)) {
listView.collapseGroup(groupPosition);
} else {
listView.expandGroup(groupPosition);
}
}
});
title.setVisibility(View.VISIBLE);
groupTitle.setVisibility(View.GONE);
String categoryName = group.getName();
if (TextUtils.isEmpty(categoryName)) {
categoryName = getString(R.string.waypoints);
}
SpannableStringBuilder text = new SpannableStringBuilder(categoryName).append("").append(String.valueOf(getChildrenCount(groupPosition)));
text.setSpan(new ForegroundColorSpan(AndroidUtils.getColorFromAttr(app, R.attr.wikivoyage_primary_text_color)),
0, categoryName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(new ForegroundColorSpan(ContextCompat.getColor(app, R.color.wikivoyage_secondary_text)),
categoryName.length() + 1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
title.setText(text);
int groupColor = group.getColor();
if (groupColor == 0) {
groupColor = ContextCompat.getColor(app, R.color.gpx_color_point);
}
icon.setImageDrawable(app.getIconsCache().getPaintedIcon(R.drawable.ic_action_folder, groupColor | 0xff000000));
options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Activity activity = getActivity();
if (activity != null) {
// todo
}
}
});
}
row.findViewById(R.id.group_divider).setVisibility(group.getType() == GpxDisplayItemType.TRACK_ROUTE_POINTS ? View.VISIBLE : View.GONE);
final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item); final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item);
if (selectionMode) { if (selectionMode) {
@ -785,6 +944,43 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public void onClick(View v) { public void onClick(View v) {
List<GpxDisplayItem> items = itemGroups.get(group); List<GpxDisplayItem> items = itemGroups.get(group);
if (ch.isChecked()) { if (ch.isChecked()) {
if (groupPosition == 0) {
setTrackPointsSelection(true);
} else {
setGroupSelection(items, groupPosition, true);
}
} else {
if (groupPosition == 0) {
setTrackPointsSelection(false);
} else {
setGroupSelection(items, groupPosition, false);
}
}
adapter.notifyDataSetInvalidated();
updateSelectionMode(actionMode);
}
});
} else {
ch.setVisibility(View.GONE);
}
return row;
}
private void setTrackPointsSelection(boolean select) {
if (groups.size() > 1) {
setGroupSelection(null, 0, select);
for (int i = 1; i < groups.size(); i++) {
GpxDisplayGroup g = groups.get(i);
if (g.getType() == GpxDisplayItemType.TRACK_POINTS) {
setGroupSelection(itemGroups.get(g), i, select);
}
}
}
}
private void setGroupSelection(List<GpxDisplayItem> items, int groupPosition, boolean select) {
GpxDisplayGroup group = groups.get(groupPosition);
if (select) {
selectedGroups.add(groupPosition); selectedGroups.add(groupPosition);
if (items != null) { if (items != null) {
Set<GpxDisplayItem> set = selectedItems.get(group.getType()); Set<GpxDisplayItem> set = selectedItems.get(group.getType());
@ -799,16 +995,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
selectedGroups.remove(groupPosition); selectedGroups.remove(groupPosition);
selectedItems.remove(group.getType()); selectedItems.remove(group.getType());
} }
adapter.notifyDataSetInvalidated();
updateSelectionMode(actionMode);
}
});
} else {
ch.setVisibility(View.GONE);
}
row.findViewById(R.id.category_icon).setVisibility(View.GONE);
row.findViewById(R.id.options).setVisibility(View.GONE);
return row;
} }
@ -816,9 +1002,13 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) { ViewGroup parent) {
View row = convertView; View row = convertView;
IconsCache iconsCache = getMyApplication().getIconsCache();
if (row == null) { if (row == null) {
LayoutInflater inflater = getLayoutInflater(); LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.wpt_list_item, parent, false); row = inflater.inflate(R.layout.wpt_list_item, parent, false);
ImageView options = (ImageView) row.findViewById(R.id.options);
options.setFocusable(false);
options.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_overflow_menu_white));
} }
if (childPosition == 0) { if (childPosition == 0) {
row.findViewById(R.id.divider).setVisibility(View.VISIBLE); row.findViewById(R.id.divider).setVisibility(View.VISIBLE);
@ -832,76 +1022,29 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
TextView title = (TextView) row.findViewById(R.id.label); TextView title = (TextView) row.findViewById(R.id.label);
TextViewEx button = (TextViewEx) row.findViewById(R.id.button); TextViewEx button = (TextViewEx) row.findViewById(R.id.button);
TextView description = (TextView) row.findViewById(R.id.description); TextView description = (TextView) row.findViewById(R.id.description);
ImageView expandImage = (ImageView) row.findViewById(R.id.expand_image);
final GpxDisplayItem gpxItem = getChild(groupPosition, childPosition);
boolean isWpt = gpxItem != null && gpxItem.group.getType() == GpxDisplayItemType.TRACK_POINTS;
ImageView options = (ImageView) row.findViewById(R.id.options); ImageView options = (ImageView) row.findViewById(R.id.options);
if (isWpt) {
title.setVisibility(View.VISIBLE);
description.setVisibility(View.VISIBLE);
button.setVisibility(View.GONE);
options.setFocusable(false); final GpxDisplayGroup group = getGroup(groupPosition);
options.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon( final GpxDisplayItem gpxItem = getChild(groupPosition, childPosition);
R.drawable.ic_overflow_menu_white)); final WptPt wpt = gpxItem != null ? gpxItem.locationStart : null;
options.setVisibility(View.VISIBLE); boolean isWaypoint = gpxItem != null && group.getType() == GpxDisplayItemType.TRACK_POINTS;
options.setOnClickListener(new View.OnClickListener() { if (isWaypoint) {
@Override int groupColor = group.getColor();
public void onClick(View v) { if (wpt != null) {
IconsCache iconsCache = getMyApplication().getIconsCache(); groupColor = wpt.getColor(groupColor);
Activity activity = getActivity();
if (activity != null) {
popupItemMenu = new PopupMenu(activity, v);
DirectionsDialogs.setupPopUpMenuIcon(popupItemMenu);
MenuItem menuItem = popupItemMenu.getMenu().add(R.string.shared_string_edit).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_edit_dark));
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem mItem) {
final OsmandSettings settings = app.getSettings();
LatLon location = new LatLon(gpxItem.locationStart.lat, gpxItem.locationStart.lon);
if (gpxItem.group.getGpx() != null) {
app.getSelectedGpxHelper().setGpxFileToDisplay(gpxItem.group.getGpx());
}
settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(),
settings.getLastKnownMapZoom(),
new PointDescription(PointDescription.POINT_TYPE_WPT, gpxItem.name),
false,
gpxItem.locationStart);
settings.setEditObjectToShow();
MapActivity.launchMapActivityMoveToTop(getActivity());
return true;
}
});
popupItemMenu.show();
}
}
});
int groupColor = gpxItem.group.getColor();
if (gpxItem.locationStart != null) {
groupColor = gpxItem.locationStart.getColor(groupColor);
} }
if (groupColor == 0) { if (groupColor == 0) {
groupColor = ContextCompat.getColor(app, R.color.gpx_color_point); groupColor = ContextCompat.getColor(app, R.color.gpx_color_point);
} }
icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), groupColor, false));
} else {
boolean showAll = gpxItem == null;
title.setVisibility(showAll ? View.GONE : View.VISIBLE);
description.setVisibility(showAll ? View.GONE : View.VISIBLE);
button.setVisibility(!showAll ? View.GONE : View.VISIBLE);
if (showAll) { title.setVisibility(View.VISIBLE);
int count = itemGroups.get(groups.get(groupPosition)).size(); button.setVisibility(View.GONE);
button.setText(getString(R.string.shared_string_show_all) + " - " + count);
icon.setImageDrawable(null); expandImage.setVisibility(View.GONE);
} else {
icon.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_marker_dark));
}
options.setVisibility(View.GONE); options.setVisibility(View.GONE);
} options.setOnClickListener(null);
if (gpxItem != null) {
title.setText(gpxItem.name); title.setText(gpxItem.name);
if (!Algorithms.isEmpty(gpxItem.description)) { if (!Algorithms.isEmpty(gpxItem.description)) {
description.setText(gpxItem.description); description.setText(gpxItem.description);
@ -909,12 +1052,36 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
} else { } else {
description.setVisibility(View.GONE); description.setVisibility(View.GONE);
} }
icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), groupColor, false));
} else {
boolean showAll = gpxItem == null;
title.setVisibility(showAll ? View.GONE : View.VISIBLE);
description.setVisibility(showAll ? View.GONE : View.VISIBLE);
button.setVisibility(!showAll ? View.GONE : View.VISIBLE);
expandImage.setVisibility(View.GONE);
options.setVisibility(View.GONE);
if (showAll) {
int count = itemGroups.get(groups.get(groupPosition)).size();
button.setText(getString(R.string.shared_string_show_all) + " - " + count);
icon.setImageDrawable(null);
} else {
title.setText(gpxItem.name);
if (!Algorithms.isEmpty(gpxItem.description)) {
description.setText(gpxItem.description);
description.setVisibility(View.VISIBLE);
} else {
description.setVisibility(View.GONE);
}
icon.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_marker_dark));
}
} }
final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item); final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item);
if (selectionMode && gpxItem != null) { if (selectionMode && gpxItem != null) {
ch.setVisibility(View.VISIBLE); ch.setVisibility(View.VISIBLE);
ch.setChecked(selectedItems.get(gpxItem.group.getType()) != null && selectedItems.get(gpxItem.group.getType()).contains(gpxItem)); ch.setChecked(selectedItems.get(group.getType()) != null && selectedItems.get(group.getType()).contains(gpxItem));
row.findViewById(R.id.icon).setVisibility(View.GONE); row.findViewById(R.id.icon).setVisibility(View.GONE);
options.setVisibility(View.GONE); options.setVisibility(View.GONE);
ch.setOnClickListener(new View.OnClickListener() { ch.setOnClickListener(new View.OnClickListener() {
@ -922,16 +1089,16 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (ch.isChecked()) { if (ch.isChecked()) {
Set<GpxDisplayItem> set = selectedItems.get(gpxItem.group.getType()); Set<GpxDisplayItem> set = selectedItems.get(group.getType());
if (set != null) { if (set != null) {
set.add(gpxItem); set.add(gpxItem);
} else { } else {
set = new LinkedHashSet<>(); set = new LinkedHashSet<>();
set.add(gpxItem); set.add(gpxItem);
selectedItems.put(gpxItem.group.getType(), set); selectedItems.put(group.getType(), set);
} }
} else { } else {
Set<GpxDisplayItem> set = selectedItems.get(gpxItem.group.getType()); Set<GpxDisplayItem> set = selectedItems.get(group.getType());
if (set != null) { if (set != null) {
set.remove(gpxItem); set.remove(gpxItem);
} }
@ -979,6 +1146,8 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
for (GpxDisplayItem i : g.getModifiableList()) { for (GpxDisplayItem i : g.getModifiableList()) {
if (i.name.toLowerCase().contains(cs)) { if (i.name.toLowerCase().contains(cs)) {
filter.add(i); filter.add(i);
} else if (i.locationStart != null && cs.equals(i.locationStart.category)) {
filter.add(i.locationStart.category);
} }
} }
} }

View file

@ -100,7 +100,7 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr
public boolean onChildClick(ExpandableListView parent, View v, public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) { int groupPosition, int childPosition, long id) {
WikivoyageSearchResult articleItem = listAdapter.getArticleItem(groupPosition, childPosition); WikivoyageSearchResult articleItem = listAdapter.getArticleItem(groupPosition, childPosition);
sendResults(articleItem.getCityId()); sendResults(articleItem.getTripId());
dismiss(); dismiss();
return true; return true;
} }
@ -109,10 +109,10 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr
@Override @Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
WikivoyageSearchResult articleItem = (WikivoyageSearchResult) listAdapter.getGroup(groupPosition); WikivoyageSearchResult articleItem = (WikivoyageSearchResult) listAdapter.getGroup(groupPosition);
if (articleItem.getCityId() == UNDEFINED) { if (articleItem.getTripId() == UNDEFINED) {
Toast.makeText(getContext(), R.string.wiki_article_not_found, Toast.LENGTH_LONG).show(); Toast.makeText(getContext(), R.string.wiki_article_not_found, Toast.LENGTH_LONG).show();
} else { } else {
sendResults(articleItem.getCityId()); sendResults(articleItem.getTripId());
dismiss(); dismiss();
} }
return true; return true;
@ -235,7 +235,7 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr
boolean isLastChild, View convertView, ViewGroup parent) { boolean isLastChild, View convertView, ViewGroup parent) {
WikivoyageSearchResult articleItem = getArticleItem(groupPosition, childPosition); WikivoyageSearchResult articleItem = getArticleItem(groupPosition, childPosition);
String childTitle = articleItem.getArticleTitles().get(0); String childTitle = articleItem.getArticleTitles().get(0);
boolean selected = cityId == articleItem.getCityId() || parentsList.contains(childTitle); boolean selected = cityId == articleItem.getTripId() || parentsList.contains(childTitle);
if (convertView == null) { if (convertView == null) {
convertView = LayoutInflater.from(context) convertView = LayoutInflater.from(context)

View file

@ -24,7 +24,7 @@ public class TravelArticle {
double lon; double lon;
String imageTitle; String imageTitle;
GPXFile gpxFile; GPXFile gpxFile;
long cityId; long tripId;
long originalId; long originalId;
String lang; String lang;
String contentsJson; String contentsJson;
@ -62,8 +62,8 @@ public class TravelArticle {
return gpxFile; return gpxFile;
} }
public long getCityId() { public long getTripId() {
return cityId; return tripId;
} }
public long getOriginalId() { public long getOriginalId() {

View file

@ -3,7 +3,6 @@ package net.osmand.plus.wikivoyage.data;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
import net.osmand.Collator; import net.osmand.Collator;
import net.osmand.CollatorStringMatcher; import net.osmand.CollatorStringMatcher;
import net.osmand.CollatorStringMatcher.StringMatcherMode; import net.osmand.CollatorStringMatcher.StringMatcherMode;
@ -33,9 +32,11 @@ import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random;
import java.util.Set; import java.util.Set;
import gnu.trove.map.hash.TLongObjectHashMap; import gnu.trove.map.hash.TLongObjectHashMap;
@ -44,10 +45,11 @@ public class TravelDbHelper {
private static final Log LOG = PlatformUtil.getLog(TravelDbHelper.class); private static final Log LOG = PlatformUtil.getLog(TravelDbHelper.class);
private static final String ARTICLES_TABLE_NAME = "wikivoyage_articles"; private static final String ARTICLES_TABLE_NAME = "travel_articles";
private static final String POPULAR_TABLE_NAME = "popular_articles"; private static final String POPULAR_TABLE_NAME = "popular_articles";
private static final String ARTICLES_COL_ID = "article_id"; private static final String ARTICLES_COL_ID = "article_id";
private static final String ARTICLES_POP_INDEX = "popularity_index"; private static final String ARTICLES_POP_INDEX = "popularity_index";
private static final String ARTICLES_POP_ORDER = "order_index";
private static final String ARTICLES_COL_TITLE = "title"; private static final String ARTICLES_COL_TITLE = "title";
private static final String ARTICLES_COL_CONTENT = "content_gz"; private static final String ARTICLES_COL_CONTENT = "content_gz";
private static final String ARTICLES_COL_IS_PART_OF = "is_part_of"; private static final String ARTICLES_COL_IS_PART_OF = "is_part_of";
@ -55,7 +57,7 @@ public class TravelDbHelper {
private static final String ARTICLES_COL_LON = "lon"; private static final String ARTICLES_COL_LON = "lon";
private static final String ARTICLES_COL_IMAGE_TITLE = "image_title"; private static final String ARTICLES_COL_IMAGE_TITLE = "image_title";
private static final String ARTICLES_COL_GPX_GZ = "gpx_gz"; private static final String ARTICLES_COL_GPX_GZ = "gpx_gz";
private static final String ARTICLES_COL_CITY_ID = "city_id"; private static final String ARTICLES_COL_TRIP_ID = "trip_id";
private static final String ARTICLES_COL_ORIGINAL_ID = "original_id"; private static final String ARTICLES_COL_ORIGINAL_ID = "original_id";
private static final String ARTICLES_COL_LANG = "lang"; private static final String ARTICLES_COL_LANG = "lang";
private static final String ARTICLES_COL_CONTENTS_JSON = "contents_json"; private static final String ARTICLES_COL_CONTENTS_JSON = "contents_json";
@ -70,7 +72,7 @@ public class TravelDbHelper {
ARTICLES_COL_LON + ", " + ARTICLES_COL_LON + ", " +
ARTICLES_COL_IMAGE_TITLE + ", " + ARTICLES_COL_IMAGE_TITLE + ", " +
ARTICLES_COL_GPX_GZ + ", " + ARTICLES_COL_GPX_GZ + ", " +
ARTICLES_COL_CITY_ID + ", " + ARTICLES_COL_TRIP_ID + ", " +
ARTICLES_COL_ORIGINAL_ID + ", " + ARTICLES_COL_ORIGINAL_ID + ", " +
ARTICLES_COL_LANG + ", " + ARTICLES_COL_LANG + ", " +
ARTICLES_COL_CONTENTS_JSON + ", " + ARTICLES_COL_CONTENTS_JSON + ", " +
@ -81,14 +83,15 @@ public class TravelDbHelper {
ARTICLES_COL_TITLE + ", " + ARTICLES_COL_TITLE + ", " +
ARTICLES_COL_LAT + ", " + ARTICLES_COL_LAT + ", " +
ARTICLES_COL_LON + ", " + ARTICLES_COL_LON + ", " +
ARTICLES_COL_CITY_ID + ", " + ARTICLES_COL_TRIP_ID + ", " +
ARTICLES_COL_LANG + ", " + ARTICLES_COL_LANG + ", " +
ARTICLES_POP_ORDER + ", " +
ARTICLES_POP_INDEX + ARTICLES_POP_INDEX +
" FROM " + POPULAR_TABLE_NAME; " FROM " + POPULAR_TABLE_NAME;
private static final String SEARCH_TABLE_NAME = "wikivoyage_search"; private static final String SEARCH_TABLE_NAME = "travel_search";
private static final String SEARCH_COL_SEARCH_TERM = "search_term"; private static final String SEARCH_COL_SEARCH_TERM = "search_term";
private static final String SEARCH_COL_CITY_ID = "city_id"; private static final String SEARCH_COL_trip_id = "trip_id";
private static final String SEARCH_COL_ARTICLE_TITLE = "article_title"; private static final String SEARCH_COL_ARTICLE_TITLE = "article_title";
private static final String SEARCH_COL_LANG = "lang"; private static final String SEARCH_COL_LANG = "lang";
@ -194,9 +197,9 @@ public class TravelDbHelper {
String[] queries = searchQuery.replace('_', ' ').replace('/', ' ').split(" "); String[] queries = searchQuery.replace('_', ' ').replace('/', ' ').split(" ");
if (conn != null) { if (conn != null) {
List<String> params = new ArrayList<>(); List<String> params = new ArrayList<>();
String query = "SELECT distinct wa.city_id, wa.title, wa.lang, wa.is_part_of, wa.image_title " String query = "SELECT distinct wa.trip_id, wa.title, wa.lang, wa.is_part_of, wa.image_title "
+ "FROM wikivoyage_articles wa WHERE wa.city_id in " + "FROM travel_articles wa WHERE wa.trip_id in "
+ " (SELECT city_id FROM wikivoyage_search WHERE search_term LIKE"; + " (SELECT trip_id FROM travel_search WHERE search_term LIKE";
for (String q : queries) { for (String q : queries) {
if (q.trim().length() > 0) { if (q.trim().length() > 0) {
if (params.size() > 5) { if (params.size() > 5) {
@ -204,7 +207,7 @@ public class TravelDbHelper {
break; break;
} }
if (params.size() > 0) { if (params.size() > 0) {
query += " AND city_id IN (SELECT city_id FROM wikivoyage_search WHERE search_term LIKE ?) "; query += " AND trip_id IN (SELECT trip_id FROM travel_search WHERE search_term LIKE ?) ";
} else { } else {
query += "?"; query += "?";
} }
@ -217,7 +220,7 @@ public class TravelDbHelper {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
WikivoyageSearchResult rs = new WikivoyageSearchResult(); WikivoyageSearchResult rs = new WikivoyageSearchResult();
rs.cityId = cursor.getLong(0); rs.tripId = cursor.getLong(0);
rs.articleTitles.add(cursor.getString(1)); rs.articleTitles.add(cursor.getString(1));
rs.langs.add(cursor.getString(2)); rs.langs.add(cursor.getString(2));
rs.isPartOf.add(cursor.getString(3)); rs.isPartOf.add(cursor.getString(3));
@ -242,45 +245,107 @@ public class TravelDbHelper {
@NonNull @NonNull
public List<TravelArticle> loadPopularArticles() { public List<TravelArticle> loadPopularArticles() {
List<TravelArticle> res = new ArrayList<>();
String language = application.getLanguage(); String language = application.getLanguage();
List<PopularArticle> popReadArticles = new ArrayList<>();
SQLiteConnection conn = openConnection(); SQLiteConnection conn = openConnection();
if (conn == null) { if (conn == null) {
return res; popularArticles = new ArrayList<TravelArticle>();
return popularArticles;
} }
String LANG_WHERE = " WHERE " + ARTICLES_COL_LANG + " = '" + language + "'"; String LANG_WHERE = " WHERE " + ARTICLES_COL_LANG + " = '" + language + "'";
SQLiteCursor cursor = conn.rawQuery(POP_ARTICLES_TABLE_SELECT + LANG_WHERE, null); SQLiteCursor cursor = conn.rawQuery(POP_ARTICLES_TABLE_SELECT + LANG_WHERE, null);
// read popular articles
List<PopularArticle> popReadArticlesOrder = new ArrayList<>();
List<PopularArticle> popReadArticlesLocation = new ArrayList<>();
List<PopularArticle> popReadArticles = new ArrayList<>();
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
PopularArticle travelArticle = PopularArticle.readArticle(cursor); PopularArticle travelArticle = PopularArticle.readArticle(cursor);
if (language.equals(travelArticle.lang)) { if (language.equals(travelArticle.lang)) {
if(travelArticle.order != -1) {
popReadArticlesOrder.add(travelArticle);
} if(travelArticle.isLocationSpecified()) {
popReadArticlesLocation.add(travelArticle);
} else {
popReadArticles.add(travelArticle); popReadArticles.add(travelArticle);
} }
}
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close();
sortPopArticlesByDistance(popReadArticles); // shuffle, sort & mix
Random rm = new Random();
Collections.shuffle(popReadArticles, rm);
Collections.sort(popReadArticlesOrder, new Comparator<PopularArticle>() {
@Override
public int compare(PopularArticle article1, PopularArticle article2) {
return Integer.compare(article1.order, article2.order);
}
});
sortPopArticlesByDistance(popReadArticlesLocation);
List<Long> resArticleOrder = new ArrayList<Long>();
Iterator<PopularArticle> orderIterator = popReadArticlesOrder.iterator();
Iterator<PopularArticle> locIterator = popReadArticlesLocation.iterator();
Iterator<PopularArticle> otherIterator = popReadArticles.iterator();
int initialLocationArticles = 2;
for (int i = 0; i < POPULAR_LIMIT; i++) {
PopularArticle pa = null;
if(orderIterator.hasNext()) {
pa = orderIterator.next();
} else if(initialLocationArticles-- > 0 && locIterator.hasNext()) {
// first 2 by location
pa = locIterator.next();
} else if((!otherIterator.hasNext() || (rm.nextDouble() > 0.4)) && locIterator.hasNext()) {
// 60% case we select location iterator
pa = locIterator.next();
} else if(otherIterator.hasNext()){
pa = otherIterator.next();
}
if (pa == null) {
break;
} else {
resArticleOrder.add(pa.tripId);
}
}
Map<Long, TravelArticle> ts = readTravelArticles(conn, LANG_WHERE, resArticleOrder);
popularArticles = sortArticlesToInitialOrder(resArticleOrder, ts);
return popularArticles;
}
private Map<Long, TravelArticle> readTravelArticles(SQLiteConnection conn, String whereCondition,
List<Long> articleIds) {
SQLiteCursor cursor;
StringBuilder bld = new StringBuilder(); StringBuilder bld = new StringBuilder();
bld.append(ARTICLES_TABLE_SELECT).append(LANG_WHERE) bld.append(ARTICLES_TABLE_SELECT).append(whereCondition)
.append(" and ").append(ARTICLES_COL_CITY_ID).append(" IN ("); .append(" and ").append(ARTICLES_COL_TRIP_ID).append(" IN (");
for (int i = 0; i < popReadArticles.size() && i < POPULAR_LIMIT; i++) { for (int i = 0; i < articleIds.size(); i++) {
if (i > 0) { if (i > 0) {
bld.append(", "); bld.append(", ");
} }
bld.append(popReadArticles.get(i).cityId); bld.append(articleIds.get(i));
} }
bld.append(")"); bld.append(")");
cursor = conn.rawQuery(bld.toString(), null); cursor = conn.rawQuery(bld.toString(), null);
Map<Long, TravelArticle> ts = new HashMap<Long, TravelArticle>();
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
TravelArticle travelArticle = readArticle(cursor); TravelArticle travelArticle = readArticle(cursor);
res.add(travelArticle); ts.put(travelArticle.tripId, travelArticle);
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close();
sortArticlesByDistance(res); return ts;
popularArticles = res; }
private List<TravelArticle> sortArticlesToInitialOrder(List<Long> resArticleOrder, Map<Long, TravelArticle> ts) {
List<TravelArticle> res = new ArrayList<>();
for (int i = 0; i < resArticleOrder.size(); i++) {
TravelArticle ta = ts.get(resArticleOrder.get(i));
if(ta != null) {
res.add(ta);
}
}
return res; return res;
} }
@ -304,23 +369,16 @@ public class TravelDbHelper {
}); });
} }
private void sortArticlesByDistance(List<TravelArticle> list) {
Location location = application.getLocationProvider().getLastKnownLocation();
if (location != null) {
final LatLon loc = new LatLon(location.getLatitude(), location.getLongitude());
Collections.sort(list, new Comparator<TravelArticle>() {
@Override
public int compare(TravelArticle article1, TravelArticle article2) {
return Double.compare(MapUtils.getDistance(loc, article1.getLat(), article1.getLon()), MapUtils.getDistance(loc, article2.getLat(), article2.getLon()));
}
});
}
}
private void sortPopArticlesByDistance(List<PopularArticle> list) { private void sortPopArticlesByDistance(List<PopularArticle> list) {
Location location = application.getLocationProvider().getLastKnownLocation(); Location location = application.getLocationProvider().getLastKnownLocation();
if (location != null) { final LatLon loc ;
final LatLon loc = new LatLon(location.getLatitude(), location.getLongitude()); if(location == null) {
loc = application.getSettings().getLastKnownMapLocation();
} else {
loc = new LatLon(location.getLatitude(), location.getLongitude());
}
if (loc != null) {
Collections.sort(list, new Comparator<PopularArticle>() { Collections.sort(list, new Comparator<PopularArticle>() {
@Override @Override
public int compare(PopularArticle article1, PopularArticle article2) { public int compare(PopularArticle article1, PopularArticle article2) {
@ -331,11 +389,12 @@ public class TravelDbHelper {
} }
} }
private Collection<WikivoyageSearchResult> groupSearchResultsByCityId(List<WikivoyageSearchResult> res) { private Collection<WikivoyageSearchResult> groupSearchResultsByCityId(List<WikivoyageSearchResult> res) {
String baseLng = application.getLanguage(); String baseLng = application.getLanguage();
TLongObjectHashMap<WikivoyageSearchResult> wikivoyage = new TLongObjectHashMap<>(); TLongObjectHashMap<WikivoyageSearchResult> wikivoyage = new TLongObjectHashMap<>();
for (WikivoyageSearchResult rs : res) { for (WikivoyageSearchResult rs : res) {
WikivoyageSearchResult prev = wikivoyage.get(rs.cityId); WikivoyageSearchResult prev = wikivoyage.get(rs.tripId);
if (prev != null) { if (prev != null) {
int insInd = prev.langs.size(); int insInd = prev.langs.size();
if (rs.langs.get(0).equals(baseLng)) { if (rs.langs.get(0).equals(baseLng)) {
@ -351,7 +410,7 @@ public class TravelDbHelper {
prev.langs.add(insInd, rs.langs.get(0)); prev.langs.add(insInd, rs.langs.get(0));
prev.isPartOf.add(insInd, rs.isPartOf.get(0)); prev.isPartOf.add(insInd, rs.isPartOf.get(0));
} else { } else {
wikivoyage.put(rs.cityId, rs); wikivoyage.put(rs.tripId, rs);
} }
} }
return wikivoyage.valueCollection(); return wikivoyage.valueCollection();
@ -382,20 +441,20 @@ public class TravelDbHelper {
Map<String, WikivoyageSearchResult> headerObjs = new HashMap<>(); Map<String, WikivoyageSearchResult> headerObjs = new HashMap<>();
if (conn != null) { if (conn != null) {
List<String> params = new ArrayList<>(); List<String> params = new ArrayList<>();
StringBuilder query = new StringBuilder("SELECT a.city_id, a.title, a.lang, a.is_part_of " + StringBuilder query = new StringBuilder("SELECT a.trip_id, a.title, a.lang, a.is_part_of " +
"FROM wikivoyage_articles a WHERE is_part_of = ? and lang = ? "); "FROM travel_articles a WHERE is_part_of = ? and lang = ? ");
params.add(title); params.add(title);
params.add(lang); params.add(lang);
if (parts != null && parts.length > 0) { if (parts != null && parts.length > 0) {
headers = new HashSet<>(Arrays.asList(parts)); headers = new HashSet<>(Arrays.asList(parts));
headers.add(title); headers.add(title);
query.append("UNION SELECT a.city_id, a.title, a.lang, a.is_part_of " + query.append("UNION SELECT a.trip_id, a.title, a.lang, a.is_part_of " +
"FROM wikivoyage_articles a WHERE title = ? and lang = ? "); "FROM travel_articles a WHERE title = ? and lang = ? ");
params.add(parts[0]); params.add(parts[0]);
params.add(lang); params.add(lang);
for (String part : parts) { for (String part : parts) {
query.append("UNION SELECT a.city_id, a.title, a.lang, a.is_part_of " + query.append("UNION SELECT a.trip_id, a.title, a.lang, a.is_part_of " +
"FROM wikivoyage_articles a WHERE is_part_of = ? and lang = ? "); "FROM travel_articles a WHERE is_part_of = ? and lang = ? ");
params.add(part); params.add(part);
params.add(lang); params.add(lang);
} }
@ -404,7 +463,7 @@ public class TravelDbHelper {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
WikivoyageSearchResult rs = new WikivoyageSearchResult(); WikivoyageSearchResult rs = new WikivoyageSearchResult();
rs.cityId = cursor.getLong(0); rs.tripId = cursor.getLong(0);
rs.articleTitles.add(cursor.getString(1)); rs.articleTitles.add(cursor.getString(1));
rs.langs.add(cursor.getString(2)); rs.langs.add(cursor.getString(2));
rs.isPartOf.add(cursor.getString(3)); rs.isPartOf.add(cursor.getString(3));
@ -436,7 +495,7 @@ public class TravelDbHelper {
}); });
WikivoyageSearchResult emptyResult = new WikivoyageSearchResult(); WikivoyageSearchResult emptyResult = new WikivoyageSearchResult();
emptyResult.articleTitles.add(header); emptyResult.articleTitles.add(header);
emptyResult.cityId = -1; emptyResult.tripId = -1;
searchResult = searchResult != null ? searchResult : emptyResult; searchResult = searchResult != null ? searchResult : emptyResult;
res.put(searchResult, results); res.put(searchResult, results);
} }
@ -450,7 +509,7 @@ public class TravelDbHelper {
TravelArticle res = null; TravelArticle res = null;
SQLiteConnection conn = openConnection(); SQLiteConnection conn = openConnection();
if (conn != null) { if (conn != null) {
SQLiteCursor cursor = conn.rawQuery(ARTICLES_TABLE_SELECT + " WHERE " + ARTICLES_COL_CITY_ID + " = ? AND " SQLiteCursor cursor = conn.rawQuery(ARTICLES_TABLE_SELECT + " WHERE " + ARTICLES_COL_TRIP_ID + " = ? AND "
+ ARTICLES_COL_LANG + " = ?", new String[]{String.valueOf(cityId), lang}); + ARTICLES_COL_LANG + " = ?", new String[]{String.valueOf(cityId), lang});
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
res = readArticle(cursor); res = readArticle(cursor);
@ -464,7 +523,7 @@ public class TravelDbHelper {
long res = 0; long res = 0;
SQLiteConnection conn = openConnection(); SQLiteConnection conn = openConnection();
if (conn != null) { if (conn != null) {
SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_CITY_ID + " FROM " SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_TRIP_ID + " FROM "
+ ARTICLES_TABLE_NAME + " WHERE " + ARTICLES_COL_TITLE + " = ? AND " + ARTICLES_TABLE_NAME + " WHERE " + ARTICLES_COL_TITLE + " = ? AND "
+ ARTICLES_COL_LANG + " = ?", new String[]{title, lang}); + ARTICLES_COL_LANG + " = ?", new String[]{title, lang});
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
@ -481,7 +540,7 @@ public class TravelDbHelper {
SQLiteConnection conn = openConnection(); SQLiteConnection conn = openConnection();
if (conn != null) { if (conn != null) {
SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_LANG + " FROM " + ARTICLES_TABLE_NAME SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_LANG + " FROM " + ARTICLES_TABLE_NAME
+ " WHERE " + ARTICLES_COL_CITY_ID + " = ?", new String[]{String.valueOf(cityId)}); + " WHERE " + ARTICLES_COL_TRIP_ID + " = ?", new String[]{String.valueOf(cityId)});
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
String baseLang = application.getLanguage(); String baseLang = application.getLanguage();
do { do {
@ -519,7 +578,7 @@ public class TravelDbHelper {
res.lat = cursor.isNull(4) ? Double.NaN : cursor.getDouble(4); res.lat = cursor.isNull(4) ? Double.NaN : cursor.getDouble(4);
res.lon = cursor.isNull(5) ? Double.NaN : cursor.getDouble(5); res.lon = cursor.isNull(5) ? Double.NaN : cursor.getDouble(5);
res.imageTitle = cursor.getString(6); res.imageTitle = cursor.getString(6);
res.cityId = cursor.getLong(8); res.tripId = cursor.getLong(8);
res.originalId = cursor.isNull(9) ? 0 : cursor.getLong(9); res.originalId = cursor.isNull(9) ? 0 : cursor.getLong(9);
res.lang = cursor.getString(10); res.lang = cursor.getString(10);
res.contentsJson = cursor.getString(11); res.contentsJson = cursor.getString(11);
@ -556,10 +615,11 @@ public class TravelDbHelper {
} }
private static class PopularArticle { private static class PopularArticle {
long cityId; long tripId;
String title; String title;
String lang; String lang;
int popIndex; int popIndex;
int order;
double lat; double lat;
double lon; double lon;
@ -572,9 +632,10 @@ public class TravelDbHelper {
res.title = cursor.getString(0); res.title = cursor.getString(0);
res.lat = cursor.isNull(1) ? Double.NaN : cursor.getDouble(1); res.lat = cursor.isNull(1) ? Double.NaN : cursor.getDouble(1);
res.lon = cursor.isNull(2) ? Double.NaN : cursor.getDouble(2); res.lon = cursor.isNull(2) ? Double.NaN : cursor.getDouble(2);
res.cityId = cursor.getLong(3); res.tripId = cursor.getLong(3);
res.lang = cursor.getString(4); res.lang = cursor.getString(4);
res.popIndex = cursor.isNull(5) ? 0 : cursor.getInt(5); res.order = cursor.isNull(5) ? -1 : cursor.getInt(5);
res.popIndex = cursor.isNull(6) ? 0 : cursor.getInt(6);
return res; return res;
} }
} }

View file

@ -62,7 +62,7 @@ public class TravelLocalDataHelper {
} }
public void addToHistory(@NonNull TravelArticle article) { public void addToHistory(@NonNull TravelArticle article) {
addToHistory(article.getCityId(), article.getTitle(), article.getLang(), article.getIsPartOf()); addToHistory(article.getTripId(), article.getTitle(), article.getLang(), article.getIsPartOf());
} }
public void addToHistory(long cityId, String title, String lang, String isPartOf) { public void addToHistory(long cityId, String title, String lang, String isPartOf) {
@ -98,7 +98,7 @@ public class TravelLocalDataHelper {
public void addArticleToSaved(@NonNull TravelArticle article) { public void addArticleToSaved(@NonNull TravelArticle article) {
if (!isArticleSaved(article)) { if (!isArticleSaved(article)) {
TravelArticle saved = new TravelArticle(); TravelArticle saved = new TravelArticle();
saved.cityId = article.cityId; saved.tripId = article.tripId;
saved.title = article.title; saved.title = article.title;
saved.lang = article.lang; saved.lang = article.lang;
saved.aggregatedPartOf = article.aggregatedPartOf; saved.aggregatedPartOf = article.aggregatedPartOf;
@ -121,7 +121,7 @@ public class TravelLocalDataHelper {
} }
public void removeArticleFromSaved(@NonNull TravelArticle article) { public void removeArticleFromSaved(@NonNull TravelArticle article) {
TravelArticle savedArticle = getArticle(article.cityId, article.lang); TravelArticle savedArticle = getArticle(article.tripId, article.lang);
if (savedArticle != null) { if (savedArticle != null) {
savedArticles.remove(savedArticle); savedArticles.remove(savedArticle);
dbHelper.removeSavedArticle(savedArticle); dbHelper.removeSavedArticle(savedArticle);
@ -130,7 +130,7 @@ public class TravelLocalDataHelper {
} }
public boolean isArticleSaved(@NonNull TravelArticle article) { public boolean isArticleSaved(@NonNull TravelArticle article) {
return getArticle(article.cityId, article.lang) != null; return getArticle(article.tripId, article.lang) != null;
} }
private void notifySavedUpdated() { private void notifySavedUpdated() {
@ -142,7 +142,7 @@ public class TravelLocalDataHelper {
@Nullable @Nullable
private TravelArticle getArticle(long cityId, String lang) { private TravelArticle getArticle(long cityId, String lang) {
for (TravelArticle article : savedArticles) { for (TravelArticle article : savedArticles) {
if (article.cityId == cityId && article.lang != null && article.lang.equals(lang)) { if (article.tripId == cityId && article.lang != null && article.lang.equals(lang)) {
return article; return article;
} }
} }
@ -402,7 +402,7 @@ public class TravelLocalDataHelper {
if (conn != null) { if (conn != null) {
try { try {
conn.execSQL("INSERT INTO " + BOOKMARKS_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", conn.execSQL("INSERT INTO " + BOOKMARKS_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
new Object[]{article.cityId, article.title, article.lang, new Object[]{article.tripId, article.title, article.lang,
article.aggregatedPartOf, article.imageTitle, article.content, article.aggregatedPartOf, article.imageTitle, article.content,
travelBook, article.lat, article.lon}); travelBook, article.lat, article.lon});
} finally { } finally {
@ -423,7 +423,7 @@ public class TravelLocalDataHelper {
" WHERE " + BOOKMARKS_COL_CITY_ID + " = ?" + " WHERE " + BOOKMARKS_COL_CITY_ID + " = ?" +
" AND " + BOOKMARKS_COL_LANG + " = ?" + " AND " + BOOKMARKS_COL_LANG + " = ?" +
" AND " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?", " AND " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?",
new Object[]{article.cityId, article.lang, travelBook}); new Object[]{article.tripId, article.lang, travelBook});
} finally { } finally {
conn.close(); conn.close();
} }
@ -454,7 +454,7 @@ public class TravelLocalDataHelper {
private TravelArticle readSavedArticle(SQLiteCursor cursor) { private TravelArticle readSavedArticle(SQLiteCursor cursor) {
TravelArticle res = new TravelArticle(); TravelArticle res = new TravelArticle();
res.cityId = cursor.getLong(0); res.tripId = cursor.getLong(0);
res.title = cursor.getString(1); res.title = cursor.getString(1);
res.lang = cursor.getString(2); res.lang = cursor.getString(2);
res.aggregatedPartOf = cursor.getString(3); res.aggregatedPartOf = cursor.getString(3);

View file

@ -9,14 +9,14 @@ public class WikivoyageSearchResult {
private static final int SHOW_LANGS = 3; private static final int SHOW_LANGS = 3;
long cityId; long tripId;
List<String> articleTitles = new ArrayList<>(); List<String> articleTitles = new ArrayList<>();
List<String> langs = new ArrayList<>(); List<String> langs = new ArrayList<>();
List<String> isPartOf = new ArrayList<>(); List<String> isPartOf = new ArrayList<>();
String imageTitle; String imageTitle;
public long getCityId() { public long getTripId() {
return cityId; return tripId;
} }
public List<String> getArticleTitles() { public List<String> getArticleTitles() {

View file

@ -49,7 +49,7 @@ public class SavedArticlesTabFragment extends BaseOsmAndFragment implements Trav
FragmentActivity activity = getActivity(); FragmentActivity activity = getActivity();
if (activity != null) { if (activity != null) {
FragmentManager fm = activity.getSupportFragmentManager(); FragmentManager fm = activity.getSupportFragmentManager();
WikivoyageArticleDialogFragment.showInstance(app, fm, article.getCityId(), article.getLang()); WikivoyageArticleDialogFragment.showInstance(app, fm, article.getTripId(), article.getLang());
} }
} }
}); });
@ -138,7 +138,7 @@ public class SavedArticlesTabFragment extends BaseOsmAndFragment implements Trav
} }
TravelArticle oldArticle = (TravelArticle) oldItem; TravelArticle oldArticle = (TravelArticle) oldItem;
TravelArticle newArticle = (TravelArticle) newItem; TravelArticle newArticle = (TravelArticle) newItem;
return oldArticle.getCityId() == newArticle.getCityId() return oldArticle.getTripId() == newArticle.getTripId()
&& oldArticle.getLang().equals(newArticle.getLang()); && oldArticle.getLang().equals(newArticle.getLang());
} }
return false; return false;

View file

@ -72,7 +72,7 @@ public class ArticleTravelCard extends BaseTravelCard {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (fragmentManager != null) { if (fragmentManager != null) {
WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, article.getCityId(), article.getLang()); WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, article.getTripId(), article.getLang());
} }
} }
}; };

View file

@ -112,7 +112,7 @@ public class WikivoyageSearchDialogFragment extends WikiBaseDialogFragment {
if (item instanceof WikivoyageSearchResult) { if (item instanceof WikivoyageSearchResult) {
WikivoyageSearchResult res = (WikivoyageSearchResult) item; WikivoyageSearchResult res = (WikivoyageSearchResult) item;
WikivoyageArticleDialogFragment WikivoyageArticleDialogFragment
.showInstance(fm, res.getCityId(), new ArrayList<>(res.getLangs())); .showInstance(fm, res.getTripId(), new ArrayList<>(res.getLangs()));
} else if (item instanceof WikivoyageSearchHistoryItem) { } else if (item instanceof WikivoyageSearchHistoryItem) {
WikivoyageSearchHistoryItem historyItem = (WikivoyageSearchHistoryItem) item; WikivoyageSearchHistoryItem historyItem = (WikivoyageSearchHistoryItem) item;
WikivoyageArticleDialogFragment WikivoyageArticleDialogFragment