Merge branch 'master' of https://github.com/osmandapp/Osmand
This commit is contained in:
commit
53c4ea4142
21 changed files with 1292 additions and 667 deletions
14
OsmAnd/res/drawable/travel_card_download_icon.xml
Normal file
14
OsmAnd/res/drawable/travel_card_download_icon.xml
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/color_osm_edit_create"/>
|
||||
<size
|
||||
android:width="32dp"
|
||||
android:height="32dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:drawable="@drawable/ic_action_import"
|
||||
android:gravity="center"/>
|
||||
</layer-list>
|
12
OsmAnd/res/drawable/travel_card_stroke_bg.xml
Normal file
12
OsmAnd/res/drawable/travel_card_stroke_bg.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="?attr/wikivoyage_card_divider_color"/>
|
||||
|
||||
<corners android:radius="3dp"/>
|
||||
|
||||
</shape>
|
14
OsmAnd/res/drawable/travel_card_update_icon.xml
Normal file
14
OsmAnd/res/drawable/travel_card_update_icon.xml
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/osmand_orange"/>
|
||||
<size
|
||||
android:width="32dp"
|
||||
android:height="32dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:drawable="@drawable/ic_action_reset_to_default_dark"
|
||||
android:gravity="center"/>
|
||||
</layer-list>
|
171
OsmAnd/res/layout/travel_download_update_card.xml
Normal file
171
OsmAnd/res/layout/travel_download_update_card.xml
Normal file
|
@ -0,0 +1,171 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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="@drawable/travel_card_bg"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/content_padding"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/bottom_sheet_content_padding_small">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginTop="2dp"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_primary_text_color"
|
||||
android:textSize="@dimen/travel_card_primary_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Download file"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/travel_card_download_icon"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/wikivoyage_secondary_text"
|
||||
android:textSize="@dimen/travel_card_primary_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Download this Wikivoyage travel guides file to view articles about places around the world without an internet connection."/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:layout_marginBottom="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_content_margin_small"
|
||||
android:background="@drawable/travel_card_stroke_bg"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_action_read_article"
|
||||
tools:tint="?attr/wikivoyage_active_color"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/file_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_primary_text_color"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Wikivoyage"/>
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/file_description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/wikivoyage_secondary_text"
|
||||
android:textSize="@dimen/default_sub_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="255 Mb • Update 11 April"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_content_margin_small">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/wikivoyage_secondary_btn_bg">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/secondary_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/wikivoyage_card_button_height"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_active_color"
|
||||
android:textSize="@dimen/text_button_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:ignore="UnusedAttribute"
|
||||
tools:text="Later"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/wikivoyage_primary_btn_bg">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/primary_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/wikivoyage_card_button_height"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_primary_btn_text_color"
|
||||
android:textSize="@dimen/text_button_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:ignore="UnusedAttribute"
|
||||
tools:text="Update"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -3101,4 +3101,7 @@ Repræsenterer område: %1$s x %2$s</string>
|
|||
<string name="contour_lines_sea_depth">Højdekurver + havdybde</string>
|
||||
<string name="unlock_all_features">Lås op for alle funktioner i OsmAnd</string>
|
||||
|
||||
<string name="travel_guide">Rejseguide</string>
|
||||
<string name="travel_guide_description">Gennemse Wikivoyage til de mest interessante steder på kloden via OsmAnd og uden en internetforbindelse.</string>
|
||||
<string name="in_app_purchase_desc_ex">Når engang købt, vil det være permanent tilgængelig.</string>
|
||||
</resources>
|
||||
|
|
|
@ -240,4 +240,30 @@
|
|||
<string name="poi_sports">Αθλητικά είδη</string>
|
||||
<string name="poi_tableware">Επιτραπέζια σκεύη</string>
|
||||
<string name="poi_cuisine_deli">Εδεσματοπωλείο</string>
|
||||
<string name="poi_stationery">Είδη γραφείου</string>
|
||||
<string name="poi_ticket">Εισιτήρια</string>
|
||||
<string name="poi_tobacco">Καπνοπωλείο</string>
|
||||
<string name="poi_toys">Κατάστημα παιχνιδιών</string>
|
||||
<string name="poi_tyres">Κατάστημα ελαστικών</string>
|
||||
<string name="poi_vacuum_cleaner">Ηλεκτρικές σκούπες</string>
|
||||
<string name="poi_video">Βιντεάδικο</string>
|
||||
<string name="poi_department_store">Πολυκατάστημα</string>
|
||||
<string name="poi_electronics">Κατάστημα ηλεκτρονικών</string>
|
||||
<string name="poi_car">Πωλήσεις αυτοκινήτων</string>
|
||||
<string name="poi_car_parts">Ανταλλακτικά αυτοκινήτων</string>
|
||||
<string name="poi_cosmetics">Καλλυντικά</string>
|
||||
<string name="poi_marketplace">Αγορά</string>
|
||||
<string name="poi_sewing">Ραφείο</string>
|
||||
<string name="poi_watches">Ρολογάδικο</string>
|
||||
<string name="poi_swimming_pool_shop">Είδη πισίνας</string>
|
||||
<string name="poi_games">Παιχνίδια</string>
|
||||
<string name="poi_trophy">Τρόπαια, έπαθλα</string>
|
||||
<string name="poi_video_games">Βιντεοπαιχνίδια</string>
|
||||
<string name="poi_pyrotechnics">Πυροτεχνήματα</string>
|
||||
<string name="poi_weapons">Οπλοπωλείο</string>
|
||||
<string name="poi_perfumery">Αρωματοποιείο</string>
|
||||
<string name="poi_police">Αστυνομία</string>
|
||||
<string name="poi_fire_station">Πυροσβεστικός σταθμός</string>
|
||||
<string name="poi_fire_hydrant">Πυροσβεστικός κρουνός</string>
|
||||
<string name="poi_fire_extinguisher">Πυροσβεστήρας</string>
|
||||
</resources>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,7 +3,7 @@
|
|||
<string name="offline_edition">Modifications hors-ligne</string>
|
||||
<string name="offline_edition_descr">Toujours utiliser l\'édition hors-ligne.</string>
|
||||
|
||||
<string name="update_poi_does_not_change_indexes">Les modifications de points d\'intérêt dans l\'application sont sans effet sur les cartes téléchargées, les modifications sont enregistrées dans un fichier.</string>
|
||||
<string name="update_poi_does_not_change_indexes">Les modifications de points d\'intérêt dans l\'application sont sans effet sur les cartes téléchargées, les modifications sont enregistrées dans un fichier de votre appareil.</string>
|
||||
<string name="local_openstreetmap_uploading">Envoi…</string>
|
||||
<string name="local_openstreetmap_were_uploaded">{0} Points d\'intérêt / Notes ont été envoyés</string>
|
||||
<string name="local_openstreetmap_uploadall">Tout envoyer</string>
|
||||
|
@ -65,7 +65,7 @@
|
|||
<string name="osmand_service_descr">OsmAnd s\'exécute en tâche de fond lorsque l\'écran est éteint.</string>
|
||||
|
||||
|
||||
<string name="switch_to_raster_map_to_see">Vous n\'avez pas actuellement de carte vectorielle pour cette position.\n\t\n\tVous pouvez en télécharger dans \'Paramètres\' → \'Données hors-ligne\', ou basculer sur les cartes en ligne via \'Paramètres\' → \'Sources de carte\' en activant le greffon des cartes en ligne.</string>
|
||||
<string name="switch_to_raster_map_to_see">Aucune carte vectorielle hors-ligne n\'est actuellement présente pour cet emplacement. Vous pouvez en télécharger une depuis \'Paramètres\' → \'Données hors-ligne\' ou basculer sur les cartes en ligne en activant le greffon des cartes en ligne.</string>
|
||||
|
||||
|
||||
<string name="download_files_not_enough_space">Il n\'y a pas suffisamment d\'espace pour télécharger %1$s MB (disponible : %2$s).</string>
|
||||
|
@ -104,7 +104,7 @@
|
|||
<string name="old_poi_file_should_be_deleted">Le fichier de points d\'intérêt \'%1$s\' est obsolète et peut être supprimé.</string>
|
||||
<string name="update_poi_file_not_found">Fichier local de gestion des modifications de points d\'intérêt introuvable, et ne peut être créé.</string>
|
||||
<string name="button_upgrade_osmandplus">Mettre à jour OsmAnd+</string>
|
||||
<string name="map_version_changed_info">Les fichiers de cartes sur le serveur sont incompatibles avec votre version de l\'application. Pour les télécharger et les utiliser, installez une version plus récente de votre application.</string>
|
||||
<string name="map_version_changed_info">Téléchargez la nouvelle version de l\'application pour utiliser les nouvelle cartes.</string>
|
||||
<string name="shared_string_rename">Renommer</string>
|
||||
|
||||
<string name="poi_filter_nominatim">Recherche OSM en ligne</string>
|
||||
|
@ -137,8 +137,8 @@
|
|||
<string name="favorite_places_category">Lieux</string>
|
||||
<string name="shared_string_others">Autres</string>
|
||||
<string name="shared_string_no_thanks">Pas nécessaire</string>
|
||||
<string name="basemap_missing">La carte mondiale de base est absente (couvrant le monde entier avec un niveau large). Téléchargez World_basemap_x.obf pour avoir une couverture complète.</string>
|
||||
<string name="vector_data_missing">Il n\'y a aucune carte hors-ligne sur la carte SD. Pensez à en télécharger pour utiliser les cartes sans connexion.</string>
|
||||
<string name="basemap_missing">Téléchargez la carte mondiale de base qui couvre le monde entier avec un niveau de zoom large.</string>
|
||||
<string name="vector_data_missing">Téléchargez des données hors-ligne pour utiliser les cartes sans connexion.</string>
|
||||
|
||||
|
||||
<string name="local_index_installed">Version locale</string>
|
||||
|
@ -283,13 +283,13 @@
|
|||
<string name="version_index_is_not_supported">La version de l\'\'index \'\'{0}\'\' n\'\'est pas supporté</string>
|
||||
|
||||
|
||||
<string name="osmand_routing_experimental">La navigation hors-ligne OsmAnd est une fonction expérimentale ne fonctionnant pas pour une distance de plus de 20 km.
|
||||
|
||||
Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade.</string>
|
||||
<string name="osmand_routing_experimental">La navigation hors-ligne OsmAnd est une fonction expérimentale ne fonctionnant pas pour une distance supérieure à 20 km.
|
||||
\n
|
||||
\nAu-delà la navigation bascule automatiquement sur le service en ligne CloudMade.</string>
|
||||
<string name="specified_dir_doesnt_exist">Le dossier spécifié est introuvable.</string>
|
||||
<string name="application_dir">Dossier de stockage</string>
|
||||
|
||||
<string name="osmand_net_previously_installed">Vous avez la version antérieure d\'OsmAnd d\'installée. Les données hors-ligne ne sont utilisées que par la nouvelle application. Les favoris doivent être exportés de l\'ancienne application et réimportés.</string>
|
||||
<string name="osmand_net_previously_installed">Toutes les anciennes données hors-ligne peuvent être utilisées par la nouvelle application mais les favoris doivent être exportés de l\'ancienne application puis réimportés dans la nouvelle.</string>
|
||||
<string name="build_installed">Version {0} installée avec succès ({1}).</string>
|
||||
<string name="downloading_build">Téléchargement de l\'application…</string>
|
||||
<string name="install_selected_build">Souhaitez-vous réellement installer OsmAnd - {0} sur {1} {2} MB ?</string>
|
||||
|
@ -428,7 +428,7 @@ Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade
|
|||
<string name="route_head">Avancez</string>
|
||||
<string name="first_time_continue">Continuer</string>
|
||||
<string name="first_time_download">Téléchargement des régions</string>
|
||||
<string name="first_time_msg">Merci d\'avoir choisi OsmAnd. La plupart des fonctionnalités de l\'application nécessitent des données régionales, utilisables hors-ligne, que vous pouvez au préalable télécharger (\'Paramètres\' → \'Données hors-ligne\') ou préparer vous-même. Ces données permettront de visualiser les cartes et de rechercher une adresse, un point d\'intérêt ou un transport public.</string>
|
||||
<string name="first_time_msg">Merci d\'avoir choisi OsmAnd. Téléchargez des données régionales pour une utilisation hors-ligne via \'Paramètres\' → \'Données hors-ligne\'. Ces données vous permettront d\'afficher des cartes, de rechercher une adresse, un point d\'intérêt ou un transport public et bien plus encore.</string>
|
||||
<string name="search_poi_location">Recherche d\'un signal…</string>
|
||||
<string name="search_near_map">Rechercher autour du centre de la carte</string>
|
||||
<string name="search_nearby">Rechercher à proximité</string>
|
||||
|
@ -540,7 +540,7 @@ Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade
|
|||
<string name="data_settings">Données</string>
|
||||
|
||||
<string name="osm_settings">Contribuer à OSM</string>
|
||||
<string name="auto_zoom_map_descr">Zoom de la carte adapté à la vitesse (lorsque que votre position figure sur la carte).</string>
|
||||
<string name="auto_zoom_map_descr">Zoom de la carte adapté à votre vitesse (lorsque que votre position est affichée sur la carte).</string>
|
||||
<string name="auto_zoom_map">Zoom automatique de la carte</string>
|
||||
<string name="additional_settings">Paramètres supplémentaires</string>
|
||||
<string name="shared_string_settings">Paramètres</string>
|
||||
|
@ -721,7 +721,7 @@ Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade
|
|||
<string name="shared_string_help">Aide</string>
|
||||
|
||||
<string name="accessibility_mode">Mode accessibilité</string>
|
||||
<string name="accessibility_mode_descr">Activer les fonctionnalités d\'accessibilité.</string>
|
||||
<string name="accessibility_mode_descr">Active les fonctionnalités d\'accessibilité.</string>
|
||||
<string name="shared_string_on">Oui</string>
|
||||
<string name="shared_string_off">Non</string>
|
||||
<string name="accessibility_default">Selon les paramètres Android</string>
|
||||
|
@ -1050,7 +1050,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="stop_routing_confirm">Êtes-vous sûr de vouloir arrêter la navigation ?</string>
|
||||
<string name="clear_dest_confirm">Souhaitez-vous vraiment supprimer votre destination (et vos étapes) ?</string>
|
||||
<string name="precise_routing_mode">Routage précis (alpha)</string>
|
||||
<string name="precise_routing_mode_descr">Activer pour calculer des itinéraires précis et sans surprises. Actuellement fonctionne sur des distances limitées et reste lent.</string>
|
||||
<string name="precise_routing_mode_descr">Calculer des itinéraires précis et sans surprise. Actuellement fonctionne sur des distances réduites et reste lent.</string>
|
||||
<string name="local_indexes_cat_av">Données audio/vidéo</string>
|
||||
|
||||
<string name="support_new_features_descr">Effectuer un don pour encourager l\'ajout de nouvelles fonctionnalités à l\'application.</string>
|
||||
|
@ -1115,7 +1115,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="plugin_distance_point_ele">altitude</string>
|
||||
<string name="gpx_file_name">Nom du fichier GPX</string>
|
||||
<string name="gpx_saved_sucessfully">Fichier GPX {0} enregistré</string>
|
||||
<string name="osmand_distance_planning_plugin_description">Ce greffon permet, depuis la carte, de créer un itinéraire soit un cliquant sur la carte, soit en ouvrant ou en modifiant un fichier GPX existant; ainsi que de mesurer la distance entre des points. L\'itinéraire peut être enregistré dans un fichier GPX qui peut lui-même être utilisé plus tard pour une navigation.</string>
|
||||
<string name="osmand_distance_planning_plugin_description">Ce greffon permet, depuis la carte, de créer un itinéraire soit un cliquant sur la carte, soit en ouvrant ou en modifiant un fichier GPX existant ainsi que de mesurer la distance entre des points. L\'itinéraire créé peut être enregistré dans un fichier GPX qui peut lui-même être utilisé ensuite pour une navigation.</string>
|
||||
<string name="osmand_distance_planning_plugin_name">Mesure de distance et Outil de planification</string>
|
||||
<string name="shared_string_do_not_show_again">Ne plus afficher</string>
|
||||
<string name="local_osm_changes_backup_successful">Fichier de modifications OSM %1$s généré avec succès</string>
|
||||
|
@ -1168,7 +1168,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="clear_intermediate_points">Supprimer les étapes intermédiaires</string>
|
||||
<string name="keep_intermediate_points">Conserver les étapes intermédiaires</string>
|
||||
<string name="local_index_tile_data_name">Données de tuile : %1$s</string>
|
||||
<string name="edit_tilesource_successfully">Le fournisseur de tuiles %1$s a été enregistré avec succès.</string>
|
||||
<string name="edit_tilesource_successfully">Le fournisseur de tuiles %1$s a été enregistré avec succès</string>
|
||||
<string name="edit_tilesource_elliptic_tile">Mercator elliptique</string>
|
||||
<string name="edit_tilesource_choose_existing">Sélectionner existant…</string>
|
||||
<string name="maps_define_edit">Définir/Éditer…</string>
|
||||
|
@ -1489,7 +1489,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="enable_sleep_mode">Démarrer l’exécution de la tâche de fond GPS ?</string>
|
||||
<string name="gps_wake_up_timer">Intervalle de réveil du GPS</string>
|
||||
<string name="sleep_mode_stop_dialog">Arrêter l’exécution de la tâche de fond GPS ?</string>
|
||||
<string name="map_preferred_locale_descr">Langue préférée des libellés sur la carte (en cas d\'indisponibilité affiche les noms anglais ou locaux)</string>
|
||||
<string name="map_preferred_locale_descr">Langue préférée des libellés sur la carte (en cas d\'indisponibilité affiche les noms anglais ou locaux).</string>
|
||||
<string name="map_preferred_locale">Langue préférée pour la carte</string>
|
||||
<string name="local_map_names">Noms locaux</string>
|
||||
<string name="lang_sw">swahili</string>
|
||||
|
@ -1630,7 +1630,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="map_update">Mise à jour disponible pour %1$s carte(s)</string>
|
||||
<string name="error_avoid_specific_road">Aucun itinéraire de contournement</string>
|
||||
<string name="use_opengl_render">Utiliser le rendu OpenGL</string>
|
||||
<string name="use_opengl_render_descr">Utiliser le rendu matériel accéléré OpenGL (peut ne pas fonctionner sur certains appareils).</string>
|
||||
<string name="use_opengl_render_descr">Utiliser le rendu matériel accéléré OpenGL (peut consommer plus de batterie et ne pas fonctionner sur les anciens appareils).</string>
|
||||
<string name="everything_up_to_date">Tous les fichiers sont à jour</string>
|
||||
<string name="shared_string_dismiss">Ignorer</string>
|
||||
<string name="no_internet_connection">Téléchargement impossible, veuillez vérifier votre connexion Internet.</string>
|
||||
|
@ -2080,7 +2080,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="use_dashboard_btn">Utiliser le tableau de bord</string>
|
||||
<string name="use_drawer_btn">Utiliser le menu</string>
|
||||
<string name="dashboard_or_drawer_title">Lancement du Tableau de bord ou du Menu</string>
|
||||
<string name="dashboard_or_drawer_description">Nouvelle option permettant de définir le comportement du bouton Menu : lancement du Tableau de bord ou du Menu statique ? Ce paramètre peut être modifié par la suite dans les préférences.</string>
|
||||
<string name="dashboard_or_drawer_description">Une option permettant de définir le comportement du bouton Menu : lancement du Tableau de bord ou du Menu statique ? Ce paramètre peut être modifié par la suite dans les préférences.</string>
|
||||
<string name="access_from_map_description">Le bouton Menu affiche le tableau de bord (plutôt que le menu)</string>
|
||||
<string name="access_from_map">Accès depuis la carte</string>
|
||||
<string name="please_specify_poi_type_only_from_list">Indiquez un type pour ce point d\'intérêt ou ignorez</string>
|
||||
|
@ -2188,9 +2188,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).</stri
|
|||
<string name="download_files_error_not_enough_space">Espace insuffisant !
|
||||
Cette opération requiert temporairement {3} Mo et {1} Mo seront utilisés de manière permanente.
|
||||
Actuellement seuls {2} Mo sont disponibles.</string>
|
||||
<string name="download_files_question_space_with_temp">Souhaitez-vous télécharger {0} fichier(s) ?
|
||||
Cette opération requiert temporairement {3} Mo et {1} Mo seront utilisés de manière permanente.
|
||||
Actuellement {2} Mo sont disponibles.</string>
|
||||
<string name="download_files_question_space_with_temp">Souhaitez-vous télécharger {0} fichier(s) ? Cette opération requiert temporairement {3} Mo et {1} Mo seront utilisés de manière permanente (actuellement l\'espace disponible est de {2} Mo)</string>
|
||||
|
||||
<string name="donations">Donations</string>
|
||||
<string name="number_of_recipients">Nombre de destinataires</string>
|
||||
|
@ -2219,7 +2217,7 @@ Actuellement {2} Mo sont disponibles.</string>
|
|||
<string name="shared_string_move_up">Déplacer ↑</string>
|
||||
<string name="shared_string_move_down">Déplacer ↓</string>
|
||||
<string name="finish_navigation">Terminer la navigation</string>
|
||||
<string name="storage_permission_restart_is_required">L\'application est maintenant autorisée à écrire sur le stockage externe. Redémarrez l\'application pour prendre en compte cette modification.</string>
|
||||
<string name="storage_permission_restart_is_required">L\'application est maintenant autorisée à écrire sur la mémoire externe. Redémarrez l\'application pour prendre en compte cette modification.</string>
|
||||
<string name="full_report">Rapport complet</string>
|
||||
<string name="open_street_map_login_and_pass">Identifiant et mot de passe OpenStreetMap</string>
|
||||
<string name="release_2_3">"022\\ OSM Live. Soutenez les contributeurs de carte et les développeurs pour obtenir des mises à jour horaires
|
||||
|
@ -2233,7 +2231,7 @@ Actuellement {2} Mo sont disponibles.</string>
|
|||
\n • Beaucoup d\'autres améliorations sur les menus contextuels comme la recherche d\'adresses
|
||||
\n
|
||||
\net bien plus encore…"</string>
|
||||
<string name="storage_directory_readonly_desc">L\'emplacement de stockage sélectionné est en lecture seule. L\'emplacement de stockage a donc été modifié pour utiliser la mémoire interne. Merci de sélectionner un dossier valide.</string>
|
||||
<string name="storage_directory_readonly_desc">Bascule vers la mémoire interne car l\'emplacement de stockage précédemment sélectionné est en lecture seule. Merci de sélectionner un dossier où l\'écriture est autorisée.</string>
|
||||
<string name="osm_user_stat">Modifications %1$s, classement %2$s, nombre total de modifications %3$s</string>
|
||||
<string name="osm_live_subscription">Abonnement à OsmAnd Live</string>
|
||||
<string name="no_map_markers_found">Ajoutez des marques depuis la carte</string>
|
||||
|
@ -2282,8 +2280,8 @@ Si vous appréciez OsmAnd et OSM et que vous souhaitez soutenir ces projets, c\'
|
|||
<string name="map_widget_magnetic_bearing">Cap magnétique</string>
|
||||
<string name="map_widget_bearing">Cap relatif</string>
|
||||
<string name="access_disable_offroute_recalc">Ne pas recalculer l\'itinéraire après l\'avoir quitté</string>
|
||||
<string name="access_disable_offroute_recalc_descr">Évite de calculer un nouvel itinéraire lorsque vous quittez l\'itinéraire prévu</string>
|
||||
<string name="access_disable_wrong_direction_recalc_descr">Évite de calculer un nouvel itinéraire lorsque vous faites demi-tour</string>
|
||||
<string name="access_disable_offroute_recalc_descr">Ne pas calculer de nouvel itinéraire lorsque vous quittez l\'itinéraire prévu.</string>
|
||||
<string name="access_disable_wrong_direction_recalc_descr">Ne pas calculer de nouvel itinéraire lorsque vous faites demi-tour.</string>
|
||||
<string name="access_disable_wrong_direction_recalc">Ne pas recalculer l\'itinéraire lors d\'un demi-tour</string>
|
||||
<string name="use_osm_live_routing_description">Activer la navigation OsmAnd Live</string>
|
||||
<string name="use_osm_live_routing">Navigation OsmAnd Live</string>
|
||||
|
@ -2617,7 +2615,7 @@ représentant la zone : %1$s x %2$s</string>
|
|||
<string name="right_side_navigation">Conduite à droite</string>
|
||||
<string name="driving_region_automatic">Automatique</string>
|
||||
<string name="do_not_send_anonymous_app_usage_desc">OsmAnd collecte des informations sur les écrans affichés lors de l\'utilisation de l\'application. Votre position n\'est jamais collectée, ni aucune des données saisies par l\'utilisateur dans l\'application comme les zones affichées, les recherches ou les téléchargements réalisés.</string>
|
||||
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) est une application de visualisation de cartes et de navigation utilisant les données gratuites couvrant le monde entier du projet OpenStreetMap (OSM). Profitez d\'un guidage vocal comme visuel; Découvrez des points d\'intérêt; Créez et gérez des traces GPX; Installez des greffons pour visualiser l\'altitude et les courbes de niveaux; Utilisez les modes Conduite, Piéton, Cycliste; Contribuez à l\'amélioration des cartes OSM et bien plus encore !</string>
|
||||
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) est une application de visualisation de cartes et de navigation utilisant les données gratuites couvrant le monde entier du projet OpenStreetMap (OSM). Profitez d\'un guidage vocal comme visuel; Découvrez des points d\'intérêt; Créez et gérez des traces GPX; Installez des greffons pour visualiser l\'altitude et les courbes de niveaux; Utilisez les modes Conduite, Piéton, Cycliste; Contribuez à l\'amélioration des cartes OSM et bien plus encore.</string>
|
||||
<string name="osmand_extended_description_part4">Le greffon OsmAnd ski maps permet de visualiser les pistes de ski avec leur niveau de difficulté et d\'autres informations utiles comme l\'emplacement et le type des remontées mécaniques.</string>
|
||||
<string name="osmand_extended_description_part7">Contribuez à OpenStreetMap (OSM)
|
||||
\n • Signalez des anomalies
|
||||
|
@ -2652,7 +2650,7 @@ représentant la zone : %1$s x %2$s</string>
|
|||
<string name="analyze_on_map">Analyser sur la carte</string>
|
||||
<string name="osmand_plus_extended_description_part1">OsmAnd+ (OpenStreetMap Automated Navigation and Directions) est une application de visualisation de cartes et de navigation utilisant les données gratuites couvrant le monde entier du projet OpenStreetMap. Bénéficiez d\'un guidage vocal comme visuel; découvrez des points d\'intérêt; créez et gérez des traces GPX; installez des greffons pour visualiser l\'altitude et les courbes de niveaux; utilisez les modes Automobile, Piéton, Cycliste; contribuez à l\'amélioration des cartes et bien plus encore !
|
||||
\n
|
||||
\nOsmAnd+ est la version payante de l\'application, en l\'achetant vous supportez le projet, financez le développement de nouvelles fonctionnalités, et recevez les dernières mises à jour.</string>
|
||||
\nOsmAnd+ est la version payante de l\'application, en l\'achetant vous supportez le projet, financez le développement de nouvelles fonctionnalités, et recevez les dernières mises à jour :</string>
|
||||
<string name="sea_depth_thanks">Merci d\'avoir acheté le greffon Lignes de sonde marines</string>
|
||||
<string name="index_item_depth_contours_osmand_ext">Lignes de sonde marines</string>
|
||||
<string name="index_item_depth_points_southern_hemisphere">Lignes de sonde marines pour l\'hémisphère sud</string>
|
||||
|
@ -2702,7 +2700,7 @@ représentant la zone : %1$s x %2$s</string>
|
|||
<string name="display_zoom_level">Niveau de zoom de l\'affichage : %1$s</string>
|
||||
<string name="srtm_color_scheme">Couleur du thème</string>
|
||||
<string name="show_from_zoom_level">Afficher à partir du niveau de zoom</string>
|
||||
<string name="route_is_too_long_v2">Cet itinéraire risque d\'être très long à calculer. Merci d\'ajouter des points de passage intermédiaires.</string>
|
||||
<string name="route_is_too_long_v2">Merci d\'ajouter des étapes si cet itinéraire n\'est pas calculé sous 10 minutes.</string>
|
||||
<string name="srtm_menu_download_descr">Téléchargez les \"courbes de niveaux\" de cette région.</string>
|
||||
<string name="shared_string_plugin">Greffon</string>
|
||||
<string name="srtm_purchase_header">Pour afficher les courbes de niveaux sur une carte, vous devez acheter puis installer le greffon \"Courbes de niveaux\"</string>
|
||||
|
@ -2869,14 +2867,14 @@ représentant la zone : %1$s x %2$s</string>
|
|||
\n• Afrique : ** (2)
|
||||
\n• Antarctique : * (1).
|
||||
\n
|
||||
\nDes cartes sont disponibles en téléchargement pour la majorité des pays du monde autorisant une navigation fiable dans la plupart des pays dont le vôtre !</string>
|
||||
\nDes cartes sont disponibles en téléchargement pour la majorité des pays du monde autorisant une navigation fiable dans la plupart des pays.</string>
|
||||
<string name="osmand_plus_extended_description_part2">Navigation :
|
||||
\n• Fonctionnement en ligne ou hors ligne (sans aucun frais de communication)
|
||||
\n• Guidage vocal pas à pas (voix enregistrées ou synthèse vocale)
|
||||
\n• En option : indication des voies, affichage du nom des rues et de l\'heure estimée d\'arrivée
|
||||
\n• Ajout d\'étapes sur votre itinéraire
|
||||
\n• Recalcule automatique de la route si vous vous écartez de l\'itinéraire
|
||||
\n• Recherchez des lieux par adresse, par type (par exemple : restaurant, hôtel, station-service, musée) ou par coordonnées géographiques.</string>
|
||||
\n• Recherchez des lieux par adresse, par type (par exemple : restaurant, hôtel, station-service, musée) ou par coordonnées géographiques</string>
|
||||
<string name="osmand_plus_extended_description_part3">Affichage de la carte :
|
||||
\n• Affichez votre position et votre orientation
|
||||
\n• Orientez la carte au choix selon la boussole ou selon la direction de votre déplacement
|
||||
|
@ -2977,7 +2975,7 @@ représentant la zone : %1$s x %2$s</string>
|
|||
<string name="coordinate_input_accuracy">%1$d chiffres</string>
|
||||
<string name="go_to_next_field">Champ suivant</string>
|
||||
<string name="appearance_on_the_map">Apparence sur la carte</string>
|
||||
<string name="add_track_to_markers_descr">Sélectionnez une trace afin d\'ajouter ses points de passage comme marques (seules les traces avec points de passage figurent dans la liste).</string>
|
||||
<string name="add_track_to_markers_descr">Les étapes peuvent être ajoutées comme marques en sélectionnant l\'une des traces possédant des étapes.</string>
|
||||
<string name="add_favourites_group_to_markers_descr">Sélectionnez une catégorie de favoris à ajouter aux marques.</string>
|
||||
<string name="track_waypoints">Points de passage</string>
|
||||
<string name="favourites_group">Catégorie de favoris</string>
|
||||
|
|
|
@ -101,6 +101,7 @@
|
|||
<dimen name="default_sub_text_size_small">12sp</dimen>
|
||||
<dimen name="welcome_header_text_size">27sp</dimen>
|
||||
<dimen name="text_button_text_size">22sp</dimen>
|
||||
<dimen name="travel_card_primary_text_size">22sp</dimen>
|
||||
|
||||
<dimen name="dialog_header_text_size">24sp</dimen>
|
||||
|
||||
|
|
|
@ -2952,4 +2952,11 @@
|
|||
<string name="purchase_dialog_title">Velg plan</string>
|
||||
<string name="dayly_map_updates">Kartoppdateringer: Hver dag</string>
|
||||
<string name="wikivoyage_offline">Wikivoyage er nede</string>
|
||||
<string name="travel_guide">Reiseguide</string>
|
||||
<string name="monthly_map_updates">Kartoppdateringer: <b>hver måned</b></string>
|
||||
<string name="daily_map_updates">Kartoppdateringer: <b>hver dag, hver time</b></string>
|
||||
<string name="in_app_purchase">Kjøp som finner sted inne i programmet</string>
|
||||
<string name="in_app_purchase_desc_ex">Når først kjøpt, vil det alltid være tilgjengelig for deg.</string>
|
||||
<string name="purchase_subscription_title">Abonner - %1$s</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -2909,4 +2909,6 @@
|
|||
<string name="monthly_map_updates">Обновления карт: <b>ежемесячные</b></string>
|
||||
<string name="daily_map_updates">Обновления карт: <b>ежедневные, ежечасные</b></string>
|
||||
<string name="in_app_purchase_desc_ex">После покупки этот план станет доступен для вас навсегда.</string>
|
||||
<string name="travel_guide">"Путеводитель "</string>
|
||||
<string name="travel_guide_description">Просматривайте путеводители Викигида по самым интересным местам на планете внутри Osmand без подключения к интернету.</string>
|
||||
</resources>
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
<attr name="wikivoyage_bottom_bar_bg_color" format="reference"/>
|
||||
<attr name="wikivoyage_bottom_bar_divider_color" format="reference"/>
|
||||
<attr name="wikivoyage_secondary_btn_bg_color" format="reference"/>
|
||||
<attr name="wikivoyage_primary_btn_text_color" format="reference"/>
|
||||
<attr name="wikivoyage_welcome_bg_color" format="reference"/>
|
||||
<attr name="wikivoyage_primary_text_color" format="reference"/>
|
||||
</declare-styleable>
|
||||
|
|
|
@ -421,6 +421,8 @@
|
|||
<color name="wikivoyage_bottom_bar_divider_dark">#2d3133</color>
|
||||
<color name="wikivoyage_secondary_btn_bg_light">#f0f0f0</color>
|
||||
<color name="wikivoyage_secondary_btn_bg_dark">#2d3133</color>
|
||||
<color name="wikivoyage_primary_btn_text_light">#ffffff</color>
|
||||
<color name="wikivoyage_primary_btn_text_dark">#cccccc</color>
|
||||
<color name="wikivoyage_welcome_bg_light">#ffffff</color>
|
||||
<color name="wikivoyage_welcome_bg_dark">#000000</color>
|
||||
<color name="wikivoyage_primary_text_light">#212121</color>
|
||||
|
|
|
@ -175,6 +175,7 @@
|
|||
<dimen name="default_sub_text_size_small">10sp</dimen>
|
||||
<dimen name="welcome_header_text_size">23sp</dimen>
|
||||
<dimen name="text_button_text_size">15sp</dimen>
|
||||
<dimen name="travel_card_primary_text_size">15sp</dimen>
|
||||
|
||||
<dimen name="default_split_segments_overview">13sp</dimen>
|
||||
<dimen name="default_split_segments_data">13sp</dimen>
|
||||
|
|
|
@ -2854,4 +2854,12 @@
|
|||
<string name="toast_empty_name_error">Location has no name</string>
|
||||
<string name="tunnel_warning">Tunnel ahead</string>
|
||||
<string name="show_tunnels">Tunnels</string>
|
||||
<string name="download_wikipedia_description">Download the Wikipedia articles for %1$s to read them offline.</string>
|
||||
<string name="download_wikipedia_label">Download Wikipedia data</string>
|
||||
<string name="open_in_browser_wiki">Open article online</string>
|
||||
<string name="open_in_browser_wiki_description">View this article in a browser.</string>
|
||||
<string name="download_wiki_region_placeholder">this region</string>
|
||||
<string name="wiki_article_search_text">Searching for the necessary wiki article</string>
|
||||
<string name="wiki_article_not_found">Article not found</string>
|
||||
<string name="how_to_open_wiki_title">How to open Wikipedia articles?</string>
|
||||
</resources>
|
||||
|
|
|
@ -210,6 +210,7 @@
|
|||
<item name="wikivoyage_bottom_bar_bg_color">@color/wikivoyage_bottom_bar_bg_light</item>
|
||||
<item name="wikivoyage_bottom_bar_divider_color">@color/wikivoyage_bottom_bar_divider_light</item>
|
||||
<item name="wikivoyage_secondary_btn_bg_color">@color/wikivoyage_secondary_btn_bg_light</item>
|
||||
<item name="wikivoyage_primary_btn_text_color">@color/wikivoyage_primary_btn_text_light</item>
|
||||
<item name="wikivoyage_welcome_bg_color">@color/wikivoyage_welcome_bg_light</item>
|
||||
<item name="wikivoyage_primary_text_color">@color/wikivoyage_primary_text_light</item>
|
||||
</style>
|
||||
|
@ -410,6 +411,7 @@
|
|||
<item name="wikivoyage_bottom_bar_bg_color">@color/wikivoyage_bottom_bar_bg_dark</item>
|
||||
<item name="wikivoyage_bottom_bar_divider_color">@color/wikivoyage_bottom_bar_divider_dark</item>
|
||||
<item name="wikivoyage_secondary_btn_bg_color">@color/wikivoyage_secondary_btn_bg_dark</item>
|
||||
<item name="wikivoyage_primary_btn_text_color">@color/wikivoyage_primary_btn_text_dark</item>
|
||||
<item name="wikivoyage_welcome_bg_color">@color/wikivoyage_welcome_bg_dark</item>
|
||||
<item name="wikivoyage_primary_text_color">@color/wikivoyage_primary_text_dark</item>
|
||||
</style>
|
||||
|
|
|
@ -851,6 +851,19 @@ public class ResourceManager {
|
|||
return map;
|
||||
}
|
||||
|
||||
public List<AmenityIndexRepositoryBinary> getWikiAmenityRepository(double lat, double lon) {
|
||||
List<AmenityIndexRepositoryBinary> repos = new ArrayList<>();
|
||||
for (String filename : amenityRepositories.keySet()) {
|
||||
if (filename.contains("_wiki")
|
||||
|| filename.contains(IndexConstants.BINARY_WIKI_MAP_INDEX_EXT)) {
|
||||
AmenityIndexRepository repository = amenityRepositories.get(filename);
|
||||
if (repository.checkContains(lat, lon) && repository instanceof AmenityIndexRepositoryBinary) {
|
||||
repos.add((AmenityIndexRepositoryBinary) repository);
|
||||
}
|
||||
}
|
||||
}
|
||||
return repos;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////// Working with address ///////////////////////////////////////////
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package net.osmand.plus.wikivoyage;
|
||||
|
||||
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
@ -12,29 +16,42 @@ import android.util.Log;
|
|||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
|
||||
import net.osmand.binary.BinaryMapDataObject;
|
||||
import net.osmand.data.Amenity;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.plus.GPXUtilities;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.mapcontextmenu.WikipediaDialogFragment;
|
||||
import net.osmand.plus.resources.AmenityIndexRepositoryBinary;
|
||||
import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment;
|
||||
import net.osmand.plus.wikivoyage.article.WikivoyageArticleWikiLinkFragment;
|
||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||
import net.osmand.plus.wikivoyage.explore.WikivoyageExploreDialogFragment;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static android.support.v4.app.FragmentManager.POP_BACK_STACK_INCLUSIVE;
|
||||
|
||||
|
||||
interface RegionCallback {
|
||||
void onRegionFound(String s);
|
||||
}
|
||||
/**
|
||||
* Custom WebView client to handle the internal links.
|
||||
*/
|
||||
|
||||
public class WikivoyageWebViewClient extends WebViewClient {
|
||||
public class WikivoyageWebViewClient extends WebViewClient implements RegionCallback {
|
||||
|
||||
private static final String TAG = WikivoyageWebViewClient.class.getSimpleName();
|
||||
|
||||
|
@ -43,11 +60,16 @@ public class WikivoyageWebViewClient extends WebViewClient {
|
|||
private Context context;
|
||||
private TravelArticle article;
|
||||
private boolean nightMode;
|
||||
private String regionName;
|
||||
|
||||
private static final String PREFIX_GEO = "geo:";
|
||||
private static final String PAGE_PREFIX_HTTP = "http://";
|
||||
private static final String PAGE_PREFIX_HTTPS = "https://";
|
||||
private static final String WEB_DOMAIN = ".wikivoyage.com/wiki/";
|
||||
private static final String WIKIVOAYAGE_DOMAIN = ".wikivoyage.com/wiki/";
|
||||
private static final String WIKI_DOMAIN = ".wikipedia.org/wiki/";
|
||||
private FetchWikiRegion fetchRegionTask;
|
||||
private WikiArticleSearchTask articleSearchTask;
|
||||
|
||||
|
||||
public WikivoyageWebViewClient(FragmentActivity context, FragmentManager fm, boolean nightMode) {
|
||||
app = (OsmandApplication) context.getApplication();
|
||||
|
@ -58,24 +80,21 @@ public class WikivoyageWebViewClient extends WebViewClient {
|
|||
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
if (url.contains(WEB_DOMAIN)) {
|
||||
String lang = url.substring(url.startsWith(PAGE_PREFIX_HTTPS) ? PAGE_PREFIX_HTTPS.length() : 0, url.indexOf("."));
|
||||
String articleName = url.replace(PAGE_PREFIX_HTTPS + lang + WEB_DOMAIN, "")
|
||||
.replaceAll("_", " ");
|
||||
try {
|
||||
articleName = URLDecoder.decode(articleName, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.w(TAG, e.getMessage(), e);
|
||||
}
|
||||
if (url.contains(WIKIVOAYAGE_DOMAIN)) {
|
||||
String lang = getLang(url);
|
||||
String articleName = getArticleNameFromUrl(url, lang);
|
||||
long articleId = app.getTravelDbHelper().getArticleId(articleName, lang);
|
||||
if (articleId != 0) {
|
||||
WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, articleId, lang);
|
||||
} else {
|
||||
warnAboutExternalLoad(url);
|
||||
warnAboutExternalLoad(url, context, nightMode);
|
||||
}
|
||||
return true;
|
||||
} else if (url.contains(WIKI_DOMAIN)) {
|
||||
String articleName = getArticleNameFromUrl(url, getLang(url));
|
||||
getWikiArticle(articleName, url);
|
||||
} else if (url.startsWith(PAGE_PREFIX_HTTP) || url.startsWith(PAGE_PREFIX_HTTPS)) {
|
||||
warnAboutExternalLoad(url);
|
||||
warnAboutExternalLoad(url, context, nightMode);
|
||||
} else if (url.startsWith(PREFIX_GEO)) {
|
||||
if (article != null) {
|
||||
List<GPXUtilities.WptPt> points = article.getGpxFile().getPoints();
|
||||
|
@ -120,7 +139,27 @@ public class WikivoyageWebViewClient extends WebViewClient {
|
|||
return true;
|
||||
}
|
||||
|
||||
private void warnAboutExternalLoad(final String url) {
|
||||
@NonNull
|
||||
private String getLang(String url) {
|
||||
return url.substring(url.startsWith(PAGE_PREFIX_HTTPS) ? PAGE_PREFIX_HTTPS.length() : 0, url.indexOf("."));
|
||||
}
|
||||
|
||||
private String getArticleNameFromUrl(String url, String lang) {
|
||||
String domain = url.contains(WIKIVOAYAGE_DOMAIN) ? WIKIVOAYAGE_DOMAIN : WIKI_DOMAIN;
|
||||
String articleName = url.replace(PAGE_PREFIX_HTTPS + lang + domain, "")
|
||||
.replaceAll("_", " ");
|
||||
try {
|
||||
articleName = URLDecoder.decode(articleName, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.w(TAG, e.getMessage(), e);
|
||||
}
|
||||
return articleName;
|
||||
}
|
||||
|
||||
private static void warnAboutExternalLoad(final String url, final Context context, final boolean nightMode) {
|
||||
if (context == null) {
|
||||
return;
|
||||
}
|
||||
new AlertDialog.Builder(context)
|
||||
.setTitle(url)
|
||||
.setMessage(R.string.online_webpage_warning)
|
||||
|
@ -136,5 +175,160 @@ public class WikivoyageWebViewClient extends WebViewClient {
|
|||
|
||||
public void setArticle(TravelArticle article) {
|
||||
this.article = article;
|
||||
if (this.article != null && app != null) {
|
||||
fetchRegionTask = new FetchWikiRegion(this, app.getRegions(), article.getLat(), article.getLon());
|
||||
fetchRegionTask.execute();
|
||||
}
|
||||
}
|
||||
|
||||
private void getWikiArticle(String name, String url) {
|
||||
List<AmenityIndexRepositoryBinary> indexes = app.getResourceManager()
|
||||
.getWikiAmenityRepository(article.getLat(), article.getLon());
|
||||
if (indexes.isEmpty()) {
|
||||
WikivoyageArticleWikiLinkFragment.showInstance(fragmentManager, regionName == null ?
|
||||
"" : regionName, url);
|
||||
} else {
|
||||
articleSearchTask = new WikiArticleSearchTask(name, indexes, (MapActivity) context, nightMode, url);
|
||||
articleSearchTask.execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegionFound(String s) {
|
||||
regionName = s;
|
||||
}
|
||||
|
||||
public void stopRunningAsyncTasks() {
|
||||
if (articleSearchTask != null && articleSearchTask.getStatus() == AsyncTask.Status.RUNNING) {
|
||||
articleSearchTask.cancel(false);
|
||||
}
|
||||
if (fetchRegionTask != null && fetchRegionTask.getStatus() == AsyncTask.Status.RUNNING) {
|
||||
fetchRegionTask.cancel(false);
|
||||
}
|
||||
}
|
||||
|
||||
private static class FetchWikiRegion extends AsyncTask<Void, Void, String> {
|
||||
|
||||
private RegionCallback callback;
|
||||
private OsmandRegions osmandRegions;
|
||||
private double lat;
|
||||
private double lon;
|
||||
|
||||
FetchWikiRegion(RegionCallback callback, OsmandRegions osmandRegions, double lat, double lon) {
|
||||
this.callback = callback;
|
||||
this.osmandRegions = osmandRegions;
|
||||
this.lat = lat;
|
||||
this.lon = lon;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doInBackground(Void... voids) {
|
||||
if (osmandRegions != null) {
|
||||
int x31 = MapUtils.get31TileNumberX(lon);
|
||||
int y31 = MapUtils.get31TileNumberY(lat);
|
||||
List<BinaryMapDataObject> dataObjects = null;
|
||||
try {
|
||||
if (isCancelled()) {
|
||||
return null;
|
||||
}
|
||||
dataObjects = osmandRegions.query(x31, y31);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (dataObjects != null) {
|
||||
for (BinaryMapDataObject b : dataObjects) {
|
||||
if (isCancelled()) {
|
||||
break;
|
||||
}
|
||||
if(osmandRegions.contain(b, x31, y31)) {
|
||||
return osmandRegions.getLocaleName(osmandRegions.getDownloadName(b), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled(){
|
||||
callback = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(String result) {
|
||||
if (callback != null) {
|
||||
callback.onRegionFound(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class WikiArticleSearchTask extends AsyncTask<Void, Void, List<Amenity>> {
|
||||
private ProgressDialog dialog;
|
||||
private String name;
|
||||
private List<AmenityIndexRepositoryBinary> indexes;
|
||||
private WeakReference<MapActivity> weakContext;
|
||||
private boolean isNightMode;
|
||||
private String url;
|
||||
|
||||
WikiArticleSearchTask(String articleName, List<AmenityIndexRepositoryBinary> indexes,
|
||||
MapActivity context, boolean isNightMode, String url) {
|
||||
name = articleName;
|
||||
this.indexes = indexes;
|
||||
weakContext = new WeakReference<>(context);
|
||||
dialog = createProgressDialog();
|
||||
this.isNightMode = isNightMode;
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
if (dialog != null) {
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Amenity> doInBackground(Void... voids) {
|
||||
List<Amenity> found = new ArrayList<>();
|
||||
for (AmenityIndexRepositoryBinary repo : indexes) {
|
||||
if (isCancelled()) {
|
||||
break;
|
||||
}
|
||||
found.addAll(repo.searchAmenitiesByName(0, 0, 0, 0,
|
||||
Integer.MAX_VALUE, Integer.MAX_VALUE, name, null));
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled(){
|
||||
dialog = null;
|
||||
indexes.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<Amenity> found) {
|
||||
MapActivity activity = weakContext.get();
|
||||
if (activity != null && !activity.isActivityDestroyed() && dialog != null) {
|
||||
dialog.dismiss();
|
||||
if (!found.isEmpty()) {
|
||||
WikipediaDialogFragment.showInstance(activity, found.get(0));
|
||||
} else {
|
||||
warnAboutExternalLoad(url, weakContext.get(), isNightMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ProgressDialog createProgressDialog() {
|
||||
MapActivity activity = weakContext.get();
|
||||
if (activity != null && !activity.isActivityDestroyed()) {
|
||||
ProgressDialog dialog = new ProgressDialog(activity);
|
||||
dialog.setCancelable(false);
|
||||
dialog.setMessage(activity.getString(R.string.wiki_article_search_text));
|
||||
return dialog;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -247,6 +247,14 @@ public class WikivoyageArticleDialogFragment extends WikivoyageBaseDialogFragmen
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
if (webViewClient != null) {
|
||||
webViewClient.stopRunningAsyncTasks();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
package net.osmand.plus.wikivoyage.article;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.view.View;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerHalfItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleDividerItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||
import net.osmand.plus.mapcontextmenu.WikipediaDialogFragment;
|
||||
|
||||
public class WikivoyageArticleWikiLinkFragment extends MenuBottomSheetDialogFragment {
|
||||
|
||||
public static final String TAG = WikivoyageArticleWikiLinkFragment.class.getSimpleName();
|
||||
|
||||
public static final String ARTICLE_URL_KEY = "article_url";
|
||||
private static final String WIKI_REGION = "region";
|
||||
|
||||
private String articleUrl;
|
||||
private String wikiRegion;
|
||||
|
||||
@Override
|
||||
public void createMenuItems(Bundle savedInstanceState) {
|
||||
Context ctx = getContext();
|
||||
if (ctx == null) {
|
||||
return;
|
||||
}
|
||||
if (savedInstanceState != null) {
|
||||
articleUrl = savedInstanceState.getString(ARTICLE_URL_KEY);
|
||||
wikiRegion = savedInstanceState.getString(WIKI_REGION);
|
||||
} else {
|
||||
Bundle args = getArguments();
|
||||
if (args != null) {
|
||||
articleUrl = args.getString(ARTICLE_URL_KEY);
|
||||
wikiRegion = args.getString(WIKI_REGION);
|
||||
}
|
||||
}
|
||||
items.add(new TitleItem(getString(R.string.how_to_open_wiki_title)));
|
||||
|
||||
BaseBottomSheetItem wikiLinkitem = new TitleItem.Builder().setTitle(articleUrl)
|
||||
.setTitleColorId(nightMode
|
||||
? R.color.wikivoyage_contents_parent_icon_dark : R.color.wikivoyage_contents_parent_icon_light)
|
||||
.setLayoutId(R.layout.bottom_sheet_item_title)
|
||||
.create();
|
||||
items.add(wikiLinkitem);
|
||||
items.add(new TitleDividerItem(getContext()));
|
||||
|
||||
Drawable downloadIcon = getIcon(R.drawable.ic_action_import, nightMode
|
||||
? R.color.wikivoyage_contents_parent_icon_dark : R.color.wikivoyage_contents_parent_icon_light);
|
||||
|
||||
Drawable viewOnlineIcon = getIcon(R.drawable.ic_world_globe_dark, nightMode
|
||||
? R.color.wikivoyage_contents_parent_icon_dark : R.color.wikivoyage_contents_parent_icon_light);
|
||||
|
||||
BaseBottomSheetItem wikiDownloadItem = new BottomSheetItemWithDescription.Builder()
|
||||
.setDescription(getString(R.string.download_wikipedia_description, wikiRegion.isEmpty() ?
|
||||
getString(R.string.download_wiki_region_placeholder) : wikiRegion))
|
||||
.setIcon(downloadIcon)
|
||||
.setTitle(getString(R.string.download_wikipedia_label))
|
||||
.setLayoutId(R.layout.bottom_sheet_item_with_descr_56dp)
|
||||
.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
MapActivity mapActivity = (MapActivity) getActivity();
|
||||
Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization()
|
||||
.getDownloadActivity());
|
||||
newIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
mapActivity.startActivity(newIntent);
|
||||
dismiss();
|
||||
}
|
||||
})
|
||||
.create();
|
||||
items.add(wikiDownloadItem);
|
||||
|
||||
items.add(new DividerHalfItem(getContext()));
|
||||
|
||||
BaseBottomSheetItem wikiArticleOnlineItem = new BottomSheetItemWithDescription.Builder()
|
||||
.setDescription(getString(R.string.open_in_browser_wiki_description))
|
||||
.setIcon(viewOnlineIcon)
|
||||
.setTitle(getString(R.string.open_in_browser_wiki))
|
||||
.setLayoutId(R.layout.bottom_sheet_item_with_descr_56dp)
|
||||
.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
WikipediaDialogFragment.showFullArticle(getContext(), Uri.parse(articleUrl), nightMode);
|
||||
dismiss();
|
||||
}
|
||||
})
|
||||
.create();
|
||||
items.add(wikiArticleOnlineItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putString(ARTICLE_URL_KEY, articleUrl);
|
||||
outState.putString(WIKI_REGION, wikiRegion);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean useScrollableItemsContainer() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getBgColorId() {
|
||||
return nightMode ? R.color.wikivoyage_bottom_bar_bg_dark : R.color.bg_color_light;
|
||||
}
|
||||
|
||||
public static boolean showInstance(@NonNull FragmentManager fm,
|
||||
@NonNull String region,
|
||||
@NonNull String articleUrl) {
|
||||
try {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARTICLE_URL_KEY, articleUrl);
|
||||
args.putString(WIKI_REGION, region);
|
||||
WikivoyageArticleWikiLinkFragment fragment = new WikivoyageArticleWikiLinkFragment();
|
||||
|
||||
fragment.setArguments(args);
|
||||
fragment.show(fm, TAG);
|
||||
return true;
|
||||
} catch (RuntimeException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -91,14 +91,27 @@ public class TravelArticle {
|
|||
return null;
|
||||
}
|
||||
|
||||
int firstParagraphStart = content.indexOf("<p>");
|
||||
int firstParagraphEnd = content.indexOf("</p>");
|
||||
String pOpened = "<p>";
|
||||
String pClosed = "</p>";
|
||||
|
||||
int firstParagraphStart = content.indexOf(pOpened);
|
||||
int firstParagraphEnd = content.indexOf(pClosed);
|
||||
if (firstParagraphStart == -1 || firstParagraphEnd == -1) {
|
||||
return null;
|
||||
}
|
||||
int pClosedLength = pClosed.length();
|
||||
String firstParagraphHtml = content.substring(firstParagraphStart, firstParagraphEnd + pClosedLength);
|
||||
while (firstParagraphHtml.length() == (pOpened.length() + pClosedLength)
|
||||
&& (firstParagraphEnd + pClosedLength) < content.length()) {
|
||||
firstParagraphStart = content.indexOf(pOpened, firstParagraphEnd);
|
||||
firstParagraphEnd = firstParagraphStart == -1 ? -1 : content.indexOf(pClosed, firstParagraphStart);
|
||||
if (firstParagraphStart != -1 && firstParagraphEnd != -1) {
|
||||
firstParagraphHtml = content.substring(firstParagraphStart, firstParagraphEnd + pClosedLength);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 4 is the length of </p> tag
|
||||
String firstParagraphHtml = content.substring(firstParagraphStart, firstParagraphEnd + 4);
|
||||
String firstParagraphText = Html.fromHtml(firstParagraphHtml).toString().trim();
|
||||
String[] phrases = firstParagraphText.split("\\. ");
|
||||
|
||||
|
|
Loading…
Reference in a new issue