This commit is contained in:
Dmitriy Prodchenko 2018-04-24 12:33:42 +03:00
commit 53c4ea4142
21 changed files with 1292 additions and 667 deletions

View 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>

View 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>

View 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>

View 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>

View file

@ -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>

View file

@ -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

View file

@ -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 lexé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 lexé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
@ -2650,9 +2648,9 @@ représentant la zone : %1$s x %2$s</string>
\n • Enregistrez vos itinéraires en arrière-plan (pendant que votre appareil est en veille).
\nOsmAnd est une application open source très active. Toutes les contributions sont bienvenues que ce soit en signalant des bugs, en participant à la traduction ou en développant de nouvelles fonctionnalités. Grâce aux interactions entre les utilisateurs et les développeurs l\'application est en évolution permanente. Le projet est bien sûr ouvert à toute contribution financière pour accélérer encore son développement.</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>
<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>
<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>
@ -2855,28 +2853,28 @@ représentant la zone : %1$s x %2$s</string>
<string name="show_direction">Indication de distance</string>
<string name="sort_by">Trier par</string>
<string name="osmand_extended_description_part8">OsmAnd est un projet open source très actif. Tout le monde peut contribuer à l\'application en signalant des bugs, en améliorant les traductions ou en développant de nouvelles fonctionnalités. Les nombreux échanges entre développeurs et utilisateurs permettent d\'améliorer régulièrement OsmAnd et les contributions financières permettent de développer de nouvelles fonctionnalités.
\n
\nCouverture et qualité approximative des cartes :
\n• Europe de l\'Ouest : **** (4)
\n• Europe de l\'Est : *** (3)
\n• Russie : *** (3)
\n• Amérique du Nord : *** (3)
\n• Amérique du Sud : ** (2)
\n• Asie : ** (2)
\n• Japon et Corée : *** (3)
\n• Moyen-Orient : ** (2)
\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>
<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>
<string name="osmand_extended_description_part8">OsmAnd est un projet open source très actif. Tout le monde peut contribuer à l\'application en signalant des bugs, en améliorant les traductions ou en développant de nouvelles fonctionnalités. Les nombreux échanges entre développeurs et utilisateurs permettent d\'améliorer régulièrement OsmAnd et les contributions financières permettent de développer de nouvelles fonctionnalités.
\n
\nCouverture et qualité approximative des cartes :
\n• Europe de l\'Ouest : **** (4)
\n• Europe de l\'Est : *** (3)
\n• Russie : *** (3)
\n• Amérique du Nord : *** (3)
\n• Amérique du Sud : ** (2)
\n• Asie : ** (2)
\n• Japon et Corée : *** (3)
\n• Moyen-Orient : ** (2)
\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.</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>
<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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -850,7 +850,20 @@ 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 ///////////////////////////////////////////

View file

@ -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;
}
}
}

View file

@ -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();

View file

@ -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;
}
}
}

View file

@ -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("\\. ");