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"?>
<FrameLayout
<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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/expandable_list_item_background"
android:minHeight="@dimen/list_item_height"
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
android:id="@+id/divider"
android:layout_width="match_parent"
@ -20,7 +36,7 @@
android:id="@+id/list_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="54dp"
android:layout_marginLeft="64dp"
android:background="?attr/dashboard_divider"
android:visibility="gone"/>
@ -29,14 +45,14 @@
android:layout_height="wrap_content"
android:layout_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
android:id="@+id/toggle_item"
android:layout_width="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:visibility="gone"
tools:visibility="visible"/>
@ -45,7 +61,7 @@
android:id="@+id/icon"
android:layout_width="@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
android:layout_width="0dp"
@ -56,14 +72,37 @@
android:paddingRight="@dimen/list_content_padding"
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:layout_width="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"
osmand:typeface="@string/font_roboto_regular"
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
android:id="@+id/button"
android:layout_width="wrap_content"
@ -76,21 +115,28 @@
tools:text="SHOW ALL"
tools:visibility="visible"/>
<TextView
android:id="@+id/description"
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"
android:maxLines="2"
tools:text="Point description"/>
android:layout_marginEnd="@dimen/list_item_button_padding"
android:layout_marginRight="@dimen/list_item_button_padding"
android:orientation="horizontal">
</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
android:id="@+id/options"
android:layout_width="@dimen/list_item_height"
android:layout_height="@dimen/list_item_height"
android:layout_width="@dimen/acceptable_touch_radius"
android:layout_height="@dimen/acceptable_touch_radius"
android:background="?attr/dashboard_button"
android:contentDescription="@string/shared_string_more"
android:src="@drawable/ic_overflow_menu_white"
@ -98,4 +144,8 @@
</LinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View file

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

View file

@ -9,8 +9,8 @@
<string name="poi_air_transport">Tresporte aereu</string>
<string name="poi_water_transport">Tresporte acuáticu</string>
<string name="poi_communication">Comunicación</string>
<string name="poi_fuel_type">Triba</string>
<string name="poi_fuel_avia_type">Triba</string>
<string name="poi_fuel_type">Triba de combustible</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_fuel_type">Tarxetes pa gasolineres</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="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="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="yesterday">Ayeri</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="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="release_3_0">\\022
<string name="release_3_0">\\022 Nuevu menú Viaxe : consultar los artículos de WikiVoyage ensin conexó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>
<string name="modify_the_search_query">Cambiar la consulta de la gueta.</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="favourites_group">Categoría de favoritos</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_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_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_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>

View file

@ -3930,4 +3930,15 @@
<string name="poi_glacier_ele_bottom">Laveste punkt</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>

View file

@ -1413,4 +1413,89 @@
<string name="poi_animal_shelter_fish">Ψάρια</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>

View file

@ -2832,8 +2832,15 @@ Indikas lokon: %1$s x %2$s"</string>
<string name="by_date">Laŭ dato</string>
<string name="by_type">Laŭ speco</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• 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>
<string name="what_is_here">Tie ĉi:</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_type">Par type</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</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_slope">Átlagos lejtés (%)</string>
<string name="poi_checkpoint_type">Ellenőrzőpont típusa</string>
</resources>

View file

