This commit is contained in:
GaidamakUA 2015-10-22 11:02:29 +03:00
commit 7b52b13a94
25 changed files with 391 additions and 241 deletions

View file

@ -1,6 +1,7 @@
package net.osmand.util;
import net.osmand.IProgress;
import net.osmand.PlatformUtil;
import org.apache.commons.logging.Log;
@ -311,6 +312,21 @@ public class Algorithms {
}
}
public static void streamCopy(InputStream in, OutputStream out, IProgress pg, int bytesDivisor) throws IOException{
byte[] b = new byte[BUFFER_SIZE];
int read;
int cp = 0;
while ((read = in.read(b)) != -1) {
out.write(b, 0, read);
cp += read;
if(pg != null && cp > bytesDivisor) {
pg.progress(cp / bytesDivisor);
cp = cp % bytesDivisor;
}
}
}
public static void oneByteStreamCopy(InputStream in, OutputStream out) throws IOException{
int read;
while ((read = in.read()) != -1) {

View file

@ -727,11 +727,10 @@ public class OpeningHoursParser {
}
// check if valid
final OpeningHoursRule r1 = parseRule(r);
boolean rule = r1 instanceof UnparseableRule;
if (!rule) {
return null;
boolean rule = r1 instanceof BasicOpeningHourRule;
if (rule) {
rs.addRule(r1);
}
rs.addRule(r1);
}
return rs;
}

View file

@ -139,7 +139,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_weight="0.4"
android:layout_weight="0.45"
android:orientation="vertical" >
<LinearLayout
@ -180,12 +180,12 @@
android:src="@drawable/ic_action_test_light" />
</LinearLayout>
</LinearLayout>
<!-- empty block to not let widgets grow more than 40% -->
<!-- empty block to not let widgets grow more than 45% -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0.6" >
android:layout_weight="0.55" >
</LinearLayout>
</LinearLayout>
@ -197,19 +197,19 @@
android:orientation="horizontal"
android:weightSum="1" >
<!-- empty block to not let widgets grow more than 40% -->
<!-- empty block to not let widgets grow more than 45% -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0.6" >
android:layout_weight="0.55" >
</LinearLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:layout_weight="0.4" >
android:layout_weight="0.45" >
<LinearLayout
android:layout_width="wrap_content"

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/widget_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -59,8 +60,9 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:maxLines="1"
android:singleLine="true"
android:minWidth="10dp"
android:text="1048"
tools:text="1048"
android:textColor="@color/color_white"
android:textSize="@dimen/map_widget_text_size" />
@ -70,8 +72,9 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:maxLines="1"
android:singleLine="true"
android:minWidth="10dp"
android:text="1048"
tools:text="1048"
android:textColor="@color/color_black"
android:textSize="@dimen/map_widget_text_size" />
</FrameLayout>
@ -89,7 +92,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="km"
android:singleLine="true"
tools:text="km"
android:textColor="@color/color_white"
android:textSize="@dimen/map_widget_text_size_small" />
@ -98,7 +102,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="km"
android:singleLine="true"
tools:text="km"
android:textColor="@color/color_black"
android:textSize="@dimen/map_widget_text_size_small" />
</FrameLayout>

View file

@ -179,10 +179,10 @@
<string name="poi_context_menu_showdescription">Mostra la descripció del PDI</string>
<string name="index_name_france">Europa - França</string>
<string name="index_name_germany">Europa - Alemanya</string>
<string name="index_name_russia">Europa/Àsia - Rússia</string>
<string name="index_name_russia">Rússia</string>
<string name="index_name_africa">Àfrica</string>
<string name="index_name_asia">Àsia</string>
<string name="index_name_oceania">Oceania</string>
<string name="index_name_oceania">Austràlia i Oceania</string>
<string name="index_name_voice">Indicadors de veu (enregistrats, funcionalitats limitades)</string>
<string name="amenity_type_osmwiki">Viquipèdia (fora de línia)</string>
<string name="routing_settings">Navegació</string>

View file

@ -2252,8 +2252,8 @@
<string name="poi_cairn">Varde</string>
<string name="poi_memorial_fassade_decoration">Fassade dekoration</string>
<string name="poi_defibrillator">Defibrillator</string>
<string name="poi_defibrillator_yes">Defibrillator: Ja</string>
<string name="poi_defibrillator">Hjertestarter</string>
<string name="poi_defibrillator_yes">Hjertestarter: Ja</string>
<string name="poi_tomb_war_grave">Type: krigsgrav</string>
<string name="poi_tomb_tumulus">Type: gravhøj</string>

View file

@ -1929,4 +1929,31 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="rendering_attr_showCycleRoutes_name">Mostrar rotas para bicicletas</string>
<string name="rendering_attr_hideBuildings_name">Ocultar edifícios</string>
<string name="rendering_attr_trolleybusRoutes_name">Rotas de trólebus</string>
<string name="favorite_category_dublicate_message">O nome escolhido já existe nessa categoria. Por favor, defina outro nome.</string>
<string name="favorite_category_name">Nome da Categoria</string>
<string name="favorite_category_add_new_title">Adicionar nova Categoria</string>
<string name="regions">Regiões</string>
<string name="region_maps">Mapas de Regiões</string>
<string name="world_maps">Mapas Mundiais</string>
<string name="hillshade_layer_disabled">Camada de Sombra de colinas desligada</string>
<string name="srtm_plugin_disabled">Curvas de Nível desligadas</string>
<string name="favorite_category_add_new">Adicionar novo</string>
<string name="favorite_category_select">Seleccionar Categoria</string>
<string name="default_speed_system_descr">Definir unidades de medida para velocidade</string>
<string name="default_speed_system">Unidades de medida para velocidade</string>
<string name="si_nm">Milhas Náuticas</string>
<string name="si_kmh">Quilómetros por Hora</string>
<string name="si_mph">Milhas por Hora</string>
<string name="si_m_s">Metros por Segundo</string>
<string name="si_min_km">Minutos por Quilómetro</string>
<string name="si_min_m">Minutos por Milha</string>
<string name="si_nm_h">Milhas náuticas por hora (nó)</string>
<string name="nm_h">mn/h</string>
<string name="min_mile">min/m</string>
<string name="min_km">min/km</string>
<string name="m_s">m/s</string>
<string name="shared_string_trip_recording">Gravar Viagem</string>
<string name="shared_string_navigation">Navegação</string>
<string name="nm">mn</string>
</resources>

View file

@ -8,8 +8,8 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="auto_follow_location_enabled">Đã kích hoạt thiết lập tự động bám theo.</string>
<string name="pref_vector_rendering">Thiết lập hiển thị Vector</string>
<string name="pref_overlay">Overlay / Underlay</string>
<string name="pref_raster_map">Thiết lập bản đồ source</string>
<string name="pref_overlay">Lớp phủ trên / Lớp phủ dưới</string>
<string name="pref_raster_map">Thiết lập bản đồ nguồn</string>
<string name="pref_vector_map">Thiết lập bản đồ vector</string>
<string name="delete_confirmation_msg">Bạn có muốn xóa %1$s?</string>
<string name="city_type_suburb">Ngoại thành</string>
@ -23,19 +23,19 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="file_can_not_be_renamed">Không thể đổi tên tập tin.</string>
<string name="file_with_name_already_exists">Tên tập tin đã có.</string>
<string name="gpx_navigation">Tuyến GPX</string>
<string name="poi_query_by_name_matches_categories">Tìm thấy một số danh mục POI theo yêu cầu tìm kiếm:</string>
<string name="data_to_search_poi_not_available">Dữ liệu tìm kiếm POI không có.</string>
<string name="poi_query_by_name_matches_categories">Tìm thấy một số danh mục địa điểm theo yêu cầu tìm kiếm:</string>
<string name="data_to_search_poi_not_available">Dữ liệu tìm kiếm địa điểm không có.</string>
<string name="poi_filter_by_name">Tìm theo tên</string>
<string name="old_poi_file_should_be_deleted">Tập dữ liệu POI \'%1$s\' thừa, có thể xóa tập tin này.</string>
<string name="update_poi_file_not_found">Local file to maintain POI changes not found and could not be created.</string>
<string name="update_poi_does_not_change_indexes">POI changes inside application do not affect downloaded map files, changes are saved to local file instead.</string>
<string name="old_poi_file_should_be_deleted">Tập dữ liệu địa điểm \'%1$s\' thừa, có thể xóa tập tin này.</string>
<string name="update_poi_file_not_found">Tập tin địa phương để duy trì những thay đổi địa điểm không tìm thấy và không thể được tạo ra.</string>
<string name="update_poi_does_not_change_indexes">Thay đổi địa điểm bên trong ứng dụng không ảnh hưởng đến các tập tin bản đồ tải về, những thay đổi sẽ được lưu vào tập tin địa phương để thay thế.</string>
<string name="button_upgrade_osmandplus">Nâng cấp OsmAnd+</string>
<string name="map_version_changed_info">Máy chủ lưu trữ tập tin bản đồ không tương thích với phiên bản hiện tại. Để tải về và dùng được các tập tin này, vui lòng nâng cấp ứng dụng lên phiên bản mới hơn.</string>
<string name="shared_string_rename">Đổi tên</string>
<string name="poi_filter_nominatim">Online Nominatim</string>
<string name="poi_filter_nominatim">Tìm kiếm cụ thể online</string>
<string name="search_position_current_location_search">Đang tìm vị trí…</string>
<string name="search_position_current_location_found">Vị trí (Đã tìm thấy)</string>
<string name="search_position_address">Địa chỉ…</string>
@ -59,7 +59,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="local_index_mi_upload_gpx">Gửi đến OSM</string>
<string name="show_more_map_detail">Hiển thị chi tiết hơn</string>
<string name="show_more_map_detail_descr">Show some vector map detail (roads etc.) at lower zooms already</string>
<string name="show_more_map_detail_descr">Đã hiện một số chi tiết bản đồ vector (đường giao thông, vv) ở mức phóng thấp hơn</string>
<string name="favourites_delete_multiple_succesful">Đã xóa các điểm ưa thích.</string>
<string name="favorite_delete_multiple">Bạn sẽ xóa %1$d ưa thích và %2$d nhóm ưa thích. Bạn có chắc về điều này?</string>
@ -89,32 +89,32 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="local_index_mi_reload">Làm tươi</string>
<string name="shared_string_download">Tải xuống</string>
<string name="local_index_poi_data">dữ liệu POI</string>
<string name="local_index_poi_data">dữ liệu địa điểm</string>
<string name="local_index_address_data">dữ liệu Địa chỉ</string>
<string name="local_index_transport_data">Dữ liệu giao thông</string>
<string name="local_index_map_data">Dữ liệu bản đồ</string>
<string name="local_indexes_cat_backup">Sao lưu</string>
<string name="local_indexes_cat_tts">Dữ liệu giọng nói(TTS)</string>
<string name="local_indexes_cat_tts">Dữ liệu giọng nói (TTS)</string>
<string name="local_indexes_cat_voice">Dữ liệu giọng nói (media)</string>
<string name="local_indexes_cat_tile">Dữ liệu bản đồ (tiles)</string>
<string name="local_indexes_cat_map">Dữ liệu bản đồ (vector)</string>
<string name="local_indexes_cat_poi">Dữ liệu POI</string>
<string name="local_indexes_cat_poi">Dữ liệu địa điểm</string>
<string name="ttsvoice">Giọng đọc TTS</string>
<string name="search_offline_clear_search">Tìm kiếm mới</string>
<string name="map_text_size_descr">Chọn kích thước chữ trên bản đồ</string>
<string name="map_text_size">Kích thước chữ</string>
<string name="trace_rendering">Hiển thị thông tin debug</string>
<string name="trace_rendering_descr">Display rendering performance</string>
<string name="trace_rendering_descr">Hiệu năng dựng hình hiển thị</string>
<string name="tip_recent_changes">Thay đổi gần đây</string>
<string name="voice_not_use">Không dùng</string>
<string name="installing_new_resources">Đang giải nén dữ liệu mới…</string>
<string name="internet_connection_required_for_online_route">An online routing service is selected but no internet connection is available.</string>
<string name="internet_connection_required_for_online_route">Một dịch vụ định tuyến trực tuyến được chọn nhưng không có kết nối Internet có sẵn.</string>
<string name="tts_language_not_supported_title">Ngôn ngữ không được hỗ trợ</string>
<string name="tts_language_not_supported">The selected language is not supported by the installed Android TTS (text-to-speech) engine. Do you want to go to the Market to look for another TTS engine? Otherwise the preset TTS language will be used.</string>
<string name="tts_language_not_supported">Ngôn ngữ được chọn không được hỗ trợ bởi công cụ Android TTS (text-to-speech) đã cài đặt. Bạn có muốn đi đến Market để tìm kiếm một công cụ TTS? Nếu không, ngôn ngữ TTS cài sẵn sẽ được sử dụng.</string>
<string name="tts_missing_language_data_title">Thiếu dữ liệu</string>
<string name="tts_missing_language_data">Ngôn ngữ được chọn không có dữ liệu. Bạn có muốn vào Market để cài đặt?</string>
@ -125,8 +125,8 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="tip_rotation_switching">Xoay bản đồ</string>
<string name="choose_audio_stream">Voice guidance output</string>
<string name="choose_audio_stream_descr">Choose channel to play voice guidance (system-dependent)</string>
<string name="choose_audio_stream">Đầu ra hướng dẫn bằng giọng nói</string>
<string name="choose_audio_stream_descr">Chọn kênh để chạy hướng dẫn bằng giọng nói (phụ thuộc vào hệ thống)</string>
<string name="voice_stream_voice_call">Voice call audio</string>
<string name="voice_stream_notification">Âm thanh thông báo</string>
<string name="voice_stream_music">Media/Nhạc</string>
@ -136,7 +136,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="map_transparency_descr">Thay đổi độ trong suốt cho bản đồ nền</string>
<string name="map_transparency">Độ trong suốt bản đồ nền</string>
<string name="modify_transparency">Thay đổi độ trong suốt</string>
<string name="layer_underlay">Bản đồ nền…</string>
<string name="layer_underlay">Lớp phủ nền…</string>
<string name="map_underlay">Bản đồ nền</string>
<string name="map_underlay_descr">Chọn bản đồ nền</string>
<string name="layer_overlay">Chồng phủ bản đồ…</string>
@ -151,9 +151,9 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="tip_update_index">Cập nhật của dữ liệu Offline</string>
<string name="tip_update_index_t">\tOsmAnd cung cấp trình quản lý download có thể kiểm tra các bản cập nhật cho dữ liệu offline.
\n\tĐể kiểm tra cập nhật, truy xuất vào \'Main Menu\' -&gt; \'Settings\' -&gt; \'Offline data\' -&gt; \'Download offline data\'. After region list is retrieved from the internet, you can select option \'Menu\' -&gt; \'Filter downloaded\' to indicate updates only for data already on your device.
\n\tThe availability of updates is depicted by the following colors:
\n\t\'Green\' - indicates data files identical on device and server
\n\t\'Blue\' - indicates available updates on server</string>
\n\tCác bản cập nhật sẵn có được mô tả bởi các màu sắc sau đây:
\n\t\'Green\' - chỉ ra các file dữ liệu giống hệt nhau trên thiết bị và máy chủ
\n\t\'Blue\' - chỉ ra các bản cập nhật có sẵn trên máy chủ</string>
<string name="level_to_switch_vector_raster_descr">Tỉ lệ nhỏ nhất để hiển thị bản đồ vector thay cho bản đồ ảnh</string>
<string name="level_to_switch_vector_raster">Tỉ lệ nhỏ nhất để xem bản đồ vector</string>
@ -167,14 +167,14 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="tip_favorites">Các điểm ưa thích</string>
<string name="tip_favorites_t">\tCác điểm thường xuyên được dùng có thể lưu vào mục Ưa thích.
\n\tTo save a point as Favorite go to the map context menu, select option \'Add to favorites\' and then enter a name for it. After saving a Favorite, it is accessible via \'Main Menu\' -&gt; \'Favorites\'.
\n\tLong pressing on a Favorite in the \'Favorites\' menu provides options to Navigate to, Edit or Delete it.
\n\tTo display all Favorite points directly on the map, enable layer \'Favorites\' in \'Map context menu\' -&gt;\'Define view\'.</string>
\n\tĐể lưu một điểm như Yêu thích, đi đến menu ngữ cảnh của bản đồ, chọn tùy chọn \'Thêm vào Yêu thích \' và sau đó nhập tên cho nó. Sau khi lưu một Ưa thích, nó có thể truy cập thông qua \'Menu chính\' -&gt; \'Yêu thích\'.
\n\tGiữ lâu lên một Yêu thích trong \'Yêu thích\' menu cung cấp tùy chọn để hướng đến, sửa hay xóa nó.
\n\tĐể hiển thị tất cả các điểm yêu thích trực tiếp trên bản đồ, cho phép lớp \'Favorites\' trong \'Bản đồ menu ngữ cảnh \' -&gt;\'Xác định xem\'.</string>
<string name="tip_osm_improve">Cải thiện dữ liệu OSM</string>
<string name="create_poi_link_to_osm_doc">Phân loại bản đồ trên <u>Online OSM</u> với ảnh</string>
<string name="error_doing_search">Có lỗi khi tìm kiếm</string>
<string name="search_offline_geo_error">Could not parse geo intent \'%s\'</string>
<string name="search_offline_geo_error">Không thể phân tích geo intent \'%s\'</string>
<string name="search_osm_offline">Tìm kiếm địa chỉ bằng bản đồ Offline</string>
<string name="system_locale">Hệ thống</string>
@ -188,8 +188,8 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="tip_navigation_t">\tĐể tìm đường đi, trước hết bạn phải chọn một điểm đến. Sau đó vào \'Menu\'-&gt;\'Hướng đi\' trên bản đồ để chọn kiểu dẫn đường.</string>
<string name="tip_search">Tìm kiếm</string>
<string name="tip_search_t">\tYou can search for places directly on the map, or by address, by location, as POI, or as predefined favorite.
\n\tPressing \'Search\' in the main menu opens the search activities. For all hits a context menu offers 2 options: \'Navigate to\' or \'Show on map\'.</string>
<string name="tip_search_t">\tBạn có thể tìm kiếm các địa điểm trực tiếp trên bản đồ, hoặc theo địa chỉ, theo vị trí, như địa điểm, hoặc như yêu thích được xác định trước.
\n\tPressing \'Search\' trong menu chính sẽ mở ra các hoạt động tìm kiếm. Đối với tất cả các số truy cập một menu ngữ cảnh có 2 lựa chọn: \'Điều hướng đến\' or \'Hiển thị trên bản đồ\'.</string>
<string name="tip_initial_t">\tOsmAnd là ứng dụng định vị trên Android với nhiều tính năng.
@ -204,9 +204,9 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="send_location_email_pattern">To see location follow the web browser link %1$s or android intent link %2$s</string>
<string name="send_location">Gửi vị trí</string>
<string name="context_menu_item_share_location">Chia sẻ vị trí</string>
<string name="add_waypoint_dialog_added">Waypoint \'\'{0}\'\' được thêm vào thành công</string>
<string name="add_waypoint_dialog_title">Thêm waypoint vào track GPX</string>
<string name="context_menu_item_add_waypoint">Thêm GPX waypoint</string>
<string name="add_waypoint_dialog_added">Đích đến \'\'{0}\'\' được thêm vào thành công</string>
<string name="add_waypoint_dialog_title">Thêm đích đến vào theo dõi GPX</string>
<string name="context_menu_item_add_waypoint">Thêm điểm đến GPX</string>
<string name="amenity_type_administrative">Hành chính</string>
<string name="amenity_type_barrier">Rào chắn</string>
<string name="amenity_type_education">Giáo dục</string>
@ -225,7 +225,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="amenity_type_other">Mục khác</string>
<string name="amenity_type_shop">Cửa hàng</string>
<string name="amenity_type_sport">Thể thao</string>
<string name="amenity_type_sustenance">Sustenance</string>
<string name="amenity_type_sustenance">đồ ăn</string>
<string name="amenity_type_tourism">Du lịch</string>
<string name="amenity_type_transportation">Giao thông</string>
<string name="indexing_address">Đang tạo chỉ mục địa chỉ…</string>
@ -235,12 +235,12 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="shared_string_io_error">Có lỗi xảy ra với I/O</string>
<string name="old_map_index_is_not_supported">Định dạng dữ liệu \'\'{0}\'\' không được hỗ trợ</string>
<string name="poi_filter_car_aid">Sửa Xe</string>
<string name="poi_filter_closest_poi">POI gần nhất</string>
<string name="poi_filter_closest_poi">Địa điểm gần nhất</string>
<string name="poi_filter_custom_filter">Tùy chỉnh bộ lọc</string>
<string name="poi_filter_food_shop">Ăn uống</string>
<string name="poi_filter_for_tourists">Du lịch</string>
<string name="poi_filter_fuel">Trạm Xăng</string>
<string name="poi_filter_namefinder">Online NameFinder</string>
<string name="poi_filter_namefinder">Tìm tên online</string>
<string name="reading_cached_tiles">Đang đọc các tiles đã được lưu sẵn…</string>
<string name="version_index_is_big_for_memory">Chỉ mục \'\'{0}\'\' lớn hơn bộ nhớ</string>
<string name="version_index_is_not_supported">Phiên bản chỉ mục \'\'{0}\'\' không được hỗ trợ</string>
@ -253,14 +253,14 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="application_dir">Thư mục lưu trữ</string>
<string name="osmand_net_previously_installed">A previous OsmAnd version is installed. All offline data will be supported by new the new application. But Favorite points should be exported in the old application and later imported by the new one.</string>
<string name="build_installed">Build {0} successfully installed ({1}).</string>
<string name="downloading_build">Downloading build</string>
<string name="osmand_net_previously_installed">Một phiên bản OsmAnd cũ đã được cài đặt. Tất cả các dữ liệu offline sẽ được hỗ trợ bởi mới các ứng dụng mới. Nhưng điểm yêu thích sẽ được xuất ra trong các ứng dụng cũ và sau đó được nhập vào bởi cái mới.</string>
<string name="build_installed">Phiên bản {0} được cài đặt thành công ({1}).</string>
<string name="downloading_build">Đang download phiên bản</string>
<string name="install_selected_build">Tiếp tục cài đặt OsmAnd - {0} từ {1} {2} MB ?</string>
<string name="loading_builds_failed">Retrieving the list of OsmAnd builds failed</string>
<string name="loading_builds_failed">Lấy danh sách các phiên bản OsmAnd thất bại</string>
<string name="loading_builds">Đang tải OsmAnd…</string>
<string name="select_build_to_install">Lựa chọn một bản OsmAnd để cài đặt</string>
<string name="contribution_activity">Special activity for contribution version</string>
<string name="contribution_activity">Hoạt động đặc biệt cho phiên bản đóng góp</string>
<string name="gps_status_app_not_found">Ứng dụng Tín hiệu GPS chưa được cài đặt. Tìm trong Market?</string>
<string name="voice_is_not_available_title">Không có giọng đọc nào được chọn</string>
@ -276,7 +276,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="filter_existing_indexes">Bộ lọc đã được tải</string>
<string name="shared_string_select_all">Lựa chọn tất cả</string>
<string name="shared_string_refresh">Làm tươi</string>
<string name="shared_string_refresh">Làm mới</string>
<string name="general_settings_descr">Các thiết lập chung cho ứng dụng</string>
<string name="general_settings">Thiết lập chung</string>
@ -310,7 +310,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="use_high_res_maps_descr">Cải thiện chất lượng hiển thị cho các thiết bị có độ phân giải cao</string>
<string name="unknown_location">Vị trí chưa được biết</string>
<string name="context_menu_item_search_transport">Search transport</string>
<string name="context_menu_item_search_transport">Tìm phương tiện giao thông</string>
<string name="transport_searching_transport">Transport results (no target):</string>
<string name="transport_searching_route">Transport results ({0} to target):</string>
@ -322,17 +322,17 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="map_route_by_gpx">Tìm đường bằng tập tin GPX</string>
<string name="gpx_files_not_found">Tập tin GPX không tìm thấy trong thư mục /track</string>
<string name="layer_gpx_layer">Track GPX…</string>
<string name="layer_gpx_layer">Theo dõi GPX…</string>
<string name="error_reading_gpx">Gặp lỗi khi đọc tập tin GPX</string>
<string name="vector_data">Bản đồ vector Offline</string>
<string name="transport_context_menu">Search transport at stop</string>
<string name="osb_bug_name">Bug</string>
<string name="poi_context_menu_modify">Sửa POI</string>
<string name="poi_context_menu_delete">Xóa POI</string>
<string name="rotate_map_compass_opt">To compass</string>
<string name="rotate_map_bearing_opt">To direction of movement</string>
<string name="poi_context_menu_modify">Sửa địa điểm</string>
<string name="poi_context_menu_delete">Xóa địa điểm</string>
<string name="rotate_map_compass_opt">Theo la bàn</string>
<string name="rotate_map_bearing_opt">Theo vị trí di chuyển</string>
<string name="rotate_map_none_opt">Không xoay</string>
<string name="rotate_map_to_bearing_descr">Chọn chế độ xoay</string>
<string name="rotate_map_to_bearing">Xoay bản đồ</string>
@ -341,7 +341,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="fav_file_to_load_not_found">Tập tin GPX chưa các điểm ưa thích không thấy tại {0}</string>
<string name="fav_saved_sucessfully">Các điểm ưa thích được lưu tới {0}</string>
<string name="no_fav_to_save">Không có điểm ưa thích được lưu</string>
<string name="shared_string_import">Import</string>
<string name="shared_string_import">Nhập</string>
<string name="error_occurred_loading_gpx">Có lỗi khi đọc tập tin GPX</string>
<string name="send_report">Gửi báo cáo</string>
@ -350,14 +350,14 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="any_poi">Bất kỳ</string>
<string name="shared_string_favorites">Ưa thích</string>
<string name="layer_transport">Điểm dừng giao thông</string>
<string name="layer_poi">POI</string>
<string name="layer_poi">Địa điểm</string>
<string name="layer_map">Nguồn bản đồ…</string>
<string name="menu_layers">Thiết lập Xem</string>
<string name="context_menu_item_search_poi">Tìm POI</string>
<string name="context_menu_item_search_poi">Tìm Địa điểm</string>
<string name="use_trackball_descr">Dùng trackball để di chuyển bản đồ</string>
<string name="use_trackball">Dùng trackball</string>
<string name="background_service_wait_int_descr">Set maximum waiting time for each background position fix</string>
<string name="background_service_wait_int_descr">Thiết lập thời gian chờ đợi tối đa cho từng vị trí sửa chữa nền</string>
<string name="background_service_wait_int">Thời gian chờ</string>
<string name="service_stop_background_service">Tắt dịch vụ dẫn đường ẩn</string>
<string name="where_am_i">Vị trí của tôi?</string>
@ -368,8 +368,8 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="int_min">phút</string>
<string name="background_service_int_descr">Thiết lập khoảng cách định vị khi sử dụng dịch vụ ngầm</string>
<string name="background_service_int">Khoảng cách Định vị</string>
<string name="background_service_provider_descr">Choose location provider for background service</string>
<string name="background_service_provider">Location provider</string>
<string name="background_service_provider_descr">Chọn nhà cung cấp địa điểm cho dịch vụ nền</string>
<string name="background_service_provider">Nhà cung cấp địa điểm</string>
<string name="background_router_service_descr">Bật chế độ chạy ngầm để lưu vị trí của bạn khi dùng trong thời gian dài</string>
<string name="background_router_service">Dùng dịch vụ chạy ngầm</string>
<string name="off_router_service_no_gps_available">Cần phải bật GPS khi sử dụng dịch vụ chạy ngầm.</string>
@ -416,22 +416,22 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="transport_stops">Dừng</string>
<string name="transport_finish_search">Kết thúc tìm kiếm</string>
<string name="transport_stop_to_go_out">Choose stop to get off</string>
<string name="transport_to_go_after">prior distance</string>
<string name="transport_to_go_before">subsequent distance</string>
<string name="transport_stops_to_pass">stops to pass</string>
<string name="transport_stop_to_go_out">Chọn điểm dừng để xuống</string>
<string name="transport_to_go_after">khoảng cách trước</string>
<string name="transport_to_go_before">khoảng cách tiếp theo</string>
<string name="transport_stops_to_pass">dừng lại để vượt qua</string>
<string name="transport_route_distance">Khoảng cách đường đi</string>
<string name="transport">Giao thông</string>
<string name="shared_string_ok">OK</string>
<string name="show_transport_over_map_description">Hiện các điểm dừng giao thông công cộng trên bản đồ</string>
<string name="show_transport_over_map">Hiện các điểm dừng giao thông</string>
<string name="hello">Ứng dụng tìm đường OsmAnd</string>
<string name="update_poi_success">Dữ liệu POI được cập nhật thành công (Đã thêm {0} POI)</string>
<string name="update_poi_error_local">Có lỗi khi cập nhật danh sách POI</string>
<string name="update_poi_success">Dữ liệu địa điểm được cập nhật thành công (Đã thêm {0} POI)</string>
<string name="update_poi_error_local">Có lỗi khi cập nhật danh sách địa điểm</string>
<string name="update_poi_error_loading">Có lỗi khi tải dữ liệu từ máy chủ</string>
<string name="update_poi_no_offline_poi_index">Không có dữ liệu POI Offline cho khu vực này</string>
<string name="update_poi_is_not_available_for_zoom">Updating POIs is not available for small zoom levels</string>
<string name="context_menu_item_update_poi">Cập nhật POI</string>
<string name="update_poi_no_offline_poi_index">Không có dữ liệu địa điểm Offline cho khu vực này</string>
<string name="update_poi_is_not_available_for_zoom">Cập nhật địa điểm không có sẵn cho các mức độ zoom nhỏ</string>
<string name="context_menu_item_update_poi">Cập nhật địa điểm</string>
<string name="context_menu_item_update_map_confirm">Cập nhật dữ liệu qua Internet?</string>
<string name="search_history_city">Thành phố:\n {0}</string>
<string name="search_history_street">Đường phố:\n {0}, {1}</string>
@ -474,11 +474,11 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="mark_final_location_first">Hãy chọn điểm cần đến</string>
<string name="get_directions">Hướng</string>
<string name="opening_hours">Opening hours</string>
<string name="opening_hours">Giờ mở cửa</string>
<string name="opening_changeset">Opening changeset…</string>
<string name="closing_changeset">Closing changeset…</string>
<string name="commiting_node">Committing node</string>
<string name="loading_poi_obj">Đang đọc POI</string>
<string name="commiting_node">Nút kết thúc</string>
<string name="loading_poi_obj">Đang đọc địa điểm</string>
<string name="auth_failed">Định danh thất bại</string>
<string name="failed_op">thất bại</string>
<string name="converting_names">Chuyển đổi tên gốc/tiếng Anh…</string>
@ -487,12 +487,12 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="loading_streets">Đang tải phố…</string>
<string name="loading_cities">Đang tải thành phố…</string>
<string name="poi">POI</string>
<string name="poi">Địa điểm</string>
<string name="error_occurred_saving_gpx">Có lỗi khi lưu GPX</string>
<string name="error_calculating_route">Có lỗi khi tìm đường đi</string>
<string name="error_calculating_route_occured">Error occurred while calculating route</string>
<string name="empty_route_calculated">Empty route is calculated</string>
<string name="new_route_calculated_dist">New route is calculated, distance</string>
<string name="error_calculating_route_occured">Lỗi xảy ra khi đang tính toán tuyến đường</string>
<string name="empty_route_calculated">Tuyến đường trống được tính</string>
<string name="new_route_calculated_dist">Tuyến đường mới được tính toán, khoảng cách</string>
<string name="arrived_at_destination">Bạn đã đến điểm đích</string>
<string name="invalid_locations">Khu vực không xác định!</string>
<string name="go_back_to_osmand">Quay lại bản đồ OsmAnd</string>
@ -518,7 +518,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="auto_zoom_map_descr">Tự động Zoom bản đồ theo tốc độ di chuyển</string>
<string name="auto_zoom_map">Tự động Zoom bản đồ</string>
<string name="additional_settings">Thiết lập thêm</string>
<string name="settings_preset_descr">Select a use profile. (Each profile\'s settings can be customized below.)</string>
<string name="settings_preset_descr">Chọn một cấu hình sử dụng. (Mỗi cấu hình\'s có thể được tùy chỉnh dưới đây.)</string>
<string name="settings_preset">Chế độ Ứng dụng</string>
<string name="shared_string_settings">Thiết lập</string>
<string name="save_current_track_descr">Lưu track hiện tại vào thẻ nhớ SD</string>
@ -530,7 +530,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="reload_tile">Tải lại tile</string>
<string name="user_name_descr">Tài khoản tại OpenStreetMap.org (OSM)</string>
<string name="user_name">Tài khoản OSM</string>
<string name="mark_point">Target</string>
<string name="mark_point">Mục tiêu</string>
<string name="show_osm_bugs_descr">Hiện OpenStreetBugs trên bản đồ</string>
<string name="show_osm_bugs">Hiện OpenStreetBugs</string>
@ -550,8 +550,8 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="map_view_3d_descr">Bật chế độ 3D</string>
<string name="map_view_3d">Chế độ 3D</string>
<string name="show_poi_over_map_description">Hiện POI trên bản đồ (sử dụng bộ lọc gần đây nhất)</string>
<string name="show_poi_over_map">Hiện POI</string>
<string name="show_poi_over_map_description">Hiện địa điểm trên bản đồ (sử dụng bộ lọc gần đây nhất)</string>
<string name="show_poi_over_map">Hiện địa điểm</string>
<string name="map_tile_source_descr">Chọn nguồn cho bản đồ tiles online/offline</string>
<string name="map_tile_source">Nguồn bản đồ Tile</string>
<string name="map_source">Nguồn bản đồ</string>
@ -570,7 +570,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="search_button">Tìm kiếm</string>
<string name="search_activity">Tìm kiếm</string>
<string name="searchpoi_activity">Chọn POI</string>
<string name="searchpoi_activity">Chọn địa điểm</string>
<string name="search_POI_level_btn">Tìm thêm</string>
<string name="incremental_search_city">Tìm tên thành phố tăng dần. Để tìm thị trấn/mã bưu điện, nhập 3 kí tự đầu tiên.</string>
<string name="incremental_search_street">Tìm tên phố tăng dần</string>
@ -603,7 +603,7 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="context_menu_item_update_map">Cập nhật bản đồ</string>
<string name="context_menu_item_open_bug">Mở OSM bug</string>
<string name="context_menu_item_create_poi">Tạo POI</string>
<string name="context_menu_item_create_poi">Tạo địa điểm</string>
<string name="shared_string_yes">OK</string>
<string name="shared_string_cancel">Hủy</string>
@ -638,13 +638,13 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="osb_close_dialog_success">Bug đã được đóng thành công</string>
<string name="osb_close_dialog_error">Biệt lệ xảy ra: bug không được đóng</string>
<string name="poi_edit_title">Sửa POI</string>
<string name="poi_create_title">Tạo POI</string>
<string name="poi_error_poi_not_found">Không tìm thấy Node hoặc amenity không phải là node đơn</string>
<string name="poi_edit_title">Sửa địa điểm</string>
<string name="poi_create_title">Tạo địa điểm</string>
<string name="poi_error_poi_not_found">Không tìm thấy Nút hoặc cơ sở không phải là nút đơn</string>
<string name="poi_remove_confirm_template">Xóa {0} (bình luận)?</string>
<string name="poi_remove_title">Xóa POI</string>
<string name="poi_remove_title">Xóa địa điểm</string>
<string name="shared_string_delete">Xóa</string>
<string name="poi_remove_success">Đã xóa POI thành công</string>
<string name="poi_remove_success">Đã xóa địa điểm thành công</string>
<string name="poi_action_add">thêm</string>
<string name="poi_action_change">thay đổi</string>
<string name="poi_action_succeded_template">Hoàn thành tác vụ {0}.</string>
@ -654,11 +654,11 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="poi_dialog_name">Tên</string>
<string name="poi_dialog_opening_hours">Thời gian mở</string>
<string name="poi_dialog_comment">Bình luận</string>
<string name="poi_dialog_comment_default">Thay đổi POI</string>
<string name="poi_dialog_comment_default">Thay đổi địa điểm</string>
<string name="poi_dialog_other_tags_message">Các thẻ khác được giữa lại</string>
<string name="default_buttons_commit">Commit</string>
<string name="default_buttons_commit">Phạm</string>
<string name="shared_string_clear">Làm lại</string>
<string name="filter_current_poiButton">Filter</string>
<string name="filter_current_poiButton">Bộ lọc</string>
<string name="edit_filter_save_as_menu_item">Lưu thành</string>
<string name="edit_filter_delete_dialog_title">Xóa bộ lọc vừa chọn?</string>
@ -673,4 +673,4 @@ Translator: Le Viet Thanh; email: lethanhx2k@gmail.com --><resources>
<string name="tip_recent_changes_1_9_t">"Những thay đổi trong 1.9: * Cập nhật bản đồ phong cách với vẽ mặt đường, lớp vận chuyển và biểu tượng đi bộ đường dài * Tìm kiếm POI dọc theo tuyến đường * Mark đường như không thể vượt qua mỗi phiên * Dễ dàng hơn để tải về và cập nhật bản đồ * Nhận thông báo hình ảnh và âm thanh bằng cách tiếp cận với điểm tham chiếu * In hành trình và biến thông tin * Hỗ trợ làn đường lần lượt * Hỗ trợ Mang Android * Rất nhiều thay đổi giao diện người dùng * zoom riêng biệt cho Text Size trên bản đồ * thông báo âm thanh đặc biệt trong trường hợp bạn tắt các chức năng đăng nhập Osmo tuyến đường * * Fix Osmo phiên bản không tương thích "</string>
<string name="rendering_attr_trainLightrailRoutes_name">Đào tạo và lightrail tuyến</string>
<string name="rendering_attr_tramRoutes_name">Định tuyến xe điện</string>
</resources>
</resources>

View file

@ -1994,4 +1994,14 @@
<string name="poi_industrial_sawmill">類型:鋸木廠</string>
<string name="poi_industrial_water_purification">類型:水淨化廠</string>
<string name="poi_industrial_port">類型:港埠</string>
<string name="poi_industrial_depot">類型:車庫</string>
<string name="poi_note">注釋</string>
<string name="poi_watering_place">有水的地方</string>
<string name="poi_animal_boarding">動物寄宿</string>
<string name="poi_animal_boarding_dog">寄宿類型:狗</string>
<string name="poi_animal_boarding_cat">寄宿類型:貓</string>
<string name="poi_animal_boarding_dog_cat">寄宿類型:狗、貓</string>
<string name="poi_animal_boarding_horse">寄宿類型:馬</string>
</resources>

View file

@ -147,8 +147,7 @@ public class MapActivity extends AccessibleActivity {
// notification.setLatestEventInfo(this, Version.getAppName(app), getString(R.string.go_back_to_osmand),
// pi);
int smallIcon = app.getSettings().getApplicationMode().getSmallIconDark();
final Builder noti = new NotificationCompat.Builder(
this).setContentTitle(Version.getAppName(app))
final Builder noti = new NotificationCompat.Builder(this).setContentTitle(Version.getAppName(app))
.setContentText(getString(R.string.go_back_to_osmand))
.setSmallIcon(smallIcon)
// .setLargeIcon(Helpers.getBitmap(R.drawable.mirakel, getBaseContext()))
@ -236,29 +235,12 @@ public class MapActivity extends AccessibleActivity {
.add(R.id.fragmentContainer, new FirstUsageFragment(),
FirstUsageFragment.TAG).commit();
}
final ListView menuItemsListView = (ListView) findViewById(R.id.menuItems);
menuItemsListView.setDivider(null);
final ContextMenuAdapter contextMenuAdapter = mapActions.createMainOptionsMenu();
contextMenuAdapter.setDefaultLayoutId(R.layout.simple_list_menu_item);
final ArrayAdapter<?> simpleListAdapter = contextMenuAdapter.createListAdapter(this,
settings.OSMAND_THEME.get() == OsmandSettings.OSMAND_LIGHT_THEME);
menuItemsListView.setAdapter(simpleListAdapter);
menuItemsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ContextMenuAdapter.OnContextMenuClick click =
contextMenuAdapter.getClickAdapter(position);
if (click.onContextMenuClick(simpleListAdapter,
contextMenuAdapter.getElementId(position), position, false)) {
closeDrawer();
}
}
});
mapActions.updateDrawerMenu();
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
}
private void checkAppInitialization() {
if (app.isApplicationInitializing()) {
findViewById(R.id.init_progress).setVisibility(View.VISIBLE);
@ -1003,6 +985,7 @@ public class MapActivity extends AccessibleActivity {
}
public void openDrawer() {
mapActions.updateDrawerMenu();
drawerLayout.openDrawer(Gravity.LEFT);
}

View file

@ -13,7 +13,6 @@ import net.osmand.Location;
import net.osmand.PlatformUtil;
import net.osmand.access.AccessibleAlertBuilder;
import net.osmand.access.AccessibleToast;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
@ -58,9 +57,11 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
@ -899,6 +900,26 @@ public class MapActivityActions implements DialogProvider {
view.show();
}
}
protected void updateDrawerMenu() {
final ListView menuItemsListView = (ListView) mapActivity.findViewById(R.id.menuItems);
menuItemsListView.setDivider(null);
final ContextMenuAdapter contextMenuAdapter = createMainOptionsMenu();
contextMenuAdapter.setDefaultLayoutId(R.layout.simple_list_menu_item);
final ArrayAdapter<?> simpleListAdapter = contextMenuAdapter.createListAdapter(mapActivity,
settings.OSMAND_THEME.get() == OsmandSettings.OSMAND_LIGHT_THEME);
menuItemsListView.setAdapter(simpleListAdapter);
menuItemsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ContextMenuAdapter.OnContextMenuClick click =
contextMenuAdapter.getClickAdapter(position);
if (click.onContextMenuClick(simpleListAdapter,
contextMenuAdapter.getElementId(position), position, false)) {
mapActivity.closeDrawer();
}
}
});
}
}

