Merge pull request #10309 from osmandapp/master

update test branch
This commit is contained in:
Hardy 2020-12-01 17:23:21 +01:00 committed by GitHub
commit fe827acec0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 171 additions and 72 deletions

View file

@ -43,6 +43,7 @@ public class Amenity extends MapObject {
public static final String IS_PART = "is_part";
public static final String IS_AGGR_PART = "is_aggr_part";
public static final String CONTENT_JSON = "content_json";
public static final String ROUTE_ID = "route_id";
private String subType;

View file

@ -3987,4 +3987,5 @@
<string name="cannot_upload_image">لا يمكن تحميل الصورة، من فضلك، حاول مرة أخرى في وقت لاحق</string>
<string name="select_picture">تحديد صورة</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">الألمانية (تقليدية)</string>
</resources>

View file

@ -3999,4 +3999,5 @@
<string name="cannot_upload_image">Ne povas alŝuti la bildon, reprovu poste</string>
<string name="select_picture">Elektu bildon</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">Germana (ordinara)</string>
</resources>

View file

@ -4004,4 +4004,6 @@
<string name="use_dev_url">Usar dev.openstreetmap.org</string>
<string name="cannot_upload_image">No se puede subir la imagen, inténtalo más tarde</string>
<string name="select_picture">Elegir imagen</string>
<string name="lang_de_casual">Alemán (casual)</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
</resources>

View file

@ -3976,4 +3976,5 @@
<string name="cannot_upload_image">Impossible d\'envoyer l\'image, veuillez réessayer plus tard</string>
<string name="select_picture">Sélectionnez une image</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">Allemand (courant)</string>
</resources>

View file

@ -3990,4 +3990,6 @@
<string name="use_dev_url">A dev.openstreetmap.org használata</string>
<string name="cannot_upload_image">Nem lehet feltölteni a képet, kérjük, próbálja meg később</string>
<string name="select_picture">Kép kijelölése</string>
<string name="lang_de_casual">német (tegeződő)</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
</resources>

View file

@ -3952,7 +3952,7 @@
<string name="shared_string_add_photo">Aggiungi foto</string>
<string name="register_on_openplacereviews">Registrati su
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">Per contribuire delle altre foto autenticati nel sito del progetto a sorgente aperto OpenPlaceReviews.org.</string>
<string name="register_on_openplacereviews_desc">Le foto sono fornite dal progetto open data OpenPlaceReviews.org. Per caricare le tue foto devi registrarti sul sito web.</string>
<string name="register_opr_create_new_account">Crea un nuovo account</string>
<string name="register_opr_have_account">Ho già un account</string>
<string name="shared_string_search_history">Cronologia di ricerca</string>
@ -3960,7 +3960,7 @@
<string name="app_mode_motorboat">Motoscafo</string>
<string name="login_open_street_map">Connettiti a OpenStreetMap</string>
<string name="login_open_street_map_org">Connettiti a OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Registrati con OpenStreetMap</string>
<string name="sign_in_with_open_street_map">Accedi con OpenStreetMap</string>
<string name="open_street_map_login_mode">Devi fare il login per inviare nuove modifiche o dei cambiamenti.
\n
\nPuoi fare login utilizzando il metodo sicuro OAuth o il nomeutente e password.</string>
@ -3998,4 +3998,5 @@
<string name="cannot_upload_image">Impossibile caricare l\'immagine, riprovare in seguito</string>
<string name="select_picture">Scegli la foto</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">German (casual)</string>
</resources>

View file

@ -3982,7 +3982,7 @@
<string name="shared_string_search_history">היסטוריית חיפוש</string>
<string name="app_mode_kayak">קיאק</string>
<string name="app_mode_motorboat">סירת מנוע</string>
<string name="gpx_upload_identifiable_visibility_descr"></string>
<string name="gpx_upload_identifiable_visibility_descr"/>
<string name="shared_string_resources">משאבים</string>
<string name="approximate_file_size">גודל קובץ משוערך</string>
<string name="select_data_to_export">נא לבחור את הנתונים שייוצאו לקובץ.</string>
@ -4001,4 +4001,6 @@
<string name="use_dev_url">להשתמש ב־dev.openstreetmap.org</string>
<string name="cannot_upload_image">לא ניתן להעלות תמונה, נא לנסות שוב מאוחר יותר</string>
<string name="select_picture">בחירת תמונה</string>
<string name="lang_de_casual">גרמנית (עממית)</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
</resources>

View file

@ -2799,8 +2799,9 @@
\n• Andre feilrettinger
\n</string>
<string name="commiting_way">Sender inn vei…</string>
<string name="send_search_query_description">Vi kommer til å sende inn ditt søk \"%1$s\", sammen med din plassering.
\nIngen personlig informasjon samles inn, søkedata brukes kun for å forbedre søkealgoritmen.</string>
<string name="send_search_query_description">Vi kommer til å sende inn ditt søk «%1$s», sammen med din plassering.
\n
\nIngen personlig info samles inn, søkedata brukes kun for å forbedre søkealgoritmen.</string>
<string name="test_voice_desrc">Trykk på en knapp og lytt til den tilhørende talemeldingen for å høre om den mangler eller er feil</string>
<string name="release_3_2_pre">• Fikset krasj ved oppstart som skjedde på noen enheter
\n

View file

@ -3369,7 +3369,7 @@
<string name="default_speed_dialog_msg">Szacuje czas przyjazdu dla nieznanego rodzaju dróg i ograniczenia prędkości na wszystkich drogach (może zmienić trasę)</string>
<string name="swap_start_and_destination">Odwróć początek i cel</string>
<string name="track_saved">Zapisano ślad</string>
<string name="empty_filename">Nazwa pliku jest pusta</string>
<string name="empty_filename">Pusta nazwa pliku</string>
<string name="shared_string_revert">Przywróć</string>
<string name="quick_action_directions_from_desc">Przycisk umożliwiający wyśrodkowanie ekranu w punkcie wyjścia. Następnie poprosi o ustawienie miejsca docelowego lub uruchomi obliczanie trasy.</string>
<string name="clear_confirmation_msg">Wyczyścić %1$s\?</string>
@ -3958,26 +3958,26 @@
<string name="message_you_need_add_two_points_to_show_graphs">Musisz dodać co najmniej dwa punkty</string>
<string name="subscription_payment_issue_title">Wystąpił problem z Twoją subskrypcją. Kliknij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności.</string>
<string name="subscription_on_hold_title">Subskrypcja OsmAnd Live jest wstrzymana</string>
<string name="user_login">Nazwa użytkownika</string>
<string name="user_login">Login</string>
<string name="login_open_street_map">Zaloguj się do OpenStreetMap</string>
<string name="login_open_street_map_org">Zaloguj się do OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Zaloguj się za pomocą OpenStreetMap</string>
<string name="open_street_map_login_mode">Zaloguj się, aby przesłać nowe lub zmodyfikowane zmiany,
\n
\nza pomocą protokołu OAuth lub nazwy użytkownika i hasła.</string>
<string name="use_login_password">Zaloguj się za pomocą nazwy użytkownika i hasła</string>
<string name="use_login_password">Użyj loginu i hasła</string>
<string name="login_account">Konto</string>
<string name="osm_edit_close_note">Zamknij uwagę OSM</string>
<string name="osm_edit_comment_note">Skomentuj uwagę OSM</string>
<string name="markers_history">Historia znaczników</string>
<string name="send_files_to_openstreetmap">Wyślij plik GPX do OpenStreetMap</string>
<string name="enter_text_separated">Wpisz tagi oddzielone przecinkami.</string>
<string name="gpx_upload_trackable_visibility_descr">Możliwość śledzenia oznacza, że ślad nie pojawi się na żadnej publicznej liście, ale punkty śledzenia będą nadal dostępne za pośrednictwem publicznego API GPS ze znacznikami czasu. Inni użytkownicy będą mogli pobrać tylko te przetworzone punkty śledzenia z Twojego śladu, których nie można powiązać bezpośrednio z Tobą.</string>
<string name="osm_login_descr">Zaloguj się przy użyciu bezpiecznej metody autoryzacji OAuth lub użyj swojej nazwy użytkownika i hasła.</string>
<string name="gpx_upload_trackable_visibility_descr">„Śledzenie” oznacza, że ślad nie pojawia się w żadnych publicznych wykazach, ale przetworzone punkty śledzenia z sygnaturami czasowymi (których nie można bezpośrednio powiązać z Tobą) są pobierane z publicznego interfejsu GPS API.</string>
<string name="osm_login_descr">Możesz zalogować się za pomocą bezpiecznej metody autoryzacji OAuth lub przy użyciu swojego loginu i hasła.</string>
<string name="shared_string_add_photo">Dodaj zdjęcie</string>
<string name="register_on_openplacereviews">Zarejestruj się w
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">Zaloguj się na stronie projektu otwartych danych OpenPlaceReviews.org, aby przesłać jeszcze więcej zdjęć.</string>
<string name="register_on_openplacereviews_desc">Zdjęcia są dostarczane przez otwarty projekt OpenPlaceReviews.org. Aby przesłać swoje zdjęcia, musisz zarejestrować się na stronie.</string>
<string name="register_opr_create_new_account">Utwórz nowe konto</string>
<string name="register_opr_have_account">Mam już konto</string>
<string name="select_groups_for_import">Wybierz grupy, które zostaną zaimportowane.</string>
@ -3999,4 +3999,9 @@
<string name="app_mode_motorboat">Motorówka</string>
<string name="add_to_mapillary">Dodaj do Mapillary</string>
<string name="add_to_opr">Dodaj do OpenPlaceReviews</string>
<string name="gpx_upload_private_visibility_descr">„Prywatny” oznacza, że ślad nie pojawia się w żadnych publicznych wykazach, ale punkty śledzenia z niego w kolejności niechronologicznej są dostępne za pośrednictwem publicznego interfejsu API GPS bez sygnatur czasowych.</string>
<string name="gpx_upload_identifiable_visibility_descr">\"Możliwe do zidentyfikowania\" oznacza, że ślad zostanie podany publicznie w śladach GPS i w publicznych wykazach śledzenia GPS, czyli inni użytkownicy będą mogli pobrać surowy ślad i skojarzyć go z twoją nazwą użytkownika. Publiczne dane śledzenia sygnatury czasowej z interfejsu API GPS obsługiwane za pośrednictwem interfejsu API punktów śladowych będą odwoływać się do oryginalnej strony śledzenia.</string>
<string name="select_picture">Wybierz zdjęcie</string>
<string name="cannot_upload_image">Nie można przesłać obrazu, spróbuj ponownie później</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
</resources>

View file

@ -3995,4 +3995,5 @@
<string name="cannot_upload_image">Não é possível carregar a imagem, por favor, tente novamente mais tarde</string>
<string name="select_picture">Selecione a foto</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">Alemão (casual)</string>
</resources>

View file

@ -3997,4 +3997,5 @@
<string name="cannot_upload_image">Impossìbile carrigare s\'immàgine, torra a proare prus a tardu</string>
<string name="select_picture">Ischerta un\'immàgine</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">Tedescu (informale)</string>
</resources>

View file

@ -3953,13 +3953,13 @@
<string name="subscription_expired_title">Predplatné OsmAnd Live skončilo</string>
<string name="subscription_paused_title">Predplatné OsmAnd Live je pozastavené</string>
<string name="subscription_on_hold_title">Predplatné OsmAnd Live je zablokované</string>
<string name="login_open_street_map">Prihlásenie pre OpenStreetMap</string>
<string name="login_open_street_map_org">Prihlásenie pre OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Prihlásiť sa do OpenStreetMap</string>
<string name="open_street_map_login_mode">Prihláste sa pre odoslanie nových alebo zmenených údajov,
<string name="login_open_street_map">Prihlásiť sa do OpenStreetMap</string>
<string name="login_open_street_map_org">Prihlásiť sa do OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Zaregistrovať sa do OpenStreetMap</string>
<string name="open_street_map_login_mode">Musíte sa prihlásiť pre odoslanie nových alebo zmenených údajov.
\n
\nbuď pomocou metódy OAuth alebo pomocou mena a hesla.</string>
<string name="use_login_password">Prihlásiť sa menom a heslom</string>
\nMôžete sa prihlásiť pomocou bezpečnej metódy OAuth alebo pomocou mena a hesla.</string>
<string name="use_login_password">Použiť meno a heslo</string>
<string name="login_account">Účet</string>
<string name="user_login">Prihlasovacie meno</string>
<string name="markers_history">História značiek</string>
@ -3967,11 +3967,11 @@
<string name="enter_text_separated">Zadajte značky oddelené čiarkou.</string>
<string name="osm_edit_close_note">Zatvoriť OSM poznámku</string>
<string name="osm_edit_comment_note">Komentovať OSM poznámku</string>
<string name="osm_login_descr">Prihláste sa bezpečnou metódou OAuth alebo použite meno a heslo.</string>
<string name="osm_login_descr">Môžete sa prihlásiť bezpečnou metódou OAuth alebo použite meno a heslo.</string>
<string name="shared_string_add_photo">Pridať foto</string>
<string name="register_on_openplacereviews">Zaregistrovať na
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">Prihláste sa na webstránke projektu OpenPlaceReviews.org s otvorenými dátami pre odoslanie ďalších fotografií.</string>
<string name="register_on_openplacereviews_desc">Fotografie sú poskytované projektom OpenPlaceReviews.org s otvorenými dátami. Na odoslanie vašich fotiek sa musíte zaregistrovať na webovej stránke.</string>
<string name="register_opr_create_new_account">Vytvoriť nový účet</string>
<string name="register_opr_have_account">Už mám účet</string>
<string name="shared_string_search_history">História hľadania</string>
@ -3993,6 +3993,8 @@
<string name="select_items_for_import">Zvoľte položky, ktoré budú importované.</string>
<string name="use_dev_url_descr">Prepnúť na dev.openstreetmap.org namiesto openstreetmap.org pre otestovanie odosielania OSM poznámok / bodov záujmu / GPX stôp.</string>
<string name="use_dev_url">Použiť dev.openstreetmap.org</string>
<string name="cannot_upload_image"></string>
<string name="select_picture"></string>
<string name="cannot_upload_image">Nedá sa odoslať obrázok, prosím skúste neskôr</string>
<string name="select_picture">Zvoľte obrázok</string>
<string name="lang_de_casual">Nemecky (Deutsch) úsporne</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
</resources>

View file

@ -3329,7 +3329,7 @@
<string name="poi_glacier_ele_top">Највиша тачка</string>
<string name="poi_glacier_type_ice_tongue">Ледени језик</string>
<string name="poi_glacier_type_remnant">Остатак</string>
<string name="poi_glacier_type_shelf">Полица</string>
<string name="poi_glacier_type_shelf">Плато</string>
<string name="poi_glacier_type_rock">Стена</string>
<string name="poi_glacier_type_icefall">Ледопад</string>
<string name="poi_glacier_type_hanging">Висећи</string>
@ -3421,8 +3421,8 @@
<string name="poi_diameter_crown">Пречник круне</string>
<string name="poi_circumference">Обим</string>
<string name="poi_climbing_routes">Пењачке руте</string>
<string name="poi_climbing_summit_log_no">Дневник врха пењања: не</string>
<string name="poi_climbing_summit_log_yes">Дневник врха пењања: да</string>
<string name="poi_climbing_summit_log_no">Брвно врха пењања: не</string>
<string name="poi_climbing_summit_log_yes">Брвно врха пењања: да</string>
<string name="poi_climbing_orientation_nw">Оријентација зида: СЗ</string>
<string name="poi_climbing_orientation_w">Оријентација зида: З</string>
<string name="poi_climbing_orientation_sw">Оријентација зида: ЈЗ</string>
@ -3774,7 +3774,7 @@
<string name="poi_fire_hydrant_type_pipe">Цев</string>
<string name="poi_drinking_water_refill_network">Мрежа за поновно доливање питке воде</string>
<string name="poi_drinking_water_refill_no">Доливање воде за пиће: не</string>
<string name="poi_drinking_water_refill_yes">Доливање воде за пиће: да</string>
<string name="poi_drinking_water_refill_yes">Да</string>
<string name="poi_seamark_obstruction">Опструкција</string>
<string name="poi_seamark_water_level_below_mwl">Ниво воде: испод средњег нивоа</string>
<string name="poi_seamark_water_level_above_mwl">Ниво воде: изнад средњег нивоа</string>
@ -3789,7 +3789,7 @@
<string name="poi_tactile_paving_primitive">Примитивно</string>
<string name="poi_tactile_paving_contrasted">Контрастно</string>
<string name="poi_traffic_signals_sound_locate">Дозвољено је само при ходању</string>
<string name="poi_internet_access_fee_customers">Сигнал за проналазак пола</string>
<string name="poi_internet_access_fee_customers">Приступ интернету: купци</string>
<string name="poi_video_no">Не</string>
<string name="poi_video_yes">Да</string>
<string name="poi_booth">Тип кабине</string>

View file

@ -1648,7 +1648,7 @@
<string name="lang_nl">Холандски</string>
<string name="lang_ka">Грузијски</string>
<string name="lang_iw">Хебрејски</string>
<string name="lang_hi">Хинди</string>
<string name="lang_hi">Индијски</string>
<string name="lang_hu_formal">Мађарски (званични)</string>
<string name="lang_kn">Канада</string>
<string name="lang_lv">Летонски</string>
@ -3993,4 +3993,5 @@
<string name="use_dev_url_descr">Пређите на употребу dev.openstreetmap.org уместо на openstreetmap.org да бисте тестирали отпремање ОСМ белешке / ПОИ / ГПКС.</string>
<string name="use_dev_url">Употреби dev.openstreetmap.org</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">Немачки (говорни)</string>
</resources>

View file

@ -3996,4 +3996,5 @@
<string name="cannot_upload_image">Не вдається завантажити зображення, повторіть спробу пізніше</string>
<string name="select_picture">Вибрати зображення</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="lang_de_casual">Німецька (неформальна)</string>
</resources>

View file

@ -3994,4 +3994,6 @@
<string name="use_dev_url">使用 dev.openstreetmap.org</string>
<string name="cannot_upload_image">無法上傳圖片,請稍後再試</string>
<string name="select_picture">選取圖片</string>
<string name="lang_de_casual">德語(非正式)</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
</resources>

View file

@ -31,8 +31,6 @@ import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GpxSelectionHelper;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
@ -41,6 +39,8 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.quickaction.QuickActionRegistry;
@ -160,14 +160,6 @@ public class ExternalApiHelper {
public static final String PARAM_QUICK_ACTION_PARAMS = "quick_action_params";
public static final String PARAM_QUICK_ACTION_NUMBER = "quick_action_number";
public static final ApplicationMode[] VALID_PROFILES = new ApplicationMode[]{
ApplicationMode.CAR,
ApplicationMode.BICYCLE,
ApplicationMode.PEDESTRIAN
};
public static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
// RESULT_OK == -1
// RESULT_CANCELED == 0
// RESULT_FIRST_USER == 1
@ -258,15 +250,8 @@ public class ExternalApiHelper {
} else if (API_CMD_NAVIGATE.equals(cmd)) {
String profileStr = uri.getQueryParameter(PARAM_PROFILE);
final ApplicationMode profile = ApplicationMode.valueOfStringKey(profileStr, DEFAULT_PROFILE);
boolean validProfile = false;
for (ApplicationMode mode : VALID_PROFILES) {
if (mode == profile) {
validProfile = true;
break;
}
}
if (!validProfile) {
final ApplicationMode profile = findNavigationProfile(app, profileStr);
if (profile == null) {
resultCode = RESULT_CODE_ERROR_INVALID_PROFILE;
} else {
String startName = uri.getQueryParameter(PARAM_START_NAME);
@ -325,19 +310,12 @@ public class ExternalApiHelper {
} else if (API_CMD_NAVIGATE_SEARCH.equals(cmd)) {
String profileStr = uri.getQueryParameter(PARAM_PROFILE);
final ApplicationMode profile = ApplicationMode.valueOfStringKey(profileStr, DEFAULT_PROFILE);
boolean validProfile = false;
for (ApplicationMode mode : VALID_PROFILES) {
if (mode == profile) {
validProfile = true;
break;
}
}
final ApplicationMode profile = findNavigationProfile(app, profileStr);
final boolean showSearchResults = uri.getBooleanQueryParameter(PARAM_SHOW_SEARCH_RESULTS, false);
final String searchQuery = uri.getQueryParameter(PARAM_DEST_SEARCH_QUERY);
if (Algorithms.isEmpty(searchQuery)) {
resultCode = RESULT_CODE_ERROR_EMPTY_SEARCH_QUERY;
} else if (!validProfile) {
} else if (profile == null) {
resultCode = RESULT_CODE_ERROR_INVALID_PROFILE;
} else {
String startName = uri.getQueryParameter(PARAM_START_NAME);
@ -642,6 +620,18 @@ public class ExternalApiHelper {
return result;
}
private ApplicationMode findNavigationProfile(@NonNull OsmandApplication app, @Nullable String profileStr) {
if (!ApplicationMode.DEFAULT.getStringKey().equals(profileStr)) {
ApplicationMode profile = ApplicationMode.valueOfStringKey(profileStr, ApplicationMode.CAR);
for (ApplicationMode mode : ApplicationMode.values(app)) {
if (mode == profile && !Algorithms.isEmpty(mode.getRoutingProfile())) {
return mode;
}
}
}
return null;
}
public static void saveAndNavigateGpx(MapActivity mapActivity, final GPXFile gpxFile, final boolean force) {
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);

View file

@ -25,10 +25,13 @@ import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import gnu.trove.map.TLongObjectMap;
import gnu.trove.map.hash.TLongObjectHashMap;
public class TravelObfHelper implements TravelHelper{
@ -46,13 +49,14 @@ public class TravelObfHelper implements TravelHelper{
private List<File> existingTravelBooks = new ArrayList<>();
private List<TravelArticle> popularArticles = new ArrayList<TravelArticle>();
private BinaryMapIndexReader index = null;
private TLongObjectMap<TravelArticle> cachedArticles;
public TravelObfHelper(OsmandApplication application) {
this.application = application;
collator = OsmAndCollator.primaryCollator();
localDataHelper = new TravelLocalDataHelper(application);
cachedArticles = new TLongObjectHashMap<>();
}
public static boolean checkIfObfFileExists(OsmandApplication app) {
@ -194,18 +198,18 @@ public class TravelObfHelper implements TravelHelper{
while (it.hasNext()) {
Amenity a = it.next();
if (!a.getName(language).equals("")) {
popularArticles.add(readArticle(a, language));
TravelArticle article = readArticle(a, language);
popularArticles.add(article);
writeToCache(article);
}
}
}
} catch (Exception e) {
e.printStackTrace();
LOG.error(e.getMessage());
}
return popularArticles;
}
private TravelArticle readArticle(Amenity amenity, String lang) {
TravelArticle res = new TravelArticle();
@ -215,13 +219,13 @@ public class TravelObfHelper implements TravelHelper{
res.lat = amenity.getLocation().getLatitude();
res.lon = amenity.getLocation().getLongitude();
res.imageTitle = amenity.getTagContent(Amenity.IMAGE_TITLE, lang) == null ? "" : amenity.getTagContent(Amenity.IMAGE_TITLE, lang);
res.tripId = amenity.getId(); //?
res.tripId = getTripId(amenity);
res.originalId = 0; //?
res.lang = lang;
res.contentsJson = amenity.getTagContent(Amenity.CONTENT_JSON, lang) == null ? "" : amenity.getTagContent(Amenity.CONTENT_JSON, lang);
res.aggregatedPartOf = amenity.getTagContent(Amenity.IS_AGGR_PART, lang) == null ? "" : amenity.getTagContent(Amenity.IS_AGGR_PART, lang);
// crash in some places, need to fix it
// occasional crashes
// try {
// String gpxContent = amenity.getAdditionalInfo("gpx_info");
// res.gpxFile = GPXUtilities.loadGPXFile(new ByteArrayInputStream(gpxContent.getBytes("UTF-8")));
@ -232,6 +236,19 @@ public class TravelObfHelper implements TravelHelper{
return res;
}
private long getTripId(Amenity amenity) {
long tripId = -1;
String val = amenity.getTagContent(Amenity.ROUTE_ID, null);
if (val != null && val.startsWith("Q")) {
try {
tripId = Long.parseLong(val.substring(1));
} catch (NumberFormatException nfe) {
LOG.error(nfe.getMessage());
}
}
return tripId;
}
private BinaryMapIndexReader getBookBinaryIndex() throws IOException {
application.getSettings().SELECTED_TRAVEL_BOOK.set(selectedTravelBook.getName());
try {
@ -254,14 +271,71 @@ public class TravelObfHelper implements TravelHelper{
return null;
}
@Override
public TravelArticle getArticle(long cityId, String lang) {
return null;
private void writeToCache(TravelArticle article) {
cachedArticles.put(article.tripId, article);
}
private TravelArticle getArticleFromCache(long tripId, String lang) {
TravelArticle article = cachedArticles.get(tripId);
// if (aa != null) {
// article = readArticle(aa, lang);
// }
return article;
}
@Override
public TravelArticle getArticle(String title, String lang) {
return null;
public TravelArticle getArticle(long resId, String lang) {
TravelArticle article = getArticleFromCache(resId, lang);
if (article != null) {
return article;
}
String name = ""; //???
return getArticle(name, lang);
}
@Override
public TravelArticle getArticle(final String title, final String lang) {
TravelArticle res = null;
List<Amenity> amenities = Collections.emptyList();
try {
BinaryMapIndexReader indexReader = getBookBinaryIndex();
if (indexReader != null) {
int left = 0;
int top = 0;
int right = Integer.MAX_VALUE;
int bottom = Integer.MAX_VALUE;
LatLon ll = application.getMapViewTrackingUtilities().getMapLocation();
BinaryMapIndexReader.SearchRequest<Amenity> req = BinaryMapIndexReader.buildSearchPoiRequest(
MapUtils.get31TileNumberX(ll.getLongitude()),
MapUtils.get31TileNumberY(ll.getLatitude()), title,
left, top, right, bottom,
new ResultMatcher<Amenity>() {
@Override
public boolean publish(Amenity object) {
if (object.getName(lang).equals(title)) {
return true;
}
return false;
}
@Override
public boolean isCancelled() {
return false;
}
});
amenities = indexReader.searchPoiByName(req);
}
} catch (IOException e) {
//todo
}
if (!amenities.isEmpty()) {
for (Amenity a : amenities) {
LOG.debug("searched article: " + a);
}
}
return res;
}
@Override
@ -269,9 +343,19 @@ public class TravelObfHelper implements TravelHelper{
return 0;
}
//TODO finish stub
@Override
public ArrayList<String> getArticleLangs(long cityId) {
return null;
ArrayList<String> res = new ArrayList<>();
res.add("en");
for (TravelArticle article : popularArticles) {
if (article.getTripId() == cityId) {
res.add(article.getLang());
}
}
return res;
}
@Override