This commit is contained in:
Alexey Kulish 2016-01-20 21:45:31 +03:00
commit 6887700288
71 changed files with 971 additions and 466 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -122,7 +122,6 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="right"
android:entries="@array/update_frequencies_array"
android:paddingLeft="0dp"/>
</LinearLayout>
@ -148,7 +147,6 @@
style="@style/OsmandLightTheme.Spinner"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:entries="@array/update_times_of_day"
android:gravity="right"
android:paddingLeft="0dp"/>
</LinearLayout>

View file

@ -51,12 +51,13 @@
android:layout_height="60dp"
android:src="@drawable/ic_world_globe_dark"/>
<Spinner
android:id="@+id/regionReportsSpinner"
android:layout_gravity="fill_horizontal|fill_vertical"
android:layout_marginLeft="8dp"
android:layout_marginRight="42dp"
android:gravity="center_vertical"/>
<include
android:id="@+id/reportsButton"
layout="@layout/reports_for_spinner_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"/>
<View
android:layout_height="1dp"

View file

@ -0,0 +1,39 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="net.osmand.plus.liveupdates.CountriesSearchSelectionFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:id="@+id/clearButton"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_action_remove_dark"/>
<EditText
android:id="@+id/searchEditText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:lines="1"
android:background="@null"
android:layout_marginLeft="16dp"
tools:text="Search request"/>
</LinearLayout>
<include layout="@layout/shadow_bottom"/>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

View file

@ -52,6 +52,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="7dp"
android:ellipsize="end"
android:lines="1"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"
tools:text="Last Update: 1 Dec 2015"/>

View file

@ -2088,11 +2088,12 @@
<string name="daily">Штодзённа</string>
<string name="weekly">Штотыднёва</string>
<string name="morning">Раніца</string>
<string name="Night">Ноч</string>
<string name="night">Ноч</string>
<string name="shared_string_type">Тып</string>
<string name="starting_point">Пачатковы пункт</string>
<string name="shared_string_undo_all">ВЯРНУЦЬ УСЁ</string>
<string name="rec_split_storage_size">Памер сховішча</string>
<string name="select_month_and_country">Выберыце месяц і краіну</string>
<string name="shared_string_select">Абраць</string>
<string name="shared_string_remove">Выдаліць</string>
</resources>

View file

@ -2039,7 +2039,7 @@
<string name="daily">Всеки ден</string>
<string name="weekly">Всяка седмица</string>
<string name="morning">Сутрин</string>
<string name="Night">През нощта</string>
<string name="night">През нощта</string>
<string name="switch_start_finish">Размяна на началната с крайна точка</string>
<string name="rendering_attr_hideIcons_name">Скриване на POI иконите</string>
<string name="item_removed">Изтрито</string>

View file

@ -1906,7 +1906,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu
<string name="daily">Cada dia</string>
<string name="weekly">Cada setmana</string>
<string name="morning">Matí</string>
<string name="Night">Nit</string>
<string name="night">Nit</string>
<string name="switch_start_finish">Intercanvi entre punts origen i destinació</string>
<string name="rendering_attr_hideIcons_name">Amaga les icones dels PDI</string>
<string name="item_removed">Element suprimit</string>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources>
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="switch_to_raster_map_to_see">Vektorové mapy toto místo neobsahují. Mapová data můžete stáhnout v Nastaveních (Spravovat mapové soubory), nebo se přepněte na online mapy.</string>
<string name="send_files_to_osm">Nahrát GPX soubory do OSM?</string>
@ -1646,7 +1647,7 @@
<string name="gps_network_not_enabled">Služba zjištění polohy není zapnuta. Chcete ji aktivovat?</string>
<string name="disable_recording_once_app_killed">Zabránit samostatnému logování</string>
<string name="disable_recording_once_app_killed_descrp">Pozastaví záznam GPX trasy pokud je aplikace ukončena (přes nedávné aplikace). (OsmAnd indikátor zmizí ze stavového řádku Androidu.)</string>
<string name="download_live_updates">Živé aktualizace</string>
<string name="download_live_updates">Okamžité aktualizace</string>
<string name="no_updates_available">Nejsou dostupné žádné aktualizace</string>
<string name="traffic_warning_hazard">Nebezpečí</string>
<string name="rendering_value_boldOutline_name">Tučný obrys</string>
@ -1910,6 +1911,11 @@
<string name="daily">Každý den</string>
<string name="weekly">Jednou týdně</string>
<string name="morning">Ráno</string>
<string name="Night">V noci</string>
<string name="night">V noci</string>
<string name="select_month_and_country">Vyberte měsíc a krajinu</string>
</resources>
<string name="shared_string_remove">Odstranit</string>
<string name="rendering_attr_hideIcons_name">Skrýt ikonu POI</string>
<string name="shared_string_select">Zvolit</string>
<string name="road_blocked">Cesta je blokovaná</string>
<string name="switch_start_finish">Zaměnit počáteční a cílový bod</string>
</resources>

View file

@ -2626,8 +2626,8 @@
<string name="poi_seamark_dyke">Sømærke dige</string>
<string name="poi_dolphin">Delfin</string>
<string name="poi_forestry_compartment">Vejskilt: skovbrug afdeling</string>
<string name="poi_forestry_allotment">Vejskilt: skovbrug tildeling</string>
<string name="poi_forestry_compartment">Vejviser: skovbrug</string>
<string name="poi_forestry_allotment">Vejviser: skovbrug tildeling</string>
<string name="poi_inscription_n">Inskription: N</string>
<string name="poi_inscription_nw">Inskription: NV</string>
<string name="poi_inscription_w">Inskription: V</string>
@ -2649,4 +2649,14 @@
<string name="poi_fair_trade_no">Fairtrade: nej</string>
<string name="poi_fair_trade_only">Kun fairtrade-produkter</string>
<string name="poi_ice_hockey">Ishockey</string>
<string name="poi_bandy">Bandy</string>
<string name="poi_protected_area">Beskyttet område</string>
<string name="poi_protection_title">Beskyttet titel</string>
<string name="poi_protection_object_historic">Beskyttet objekt: historisk</string>
<string name="poi_protection_object_nature">Beskyttet objekt: natur</string>
<string name="poi_protection_object_habitat">Beskyttet objekt: levested</string>
<string name="poi_protection_object_water">Beskyttet objekt: vand</string>
</resources>

View file

@ -139,7 +139,7 @@
<string name="monitoring_control_start">GPX</string>
<string name="route_descr_lat_lon">Lat %1$.3f, Long %2$.3f</string>
<string name="intermediate_point">Destination %1$s</string>
<string name="intermediate_point">Mellemliggende destination %1$s</string>
<string name="snap_to_road_descr">Hold position til vejen under navigation</string>
<string name="snap_to_road">Fastgør til vejen</string>
<string name="osmand_short_description_80_chars">Globale mobilkort &amp; navigation til offline og online OSM kort</string>
@ -225,7 +225,7 @@
<string name="osmand_parking_warning">Advarsel</string>
<string name="osmand_parking_warning_text">Påmindelse om at afhente bil blev tidligere tilføjet til kalender. Den forblive der, indtil den slettes manuelt.</string>
<string name="osmand_parking_time_limit_title">Indstil tidsgrænsen for parkering</string>
<string name="osmand_parking_delete_confirm">Skal placeringen af den parkerede bil slettes?</string>
<string name="osmand_parking_delete_confirm">Slet parkeringsmarkør?</string>
<string name="osmand_parking_delete">Slet P-plads markør</string>
<string name="osmand_parking_choose_type">Vælg parkeringstype</string>
<string name="osmand_parking_lim_text">Tidsbegrænset</string>
@ -892,7 +892,7 @@
<string name="osb_comment_dialog_message">Meddelelse</string>
<string name="favourites_remove_dialog_success">Favoritpunkt {0} blev slettet.</string>
<string name="favourites_remove_dialog_msg">Fjern favoritpunkt \'%s\'?</string>
<string name="favourites_remove_dialog_msg">Slet favoritpunkt \'%s\'?</string>
<string name="favourites_context_menu_delete">Slet</string>
<string name="favourites_context_menu_edit">Rediger</string>
<string name="amenity_type_emergency">Nødsituation</string>
@ -1068,7 +1068,7 @@
<string name="search_address">Søg adresse</string>
<string name="choose_building">Vælg bygning</string>
<string name="choose_street">Vælg gade</string>
<string name="choose_city">Vælg by</string>
<string name="choose_city">Vælg by eller postnummer</string>
<string name="ChooseCountry">Vælg land</string>
<string name="show_view_angle">Vis synsretning</string>
<string name="map_view_3d_descr">Aktiver 3D-visning af kortet</string>
@ -2203,26 +2203,26 @@
<string name="update_time">Opdateringstidspunkt</string>
<string name="updates_size">Opdateringer: %s</string>
<string name="updates_size">Opdateringsstørrelse</string>
<string name="last_map_change">Sidste kortændring: %s</string>
<string name="rec_split">Optager opdel</string>
<string name="rec_split_title">Brug optager opdel</string>
<string name="rec_split_desc">Omskriv klip når den brugte plads overstiger opbevaring størrelse</string>
<string name="rec_split">Optagelse automatisk opdelt</string>
<string name="rec_split_title">"Brug automatisk opdeling"</string>
<string name="rec_split_desc">Overskriv klip når lagerpladsen er fuld</string>
<string name="rec_split_clip_length">Kliplængde</string>
<string name="rec_split_clip_length_desc">Længden af hver optaget klip bliver ikke længere end det angivne tidsinterval</string>
<string name="rec_split_storage_size">Lagerplads</string>
<string name="rec_split_storage_size_desc">Mængden af lagerplads, der kan være optaget af alle optagne klip</string>
<string name="rec_split_storage_size_desc">Lagerplads, der kan bruges af alle optagne klip</string>
<string name="hourly">Time</string>
<string name="daily">Daglig</string>
<string name="weekly">Ugentlig</string>
<string name="morning">Morgen</string>
<string name="Night">Aften</string>
<string name="night">Aften</string>
<string name="shared_string_not_selected">Ikke markeret</string>
<string name="select_month_and_country">Vælg måned og land</string>
<string name="shared_string_type">Type</string>
<string name="starting_point">Udgangspunkt</string>
<string name="item_removed">Emne slettet</string>
<string name="item_removed">Emne fjernet</string>
<string name="n_items_removed">Emner slettet</string>
<string name="shared_string_undo_all">FORTRYD ALLE</string>
<string name="rendering_attr_hideIcons_name">Skjul IP ikoner</string>
@ -2231,7 +2231,8 @@
<string name="number_of_edits">Antal redigeringer</string>
<string name="reports_for">Rapport for:</string>
<string name="shared_string_select">Vælg</string>
<string name="clear_updates_proposition_message">Du kan fjerne de overførte opdateringer og vende tilbage til den oprindelige kort udgave</string>
<string name="clear_updates_proposition_message">Man kan fjerne de hentede opdateringer og vende tilbage til det oprindelige kort</string>
<string name="add_time_span">Tilføj tidsinterval</string>
<string name="road_blocked">Vej er spærret</string>
<string name="road_blocked">Spærret vej</string>
<string name="shared_string_remove">Fjern</string>
</resources>

View file

@ -2575,4 +2575,13 @@
<string name="poi_fair_trade_no">Fairer Handel: Nein</string>
<string name="poi_fair_trade_only">Nur fairer Handel Produkte</string>
</resources>
<string name="poi_ice_hockey">Eishockey</string>
<string name="poi_bandy">Bandy</string>
<string name="poi_protected_area">Geschütztes Gebiet</string>
<string name="poi_protection_object_historic">Geschütztes Objekt: historisch</string>
<string name="poi_protection_object_nature">Geschütztes Objekt: Natur</string>
<string name="poi_protection_object_water">Geschütztes Objekt: Wasser</string>
<string name="poi_protection_object_habitat">Geschütztes Objekt: Lebensraum</string>
</resources>

View file

@ -2,7 +2,7 @@
<resources>
<string name="shared_string_remove">Entfernen</string>
<string name="item_removed">Eintrag entfernt</string>
<string name="n_items_deleted">Einträge entfernt</string>
<string name="n_items_removed">Einträge entfernt</string>
<string name="no_address_found">Keine Adresse bekannt</string>
<string name="shared_string_near">Nähe</string>
<string name="regions">Regionen</string>
@ -770,7 +770,7 @@
<string name="search_address">Adresse suchen</string>
<string name="choose_building">Hausnummer wählen</string>
<string name="choose_street">Straße wählen</string>
<string name="choose_city">Ort wählen</string>
<string name="choose_city">Ort oder Postleitzahl wählen</string>
<string name="ChooseCountry">Land wählen</string>
<string name="show_view_angle">Blickrichtung einblenden</string>
@ -834,7 +834,7 @@
<string name="add_favorite_dialog_favourite_added_template">Favorit Punkt \'\'{0}\'\' wurde erfolgreich hinzugefügt.</string>
<string name="favourites_context_menu_edit">Favorit bearbeiten</string>
<string name="favourites_context_menu_delete">Favorit löschen</string>
<string name="favourites_remove_dialog_msg">Wollen Sie den Punkt \'%s\' wirklich löschen?</string>
<string name="favourites_remove_dialog_msg">Wollen Sie den Favoritenpunkt \'%s\' wirklich löschen?</string>
<string name="favourites_remove_dialog_success">Der Punkt {0} wurde erfolgreich gelöscht.</string>
<string name="osb_comment_dialog_message">Nachricht</string>
@ -1019,15 +1019,15 @@
<string name="av_widget_action">Standard-Widget-Aktion</string>
<string name="av_video_format_descr">Wählen Sie ein Video-Ausgabeformat</string>
<string name="av_video_format">Video-Ausgabeformat</string>
<string name="av_use_external_recorder_descr">Externen System-Recorder für Video-Aufnahmen verwenden</string>
<string name="av_use_external_recorder">System-Recorder</string>
<string name="av_use_external_recorder_descr">System Video App für Videos verwenden</string>
<string name="av_use_external_recorder">System Video App nutzen</string>
<string name="av_settings_descr">Konfigurieren von Audio- und Video-Einstellungen</string>
<string name="shared_string_control_stop">Stopp</string>
<string name="av_settings">Audio/Video-Einstellungen</string>
<string name="shared_string_control_start">Starten</string>
<string name="av_def_action_picture">Foto aufnehmen</string>
<string name="av_use_external_camera_descr">Externe Systemkamera für Fotoaufnahmen verwenden</string>
<string name="av_use_external_camera">Systemkamera</string>
<string name="av_use_external_camera_descr">System Kamera App für Fotos verwenden</string>
<string name="av_use_external_camera">System Kamera App nutzen</string>
<string name="av_def_action_choose">Bei Anfrage auswählen</string>
<string name="dropbox_plugin_description">Das Dropbox-Plugin ermöglicht Ihnen eine Synchronisation von Tracks und Audio/Video-Notizen mit Ihrem Dropbox-Konto.</string>
<string name="dropbox_plugin_name">Dropbox-Plugin</string>
@ -1992,7 +1992,7 @@
<string name="daily">Täglich</string>
<string name="weekly">Wöchentlich</string>
<string name="morning">Morgens</string>
<string name="Night">Nachts</string>
<string name="night">Nachts</string>
<string name="shared_string_not_selected">Nicht ausgewählt</string>
<string name="select_month_and_country">Wähle Monat und Land</string>
@ -2007,4 +2007,5 @@
<string name="add_time_span">Zeitspanne hinzufügen</string>
<string name="road_blocked">Straße blockiert</string>
<string name="shared_string_select">Auswählen</string>
<string name="clear_updates_proposition_message">Kartenaktualisierungen können gelöscht werden um zur orginal Karte zurückzukehren</string>
</resources>