View file

@ -141,7 +141,7 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
}
});
// Not perfect
// searchText.setOnClickListener(new OnClickListener() {
// filter.setOnClickListener(new OnClickListener() {
// }
// });
searchText.setImeOptions(EditorInfo.IME_ACTION_DONE);

View file

@ -445,9 +445,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
}
audioNotesLayer = new AudioNotesLayer(activity, this);
activity.getMapView().addLayer(audioNotesLayer, 3.5f);
if (recordControl == null) {
registerWidget(activity);
}
registerWidget(activity);
}
private void registerMediaListener(AudioManager am) {

View file

@ -472,7 +472,8 @@ public class DashChooseAppDirFragment extends DashBaseFragment {
FileInputStream fin = new FileInputStream(f);
FileOutputStream fout = new FileOutputStream(t);
try {
Algorithms.streamCopy(fin, fout);
progress.startTask(ctx.getString(R.string.copying_osmand_one_file_descr, t.getName()), (int) (f.length() / 1024));
Algorithms.streamCopy(fin, fout, progress, 1024);
} finally {
fin.close();
fout.close();

View file

@ -577,7 +577,9 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
hideDashboard(false);
final Intent intent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization()
.getDownloadIndexActivity());
intent.putExtra(DownloadActivity.FILTER_KEY, f);
if (f != null && !f.equals("basemap")) {
intent.putExtra(DownloadActivity.FILTER_KEY, f);
}
intent.putExtra(DownloadActivity.TAB_TO_OPEN, DownloadActivity.DOWNLOAD_TAB);
mapActivity.startActivity(intent);
}

View file

@ -22,6 +22,7 @@ import android.widget.Toast;
import net.osmand.AndroidUtils;
import net.osmand.access.AccessibleToast;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
@ -57,8 +58,10 @@ public class FavoriteDialogs {
}
FavouritePoint point = (FavouritePoint) args.getSerializable(KEY_FAVORITE);
if (helper.editFavourite(fp, point.getLatitude(), point.getLongitude())) {
AccessibleToast.makeText(activity, activity.getString(R.string.fav_points_edited),
Toast.LENGTH_SHORT).show();
if (activity instanceof MapActivity) {
((MapActivity) activity).getContextMenu()
.show(new LatLon(point.getLatitude(), point.getLongitude()), fp.getPointDescription(), fp);
}
}
if (activity instanceof MapActivity) {
((MapActivity) activity).getMapView().refreshMap();

View file

@ -134,11 +134,19 @@ public class BaseDownloadActivity extends ActionBarProgressActivity implements D
}
}
protected void downloadFilesCheck_2_Internet(IndexItem[] items) {
protected void downloadFilesCheck_2_Internet(final IndexItem[] items) {
if (!getMyApplication().getSettings().isWifiConnected()) {
if (getMyApplication().getSettings().isInternetConnectionAvailable()) {
new ConfirmDownloadDialogFragment().show(getSupportFragmentManager(),
ConfirmDownloadDialogFragment.TAG);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.download_using_mobile_internet));
builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
downloadFilesCheck_3_ValidateSpace(items);
}
});
builder.setNegativeButton(R.string.shared_string_no, null);
builder.show();
} else {
AccessibleToast.makeText(this, R.string.no_index_file_to_download, Toast.LENGTH_LONG).show();
}
@ -202,22 +210,5 @@ public class BaseDownloadActivity extends ActionBarProgressActivity implements D
}
}
public static class ConfirmDownloadDialogFragment extends DialogFragment {
public static final String TAG = "ConfirmDownloadDialogFragment";
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(getString(R.string.download_using_mobile_internet));
builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((BaseDownloadActivity) getActivity()).downloadFilesCheck_3_ValidateSpace();
}
});
builder.setNegativeButton(R.string.shared_string_no, null);
return builder.create();
}
}
}

