merge with master

This commit is contained in:
Denis 2014-10-01 12:53:09 +03:00
commit f68498ad13
47 changed files with 547 additions and 368 deletions

View file

@ -9,8 +9,8 @@ public class RotatedTileBox {
private float rotate;
private float density;
private int zoom;
private float zoomScale;
private float zoomAnimation;
private double zoomScale;
private double zoomAnimation;
private int cx;
private int cy;
private int pixWidth;
@ -67,7 +67,7 @@ public class RotatedTileBox {
}
public void calculateDerivedFields() {
zoomFactor = Math.pow(2, zoomScale + zoomAnimation) * 256;
zoomFactor = Math.pow(2, zoomScale + zoomAnimation ) * 256;
double rad = Math.toRadians(this.rotate);
rotateCos = Math.cos(rad);
rotateSin = Math.sin(rad);
@ -338,16 +338,16 @@ public class RotatedTileBox {
return zoomAnimation != 0;
}
public float getZoomAnimation() {
public double getZoomAnimation() {
return zoomAnimation;
}
public void setZoomAnimation(float z) {
public void setZoomAnimation(double z) {
this.zoomAnimation = z;
calculateDerivedFields();
}
public void setZoomAndAnimation(int zoom, float zoomAnimation) {
public void setZoomAndAnimation(int zoom, double zoomAnimation) {
this.zoomAnimation = zoomAnimation;
this.zoom = zoom;
calculateDerivedFields();
@ -366,12 +366,13 @@ public class RotatedTileBox {
}
public QuadPointDouble getLeftTopTile(float zoom) {
public QuadPointDouble getLeftTopTile(double zoom) {
checkTileRectangleCalculated();
return new QuadPointDouble((tileLT.x * MapUtils.getPowZoom(zoom - this.zoom)),
(tileLT.y * MapUtils.getPowZoom(zoom - this.zoom)));
}
public QuadPointDouble getRightBottomTile(float zoom) {
checkTileRectangleCalculated();
return new QuadPointDouble((tileRB.x * MapUtils.getPowZoom(zoom - this.zoom)),
@ -391,7 +392,7 @@ public class RotatedTileBox {
MapUtils.getLongitudeFromTile(zoom, alignTile(tileRB.x)));
}
public void setZoom(int zoom, float zoomScale) {
public void setZoom(int zoom, double zoomScale) {
this.zoom = zoom;
this.zoomScale = zoomScale;
calculateDerivedFields();
@ -402,14 +403,14 @@ public class RotatedTileBox {
calculateDerivedFields();
}
public void setZoom(int zoom, float zoomScale, float zoomToAnimate) {
public void setZoom(int zoom, double zoomScale, double zoomToAnimate) {
this.zoom = zoom;
this.zoomScale = zoomScale;
this.zoomAnimation = zoomToAnimate;
calculateDerivedFields();
}
public float getZoomScale() {
public double getZoomScale() {
return zoomScale;
}
@ -498,7 +499,7 @@ public class RotatedTileBox {
return this;
}
public RotatedTileBoxBuilder setZoomAndScale(int zoom, float scale) {
public RotatedTileBoxBuilder setZoomAndScale(int zoom, double scale) {
tb.zoom = zoom;
tb.zoomScale = scale;
zoomSet = true;

View file

@ -45,6 +45,13 @@ public class GeoPointParserUtil {
actual = GeoPointParserUtil.parse("geo", url);
assertGeoPoint(actual, new GeoParsedPoint(dlat, dlon, z, name));
// geo:34.99,-106.61?q=34.99%2C-106.61 (Treasure Island)
z = GeoParsedPoint.NO_ZOOM;
url = "geo:" + dlat + "," + dlon + "?q=" + dlat + "%2C" + dlon + " (" + name + ")";
System.out.println("url: " + url);
actual = GeoPointParserUtil.parse("geo", url);
assertGeoPoint(actual, new GeoParsedPoint(dlat, dlon, z, name));
// 0,0?q=34,-106(Treasure Island)
z = GeoParsedPoint.NO_ZOOM;
url = "geo:0,0?q=" + ilat + "," + ilon + " (" + name + ")";
@ -331,7 +338,7 @@ public class GeoPointParserUtil {
* @return {@link GeoParsedPoint}
*/
public static GeoParsedPoint parse(final String scheme, final String uri) {
final URI data = URI.create(uri.replaceAll("\\s+", "+").replaceAll("%20", "+"));
final URI data = URI.create(uri.replaceAll("\\s+", "+").replaceAll("%20", "+").replaceAll("%2C", ","));
if ("http".equals(scheme) || "https".equals(scheme)) {
final String schemeSpecific = data.getSchemeSpecificPart();
@ -469,7 +476,7 @@ public class GeoPointParserUtil {
} else {
// geo:47.6,-122.3
// geo:47.6,-122.3?z=11 (Treasure Island)
final String pattern = "([+-]?\\d+(?:\\.\\d+)?),([+-]?\\d+(?:\\.\\d+)?)(?:\\?z=(\\d{1,2}))?[\\+]?(?:\\((.*?)\\))?";
final String pattern = "([+-]?\\d+(?:\\.\\d+)?),([+-]?\\d+(?:\\.\\d+)?)(?:(?:\\?z=(\\d{1,2}))?|(?:\\?q=.*?)?)[\\+]?(?:\\((.*?)\\))?";
final Matcher matcher = Pattern.compile(pattern).matcher(schemeSpecific);
if (matcher.matches()) {
final double lat = Double.valueOf(matcher.group(1));

View file

@ -226,11 +226,11 @@ public class MapUtils {
return getDistance(ll, ll2) ;
}
public static double getLongitudeFromTile(float zoom, double x) {
public static double getLongitudeFromTile(double zoom, double x) {
return x / getPowZoom(zoom) * 360.0 - 180.0;
}
public static double getPowZoom(float zoom){
public static double getPowZoom(double zoom){
if(zoom >= 0 && zoom - Math.floor(zoom) < 0.001f){
return 1 << ((int)zoom);
} else {
@ -248,18 +248,18 @@ public class MapUtils {
return (rotateSin * dTileX + rotateCos * dTileY) * tileSize ;
}
public static double getLatitudeFromTile(float zoom, double y){
public static double getLatitudeFromTile(float zoom, double y) {
int sign = y < 0 ? -1 : 1;
return Math.atan(sign*Math.sinh(Math.PI * (1 - 2 * y / getPowZoom(zoom)))) * 180d / Math.PI;
return Math.atan(sign * Math.sinh(Math.PI * (1 - 2 * y / getPowZoom(zoom)))) * 180d / Math.PI;
}
public static int getPixelShiftX(float zoom, double long1, double long2, int tileSize){
public static int getPixelShiftX(float zoom, double long1, double long2, double tileSize){
return (int) ((getTileNumberX(zoom, long1) - getTileNumberX(zoom, long2)) * tileSize);
}
public static int getPixelShiftY(float zoom, double lat1, double lat2, int tileSize){
public static int getPixelShiftY(float zoom, double lat1, double lat2, double tileSize){
return (int) ((getTileNumberY(zoom, lat1) - getTileNumberY(zoom, lat2)) * tileSize);
}

View file

@ -1962,4 +1962,6 @@ OsmAnd мае адкрыты зыходны код і актыўна разві
<string name="traffic_warning_calming">Зьнізьце хуткасьць</string>
<string name="traffic_warning_speed_camera">Фотарадар</string>
<string name="traffic_warning">Абмежаваньне руху</string>
<string name="text_size_descr">Абраць памер тэксту на мапе.</string>
<string name="text_size">Памер тэксту</string>
</resources>

View file

@ -71,7 +71,7 @@
<string name="use_magnetic_sensor_descr">Използвай магнитния сензор за определяне на компасната посока вместо сензора за ориентиране</string>
<string name="use_magnetic_sensor">Използвай магнитния сензор</string>
<string name="other_location">Друго</string>
<string name="files_limit">%1$d файла остават</string>
<string name="files_limit">Остават Ви %1$d файла</string>
<string name="available_downloads_left">Остават Ви %1$d файл(-а) за сваляне</string>
<string name="install_paid">Пълна версия</string>
<string name="cancel_route">Прекрати маршрута</string>
@ -1737,4 +1737,14 @@ OsmAnd е с отворен код и активно да се развива.
<string name="map_widget_plain_time">Текущо време</string>
<string name="gpx_wpt">Междинна точка</string>
<string name="selected_gpx_info_show">\n\nНатиснете и задръжте за показване на картата</string>
</resources>
<string name="text_size_descr">Въведете размер на текста върху картата.</string>
<string name="text_size">Размер на текста</string>
<string name="traffic_warning_speed_limit">Ограничение на скоростта</string>
<string name="traffic_warning_border_control">Граничен пункт</string>
<string name="traffic_warning_payment">Плащане на такса</string>
<string name="traffic_warning_stop">Стоп</string>
<string name="traffic_warning_calming">Легнал полицай</string>
<string name="traffic_warning_speed_camera">Камера за скорост</string>
<string name="traffic_warning">Предупреждение за трафика</string>
<string name="hide_all_waypoints">Изтриване на всички</string>
</resources>

View file

@ -1897,4 +1897,6 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània,
<string name="local_index_description">Premeu qualsevol indicació existent per veure més detalls, mantingueu premuda per desactivar o esborrar. Dades actuals al dispositiu (%1$s lliure):</string>
<string name="text_size_descr">Definiu la mida del text en el mapa.</string>
<string name="text_size">Mida del text</string>
<string name="fav_point_dublicate">Aquest nom de punt preferit ja s\'ha utilitzat</string>
<string name="fav_point_dublicate_message">S\'ha canviat el nom del vostre punt preferit a %1$s per evitar duplicitats.</string>
</resources>

View file

@ -1735,4 +1735,7 @@ s často kladenými otázkami.</string>
<string name="route_descr_destination"/>
<string name="local_index_description">Klikněte na existující položku k zobrazení více detailů, podržte pro vypnutí nebo smazání. V zařízení je %1$s volného místa:</string>
<string name="text_size">Velikost písma</string>
<string name="text_size_descr">Nastavit velikost písma na mapě.</string>
<string name="fav_point_dublicate">Název oblíbeného bodu je již použit</string>
<string name="fav_point_dublicate_message">Aby nevznikla duplicita, oblíbený bod byl uložen jako %1$s.</string>
</resources>

View file

@ -1222,7 +1222,7 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda,
<string name="default_buttons_cancel">Annuller</string>
<string name="context_menu_item_create_poi">Opret interessepunkt</string>
<string name="context_menu_item_update_map">Opdater kort</string>
<string name="context_menu_item_add_favorite">Tilføj til favoritter</string>
<string name="context_menu_item_add_favorite">Tilføj som favorit</string>
<string name="search_tabs_location">Placering</string>
<string name="search_address_street_option">Krydsende vej</string>
<string name="search_address_building_option">Bygning</string>
@ -1369,7 +1369,7 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda,
<string name="show_osm_bugs_descr">Vis OSM-fejl på kort</string>
<string name="show_osm_bugs">Vis OSM-fejl</string>
<string name="favourites_activity">Favoritter</string>
<string name="add_to_favourite">Tilføj til favoritter</string>
<string name="add_to_favourite">Tilføj som favorit</string>
<string name="use_english_names_descr">Vælg mellem oprindelige eller engelske navne</string>
<string name="use_english_names">Engelske navne</string>
<string name="app_settings">Programindstillinger</string>
@ -1989,4 +1989,6 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda,
<string name="local_index_description">Klik på et eksisterende element for at se flere detaljer, langt tryk for at deaktivere eller slette. Aktuelle data på enhed (%1$s ledig):</string>
<string name="text_size_descr">Vælg tekststørrelsen på kortet.</string>
<string name="text_size">Tekststørrelse</string>
<string name="fav_point_dublicate">Favoritnavn dublet</string>
<string name="fav_point_dublicate_message">Favoritnavn er ændret til %1$s for at undgå dubletter.</string>
</resources>

View file

@ -1410,7 +1410,7 @@
<string name="download_using_mobile_internet">Derzeit besteht keine WLAN-Verbindung. Soll das Herunterladen mit der aktuellen Datenverbindung erfolgen?</string>
<string name="clear_destination">Ziel löschen</string>
<string name="other_location">Andere</string>
<string name="files_limit">%1$d Dateien fehlen noch</string>
<string name="files_limit">In dieser kostenlosen Version können noch %1$d Dateien heruntergeladen werden.</string>
<string name="available_downloads_left">Es stehen %1$d Dateien zum Herunterladen bereit</string>
<string name="install_paid">Vollversion</string>
<string name="cancel_navigation">Navigation stoppen</string>
@ -1839,11 +1839,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an
<string name="osmo_settings_uuid">Geräte-ID</string>
<string name="osmo_settings_descr">Konfigurieren der Überwachungs-Einstellungen und des persönlichen Überwachungs-Kanals</string>
<string name="osmo_plugin_description">OpenStreetMap erweiterte Live-Überwachung, siehe http://osmo.mobi. Ermöglicht die Verfolgung des eigenen oder anderer Geräten.
Erstellen anonymer Gruppen, teilen des Standortes sowie Kommunizieren untereinander. Es gibt verschiedene Einstellungen für Sitzungs- oder Permanenet-Aufzeichnung.
Anonyme Gruppen sind-zeit-oder funktionslimitiert, ohne Fernkonfiguration oder Gruppen-Adminisrator
Voll funktionsfähige Gruppen müssen auf der Internetseite erstellt werden, auf diese haben nur registrierte Nutzer Zugriff.
</string>
<string name="osmo_plugin_description">"Erweiterte OpenStreetMap-basierte Live-Überwachung, siehe http://osmo.mobi ... Ermöglicht die Positionsdarstellung in von einzelnen Geräten in Echtzeit. Bei anonym erstellten Gruppen sind die Optionen etwas eingeschränkt: Lebensdauer der Gruppe nur für einige Tage, auch ist keine zentrale Steuerung der Gruppe möglich. Es gibt verschiedene Einstellungen für zeitlich begrenzte oder Dauer-Aufzeichnung. Voll funktionsfähige Gruppen müssen auf der genannten Internetseite erstellt werden, auf die Gruppe haben nur registrierte Nutzer Zugriff. "</string>
<string name="osmo_plugin_name">OsMo (Erweiterte Live-Überwachung)</string>
<string name="osmo_settings">OsMo OpenStreetMap-Überwachung</string>
<string name="osmo_io_error">OsMo Verbindungsproblem: </string>
@ -1976,4 +1972,8 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an
<string name="record_plugin_description">Speichern Sie Ihre Tracks mit einem Klick. Zeigt die Einstellung, wie Strecken aufgezeichnet werden in lokale GPX-Dateien oder online via Web-Service.</string>
<string name="route_descr_destination"/>
<string name="local_index_description">Antippen eines Elements um mehr Details zu erfahren, Tippen und Halten zum Deaktivieren oder Löschen des Elements. Aktuell auf dem Gerät vorhandene Daten (%1$s frei):</string>
<string name="text_size_descr">Karten-Schriftgröße festlegen</string>
<string name="text_size">Schriftgröße</string>
<string name="fav_point_dublicate">Doppelung beim Favoriten-Namen</string>
<string name="fav_point_dublicate_message">Name des Favoriten bereits vergeben, er wurde auf %1$s geändert.</string>
</resources>

View file

@ -1671,4 +1671,6 @@
<string name="traffic_warning_payment">Διόδια</string>
<string name="traffic_warning_stop">Πινακίδα stop</string>
<string name="traffic_warning_speed_camera">Κάμερα ταχύτητας</string>
<string name="text_size_descr">Ορίστε το μέγεθος του κειμένου στο χάρτη.</string>
<string name="text_size">Μέγεθος κειμένου</string>
</resources>

View file

@ -1879,4 +1879,6 @@ Afganistán, Albania, Alemania, Andorra, Angola, Anguila, Antigua y Barbuda, Ant
<string name="traffic_warning">Alerta de tráfico</string>
<string name="text_size_descr">Selecciona el tamaño del texto en el mapa.</string>
<string name="text_size">Tamaño de texto</string>
<string name="fav_point_dublicate">Nombre de punto favorito duplicado</string>
<string name="fav_point_dublicate_message">Hemos cambiado el nombre de tu punto favorito a %1$s para evitar nombres duplicados.</string>
</resources>

View file

@ -504,7 +504,7 @@
<string name="offline_edition_descr">Beti erabili lineaz kanpoko edizioa</string>
<string name="tip_recent_changes_0_7_1_t">"0.7.1 bertsioko aldaketak:⏎\n⇥- Lineaz kanpoko POIen edizioa⏎\n⇥- Sareko Jarraipen aukera - bidali aldizka koordenadak web zerbitzura (irakurri nola konfiguratu web zerbitzu propioa HowTo artikuluetan)⏎\n⇥- Erakutsi momentuan grabatutako bidea mapan⏎\n⇥- Norabidea detektatu: \'U-buelta eman\' agertu eta iragartzen da norabide txarra hartuz gero edo bira bat galduz gero.⏎\n⇥- Ahots abisu berriak \'Ibilbidea birkalkulatua izan da\'⏎\n⇥- 100m-tara berehalako biraketaren seinale optikoa, kolorez aldatzen den norabide geziarekin⏎\n⇥- Desaktibatutako indize fitxategiak orain ere Deskargen pantailan agertzen dira, berde ilun eta urdin ilunetan.⏎\n⇥- Beste aldaketa batzuk "</string>
<string name="update_poi_does_not_change_indexes">Aplikazioaren barneko POI aldaketek ez diete deskargatutako mapen fitxategiei eragiten, aldaketak modu lokalean gordetzen dira.</string>
<string name="local_openstreetmap_uploading">Igotzen ...</string>
<string name="local_openstreetmap_uploading">Igotzen </string>
<string name="local_openstreetmap_were_uploaded">{0} POI/Akats izan dira igoak</string>
<string name="local_openstreetmap_uploadall">Guztia igo</string>
<string name="local_openstreetmap_show">Mapan erakutsi</string>
@ -638,7 +638,7 @@
<string name="vector_map_not_needed">Ez, milesker</string>
<string name="basemap_missing">Oinarrizko munduko mapa (mundu guztia estaliz zoom maila txikietan) falta da. Mesedez kontsideratu World_basemap_x.obf deskargatzea ikuspegi guztia eduki ahal izateko.</string>
<string name="vector_data_missing">Datu lokalak (lineaz kanpokoak) ez daude SD txartelean. Lineaz kanpoko mapak erabili nahi badituzu, jaitsi beharko zenituzke.</string>
<string name="local_index_gpx_info_show">\n\nZanpatuta mantendu aukerentzat</string>
<string name="local_index_gpx_info_show">\n\nZanpatuta mantendu aukerentzat</string>

View file

@ -1828,4 +1828,8 @@ Afghanistan, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua-et
<string name="traffic_warning_speed_camera">Radar de vitesse</string>
<string name="traffic_warning">Alerte de circulation</string>
<string name="local_index_description">Cliquez sur n\'importe quel élément pour voir plus de détails, maintenez appuyé pour désactiver ou supprimer. Données actuellement sur l\'appareil (%1$s libre) :</string>
<string name="text_size">Taille du texte</string>
<string name="fav_point_dublicate">Ce nom est déjà utilisé pour un point favori.</string>
<string name="fav_point_dublicate_message">Nous avons changé le nom de votre point favori en %1$s pour éviter les doublons.</string>
<string name="text_size_descr">Sélectionner la taille du texte sur la carte.</string>
</resources>

View file

@ -1291,4 +1291,7 @@
<string name="hours_ago">sati prije</string>
<string name="minutes_ago">minuta prije</string>
<string name="seconds_ago">sekunda prije</string>
<string name="text_size_descr">Postavi veličinu teksta na karti.</string>
<string name="text_size">Veličina teksta</string>
<string name="save_track_interval_globally">Interval bilježenja</string>
</resources>

View file

@ -92,7 +92,7 @@
<string name="live_monitoring_interval">온라인 트래킹 시간 간격</string>
<string name="live_monitoring_url_descr">온라인 트래킹할 웹 주소를 지정합니다. 매개변수 형식 : 위도={0}, 경도={1}, 시간={2}, hdop={3}, 고도={4}, 속도={5}, bearing={6}</string>
<string name="live_monitoring_url">온라인 트래킹 웹 주소</string>
<string name="gpx_monitoring_disabled_warn">\'트랙을 GPX 파일 기록\' 설정을 활성화 하세요.</string>
<string name="gpx_monitoring_disabled_warn">\'트랙을 GPX 파일 기록\' 설정을 활성화 하세요.</string>
<string name="show_current_gpx_title">현재의 GPX경로를 표시합니다</string>
<string name="tip_recent_changes_0_7_0_t">0.7.0 버전에 대한 변경 사항들 :
\n\t- 오프라인 위키피디아 기사 포함 데이터
@ -124,13 +124,13 @@
<string name="fav_export_confirmation">이전에 익스포트한 즐겨찾기에 대한 파일이 이미 존재합니다. 이 파일을 대체하시겠습니까?</string>
<string name="profile_settings">특정 설정 프로필</string>
<string name="settings_preset">기본 프로필</string>
<string name="settings_preset_descr">각 프로필마다 지도보기와 경로탐색 설정을 기억합니다. 여기에 기본 프로필을 설정합니다.</string>
<string name="settings_preset_descr">각 프로필마다 맵뷰어 와 라우팅 설정을 기억합니다. 여기에 기본 프로필을 설정합니다.</string>
<string name="routing_settings">경로탐색</string>
<string name="routing_settings_descr">경로탐색을 위한 옵션을 지정합니다</string>
<string name="routing_settings">라우팅 설정</string>
<string name="routing_settings_descr">라우팅을 위한 옵션을 설정합니다</string>
<string name="global_settings">글로벌 설정</string>
<string name="index_settings">지도 관리</string>
<string name="index_settings">지도 데이터 관리</string>
<string name="index_settings_descr">기기에 저장된 오프라인 지도를 다운로드하고 관리합니다</string>
<string name="general_settings">일반</string>
<string name="general_settings_descr">앱에 대한 디스플레이와 일반 설정을 구성합니다</string>
@ -145,9 +145,7 @@
<string name="tip_rotation_switching">지도 방향</string>
<string name="binary_map_download_success">성공적으로 다운로드하였습니다.
사용을 위해 [메뉴-&gt;지도 레이어-&gt;지도 소스-&gt;오프라인 벡터 지도] 를 활성화합니다.
</string>
<string name="binary_map_download_success">"성공적으로 다운로드하였습니다.\n\n 사용을 위해 [메뉴-&gt;계층 지도-&gt;맵 소스-&gt;오프라인 벡터 지도] 를 활성화하세요. "</string>
<string name="tip_day_night_mode">주간/야간 모드</string>
@ -249,7 +247,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="search_position_map_view">마지막 지도 보기</string>
<string name="select_search_position">주변 검색 :</string>
<string name="context_menu_item_search">이 근처 검색</string>
<string name="context_menu_item_search">주변 검색</string>
<string name="tip_recent_changes_0_6_7_t">"0.6.7 버전에 대한 변경사항들 :
\n\t- 오프라인 데이터 관리 (OsmAnd 에서 직접 오프라인 데이터 다운로드, 삭제, 활성화 / 비활성화)
\n\t- 등록지점 및 그룹 (등록지점 그룹화, 삭제, 관리)
@ -261,7 +259,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
\n\t- 벡터 렌더링 개선
\n\t- TTS 엔진 개선 (정확한 거리 안내, 마일 가능)
\n\t- 버그 수정 "</string>
<string name="save_route_dialog_title">경로를 GPX파일로 저장</string>
<string name="save_route_dialog_title">루트를 변환하여 GPX파일로 저장</string>
<string name="route_successfully_saved_at">경로가 \'%1$s\'로 성공적으로 저장되었습니다.</string>
<string name="filename_input">파일 이름 : </string>
<string name="file_with_name_already_exist">같은 이름의 파일이 이미 존재합니다.</string>
@ -297,7 +295,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="local_index_items_restored">%2$d 개의 아이템 중 %1$d 가 성공적으로 활성화되었습니다.</string>
<string name="local_index_no_items_to_do">%1$s할 아이템이 없습니다</string>
<string name="local_index_action_do">%2$s 아이템을 %1$s하려고 합니다. 계속하시겠습니까?</string>
<string name="local_index_descr_title">지도 관리</string>
<string name="local_index_descr_title">오프라인 지도 데이터를 관리합니다</string>
<string name="local_index_mi_restore">활성화</string>
<string name="local_index_mi_backup">비활성화</string>
@ -334,7 +332,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
\n\t- UI 개선 및 큰 버그 수정 "</string>
<string name="voice_not_use">사용하지 않음</string>
<string name="installing_new_resources">새로운 데이터 풀기(Unpacking)…</string>
<string name="internet_connection_required_for_online_route">온라인 경로탐색 서비스가 선택되었지만 인터넷 연결이 되지 않습니다.</string>
<string name="internet_connection_required_for_online_route">온라인 라우팅 서비스가 선택되었지만 인터넷 연결을 할 수 없습니다.</string>
<string name="tts_language_not_supported_title">지원되지 않은 언어</string>
<string name="tts_language_not_supported">선택한 언어는 설치된 안드로이드 TTS (text-to-speech) 엔진이 지원되지 않습니다. 다른 TTS 엔진을 찾기 위해 구글마켓으로 가시겠습니까? 아니면 미리설정된 TTS 언어가 사용될 것입니다.</string>
<string name="tts_missing_language_data_title">누락된 데이터</string>
@ -350,7 +348,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="voice_stream_voice_call">음성 호출 오디오</string>
<string name="voice_stream_notification">알림 오디오</string>
<string name="voice_stream_music">미디어/음악 오디오</string>
<string name="warning_tile_layer_not_downloadable">앱이 지도 레이어 %1$s 를 다운로드할 수 없으니 재설치하시기 바랍니다.</string>
<string name="warning_tile_layer_not_downloadable">OsmAnd 앱이 계층 지도 %1$s 를 다운로드할 수 없으니, 재설치 하세요.</string>
<string name="overlay_transparency_descr">오버레이 맵 투명도를 수정합니다</string>
<string name="overlay_transparency">오버레이 투명도</string>
<string name="map_transparency_descr">언더레이 맵 투명도를 수정합니다</string>
@ -420,12 +418,12 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="tip_app_mode">프로필 사용하기</string>
<string name="tip_navigation">경로탐색</string>
<string name="tip_navigation">라우팅</string>
<string name="tip_navigation_t">"길안내를 시작하기 전에 목적지를 선택하여야 합니다. 그런 다음 맵 상에서 \'메뉴\' -&gt; \'방향\' 을 누르고 네비게이션 종류를 선택합니다.
\n\nThe destination is marked as an orange target flag marker on the map and OsmAnd displays the distance to it and the direction to it (orange triangle).
\n\nYou may chose either \'Start navigation\', which means that OsmAnd would live-guide you, give you voice instructions (if enabled), etc. Or you can select \'Display route\', resulting in static route without any live-guideance or adjustments as you move.
\n\nTo display a route to the selected destination from any point other than your current position, select the start point on the map and tap \'Directions from\'.
\n\nIf you use \'Directions from\' together with \'Start navigation\', OsmAnd will switch to your actual position as soon as it is found (so this can be used to jump-start routing before the position is found), while \'Directions from\' in combination with \'Display route\' just shows you the route from any arbitrary point you had selected without subsequent updates. "</string>
\n\n목적지는 지도에 대상 플래그 마커로 표시되고 OsmAnd는 (주황색 삼각형)으로 목적지까지의 거리와 목적지까지의 방향을 표시합니다.
\n\n당신이 선택 할 수 있습니다 중 등 OsmAnd, 당신을 살 - 가이드 (활성화 된 경우) 음성 안내를 제공 할 것을 의미, \'탐색 시작\'아니면 모든 라이브 guideance 또는 조정없이 정적 경로의 결과로, \'디스플레이 노선\'을 선택할 수 있습니다 당신은 이동.
\n\n현재 위치가 아닌 다른 위치에서 선택한 목적지로 경로를 표시하려면지도에 시작 지점을 선택하고 \'에서 오시는 길\'을 누릅니다.
\n\n당신이 함께 \'탐색을 시작합니다\'와 \'에서 오시는 길\'을 사용하는 경우가 발견 한, OsmAnd 즉시 실제 위치로 전환됩니다 (그래서 이것은에 사용할 수있는 위치가 발견되기 전에 라우팅 바로 시작할 수) \'에서 오시는 길\'동안 \'디스플레이 경로\'와 함께 당신에게 당신이 이후의 업데이트없이 선택했다 임의의 지점에서 경로를 보여줍니다. "</string>
<string name="tip_search">검색 중</string>
<string name="tip_map_context_menu">\"위치 사용\" 메뉴</string>
@ -495,9 +493,9 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="version_index_is_big_for_memory">인덱스 \'\'{0}\'\' 가 메모리에 적합하지 않습니다</string>
<string name="version_index_is_not_supported">인덱스 \'\'{0}\'\' 버전은 지원되지 않습니다</string>
<string name="use_osmand_routing_service">OsmAnd 경로탐색&gt;20km</string>
<string name="use_osmand_routing_service_descr">20km 이상 긴 거리를 위해 CloudMade 대신에 OsmAnd 오프라인 경로탐색 (실험적)을 사용합니다</string>
<string name="osmand_routing_experimental">OsmAnd 오프라인 경로탐색은 실험적인 기능이며 20 km 이상의 거리에서는 동작하지 않습니다.\n\n경로탐색 서비스는 일시적으로 온라인 CloudMade로 변경합니다.</string>
<string name="use_osmand_routing_service">OsmAnd 라우팅 &gt;20km</string>
<string name="use_osmand_routing_service_descr">20km 이상 긴 거리를 위해 CloudMade 대신에 OsmAnd 오프라인 라우팅을 사용합니다</string>
<string name="osmand_routing_experimental">OsmAnd 오프라인 라우팅은 실험적인 기능이며 20 km 이상의 거리에서는 동작하지 않습니다.\n\n라우팅 서비스는 일시적으로 온라인서비스인 CloudMade로 변경합니다.</string>
<string name="specified_dir_doesnt_exist">지정한 폴더를 찾을 수 없습니다.</string>
<string name="application_dir">저장 폴더</string>
@ -564,7 +562,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="voice">음성</string>
<string name="no_vector_map_loaded">벡터 맵을 적재하지 않았습니다</string>
<string name="map_route_by_gpx">GPX를 이용한 탐색</string>
<string name="map_route_by_gpx">GPX파일을 변환한 루트</string>
<string name="gpx_files_not_found">GPX 파일을 /osmand/tracks 폴더에서 찾을 수 없습니다</string>
<string name="layer_gpx_layer">GPX 경로…</string>
<string name="error_reading_gpx">GPX 데이터를 읽는 도중 오류</string>
@ -582,7 +580,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="rotate_map_to_bearing">지도 방향</string>
<string name="show_route">경로 상세정보</string>
<string name="fav_imported_sucessfully">즐겨찾기를 성공적으로 임포트하였습니다</string>
<string name="fav_file_to_load_not_found">즐겨찾기를 포함한 GPX 파일을 {0} 에서 찾을 수 없습니다</string>
<string name="fav_file_to_load_not_found">즐겨찾기를 포함한 GPX 파일을 {0}에서 찾을 수 없습니다</string>
<string name="fav_saved_sucessfully">즐겨찾기가 성공적으로 {0} 에 저장되었습니다</string>
<string name="no_fav_to_save">저장할 즐겨찾기 포인트가 없습니다</string>
<string name="import_fav">가져오기(임포트)</string>
@ -602,7 +600,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="layer_transport">대중교통 정류소</string>
<string name="layer_poi">POI…</string>
<string name="layer_map">맵 소스…</string>
<string name="menu_layers">지도 레이어</string>
<string name="menu_layers">계층 지도</string>
<string name="context_menu_item_search_poi">POI 검색</string>
@ -658,7 +656,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="map_orientation_default">장치와 같음</string>
<string name="map_orientation_portrait">세로</string>
<string name="map_orientation_landscape">가로</string>
<string name="map_screen_orientation">스크린 방향</string>
<string name="map_screen_orientation">지도화면 방향</string>
<string name="map_screen_orientation_descr">세로, 가로, 자동</string>
<string name="opening_hours_not_supported">오프닝 시간 형식은 편집을 지원하지 않습니다</string>
<string name="add_new_rule">새로운 규칙 추가</string>
@ -705,8 +703,8 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="max_level_download_tile">최대 온라인 줌</string>
<string name="max_level_download_tile_descr">다운로드할 최대 줌 레벨을 선택하세요</string>
<string name="route_general_information">전체거리 %1$s, 여행시간 %2$d h %3$d m.</string>
<string name="router_service_descr">온라인 또는 오프라인 경로탐색 서비스를 선택합니다</string>
<string name="router_service">길안내 서비스</string>
<string name="router_service_descr">온라인 또는 오프라인 라우팅 서비스를 선택합니다</string>
<string name="router_service">라우터 서비스</string>
<string name="sd_dir_not_accessible">저장할 SD 카드 디렉토리에 접근할 수 없습니다</string>
<string name="download_question">{0} - {1} 을 다운로드할까요?</string>
<string name="download_question_exist">{0} 에 대한 오프라인 데이터가 이미 존재합니다({1}). 업데이트할까요({2}) ?</string>
@ -725,7 +723,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="only_show">경로 표시</string>
<string name="follow">길안내 시작</string>
<string name="recalculate_route_to_your_location">전송 모드 :</string>
<string name="mark_final_location_first">먼저 목적지 포인트를 선택하세요</string>
<string name="mark_final_location_first">먼저 목적지를 선택하세요</string>
<string name="get_directions">길안내</string>
<string name="show_gps_status">GPS 정보</string>
<string name="opening_hours">오프닝 시간</string>
@ -761,18 +759,18 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="download_indexes_descr">오프라인 용 데이터를 인터넷으로부터 다운로드합니다</string>
<string name="download_indexes">오프라인 데이터 다운로드</string>
<string name="use_online_routing_descr">경로를 찾기위해 인터넷을 사용합니다</string>
<string name="use_online_routing">온라인 경로탐색 사용</string>
<string name="use_online_routing">온라인 라우팅 사용</string>
<string name="osm_settings_descr">OSM 로그인에 필요한 OSM 설정을 지정합니다</string>
<string name="data_settings_descr">언어를 지정하고, 데이터를 다운로드/재로드 합니다</string>
<string name="data_settings">데이터</string>
<string name="map_preferences_descr">지도 설정을 지정합니다: 지도 소스, 회전, 마커 위치, 스크린 방향</string>
<string name="map_preferences_descr">지도 설정을 지정합니다: 지도 소스, 회전, 마커 위치, 지도화면 방향</string>
<string name="osm_settings">OSM 편집</string>
<string name="auto_zoom_map_descr">속도에 따라 자동으로 지도 줌(zoom)을 합니다</string>
<string name="auto_zoom_map">자동 맵 줌</string>
<string name="additional_settings">추가 설정</string>
<string name="settings">설정</string>
<string name="save_current_track_descr">현재의 트랙을 SD 카드에 저장합니다</string>
<string name="save_current_track">현재 트랙을 GPX 파일로 저장</string>
<string name="save_current_track">현재 트랙을 GPX 파일로 저장</string>
<string name="save_track_interval_descr">길안내하는 동안 트랙 기록을 저장하는 로깅 간격을 선택합니다</string>
<string name="save_track_interval">길안내하는 동안 로깅 간격</string>
<string name="save_track_to_gpx_descrp">길안내하는 동안 트랙을 GPX파일로 저장합니다</string>
@ -990,7 +988,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="copying_osmand_files">OsmAnd 파일을 복사중</string>
<string name="calculate_osmand_route_gpx">OsmAnd 오프라인 경로 계산하기</string>
<string name="app_mode_truck">트럭</string>
<string name="routing_preferences_descr">길찾기 환경설정</string>
<string name="routing_preferences_descr">라우팅 환경설정</string>
<string name="speech_rate_descr">TTS에 대한 음성속도를 지정합니다</string>
<string name="speech_rate">음성 속도</string>
<string name="complex_route_calculation_failed">빠른 경로 계산 실패(%s), 느린 계산으로 돌아감.</string>
@ -1062,12 +1060,12 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="lang_sl">슬로베니아어</string>
<string name="lang_cy">웨일스어</string>
<string name="route_preferences">경로 환경설정</string>
<string name="guidance_preferences_descr">경로탐색 환경설정</string>
<string name="disable_complex_routing_descr">자동차 경로탐색의 복잡한 출발지/도착지 2단계 라우팅 사용불가</string>
<string name="guidance_preferences_descr">라우팅 환경설정</string>
<string name="disable_complex_routing_descr">자동차용 라우팅의 복잡한 출발지/도착지 2단계 라우팅 사용불가</string>
<string name="app_modes_choose_descr">앱에서 볼 수있는 사용자 프로필를 선택합니다</string>
<string name="map_widget_appearance">나머지 요소 :</string>
<string name="local_osm_changes_delete_all_confirm">%1$d OSM 변경 사항을 삭제하려고 합니다. 확실합니까?</string>
<string name="route_is_too_long">OsmAnd 오프라인 라우팅(길찾기)는 200km 이상 떨어진 포인트를 계산할 때 매우 긴 시간이 걸리 수 있습니다. (가끔 작동 되지 않을 수 있습니다) 당신은 더 나은 성능을 위해 중간 중간 포인트를 추가할 수 있습니다.</string>
<string name="route_is_too_long">OsmAnd 오프라인 라우팅(길찾기)는 200km 이상 떨어진 포인트를 계산할 때 매우 긴 시간이 걸리 수 있습니다. (가끔 작동 되지 않을 수 있습니다) 당신은 더 나은 성능을 위해 경유지를 추가할 수 있습니다.</string>
<string name="auto_zoom_close">가까운 거리에</string>
<string name="auto_zoom_far">중간 거리에</string>
<string name="auto_zoom_farthest">긴 거리에</string>
@ -1076,9 +1074,9 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="edit_tilesource_url_to_load">URL</string>
<string name="edit_tilesource_choose_existing">기존 선택 …</string>
<string name="osb_author_or_password_not_specified">설정에서 OSM 사용자 및 암호를 지정하십시오</string>
<string name="clear_intermediate_points">중간 포인트 지우기</string>
<string name="keep_intermediate_points">중간 포인트 유지</string>
<string name="new_directions_point_dialog">이미 중간 포인트를 설정했습니다.</string>
<string name="clear_intermediate_points">경유지 지우기</string>
<string name="keep_intermediate_points">경유지 유지</string>
<string name="new_directions_point_dialog">이미 경유자를 설정했습니다.</string>
<string name="context_menu_item_directions_to">~까지 길안내</string>
<string name="context_menu_item_directions_from">~부터 길안내</string>
<string name="route_descr_map_location">지도 : </string>
@ -1101,7 +1099,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
\n\t* SRTM 파일 삭제
\n\t* OSM 노트 지원 "</string>
<string name="search_street_in_neighborhood_cities">인근 도시에서 거리 검색</string>
<string name="intermediate_items_sort_return">중간 포인트는 목적지까지 가는 길에 포인트의 순서를 최적화하기 위해 재 정렬.</string>
<string name="intermediate_items_sort_return">경유지는 목적지까지 가는 길에 경유지의 순서를 최적화하기 위해 재 정렬.</string>
<string name="intermediate_items_sort_by_distance">정렬 (도어 투 도어)</string>
<string name="local_osm_changes_backup_successful">OSM 변경 파일이 성공적으로 생성되었습니다 %1$s</string>
<string name="local_osm_changes_backup_failed">백업 OSM 변경 실패</string>
@ -1133,7 +1131,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="files_limit">%1$d 파일 남음</string>
<string name="install_paid">정식 버전</string>
<string name="cancel_route">경로 해제</string>
<string name="cancel_navigation">경로탐색 중지</string>
<string name="cancel_navigation">라우팅 중지</string>
<string name="clear_destination">목적지 지우기</string>
<string name="download_using_mobile_internet">현재 와이파이가 연결되어 있지 않습니다. 현재의 인터넷 연결(3G)을 통해서 계속 다운로드 하시겠습니까?</string>
<string name="street_name">거리</string>
@ -1148,7 +1146,7 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="monitoring_settings_descr">여행을 기록하는 방법을 구성합니다</string>
<string name="osmand_monitoring_plugin_description">절전모드(스크린 끄기)에서 트래킹 및 경로탐색 활성화, 주기적으로 GPS 장치가 작동중일 때 . 표시 설정은 로컬 GPX 파일이나 웹 서비스를 사용하는 온라인에 트랙을 기록하는 설비 가능.</string>
<string name="osmand_monitoring_plugin_name">로깅 서비스</string>
<string name="osmand_background_plugin_description">주기적으로 GPS 장치를 On 시켜 절전모드(스크린 끄기)에서 트래킹 및 경로탐색을 가능하게 합니다.</string>
<string name="osmand_background_plugin_description">주기적으로 GPS 장치를 On 시켜 절전모드(스크린 끄기)에서 트래킹 및 라우팅을 가능하게 합니다.</string>
<string name="choose_osmand_theme_descr">앱 테마(색상)를 선택</string>
<string name="choose_osmand_theme">앱 테마</string>
<string name="accessibility_options">접근성(내게 필요한) 옵션</string>
@ -1173,9 +1171,9 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="local_indexes_cat_srtm">등고선 데이터</string>
<string name="local_indexes_cat_av">오디오/비디오 데이터</string>
<string name="stop_routing_confirm">경로탐색을 중지하시겠습니까 ?</string>
<string name="stop_routing_confirm">라우팅을 중지하시겠습니까 ?</string>
<string name="clear_dest_confirm">목적지를 취소하시겠습니까?</string>
<string name="precise_routing_mode_descr">고장 없이 정확한 경로를 탐색할 수 있습니다(여전히 거리 제한하고 느린 속도로).</string>
<string name="precise_routing_mode_descr">고장 없이 정확한 경로를 계산(라우팅) 할 수 있습니다 (여전히 거리 제한하고 느린 속도로).</string>
<string name="precise_routing_mode">정확한 길찾기:라우팅 (알파)</string>
<string name="recording_context_menu_show">표시</string>
<string name="recording_photo_description">사진 %1$s of %2$s</string>
@ -1270,12 +1268,12 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<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>
<string name="add_as_last_destination_point">마지막 목적지 포인트로 추가</string>
<string name="add_as_first_destination_point">첫번째 목적지 포인트로 추가</string>
<string name="add_as_last_destination_point">마지막 경유지로 추가</string>
<string name="add_as_first_destination_point">첫번째 경유지로 추가</string>
<string name="replace_destination_point">목적지 포인트 대체</string>
<string name="new_destination_point_dialog">이미 목적지 포인트 세트가 있다.</string>
<string name="target_points">목적</string>
<string name="replace_destination_point">목적지 대체</string>
<string name="new_destination_point_dialog">이미 목적지가 설정되었습니다.</string>
<string name="target_points">경유</string>
<string name="intermediate_point_too_far">도로에서 너무 멀리 떨어진 포인트 %1$s .</string>
<string name="arrived_at_intermediate_point">포인트에 도착했습니다</string>
<string name="context_menu_item_intermediate_point">포인트로 추가</string>
@ -1298,31 +1296,11 @@ OsmAnd 는 Openstreetmap.org (OSM) 데이터 기반의 맵을 사용하며 -맵
<string name="snap_to_road_descr">길안내할 동안 차량을 도로에 밀착시킴</string>
<string name="snap_to_road">도로에 밀착</string>
<string name="osmand_play_title_30_chars">OsmAnd 지도 및 네비게이션</string>
<string name="osmand_short_description_80_chars">글로벌 모바일 지도 보기 및 오프라인 및 온라인 OSM 지도를 위한 경로탐색</string>
<string name="osmand_long_description_1000_chars">" OsmAnd (OSM 자동 길안내 시스템) OsmAnd 글로벌 OpenStreetMap의 다양한 데이터에 접근할 수 있는 오픈 소스 탐색 응용 프로그램입니다. 모든 지도 데이터(벡터 맵 또는 타일 맵 ) 는 오프라인 사용을 위하여 휴대 전화 메모리 카드에 저장할 수 있습니다. OsmAnd는 또한 턴-바이-턴 음성 안내 등의 오프라인 및 온라인 라우팅(길찾기) 기능을 제공합니다. 핵심 기능 중 일부 : - 전체 오프라인 기능 (선택한 폴더에 저장, 벡터지도 또는 타일지도 다운로드 가능) - 컴팩트한 오프라인 벡터는 전 세계에서 사용가능 - 국가 또는 지역의 다운로드는 앱에서 직접 매핑 - GPX 또는 탐색 트랙, 관광 명소 등 가능한 여러 지도 레이어의 중첩, 즐겨 찾기, 등고선, 대중 교통 정류장, 사용자 정의 투명성 추가 - 주소 및 장소에 대한 오프라인 검색 장소(POI) - 짧은 거리를 위한 오프라인 라우팅 - 자동차, 자전거, 보행자 모드 : - 옵션으로 자동 주간/야간 지도 전환 - 옵션으로 속도에 따라 지도 줌레벨 변경 - 옴션으로 나침반이나 방향에 따라 맵 정렬 - 옴션으로 차선 안내, 속도제한 표시, 녹음음성 및 TTS음성 OsmAnd 무료 버전 제한 사항 : - 지도 다운로드 수 10회로 제한 - 위키 백과 또는 오프라인 관심 장소에 액세스할 수 없음. OsmAnd 는 적극적으로 개발하고 우리의 프로젝트와 프로젝트의 추가 진행은 개발 자금을 재정 지원에 의존하고 새로운 기능을 testdriving 하고있다. OsmAnd+ 를 구입, 또는 특정 새로운 기능에 자금을 지원하거나 osmand.net 에 일반 후원을 부탁드립니다. "</string>
<string name="osmand_short_description_80_chars">글로벌 모바일 맵 뷰어 및 오프라인 및 온라인 OSM 지도를 위한 라우팅</string>
<string name="osmand_long_description_1000_chars">" OsmAnd (OSM 자동 라우팅 및 길안내 시스템) OsmAnd 글로벌 OpenStreetMap의 다양한 데이터에 접근할 수 있는 오픈 소스 라우팅 응용 프로그램입니다. 모든 지도 데이터(벡터 맵 또는 타일 맵 ) 는 오프라인 사용을 위하여 휴대 전화 메모리 카드에 저장할 수 있습니다. OsmAnd는 또한 턴-바이-턴 음성 안내 등의 오프라인 및 온라인 라우팅(길찾기) 기능을 제공합니다. 핵심 기능 중 일부 : - 전체 오프라인 기능 (선택한 폴더에 저장, 벡터지도 또는 타일지도 다운로드 가능) - 컴팩트한 오프라인 벡터는 전 세계에서 사용가능 - 국가 또는 지역의 다운로드는 앱에서 직접 매핑 - GPX 또는 탐색 트랙, 관광 명소 등 가능한 여러 지도 레이어의 중첩, 즐겨 찾기, 등고선, 대중 교통 정류장, 사용자 정의 투명성 추가 - 주소 및 장소에 대한 오프라인 검색 장소(POI) - 짧은 거리를 위한 오프라인 라우팅 - 자동차, 자전거, 보행자 모드 : - 옵션으로 자동 주간/야간 지도 전환 - 옵션으로 속도에 따라 지도 줌레벨 변경 - 옴션으로 나침반이나 방향에 따라 맵 정렬 - 옴션으로 차선 안내, 속도제한 표시, 녹음음성 및 TTS음성 OsmAnd 무료 버전 제한 사항 : - 지도 다운로드 수 10회로 제한 - 위키 백과 또는 오프라인 관심 장소에 액세스할 수 없음. OsmAnd 는 적극적으로 개발하고 우리의 프로젝트와 프로젝트의 추가 진행은 개발 자금을 재정 지원에 의존하고 새로운 기능을 testdriving 하고있다. OsmAnd+ 를 구입, 또는 특정 새로운 기능에 자금을 지원하거나 osmand.net 에 일반 후원을 부탁드립니다. "</string>
<string name="osmand_plus_play_title_30_chars">OsmAnd+ 지도 및 네비게이션</string>
<string name="osmand_plus_short_description_80_chars">글로벌 모바일 지도보기 및 오프라인 및 온라인 OSM 지도를 위한 경로탐색</string>
<string name="osmand_plus_long_description_1000_chars">
OsmAnd + (OSM 자동 탐색 길안내 )
OsmAnd + 글로벌 OpenStreetMap의 다양한 (OSM) 데이터 에 접근 할 수있는 오픈 소스 탐색 응용 프로그램입니다. 모든 지도 데이터 (벡터 또는 타일 맵 ) 오프라인 사용에 대한휴대 전화 메모리 카드 에 저장할 수 있습니다. OsmAnd 또한 턴 - 바이 - 턴 음성 안내 등의 오프라인 및 온라인 라우팅 기능을 제공합니다.
OsmAnd + 는 프로젝트를 지원하는 새로운 기능 의 개발 을 투자 하고, 최신 업데이트를 받을 수 를 구입하여 , 유료 응용 프로그램 의 버전입니다.
핵심 기능 중 일부 :
- 전체 오프라인 기능 (선택 폴더 에 저장 다운로드 벡터 또는 타일 지도 )
- 컴팩트 오프라인 벡터는 전 세계 에서 사용할 수 매핑
- 국가 또는 지역 의 무제한 다운로드가 응용 프로그램 에서 직접 매핑
- 관광 오프라인 위키 백과 기능 (다운로드 위키 백과 관심 장소 ) , 큰
- GPX 또는 탐색 트랙 , 관광 명소 등 가능한 여러 지도 레이어 의 중첩 , 즐겨 찾기 , 등고선 , 대중 교통 정류장 , 사용자 정의 투명성 추가 지도
- 주소 및 장소 에 대한 오프라인 검색 장소 (POI )
- 짧은 거리 를위한 오프라인 라우팅 ( 실험 )
- 와 자동차 , 자전거 , 보행자 모드 :
- 선택적 자동 일 / 야경 전환
- 선택적인 속도 에 의존하는 지도 줌
- 운동의 나침반 이나 방향에 따라 옵션의 맵 정렬
- 선택적 차선 안내 , 제한 속도 표시, 기록 및 TTS 음색
</string>
<string name="osmand_plus_short_description_80_chars">글로벌 모바일 지도보기 및 오프라인 및 온라인 OSM 지도를 위한 라우팅</string>
<string name="osmand_plus_long_description_1000_chars">" OsmAnd + (OSM 자동 라우팅 및 길안내 ) OsmAnd + 글로벌 OpenStreetMap의 다양한 (OSM) 데이터 에 접근 할 수있는 오픈 소스 라우팅 응용 프로그램입니다. 모든 지도 데이터 (벡터 또는 타일 맵 ) 오프라인 사용에 대한휴대 전화 메모리 카드 에 저장할 수 있습니다. OsmAnd 또한 턴 - 바이 - 턴 음성 안내 등의 오프라인 및 온라인 라우팅 기능을 제공합니다. OsmAnd + 는 프로젝트를 지원하는 새로운 기능 의 개발 을 투자 하고, 최신 업데이트를 받을 수 를 구입하여 , 유료 응용 프로그램 의 버전입니다. 핵심 기능 중 일부 : - 전체 오프라인 기능 (선택 폴더 에 저장 다운로드 벡터 또는 타일 지도 ) - 컴팩트 오프라인 벡터는 전 세계 에서 사용할 수 매핑 - 국가 또는 지역 의 무제한 다운로드가 응용 프로그램 에서 직접 매핑 - 관광 오프라인 위키 백과 기능 (다운로드 위키 백과 관심 장소 ) , 큰 - GPX 또는 탐색 트랙 , 관광 명소 등 가능한 여러 지도 레이어 의 중첩 , 즐겨 찾기 , 등고선 , 대중 교통 정류장 , 사용자 정의 투명성 추가 지도 - 주소 및 장소 에 대한 오프라인 검색 장소 (POI ) - 짧은 거리 를위한 오프라인 라우팅 ( 실험 ) - 와 자동차 , 자전거 , 보행자 모드 : - 선택적 자동 일 / 야경 전환 - 선택적인 속도 에 의존하는 지도 줌 - 운동의 나침반 이나 방향에 따라 옵션의 맵 정렬 - 선택적 차선 안내 , 제한 속도 표시, 기록 및 TTS 음색 "</string>
<string name="osmand_plus_extended_description_4000_chars">
OsmAnd (OSM Automated Navigation Directions) is a map and navigation application with access to the free, worldwide, and high-quality OpenStreetMap (OSM) data. All map data can be stored on your device\'s memory card for offline use. Via your device\'s GPS, OsmAnd offers routing, with optical and voice guidance, for car, bike, and pedestrian. All the main functionalities work both online and offline (no internet needed).
@ -1405,7 +1383,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="map_widget_renderer">지도 스타일</string>
<string name="layer_map_appearance">맵뷰어 구성</string>
<string name="layer_map_appearance"> 뷰어</string>
<string name="show_lanes">레인 표시</string>
<string name="avoid_unpaved">비포장 도로 회피</string>
<string name="avoid_ferries">뱃길 회피</string>
@ -1423,8 +1401,8 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="int_continuosly">연속적인</string>
<string name="screen_is_locked">화면을 해제하려면 잠금아이콘을 누르세요</string>
<string name="map_widget_top_text">거리 이름</string>
<string name="map_widget_config">맵뷰어 구성</string>
<string name="map_widget_back_to_loc">현재 위치</string>
<string name="map_widget_config"> 뷰어</string>
<string name="map_widget_back_to_loc">현재위치 표시</string>
<string name="map_widget_lock_screen">화면 잠금</string>
<string name="map_widget_compass">나침반</string>
<string name="map_widget_top_stack">상태 표시줄 :</string>
@ -1496,7 +1474,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="gpxup_trackable">추적 가능</string>
<string name="gpxup_private">개인</string>
<string name="asap">가능한 빨리</string>
<string name="save_route_as_gpx">경로를 GPX 파일로 저장</string>
<string name="save_route_as_gpx">루트를 변환하여 GPX 파일로 저장</string>
<string name="route_roundabout">변곡점: take %1$d exit and go</string>
<string name="route_kl">왼쪽을 유지하고 가기</string>
<string name="route_kr">오른족을 유지하고 가기</string>
@ -1516,7 +1494,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="transport_search_desc">교통 검색</string>
<string name="favourites_search_desc">즐겨 찾기 검색</string>
<string name="history_search_desc">검색한 기록</string>
<string name="offline_navigation_not_available">OsmAnd 오프라인 경로탐색은 일시적으로 사용할 수 없습니다.</string>
<string name="offline_navigation_not_available">OsmAnd 오프라인 라우팅은 일시적으로 사용할 수 없습니다.</string>
<string name="left_side_navigation">왼쪽좌석 운전</string>
<string name="left_side_navigation_descr">왼쪽좌석 운전 국가를 선택합니다</string>
<string name="download_link_and_local_description">오프라인 데이터를 다운로드 하거나 업데이트 하려면 여기를 클릭하십시오. 세부정보를 보려면 기존 아이템을 클릭하세요, 비활성화 하거나 삭제하려면 길게 누르세요. 기기에 남아있는 현재 데이터는 (%1$s free):</string>
@ -1619,7 +1597,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="tip_map_styles_t">
</string>
<string name="tip_recent_changes_1_2_t">"Fixes in 1.2.1:
\n\t*Fix Geo Intent (Foursquare, c:geo) 지오 인텐트 수정\n\t*Fix screen tremble during navigation 경로탐색중 화면 떨림 수정
\n\t*Fix Geo Intent (Foursquare, c:geo) 지오 인텐트 수정\n\t*Fix screen tremble during navigation 라우팅중 화면 떨림 수정
\n\t*Other small fixes 다른 사소한 버그 수정
\n\nChanges in 1.2:
\n\t* Bug fixes (tuned routing, search, AV recording, voice prompts, some display improvements)
@ -1838,10 +1816,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z
\n\t* \'Day\': always use day mode
\n\t* \'Night\': always use night mode
\n\t* \'Light sensor\': map appearance is controlled by the device\'s light sensor (only if equipped) "</string>
<string name="tip_map_switch_t_v2">표시된 지도소스와 지도레이어는 [메뉴]-&gt;[지도 레이어]에서 변경할 수 있다.
[지도 소스] 아래에 미리 로드된 오프라인 벡터 지도를 사용하여 선택할 수 있다.
OsmAnd 는 또한 사용자 지도를 지원한다.
</string>
<string name="tip_map_switch_t_v2">"표시된 맵 소스와 계층 지도는 [메뉴]-&gt;[계층 지도]에서 변경할 수 있다.\n[맵 소스] 아래에.. 미리 로드된 오프라인 벡터 지도를 사용하여 선택할 수 있다. OsmAnd 는 또한 사용자 지도를 지원합니다. "</string>
<string name="tip_app_mode_t_v2">"OsmAnd 는 다른 사용 사례에 대해 서로 다른 (사용자 정의) 앱 프로필을 지원합니다. 지도 화면 (아이콘 자동차, 자전거 또는 보행자 )의 왼쪽 하단 모서리에 있는 프로필 버튼을 통해 프로필을 변경하거나 경로(\'전송 모드\')을 만들 때 할 수 있습니다. "</string>
<string name="tip_search_t">[위치사용-&gt;가까운 장소 검색] 메뉴를 통해서 지도에서 장소를 직접 검색할 수 있습니다. 또는 [메뉴-&gt;검색]을 통해서 화면에서 검색할 수 도 있습니다.
\n\n검색화면은 검색을 위한 템플릿을 제공합니다
@ -1857,13 +1832,13 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z
<string name="osmo_plugin_description">"OpenStreetMap 고급 실시간 모니터링. 이에 대해서는 http://osmo.mobi를 참조 하십시오. 다른 장치를 추적하고 추적받는 가능성을 제공 합니다. 익명 그룹을 만들고, 서로의 위치를 공유하고 소통한다. 세션 트래킹 또는 영구 트래킹에 대한 다양한 설정을 합니다. 익명그룹는 수많은 날에 제한되며 일부 기능 즉, 원격 제어 및 그룹 관리자는 제한된다. 완벽하게 기능적인 그룹은 웹사이트에 생성하고 그들에게 등록된 사용자만 액세스할 수 있습니다. "</string>
<string name="osmo_plugin_name">OsMo (실시간 친구위치 공유)</string>
<string name="osmo_settings">OsMo (실시간 친구찾기)</string>
<string name="share_route_as_gpx">경로를 GPX 파일로 공유</string>
<string name="share_route_as_gpx">루트를 GPX 파일로 공유</string>
<string name="share_route_subject">OsmAnd를 통해 공유된 경로</string>
<string name="arrival_distance">도착 알림</string>
<string name="arrival_distance_descr">도착 알림을 원하세요 ?</string>
<string name="keep_informing_never">결코</string>
<string name="keep_informing_descr">정기적인 간격으로 경로탐색 지시를 다시 실행</string>
<string name="keep_informing">경로탐색 명령을 반복</string>
<string name="keep_informing_descr">정기적인 간격으로 라우팅 명령을 재실행</string>
<string name="keep_informing">라우팅 명령을 반복</string>
<string name="navigation_intent_invalid">잘못된 포맷 : %s</string>
<string name="osmo_io_error">"OsMo 연결 문제 : "</string>
@ -1939,7 +1914,7 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z
<string name="osmo_regenerate_login_ids_confirm">개인 ID를 재발급 받으시겠습니까? 연결된 모든 장치는 더 이상 트랙을 기록할 수 없습니다.</string>
<string name="osmo_regenerate_login_ids">사용자 ID 재생성</string>
<string name="osmo_cancel_moving_target">이동 목적지 취소</string>
<string name="osmo_center_location">화면 센터</string>
<string name="osmo_center_location">맵뷰어 중심</string>
<string name="osmo_set_moving_target">이동 목적지로 설정</string>
<string name="osmo_use_server_name">등록된 이름</string>
<string name="osmo_connect_to_my_nickname">내 별명</string>
@ -1986,10 +1961,10 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z
<string name="gpx_info_asc_altitude">하강/상승: %1$s</string>
<string name="save_as_favorites_points">즐겨찾기 그룹으로 저장</string>
<string name="select_destination_and_intermediate_points">포인트 선택</string>
<string name="layer_amenity_label">포인트 레이블</string>
<string name="layer_amenity_label">포인트 이름</string>
<string name="show_zoom_buttons_navigation_descr">길안내중에 줌 버튼 보기</string>
<string name="show_zoom_buttons_navigation">줌 버튼 보이기</string>
<string name="none_selected_gpx">"선택한 GPX파일 없음. 이용 가능한 GPX경로를 선택 하려면 누르고 있어요."</string>
<string name="none_selected_gpx">선택한 GPX파일 없음. 이용 가능한 GPX파일을 선택 하려면 누르고 있어요.</string>
<string name="local_index_unselect_gpx_file">선택을 취소합니다.</string>
<string name="local_index_select_gpx_file">보이기위해 선택</string>
<string name="sort_by_distance">거리로 정렬</string>
@ -2102,4 +2077,6 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z
<string name="local_index_description">기존 항목을 클릭하여 더 많은 정보를 보세요. 비활성화 하려면 꾹 눌러주시거나 삭제하세요. 현재 데이터는 (%1$ s 무료):</string>
<string name="text_size_descr">지도에 텍스트 크기를 설정 합니다.</string>
<string name="text_size">텍스트 크기</string>
<string name="fav_point_dublicate">즐겨찾기 포인트 이름 중복</string>
<string name="fav_point_dublicate_message">중복된 포인트 이름을 방지 하기 위해서 %1$s 에 즐겨찾기 포인트 이름을 변경합니다.</string>
</resources>

View file

@ -1838,6 +1838,9 @@ OsmAnd yra aktyviai tobulinama ir mūsų projektas bei jo tolesnis progresas pri
<string name="traffic_warning_calming">Eismo greičio ribojimas</string>
<string name="traffic_warning_speed_camera">Greičio matavimo kamera</string>
<string name="traffic_warning">Eismo perspėjimas</string>
<string name="text_size_descr">Nustatyti teksto žemėlapyje dydį</string>
<string name="text_size_descr">Nustatyti teksto žemėlapyje dydį.</string>
<string name="text_size">Teksto dydis</string>
<string name="fav_point_dublicate">Pasikartojantis įsimintinos vietos pavadinimas</string>
<string name="fav_point_dublicate_message">Mes pakeitėme įsimintinos vietos pavadinimą į %1$s kad išvengtume pasikartojimų.</string>
<string name="local_index_description">Spustelėkite bet kurį elementą, norėdami gauti daugiau informacijos, paspauskite ir laikykite, norėdami išjungti arba ištrinti. Dabartiniai duomenys įrenginyje (%1$ s laisva):</string>
</resources>

View file

@ -1972,4 +1972,6 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A
<string name="local_index_description">Tik om details te bekijken; houd ingedrukt om uit te schakelen of te verwijderen. Huidige gegevens op het toestel (%1$s beschikbaar):</string>
<string name="text_size_descr">De grootte van tekst op de kaart instellen.</string>
<string name="text_size">Tekstgrootte</string>
<string name="fav_point_dublicate_message">Favoriet bestaat al: de naam is veranderd in %1$s</string>
<string name="fav_point_dublicate">Favoriet met deze naam bestaat al</string>
</resources>

View file

@ -1742,4 +1742,6 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres
<string name="local_index_description">Ischerta unu elementu esistente pro bìere prus detallios, carca e mantène carcau pro lu deativare o burrare. Datos como in su dispositivu (%1$s lìberos):</string>
<string name="text_size_descr">Issèbera sa mannària de su testu in sa mapa.</string>
<string name="text_size">Mannària de su testu</string>
<string name="fav_point_dublicate_message">Amus cambiau su nùmene de su prefèrridu tuo a %1$s pro evitare nùmenes dòpios.</string>
<string name="fav_point_dublicate">Nùmene dòpiu in sos prefèrridos</string>
</resources>

View file

@ -1994,4 +1994,6 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda,
<string name="local_index_description">Kliknite na existujúcu položku pre zobrazenie detailov. Podržte pre vypnutie alebo odstránenie. Dát je v súčasnosti na zariadení (%1$s voľné):</string>
<string name="text_size_descr">Nastaviť veľkosť textu na mape.</string>
<string name="text_size">Veľkosť textu</string>
<string name="fav_point_dublicate">Duplicitný názov obľúbeného bodu</string>
<string name="fav_point_dublicate_message">Názov obľúbeného bodu bol zmenený na %1$s, aby nevznikla duplicita.</string>
</resources>

View file

@ -1937,4 +1937,7 @@ Seznam držav (praktično ves svet!): Afganistan, Albanija, Alžirija, Andora, A
<string name="traffic_warning_speed_camera">Hitrostna kamera</string>
<string name="traffic_warning_calming">Ležeči policaj</string>
<string name="local_index_description">Kliknite katerikoli obstoječi element za ogled podrobnosti, pritisnite in držite za izklop ali izbris. Trenutni podatki na napravi (%1$s prosto):</string>
<string name="text_size_descr">Nastavite velikost napisov na zemljevidu.</string>
<string name="text_size">Velikost napisov</string>
<string name="rendering_attr_osmcTraces_name">Prosojnica s simboli za pohodništvo</string>
</resources>

File diff suppressed because one or more lines are too long

View file

@ -11,6 +11,8 @@
-->
<string name="test_native_render">Test native render</string>
<string name="test_native_render_msg">Starts activity with native render</string>
<string name="fav_point_dublicate">Favorite point name duplicate</string>
<string name="fav_point_dublicate_message">We changed your favorite point name to %1$s to avoid duplicated names.</string>
<string name="use_native_render">Use native render</string>
<string name="use_native_render_descr">Use C++ render instead of Java</string>
<string name="text_size_descr">Set the text size on the map.</string>

View file

@ -42,7 +42,6 @@ public class SettingsAccessibilityActivity extends SettingsBaseActivity {
return true;
}
});
addTextScale(grp);
addSpeechRateSetting(grp);
grp.addPreference(accessibilityModePreference);
@ -86,18 +85,6 @@ public class SettingsAccessibilityActivity extends SettingsBaseActivity {
}
protected void addTextScale(PreferenceGroup grp) {
Float[] txtValues = new Float[] {0.75f, 1f, 1.25f, 1.5f, 2f, 3f} ;
String[] txtNames = new String[txtValues.length];
for(int i = 0; i < txtNames.length; i++) {
txtNames[i] = (int)(txtValues[i] * 100) + " %";
}
grp.addPreference(createListPreference(settings.TEXT_SCALE, txtNames, txtValues, R.string.text_size, R.string.text_size_descr));
}
protected void addSpeechRateSetting(PreferenceGroup grp) {
Float[] sprValues = new Float[] {0.5f, 0.75f, 1f, 1.25f, 1.5f, 2f} ;
String[] sprNames = new String[sprValues.length];

View file

@ -10,6 +10,12 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;
import net.osmand.PlatformUtil;
import net.osmand.data.FavouritePoint;
import net.osmand.plus.GPXUtilities.GPXFile;
@ -140,6 +146,10 @@ public class FavouritesDbHelper {
return true;
}
FavoriteGroup group = getOrCreateGroup(p, 0);
//making sure that dublicated names will not occur in favorites
checkDublicates(p);
if (!p.getName().equals("")) {
p.setVisible(group.visible);
p.setColor(group.color);
@ -149,10 +159,36 @@ public class FavouritesDbHelper {
if (saveImmediately) {
saveCurrentPointsIntoFile();
}
return true;
}
private void checkDublicates(FavouritePoint p){
boolean fl = true;
String index = "";
int number = 0;
String name = p.getName();
while (fl){
fl = false;
for (FavouritePoint fp : cachedFavoritePoints){
if (fp.getName().equals(name)){
number++;
index = " (" + number + ")";
name = p.getName() + index;
fl=true;
break;
}
}
}
if (index.length() > 0){
p.setName(name);
AlertDialog.Builder builder = new AlertDialog.Builder(context.getMapActivity());
builder.setTitle(R.string.fav_point_dublicate);
builder.setMessage(context.getString(R.string.fav_point_dublicate_message, name));
builder.setPositiveButton(R.string.default_buttons_ok, null);
builder.show();
}
}
public boolean editFavouriteName(FavouritePoint p, String newName, String category) {
String oldCategory = p.getCategory();

View file

@ -704,7 +704,7 @@ public class OsmandSettings {
public final CommonPreference<Float> TEXT_SCALE = new FloatPreference("text_scale", 1f).makeProfile().cache();
{
TEXT_SCALE.setModeDefaultValue(ApplicationMode.CAR, 1.5f);
TEXT_SCALE.setModeDefaultValue(ApplicationMode.CAR, 1.25f);
}
public final CommonPreference<Float> MAP_ZOOM_SCALE_BY_DENSITY = new FloatPreference("map_zoom_scale_wo_density", 0f).makeProfile().cache();

View file

@ -75,7 +75,7 @@ public class MainMenuActivity extends Activity {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "osmand.app@gmail.com" }); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "osmand.app+crash@gmail.com" }); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.setType("vnd.android.cursor.dir/email"); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_SUBJECT, "OsmAnd bug"); //$NON-NLS-1$

View file

@ -198,12 +198,12 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
}
if (now - lastTimeAutoZooming > 4500) {
lastTimeAutoZooming = now;
float settingsZoomScale = mapView.getSettingsZoomScale();
float complexZoom = tb.getZoom() + tb.getZoomScale() + zdelta;
double settingsZoomScale = mapView.getSettingsZoomScale();
double complexZoom = tb.getZoom() + tb.getZoomScale() + zdelta;
// round to 0.33
float newZoom = Math.round((complexZoom - settingsZoomScale) * 3) / 3f;
double newZoom = Math.round((complexZoom - settingsZoomScale) * 3) / 3f;
int nz = (int)Math.round(newZoom);
float nzscale = newZoom - nz + settingsZoomScale;
double nzscale = newZoom - nz + settingsZoomScale;
mapView.setComplexZoom(nz, nzscale);
// mapView.getAnimatedDraggingThread().startZooming(mapView.getFloatZoom() + zdelta, false);
}

View file

@ -14,7 +14,6 @@ import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.*;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Window;
import net.osmand.IndexConstants;
@ -29,6 +28,7 @@ import net.osmand.plus.srtmplugin.SRTMPlugin;
import net.osmand.plus.voice.TTSCommandPlayerImpl;
import java.io.File;
import java.lang.ref.WeakReference;
import java.text.MessageFormat;
import java.util.*;
@ -51,8 +51,8 @@ public class DownloadActivity extends SherlockFragmentActivity {
private TextView progressMessage;
private TextView progressPercent;
private ImageView cancel;
private UpdatesIndexFragment updatesIndexFragment;
private List<LocalIndexInfo> localIndexInfos = new ArrayList<LocalIndexInfo>();
List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>();
public static final String FILTER_KEY = "filter";
@ -67,7 +67,7 @@ public class DownloadActivity extends SherlockFragmentActivity {
setProgressBarIndeterminateVisibility(false);
setContentView(R.layout.tab_content);
OsmandSettings settings = ((OsmandApplication) getApplication()).getSettings();
settings = ((OsmandApplication) getApplication()).getSettings();
tabHost = (TabHost) findViewById(android.R.id.tabhost);
tabHost.setup();
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
@ -94,6 +94,7 @@ public class DownloadActivity extends SherlockFragmentActivity {
} else {
downloadListIndexThread.runReloadIndexFiles();
}
downloadListIndexThread.setUiActivity(this);
settings = ((OsmandApplication)getApplication()).getSettings();
@ -192,8 +193,8 @@ public class DownloadActivity extends SherlockFragmentActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public void setUpdatesIndexFragment(UpdatesIndexFragment fragment){
this.updatesIndexFragment = fragment;
public Map<String, String> getIndexActivatedFileNames() {
return downloadListIndexThread != null ? downloadListIndexThread.getIndexActivatedFileNames() : null;
}
@Override
@ -224,7 +225,7 @@ public class DownloadActivity extends SherlockFragmentActivity {
return localIndexInfos;
}
public DownloadActivityType getType() { return type;}
public DownloadActivityType getDownloadType() { return type;}
public void setType(DownloadActivityType type) { this.type = type;}
@ -395,10 +396,52 @@ public class DownloadActivity extends SherlockFragmentActivity {
}
public void updateDownloadList(List<IndexItem> list){
if(updatesIndexFragment == null){
return;
for(WeakReference<Fragment> ref : fragList) {
Fragment f = ref.get();
if(f instanceof UpdatesIndexFragment) {
if(!f.isDetached()) {
((UpdatesIndexFragment) f).updateItemsList(list);
}
updatesIndexFragment.updateItemsList(list);
}
}
}
public void categorizationFinished(List<IndexItem> filtered, List<IndexItemCategory> cats){
for(WeakReference<Fragment> ref : fragList) {
Fragment f = ref.get();
if(f instanceof DownloadIndexFragment) {
if(!f.isDetached()) {
((DownloadIndexFragment) f).categorizationFinished(filtered, cats);
}
}
}
}
public void downloadListUpdated(){
for(WeakReference<Fragment> ref : fragList) {
Fragment f = ref.get();
if(f instanceof DownloadIndexFragment) {
if(!f.isDetached()) {
((DownloadIndexAdapter)((DownloadIndexFragment) f).getExpandableListAdapter()).notifyDataSetInvalidated();
}
}
}
}
public void downloadedIndexes(){
for(WeakReference<Fragment> ref : fragList) {
Fragment f = ref.get();
if(f instanceof DownloadIndexFragment) {
if(!f.isDetached()) {
DownloadIndexAdapter adapter = ((DownloadIndexAdapter)((DownloadIndexFragment) f).getExpandableListAdapter());
if (adapter != null) {
adapter.setLoadedFiles(getIndexActivatedFileNames(), getIndexFileNames());
}
}
}
}
}
public void updateDownloadButton(boolean scroll) {
@ -428,7 +471,7 @@ public class DownloadActivity extends SherlockFragmentActivity {
boolean excessLimit = left < 0;
if (left < 0)
left = 0;
if (DownloadActivityType.isCountedInDownloads(getType())) {
if (DownloadActivityType.isCountedInDownloads(getDownloadType())) {
text += " (" + (excessLimit ? "! " : "") + getString(R.string.files_limit, left).toLowerCase() + ")";
}
}
@ -456,6 +499,11 @@ public class DownloadActivity extends SherlockFragmentActivity {
return ((OsmandApplication) getApplication()).getSettings().isLightActionBar();
}
@Override
public void onAttachFragment(Fragment fragment) {
fragList.add(new WeakReference<Fragment>(fragment));
}
private void copyFilesForAndroid19(final String newLoc) {
SettingsGeneralActivity.MoveFilesToDifferentDirectory task =
new SettingsGeneralActivity.MoveFilesToDifferentDirectory(this,
@ -474,6 +522,11 @@ public class DownloadActivity extends SherlockFragmentActivity {
task.execute();
}
public Map<String,String> getIndexFileNames() {
return downloadListIndexThread != null ? downloadListIndexThread.getIndexFileNames() : null;
}
public void showDialogToDownloadMaps(Collection<String> maps) {
int count = 0;
int sz = 0;

View file

@ -124,6 +124,8 @@ public class DownloadActivityType {
return IndexConstants.EXTRA_EXT;
} else if (indexItem.fileName.endsWith(IndexConstants.SQLITE_EXT)) {
return IndexConstants.SQLITE_EXT;
} else if (indexItem.fileName.endsWith(IndexConstants.ANYVOICE_INDEX_EXT_ZIP)){
return "";
}
} else if (ROADS_FILE == this) {
return "-roads" + BINARY_MAP_INDEX_EXT;

View file

@ -9,30 +9,24 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import android.content.ActivityNotFoundException;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.*;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.MenuInflater;
import net.osmand.IndexConstants;
import net.osmand.access.AccessibleAlertBuilder;
import net.osmand.access.AccessibleToast;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.OsmandExpandableListFragment;
import net.osmand.plus.activities.SettingsGeneralActivity.MoveFilesToDifferentDirectory;
import net.osmand.plus.base.BasicProgressAsyncTask;
import net.osmand.plus.base.SuggestExternalDirectoryDialog;
import net.osmand.plus.srtmplugin.SRTMPlugin;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.AsyncTask.Status;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
@ -100,8 +94,6 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment {
setHasOptionsMenu(true);
DownloadActivity.downloadListIndexThread.setUiFragment(this);
settings = getMyApplication().getSettings();
@ -207,7 +199,7 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment {
if (!getDownloadActivity().getEntriesToDownload().containsKey(es)) {
selected++;
getDownloadActivity().getEntriesToDownload().put(es, es.createDownloadEntry(getMyApplication(),
getDownloadActivity().getType(), new ArrayList<DownloadEntry>(1)));
getDownloadActivity().getDownloadType(), new ArrayList<DownloadEntry>(1)));
}
}
}
@ -232,7 +224,7 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment {
return true;
}
List<DownloadEntry> download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getType(), new ArrayList<DownloadEntry>());
List<DownloadEntry> download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getDownloadType(), new ArrayList<DownloadEntry>());
if (download.size() > 0) {
// if(!fileToUnzip.exists()){
// builder.setMessage(MessageFormat.format(getString(R.string.download_question), baseName, extractDateAndSize(e.getValue())));
@ -288,7 +280,7 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment {
EditText filterText = (EditText) getView().findViewById(R.id.search_box);
filterText.removeTextChangedListener(textWatcher);
}
DownloadActivity.downloadListIndexThread.setUiFragment(null);
DownloadActivity.downloadListIndexThread.setUiActivity(null);
}
public List<String> toString(List<DownloadActivityType> t) {
@ -309,4 +301,39 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment {
public void updateProgress(boolean b) {
getDownloadActivity().updateProgress(b);
}
public void categorizationFinished(List<IndexItem> filtered, List<IndexItemCategory> cats) {
Map<String, String> indexActivatedFileNames = getDownloadActivity().getIndexActivatedFileNames();
Map<String, String> indexFileNames = getDownloadActivity().getIndexFileNames();
DownloadActivityType type = getDownloadActivity().getDownloadType();
DownloadIndexAdapter a = ((DownloadIndexAdapter) getExpandableListAdapter());
if (a == null){
return;
}
a.setLoadedFiles(indexActivatedFileNames, indexFileNames);
a.setIndexFiles(filtered, cats);
a.notifyDataSetChanged();
a.getFilter().filter(getFilterText());
if ((type == DownloadActivityType.SRTM_COUNTRY_FILE || type == DownloadActivityType.HILLSHADE_FILE)
&& OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) instanceof SRTMPlugin
&& !OsmandPlugin.getEnabledPlugin(SRTMPlugin.class).isPaid()) {
AlertDialog.Builder msg = new AlertDialog.Builder(getDownloadActivity());
msg.setTitle(R.string.srtm_paid_version_title);
msg.setMessage(R.string.srtm_paid_version_msg);
msg.setNegativeButton(R.string.button_upgrade_osmandplus, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:net.osmand.srtmPlugin.paid"));
try {
getDownloadActivity().startActivity(intent);
} catch (ActivityNotFoundException e) {
}
}
});
msg.setPositiveButton(R.string.default_buttons_ok, null);
msg.show();
}
}
}

View file

@ -19,20 +19,17 @@ import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.access.AccessibleToast;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings.OsmandPreference;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.base.BasicProgressAsyncTask;
import net.osmand.plus.download.DownloadFileHelper.DownloadFileShowWarning;
import net.osmand.plus.resources.ResourceManager;
import net.osmand.plus.srtmplugin.SRTMPlugin;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
@ -46,7 +43,7 @@ import android.view.View;
import android.widget.Toast;
public class DownloadIndexesThread {
private DownloadIndexFragment uiFragment = null;
private DownloadActivity uiActivity = null;
private IndexFileList indexFiles = null;
private Map<IndexItem, List<DownloadEntry>> entriesToDownload = new ConcurrentHashMap<IndexItem, List<DownloadEntry>>();
private Set<DownloadEntry> currentDownloads = new HashSet<DownloadEntry>();
@ -72,8 +69,8 @@ public class DownloadIndexesThread {
indexFiles = null;
}
public void setUiFragment(DownloadIndexFragment uiFragment) {
this.uiFragment = uiFragment;
public void setUiActivity(DownloadActivity uiActivity) {
this.uiActivity = uiActivity;
}
public List<DownloadEntry> flattenDownloadEntries() {
@ -90,6 +87,14 @@ public class DownloadIndexesThread {
return indexFiles != null ? indexFiles.getIndexFiles() : null;
}
public Map<String, String> getIndexFileNames(){
return indexFileNames;
}
public Map<String, String> getIndexActivatedFileNames(){
return indexActivatedFileNames;
}
public void updateLoadedFiles() {
Map<String, String> indexActivatedFileNames = app.getResourceManager().getIndexFileNames();
DownloadIndexFragment.listWithAlternatives(dateFormat, app.getAppPath(""), IndexConstants.EXTRA_EXT,
@ -137,15 +142,15 @@ public class DownloadIndexesThread {
protected void onProgressUpdate(Object... values) {
for (Object o : values) {
if (o instanceof DownloadEntry) {
if (uiFragment != null) {
((DownloadIndexAdapter) uiFragment.getExpandableListAdapter()).notifyDataSetInvalidated();
uiFragment.getDownloadActivity().updateDownloadButton(false);
if (uiActivity != null) {
uiActivity.downloadListUpdated();
uiActivity.updateDownloadButton(false);
}
} else if (o instanceof IndexItem) {
entriesToDownload.remove(o);
if (uiFragment != null) {
((DownloadIndexAdapter) uiFragment.getExpandableListAdapter()).notifyDataSetInvalidated();
uiFragment.getDownloadActivity().updateDownloadButton(false);
if (uiActivity != null) {
uiActivity.downloadListUpdated();
uiActivity.updateDownloadButton(false);
}
} else if (o instanceof String) {
AccessibleToast.makeText(ctx, (String) o, Toast.LENGTH_LONG).show();
@ -158,9 +163,9 @@ public class DownloadIndexesThread {
protected void onPreExecute() {
currentRunningTask.add( this);
super.onPreExecute();
if (uiFragment != null) {
if (uiActivity != null) {
downloadFileHelper.setInterruptDownloading(false);
View mainView = uiFragment.findViewById(R.id.MainLayout);
View mainView = uiActivity.findViewById(R.id.MainLayout);
if (mainView != null) {
mainView.setKeepScreenOn(true);
}
@ -174,21 +179,18 @@ public class DownloadIndexesThread {
AccessibleToast.makeText(ctx, result, Toast.LENGTH_LONG).show();
}
currentDownloads.clear();
if (uiFragment != null) {
View mainView = uiFragment.findViewById(R.id.MainLayout);
if (uiActivity != null) {
View mainView = uiActivity.findViewById(R.id.MainLayout);
if (mainView != null) {
mainView.setKeepScreenOn(false);
}
DownloadIndexAdapter adapter = ((DownloadIndexAdapter) uiFragment.getExpandableListAdapter());
if (adapter != null) {
adapter.setLoadedFiles(indexActivatedFileNames, indexFileNames);
updateFilesToUpdate();
}
uiActivity.downloadedIndexes();
}
currentRunningTask.remove(this);
if(uiFragment != null) {
uiFragment.updateProgress(false);
if(uiActivity != null) {
uiActivity.updateProgress(false);
}
updateFilesToUpdate();
}
@ -326,8 +328,8 @@ public class DownloadIndexesThread {
boolean res = false;
if (de.isAsset) {
try {
if (uiFragment != null) {
ResourceManager.copyAssets(uiFragment.getDownloadActivity().getAssets(), de.assetName, de.targetFile);
if (uiActivity != null) {
ResourceManager.copyAssets(uiActivity.getAssets(), de.assetName, de.targetFile);
boolean changedDate = de.targetFile.setLastModified(de.dateModified);
if(!changedDate) {
log.error("Set last timestamp is not supported");
@ -348,8 +350,8 @@ public class DownloadIndexesThread {
@Override
protected void updateProgress(boolean updateOnlyProgress) {
if(uiFragment != null) {
uiFragment.updateProgress(updateOnlyProgress);
if(uiActivity != null) {
uiActivity.updateProgress(updateOnlyProgress);
}
}
}
@ -380,19 +382,20 @@ public class DownloadIndexesThread {
protected void onPostExecute(IndexFileList result) {
indexFiles = result;
if (indexFiles != null && uiFragment != null) {
boolean basemapExists = uiFragment.getMyApplication().getResourceManager().containsBasemap();
if (indexFiles != null && uiActivity != null) {
prepareFilesToUpdate();
boolean basemapExists = uiActivity.getMyApplication().getResourceManager().containsBasemap();
IndexItem basemap = indexFiles.getBasemap();
if (basemap != null ) {
String dt = uiFragment.getMyApplication().getResourceManager().getIndexFileNames().get(basemap.getTargetFileName());
String dt = uiActivity.getMyApplication().getResourceManager().getIndexFileNames().get(basemap.getTargetFileName());
if (!basemapExists || !Algorithms.objectEquals(dt, basemap.getDate(dateFormat))) {
List<DownloadEntry> downloadEntry = basemap
.createDownloadEntry(uiFragment.getMyApplication(), DownloadActivityType.NORMAL_FILE,
.createDownloadEntry(uiActivity.getMyApplication(), DownloadActivityType.NORMAL_FILE,
new ArrayList<DownloadEntry>());
uiFragment.getDownloadActivity().getEntriesToDownload().put(basemap, downloadEntry);
AccessibleToast.makeText(uiFragment.getDownloadActivity(), R.string.basemap_was_selected_to_download,
uiActivity.getEntriesToDownload().put(basemap, downloadEntry);
AccessibleToast.makeText(uiActivity, R.string.basemap_was_selected_to_download,
Toast.LENGTH_LONG).show();
uiFragment.getDownloadActivity().findViewById(R.id.DownloadButton).setVisibility(View.VISIBLE);
uiActivity.findViewById(R.id.DownloadButton).setVisibility(View.VISIBLE);
}
}
if (indexFiles.isIncreasedMapVersion()) {
@ -402,9 +405,9 @@ public class DownloadIndexesThread {
AccessibleToast.makeText(ctx, R.string.list_index_files_was_not_loaded, Toast.LENGTH_LONG).show();
}
currentRunningTask.remove(this);
if (uiFragment != null) {
uiFragment.updateProgress(false);
runCategorization(uiFragment.getDownloadActivity().getType());
if (uiActivity != null) {
uiActivity.updateProgress(false);
runCategorization(uiActivity.getDownloadType());
}
}
@ -433,8 +436,8 @@ public class DownloadIndexesThread {
@Override
protected void updateProgress(boolean updateOnlyProgress) {
if (uiFragment != null) {
uiFragment.updateProgress(updateOnlyProgress);
if (uiActivity != null) {
uiActivity.updateProgress(updateOnlyProgress);
}
};
@ -473,8 +476,8 @@ public class DownloadIndexesThread {
super.onPreExecute();
currentRunningTask.add(this);
this.message = ctx.getString(R.string.downloading_list_indexes);
if(uiFragment != null) {
uiFragment.updateProgress(false);
if(uiActivity != null) {
uiActivity.updateProgress(false);
}
}
@ -502,43 +505,18 @@ public class DownloadIndexesThread {
@Override
protected void onPostExecute(List<IndexItem> filtered) {
if (uiFragment != null) {
DownloadIndexAdapter a = ((DownloadIndexAdapter) uiFragment.getExpandableListAdapter());
a.setLoadedFiles(indexActivatedFileNames, indexFileNames);
a.setIndexFiles(filtered, cats);
prepareFilesToUpdate(filtered);
a.notifyDataSetChanged();
a.getFilter().filter(uiFragment.getFilterText());
if ((type == DownloadActivityType.SRTM_COUNTRY_FILE || type == DownloadActivityType.HILLSHADE_FILE)
&& OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) instanceof SRTMPlugin
&& !OsmandPlugin.getEnabledPlugin(SRTMPlugin.class).isPaid()) {
Builder msg = new AlertDialog.Builder(uiFragment.getDownloadActivity());
msg.setTitle(R.string.srtm_paid_version_title);
msg.setMessage(R.string.srtm_paid_version_msg);
msg.setNegativeButton(R.string.button_upgrade_osmandplus, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:net.osmand.srtmPlugin.paid"));
try {
ctx.startActivity(intent);
} catch (ActivityNotFoundException e) {
}
}
});
msg.setPositiveButton(R.string.default_buttons_ok, null);
msg.show();
}
}
prepareFilesToUpdate();
currentRunningTask.remove(this);
if(uiFragment != null) {
uiFragment.updateProgress(false);
if(uiActivity != null) {
uiActivity.categorizationFinished(filtered, cats);
uiActivity.updateProgress(false);
}
}
@Override
protected void updateProgress(boolean updateOnlyProgress) {
if(uiFragment != null) {
uiFragment.updateProgress(updateOnlyProgress);
if(uiActivity != null) {
uiActivity.updateProgress(updateOnlyProgress);
}
};
@ -547,11 +525,12 @@ public class DownloadIndexesThread {
execute(inst, new Void[0]);
}
private void prepareFilesToUpdate(List<IndexItem> filtered) {
private void prepareFilesToUpdate() {
List<IndexItem> filtered = getCachedIndexFiles();
itemsToUpdate.clear();
for (IndexItem item : filtered) {
String sfName = item.getTargetFileName();
java.text.DateFormat format = uiFragment.getDownloadActivity().getMyApplication().getResourceManager().getDateFormat();
java.text.DateFormat format = uiActivity.getMyApplication().getResourceManager().getDateFormat();
String date = item.getDate(format);
String indexactivateddate = indexActivatedFileNames.get(sfName);
String indexfilesdate = indexFileNames.get(sfName);
@ -562,14 +541,16 @@ public class DownloadIndexesThread {
itemsToUpdate.add(item);
}
}
uiFragment.getDownloadActivity().updateDownloadList(itemsToUpdate);
if (uiActivity != null){
uiActivity.updateDownloadList(itemsToUpdate);
}
}
private void updateFilesToUpdate(){
List<IndexItem> stillUpdate = new ArrayList<IndexItem>();
for (IndexItem item : itemsToUpdate) {
String sfName = item.getTargetFileName();
java.text.DateFormat format = uiFragment.getDownloadActivity().getMyApplication().getResourceManager().getDateFormat();
java.text.DateFormat format = uiActivity.getMyApplication().getResourceManager().getDateFormat();
String date = item.getDate(format);
String indexactivateddate = indexActivatedFileNames.get(sfName);
String indexfilesdate = indexFileNames.get(sfName);
@ -581,7 +562,9 @@ public class DownloadIndexesThread {
}
}
itemsToUpdate = stillUpdate;
uiFragment.getDownloadActivity().updateDownloadList(itemsToUpdate);
if (uiActivity != null){
uiActivity.updateDownloadList(itemsToUpdate);
}
}

View file

@ -1,6 +1,7 @@
package net.osmand.plus.download;
import android.content.Context;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -16,7 +17,6 @@ import net.osmand.access.AccessibleToast;
import net.osmand.map.OsmandRegions;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandExpandableListFragment;
import java.text.MessageFormat;
import java.util.ArrayList;
@ -48,7 +48,6 @@ public class UpdatesIndexFragment extends SherlockListFragment {
});
setListAdapter(listAdapter);
setHasOptionsMenu(true);
getDownloadActivity().setUpdatesIndexFragment(this);
}
@Override
@ -60,12 +59,31 @@ public class UpdatesIndexFragment extends SherlockListFragment {
if(listAdapter == null){
return;
}
listAdapter.setIndexFiles(items);
listAdapter = new UpdateIndexAdapter(getDownloadActivity(), R.layout.download_index_list_item, items);
setListAdapter(listAdapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
final CheckBox ch = (CheckBox) v.findViewById(R.id.check_download_item);
onItemSelected(ch, position);
}
private void onItemSelected(CheckBox ch, int position){
final IndexItem e = (IndexItem) getListAdapter().getItem(position);
if (ch.isChecked()) {
ch.setChecked(!ch.isChecked());
getDownloadActivity().getEntriesToDownload().remove(e);
getDownloadActivity().updateDownloadButton(true);
return;
}
List<DownloadEntry> download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getDownloadType(), new ArrayList<DownloadEntry>());
if (download.size() > 0) {
getDownloadActivity().getEntriesToDownload().put(e, download);
getDownloadActivity().updateDownloadButton(true);
ch.setChecked(!ch.isChecked());
}
}
public DownloadActivity getDownloadActivity() {
@ -123,7 +141,7 @@ public class UpdatesIndexFragment extends SherlockListFragment {
if (!getDownloadActivity().getEntriesToDownload().containsKey(es)) {
selected++;
getDownloadActivity().getEntriesToDownload().put(es, es.createDownloadEntry(getMyApplication(),
getDownloadActivity().getType(), new ArrayList<DownloadEntry>(1)));
getDownloadActivity().getDownloadType(), new ArrayList<DownloadEntry>(1)));
}
}
@ -178,7 +196,7 @@ public class UpdatesIndexFragment extends SherlockListFragment {
TextView name = (TextView) v.findViewById(R.id.download_item);
TextView description = (TextView) v.findViewById(R.id.download_descr);
IndexItem e = items.get(position);
String eName = e.getVisibleName(getMyApplication(), osmandRegions);
String eName = e.getVisibleDescription(getMyApplication()) + "\n" + e.getVisibleName(getMyApplication(), osmandRegions);
name.setText(eName.trim()); //$NON-NLS-1$
String d = e.getDate(format) + "\n" + e.getSizeDescription(getMyApplication());
description.setText(d);
@ -189,24 +207,37 @@ public class UpdatesIndexFragment extends SherlockListFragment {
@Override
public void onClick(View v) {
ch.setChecked(!ch.isChecked());
final IndexItem e = (IndexItem) getListAdapter().getItem(position);
if (ch.isChecked()) {
ch.setChecked(!ch.isChecked());
getDownloadActivity().getEntriesToDownload().remove(e);
getDownloadActivity().updateDownloadButton(true);
return;
}
List<DownloadEntry> download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getType(), new ArrayList<DownloadEntry>());
if (download.size() > 0) {
getDownloadActivity().getEntriesToDownload().put(e, download);
getDownloadActivity().updateDownloadButton(true);
ch.setChecked(!ch.isChecked());
}
onItemSelected(ch, position);
}
});
if (e.getDate(format) != null) {
Map<String, String> indexActivatedFileNames = getDownloadActivity().getIndexActivatedFileNames();
Map<String, String> indexFileNames = getDownloadActivity().getIndexFileNames();
if (indexActivatedFileNames != null && indexFileNames != null){
String sfName = e.getTargetFileName();
if (e.getDate(format).equals(indexActivatedFileNames.get(sfName))) {
name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : "
+ indexActivatedFileNames.get(sfName));
name.setTypeface(Typeface.DEFAULT, Typeface.NORMAL);
} else if (e.getDate(format).equals(indexFileNames.get(sfName))) {
name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : "
+ indexFileNames.get(sfName));
name.setTypeface(Typeface.DEFAULT, Typeface.ITALIC);
} else if (indexActivatedFileNames.containsKey(sfName)) {
name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : "
+ indexActivatedFileNames.get(sfName));
name.setTypeface(Typeface.DEFAULT, Typeface.NORMAL);
} else {
name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : "
+ indexFileNames.get(sfName));
name.setTypeface(Typeface.DEFAULT, Typeface.ITALIC);
}
}
}
return v;
}

View file

@ -146,7 +146,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
public int getRadiusBug(RotatedTileBox tb) {
int z;
final float zoom = tb.getZoom() + tb.getZoomScale();
final double zoom = tb.getZoom() + tb.getZoomScale();
if (zoom < startZoom) {
z = 0;
} else if (zoom <= 12) {

View file

@ -104,7 +104,7 @@ public class OsMoPositionLayer extends OsmandMapLayer implements ContextMenuLaye
public int getRadiusPoi(RotatedTileBox tb){
int r = 0;
final float zoom = tb.getZoom() + tb.getZoomScale();
final double zoom = tb.getZoom() + tb.getZoomScale();
if(zoom < startZoom){
r = 0;
} else if(zoom <= 11){

View file

@ -86,9 +86,10 @@ public class OsMoThread {
}
protected void initConnection() throws IOException {
if (sessionInfo == null) {
// always ask session token
// if (sessionInfo == null) {
sessionInfo = service.prepareSessionToken();
}
// }
if(sessionInfo == null) {
return;
}
@ -165,7 +166,7 @@ public class OsMoThread {
}
} catch (Exception e) {
log.info("Exception selecting socket", e);
cmd("ERROR HEARTBEAT", true);
exc("ERROR HEARTBEAT : ", e);
e.printStackTrace();
if (activeChannel != null && !activeChannel.isConnected()) {
activeChannel = null;
@ -185,6 +186,14 @@ public class OsMoThread {
}
}
protected void exc(String header, Exception e) {
String eMsg = e.getMessage();
if(e.getStackTrace() != null && e.getStackTrace().length > 0) {
eMsg += " " + e.getStackTrace()[0].toString();
}
cmd(header + eMsg, true);
}
private void stopChannel() {
if (activeChannel != null) {
try {
@ -314,10 +323,14 @@ public class OsMoThread {
}
boolean processed = false;
for (OsMoReactor o : listReactors) {
try {
if (o.acceptCommand(header, id, data, obj, this)) {
processed = true;
break;
}
} catch (Exception e) {
exc("ERROR REACTOR:", e);
}
}
if (!processed) {
log.warn("Command not processed '" + cmd + "'");
@ -385,11 +398,17 @@ public class OsMoThread {
return null;
}
for (OsMoReactor s : listReactors) {
String l = s.nextSendCommand(this);
String l = null;
try {
l = s.nextSendCommand(this);
} catch (Exception e) {
exc("ERROR SENDER:", e);
}
if (l != null) {
cmd(l, true);
return ByteBuffer.wrap(prepareCommand(l).toString().getBytes("UTF-8"));
}
}
final long interval = System.currentTimeMillis() - lastSendCommand;
if(interval > TIMEOUT_TO_PING) {

View file

@ -161,23 +161,23 @@ public class OsMoTracker implements OsMoReactor {
}
return true;
} else if(command.equals("LT")) {
float lat = 0;
float lon = 0;
float speed = 0;
double lat = 0;
double lon = 0;
double speed = 0;
int k = 0;
for (int i = 1; i <= data.length(); i++) {
boolean separator = i == data.length() ||
!(Character.isDigit(data.charAt(i)) ||
data.charAt(i) == ':' || data.charAt(i) == '.');
data.charAt(i) == ':' || data.charAt(i) == '.' || data.charAt(i) == '-');
if (separator) {
char ch = data.charAt(k);
String vl = data.substring(k + 1, i);
if (ch == 'L') {
int l = vl.indexOf(":");
lat = Float.parseFloat(vl.substring(0, l));
lon = Float.parseFloat(vl.substring(l + 1));
lat = Double.parseDouble(vl.substring(0, l));
lon = Double.parseDouble(vl.substring(l + 1));
} else if (ch == 'S') {
speed = Float.parseFloat(vl);
speed = Double.parseDouble(vl);
}
k = i;
}
@ -188,7 +188,7 @@ public class OsMoTracker implements OsMoReactor {
loc.setLatitude(lat);
loc.setLongitude(lon);
if(speed > 0) {
loc.setSpeed(speed);
loc.setSpeed((float) speed);
}
if(trackerListener != null) {
trackerListener.locationChange(tid, loc);

View file

@ -22,19 +22,19 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import net.osmand.IProgress;
import net.osmand.ResultMatcher;
import net.osmand.NativeLibrary.NativeSearchResult;
import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher;
import net.osmand.access.AccessibleToast;
import net.osmand.binary.BinaryMapDataObject;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
import net.osmand.binary.RouteDataObject;
import net.osmand.binary.BinaryMapIndexReader.MapIndex;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
import net.osmand.binary.BinaryMapIndexReader.TagValuePair;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteSubregion;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
import net.osmand.binary.RouteDataObject;
import net.osmand.data.QuadPointDouble;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
@ -611,8 +611,6 @@ public class MapRenderRepositories {
// prevent editing
requestedBox = new RotatedTileBox(tileRect);
// calculate data box
QuadRect dataBox = requestedBox.getLatLonBounds();
long now = System.currentTimeMillis();
@ -660,21 +658,20 @@ public class MapRenderRepositories {
if(renderingReq.searchRenderingAttribute("polygonMinSizeToDisplay")) {
currentRenderingContext.polygonMinSizeToDisplay = renderingReq.getIntPropertyValue(renderingReq.ALL.R_ATTR_INT_VALUE);
}
final QuadPointDouble lt = requestedBox.getLeftTopTile(requestedBox.getZoom());
final QuadPointDouble lt = requestedBox.getLeftTopTile(requestedBox.getZoom() + requestedBox.getZoomScale());
// LatLon ltn = requestedBox.getLeftTopLatLon();
final float mapDensity = (float) Math.pow(2, requestedBox.getZoomScale());
final double tileDivisor = MapUtils.getPowZoom(31 - requestedBox.getZoom() -
requestedBox.getZoomScale());
currentRenderingContext.leftX = lt.x * MapUtils.getPowZoom(requestedBox.getZoomScale());
// MapUtils.get31TileNumberX(ltn.getLongitude()) / tileDivisor;
currentRenderingContext.topY = lt.y * MapUtils.getPowZoom(requestedBox.getZoomScale());
//MapUtils.get31TileNumberY(ltn.getLatitude()) / tileDivisor;
currentRenderingContext.leftX = lt.x;
currentRenderingContext.topY = lt.y;
currentRenderingContext.zoom = requestedBox.getZoom();
currentRenderingContext.rotate = requestedBox.getRotate();
currentRenderingContext.width = requestedBox.getPixWidth();
currentRenderingContext.height = requestedBox.getPixHeight();
currentRenderingContext.nightMode = nightMode;
currentRenderingContext.preferredLocale = prefs.MAP_PREFERRED_LOCALE.get();
final float mapDensity = (float) Math.pow(2, requestedBox.getZoomScale());
currentRenderingContext.setDensityValue(mapDensity);
//Text/icon scales according to mapDensity (so text is size of road)
// currentRenderingContext.textScale = (requestedBox.getDensity()*app.getSettings().TEXT_SCALE.get());

View file

@ -547,10 +547,10 @@ public class OsmandRenderer {
rc.pointCount ++;
double tx = xt / rc.tileDivisor;
double ty = yt / rc.tileDivisor;
float dTileX = (float) (tx - rc.leftX);
float dTileY = (float) (ty - rc.topY);
float x = rc.cosRotateTileSize * dTileX - rc.sinRotateTileSize * dTileY;
float y = rc.sinRotateTileSize * dTileX + rc.cosRotateTileSize * dTileY;
double dTileX = (tx - rc.leftX);
double dTileY = (ty - rc.topY);
float x = (float) (rc.cosRotateTileSize * dTileX - rc.sinRotateTileSize * dTileY);
float y = (float) (rc.sinRotateTileSize * dTileX + rc.cosRotateTileSize * dTileY);
rc.tempPoint.set(x, y);
if(rc.tempPoint.x >= 0 && rc.tempPoint.x < rc.width &&
rc.tempPoint.y >= 0 && rc.tempPoint.y < rc.height){

View file

@ -34,7 +34,7 @@ public class AnimateDraggingMapThread {
private double targetLatitude = 0;
private double targetLongitude = 0;
private int targetIntZoom = 0;
private float targetZoomScale = 0;
private double targetZoomScale = 0;
private boolean isAnimatingZoom;
@ -118,14 +118,14 @@ public class AnimateDraggingMapThread {
startMoving(finalLat, finalLon, endZoom, tileView.getZoomScale(), notifyListener);
}
public void startMoving(final double finalLat, final double finalLon, final int endZoom, final float endZoomScale, final boolean notifyListener){
public void startMoving(final double finalLat, final double finalLon, final int endZoom, final double endZoomScale, final boolean notifyListener){
stopAnimatingSync();
double startLat = tileView.getLatitude();
double startLon = tileView.getLongitude();
float rotate = tileView.getRotate();
final int startZoom = tileView.getZoom();
final RotatedTileBox rb = tileView.getCurrentRotatedTileBox().copy();
final float zoomScale = rb.getZoomScale();
final double zoomScale = rb.getZoomScale();
boolean skipAnimation = false;
float mStX = rb.getPixXFromLatLon(startLat, startLon) - rb.getPixXFromLatLon(finalLat, finalLon);
float mStY = rb.getPixYFromLatLon(startLat, startLon) - rb.getPixYFromLatLon(finalLat, finalLon);
@ -208,11 +208,11 @@ public class AnimateDraggingMapThread {
}
private void animatingZoomInThread(float zoomStart, int zoom, float zoomScale, float animationTime, boolean notifyListener){
private void animatingZoomInThread(double zoomStart, int zoom, double zoomScale, float animationTime, boolean notifyListener){
try {
isAnimatingZoom = true;
float curZoom = zoomStart;
float zoomEnd = zoom + zoomScale;
double curZoom = zoomStart;
double zoomEnd = (zoom + zoomScale);
animationTime *= Math.abs(zoomEnd - zoomStart);
// AccelerateInterpolator interpolator = new AccelerateInterpolator(1);
LinearInterpolator interpolator = new LinearInterpolator();
@ -247,12 +247,12 @@ public class AnimateDraggingMapThread {
startZooming(zoomEnd, tileView.getZoomScale(), notifyListener);
}
public void startZooming(final int zoomEnd, final float zoomScale, final boolean notifyListener){
public void startZooming(final int zoomEnd, final double zoomScale, final boolean notifyListener){
final float animationTime = ZOOM_ANIMATION_TIME;
startThreadAnimating(new Runnable(){
@Override
public void run() {
final float zoomStart = tileView.getZoom() + tileView.getZoomScale();
final double zoomStart = tileView.getZoom() + tileView.getZoomScale();
setTargetValues(zoomEnd, zoomScale, tileView.getLatitude(), tileView.getLongitude());
animatingZoomInThread(zoomStart, zoomEnd, zoomScale, animationTime, notifyListener);
pendingRotateAnimation();
@ -305,7 +305,7 @@ public class AnimateDraggingMapThread {
targetZoomScale = 0;
}
private void setTargetValues(int zoom, float zoomScale, double lat, double lon){
private void setTargetValues(int zoom, double zoomScale, double lat, double lon){
targetIntZoom = zoom;
targetZoomScale = zoomScale;
targetLatitude = lat;
@ -335,7 +335,7 @@ public class AnimateDraggingMapThread {
return targetIntZoom;
}
public float getTargetZoomScale() {
public double getTargetZoomScale() {
return targetZoomScale;
}

View file

@ -306,7 +306,7 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
}
}
public void setComplexZoom(int zoom, float scale) {
public void setComplexZoom(int zoom, double scale) {
if (mainLayer != null && zoom <= mainLayer.getMaximumShownMapZoom() && zoom >= mainLayer.getMinimumShownMapZoom()) {
animatedDraggingThread.stopAnimating();
currentViewport.setZoom(zoom, scale, 0);
@ -360,11 +360,11 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
return currentViewport.getZoom();
}
public float getSettingsZoomScale() {
return getSettings().getSettingsZoomScale() + (float)Math.sqrt(Math.max(0, getDensity() - 1));
public double getSettingsZoomScale() {
return getSettings().getSettingsZoomScale() + Math.sqrt(Math.max(0, getDensity() - 1));
}
public float getZoomScale() {
public double getZoomScale() {
return currentViewport.getZoomScale();
}
@ -677,7 +677,7 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
}
}
protected void setZoomAnimate(int zoom, float zoomScale, boolean notify) {
protected void setZoomAnimate(int zoom, double zoomScale, boolean notify) {
currentViewport.setZoom(zoom, zoomScale, 0);
refreshMap();
if (locationListener != null && notify) {
@ -686,9 +686,9 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
}
// for internal usage
protected void zoomToAnimate(float tzoom, boolean notify) {
protected void zoomToAnimate(double tzoom, boolean notify) {
int zoom = getZoom();
float zoomToAnimate = tzoom - zoom - getZoomScale();
double zoomToAnimate = tzoom - zoom - getZoomScale();
if (zoomToAnimate >= 1) {
zoom += (int) zoomToAnimate;
zoomToAnimate -= (int) zoomToAnimate;
@ -851,13 +851,13 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
final RotatedTileBox calc = initialViewport.copy();
calc.setLatLonCenter(initialCenterLatLon.getLatitude(), initialCenterLatLon.getLongitude());
float calcZoom = initialViewport.getZoom() + dz + initialViewport.getZoomScale();
double calcZoom = initialViewport.getZoom() + dz + initialViewport.getZoomScale();
float calcRotate = calc.getRotate() + angle;
calc.setRotate(calcRotate);
calc.setZoomAnimation(dz);
final LatLon r = calc.getLatLonFromPixel(cp.x + dx, cp.y + dy);
setLatLon(r.getLatitude(), r.getLongitude());
zoomToAnimate(calcZoom, true);
zoomToAnimate((float) calcZoom, true);
rotateToAnimate(calcRotate);
}

View file

@ -184,7 +184,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
public int getRadiusPoi(RotatedTileBox tb) {
int r = 0;
final float zoom = tb.getZoom() + tb.getZoomScale();
final double zoom = tb.getZoom() + tb.getZoomScale();
if (zoom < startZoom) {
r = 0;
} else if (zoom <= 15) {

View file

@ -177,7 +177,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
public int getRadiusPoi(RotatedTileBox tb){
int r = 0;
final float zoom = tb.getZoom() + tb.getZoomScale();
final double zoom = tb.getZoom() + tb.getZoomScale();
if(zoom <= 15){
r = 10;
} else if(zoom <= 16){

View file

@ -47,7 +47,7 @@ public class TransportInfoLayer extends OsmandMapLayer {
}
public int getRadius(RotatedTileBox tb){
final float zoom = tb.getZoom() + tb.getZoomScale();
final double zoom = tb.getZoom() + tb.getZoomScale();
if(zoom <= 16) {
return (int) (tb.getDensity() * 8);
}

View file

@ -122,7 +122,7 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa
}
public int getRadiusPoi(RotatedTileBox tb){
final float zoom = tb.getZoom() + tb.getZoomScale();
final double zoom = tb.getZoom() + tb.getZoomScale();
int r;
if(zoom < startZoom){
r = 0;

View file

@ -124,7 +124,7 @@ public class MapZoomControls extends MapControls {
zoomShadow.draw(canvas);
if (drawZoomLevel) {
String zoomText = tb.getZoom() + "";
float frac = tb.getZoomScale();
double frac = tb.getZoomScale();
if (frac != 0) {
int ifrac = (int) (frac * 10);
boolean pos = ifrac > 0;

View file

@ -17,7 +17,7 @@ import android.widget.FrameLayout;
public class RulerControl extends MapControls {
ShadowText cacheRulerText = null;
float cacheRulerZoom = 0;
double cacheRulerZoom = 0;
double cacheRulerTileX = 0;
double cacheRulerTileY = 0;
float cacheRulerTextLen = 0;

View file

@ -18,6 +18,7 @@ import net.osmand.render.RenderingRulesStorage;
import net.osmand.util.Algorithms;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.preference.PreferenceGroup;
import android.widget.Toast;
public class AppearanceWidgetsFactory {
@ -53,6 +54,35 @@ public class AppearanceWidgetsFactory {
view.refreshMap();
}
});
MapWidgetRegistry.MapWidgetRegInfo w = mapInfoControls.registerAppearanceWidget(R.drawable.widget_no_icon,
R.string.text_size, "text_size", view.getSettings().TEXT_SCALE);
w.setStateChangeListener(new Runnable() {
@Override
public void run() {
AlertDialog.Builder b = new AlertDialog.Builder(view.getContext());
//test old descr as title
b.setTitle(R.string.text_size);
final Float[] txtValues = new Float[] {0.75f, 1f, 1.25f, 1.5f, 2f, 3f} ;
int selected = -1;
final String[] txtNames = new String[txtValues.length];
for (int i = 0; i < txtNames.length; i++) {
txtNames[i] = (int) (txtValues[i] * 100) + " %";
if (view.getSettings().TEXT_SCALE.get() == txtValues[i]) {
selected = i;
}
}
b.setSingleChoiceItems(txtNames, selected, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
view.getSettings().TEXT_SCALE.set(txtValues[which]);
view.getApplication().getResourceManager().getRenderer().clearCache();
view.refreshMap(true);
dialog.dismiss();
}
});
b.show();
}
});
final MapWidgetRegistry.MapWidgetRegInfo showDestinationArrow = mapInfoControls.registerAppearanceWidget(R.drawable.widget_show_destination_arrow, R.string.map_widget_show_destination_arrow,
"show_destination_arrow", view.getSettings().SHOW_DESTINATION_ARROW);