View file

@ -2012,7 +2012,7 @@
<string name="poi_office_camping">Oficina del campamento</string>
<string name="poi_model_aerodrome">Aeródromo a escala</string>
<string name="poi_guide">Oficina del guía</string>
<string name="poi_quango">ONG casi autónoma</string>
<string name="poi_quango">ONG cuasi-autónoma</string>
<string name="poi_consulting">Oficina de consultoría</string>
<string name="poi_cooperative">Oficina de cooperativa</string>
<string name="poi_office_forestry">Oficina forestal</string>
@ -2621,4 +2621,14 @@
<string name="poi_fair_trade_no">Comercio justo: No</string>
<string name="poi_fair_trade_only">Sólo productos de comercio justo</string>
<string name="poi_ice_hockey">Hockey sobre hielo</string>
<string name="poi_bandy">Bandy</string>
<string name="poi_protected_area">Área protegida</string>
<string name="poi_protection_title">Título de protección</string>
<string name="poi_protection_object_historic">Protección de objeto: Histórico</string>
<string name="poi_protection_object_nature">Protección de objeto: Naturaleza</string>
<string name="poi_protection_object_habitat">Protección de objeto: Hábitat</string>
<string name="poi_protection_object_water">Protección de objeto: Agua</string>
</resources>

View file

@ -748,7 +748,7 @@
<string name="recording_is_recorded">Grabando audio/video. Para pararlo, pulsa el control AV.</string>
<string name="recording_playing">Reproduciendo audio de la grabación indicada.\n%1$s</string>
<string name="recording_open_external_player">Abrir reproductor externo</string>
<string name="recording_delete_confirm">¿Quiere quitar esta grabación?</string>
<string name="recording_delete_confirm">¿Quiere borrar esta grabación?</string>
<string name="recording_unavailable">no disponible</string>
<string name="recording_context_menu_arecord">Grabar nota de audio</string>
<string name="recording_context_menu_vrecord">Grabar nota de video</string>
@ -797,7 +797,7 @@
<string name="no_route">Sin ruta</string>
<string name="delete_target_point">Quitar el destino</string>
<string name="target_point">Destino %1$s</string>
<string name="intermediate_point">Destino %1$s</string>
<string name="intermediate_point">Destino intermedio %1$s</string>
<string name="context_menu_item_last_intermediate_point">Añadir como último destino intermedio</string>
<string name="context_menu_item_first_intermediate_point">Añadir como primer destino intermedio</string>
<string name="add_as_last_destination_point">Añadir como último destino intermedio</string>
@ -1018,7 +1018,7 @@
<string name="osmand_parking_warning">Advertencia</string>
<string name="osmand_parking_warning_text">La notificación para recoger su auto fue previamente añadida al calendario. Permanecerá allí hasta que la borre manualmente.</string>
<string name="osmand_parking_time_limit_title">Definir el límite de tiempo del estacionamiento</string>
<string name="osmand_parking_delete_confirm">¿Quitar ubicación del auto estacionado?</string>
<string name="osmand_parking_delete_confirm">¿Borrar el marcador de ubicación del estacionamiento?</string>
<string name="osmand_parking_delete">Quitar marcador de estacionamiento</string>
<string name="osmand_parking_choose_type">Elija el tipo de estacionamiento</string>
<string name="osmand_parking_lim_text">Tiempo limitado</string>
@ -1620,7 +1620,7 @@
<string name="search_address">Buscar dirección</string>
<string name="choose_building">Elija el edificio</string>
<string name="choose_street">Elija la calle</string>
<string name="choose_city">Elija la ciudad</string>
<string name="choose_city">Elija la ciudad o el código postal</string>
<string name="ChooseCountry">Elija el país</string>
<string name="show_view_angle">Mostrar dirección de visualización</string>
<string name="map_view_3d_descr">Active la vista 3D del mapa</string>
@ -1671,7 +1671,7 @@
<string name="add_favorite_dialog_favourite_added_template">El punto favorito \'\'{0}\'\' se añadió correctamente.</string>
<string name="favourites_context_menu_edit">Editar favorito</string>
<string name="favourites_context_menu_delete">Borrar favorito</string>
<string name="favourites_remove_dialog_msg">¿Quitar el favorito \'%s\'?</string>
<string name="favourites_remove_dialog_msg">¿Borrar el favorito \'%s\'?</string>
<string name="favourites_remove_dialog_success">El punto favorito {0} se borró correctamente.</string>
@ -2036,13 +2036,13 @@
<string name="daily">Diario</string>
<string name="weekly">Semanal</string>
<string name="morning">Por la mañana</string>
<string name="Night">Por la noche</string>
<string name="night">Por la noche</string>
<string name="shared_string_not_selected">No seleccionado</string>
<string name="select_month_and_country">Elige mes y país</string>
<string name="shared_string_type">Tipo</string>
<string name="starting_point">Punto de partida</string>
<string name="item_removed">Elemento borrado</string>
<string name="item_removed">Elemento quitado</string>
<string name="n_items_removed">elementos borrados</string>
<string name="shared_string_undo_all">DESHACER TODO</string>
<string name="rendering_attr_hideIcons_name">Ocultar iconos de PDI</string>
@ -2054,4 +2054,5 @@
<string name="add_time_span">Añadir lapso de tiempo</string>
<string name="road_blocked">Camino bloqueado</string>
<string name="shared_string_select">Elegir</string>
<string name="shared_string_remove">Quitar</string>
</resources>

View file

@ -2616,4 +2616,8 @@
<string name="poi_atm_no">Cajero automático: no</string>
<string name="poi_atm_yes">Cajero automático: sí</string>
</resources>
<string name="poi_fair_trade_yes">Comercio justo: sí</string>
<string name="poi_fair_trade_no">Comercio justo: no</string>
<string name="poi_fair_trade_only">Sólo productos de comercio justo</string>
</resources>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources>
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="layer_map_appearance">Configurar pantalla</string>
<string name="show_lanes">Mostrar carriles</string>
@ -579,7 +580,7 @@
<string name="add_favorite_dialog_favourite_added_template">El favorito \'\'{0}\'\' se añadió correctamente.</string>
<string name="favourites_context_menu_edit">Editar favorito</string>
<string name="favourites_context_menu_delete">Borrar favorito</string>
<string name="favourites_remove_dialog_msg">¿Quitar el favorito \'%s\'?</string>
<string name="favourites_remove_dialog_msg">¿Eliminar el punto favorito \'%s\'?</string>
<string name="favourites_remove_dialog_success">El favorito {0} se borró correctamente.</string>
<string name="osb_comment_dialog_message">Mensaje</string>
<string name="osb_comment_dialog_author">Nombre del autor</string>
@ -732,7 +733,7 @@
<string name="osmand_parking_warning">Advertencia</string>
<string name="osmand_parking_warning_text">La notificación para recoger su automóvil, fue previamente añadida a su calendario. Permanecerá allí hasta que la borre manualmente.</string>
<string name="osmand_parking_time_limit_title">Establecer el límite de tiempo del aparcamiento</string>
<string name="osmand_parking_delete_confirm">¿Quiere eliminar la ubicación del automóvil aparcado?</string>
<string name="osmand_parking_delete_confirm">¿Quiere eliminar el marcador de posición de aparcamiento?</string>
<string name="osmand_parking_delete">Eliminar un marcador de aparcamiento</string>
<string name="osmand_parking_choose_type">Elija el tipo de aparcamiento</string>
<string name="osmand_parking_lim_text">Tiempo limitado</string>
@ -847,7 +848,7 @@
<string name="map_widget_monitoring_services">Servicios de registro</string>
<string name="no_route">Sin ruta</string>
<string name="delete_target_point">Quitar destino</string>
<string name="intermediate_point">Destino %1$s</string>
<string name="intermediate_point">Destino intermedio %1$s</string>
<string name="gps_not_available">Active el GPS en los ajustes</string>
<string name="map_widget_show_destination_arrow">Mostrar dirección de destino</string>
<string name="enable_plugin_monitoring_services">Activa el complemento de grabación de viajes, para que use el servicio de registro de posición (registro GPX, seguimiento en línea)</string>
@ -891,7 +892,7 @@
<string name="map_widget_audionotes">Notas de audio</string>
<string name="recording_is_recorded">Grabando un audio/vídeo. Para pararlo, pulse el control AV.</string>
<string name="recording_open_external_player">Abrir reproductor externo</string>
<string name="recording_delete_confirm">¿Quiere quitar esta grabación?</string>
<string name="recording_delete_confirm">¿Quiere eliminar esta grabación?</string>
<string name="recording_unavailable">no disponible</string>
<string name="recording_context_menu_arecord">Grabar nota de audio</string>
<string name="recording_context_menu_vrecord">Grabar nota de vídeo</string>
@ -2034,13 +2035,23 @@
<string name="daily">Cada día</string>
<string name="weekly">Cada semana</string>
<string name="morning">Por la mañana</string>
<string name="Night">Por la noche</string>
<string name="night">Por la noche</string>
<string name="shared_string_not_selected">No seleccionado</string>
<string name="select_month_and_country">Seleccione mes y país</string>
<string name="shared_string_type">Tipo</string>
<string name="starting_point">Punto de partida</string>
<string name="item_removed">Elemento eliminado</string>
<string name="item_removed">Elemento quitado</string>
<string name="n_items_removed">elementos eliminados</string>
<string name="shared_string_undo_all">DESHACER TODO</string>
</resources>
<string name="shared_string_remove">Quitar</string>
<string name="clear_updates_proposition_message">Puede quitar las actualizaciones descargadas y volver a la edición original del mapa</string>
<string name="add_time_span">Añadir intervalo de tiempo</string>
<string name="road_blocked">Carretera bloqueada</string>
<string name="shared_string_select">Seleccionar</string>
<string name="switch_start_finish">Invertir inicio y destino</string>
<string name="rendering_attr_hideIcons_name">Ocultar iconos de PDI</string>
<string name="number_of_contributors">Número de colaboradores</string>
<string name="number_of_edits">Número de ediciones</string>
<string name="reports_for">Informe para:</string>
</resources>

View file

@ -1948,4 +1948,8 @@
<string name="poi_historic_civilization_ancient_greek">Civilisation : Grèce antique</string>
<string name="poi_payment_pro100_no">Cartes PRO100 non acceptées</string>
<string name="poi_payment_pro100_yes">Cartes PRO100 acceptées</string>
<string name="poi_fair_trade_no">Commerce équitable : non</string>
<string name="poi_fair_trade_only">Uniquement des produits issus du commerce équitable</string>
<string name="poi_fair_trade_yes">Commerce équitable : Oui</string>
</resources>

View file

@ -2096,7 +2096,7 @@
<string name="daily">Quotidien</string>
<string name="weekly">Hebdomadaire</string>
<string name="morning">Matin</string>
<string name="Night">Nuit</string>
<string name="night">Nuit</string>
<string name="select_month_and_country">Choisissez un mois et un pays</string>
<string name="item_removed">Élément supprimé</string>
@ -2117,4 +2117,8 @@
<string name="number_of_edits">Nombre de modifications</string>
<string name="reports_for">Signaler pour :</string>
<string name="shared_string_select">Sélectionner</string>
<string name="shared_string_remove">Supprimer</string>
<string name="clear_updates_proposition_message">Vous pouvez supprimer les mises à jour et retrouver la carte précédente</string>
<string name="road_blocked">Route barrée</string>
<string name="add_time_span">Ajouter un laps de temps</string>
</resources>

View file

@ -2019,6 +2019,6 @@
<string name="daily">Cada día</string>
<string name="weekly">Cada semana</string>
<string name="morning">Mañá</string>
<string name="Night">Noite</string>
<string name="night">Noite</string>
<string name="select_month_and_country">Seleccione o mes e o país</string>
</resources>

View file

@ -2075,6 +2075,6 @@
<string name="daily">Naponta</string>
<string name="weekly">Hetente</string>
<string name="morning">Reggel</string>
<string name="Night">Este</string>
<string name="night">Este</string>
<string name="select_month_and_country">Hónap és ország kiválasztása</string>
</resources>

View file