View file

@ -1,5 +1,27 @@
package net.osmand.plus.download;
import java.io.File;
import java.lang.ref.WeakReference;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import net.osmand.IProgress;
import net.osmand.access.AccessibleToast;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.activities.TabActivity;
import net.osmand.plus.base.BasicProgressAsyncTask;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.ui.ActiveDownloadsDialogFragment;
import net.osmand.plus.download.ui.DownloadResourceGroupFragment;
import net.osmand.plus.download.ui.LocalIndexesFragment;
import net.osmand.plus.download.ui.UpdatesIndexFragment;
import net.osmand.plus.views.controls.PagerSlidingTabStrip;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
@ -18,29 +40,6 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import net.osmand.IProgress;
import net.osmand.access.AccessibleToast;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.activities.TabActivity;
import net.osmand.plus.base.BasicProgressAsyncTask;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.ui.ActiveDownloadsDialogFragment;
import net.osmand.plus.download.ui.DownloadResourceGroupFragment;
import net.osmand.plus.download.ui.LocalIndexesFragment;
import net.osmand.plus.download.ui.UpdatesIndexFragment;
import net.osmand.plus.views.controls.PagerSlidingTabStrip;
import java.io.File;
import java.lang.ref.WeakReference;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class DownloadActivity extends BaseDownloadActivity {
public static final int UPDATES_TAB_NUMBER = 2;
public static final int LOCAL_TAB_NUMBER = 1;
@ -60,6 +59,8 @@ public class DownloadActivity extends BaseDownloadActivity {
private BannerAndDownloadFreeVersion visibleBanner;
private ViewPager viewPager;
private String filter;
private String filterCat;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -76,18 +77,13 @@ public class DownloadActivity extends BaseDownloadActivity {
updateDescriptionTextWithSize(this, downloadProgressLayout);
int currentTab = DOWNLOAD_TAB_NUMBER;
String tab = getIntent() == null || getIntent().getExtras() == null ? null : getIntent().getExtras().getString(TAB_TO_OPEN);
if (tab != null) {
switch (tab) {
case DOWNLOAD_TAB:
currentTab = DOWNLOAD_TAB_NUMBER;
break;
case LOCAL_TAB:
currentTab = LOCAL_TAB_NUMBER;
break;
case UPDATES_TAB:
currentTab = UPDATES_TAB_NUMBER;
break;
if (tab.equals(DOWNLOAD_TAB)) {
currentTab = DOWNLOAD_TAB_NUMBER;
} else if (tab.equals(LOCAL_TAB)) {
currentTab = LOCAL_TAB_NUMBER;
} else if (tab.equals(UPDATES_TAB)) {
currentTab = UPDATES_TAB_NUMBER;
}
}
@ -114,11 +110,7 @@ public class DownloadActivity extends BaseDownloadActivity {
@Override
public void onPageSelected(int i) {
if (i == UPDATES_TAB_NUMBER) {
visibleBanner.hideDownloadProgressLayout();
} else {
visibleBanner.showDownloadProgressLayout();
}
visibleBanner.updateBannerInProgress();
}
@Override
@ -126,13 +118,12 @@ public class DownloadActivity extends BaseDownloadActivity {
}
});
visibleBanner = new BannerAndDownloadFreeVersion(findViewById(R.id.mainLayout), this);
visibleBanner = new BannerAndDownloadFreeVersion(findViewById(R.id.mainLayout), this, true);
final Intent intent = getIntent();
// FIXME INITIAL FILTER & INITIAL KEY
if (intent != null && intent.getExtras() != null) {
final String filter = intent.getExtras().getString(FILTER_KEY);
final String filterCat = intent.getExtras().getString(FILTER_CAT);
filter = intent.getExtras().getString(FILTER_KEY);
filterCat = intent.getExtras().getString(FILTER_CAT);
}
}
@ -194,6 +185,7 @@ public class DownloadActivity extends BaseDownloadActivity {
}
}
@Override
@UiThread
@ -272,9 +264,11 @@ public class DownloadActivity extends BaseDownloadActivity {
private final OsmandApplication application;
private final boolean shouldShowFreeVersionBanner;
private final View freeVersionBannerTitle;
private boolean showSpace;
public BannerAndDownloadFreeVersion(View view, final DownloadActivity ctx) {
public BannerAndDownloadFreeVersion(View view, final DownloadActivity ctx, boolean showSpace) {
this.ctx = ctx;
this.showSpace = showSpace;
application = (OsmandApplication) ctx.getApplicationContext();
freeVersionBanner = view.findViewById(R.id.freeVersionBanner);
downloadProgressLayout = view.findViewById(R.id.downloadProgressLayout);
@ -293,14 +287,9 @@ public class DownloadActivity extends BaseDownloadActivity {
|| application.getSettings().SHOULD_SHOW_FREE_VERSION_BANNER.get();
initFreeVersionBanner();
updateFreeVersionBanner();
updateBannerInProgress();
if (ctx.getCurrentTab() != UPDATES_TAB_NUMBER) {
downloadProgressLayout.setVisibility(View.VISIBLE);
}
}
public void updateBannerInProgress() {
BasicProgressAsyncTask<?, ?, ?, ?> basicProgressAsyncTask = ctx.getDownloadThread().getCurrentRunningTask();
final boolean isFinished = basicProgressAsyncTask == null
@ -308,8 +297,10 @@ public class DownloadActivity extends BaseDownloadActivity {
if (isFinished) {
downloadProgressLayout.setOnClickListener(null);
updateDescriptionTextWithSize(ctx, downloadProgressLayout);
if (ctx.getCurrentTab() == UPDATES_TAB_NUMBER) {
if (ctx.getCurrentTab() == UPDATES_TAB_NUMBER || !showSpace) {
downloadProgressLayout.setVisibility(View.GONE);
} else {
downloadProgressLayout.setVisibility(View.VISIBLE);
}
updateFreeVersionBanner();
} else {
@ -370,6 +361,7 @@ public class DownloadActivity extends BaseDownloadActivity {
});
laterButton.setOnClickListener(new ToggleCollapseFreeVersionBanner(freeVersionDescriptionTextView,
buttonsLinearLayout, freeVersionBannerTitle, application.getSettings()));
updateFreeVersionBanner();
}
private void updateFreeVersionBanner() {
@ -448,6 +440,17 @@ public class DownloadActivity extends BaseDownloadActivity {
}
public String getFilterAndClear() {
String res = filter;
filter = null;
return res;
}
public String getFilterCatAndClear() {
String res = filterCat;
filterCat = null;
return res;
}
@SuppressWarnings("deprecation")
public static void updateDescriptionTextWithSize(DownloadActivity activity, View view) {

View file

@ -26,6 +26,9 @@ import org.apache.commons.logging.Log;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
@ -36,12 +39,15 @@ import android.os.AsyncTask.Status;
import android.os.Build;
import android.os.StatFs;
import android.support.annotation.UiThread;
import android.support.v7.app.NotificationCompat;
import android.support.v7.app.NotificationCompat.Builder;
import android.view.View;
import android.widget.Toast;
@SuppressLint({ "NewApi", "DefaultLocale" })
public class DownloadIndexesThread {
private final static Log LOG = PlatformUtil.getLog(DownloadIndexesThread.class);
private static final int NOTIFICATION_ID = 45;
private final Context ctx;
private OsmandApplication app;
@ -54,6 +60,7 @@ public class DownloadIndexesThread {
private int currentDownloadingItemProgress = 0;
private DownloadResources indexes;
private Notification notification;
public interface DownloadEvents {
@ -75,7 +82,7 @@ public class DownloadIndexesThread {
}
public void updateLoadedFiles() {
indexes.initAlreadyLoadedFiles();
indexes.updateLoadedFiles();
}
/// UI notifications methods
@ -88,6 +95,46 @@ public class DownloadIndexesThread {
if (uiActivity != null) {
uiActivity.downloadInProgress();
}
updateNotification();
}
private void updateNotification() {
if(getCurrentDownloadingItem() != null) {
BasicProgressAsyncTask<?, ?, ?, ?> task = getCurrentRunningTask();
final boolean isFinished = task == null
|| task.getStatus() == AsyncTask.Status.FINISHED;
Intent contentIntent = new Intent(app, DownloadActivity.class);
PendingIntent contentPendingIntent = PendingIntent.getActivity(app, 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
Builder bld = new NotificationCompat.Builder(app);
String msg = Version.getAppName(app);
if(!isFinished) {
msg = task.getDescription();
}
StringBuilder contentText = new StringBuilder();
List<IndexItem> ii = getCurrentDownloadingItems();
for(IndexItem i : ii) {
if(contentText.length() > 0) {
contentText.append(", ");
}
contentText.append(i.getVisibleName(app, app.getRegions()));
}
bld.setContentTitle(msg).setSmallIcon(R.drawable.ic_action_import).
setContentText(contentText.toString()).
setContentIntent(contentPendingIntent).setOngoing(true);
int progress = getCurrentDownloadingItemProgress();
bld.setProgress(100, Math.max(progress, 0), progress < 0);
notification = bld.build();
NotificationManager mNotificationManager = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, notification);
} else {
if(notification != null) {
NotificationManager mNotificationManager = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(NOTIFICATION_ID);
notification = null;
}
}
}
@ -96,6 +143,7 @@ public class DownloadIndexesThread {
if (uiActivity != null) {
uiActivity.downloadHasFinished();
}
updateNotification();
}
@UiThread

View file

@ -78,6 +78,9 @@ public class DownloadResourceGroup {
|| this == OTHER_MAPS_HEADER || this == OTHER_MAPS_GROUP;
}
public static String getVoiceTTSId() {
return "#" + VOICE_GROUP.name().toLowerCase() + "#" + VOICE_TTS.name().toLowerCase();
}
}
public DownloadResourceGroup(DownloadResourceGroup parentGroup, DownloadResourceGroupType type) {

View file

@ -38,7 +38,12 @@ public class DownloadResources extends DownloadResourceGroup {
return itemsToUpdate;
}
public void initAlreadyLoadedFiles() {
public void updateLoadedFiles() {
initAlreadyLoadedFiles();
prepareFilesToUpdate();
}
private void initAlreadyLoadedFiles() {
java.text.DateFormat dateFormat = app.getResourceManager().getDateFormat();
Map<String, String> indexActivatedFileNames = app.getResourceManager().getIndexFileNames();
listWithAlternatives(dateFormat, app.getAppPath(""), IndexConstants.EXTRA_EXT, indexActivatedFileNames);
@ -49,7 +54,6 @@ public class DownloadResources extends DownloadResourceGroup {
app.getResourceManager().getBackupIndexes(indexFileNames);
this.indexFileNames = indexFileNames;
this.indexActivatedFileNames = indexActivatedFileNames;
prepareFilesToUpdate();
}
public boolean checkIfItemOutdated(IndexItem item, java.text.DateFormat format) {
@ -123,20 +127,16 @@ public class DownloadResources extends DownloadResourceGroup {
protected void updateFilesToUpdate() {
initAlreadyLoadedFiles();
initAlreadyLoadedFiles();;
recalculateFilesToUpdate();
}
private void recalculateFilesToUpdate() {
List<IndexItem> stillUpdate = new ArrayList<IndexItem>();
for (IndexItem item : itemsToUpdate) {
String sfName = item.getTargetFileName();
java.text.DateFormat format = app.getResourceManager().getDateFormat();
String date = item.getDate(format);
String indexactivateddate = indexActivatedFileNames.get(sfName);
String indexfilesdate = indexFileNames.get(sfName);
if (date != null && !date.equals(indexactivateddate) && !date.equals(indexfilesdate)
&& indexActivatedFileNames.containsKey(sfName)) {
checkIfItemOutdated(item, format);
if (item.isOutdated()) {
stillUpdate.add(item);
}
}
@ -206,11 +206,7 @@ public class DownloadResources extends DownloadResourceGroup {
DownloadResourceGroup voiceScreenTTS = new DownloadResourceGroup(voiceGroup, DownloadResourceGroupType.VOICE_TTS);
DownloadResourceGroup voiceRec = new DownloadResourceGroup(voiceGroup, DownloadResourceGroupType.VOICE_HEADER_REC);
DownloadResourceGroup voiceTTS = new DownloadResourceGroup(voiceGroup, DownloadResourceGroupType.VOICE_HEADER_TTS);
voiceScreenTTS.addGroup(voiceTTS);
voiceScreenRec.addGroup(voiceRec);
voiceGroup.addGroup(voiceScreenRec);
voiceGroup.addGroup(voiceScreenTTS);
DownloadResourceGroup worldMaps = new DownloadResourceGroup(this, DownloadResourceGroupType.WORLD_MAPS);
Map<WorldRegion, List<IndexItem> > groupByRegion = new LinkedHashMap<WorldRegion, List<IndexItem>>();
@ -283,10 +279,16 @@ public class DownloadResources extends DownloadResourceGroup {
if (otherMaps.size() > 0) {
addGroup(otherMapsGroup);
}
voiceScreenTTS.addGroup(voiceTTS);
voiceScreenRec.addGroup(voiceRec);
voiceGroup.addGroup(voiceScreenRec);
voiceGroup.addGroup(voiceScreenTTS);
addGroup(voiceGroup);
createHillshadeSRTMGroups();
trimEmptyGroups();
initAlreadyLoadedFiles();
updateLoadedFiles();
return true;
}

View file

@ -1,24 +1,5 @@
package net.osmand.plus.download.ui;
import java.util.ArrayList;
import java.util.List;
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.OsmandBaseExpandableListAdapter;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadActivity.BannerAndDownloadFreeVersion;
import net.osmand.plus.download.DownloadActivityType;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.DownloadResourceGroup;
import net.osmand.plus.download.DownloadResourceGroup.DownloadResourceGroupType;
import net.osmand.plus.download.DownloadResources;
import net.osmand.plus.download.IndexItem;
import net.osmand.util.Algorithms;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
@ -38,6 +19,24 @@ import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.TextView;
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.OsmandBaseExpandableListAdapter;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadActivity.BannerAndDownloadFreeVersion;
import net.osmand.plus.download.DownloadActivityType;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.DownloadResourceGroup;
import net.osmand.plus.download.DownloadResourceGroup.DownloadResourceGroupType;
import net.osmand.plus.download.DownloadResources;
import net.osmand.plus.download.IndexItem;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.List;
public class DownloadResourceGroupFragment extends DialogFragment implements DownloadEvents, OnChildClickListener {
public static final int RELOAD_ID = 0;
public static final int SEARCH_ID = 1;
@ -94,7 +93,7 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow
setHasOptionsMenu(true);
if(openAsDialog()) {
banner = new BannerAndDownloadFreeVersion(view, (DownloadActivity) getActivity());
banner = new BannerAndDownloadFreeVersion(view, (DownloadActivity) getActivity(), false);
} else {
banner = null;
view.findViewById(R.id.freeVersionBanner).setVisibility(View.GONE);
@ -112,6 +111,19 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow
public void onResume() {
super.onResume();
reloadData();
String filter = getDownloadActivity().getFilterAndClear();
String filterCat = getDownloadActivity().getFilterCatAndClear();
if (filter != null) {
getDownloadActivity().showDialog(getActivity(),
SearchDialogFragment.createInstance(filter));
} else if (filterCat != null) {
if (filterCat.equals(DownloadActivityType.VOICE_FILE.getTag())) {
String uniqueId = DownloadResourceGroup.DownloadResourceGroupType.getVoiceTTSId();
final DownloadResourceGroupFragment regionDialogFragment = DownloadResourceGroupFragment
.createInstance(uniqueId);
((DownloadActivity) getActivity()).showDialog(getActivity(), regionDialogFragment);
}
}
}
private void reloadData() {

View file

@ -33,6 +33,7 @@ import net.osmand.plus.download.DownloadResourceGroup;
import net.osmand.plus.download.DownloadResourceGroup.DownloadResourceGroupType;
import net.osmand.plus.download.DownloadResources;
import net.osmand.plus.download.IndexItem;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.Collections;
@ -81,7 +82,7 @@ public class SearchDialogFragment extends DialogFragment implements DownloadEven
}
});
banner = new BannerAndDownloadFreeVersion(view, (DownloadActivity) getActivity());
banner = new BannerAndDownloadFreeVersion(view, (DownloadActivity) getActivity(), false);
LinearLayout ll = (LinearLayout) view;
ExpandableListView expandablelistView = (ExpandableListView) view.findViewById(android.R.id.list);
@ -181,6 +182,9 @@ public class SearchDialogFragment extends DialogFragment implements DownloadEven
public void onResume() {
super.onResume();
search.setIconified(false);
if (!Algorithms.isEmpty(searchText)) {
search.setQuery(searchText, true);
}
}
public void updateSearchText(String searchText) {

View file

@ -7,6 +7,10 @@ import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
@ -17,6 +21,7 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.FavoriteImageDrawable;
import net.osmand.plus.dialogs.FavoriteDialogs;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.util.Algorithms;
@ -38,7 +43,7 @@ public class FavoritePointEditorFragment extends PointEditorFragment {
}
@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean light = getMyApplication().getSettings().isLightContent();
@ -48,6 +53,24 @@ public class FavoritePointEditorFragment extends PointEditorFragment {
group = helper.getGroup(favorite);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
if (view != null && editor.isNew()) {
Button btnReplace = (Button) view.findViewById(R.id.button_replace);
btnReplace.setVisibility(View.VISIBLE);
btnReplace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
args.putSerializable(FavoriteDialogs.KEY_FAVORITE, favorite);
FavoriteDialogs.createReplaceFavouriteDialog(getActivity(), args);
}
});
}
return view;
}
@Override
public PointEditor getEditor() {
return editor;

View file

@ -60,7 +60,6 @@ public class NauticalMapsPlugin extends OsmandPlugin {
@Override
public void onClick(DialogInterface dialog, int which) {
final Intent intent = new Intent(activity, app.getAppCustomization().getDownloadIndexActivity());
intent.putExtra(DownloadActivity.FILTER_KEY, app.getString(net.osmand.plus.R.string.index_item_world_seamarks));
intent.putExtra(DownloadActivity.TAB_TO_OPEN, DownloadActivity.DOWNLOAD_TAB);
activity.startActivity(intent);
}