@ -148,21 +148,21 @@
<string name="osmand_distance_planning_plugin_description">Այս plugin-նը ապահովում է քարտեզի էկրանի վրա վիջեթ, որը հնարավորություն է տալիս ստեղծել ուղիներ, քարտեզի վրա կտտացնելով, նաև օգտագործել կամ փոփոխել առկա GPX ֆայլերը, ուղեւորություն պլանավորել և չափել կետերի միջև հեռավորությունը։</string>
<string name="shared_string_no">Ոչ</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="context_menu_item_modify_note">Ձևափոխել OSM նշումը</string>
<string name="make_round_trip_descr">Ավելացնել սկզբնակետի պատճեն որպես նպատակակետ։</string>
<string name="make_round_trip">Կլոր ուղևորություն</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="fast_coordinates_input_descr">Ընտրեք կոորդինատների մուտքագրման ձեւաչափը: Դուք միշտ կարող եք փոխել այն սեղմելով Հատկություններ։</string>
<string name="fast_coordinates_input">Կոորդինատների արագ մուտքագրումը</string>
<string name="fast_coordinates_input_descr">Ընտրեք կոորդինատների մուտքագրման ձևաչափը: Դուք միշտ կարող եք փոխել այն սեղմելով Հատկություններ։</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_description">Խուսափել սառույցի ճանապարհներից և ծանծաղուտներից։</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="shared_string_finish">Վերջ</string>
<string name="plan_route">Պլանավորել երթուղին</string>
@ -172,19 +172,19 @@
<string name="marker_save_as_track_descr">Արտահանեք ձեր մարկերները այն ֆայլի մեջ, որը կարող եք նշել այստեղ:</string>
<string name="marker_save_as_track">Պահպանել որպես հետեւել</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_arrows_on_the_map">Ցույց տալ սլաքները քարտեզի վրա</string>
<string name="show_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="ascendingly">աճող</string>
<string name="date_added">Ամսաթիվ ավելացված է</string>
<string name="order_by">Դասավորել ըստ:</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_descr">"Ընտրեք ստորեւ, թե ինչ արագության հասնելուց քարտեզի կողմնորոշումը կպոխվի \"Շարժման ուղղություն\" դեպի «Կողմնացույց»։"</string>
<string name="map_orientation_change_in_accordance_with_speed_descr">"Ընտրեք, թե ինչ արագության հասնելուց քարտեզի կողմնորոշումը կպոխվի \"Շարժման ուղղություն\" դեպի «Կողմնացույց»։"</string>
<string name="all_markers_moved_to_history">Բոլոր Մարկերները տեղափոխվել են պատմություն</string>
<string name="marker_moved_to_history">Քարտեզի Մարկերները տեղափոխվել են պատմություն</string>
<string name="marker_moved_to_active">Քարտեզի Մարկերները տեղափոխվեցին ակտիվ</string>
@ -199,7 +199,7 @@
<string name="move_all_to_history">Բոլորը տեղափոխել պատմություն</string>
<string name="show_direction">Հեռավորության ցուցիչ</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="keep_showing_on_map">Ցուցադրել քարտեզի վրա</string>
<string name="exit_without_saving">Ելք առանց պահպանման?</string>
@ -212,25 +212,25 @@
<string name="add_point_after">Ավելացել կետ</string>
<string name="shared_string_options">Ընտրանքներ</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="none_point_error">Անհրաժեշտ է ավելացնել գոնե մեկ կետ։</string>
<string name="enter_gpx_name">GPX Ֆայլի անունը՝</string>
<string name="show_on_map_after_saving">Ցույց տալ քարտեզի վրա պահպանելուց հետո</string>
<string name="measurement_tool_action_bar">Դիտեք քարտեզը եւ ավելացրեք կետերը</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_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_descr">Հպեք այս կոճակը, նավիգացիան սկսելու կամ ավարտելու համար:</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_reload">Վերբեռնել</string>
<string name="mapillary_menu_descr_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="mapillary_menu_date_from">Սկսած</string>
<string name="mapillary_menu_descr_dates">Դիտել միայն ավելացրած լուսանկարներ</string>
@ -238,7 +238,7 @@
<string name="mapillary_menu_edit_text_hint">"Մուտքագրեք օգտատերի անունը"</string>
<string name="mapillary_menu_descr_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="shared_string_permissions">Թույլտվություն</string>
<string name="import_gpx_failed_descr">OsmAnd-ը չի կարող ներմուծել ֆայլը: Ստուգեք, արդյոք OsmAnd-ը իրավունք ունի կարդալ ֆայլը իր գտնվելու վայրից:</string>
@ -247,8 +247,7 @@
<string name="open_mapillary">Բացել Mapillary</string>
<string name="shared_string_install">Տեղադրել</string>
<string name="improve_coverage_mapillary">Կատարելագործել լուսանկարի ծածկույթը Mapillary- ի միջոցով</string>
<string name="improve_coverage_install_mapillary_desc">"Դուք կարող եք ձեր սեփական լուսանկարները կամ մի շարք լուսանկարներ կցել քարտեզի գտնվելու վայրի:
\nԴա անելու համարանհրաժեշտ է տեղադրել Mapillary ծրագիրը Google Play խանութից:"</string>
<string name="improve_coverage_install_mapillary_desc">"Տեղադրել Mapillary ծրագիրը լուսանկարն կամ մի շարք լուսանկարներ կցելու քարտեզին գտնվելու վայրում:"</string>
<string name="online_photos">Առցանց լուսանկարներ</string>
<string name="shared_string_add_photos">Ավելացնել լուսանկարներ</string>
<string name="no_photos_descr">Այս վայրի համար լուսանկարներ չունենք։</string>
@ -258,23 +257,23 @@
<string name="mapillary_descr">Առցանց փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը:</string>
<string name="mapillary">Մափիլարի(Mapillary)</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="increase_search_radius">Ավելացնել որոնման շառավղը</string>
<string name="nothing_found">Ոչինչ չի գտնվել :(</string>
<string name="nothing_found">Ոչինչ չի գտնվել</string>
<string name="nothing_found_descr">"Փոխել հարցումը կամ ավելացնել որոնման շառավիղը։"</string>
<string name="quick_action_showhide_osmbugs_title">Ցույց տալ/թաքցնել OSM նշումները</string>
<string name="quick_action_osmbugs_show">Ցույց տալ 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="search_favorites">Որոնում Սիրվածում</string>
<string name="hillshade_menu_download_descr">Ռելիեֆի ստվերները ցուցադրելու համար անհրաժեշտ է ներբեռնել հատուկ քարտեզ այս տարածքի համար:</string>
<string name="hillshade_purchase_header">Ռելիեֆի ստվերները ցուցադրելու համար անհրաժեշտ է գնել եւ տեղադրել Contour Lines plugin</string>
<string name="hillshade_menu_download_descr">Ներբեռնել \"Ռելիեֆի ստվերները\" հատուկ քարտեզ այս տարածքի համար:</string>
<string name="hillshade_purchase_header">Տեղադրել Contour Lines plugin \"Ռելիեֆի ստվերները\" ցուցադրելու համար</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="srtm_purchase_header">Եզրագծերը դիտելու համար անհրաժեշտ անհրաժեշտ է գնել եւ տեղադրել Contour Lines plugin</string>
<string name="srtm_purchase_header">"\"Եզրագծերը\" դիտելու համար անհրաժեշտ է գնել և տեղադրել \"Contour Lines\" plugin"</string>
<string name="srtm_color_scheme">Գունային սխեմա</string>
<string name="show_from_zoom_level">Ցուցադրել խոշորացման մակարդակից</string>
<string name="routing_attr_allow_private_name">Թույլ տալ մասնավոր մուտք</string>
@ -294,21 +293,21 @@
<string name="select_city">Ընտրեք քաղաքը</string>
<string name="select_postcode">Ընտրեք փոստային կոդը</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_off">Անջատել ավտոմաստաբ</string>
<string name="quick_action_add_destination">Ավելացնել նպատակակետ</string>
<string name="quick_action_replace_destination">Փոխարինել նպատակակետը</string>
<string name="quick_action_add_first_intermediate">Ավելացնել առաջին միջանկյալ կետը</string>
<string name="quick_action_add_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_destination_desc">Սխմելով այս գործողությունների կոճակը, ավելացննում նպատակակետ էկրանի կենտրոնում։ Մինչ այդ ընտրած նպատակակետը կդառնա միջանկյալ կետ։</string>
<string name="quick_action_replace_destination_desc">Սխմելով այս գործողությունների կոճակը, տեղափոխում նպատակակետը էկրանի կենտրոն։</string>
<string name="quick_action_add_first_intermediate_desc">Սխմելով այս գործողությունների կոճակը, ավելացննում է առաջին միջանկյալ կետ էկրանի կենտրոնում։</string>
<string name="no_overlay">Ծածկույթի քարտեզը անջատված է</string>
<string name="no_underlay">Նեքեվի շերնը անջատված է</string>
<string name="subscribe_email_error">Սխալ</string>
<string name="subscribe_email_desc">Բաժանորդագրվեք մեր էլեկտրոնային փոստի առաքմանը `OsmAnd զեղչերի մասին եւ ստացիր 3 լրացուցիչ քարտեզների ներբեռնում:</string>
<string name="depth_contour_descr">Քարտեզներ, որոնք պարունակոմ են եզրագծեր և ծովային խորության կետեր։</string>
<string name="sea_depth_thanks">Շնորհակալություն ծովային խորքային ուրվագծերի ձեռքբերման համար:</string>
<string name="subscribe_email_desc">Բաժանորդագրվեք մեր էլեկտրոնային փոստի առաքմանը `OsmAnd զեղչերի մասին և ստացիր 3 լրացուցիչ քարտեզների ներբեռնում:</string>
<string name="depth_contour_descr">Քարտեզներ՝ ծովային եզրագծեր և խորության կետեր։</string>
<string name="sea_depth_thanks">Շնորհակալություն \"Ծովային խորքային ուրվագծերի\" ձեռքբերման համար</string>
<string name="index_item_depth_contours_osmand_ext">Ծովային խորքային ուրվագծեր</string>
<string name="download_depth_countours">Ծովային խորքային ուրվագիծը</string>
<string name="nautical_maps">Ծովային քարտեզներ</string>
@ -321,17 +320,17 @@
<string name="do_not_send_anonymous_app_usage">Չհավաքել օգտագործման վիճակագրությունը</string>
<string name="do_not_show_startup_messages">Չցուցադրել հաղորդագրությունները մեկնարկին</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_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_balance_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="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="track_points_category_name">Հայտնի կետեր այս երթուղու վրա</string>
<string name="gpx_track">Տրեկ</string>
@ -340,8 +339,8 @@
<string name="shared_string_time_moving">Ժամանակն շարժման մեջ</string>
<string name="shared_string_time_span">Ընդհանուր ժամանակը</string>
<string name="shared_string_max">Առավելագույն</string>
<string name="shared_string_start_time">Սկսման Ժամկետ</string>
<string name="shared_string_end_time">Ավարտման Ժամկետ</string>
<string name="shared_string_start_time">Մեկնում</string>
<string name="shared_string_end_time">Ժամանում</string>
<string name="shared_string_color">Գույնը</string>
<string name="select_gpx_folder">Ընտրեք թղթապանակ տրեկերի համար</string>
<string name="file_can_not_be_moved">Ֆայլը չի կարող տեղափոխվել:</string>
@ -373,7 +372,7 @@
<string name="show_legacy_search">Ցույց տալ հին որոնման տեսակը</string>
<string name="routing_attr_allow_motorway_name">Թույլատրել ավտոմայրուղիներ</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="search_map_hint">Որոնել քաղաք կամ երկիր</string>
<string name="route_roundabout_short">Վերցրեք %1$d ելքը</string>
@ -405,10 +404,10 @@
<string name="save_filter">Պահպանել ֆիլտրը</string>
<string name="delete_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="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="get_it">Ստանալ այն</string>
<string name="get_for">Ստանալ %1$s</string>
@ -417,7 +416,7 @@
<string name="osmand_plus_banner_desc">Անսահմանափակ քարտեզների ներբեռնում , թարմացումներ, եւ Wikipedia plugin։</string>
<string name="si_mi_meters">Մղոններ/մետր</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_map">Քարտեզների որոնում…</string>
<string name="first_usage_wizard_desc">OsmAnd-ը կորոշի ձեր դիրքը և առաջարկի քարտեզներ ներբեռնման համար այդ տարածաշրջանի համար:</string>
@ -436,22 +435,22 @@
<string name="auto_split_recording_descr">Սկսել նոր սեգմենտ 6 րոպեանոց ընդմիջումից հետո, նոր տրեկ 2 ժամանոց ընդմիջումից հետո կամ նոր ֆայլ երկարատև ընդմիջումից հետո (եթե ամսաթիվը փոխվել է):</string>
<string name="rendering_attr_contourColorScheme_description">Եզրագծերի գունային սխեման</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_descr">Ֆիլտր՝ Նշանակել նվազագույն հեռավորությունը կետի համար վերջին դիրքից։</string>
<string name="save_track_min_distance_descr">Ֆիլտր՝ Նշանակել նվազագույն հեռավորությունը այս կետից նոր կետ գրանցելու համար։</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="rendering_value_light_brown_name">Բաց-շագանակագույն</string>
<string name="rendering_value_dark_brown_name">Մուգ շագանակագույն</string>
<string name="rendering_attr_contourColorScheme_name">Contour lines գունային սխեման</string>
<string name="translit_name_if_miss">Transliterate եթե %1$s անունը բացակայում է</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="no_update_info_desc">Չստուգել թարմացումների համար կամ թարմացումներ կապված OsmAnd-ի զեղչեր հետ։</string>
<string name="no_update_info">Չցուցադրել թարմացումներ</string>
<string name="update_all_maps_now">Ցանկանում եք թարմացնել բոլոր քարտեզները հիմա?</string>
<string name="no_update_info">Չցուցադրել թարմացումներ/նոր տարբերակներ</string>
<string name="update_all_maps_now">Թարմացնել բոլոր քարտեզները հիմա?</string>
<string name="clear_tile_data">"Ջնջել բոլոր տայլերը"</string>
<string name="routing_attr_short_way_name">Վառելիք տնտեսող ճանապարհ</string>
<string name="routing_attr_short_way_description">Կիրառել վառելիք տնտեսող ճանապարհ (սովորաբար ավելի կարճ)։</string>
@ -463,7 +462,7 @@
<string name="coords_search">Որոնել ըստ կոորդինատների</string>
<string name="advanced_coords_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="dist_away_from_my_location">Որոնում %1$s գտնվելու դիքից</string>
<string name="search_categories">Կատեգորիաներ</string>
@ -480,13 +479,13 @@
<string name="app_mode_train">Գնացք</string>
<string name="current_track">Ընթացիկ տրեկ</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="follow_us">Բաժանորդագրվեք մեզ</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">OsmAnd Live նավիգացիա</string>
<string name="access_no_destination">Նպատակը սահմանված չէ</string>
<string name="access_no_destination">Նպատակակետը սահմանված չէ</string>
<string name="map_widget_magnetic_bearing">Մագնիսական կրող</string>
<string name="access_disable_offroute_recalc">Երթուղին դադարեցնելուց հետո երթուղու վերահաշվարկ չի կատարվում</string>
<string name="access_disable_offroute_recalc_descr">Կանխել երթուղու ավտոմատ վերահաշվարկը երթուղին դադարեցնելուց հետո։</string>
@ -961,13 +960,13 @@
<string name="shared_string_my_favorites">Իմ Սիրածները</string>
<string name="release_2_6">Նոր առանձնահատկություն. Արագ գործողության կոճակ
\n
\n• Բարելավված սենսորային էկրանի արձագանք (օրինակ `զուգահեռ համաժամանակ եւ մեծացնելու)
\n• Բարելավված սենսորային էկրանի արձագանք (օրինակ `զուգահեռ համաժամանակ և մեծացնելու)
\n
\n• Նոր քարտեզ տառատեսակներ, որոնք ընդգրկելով ավելի շատ տեղական վայրեր
\n
\n•Աջակցություն TTS-ը տարածաշրջանային լեզվական տարբերակների (եւ շեշտադրումները)
\n•Աջակցություն TTS-ը տարածաշրջանային լեզվական տարբերակների (և շեշտադրումները)
\n
\n• Տեսանելիության բարելավում մի քանի քարտեզի ոճերում եւ վիքիպեդիայում
\n• Տեսանելիության բարելավում մի քանի քարտեզի ոճերում և Վիքիպեդիայում(Wikipedia)
\n
\n• Աջակցում Բաց գտնվելու վայրի կոդը (OLC)
\n
@ -2207,8 +2206,8 @@
<string name="shared_string_right">Աջ</string>
<string name="shared_string_left">Ձախ</string>
<string name="shared_string_paste">Տեղադրել</string>
<string name="go_to_next_field">Տեղափոխվեք հաջորդ դաշտ</string>
<string name="import_gpx_file_description">կարող են ներմուծվել որպես «Սիրելի» կետեր, կամ որպես հետևի(track) ֆայլ:</string>
<string name="go_to_next_field">Հաջորդ դաշտը</string>
<string name="import_gpx_file_description">կարող են ներմուծվել որպես «Սիրելի», կամ որպես track ֆայլ:</string>
@ -2582,9 +2581,9 @@
<string name="retry">Կրկնել</string>
<string name="track_waypoints">Տրեկի (track) կետերը</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_desc">Դուք կարող եք ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ:</string>
<string name="empty_state_markers_groups_desc">Ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ:</string>
<string name="shared_string_two">Երկու</string>
<string name="shared_string_one">Մեկ</string>
<string name="add_waypoint">Ավելացնել կետ</string>
@ -2603,11 +2602,11 @@
<string name="add_segment_to_the_track">Ավելացնել սեգմենտը GPX-ին</string>
<string name="shared_string_more_without_dots">Ավելին</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="favourites_group">«Սիրված»-ի կատեգորիան</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="digits_quantity">Տասներորդ թվերի թվաքանակը</string>
<string name="show_number_pad">Ցուցադրել թվային վահանակը</string>
@ -2635,6 +2634,15 @@
<string name="av_locations_all_desc">GPX ֆայլը կոորդինատներով և բոլոր նշումների տվյալները։</string>
<string name="release_3_0">\\022
\n
\nՆոր Ճամփորդության մենյու. Դիտեք WikiVoyage- ի հոդվածները առանց ինտերնետի օգտագործման
\n
\n • Wikipedia՝ նոր տեսք, ակտիվ հղումներ, պատկերներ
\n
\n • Open Track UI՝ ցուցադրում waypoint խմբերը
\n
\n • Քարտեզի մարկերներ՝ Ընտրված խմբերի ներմուծում GPX ֆայլերից, կոորդինատների մուտքագրման նոր տեսքը
\n
\n • OsmAnd Live բաժանորդագրությունը այժմ ներառում է բոլոր OsmAnd առանձնահատկությունները
\n
\n
\n</string>
@ -2654,7 +2662,7 @@
<string name="show_guide_line_descr">Ցուցադրել ուղեցույցները ձեր գտնվելու վայրից մինչև ակտիվ մարկերներ:</string>
<string name="show_arrows_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="tap_on_map_to_hide_interface_descr">Սեղմելով քարտեզի վրա փոխարինում են հսկողության կոճակները եւ վիջեթները:</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="all_data">Բոլոր տվյալները</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="shared_string_without_name">Առանց անունի</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
\n • Թարմացվել է համատեքստային մենյու`ցույց տալ, թե երբ POI- ն բացվում է / փակվում է
\n
@ -2767,4 +2775,16 @@
<string name="unlock_all_features">Ստանալ OsmAnd բոլոր գործառույթները</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>

View file

@ -3831,4 +3831,13 @@
<string name="poi_glacier_ele_bottom">Lægsti punktur</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>

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="download_all">Scarica tutto</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>

View file

@ -2890,7 +2890,7 @@
<string name="lang_lo">Лаосский</string>
<string name="day_off_label">вых.</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="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="one_tap_active">Jedno stlačenie aktívne</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>
<string name="what_is_here">Čo je tu:</string>
<string name="parked_at">zaparkované o</string>

View file

@ -1749,8 +1749,15 @@
<string name="first_intermediate_dest_description">Додаје прво стајање</string>
<string name="switch_osm_notes_visibility_desc">Прикажи/Сакриј ОСМ белешке на карти.</string>
<string name="gpx_file">GPX фајл</string>
<string name="release_3_0">\\022
<string name="release_3_0">\\022 Нови турустички мени: гледајте WikiVoyage чланке без коришћења интернета
\n
\n • Википедија: нови изглед, активне везе, слике
\n
\n • Open Track UI: приказ група пролазних тачака
\n
\n • Маркери на карти: увезите означене групе из GPX фајлова
\n
\n • OsmAnd Live претплата сада укључује све OsmAnd функционалности
\n</string>
<string name="gpx_file_desc">GPX - погодно за извоз у ЈОСМ и друге ОСМ уређиваче.</string>
<string name="osc_file_desc">ОСЦ - погодно за извоз у OpenStreetMap.</string>
@ -2571,13 +2578,13 @@
<string name="online_webpage_warning">Страна доступна само док сте на мрежи. Отворити је у веб читачу?</string>
<string name="images_cache">Кеш слика</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="shared_string_wikivoyage">Wikivoyage</string>
<string name="article_removed">Чланак уклоњен</string>
<string name="wikivoyage_search_hint">Претрага: држава, град, покрајина</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_contents">Садржаји</string>
<string name="shared_string_result">Резултат</string>
@ -2717,7 +2724,7 @@
<string name="quick_action_interim_dialog">Прикажи дијалог међувремена</string>
<string name="quick_action_duplicates">Задато име брзе радње је већ у употреби, промењено је у %1$s да би се избегло дуплирање.</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="intermediate_items_sort_return">Оптимизуј редослед успутних одредишта ка крајњем одредишту.</string>
<string name="osmand_short_description_80_chars">Глобални преглед карти на мобилним уређајима &amp; навигација за ОСМ карте на мрежи и ван мреже</string>
@ -2799,11 +2806,11 @@
<string name="reports_for">Извештај за</string>
<string name="quick_favorites_name_preset">Унапред постављено име</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="show_full_description">Прикажи цео опис</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="topo_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="voice_is_not_available_msg">Нема доступног гласовног навођења, идите у \"Поставке\" → \"Опште\" → \"Гласовно навођење\" и одаберите или скините пакет са гласовима.</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>

View file

@ -894,10 +894,10 @@
<string name="poi_rcn_ref">地區性自行車網路節點</string>
<string name="poi_lcn_ref">本地自行車網路節點</string>
<string name="poi_iwn_ref">國際行網路節點</string>
<string name="poi_nwn_ref">全國行網路節點</string>
<string name="poi_rwn_ref">地區性行網路節點</string>
<string name="poi_lwn_ref">本地行網路節點</string>
<string name="poi_iwn_ref">國際登山健行網路節點</string>
<string name="poi_nwn_ref">全國登山健行網路節點</string>
<string name="poi_rwn_ref">地區性登山健行網路節點</string>
<string name="poi_lwn_ref">本地登山健行網路節點</string>
<string name="poi_opening_hours">營業時間</string>
<string name="poi_collection_times">採收時間</string>
@ -925,14 +925,14 @@
<string name="poi_fee_yes">費用</string>
<string name="poi_abandoned_poi">已遺棄的物件</string>
<string name="poi_route_hiking_iwn_poi">國際徒步登山路線</string>
<string name="poi_route_hiking_nwn_poi">全國徒步登山路線</string>
<string name="poi_route_hiking_rwn_poi">地區性徒步登山路線</string>
<string name="poi_route_hiking_lwn_poi">當地徒步登山路線</string>
<string name="poi_route_hiking_ref_poi">徒步旅行路線參考</string>
<string name="poi_route_hiking_iwn_poi">國際登山健行登山路線</string>
<string name="poi_route_hiking_nwn_poi">全國登山健行路線</string>
<string name="poi_route_hiking_rwn_poi">地區性登山健行路線</string>
<string name="poi_route_hiking_lwn_poi">當地登山健行路線</string>
<string name="poi_route_hiking_ref_poi">登山健行路線參考</string>
<string name="poi_node_networks">徒步旅行/自行車網路節點</string>
<string name="poi_hiking_routes">徒步路線</string>
<string name="poi_node_networks">登山健行/自行車網路節點</string>
<string name="poi_hiking_routes">登山健行路線</string>
<string name="poi_traffic_enforcement">交通執法</string>
<string name="poi_access_private">私人通路</string>
<string name="poi_access_no">禁止通行</string>
@ -1275,7 +1275,7 @@
<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_hikingmap">登山健行地圖</string>
<string name="poi_information_nature">資訊標誌:大自然</string>
<string name="poi_doors"></string>
<string name="poi_bicycle_parking_anchors">錨泊點</string>
@ -3877,4 +3877,10 @@
<string name="poi_glacier_ele_bottom">最低點</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>

View file

@ -3019,8 +3019,16 @@
<string name="by_type">按照類型</string>
<string name="one_tap_active_descr">輕點在地圖上的標記,將其移動到活動標記的頂端,而不用打開內容選單。</string>
<string name="modify_the_search_query">變更搜尋的查詢。</string>
<string name="release_3_0">"\\022
\n "</string>
<string name="release_3_0">\\022 新的旅行選單:檢視不用網路的維基導遊文章
\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_all_desc">包括座標和所有註解資料的 GPX 檔案。</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"?>
<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="list_content_padding_large">32dp</dimen>
<dimen name="title_padding">20dp</dimen>

View file

@ -81,7 +81,7 @@
<string name="images_cache">Images cache</string>
<string name="delete_search_history">Delete search history</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="article_removed">Article removed</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">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="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="max_speed">Maximum 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.os.Build;
import android.os.IBinder;
import android.support.annotation.AttrRes;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
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) {
TypedValue outValue = new TypedValue();
ctx.getTheme().resolveAttribute(attribute, outValue, true);

View file

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

View file

@ -1,5 +1,43 @@
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.content.DialogInterface;
import android.content.res.Resources;
@ -36,44 +74,6 @@ import android.widget.ImageView;
import android.widget.TextView;
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 static final Pattern ILLEGAL_FILE_NAME_CHARACTERS = Pattern.compile("[?:\"*|/\\<>]");
@ -851,7 +851,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
}
public void sortData() {
final Collator cl = Collator.getInstance();
final Collator cl = OsmAndCollator.primaryCollator();
for (List<LocalIndexInfo> i : data.values()) {
Collections.sort(i, new Comparator<LocalIndexInfo>() {
@Override

View file

@ -1,8 +1,24 @@
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.content.Context;
import android.icu.text.Collator;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
@ -16,21 +32,6 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
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 {
private static final int RELOAD_ID = 5;
@ -94,7 +95,7 @@ public class UpdatesIndexFragment extends OsmAndListFragment implements Download
OsmandSettings settings = getMyApplication().getSettings();
listAdapter = new UpdateIndexAdapter(a, R.layout.download_index_list_item, indexItems,
!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>() {
@Override
public int compare(IndexItem indexItem, IndexItem indexItem2) {

View file

@ -56,6 +56,8 @@ import java.util.Map;
public class AmenityMenuBuilder extends MenuBuilder {
private static final String WIKI_LINK = ".wikipedia.org/w";
private final Amenity amenity;
public AmenityMenuBuilder(MapActivity mapActivity, final Amenity amenity) {
@ -100,7 +102,12 @@ public class AmenityMenuBuilder extends MenuBuilder {
ll.setOnLongClickListener(new View.OnLongClickListener() {
@Override
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());
return true;
}
@ -293,7 +300,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (text.contains(".wikipedia.org/w")) {
if (text.contains(WIKI_LINK)) {
if (Version.isPaidVersion(app)) {
WikiArticleHelper wikiArticleHelper = new WikiArticleHelper(mapActivity, !light);
wikiArticleHelper.showWikiArticle(amenity.getLocation(), text);

View file

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

View file

@ -447,7 +447,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
@Override
public void onClick(View v) {
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.v7.app.AlertDialog;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.PopupMenu;
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.Menu;
import android.view.MenuInflater;
@ -42,6 +45,7 @@ import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
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.base.FavoriteImageDrawable;
import net.osmand.plus.base.OsmandExpandableListFragment;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener;
import net.osmand.plus.widgets.TextViewEx;
import net.osmand.util.Algorithms;
import java.io.File;
import java.lang.ref.WeakReference;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class TrackPointFragment extends OsmandExpandableListFragment implements TrackBitmapDrawerListener {
@ -100,7 +106,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
private boolean routePointsExpanded;
private View mainView;
private PopupMenu popupItemMenu;
private Menu optionsMenu;
@Override
@ -145,9 +150,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public void onPause() {
super.onPause();
setUpdateEnable(false);
if (popupItemMenu != null) {
popupItemMenu.dismiss();
}
if (optionsMenu != null) {
optionsMenu.close();
}
@ -453,15 +455,19 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
if (activity == null) {
return;
}
GPXFile gpxFile = getGpx();
final GPXFile gpxFile = getGpx();
MapMarkersGroup markersSearch = markersHelper.getMarkersGroup(gpxFile);
final MapMarkersGroup markersGr;
final boolean markersRemoved;
if (markersSearch != null) {
markersGr = markersSearch;
markersHelper.removeMarkersGroup(markersGr);
markersRemoved = true;
} else if (gpxFile != null) {
markersGr = markersHelper.addOrEnableGroup(gpxFile);
markersRemoved = false;
} else {
markersRemoved = false;
markersGr = null;
}
if (markersGr != null) {
@ -474,14 +480,24 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
fragmentAdapter.closeFabMenu(activity);
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)
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
@Override
public void onClick(View v) {
TrackActivity trackActivity = getTrackActivity();
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();
}
}
@ -662,6 +678,18 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
List<GpxDisplayGroup> groups = new ArrayList<>();
Filter myFilter;
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) {
itemGroups.clear();
@ -680,22 +708,82 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
continue;
}
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) {
empty = false;
itemGroups.put(g, new ArrayList<>(g.getModifiableList()));
} else {
ArrayList<GpxDisplayItem> list = new ArrayList<>();
for (GpxDisplayItem i : g.getModifiableList()) {
Map<String, List<GpxDisplayItem>> itemsMapFiltered = new HashMap<>();
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)) {
list.add(i);
List<GpxDisplayItem> itemsFiltered = itemsMapFiltered.get(category);
if (itemsFiltered == null) {
itemsFiltered = new ArrayList<>();
itemsMapFiltered.put(category, itemsFiltered);
}
itemsFiltered.add(i);
empty = false;
}
}
itemGroups.put(g, list);
}
}
itemsMap = itemsMapFiltered;
}
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);
}
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();
}
@ -757,23 +845,94 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View row = convertView;
final GpxDisplayGroup group = getGroup(groupPosition);
boolean checkBox = row != null && row.findViewById(R.id.toggle_item) instanceof CheckBox;
boolean same = (selectionMode && checkBox) || (!selectionMode && !checkBox);
if (row == null || !same) {
IconsCache iconsCache = app.getIconsCache();
if (row == null) {
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.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) {
label.setText(getString(R.string.waypoints));
groupTitle.setText(getString(R.string.waypoints));
description.setText(getString(R.string.track_points_category_name));
} else {
label.setText(getString(R.string.route_points));
groupTitle.setText(getString(R.string.route_points));
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);
if (selectionMode) {
@ -785,6 +944,43 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
public void onClick(View v) {
List<GpxDisplayItem> items = itemGroups.get(group);
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);
if (items != null) {
Set<GpxDisplayItem> set = selectedItems.get(group.getType());
@ -799,16 +995,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
selectedGroups.remove(groupPosition);
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,
ViewGroup parent) {
View row = convertView;
IconsCache iconsCache = getMyApplication().getIconsCache();
if (row == null) {
LayoutInflater inflater = getLayoutInflater();
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) {
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);
TextViewEx button = (TextViewEx) row.findViewById(R.id.button);
TextView description = (TextView) row.findViewById(R.id.description);
final GpxDisplayItem gpxItem = getChild(groupPosition, childPosition);
boolean isWpt = gpxItem != null && gpxItem.group.getType() == GpxDisplayItemType.TRACK_POINTS;
ImageView expandImage = (ImageView) row.findViewById(R.id.expand_image);
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);
options.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon(
R.drawable.ic_overflow_menu_white));
options.setVisibility(View.VISIBLE);
options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IconsCache iconsCache = getMyApplication().getIconsCache();
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);
final GpxDisplayGroup group = getGroup(groupPosition);
final GpxDisplayItem gpxItem = getChild(groupPosition, childPosition);
final WptPt wpt = gpxItem != null ? gpxItem.locationStart : null;
boolean isWaypoint = gpxItem != null && group.getType() == GpxDisplayItemType.TRACK_POINTS;
if (isWaypoint) {
int groupColor = group.getColor();
if (wpt != null) {
groupColor = wpt.getColor(groupColor);
}
if (groupColor == 0) {
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) {
int count = itemGroups.get(groups.get(groupPosition)).size();
button.setText(getString(R.string.shared_string_show_all) + " - " + count);
icon.setImageDrawable(null);
} else {
icon.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_marker_dark));
}
title.setVisibility(View.VISIBLE);
button.setVisibility(View.GONE);
expandImage.setVisibility(View.GONE);
options.setVisibility(View.GONE);
}
if (gpxItem != null) {
options.setOnClickListener(null);
title.setText(gpxItem.name);
if (!Algorithms.isEmpty(gpxItem.description)) {
description.setText(gpxItem.description);
@ -909,12 +1052,36 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
} else {
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);
if (selectionMode && gpxItem != null) {
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);
options.setVisibility(View.GONE);
ch.setOnClickListener(new View.OnClickListener() {
@ -922,16 +1089,16 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
@Override
public void onClick(View v) {
if (ch.isChecked()) {
Set<GpxDisplayItem> set = selectedItems.get(gpxItem.group.getType());
Set<GpxDisplayItem> set = selectedItems.get(group.getType());
if (set != null) {
set.add(gpxItem);
} else {
set = new LinkedHashSet<>();
set.add(gpxItem);
selectedItems.put(gpxItem.group.getType(), set);
selectedItems.put(group.getType(), set);
}
} else {
Set<GpxDisplayItem> set = selectedItems.get(gpxItem.group.getType());
Set<GpxDisplayItem> set = selectedItems.get(group.getType());
if (set != null) {
set.remove(gpxItem);
}
@ -979,6 +1146,8 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements
for (GpxDisplayItem i : g.getModifiableList()) {
if (i.name.toLowerCase().contains(cs)) {
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,
int groupPosition, int childPosition, long id) {
WikivoyageSearchResult articleItem = listAdapter.getArticleItem(groupPosition, childPosition);
sendResults(articleItem.getCityId());
sendResults(articleItem.getTripId());
dismiss();
return true;
}
@ -109,10 +109,10 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
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();
} else {
sendResults(articleItem.getCityId());
sendResults(articleItem.getTripId());
dismiss();
}
return true;
@ -235,7 +235,7 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr
boolean isLastChild, View convertView, ViewGroup parent) {
WikivoyageSearchResult articleItem = getArticleItem(groupPosition, childPosition);
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) {
convertView = LayoutInflater.from(context)

View file

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

View file

@ -3,7 +3,6 @@ package net.osmand.plus.wikivoyage.data;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import net.osmand.Collator;
import net.osmand.CollatorStringMatcher;
import net.osmand.CollatorStringMatcher.StringMatcherMode;
@ -33,9 +32,11 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
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 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 ARTICLES_COL_ID = "article_id";
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_CONTENT = "content_gz";
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_IMAGE_TITLE = "image_title";
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_LANG = "lang";
private static final String ARTICLES_COL_CONTENTS_JSON = "contents_json";
@ -70,7 +72,7 @@ public class TravelDbHelper {
ARTICLES_COL_LON + ", " +
ARTICLES_COL_IMAGE_TITLE + ", " +
ARTICLES_COL_GPX_GZ + ", " +
ARTICLES_COL_CITY_ID + ", " +
ARTICLES_COL_TRIP_ID + ", " +
ARTICLES_COL_ORIGINAL_ID + ", " +
ARTICLES_COL_LANG + ", " +
ARTICLES_COL_CONTENTS_JSON + ", " +
@ -81,14 +83,15 @@ public class TravelDbHelper {
ARTICLES_COL_TITLE + ", " +
ARTICLES_COL_LAT + ", " +
ARTICLES_COL_LON + ", " +
ARTICLES_COL_CITY_ID + ", " +
ARTICLES_COL_TRIP_ID + ", " +
ARTICLES_COL_LANG + ", " +
ARTICLES_POP_ORDER + ", " +
ARTICLES_POP_INDEX +
" 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_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_LANG = "lang";
@ -194,9 +197,9 @@ public class TravelDbHelper {
String[] queries = searchQuery.replace('_', ' ').replace('/', ' ').split(" ");
if (conn != null) {
List<String> params = new ArrayList<>();
String query = "SELECT distinct wa.city_id, wa.title, wa.lang, wa.is_part_of, wa.image_title "
+ "FROM wikivoyage_articles wa WHERE wa.city_id in "
+ " (SELECT city_id FROM wikivoyage_search WHERE search_term LIKE";
String query = "SELECT distinct wa.trip_id, wa.title, wa.lang, wa.is_part_of, wa.image_title "
+ "FROM travel_articles wa WHERE wa.trip_id in "
+ " (SELECT trip_id FROM travel_search WHERE search_term LIKE";
for (String q : queries) {
if (q.trim().length() > 0) {
if (params.size() > 5) {
@ -204,7 +207,7 @@ public class TravelDbHelper {
break;
}
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 {
query += "?";
}
@ -217,7 +220,7 @@ public class TravelDbHelper {
if (cursor.moveToFirst()) {
do {
WikivoyageSearchResult rs = new WikivoyageSearchResult();
rs.cityId = cursor.getLong(0);
rs.tripId = cursor.getLong(0);
rs.articleTitles.add(cursor.getString(1));
rs.langs.add(cursor.getString(2));
rs.isPartOf.add(cursor.getString(3));
@ -242,45 +245,107 @@ public class TravelDbHelper {
@NonNull
public List<TravelArticle> loadPopularArticles() {
List<TravelArticle> res = new ArrayList<>();
String language = application.getLanguage();
List<PopularArticle> popReadArticles = new ArrayList<>();
SQLiteConnection conn = openConnection();
if (conn == null) {
return res;
popularArticles = new ArrayList<TravelArticle>();
return popularArticles;
}
String LANG_WHERE = " WHERE " + ARTICLES_COL_LANG + " = '" + language + "'";
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()) {
do {
PopularArticle travelArticle = PopularArticle.readArticle(cursor);
if (language.equals(travelArticle.lang)) {
if(travelArticle.order != -1) {
popReadArticlesOrder.add(travelArticle);
} if(travelArticle.isLocationSpecified()) {
popReadArticlesLocation.add(travelArticle);
} else {
popReadArticles.add(travelArticle);
}
}
} while (cursor.moveToNext());
}
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();
bld.append(ARTICLES_TABLE_SELECT).append(LANG_WHERE)
.append(" and ").append(ARTICLES_COL_CITY_ID).append(" IN (");
for (int i = 0; i < popReadArticles.size() && i < POPULAR_LIMIT; i++) {
bld.append(ARTICLES_TABLE_SELECT).append(whereCondition)
.append(" and ").append(ARTICLES_COL_TRIP_ID).append(" IN (");
for (int i = 0; i < articleIds.size(); i++) {
if (i > 0) {
bld.append(", ");
}
bld.append(popReadArticles.get(i).cityId);
bld.append(articleIds.get(i));
}
bld.append(")");
cursor = conn.rawQuery(bld.toString(), null);
Map<Long, TravelArticle> ts = new HashMap<Long, TravelArticle>();
if (cursor.moveToFirst()) {
do {
TravelArticle travelArticle = readArticle(cursor);
res.add(travelArticle);
ts.put(travelArticle.tripId, travelArticle);
} while (cursor.moveToNext());
}
cursor.close();
sortArticlesByDistance(res);
popularArticles = res;
return ts;
}
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;
}
@ -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) {
Location location = application.getLocationProvider().getLastKnownLocation();
if (location != null) {
final LatLon loc = new LatLon(location.getLatitude(), location.getLongitude());
final LatLon loc ;
if(location == null) {
loc = application.getSettings().getLastKnownMapLocation();
} else {
loc = new LatLon(location.getLatitude(), location.getLongitude());
}
if (loc != null) {
Collections.sort(list, new Comparator<PopularArticle>() {
@Override
public int compare(PopularArticle article1, PopularArticle article2) {
@ -331,11 +389,12 @@ public class TravelDbHelper {
}
}
private Collection<WikivoyageSearchResult> groupSearchResultsByCityId(List<WikivoyageSearchResult> res) {
String baseLng = application.getLanguage();
TLongObjectHashMap<WikivoyageSearchResult> wikivoyage = new TLongObjectHashMap<>();
for (WikivoyageSearchResult rs : res) {
WikivoyageSearchResult prev = wikivoyage.get(rs.cityId);
WikivoyageSearchResult prev = wikivoyage.get(rs.tripId);
if (prev != null) {
int insInd = prev.langs.size();
if (rs.langs.get(0).equals(baseLng)) {
@ -351,7 +410,7 @@ public class TravelDbHelper {
prev.langs.add(insInd, rs.langs.get(0));
prev.isPartOf.add(insInd, rs.isPartOf.get(0));
} else {
wikivoyage.put(rs.cityId, rs);
wikivoyage.put(rs.tripId, rs);
}
}
return wikivoyage.valueCollection();
@ -382,20 +441,20 @@ public class TravelDbHelper {
Map<String, WikivoyageSearchResult> headerObjs = new HashMap<>();
if (conn != null) {
List<String> params = new ArrayList<>();
StringBuilder query = new StringBuilder("SELECT a.city_id, a.title, a.lang, a.is_part_of " +
"FROM wikivoyage_articles a WHERE is_part_of = ? and lang = ? ");
StringBuilder query = new StringBuilder("SELECT a.trip_id, a.title, a.lang, a.is_part_of " +
"FROM travel_articles a WHERE is_part_of = ? and lang = ? ");
params.add(title);
params.add(lang);
if (parts != null && parts.length > 0) {
headers = new HashSet<>(Arrays.asList(parts));
headers.add(title);
query.append("UNION SELECT a.city_id, a.title, a.lang, a.is_part_of " +
"FROM wikivoyage_articles a WHERE title = ? and lang = ? ");
query.append("UNION SELECT a.trip_id, a.title, a.lang, a.is_part_of " +
"FROM travel_articles a WHERE title = ? and lang = ? ");
params.add(parts[0]);
params.add(lang);
for (String part : parts) {
query.append("UNION SELECT a.city_id, a.title, a.lang, a.is_part_of " +
"FROM wikivoyage_articles a WHERE is_part_of = ? and lang = ? ");
query.append("UNION SELECT a.trip_id, a.title, a.lang, a.is_part_of " +
"FROM travel_articles a WHERE is_part_of = ? and lang = ? ");
params.add(part);
params.add(lang);
}
@ -404,7 +463,7 @@ public class TravelDbHelper {
if (cursor.moveToFirst()) {
do {
WikivoyageSearchResult rs = new WikivoyageSearchResult();
rs.cityId = cursor.getLong(0);
rs.tripId = cursor.getLong(0);
rs.articleTitles.add(cursor.getString(1));
rs.langs.add(cursor.getString(2));
rs.isPartOf.add(cursor.getString(3));
@ -436,7 +495,7 @@ public class TravelDbHelper {
});
WikivoyageSearchResult emptyResult = new WikivoyageSearchResult();
emptyResult.articleTitles.add(header);
emptyResult.cityId = -1;
emptyResult.tripId = -1;
searchResult = searchResult != null ? searchResult : emptyResult;
res.put(searchResult, results);
}
@ -450,7 +509,7 @@ public class TravelDbHelper {
TravelArticle res = null;
SQLiteConnection conn = openConnection();
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});
if (cursor.moveToFirst()) {
res = readArticle(cursor);
@ -464,7 +523,7 @@ public class TravelDbHelper {
long res = 0;
SQLiteConnection conn = openConnection();
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_COL_LANG + " = ?", new String[]{title, lang});
if (cursor.moveToFirst()) {
@ -481,7 +540,7 @@ public class TravelDbHelper {
SQLiteConnection conn = openConnection();
if (conn != null) {
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()) {
String baseLang = application.getLanguage();
do {
@ -519,7 +578,7 @@ public class TravelDbHelper {
res.lat = cursor.isNull(4) ? Double.NaN : cursor.getDouble(4);
res.lon = cursor.isNull(5) ? Double.NaN : cursor.getDouble(5);
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.lang = cursor.getString(10);
res.contentsJson = cursor.getString(11);
@ -556,10 +615,11 @@ public class TravelDbHelper {
}
private static class PopularArticle {
long cityId;
long tripId;
String title;
String lang;
int popIndex;
int order;
double lat;
double lon;
@ -572,9 +632,10 @@ public class TravelDbHelper {
res.title = cursor.getString(0);
res.lat = cursor.isNull(1) ? Double.NaN : cursor.getDouble(1);
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.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;
}
}

View file

@ -62,7 +62,7 @@ public class TravelLocalDataHelper {
}
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) {
@ -98,7 +98,7 @@ public class TravelLocalDataHelper {
public void addArticleToSaved(@NonNull TravelArticle article) {
if (!isArticleSaved(article)) {
TravelArticle saved = new TravelArticle();
saved.cityId = article.cityId;
saved.tripId = article.tripId;
saved.title = article.title;
saved.lang = article.lang;
saved.aggregatedPartOf = article.aggregatedPartOf;
@ -121,7 +121,7 @@ public class TravelLocalDataHelper {
}
public void removeArticleFromSaved(@NonNull TravelArticle article) {
TravelArticle savedArticle = getArticle(article.cityId, article.lang);
TravelArticle savedArticle = getArticle(article.tripId, article.lang);
if (savedArticle != null) {
savedArticles.remove(savedArticle);
dbHelper.removeSavedArticle(savedArticle);
@ -130,7 +130,7 @@ public class TravelLocalDataHelper {
}
public boolean isArticleSaved(@NonNull TravelArticle article) {
return getArticle(article.cityId, article.lang) != null;
return getArticle(article.tripId, article.lang) != null;
}
private void notifySavedUpdated() {
@ -142,7 +142,7 @@ public class TravelLocalDataHelper {
@Nullable
private TravelArticle getArticle(long cityId, String lang) {
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;
}
}
@ -402,7 +402,7 @@ public class TravelLocalDataHelper {
if (conn != null) {
try {
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,
travelBook, article.lat, article.lon});
} finally {
@ -423,7 +423,7 @@ public class TravelLocalDataHelper {
" WHERE " + BOOKMARKS_COL_CITY_ID + " = ?" +
" AND " + BOOKMARKS_COL_LANG + " = ?" +
" AND " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?",
new Object[]{article.cityId, article.lang, travelBook});
new Object[]{article.tripId, article.lang, travelBook});
} finally {
conn.close();
}
@ -454,7 +454,7 @@ public class TravelLocalDataHelper {
private TravelArticle readSavedArticle(SQLiteCursor cursor) {
TravelArticle res = new TravelArticle();
res.cityId = cursor.getLong(0);
res.tripId = cursor.getLong(0);
res.title = cursor.getString(1);
res.lang = cursor.getString(2);
res.aggregatedPartOf = cursor.getString(3);

View file

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

View file

@ -49,7 +49,7 @@ public class SavedArticlesTabFragment extends BaseOsmAndFragment implements Trav
FragmentActivity activity = getActivity();
if (activity != null) {
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 newArticle = (TravelArticle) newItem;
return oldArticle.getCityId() == newArticle.getCityId()
return oldArticle.getTripId() == newArticle.getTripId()
&& oldArticle.getLang().equals(newArticle.getLang());
}
return false;

View file

@ -72,7 +72,7 @@ public class ArticleTravelCard extends BaseTravelCard {
@Override
public void onClick(View v) {
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) {
WikivoyageSearchResult res = (WikivoyageSearchResult) item;
WikivoyageArticleDialogFragment
.showInstance(fm, res.getCityId(), new ArrayList<>(res.getLangs()));
.showInstance(fm, res.getTripId(), new ArrayList<>(res.getLangs()));
} else if (item instanceof WikivoyageSearchHistoryItem) {
WikivoyageSearchHistoryItem historyItem = (WikivoyageSearchHistoryItem) item;
WikivoyageArticleDialogFragment