@ -526,7 +526,7 @@
<string name="search_address">Cerca indirizzo</string>
<string name="choose_building">Scegli numero civico</string>
<string name="choose_street">Scegli la strada</string>
<string name="choose_city">Scegli la città</string>
<string name="choose_city">Scegli la città o il cap</string>
<string name="ChooseCountry">Scegli la nazione</string>
@ -777,7 +777,7 @@
<string name="osmand_parking_warning">Attenzione</string>
<string name="osmand_parking_warning_text">Precedentemente è stata aggiunta al tuo calendario la notifica di recuperare l\'auto. Ci rimarrà finché non la eliminerai manualmente.</string>
<string name="osmand_parking_time_limit_title">Imposta il limite d\'orario del parcheggio</string>
<string name="osmand_parking_delete_confirm">Vuoi rimuovere la posizione dell\'auto parcheggiata?</string>
<string name="osmand_parking_delete_confirm">Vuoi cancellare il marcatore della posizione del parcheggio dell\'auto?</string>
<string name="osmand_parking_delete">Elimina un marcatore di parcheggio</string>
<string name="osmand_parking_choose_type">Scegli il tipo di parcheggio</string>
<string name="osmand_parking_lim_text">A tempo</string>
@ -931,7 +931,7 @@
<string name="map_widget_monitoring_services">Servizi di registrazione</string>
<string name="no_route">Nessun percorso</string>
<string name="delete_target_point">Rimuovi la destinazione</string>
<string name="intermediate_point">Destinazione %1$s</string>
<string name="intermediate_point">Destinazione intermedia %1$s</string>
<string name="gps_not_available">Attiva il GPS nelle impostazioni</string>
<string name="map_widget_show_destination_arrow">Visualizza la direzione della destinazione</string>
<string name="non_optimal_route_calculation">Calcola un percorso, eventualmente anche non ottimale, su lunghe distanze</string>
@ -1000,7 +1000,7 @@
<string name="recording_is_recorded">L\'audio/video sta per essere registrato. Per fermarlo seleziona il widget AV.</string>
<string name="recording_playing">L\'audio della registrazione specificata sta per essere riprodotto.\n%1$s</string>
<string name="recording_open_external_player">Apri riproduttore esterno</string>
<string name="recording_delete_confirm">Vuoi rimuovere questa registrazione?</string>
<string name="recording_delete_confirm">Vuoi cancellare questa registrazione?</string>
<string name="recording_unavailable">non disponibile</string>
<string name="recording_context_menu_arecord">Prendi una nota audio</string>
@ -2129,13 +2129,13 @@
<string name="daily">Giornaliero</string>
<string name="weekly">Settimanale</string>
<string name="morning">Mattina</string>
<string name="Night">Notte</string>
<string name="night">Notte</string>
<string name="shared_string_not_selected">Non selezionato</string>
<string name="shared_string_type">Tipo</string>
<string name="starting_point">Punto di partenza</string>
<string name="select_month_and_country">Scegli il mese e lo stato</string>
<string name="item_removed">Oggetto cancellato</string>
<string name="item_removed">Oggetto rimosso</string>
<string name="n_items_removed">oggetti cancellati</string>
<string name="shared_string_undo_all">Annulla tutto</string>
<string name="switch_start_finish">Inverti punti di partenza e destinazione</string>
@ -2144,4 +2144,8 @@
<string name="number_of_contributors">Numero di contributori</string>
<string name="shared_string_select">Scegli</string>
<string name="reports_for">Rapporto per:</string>
</resources>
<string name="shared_string_remove">Rimuovi</string>
<string name="clear_updates_proposition_message">Puoi eliminare gli aggiornamenti scaricati e avere la mappa originale</string>
<string name="road_blocked">Strada bloccata</string>
<string name="add_time_span">Aggiungi durata</string>
</resources>

View file

@ -66,7 +66,7 @@
<string name="available_maps">Nexeyen kû hane</string>
<string name="rendering_category_details">Berfireh</string>
<string name="rendering_category_hide">Veşera</string>
<string name="Night">şev</string>
<string name="night">şev</string>
<string name="morning">Beyanî</string>
<string name="daily">Rojane</string>
<string name="weekly">Hefteyî</string>

View file

@ -2091,5 +2091,5 @@
<string name="daily">Kasdien</string>
<string name="weekly">Kas savaitę</string>
<string name="morning">Rytą</string>
<string name="Night">Naktį</string>
<string name="night">Naktį</string>
</resources>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources>
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="rendering_attr_roadColors_description">Velg fargeskjema for veier:</string>
<string name="rendering_attr_roadColors_name">Veifargeskjema</string>
<string name="map_widget_show_destination_arrow">Vis retning til målet</string>
@ -7,7 +8,7 @@
<string name="no_route">Ingen rute</string>
<string name="delete_target_point">Fjern reisemål</string>
<string name="target_point">Reisemål %1$s</string>
<string name="intermediate_point">Reisemål %1$s</string>
<string name="intermediate_point">Mellomliggende reisemål %1$s</string>
<string name="context_menu_item_last_intermediate_point">Legg til som siste mellomliggende reisemål</string>
<string name="context_menu_item_first_intermediate_point">Legg til som første mellomliggende reisemål</string>
<string name="add_as_last_destination_point">Legg til som siste mellomliggende reisemål</string>
@ -546,7 +547,7 @@
<string name="add_favorite_dialog_favourite_added_template">Favorittpunkt \'\'{0}\'\' ble vellykket lagt til.</string>
<string name="favourites_context_menu_edit">Rediger favoritt</string>
<string name="favourites_context_menu_delete">Slett favoritt</string>
<string name="favourites_remove_dialog_msg">Fjerne favorittpunkt \'%s\'?</string>
<string name="favourites_remove_dialog_msg">Slette favorittpunkt \'%s\'?</string>
<string name="favourites_remove_dialog_success">Favorittpunkt {0} ble vellykket slettet.</string>
<string name="osb_comment_dialog_message">Melding</string>
@ -1490,4 +1491,11 @@
<string name="update_time">Oppdateringstidspunkt</string>
<string name="updates_size">Oppdateringsstørrelse</string>
<string name="update_now">Oppdater nå</string>
</resources>
<string name="shared_string_remove">Fjern</string>
<string name="clear_updates_proposition_message">Du kan fjerne nedlastede oppdateringer og gå tilbake til den originale kartutgaven</string>
<string name="road_blocked">Vei blokkert</string>
<string name="shared_string_select">Velg</string>
<string name="rendering_attr_hideIcons_name">Skjul interessepunktikoner</string>
<string name="shared_string_type">Type</string>
<string name="starting_point">Startpunkt</string>
</resources>

View file

@ -2154,7 +2154,7 @@
<string name="daily">Elke dag</string>
<string name="weekly">Elke week</string>
<string name="morning">\'s ochtends</string>
<string name="Night">\'s avonds</string>
<string name="night">\'s avonds</string>
<string name="shared_string_not_selected">Niet geselecteerd</string>
<string name="select_month_and_country">Kies maand en kaart</string>

View file

@ -2080,6 +2080,6 @@
<string name="daily">Dzienny</string>
<string name="weekly">Tygodniowo</string>
<string name="morning">Rano</string>
<string name="Night">Noc</string>
<string name="night">Noc</string>
<string name="select_month_and_country">Wybierz miesiąc i kraj</string>
</resources>

View file

@ -2612,4 +2612,18 @@
<string name="poi_firepit">Pira</string>
<string name="poi_street_cabinet">Gabinete de rua</string>
<string name="poi_fair_trade_yes">Comércio justo: sim</string>
<string name="poi_fair_trade_no">Comércio justo: não</string>
<string name="poi_fair_trade_only">Somento produtos de comércio justo</string>
<string name="poi_ice_hockey">Hóquei no gelo</string>
<string name="poi_bandy">Bandy</string>
<string name="poi_protected_area">Área protegida</string>
<string name="poi_protection_title">Tipo de proteção</string>
<string name="poi_protection_object_historic">Objeto de proteção: histórico</string>
<string name="poi_protection_object_nature">Objeto de proteção: natureza</string>
<string name="poi_protection_object_habitat">Objeto de proteção: habitat</string>
<string name="poi_protection_object_water">Objeto de proteção: água</string>
</resources>

View file

@ -775,7 +775,7 @@
<string name="recording_is_recorded">Áudio/vídeo está sendo gravado. Para parar toque o widget AV.</string>
<string name="recording_playing">Reproduzindo áudio da gravação especificada.\n%1$s</string>
<string name="recording_open_external_player">Abrir reprodutor externo</string>
<string name="recording_delete_confirm">Quer apagar esta gravação?</string>
<string name="recording_delete_confirm">Você quer excluir esta gravação?</string>
<string name="recording_unavailable">Indisponível</string>
<string name="recording_context_menu_arecord">Tomar uma nota de áudio</string>
@ -803,7 +803,7 @@
<string name="rendering_attr_noAdminboundaries_description">Esconder limites regionais (níveis administrativos 5-9)</string>
<string name="target_point">Destino %1$s</string>
<string name="intermediate_point">Destino %1$s</string>
<string name="intermediate_point">Destino intermediário %1$s</string>
<string name="map_widget_intermediate_distance">Destino intermediário</string>
<string name="use_compass_navigation">Usar bússola</string>
<string name="avoid_motorway">Evitar auto-estradas</string>
@ -950,7 +950,7 @@
<string name="osmand_parking_warning">Alerta</string>
<string name="osmand_parking_warning_text">Notificação para buscar seu carro foi adicionada ao seu calendário. Ela permanecerá até que você a apague manualmente.</string>
<string name="osmand_parking_time_limit_title">Definir o limite de tempo de estacionamento</string>
<string name="osmand_parking_delete_confirm">Remover o local de estacionamento?</string>
<string name="osmand_parking_delete_confirm">Você quer apagar o marcardor da posição de estacionamento?</string>
<string name="osmand_parking_delete">Apagar um marcador de estacionamento</string>
<string name="osmand_parking_choose_type">Escolher o tipo de estacionamento</string>
<string name="osmand_parking_no_lim_text">Tempo ilimitado</string>
@ -1563,7 +1563,7 @@
<string name="search_address">Pesquisar endereço</string>
<string name="choose_building">Escolher número</string>
<string name="choose_street">Escolher rua</string>
<string name="choose_city">Escolher cidade</string>
<string name="choose_city">Escolher cidade ou código postal</string>
<string name="ChooseCountry">Escolher país</string>
<string name="show_view_angle">Mostrar ângulo de visão</string>
<string name="map_view_3d_descr">Ativar a visualização em 3D do mapa</string>
@ -1983,12 +1983,12 @@
<string name="daily">Diariamente</string>
<string name="weekly">Semanalmente</string>
<string name="morning">Pela manhã</string>
<string name="Night">À noite</string>
<string name="night">À noite</string>
<string name="shared_string_not_selected">Nada selecionado</string>
<string name="select_month_and_country">Selecione o mês e o país</string>
<string name="shared_string_type">Tipo</string>
<string name="starting_point">Ponto de partida</string>
<string name="item_removed">Item apagado</string>
<string name="item_removed">Item excluído</string>
<string name="n_items_removed">itens apagados</string>
<string name="shared_string_undo_all">DESFAZER TUDO</string>
<string name="rendering_attr_hideIcons_name">Ocultar ícones dos POIs</string>
@ -1996,4 +1996,9 @@
<string name="number_of_contributors">Número de contribuidores</string>
<string name="number_of_edits">Número de edições</string>
<string name="reports_for">Relatório para:</string>
</resources>
<string name="shared_string_remove">Excluir</string>
<string name="clear_updates_proposition_message">Você pode excluir atualizações baixadas e voltar para a versão original do mapa</string>
<string name="add_time_span">Adicionar intervalo de tempo</string>
<string name="road_blocked">Estrada bloqueada</string>
<string name="shared_string_select">Selecionar</string>
</resources>

View file

@ -1917,7 +1917,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="available_maps">Mapas disponíveis</string>
<string name="select_voice_provider">Escolher orientação por voz</string>
<string name="select_voice_provider_descr">Escolher ou fazer download de \'orientação por voz\' para a sua linguagem</string>
<string name="Night">Noite</string>
<string name="night">Noite</string>
<string name="dashboard_or_drawer_description">Há uma nova opção para controlar principalmente o aplicativo através do painel flexível (Dashboard) ou um menu estático. A sua escolha pode sempre ser alterada nas configurações do painel.</string>
<string name="dashboard_or_drawer_title">Dashboard ou menu de controle</string>
<string name="update">Actualizar em cada</string>

View file

@ -420,7 +420,6 @@
<string name="poi_golf">Гольф</string>
<string name="poi_gymnastics">Гимнастика</string>
<string name="poi_handball">Гандбол</string>
<string name="poi_hockey">Хоккей</string>
<string name="poi_horse_racing">Лошадиные скачки</string>
<string name="poi_horse_riding">Езда на лошадях</string>
<string name="poi_ice_skating">Катание на коньках</string>
@ -802,7 +801,7 @@
<string name="poi_accomodation">Проживание</string>
<string name="poi_training">Учебный центр</string>
<string name="poi_quarter">Квартал</string>
<string name="poi_field_hockey">Хоккейная площадка</string>
<string name="poi_field_hockey">Хоккей на траве</string>
<string name="poi_rest_area">Зона отдыха</string>
<string name="poi_reservoir">Резервуар</string>
@ -2594,4 +2593,14 @@
<string name="poi_fair_trade_no">Справедливая торговля (Fairtrade): no</string>
<string name="poi_fair_trade_only">Только товары с маркировкой Справедливой торговли (Fairtrade)</string>
<string name="poi_ice_hockey">Хоккей с шайбой</string>
<string name="poi_bandy">Хоккей с мячом</string>
<string name="poi_protected_area">Охраняемая природная/историческая территория</string>
<string name="poi_protection_title">Тип охраняемого объекта</string>
<string name="poi_protection_object_historic">Объект охраны: исторический</string>
<string name="poi_protection_object_nature">Объект охраны: природа</string>
<string name="poi_protection_object_habitat">Объект охраны: среда обитания</string>
<string name="poi_protection_object_water">Объект охраны: вода</string>
</resources>

View file

@ -1894,6 +1894,12 @@
<string name="update_time">Время обновления</string>
<string name="number_of_contributors">Количество участников</string>
<string name="number_of_edits">Количество правок</string>
<string name="Night">Ночь</string>
<string name="night">Ночь</string>
<string name="morning">Утро</string>
<string name="rec_split_storage_size_desc">Объём памяти, который может быть занят всеми видеоклипами</string>
<string name="rec_split_clip_length">Продолжительность видеоклипа</string>
<string name="rec_split_clip_length_desc">Продолжительность каждого записанного клипа не будет больше выбранного значения</string>
<string name="rec_split">Разбиение на клипы</string>
<string name="rec_split_title">Использовать разбиение на клипы</string>
<string name="rec_split_desc">Циклическая перезапись клипов при превышении заданного объема хранилища</string>
</resources>

View file

@ -2071,7 +2071,7 @@
<string name="daily">Cada die</string>
<string name="weekly">Cada chida</string>
<string name="morning">Mangianu</string>
<string name="Night">Note</string>
<string name="night">Note</string>
<string name="updates_size">Mannària agiornamentos</string>
<string name="select_month_and_country">Ischerta mese e istadu</string>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources>
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="recording_context_menu_show">Zobraziť</string>
<string name="recording_photo_description">Fotografia %1$s %2$s</string>
@ -231,7 +232,7 @@
<string name="map_version_changed_info">Na serveri sú mapové súbory nekompatibilné s Vašou aktuálnou verziou aplikácie. Na ich stiahnutie a použitie, prosím, aktualizujte aplikáciu na novšiu verziu.</string>
<string name="poi_filter_nominatim">Online Nominatim</string>
<string name="search_position_current_location_search">Hľadám umiestnenie…</string>
<string name="search_position_current_location_found">Umiestnenie [Nájdené]</string>
<string name="search_position_current_location_found">Moja poloha (nájdená)</string>
<string name="search_position_address">Adresa…</string>
<string name="search_position_favorites">Obľúbené miesta…</string>
<string name="search_position_undefined">Neurčené</string>
@ -634,7 +635,7 @@
<string name="search_address">Hľadať adresu</string>
<string name="choose_building">Vybrať popisné číslo</string>
<string name="choose_street">Vybrať ulicu</string>
<string name="choose_city">Vybrať mesto</string>
<string name="choose_city">Vybrať mesto alebo PSČ</string>
<string name="ChooseCountry">Vybrať krajinu</string>
<string name="show_view_angle">Zobraziť uhol pohľadu</string>
<string name="map_view_3d_descr">Zapnutie 3D zobrazenia mapy</string>
@ -684,7 +685,7 @@
<string name="add_favorite_dialog_favourite_added_template">Obľúbený bod "{0}" bol úspešne pridaný.</string>
<string name="favourites_context_menu_edit">Upraviť obľúbený bod</string>
<string name="favourites_context_menu_delete">Vymazať obľúbený bod</string>
<string name="favourites_remove_dialog_msg">Odstrániť obľúbený bod "%s"?</string>
<string name="favourites_remove_dialog_msg">Zmazať obľúbený bod \'%s\'?</string>
<string name="favourites_remove_dialog_success">Obľúbený bod {0} bol úspešne zmazaný.</string>
@ -761,7 +762,7 @@
<string name="osmand_parking_warning">Upozornenie</string>
<string name="osmand_parking_warning_text">Predošle bola pridaná do kalendára pripomienka na vyzdvihnutie Vášho auta. Zostane tam, pokiaľ ju ručne nezmažete.</string>
<string name="osmand_parking_time_limit_title">Nastavte časový limit parkovania</string>
<string name="osmand_parking_delete_confirm">Chcete odstrániť umiestnenie zaparkovaného auta?</string>
<string name="osmand_parking_delete_confirm">Chcete zmazať značku parkovacieho miesta?</string>
<string name="osmand_parking_delete">Zmazať parkovaciu značku</string>
<string name="osmand_parking_choose_type">Zvoľte typ parkovania</string>
<string name="osmand_parking_lim_text">Časovo obmedzené</string>
@ -1912,12 +1913,22 @@
<string name="daily">Každý deň</string>
<string name="weekly">Raz za týždeň</string>
<string name="morning">Ráno</string>
<string name="Night">V noci</string>
<string name="night">V noci</string>
<string name="shared_string_type">Typ</string>
<string name="starting_point">Východzí bod</string>
<string name="select_month_and_country">Zvoľte mesiac a krajinu</string>
<string name="item_removed">Položka vymaza</string>
<string name="item_removed">Položka odstráne</string>
<string name="n_items_removed">položiek vymazaných</string>
<string name="shared_string_undo_all">VŠETKO VRÁTIŤ SPÄŤ</string>
</resources>
<string name="shared_string_remove">Odstrániť</string>
<string name="clear_updates_proposition_message">Môžete odstrániť stiahnuté aktualizácie a vrátiť sa späť k pôvodnej verzii mapy</string>
<string name="add_time_span">Pridať časový rozsah</string>
<string name="road_blocked">Cesta zablokovaná</string>
<string name="shared_string_select">Vybrať</string>
<string name="switch_start_finish">Vymeniť východzí a cieľový bod</string>
<string name="rendering_attr_hideIcons_name">Skryť ikony bodov záujmu (POI)</string>
<string name="number_of_contributors">Počet prispievateľov</string>
<string name="number_of_edits">Počet zmien</string>
<string name="reports_for">Výkaz pre:</string>
</resources>

View file

@ -47,7 +47,7 @@
<string name="favourites_context_menu_edit">Uredi priljubljeno točko</string>
<string name="favourites_context_menu_delete">Izbriši priljubljeno točko</string>
<string name="add_favorite_dialog_favourite_added_template">Točka \'\'{0}\'\' je uspešno dodana med priljubljene.</string>
<string name="favourites_remove_dialog_msg">Odstrani priljubljeno točko \'%s\'?</string>
<string name="favourites_remove_dialog_msg">Ali res želite izbrisati priljubljeno točko \'%s\'?</string>
<string name="favourites_remove_dialog_success">Priljubljena točka {0} je uspešno izbrisana.</string>
<string name="poi_edit_title">Uredi točko POI</string>
<string name="poi_create_title">Ustvari točko POI</string>
@ -111,7 +111,7 @@
<string name="app_description">Program za navigacijo</string>
<string name="use_internet">Uporabi internet</string>
<string name="show_poi_over_map">Prikaži točke POI</string>
<string name="choose_city">Izbor mesta</string>
<string name="choose_city">Izbor mesta ali poštne številke</string>
<string name="choose_building">Izbor hišne številke</string>
<string name="choose_street">Izbor ulice</string>
<string name="ChooseCountry">Izbor države</string>
@ -296,7 +296,7 @@
<string name="no_route">Ni določene poti</string>
<string name="delete_target_point">Odstrani cilj</string>
<string name="target_point">Ciljna točka %1$s</string>
<string name="intermediate_point">Cilj %1$s</string>
<string name="intermediate_point">Vmesni cilj %1$s</string>
<string name="target_points">Cilji</string>
<string name="poi_filter_emergency">Pomoč v sili</string>
<string name="poi_filter_car_aid">Pomoč na cesti</string>
@ -365,7 +365,7 @@
<string name="osmand_parking_event">Odpeljite vozilo s parkirišča</string>
<string name="osmand_parking_warning_text">Obvestilo, da odpeljite vozilo s parkirišča, je bilo prej dodano v koledar. Ostalo bo zapisano, dokler ga ne izbrišete ročno.</string>
<string name="osmand_parking_time_limit_title">Nastavi časovno omejitev parkiranja</string>
<string name="osmand_parking_delete_confirm">Ali želite odstraniti mesto, kjer je vozilo parkirano?</string>
<string name="osmand_parking_delete_confirm">Ali želite izbrisati oznako mesta, kjer je vozilo parkirano?</string>
<string name="osmand_parking_delete">Izbriši mesto parkiranja</string>
<string name="osmand_parking_choose_type">Izbira vrste parkiranja</string>
<string name="osmand_parking_lim_text">Časovno omejeno</string>
@ -979,7 +979,7 @@
<string name="download_srtm_maps">Podatki izohips</string>
<string name="recording_playing">Predvajanje zvoka iz izbranega posnetka.\n%1$s</string>
<string name="recording_open_external_player">Odpri zunanji predvajalnik</string>
<string name="recording_delete_confirm">Ali želite odstraniti ta posnetek?</string>
<string name="recording_delete_confirm">Ali želite izbrisati ta posnetek?</string>
<string name="recording_unavailable">ni na voljo</string>
<string name="recording_context_menu_arecord">Posnemi zvočni zaznamek</string>
@ -2074,11 +2074,11 @@
<string name="daily">Dnevno</string>
<string name="weekly">Tedensko</string>
<string name="morning">Zjutraj</string>
<string name="Night">Zvečer</string>
<string name="night">Zvečer</string>
<string name="rec_split">Razdelilnik posnetkov</string>
<string name="rec_split_title">Uporabi razdelilnik posnetkov</string>
<string name="rec_split_desc">Prepiši starejše posnetke, ko velikost posnetka preseže omejitev</string>
<string name="item_removed">Predmet je izbrisan</string>
<string name="item_removed">Predmet je odstranjen</string>
<string name="n_items_removed">izbrisanih predmetov</string>
<string name="shared_string_undo_all">Razveljavi vse</string>
<string name="shared_string_type">Vrsta</string>
@ -2090,4 +2090,8 @@
<string name="number_of_contributors">Število sodelujočih</string>
<string name="number_of_edits">Število urejanj</string>
<string name="reports_for">Poročilo za:</string>
</resources>
<string name="shared_string_remove">Odstrani</string>
<string name="clear_updates_proposition_message">Posodobitve zemljevidov je mogoče izbrisati in povrniti stanje na izvorni zemljevid.</string>
<string name="add_time_span">Dodaj časovni razmik</string>
<string name="road_blocked">Cesta je zaprta</string>
</resources>

View file

@ -745,7 +745,7 @@
<string name="rec_split_clip_length_desc">Сваки одсечак снимка неће бити дужи од одабраног времена</string>
<string name="rec_split_storage_size">Величина оставе</string>
<string name="rec_split_storage_size_desc">Величина заузећа свих снимљених одсечака</string>
<string name="Night">Ноћ</string>
<string name="night">Ноћ</string>
<string name="shared_string_go">Иди</string>
<string name="shared_string_not_selected">Није означено</string>
<string name="osmand_parking_hour">h</string>

View file

@ -2,7 +2,7 @@
<resources>
<string name="screen_is_locked">För att låsa upp skärmen tryck på låsikonen</string>
<string name="ChooseCountry">Välj land</string>
<string name="choose_city">Välj stad</string>
<string name="choose_city">Välj stad eller postnummer</string>
<string name="choose_building">Välj byggnad</string>
<string name="choose_street">Välj gata</string>
<string name="map_widget_top_text">Gatunamn</string>
@ -113,7 +113,7 @@
<string name="osmand_parking_warning">Varning</string>
<string name="osmand_parking_warning_text">Notifiering om att hämta din bil har tidigare lagts till i din kalender. Den kommer att finnas där tills du tar bort den manuellt.</string>
<string name="osmand_parking_time_limit_title">Ange tidsgränsen för parkering</string>
<string name="osmand_parking_delete_confirm">Vill du ta bort platsen för den parkerade bilen?</string>
<string name="osmand_parking_delete_confirm">Vill du ta bort markören för parkeringsplatsen?</string>
<string name="osmand_parking_delete">Ta bort P-markering</string>
<string name="osmand_parking_choose_type">Välj typ av parkering</string>
<string name="osmand_parking_lim_text">Tidsbegränsad</string>
@ -894,7 +894,7 @@
<string name="recording_camera_not_available">Ingen kamera tillgänglig</string>
<string name="srtm_plugin_description">"Denna modul erbjuder överlägg med höjdkurvor som kan visas i kombination med OsmAnds standardkartor. Denna funktion kommer att uppskattas av idrottsmän, vandrare och alla som är intresserade av höjdskillnander i landskapet.\n\nDessa globala data (mellan 70 grader norr och 70 grader syd) baseras på mätningar av SRTM (Shuttle Radar Topography Mission) och ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), ett bildinstrument ombord Terra, flaggskeppet i NASA:s Earth Observing System. ASTER är ett samprojekt mellan NASA, Japans Ministry of Economy, Trade and Industry (METI), and Japan Space Systems (J-spacesystems). "</string>
<string name="delete_target_point">Ta bort destination</string>
<string name="intermediate_point">Destination %1$s</string>
<string name="intermediate_point">Mellanliggande destination %1$s</string>
<string name="poi_filter_nominatim">Online Nominatim</string>
<string name="local_index_descr_title">Hantera kartfiler</string>
<string name="incomplete_locale">ofullständig</string>
@ -2052,7 +2052,7 @@
<string name="updates_size">Uppdateringar: %s</string>
<string name="last_map_change">Senaste kartändring: %s</string>
<string name="Night">Natt</string>
<string name="night">Natt</string>
<string name="hourly">Varje timma</string>
<string name="daily">Varje dag</string>
<string name="weekly">Varje vecka</string>
@ -2061,7 +2061,7 @@
<string name="select_month_and_country">Välj månad och land</string>
<string name="shared_string_type">Typ</string>
<string name="starting_point">Startpunkt</string>
<string name="item_removed">post raderad</string>
<string name="item_removed">Post borttagen</string>
<string name="n_items_removed">poster raderade</string>
<string name="shared_string_undo_all">ÅNGRA ALLA</string>
<string name="rendering_attr_hideIcons_name">Dölj POI-ikoner</string>
@ -2070,4 +2070,8 @@
<string name="number_of_edits">Antal redigeringar</string>
<string name="reports_for">Rapport för:</string>
<string name="shared_string_select">Välj</string>
<string name="shared_string_remove">Ta bort</string>
<string name="clear_updates_proposition_message">Du kan ta bort hämtade uppdateringar och få tillbaka originalkartan</string>
<string name="add_time_span">Lägg till tidsspann</string>
<string name="road_blocked">Blockerad väg</string>
</resources>

View file

@ -2022,7 +2022,7 @@
<string name="daily">Günlük</string>
<string name="weekly">Haftalık</string>
<string name="morning">Sabah</string>
<string name="Night">Gece</string>
<string name="night">Gece</string>
<string name="updates_size">Güncelleme boyutu</string>
<string name="select_month_and_country">Ayı ve ülke seçin</string>

View file

@ -11,7 +11,7 @@
<string name="no_route">沒有路線</string>
<string name="delete_target_point">移除目的地</string>
<string name="target_point">目的地 %1$s</string>
<string name="intermediate_point">目的地 %1$s</string>
<string name="intermediate_point">中間節點 %1$s</string>
<string name="context_menu_item_last_intermediate_point">增為最後一個的中途標點</string>
<string name="context_menu_item_first_intermediate_point">增為第一個中途標點</string>
@ -125,7 +125,7 @@
<string name="osmand_parking_warning">警示</string>
<string name="osmand_parking_warning_text">取車通知在先前已加到您的行事曆中。它會一直保留在那裡,直到您手動刪除它。</string>
<string name="osmand_parking_time_limit_title">設定停車時限</string>
<string name="osmand_parking_delete_confirm">您要移除停車位置嗎?</string>
<string name="osmand_parking_delete_confirm">您要刪除停車位置標記嗎?</string>
<string name="osmand_parking_delete">刪除停車位置標記</string>
<string name="osmand_parking_choose_type">選擇停車場種類</string>
<string name="osmand_parking_lim_text">時限</string>
@ -786,7 +786,7 @@
<string name="search_address">地址查詢</string>
<string name="choose_building">選取建築物</string>
<string name="choose_street">選擇道路</string>
<string name="choose_city">選擇縣市</string>
<string name="choose_city">選擇縣市或郵遞區號</string>
<string name="ChooseCountry">選擇國家</string>
<string name="show_view_angle">顯示目視方向</string>
<string name="map_view_3d_descr">啟用 3D 檢視地圖</string>
@ -847,7 +847,7 @@
<string name="add_favorite_dialog_favourite_added_template">我的最愛標點 \'\'{0}\'\' 新增成功。</string>
<string name="favourites_context_menu_edit">編輯我的最愛</string>
<string name="favourites_context_menu_delete">刪除我的最愛</string>
<string name="favourites_remove_dialog_msg">除我的最愛標點 \'%s\'</string>
<string name="favourites_remove_dialog_msg">除我的最愛標點 \'%s\'</string>
<string name="favourites_remove_dialog_success">我的最愛標點 {0} 刪除成功。</string>
@ -977,7 +977,7 @@
<string name="recording_camera_not_available">相機失效</string>
<string name="recording_playing">從已指定的錄音開始播放音訊。\n%1$s</string>
<string name="recording_open_external_player">開啟外部播放</string>
<string name="recording_delete_confirm">您想除此錄製嗎?</string>
<string name="recording_delete_confirm">您想除此錄製嗎?</string>
<string name="recording_unavailable">無法使用</string>
<string name="recording_context_menu_arecord">錄取音訊注解</string>
<string name="destination_point">目的地 1$S</string>
@ -2062,13 +2062,13 @@
<string name="daily">每日</string>
<string name="weekly">每週</string>
<string name="morning">早上</string>
<string name="Night">夜間</string>
<string name="night">夜間</string>
<string name="shared_string_not_selected">未選取</string>
<string name="select_month_and_country">選擇月份與國家</string>
<string name="shared_string_type">類型</string>
<string name="starting_point">起始標點</string>
<string name="item_removed">項目已</string>
<string name="item_removed">項目已</string>
<string name="n_items_removed">項目已刪除</string>
<string name="shared_string_undo_all">全部取消</string>
<string name="rendering_attr_hideIcons_name">隱藏 POI 圖示</string>
@ -2077,4 +2077,8 @@
<string name="number_of_edits">編輯次數</string>
<string name="reports_for">報告:</string>
<string name="shared_string_select">選擇</string>
<string name="shared_string_remove">移除</string>
<string name="clear_updates_proposition_message">您可以移除已下載的更新和回到原來的地圖版本</string>
<string name="add_time_span">增加時間跨度</string>
<string name="road_blocked">道路堵塞</string>
</resources>

View file

@ -2591,4 +2591,14 @@
<string name="poi_fair_trade_no">Fair trade: no</string>
<string name="poi_fair_trade_only">Only fair trade products</string>
<string name="poi_ice_hockey">Ice hockey</string>
<string name="poi_bandy">Bandy</string>
<string name="poi_protected_area">Protected area</string>
<string name="poi_protection_title">Protection title</string>
<string name="poi_protection_object_historic">Protection object: historic</string>
<string name="poi_protection_object_nature">Protection object: nature</string>
<string name="poi_protection_object_habitat">Protection object: habitat</string>
<string name="poi_protection_object_water">Protection object: water</string>
</resources>

View file

@ -9,7 +9,7 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
-->
<string name="shared_string_remove">Remove</string>
<string name="shared_string_remove">Remove</string>
<string name="clear_updates_proposition_message">"You can remove downloaded updates and get back to the original map edition"</string>
<string name="add_time_span">Add time span</string>
<string name="road_blocked">Road blocked</string>
@ -17,7 +17,7 @@
<string name="switch_start_finish">Reverse starting point &amp; destination</string>
<string name="rendering_attr_hideIcons_name">Hide POI icons</string>
<string name="item_removed">Item removed</string>
<string name="n_items_deleted">items removed</string>
<string name="n_items_removed">items removed</string>
<string name="shared_string_undo_all">UNDO ALL</string>
<string name="shared_string_type">Type</string>
<string name="starting_point">Starting point</string>
@ -40,15 +40,6 @@
<string name="no_microphone_permission">App have no permission to access microphone.</string>
<string name="route_distance">Distance:</string>
<string name="route_duration">Time:</string>
<string-array name="update_frequencies_array">
<item>Every Hour</item>
<item>Once a day</item>
<item>Weekly</item>
</string-array>
<string-array name="update_times_of_day">
<item>Morning</item>
<item>Night</item>
</string-array>
<string name="rendering_attr_horseRoutes_name">Horse routes</string>
<string name="no_address_found">No address determined</string>
<string name="shared_string_near">Near</string>
@ -1012,7 +1003,7 @@
<string name="recording_is_recorded">Audio/video is being recorded. To stop it press the AV widget.</string>
<string name="recording_playing">An audio from the specified recording is being played.\n%1$s</string>
<string name="recording_open_external_player">Open external player</string>
<string name="recording_delete_confirm">Do you want to remove this recording?</string>
<string name="recording_delete_confirm">Do you want to delete this recording?</string>
<string name="recording_unavailable">unavailable</string>
<string name="recording_context_menu_arecord">Take an audio note</string>
<string name="recording_context_menu_vrecord">Take a video note</string>
@ -1062,7 +1053,7 @@
<string name="no_route">No route</string>
<string name="delete_target_point">Remove destination</string>
<string name="target_point">Destination %1$s</string>
<string name="intermediate_point">Destination %1$s</string>
<string name="intermediate_point">Intermediate destination %1$s</string>
<string name="context_menu_item_last_intermediate_point">Add as last intermediate destination</string>
<string name="context_menu_item_first_intermediate_point">Add as first intermediate destination</string>
<string name="add_as_last_destination_point">Add as last intermediate destination</string>
@ -1355,7 +1346,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="osmand_parking_warning">Warning</string>
<string name="osmand_parking_warning_text">Notification to pick up your car was previously added to your Calendar. It will remain there until you will delete it manually.</string>
<string name="osmand_parking_time_limit_title">Set the time limit of parking</string>
<string name="osmand_parking_delete_confirm">Do you want to remove the location of the parked car?</string>
<string name="osmand_parking_delete_confirm">Do you want to delete the parking location marker?</string>
<string name="osmand_parking_delete">Delete a parking marker</string>
<string name="osmand_parking_choose_type">Choose the type of parking</string>
<string name="osmand_parking_lim_text">Time-limited</string>
@ -1960,7 +1951,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="search_address">Search address</string>
<string name="choose_building">Choose building</string>
<string name="choose_street">Choose street</string>
<string name="choose_city">Choose city</string>
<string name="choose_city">Choose city or postcode</string>
<string name="ChooseCountry">Choose country</string>
<string name="show_view_angle">Display viewing direction</string>
<string name="map_view_3d_descr">Enable 3D view of the map</string>
@ -2012,7 +2003,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="favourites_context_menu_add">Add favorite</string>
<string name="favourites_context_menu_edit">Edit favorite</string>
<string name="favourites_context_menu_delete">Delete favorite</string>
<string name="favourites_remove_dialog_msg">Remove favorite point \'%s\'?</string>
<string name="favourites_remove_dialog_msg">Delete favorite point \'%s\'?</string>
<string name="favourites_remove_dialog_success">Favorite point {0} was successfully deleted.</string>
<string name="poi_edit_title">Edit POI</string>
<string name="poi_create_title">Create POI</string>
@ -2158,9 +2149,9 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="daily">Daily</string>
<string name="weekly">Weekly</string>
<string name="morning">Morning</string>
<string name="Night">Night</string>
<string name="night">Night</string>
<string name="select_month_and_country">Select month and country</string>
<string name="number_of_contributors">Number of contributors</string>
<string name="number_of_edits">Number of edits</string>
<string name="reports_for">Report for:</string>
</resources>
</resources>

View file

@ -1,6 +1,8 @@
package net.osmand.plus;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
@ -18,10 +20,14 @@ import net.osmand.map.WorldRegion;
import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.MapPoiTypes;
import net.osmand.plus.activities.DayNightHelper;
import net.osmand.plus.activities.LocalIndexHelper;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.activities.SavingTrackHelper;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.ui.AbstractLoadLocalIndexTask;
import net.osmand.plus.helpers.AvoidSpecificRoads;
import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.liveupdates.LiveUpdatesHelper;
import net.osmand.plus.monitoring.LiveMonitoringHelper;
import net.osmand.plus.poi.PoiFiltersHelper;
import net.osmand.plus.render.MapRenderRepositories;
@ -51,6 +57,14 @@ import java.util.Random;
import btools.routingapp.BRouterServiceConnection;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getPendingIntent;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLastCheck;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLiveUpdatesOn;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayToUpdate;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.runLiveUpdate;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.setAlarmForPendingIntent;
/**
*/
public class AppInitializer implements IProgress {
@ -58,7 +72,7 @@ public class AppInitializer implements IProgress {
private static final int VERSION_2_2 = 22;
private static final int CURRENT_VERSION_FOR_UGPRADE = VERSION_2_2;
public static final boolean TIPS_AND_TRICKS = false;
private static final String FIRST_TIME_APP_RUN = "FIRST_TIME_APP_RUN"; //$NON-NLS-1$
private static final String VERSION_INSTALLED_NUMBER = "VERSION_INSTALLED_NUMBER"; //$NON-NLS-1$
@ -74,7 +88,7 @@ public class AppInitializer implements IProgress {
public static final String APP_EXIT_KEY = "APP_EXIT_KEY";
private OsmandApplication app;
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(AppInitializer.class);
private boolean initSettings = false;
private boolean firstTime;
private boolean activityChangesShowed = false;
@ -86,36 +100,36 @@ public class AppInitializer implements IProgress {
private String taskName;
private List<AppInitializeListener> listeners = new ArrayList<>();
private SharedPreferences startPrefs;
public enum InitEvents {
FAVORITES_INITIALIZED, NATIVE_INITIALIZED,
NATIVE_OPEN_GLINITIALIZED,
TASK_CHANGED, MAPS_INITIALIZED, POI_TYPES_INITIALIZED, ASSETS_COPIED, INIT_RENDERERS,
RESTORE_BACKUPS, INDEX_REGION_BOUNDARIES, SAVE_GPX_TRACKS, LOAD_GPX_TRACKS
}
public interface AppInitializeListener {
void onProgress(AppInitializer init, InitEvents event);
void onFinish(AppInitializer init);
}
public AppInitializer(OsmandApplication app) {
this.app = app;
}
public List<String> getWarnings() {
return warnings;
}
public boolean isAppInitializing() {
return appInitializing;
}
private void initUiVars(Activity activity) {
if(initSettings) {
return;
@ -146,27 +160,27 @@ public class AppInitializer implements IProgress {
}
initSettings = true;
}
public int getNumberOfStarts() {
if(startPrefs == null) {
return 0;
}
return startPrefs.getInt(NUMBER_OF_STARTS, 1);
}
public long getFirstInstalled() {
if(startPrefs == null) {
return 0;
}
return startPrefs.getLong(FIRST_INSTALLED, 0);
}
public void resetFirstTimeRun() {
if(startPrefs != null) {
startPrefs.edit().remove(FIRST_TIME_APP_RUN).commit();
}
}
public boolean isFirstTime(Activity activity) {
initUiVars(activity);
return firstTime;
@ -184,10 +198,10 @@ public class AppInitializer implements IProgress {
return false;
}
private void checkMapUpdates() {
long diff = System.currentTimeMillis() - app.getSettings().LAST_CHECKED_UPDATES.get();
if(diff >= 2 * 24 * 60 * 60l && new Random().nextInt(5) == 0 &&
if(diff >= 2 * 24 * 60 * 60l && new Random().nextInt(5) == 0 &&
app.getSettings().isInternetConnectionAvailable()) {
app.getDownloadThread().runReloadIndexFiles();
} else if(Version.isDeveloperVersion(app)) {
@ -259,7 +273,7 @@ public class AppInitializer implements IProgress {
new FileOutputStream(file));
}
app.regions.prepareFile(file.getAbsolutePath());
}
} catch (Exception e) {
warnings.add(e.getMessage());
@ -267,7 +281,7 @@ public class AppInitializer implements IProgress {
}
}
private void initPoiTypes() {
if(app.getAppPath("poi_types.xml").exists()) {
app.poiTypes.init(app.getAppPath("poi_types.xml").getAbsolutePath());
@ -275,8 +289,8 @@ public class AppInitializer implements IProgress {
app.poiTypes.init();
}
app.poiTypes.setPoiTranslator(new MapPoiTypes.PoiTranslator() {
@Override
public String getTranslation(AbstractPoiType type) {
if(type.getBaseLangType() != null) {
@ -297,7 +311,6 @@ public class AppInitializer implements IProgress {
}
public void onCreateApplication() {
// always update application mode to default
OsmandSettings osmandSettings = app.getSettings();
@ -311,7 +324,7 @@ public class AppInitializer implements IProgress {
e.printStackTrace();
}
app.applyTheme(app);
app.poiTypes = startupInit(MapPoiTypes.getDefaultNoInit(), MapPoiTypes.class);
app.poiTypes = startupInit(MapPoiTypes.getDefaultNoInit(), MapPoiTypes.class);
app.routingHelper = startupInit(new RoutingHelper(app), RoutingHelper.class);
app.resourceManager = startupInit(new ResourceManager(app), ResourceManager.class);
app.daynightHelper = startupInit(new DayNightHelper(app), DayNightHelper.class);
@ -334,7 +347,7 @@ public class AppInitializer implements IProgress {
private void updateRegionVars() {
app.regions.setTranslator(new RegionTranslation() {
@Override
public String getTranslation(String id) {
if(WorldRegion.AFRICA_REGION_ID.equals(id)){
@ -361,7 +374,6 @@ public class AppInitializer implements IProgress {
}
private <T> T startupInit(T object, Class<T> class1) {
long t = System.currentTimeMillis();
if(t - startTime > 7) {
@ -372,7 +384,6 @@ public class AppInitializer implements IProgress {
}
public net.osmand.router.RoutingConfiguration.Builder getLazyDefaultRoutingConfig() {
long tm = System.currentTimeMillis();
try {
@ -393,7 +404,7 @@ public class AppInitializer implements IProgress {
}
}
}
@ -401,7 +412,7 @@ public class AppInitializer implements IProgress {
final ProgressDialog dlg = showDialog ? ProgressDialog.show(uiContext, app.getString(R.string.loading_data),
app.getString(R.string.voice_data_initializing)) : null;
new Thread(new Runnable() {
public CommandPlayer createCommandPlayer(String voiceProvider, OsmandApplication osmandApplication, Activity ctx)
throws CommandPlayerException {
if (voiceProvider != null) {
@ -443,7 +454,7 @@ public class AppInitializer implements IProgress {
}
}).start();
}
private void startApplicationBackground() {
try {
startBgTime = System.currentTimeMillis();
@ -453,7 +464,7 @@ public class AppInitializer implements IProgress {
initPoiTypes();
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
app.resourceManager.reloadIndexesOnStart(this, warnings);
app.getRendererRegistry().initRenderers(this);
notifyEvent(InitEvents.INIT_RENDERERS);
// native depends on renderers
@ -461,7 +472,7 @@ public class AppInitializer implements IProgress {
notifyEvent(InitEvents.NATIVE_INITIALIZED);
app.poiFilters.reloadAllPoiFilters();
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
indexRegionsBoundaries(warnings);
notifyEvent(InitEvents.INDEX_REGION_BOUNDARIES);
app.selectedGpxHelper.loadGPXTracks(this);
@ -471,6 +482,8 @@ public class AppInitializer implements IProgress {
// restore backuped favorites to normal file
restoreBackupForFavoritesFiles();
notifyEvent(InitEvents.RESTORE_BACKUPS);
checkLiveUpdatesAlerts();
LocalIndexHelper helper = new LocalIndexHelper(app);
} catch (RuntimeException e) {
e.printStackTrace();
warnings.add(e.getMessage());
@ -483,9 +496,37 @@ public class AppInitializer implements IProgress {
}
}
private void checkLiveUpdatesAlerts() {
OsmandSettings settings = app.getSettings();
if (!settings.IS_LIVE_UPDATES_ON.get()) {
return;
}
LocalIndexHelper helper = new LocalIndexHelper(app);
List<LocalIndexInfo> fullMaps = helper.getLocalFullMaps(new AbstractLoadLocalIndexTask() {
@Override
public void loadFile(LocalIndexInfo... loaded) {
}
});
AlarmManager alarmMgr = (AlarmManager) app.getSystemService(Context.ALARM_SERVICE);
for (LocalIndexInfo fullMap : fullMaps) {
if (!preferenceLiveUpdatesOn(fullMap, settings).get()) {
continue;
}
int updateFrequencyOrd = preferenceUpdateFrequency(fullMap, settings).get();
LiveUpdatesHelper.UpdateFrequency updateFrequency =
LiveUpdatesHelper.UpdateFrequency.values()[updateFrequencyOrd];
long lastCheck = preferenceLastCheck(fullMap, settings).get();
if (System.currentTimeMillis() - lastCheck > updateFrequency.getTime() * 2) {
runLiveUpdate(app, fullMap, false);
PendingIntent alarmIntent = getPendingIntent(app, fullMap);
int timeOfDayOrd = preferenceTimeOfDayToUpdate(fullMap, settings).get();
LiveUpdatesHelper.TimeOfDay timeOfDayToUpdate =
LiveUpdatesHelper.TimeOfDay.values()[timeOfDayOrd];
setAlarmForPendingIntent(alarmIntent, alarmMgr, updateFrequency, timeOfDayToUpdate);
}
}
}
private void restoreBackupForFavoritesFiles() {
final File appDir = app.getAppPath(null);
@ -556,12 +597,12 @@ public class AppInitializer implements IProgress {
File ls = app.getAppPath("fonts");
lib.loadFontData(ls);
}
}
app.getResourceManager().initMapBoundariesCacheNative();
}
}
private StringBuilder formatWarnings(List<String> warnings) {
final StringBuilder b = new StringBuilder();
@ -580,7 +621,7 @@ public class AppInitializer implements IProgress {
public void notifyFinish() {
app.uiHandler.post(new Runnable() {
@Override
public void run() {
for(AppInitializeListener l : listeners) {
@ -596,11 +637,11 @@ public class AppInitializer implements IProgress {
startBgTime = time;
}
app.uiHandler.post(new Runnable() {
@Override
public void run() {
for(AppInitializeListener l : listeners) {
l.onProgress(AppInitializer.this, event);
l.onProgress(AppInitializer.this, event);
}
}
});
@ -635,7 +676,7 @@ public class AppInitializer implements IProgress {
taskName = null;
notifyEvent(InitEvents.TASK_CHANGED);
}
public String getCurrentInitTaskName() {
return taskName;
}
@ -654,7 +695,7 @@ public class AppInitializer implements IProgress {
private boolean applicationBgInitializing = false;
public synchronized void startApplication() {
if (applicationBgInitializing) {
@ -687,5 +728,4 @@ public class AppInitializer implements IProgress {
}
}

View file

@ -888,9 +888,7 @@ public class OsmandSettings {
public final OsmandPreference<Boolean> FAST_ROUTE_MODE = new BooleanPreference("fast_route_mode", true).makeProfile();
// temporarily for new version
public final CommonPreference<Boolean> DISABLE_COMPLEX_ROUTING = new BooleanPreference("disable_complex_routing", false).makeGlobal();
public final CommonPreference<Boolean> BETA_TESTING_LIVE_UPDATES = new BooleanPreference("live_updates_beta", false).makeGlobal();
public final CommonPreference<Boolean> SHOW_TRAFFIC_WARNINGS = new BooleanPreference("show_traffic_warnings", false).makeProfile().cache();
{
SHOW_TRAFFIC_WARNINGS.setModeDefaultValue(ApplicationMode.CAR, true);

View file

@ -0,0 +1,73 @@
package net.osmand.plus.base;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
import android.support.annotation.DrawableRes;
import android.support.annotation.IdRes;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import net.osmand.plus.IconsCache;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandActionBarActivity;
public class BaseOsmAndDialogFragment extends DialogFragment {
private IconsCache iconsCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isLightTheme = ((OsmandApplication) getActivity().getApplication())
.getSettings().OSMAND_THEME.get() == OsmandSettings.OSMAND_LIGHT_THEME;
int themeId = isLightTheme ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme;
setStyle(STYLE_NO_FRAME, themeId);
getActivity().getWindow()
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
protected OsmandApplication getMyApplication() {
return (OsmandApplication) getActivity().getApplication();
}
protected OsmandActionBarActivity getMyActivity() {
return (OsmandActionBarActivity) getActivity();
}
protected IconsCache getIconsCache() {
if (iconsCache == null) {
iconsCache = getMyApplication().getIconsCache();
}
return iconsCache;
}
protected Drawable getPaintedContentIcon(@DrawableRes int id, @ColorInt int color){
return getIconsCache().getPaintedContentIcon(id, color);
}
protected Drawable getIcon(@DrawableRes int id, @ColorRes int colorId){
return getIconsCache().getIcon(id, colorId);
}
protected Drawable getContentIcon(@DrawableRes int id){
return getIconsCache().getContentIcon(id);
}
protected void setThemedDrawable(View parent, @IdRes int viewId, @DrawableRes int iconId) {
((ImageView) parent.findViewById(viewId)).setImageDrawable(getContentIcon(iconId));
}
protected void setThemedDrawable(ImageView view, @DrawableRes int iconId) {
view.setImageDrawable(getContentIcon(iconId));
}
protected OsmandSettings getSettings() {
return getMyApplication().getSettings();
}
}

View file

@ -2,6 +2,7 @@ package net.osmand.plus.base;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
import android.support.annotation.DrawableRes;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
@ -10,6 +11,7 @@ import android.widget.ImageView;
import net.osmand.plus.IconsCache;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.activities.OsmandActionBarActivity;
public class BaseOsmAndFragment extends Fragment {
@ -34,6 +36,10 @@ public class BaseOsmAndFragment extends Fragment {
return getIconsCache().getPaintedContentIcon(id, color);
}
protected Drawable getIcon(@DrawableRes int id, @ColorRes int colorId){
return getIconsCache().getIcon(id, colorId);
}
protected Drawable getContentIcon(@DrawableRes int id){
return getIconsCache().getContentIcon(id);
}
@ -41,4 +47,12 @@ public class BaseOsmAndFragment extends Fragment {
protected void setThemedDrawable(View parent, @IdRes int viewId, @DrawableRes int iconId) {
((ImageView) parent.findViewById(viewId)).setImageDrawable(getContentIcon(iconId));
}
protected void setThemedDrawable(View view, @DrawableRes int iconId) {
((ImageView) view).setImageDrawable(getContentIcon(iconId));
}
protected OsmandSettings getSettings() {
return getMyApplication().getSettings();
}
}

View file

@ -18,7 +18,6 @@ import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmAndLocationSimulation;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.SettingsBaseActivity;
import net.osmand.plus.activities.actions.AppModeDialog;
import net.osmand.util.SunriseSunset;
@ -40,30 +39,25 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
super.onCreate(savedInstanceState);
getToolbar().setTitle(R.string.debugging_and_development);
PreferenceScreen cat = getPreferenceScreen();
CheckBoxPreference dbg = createCheckBoxPreference(settings.DEBUG_RENDERING_INFO,
CheckBoxPreference dbg = createCheckBoxPreference(settings.DEBUG_RENDERING_INFO,
R.string.trace_rendering, R.string.trace_rendering_descr);
cat.addPreference(dbg);
cat.addPreference(createCheckBoxPreference(settings.DISABLE_COMPLEX_ROUTING,
R.string.disable_complex_routing, R.string.disable_complex_routing_descr));
cat.addPreference(createCheckBoxPreference(settings.USE_FAST_RECALCULATION,
R.string.use_fast_recalculation, R.string.use_fast_recalculation_desc));
cat.addPreference(createCheckBoxPreference(settings.USE_MAGNETIC_FIELD_SENSOR_COMPASS,
R.string.use_magnetic_sensor,
R.string.use_magnetic_sensor_descr));
final CheckBoxPreference openGlRender = createCheckBoxPreference(settings.USE_OPENGL_RENDER, R.string.use_opengl_render,R.string.use_opengl_render_descr);
cat.addPreference(openGlRender);
if(Version.isDeveloperVersion(getMyApplication())) {
cat.addPreference(createCheckBoxPreference(settings.BETA_TESTING_LIVE_UPDATES,
"Live updates", "Beta testing for live updates"));
}
final Preference firstRunPreference = new Preference(this);
firstRunPreference.setTitle(R.string.simulate_initial_startup);
firstRunPreference.setSummary(R.string.simulate_initial_startup_descr);
@ -90,8 +84,8 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
@Override
public void run() {
simulate.setSummary(sim.isRouteAnimating() ?
R.string.simulate_your_location_stop_descr : R.string.simulate_your_location_descr);
simulate.setSummary(sim.isRouteAnimating() ?
R.string.simulate_your_location_stop_descr : R.string.simulate_your_location_descr);
}
};
pref.setTitle(R.string.simulate_your_location);
@ -106,7 +100,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
}
});
cat.addPreference(pref);
pref = new Preference(this);
pref.setTitle(R.string.test_voice_prompts);
pref.setSummary(R.string.play_commands_of_currently_selected_voice);
@ -148,7 +142,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
//setEnabled(false) creates bad readability on some devices
//pref.setEnabled(false);
info.addPreference(pref);
// ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
// ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
// activityManager.getMemoryInfo(memoryInfo);
@ -157,7 +151,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
Debug.getMemoryInfo(mem);
pref = new Preference(this);
pref.setTitle(R.string.native_app_allocated_memory);
pref.setSummary(getString(R.string.native_app_allocated_memory_descr
pref.setSummary(getString(R.string.native_app_allocated_memory_descr
, mem.nativePrivateDirty / 1024, mem.dalvikPrivateDirty / 1024 , mem.otherPrivateDirty / 1024
, mem.nativePss / 1024, mem.dalvikPss / 1024 , mem.otherPss / 1024));
pref.setSelectable(false);
@ -188,7 +182,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
}
});
info.addPreference(agpspref);
SunriseSunset sunriseSunset = getMyApplication().getDaynightHelper().getSunriseSunset();
pref = new Preference(this);
pref.setTitle(R.string.day_night_info);

View file

@ -8,7 +8,6 @@ import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.DrawableRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.SwitchCompat;
import android.util.TypedValue;
@ -28,7 +27,7 @@ import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexHelper;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
import net.osmand.plus.download.AbstractDownloadActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.download.ui.AbstractLoadLocalIndexTask;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.util.Algorithms;
@ -53,7 +52,7 @@ import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayT
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.setAlarmForPendingIntent;
public class LiveUpdatesFragment extends Fragment {
public class LiveUpdatesFragment extends BaseOsmAndFragment {
public static final String TITLE = "Live Updates";
public static final Comparator<LocalIndexInfo> LOCAL_INDEX_INFO_COMPARATOR = new Comparator<LocalIndexInfo>() {
@Override
@ -63,6 +62,7 @@ public class LiveUpdatesFragment extends Fragment {
};
private ExpandableListView listView;
private LocalIndexesAdapter adapter;
private AsyncTask<Void, LocalIndexInfo, List<LocalIndexInfo>> loadLocalIndexesTask;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -90,16 +90,14 @@ public class LiveUpdatesFragment extends Fragment {
return true;
}
});
new LoadLocalIndexTask(adapter, this).execute();
loadLocalIndexesTask = new LoadLocalIndexTask(adapter, this).execute();
return view;
}
private OsmandSettings getSettings() {
return getMyActivity().getMyApplication().getSettings();
}
private AbstractDownloadActivity getMyActivity() {
return (AbstractDownloadActivity) getActivity();
@Override
public void onDestroyView() {
super.onDestroyView();
loadLocalIndexesTask.cancel(true);
}
public void notifyLiveUpdatesChanged() {
@ -346,7 +344,7 @@ public class LiveUpdatesFragment extends Fragment {
subheaderTextView.setText(subheaderText);
subheaderTextView.setTextColor(fragment.getActivity().getResources()
.getColor(R.color.osmand_orange));
icon.setImageDrawable(context.getIconsCache().getIcon(R.drawable.ic_map, R.color.osmand_orange));
icon.setImageDrawable(fragment.getIcon(R.drawable.ic_map, R.color.osmand_orange));
options.setImageDrawable(getSecondaryColorPaintedIcon(R.drawable.ic_overflow_menu_white));
layoutParams.height = (int) dpToPx(view.getContext(), UPDATES_ENABLED_ITEM_HEIGHT);
} else {
@ -394,16 +392,17 @@ public class LiveUpdatesFragment extends Fragment {
private List<LocalIndexInfo> result;
private LocalIndexesAdapter adapter;
private LiveUpdatesFragment fragment;
private LocalIndexHelper helper;
public LoadLocalIndexTask(LocalIndexesAdapter adapter,
LiveUpdatesFragment fragment) {
this.adapter = adapter;
this.fragment = fragment;
helper = new LocalIndexHelper(fragment.getMyActivity().getMyApplication());
}
@Override
protected List<LocalIndexInfo> doInBackground(Void... params) {
LocalIndexHelper helper = new LocalIndexHelper(fragment.getMyActivity().getMyApplication());
return helper.getLocalFullMaps(this);
}

View file

@ -90,26 +90,20 @@ public class LiveUpdatesHelper {
public static void setAlarmForPendingIntent(PendingIntent alarmIntent, AlarmManager alarmMgr, UpdateFrequency updateFrequency, TimeOfDay timeOfDayToUpdate) {
long timeOfFirstUpdate;
long updateInterval;
switch (updateFrequency) {
case HOURLY:
timeOfFirstUpdate = System.currentTimeMillis() + SHIFT;
updateInterval = AlarmManager.INTERVAL_HOUR;
break;
case DAILY:
timeOfFirstUpdate = getNextUpdateTime(timeOfDayToUpdate);
updateInterval = AlarmManager.INTERVAL_DAY;
break;
case WEEKLY:
timeOfFirstUpdate = getNextUpdateTime(timeOfDayToUpdate);
updateInterval = AlarmManager.INTERVAL_DAY * 7;
break;
default:
throw new IllegalStateException("Unexpected update frequency:"
+ updateFrequency);
}
alarmMgr.setInexactRepeating(AlarmManager.RTC,
timeOfFirstUpdate, updateInterval, alarmIntent);
timeOfFirstUpdate, updateFrequency.getTime(), alarmIntent);
}
private static long getNextUpdateTime(TimeOfDay timeOfDayToUpdate) {
@ -126,7 +120,7 @@ public class LiveUpdatesHelper {
public static enum TimeOfDay {
MORNING(R.string.morning),
NIGHT(R.string.Night);
NIGHT(R.string.night);
private final int localizedId;
TimeOfDay(int localizedId) {
@ -145,17 +139,27 @@ public class LiveUpdatesHelper {
}
public static enum UpdateFrequency {
HOURLY(R.string.hourly),
DAILY(R.string.daily),
WEEKLY(R.string.weekly);
HOURLY(R.string.hourly, AlarmManager.INTERVAL_HOUR),
DAILY(R.string.daily, AlarmManager.INTERVAL_DAY),
WEEKLY(R.string.weekly, AlarmManager.INTERVAL_DAY * 7);
private final int localizedId;
private final long time;
UpdateFrequency(int localizedId) {
UpdateFrequency(int localizedId, long time) {
this.localizedId = localizedId;
this.time = time;
}
public int getLocalizedId() {
return localizedId;
}
public long getTime() {
return time;
}
}
public static void runLiveUpdate(Context context, final LocalIndexInfo info, boolean forceUpdate) {
final String fnExt = Algorithms.getFileNameWithoutExtension(new File(info.getFileName()));
new PerformLiveUpdateAsyncTask(context, info, forceUpdate).execute(new String[]{fnExt});
}
}

View file

@ -1,32 +1,5 @@
package net.osmand.plus.liveupdates;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.DEFAULT_LAST_CHECK;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.formatDateTime;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getNameToDisplay;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getPendingIntent;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceDownloadViaWiFi;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceForLocalIndex;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLastCheck;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayToUpdate;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.setAlarmForPendingIntent;
import java.io.File;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.download.AbstractDownloadActivity;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.liveupdates.LiveUpdatesHelper.TimeOfDay;
import net.osmand.plus.liveupdates.LiveUpdatesHelper.UpdateFrequency;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import android.app.AlarmManager;
import android.app.Dialog;
import android.app.PendingIntent;
@ -45,6 +18,34 @@ import android.widget.CheckBox;
import android.widget.Spinner;
import android.widget.TextView;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.download.AbstractDownloadActivity;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.liveupdates.LiveUpdatesHelper.TimeOfDay;
import net.osmand.plus.liveupdates.LiveUpdatesHelper.UpdateFrequency;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.io.File;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.DEFAULT_LAST_CHECK;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.formatDateTime;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getNameToDisplay;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getPendingIntent;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceDownloadViaWiFi;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceForLocalIndex;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLastCheck;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayToUpdate;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.runLiveUpdate;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.setAlarmForPendingIntent;
public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
private static final Log LOG = PlatformUtil.getLog(LiveUpdatesAlarmReceiver.class);
private static final String LOCAL_INDEX = "local_index";
@ -92,14 +93,23 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
sizeTextView.setText(getUpdatesSize(fileNameWithoutExtension, changesManager));
TimeOfDay[] timeOfDays = TimeOfDay.values();
String[] timeOfDaysStrings = new String[timeOfDays.length];
for (int i = 0; i < timeOfDays.length; i++) {
timeOfDaysStrings[i] = getString(timeOfDays[i].getLocalizedId());
}
updateTimesOfDaySpinner.setAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.action_spinner_item,
getResources().getStringArray(R.array.update_times_of_day)));
R.layout.action_spinner_item, timeOfDaysStrings));
updateTimesOfDaySpinner.setSelection(timeOfDayPreference.get());
UpdateFrequency[] updateFrequencies = UpdateFrequency.values();
String[] updateFrequenciesStrings = new String[updateFrequencies.length];
for (int i = 0; i < updateFrequencies.length; i++) {
updateFrequenciesStrings[i] = getString(updateFrequencies[i].getLocalizedId());
}
updateFrequencySpinner.setAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.action_spinner_item,
getResources().getStringArray(R.array.update_frequencies_array)));
R.layout.action_spinner_item, updateFrequenciesStrings));
updateFrequencySpinner.setSelection(updateFrequencyPreference.get());
updateFrequencySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
@ -149,7 +159,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
timeOfDayPreference.set(timeOfDayInt);
if (liveUpdatesSwitch.isChecked() && getSettings().IS_LIVE_UPDATES_ON.get()) {
runLiveUpdate(localIndexInfo, false);
runLiveUpdate(getActivity(), localIndexInfo, false);
UpdateFrequency updateFrequency = UpdateFrequency.values()[updateFrequencyInt];
TimeOfDay timeOfDayToUpdate = TimeOfDay.values()[timeOfDayInt];
setAlarmForPendingIntent(alarmIntent, alarmMgr, updateFrequency, timeOfDayToUpdate);
@ -163,18 +173,13 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
.setNeutralButton(R.string.update_now, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
runLiveUpdate(localIndexInfo, true);
runLiveUpdate(getActivity(), localIndexInfo, true);
sizeTextView.setText(getUpdatesSize(fileNameWithoutExtension, changesManager));
}
});
return builder.create();
}
void runLiveUpdate(final LocalIndexInfo info, boolean forceUpdate) {
final String fnExt = Algorithms.getFileNameWithoutExtension(new File(info.getFileName()));
new PerformLiveUpdateAsyncTask(getActivity(), info, forceUpdate).execute(new String[]{fnExt});
}
private static String getUpdatesSize(String fileNameWithoutExtension,
IncrementalChangesManager changesManager) {
String size;

View file

@ -5,11 +5,10 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.widget.Toast;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.download.AbstractDownloadActivity;
import net.osmand.plus.download.DownloadActivityType;
@ -18,6 +17,8 @@ import net.osmand.plus.download.IndexItem;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@ -26,6 +27,8 @@ import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFreq
public class PerformLiveUpdateAsyncTask
extends AsyncTask<String, Object, IncrementalChangesManager.IncrementalUpdateList> {
private final static Log LOG = PlatformUtil.getLog(OsmLiveActivity.class);
private final Context context;
private final LocalIndexInfo localIndexInfo;
private final boolean forceUpdate;
@ -42,7 +45,6 @@ public class PerformLiveUpdateAsyncTask
if (context instanceof AbstractDownloadActivity) {
AbstractDownloadActivity activity = (AbstractDownloadActivity) context;
activity.setSupportProgressBarIndeterminateVisibility(true);
OsmandSettings settings = activity.getMyApplication().getSettings();
}
final OsmandApplication myApplication = getMyApplication();
OsmandSettings.CommonPreference<Long> lastCheckPreference =
@ -70,14 +72,12 @@ public class PerformLiveUpdateAsyncTask
final OsmandApplication application = getMyApplication();
final OsmandSettings settings = application.getSettings();
if (result.errorMessage != null) {
Toast.makeText(context, result.errorMessage, Toast.LENGTH_SHORT).show();
LOG.info(result.errorMessage);
tryRescheduleDownload(context, settings, localIndexInfo);
} else {
settings.LIVE_UPDATES_RETRIES.resetToDefault();
List<IncrementalChangesManager.IncrementalUpdate> ll = result.getItemsForUpdate();
if (ll.isEmpty()) {
Toast.makeText(context, R.string.no_updates_available, Toast.LENGTH_SHORT).show();
} else {
if (!ll.isEmpty()) {
ArrayList<IndexItem> itemsToDownload = new ArrayList<>(ll.size());
for (IncrementalChangesManager.IncrementalUpdate iu : ll) {
IndexItem indexItem = new IndexItem(iu.fileName, "Incremental update",
@ -121,7 +121,7 @@ public class PerformLiveUpdateAsyncTask
}
public static void tryRescheduleDownload(Context context, OsmandSettings settings,
LocalIndexInfo localIndexInfo) {
LocalIndexInfo localIndexInfo) {
final OsmandSettings.CommonPreference<Integer> updateFrequencyPreference =
preferenceUpdateFrequency(localIndexInfo, settings);
final Integer frequencyOrdinal = updateFrequencyPreference.get();

View file

@ -1,27 +1,9 @@
package net.osmand.plus.liveupdates;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import net.osmand.PlatformUtil;
import net.osmand.map.WorldRegion;
import net.osmand.osm.io.NetworkUtils;
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandActionBarActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
import org.apache.commons.logging.Log;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -32,39 +14,63 @@ import android.widget.TextView;
import com.google.gson.Gson;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link ReportsFragment.OnFragmentInteractionListener} interface
* to handle interaction events.
* Use the {@link ReportsFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ReportsFragment extends BaseOsmAndFragment {
import net.osmand.PlatformUtil;
import net.osmand.map.WorldRegion;
import net.osmand.osm.io.NetworkUtils;
import net.osmand.plus.R;
import net.osmand.plus.base.BaseOsmAndFragment;
import org.apache.commons.logging.Log;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
public class ReportsFragment extends BaseOsmAndFragment implements SearchSelectionFragment.OnFragmentInteractionListener {
public static final String TITLE = "Report";
public static final String TOTAL_CHANGES_BY_MONTH_URL_PATTERN = "http://download.osmand.net/" +
"reports/query_report.php?report=total_changes_by_month&month=%s&region=%s";
private static final Log LOG = PlatformUtil.getLog(ReportsFragment.class);
private TextView contributorsTextView;
private TextView editsTextView;
private Spinner montReportsSpinner;
private Spinner regionReportsSpinner;
private MonthsForReportsAdapter monthsForReportsAdapter;
private RegionsForReportsAdapter regionsForReportsAdapter;
CountrySearchSelectionFragment searchSelectionFragment = new CountrySearchSelectionFragment();
private TextView countryNameTextView;
HashMap<String, String> queryRegionNames = new HashMap<>();
ArrayList<String> regionNames = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
initCountries();
View view = inflater.inflate(R.layout.fragment_reports, container, false);
montReportsSpinner = (Spinner) view.findViewById(R.id.montReportsSpinner);
monthsForReportsAdapter = new MonthsForReportsAdapter(getActivity());
montReportsSpinner.setAdapter(monthsForReportsAdapter);
regionReportsSpinner = (Spinner) view.findViewById(R.id.regionReportsSpinner);
regionsForReportsAdapter = new RegionsForReportsAdapter(getMyActivity());
regionsForReportsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
regionReportsSpinner.setAdapter(regionsForReportsAdapter);
View regionReportsButton = view.findViewById(R.id.reportsButton);
regionReportsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SearchSelectionFragment countrySearchSelectionFragment =
searchSelectionFragment;
countrySearchSelectionFragment
.show(getChildFragmentManager(), "CountriesSearchSelectionFragment");
}
});
countryNameTextView = (TextView) regionReportsButton.findViewById(android.R.id.text1);
countryNameTextView.setText(regionNames.get(0));
setThemedDrawable(view, R.id.calendarImageView, R.drawable.ic_action_data);
setThemedDrawable(view, R.id.regionIconImageView, R.drawable.ic_world_globe_dark);
@ -88,29 +94,28 @@ public class ReportsFragment extends BaseOsmAndFragment {
}
};
montReportsSpinner.setOnItemSelectedListener(onItemSelectedListener);
regionReportsSpinner.setOnItemSelectedListener(onItemSelectedListener);
return view;
}
public void requestAndUpdateUi() {
int monthItemPosition = montReportsSpinner.getSelectedItemPosition();
String monthUrlString = monthsForReportsAdapter.getQueryString(monthItemPosition);
int regionItemPosition = regionReportsSpinner.getSelectedItemPosition();
String regionUrlString = regionsForReportsAdapter.getQueryString(regionItemPosition);
regionUrlString = regionUrlString == null ? "" : regionUrlString;
String countryUrlString = queryRegionNames.get(countryNameTextView.getText().toString());
GetJsonAsyncTask.OnResponseListener<Protocol.TotalChangesByMonthResponse> onResponseListener =
new GetJsonAsyncTask.OnResponseListener<Protocol.TotalChangesByMonthResponse>() {
@Override
public void onResponse(Protocol.TotalChangesByMonthResponse response) {
if (contributorsTextView != null) {
contributorsTextView.setText(String.valueOf(response.users));
}
if (editsTextView != null) {
editsTextView.setText(String.valueOf(response.changes));
if (response != null) {
if (contributorsTextView != null) {
contributorsTextView.setText(String.valueOf(response.users));
}
if (editsTextView != null) {
editsTextView.setText(String.valueOf(response.changes));
}
}
}
};
requestData(monthUrlString, regionUrlString, onResponseListener);
requestData(monthUrlString, countryUrlString, onResponseListener);
}
private void requestData(String monthUrlString, String regionUrlString,
@ -122,6 +127,80 @@ public class ReportsFragment extends BaseOsmAndFragment {
totalChangesByMontAsyncTask.execute(finalUrl);
}
@Override
public void onSearchResult(String name) {
countryNameTextView.setText(name);
requestAndUpdateUi();
}
private void initCountries() {
final WorldRegion root = getMyApplication().getRegions().getWorldRegion();
ArrayList<WorldRegion> groups = new ArrayList<>();
groups.add(root);
processGroup(root, groups, getActivity());
Collections.sort(groups, new Comparator<WorldRegion>() {
@Override
public int compare(WorldRegion lhs, WorldRegion rhs) {
if (lhs == root) {
return -1;
}
if (rhs == root) {
return 1;
}
return getHumanReadableName(lhs).compareTo(getHumanReadableName(rhs));
}
});
for (WorldRegion group : groups) {
String name = getHumanReadableName(group);
regionNames.add(name);
queryRegionNames.put(name, group.getRegionDownloadName());
}
}
private static String getHumanReadableName(WorldRegion group) {
String name;
if (group.getLevel() > 2 || (group.getLevel() == 2
&& group.getSuperregion().getRegionId().equals(WorldRegion.RUSSIA_REGION_ID))) {
WorldRegion parent = group.getSuperregion();
WorldRegion parentsParent = group.getSuperregion().getSuperregion();
if (group.getLevel() == 3) {
if (parentsParent.getRegionId().equals(WorldRegion.RUSSIA_REGION_ID)) {
name = parentsParent.getLocaleName() + " " + group.getLocaleName();
} else if (!parent.getRegionId().equals(WorldRegion.UNITED_KINGDOM_REGION_ID)) {
name = parent.getLocaleName() + " " + group.getLocaleName();
} else {
name = group.getLocaleName();
}
} else {
name = parent.getLocaleName() + " " + group.getLocaleName();
}
} else {
name = group.getLocaleName();
}
if (name == null) {
name = "";
}
return name;
}
public String getQueryString(int position) {
return queryRegionNames.get(position);
}
private static void processGroup(WorldRegion group,
List<WorldRegion> nameList,
Context context) {
if (group.isRegionMapDownload()) {
nameList.add(group);
}
if (group.getSubregions() != null) {
for (WorldRegion g : group.getSubregions()) {
processGroup(g, nameList, context);
}
}
}
private static class MonthsForReportsAdapter extends ArrayAdapter<String> {
private static final SimpleDateFormat queryFormat = new SimpleDateFormat("yyyy-MM", Locale.US);
@SuppressLint("SimpleDateFormat")
@ -150,77 +229,6 @@ public class ReportsFragment extends BaseOsmAndFragment {
}
}
private static class RegionsForReportsAdapter extends ArrayAdapter<String> {
ArrayList<String> queryRegionNames = new ArrayList<>();
public RegionsForReportsAdapter(final OsmandActionBarActivity context) {
super(context, R.layout.reports_for_spinner_item, android.R.id.text1);
final WorldRegion root = context.getMyApplication().getRegions().getWorldRegion();
ArrayList<WorldRegion> groups = new ArrayList<>();
groups.add(root);
processGroup(root, groups, context);
Collections.sort(groups, new Comparator<WorldRegion>() {
@Override
public int compare(WorldRegion lhs, WorldRegion rhs) {
if (lhs == root) {
return -1;
}
if (rhs == root) {
return 1;
}
return getHumanReadableName(lhs).compareTo(getHumanReadableName(rhs));
}
});
for (WorldRegion group : groups) {
String name = getHumanReadableName(group);
add(name);
queryRegionNames.add(group.getRegionDownloadName());
}
}
private static String getHumanReadableName(WorldRegion group) {
String name;
if(group.getLevel() > 2 || (group.getLevel() == 2
&& group.getSuperregion().getRegionId().equals(WorldRegion.RUSSIA_REGION_ID))) {
WorldRegion parent = group.getSuperregion();
WorldRegion parentsParent = group.getSuperregion().getSuperregion();
if(group.getLevel() == 3) {
if(parentsParent.getRegionId().equals(WorldRegion.RUSSIA_REGION_ID)) {
name = parentsParent.getLocaleName() + " " + group.getLocaleName();
} else if (!parent.getRegionId().equals(WorldRegion.UNITED_KINGDOM_REGION_ID)) {
name = parent.getLocaleName() + " " + group.getLocaleName();
} else {
name = group.getLocaleName();
}
} else {
name = parent.getLocaleName() + " " + group.getLocaleName();
}
} else {
name = group.getLocaleName();
}
return name;
}
public String getQueryString(int position) {
return queryRegionNames.get(position);
}
private static void processGroup(WorldRegion group,
List<WorldRegion> nameList,
Context context) {
if (group.isRegionMapDownload()) {
nameList.add(group);
}
if (group.getSubregions() != null) {
for (WorldRegion g : group.getSubregions()) {
processGroup(g, nameList, context);
}
}
}
}
public static class GetJsonAsyncTask<P> extends AsyncTask<String, Void, P> {
private static final Log LOG = PlatformUtil.getLog(GetJsonAsyncTask.class);
private final Class<P> protocolClass;
@ -258,4 +266,10 @@ public class ReportsFragment extends BaseOsmAndFragment {
}
}
public static class CountrySearchSelectionFragment extends SearchSelectionFragment {
@Override
protected ArrayList<String> getList() {
return ((ReportsFragment) getParentFragment()).regionNames;
}
}
}

View file

@ -0,0 +1,101 @@
package net.osmand.plus.liveupdates;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import net.osmand.plus.R;
import net.osmand.plus.base.BaseOsmAndDialogFragment;
import java.util.ArrayList;
public abstract class SearchSelectionFragment extends BaseOsmAndDialogFragment {
private OnFragmentInteractionListener mListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_search_list, container, false);
ListView listView = (ListView) view.findViewById(android.R.id.list);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getMyActivity(), android.R.layout.simple_list_item_1);
if (getArray() != null) {
adapter.addAll(getArray());
} else if (getList() != null){
adapter.addAll(getList());
} else {
throw new RuntimeException("Either getArray() or getList() must return non null value.");
}
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mListener.onSearchResult(adapter.getItem(position));
dismiss();
}
});
final EditText searchEditText = (EditText) view.findViewById(R.id.searchEditText);
searchEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s);
}
});
ImageButton clearButton = (ImageButton) view.findViewById(R.id.clearButton);
setThemedDrawable(clearButton, R.drawable.ic_action_remove_dark);
clearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return view;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else if (getParentFragment() instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) getParentFragment();
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
protected String[] getArray() {
return null;
}
protected ArrayList<String> getList() {
return null;
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
void onSearchResult(String name);
}
}

View file

@ -60,6 +60,7 @@ import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.BaseOsmAndDialogFragment;
import net.osmand.plus.osmedit.dialogs.PoiSubTypeDialogFragment;
import net.osmand.plus.osmedit.dialogs.PoiTypeDialogFragment;
import net.osmand.util.Algorithms;
@ -73,7 +74,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class EditPoiDialogFragment extends DialogFragment {
public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
public static final String TAG = "EditPoiDialogFragment";
private static final Log LOG = PlatformUtil.getLog(EditPoiDialogFragment.class);
@ -103,9 +104,9 @@ public class EditPoiDialogFragment extends DialogFragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
OsmandSettings settings = getMyApplication().getSettings();
OsmEditingPlugin plugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class);
if (settings.OFFLINE_EDITION.get() || !settings.isInternetConnectionAvailable(true)) {
if (getSettings().OFFLINE_EDITION.get()
|| !getSettings().isInternetConnectionAvailable(true)) {
mOpenstreetmapUtil = plugin.getPoiModificationLocalUtil();
} else {
mOpenstreetmapUtil = plugin.getPoiModificationRemoteUtil();
@ -115,23 +116,11 @@ public class EditPoiDialogFragment extends DialogFragment {
editPoiData = new EditPoiData(node, getMyApplication());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isLightTheme = ((OsmandApplication) getActivity().getApplication())
.getSettings().OSMAND_THEME.get() == OsmandSettings.OSMAND_LIGHT_THEME;
int themeId = isLightTheme ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme;
setStyle(STYLE_NO_FRAME, themeId);
getActivity().getWindow()
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_edit_poi, container, false);
final OsmandSettings settings = getMyApplication().getSettings();
boolean isLightTheme = settings.OSMAND_THEME.get() == OsmandSettings.OSMAND_LIGHT_THEME;
boolean isLightTheme = getSettings().OSMAND_THEME.get() == OsmandSettings.OSMAND_LIGHT_THEME;
if (savedInstanceState != null) {
@SuppressWarnings("unchecked")
@ -204,8 +193,7 @@ public class EditPoiDialogFragment extends DialogFragment {
final int colorId = isLightTheme ? R.color.inactive_item_orange : R.color.dash_search_icon_dark;
final int color = getResources().getColor(colorId);
onlineDocumentationButton.setImageDrawable(getMyApplication().getIconsCache()
.getPaintedContentIcon(R.drawable.ic_action_help, color));
onlineDocumentationButton.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_help, color));
final ImageButton poiTypeButton = (ImageButton) view.findViewById(R.id.poiTypeButton);
poiTypeButton.setOnClickListener(new View.OnClickListener() {
@Override
@ -548,10 +536,6 @@ public class EditPoiDialogFragment extends DialogFragment {
}
}
private OsmandApplication getMyApplication() {
return (OsmandApplication) getActivity().getApplication();
}
public static EditPoiDialogFragment createAddPoiInstance(double latitude, double longitude,
OsmandApplication application) {
Node node = new Node(latitude, longitude, -1);

View file

@ -1,20 +1,15 @@
package net.osmand.plus.resources;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.HandlerThread;
import android.text.format.DateFormat;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import net.osmand.AndroidUtils;
import net.osmand.GeoidAltitudeCorrection;
@ -58,15 +53,20 @@ import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.HandlerThread;
import android.text.format.DateFormat;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Resource manager is responsible to work with all resources
@ -620,10 +620,8 @@ public class ResourceManager {
collectFiles(context.getAppPath(IndexConstants.SRTM_INDEX_DIR), IndexConstants.BINARY_MAP_INDEX_EXT, files);
}
if(context.getSettings().BETA_TESTING_LIVE_UPDATES.get()) {
changesManager.collectChangesFiles(context.getAppPath(IndexConstants.LIVE_INDEX_DIR), IndexConstants.BINARY_MAP_INDEX_EXT, files);
}
changesManager.collectChangesFiles(context.getAppPath(IndexConstants.LIVE_INDEX_DIR), IndexConstants.BINARY_MAP_INDEX_EXT, files);
Collections.sort(files, Algorithms.getFileVersionComparator());
List<String> warnings = new ArrayList<String>();
renderer.clearAllResources();

View file

@ -0,0 +1,85 @@
package net.osmand.plus.views;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.PointF;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import net.osmand.PlatformUtil;
import org.apache.commons.logging.Log;
public class DoubleTapScaleDetector {
private static final Log LOG = PlatformUtil.getLog(DoubleTapScaleDetector.class);
private static final int DOUBLE_TAPPING_DELTA = ViewConfiguration.getTapTimeout() + 100;
private static final int DP_PER_1X = 100;
private final DoubleTapZoomListener listener;
protected final Context ctx;
private long startTime = 0;
private boolean isDoubleTapping = false;
private float startX;
private float startY;
public DoubleTapScaleDetector(Context ctx, DoubleTapZoomListener listener) {
this.ctx = ctx;
this.listener = listener;
}
public boolean onTouchEvent(MotionEvent event) {
if (event.getPointerCount() != 1) {
return false;
}
long currentTime = System.currentTimeMillis();
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isDoubleTapping) {
isDoubleTapping = false;
listener.onZoomEnded(1, 0);
return true;
} else {
startTime = currentTime;
return true;
}
} else if (event.getAction() == MotionEvent.ACTION_DOWN && !isDoubleTapping
&& currentTime - startTime < DOUBLE_TAPPING_DELTA) {
isDoubleTapping = true;
startX = event.getX();
startY = event.getY();
listener.onGestureInit(startX, startY, startX, startY);
listener.onZoomStarted(new PointF(startX, startY));
return true;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (isDoubleTapping) {
float delta = convertPxToDp((int) (startY - event.getY()));
float scaleDelta = delta / DP_PER_1X;
float scale = 1 - scaleDelta;
listener.onZoomingOrRotating(scale, 0);
return true;
} else {
return false;
}
}
return false;
}
public boolean isInZoomMode() {
return isDoubleTapping;
}
private int convertPxToDp(int px) {
return Math.round(px / (Resources.getSystem().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
public interface DoubleTapZoomListener {
public void onZoomStarted(PointF centerPoint);
public void onZoomingOrRotating(double relativeToStart, float angle);
public void onZoomEnded(double relativeToStart, float angleRelative);
public void onGestureInit(float x1, float y1, float x2, float y2);
}
}

View file

@ -1,10 +1,33 @@
package net.osmand.plus.views;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.PointF;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import net.osmand.PlatformUtil;
import net.osmand.access.AccessibilityActionsProvider;
@ -30,32 +53,10 @@ import net.osmand.util.MapUtils;
import org.apache.commons.logging.Log;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.PointF;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class OsmandMapTileView implements IMapDownloaderCallback {
@ -160,6 +161,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
private Paint paintImg;
private boolean afterTwoFingerTap = false;
private DoubleTapScaleDetector doubleTapScaleDetector;
TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() {
@Override
public void onTwoFingerTap() {
@ -211,6 +213,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
animatedDraggingThread = new AnimateDraggingMapThread(this);
gestureDetector = new GestureDetector(ctx, new MapExplorer(this, new MapTileViewOnGestureListener()));
multiTouchSupport = new MultiTouchSupport(ctx, new MapTileViewMultiTouchZoomListener());
doubleTapScaleDetector = new DoubleTapScaleDetector(ctx, new MapTileViewMultiTouchZoomListener());
WindowManager mgr = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
dm = new DisplayMetrics();
@ -573,7 +576,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
}
if (showMapPosition || animatedDraggingThread.isAnimatingZoom()) {
drawMapPosition(canvas, c.x, c.y);
} else if(multiTouchSupport.isInZoomMode()) {
} else if(multiTouchSupport.isInZoomMode() || doubleTapScaleDetector.isInZoomMode()) {
drawMapPosition(canvas, multiTouchSupport.getCenterPoint().x, multiTouchSupport.getCenterPoint().y);
}
}
@ -767,9 +770,11 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
return true;
}
}
if (!multiTouchSupport.onTouchEvent(event)) {
if (!doubleTapScaleDetector.onTouchEvent(event)) {
if (!multiTouchSupport.onTouchEvent(event)) {
/* return */
gestureDetector.onTouchEvent(event);
gestureDetector.onTouchEvent(event);
}
}
return true;
}
@ -820,7 +825,8 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
}
private class MapTileViewMultiTouchZoomListener implements MultiTouchZoomListener {
private class MapTileViewMultiTouchZoomListener implements MultiTouchZoomListener,
DoubleTapScaleDetector.DoubleTapZoomListener {
private PointF initialMultiTouchCenterPoint;
private RotatedTileBox initialViewport;
private float x1;
@ -992,6 +998,24 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
}
}
private class MapOnScaleGestureListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
private double scaleFactor;
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
scaleFactor = 1;
return true;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
log.debug("Scale factor=" + detector.getScaleFactor());
scaleFactor *= detector.getScaleFactor();
getAnimatedDraggingThread().startZooming(getZoom() - 1, currentViewport.getZoomFloatPart(), true);
return true;
}
}
public Resources getResources() {
return application.getResources();
}