diff --git a/OsmAnd/res/layout/fragment_wikivoyage_article_dialog.xml b/OsmAnd/res/layout/fragment_wikivoyage_article_dialog.xml index 76fe893831..1643d43234 100644 --- a/OsmAnd/res/layout/fragment_wikivoyage_article_dialog.xml +++ b/OsmAnd/res/layout/fragment_wikivoyage_article_dialog.xml @@ -145,6 +145,14 @@ tools:drawableStart="@drawable/ic_action_markers_dark" android:paddingEnd="@dimen/bottom_sheet_content_padding_small" /> + + 0) { - trackButton.setVisibility(View.VISIBLE); - trackButton.setText(getString(R.string.shared_string_gpx_points) + " (" + gpxFile.getPointsSize() + ")"); - } else { - trackButton.setVisibility(View.GONE); - } TravelLocalDataHelper ldh = getMyApplication().getTravelHelper().getBookmarksHelper(); ldh.addToHistory(article); @@ -327,6 +336,21 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme contentWebView.loadDataWithBaseURL(getBaseUrl(), createHtmlContent(), "text/html", "UTF-8", null); } + private void updateTrackButton(boolean processing, @Nullable GPXFile gpxFile) { + if (processing) { + trackButton.setVisibility(View.GONE); + gpxProgress.setVisibility(View.VISIBLE); + } else { + if (gpxFile != null && gpxFile.getPointsSize() > 0) { + trackButton.setVisibility(View.VISIBLE); + trackButton.setText(getString(R.string.shared_string_gpx_points) + " (" + gpxFile.getPointsSize() + ")"); + } else { + trackButton.setVisibility(View.GONE); + } + gpxProgress.setVisibility(View.GONE); + } + } + @NonNull @Override protected String createHtmlContent() { diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java b/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java index 1018874d26..98500afa01 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java @@ -20,6 +20,7 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.OsmandBaseExpandableListAdapter; import net.osmand.plus.base.MenuBottomSheetDialogFragment; @@ -75,14 +76,15 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr return; } - article = getMyApplication().getTravelHelper().getArticleById(articleId, selectedLang); + OsmandApplication app = requiredMyApplication(); + article = app.getTravelHelper().getArticleById(articleId, selectedLang, false, null); if (article == null) { return; } parentsList = new ArrayList<>(Arrays.asList(article.getAggregatedPartOf().split(","))); Map> navigationMap - = getMyApplication().getTravelHelper().getNavigationMap(article); + = app.getTravelHelper().getNavigationMap(article); items.add(new TitleItem(getString(R.string.shared_string_navigation))); diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java index cf38b7265f..952b85be4d 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java @@ -44,6 +44,7 @@ public class TravelArticle { String aggregatedPartOf; long lastModified; + boolean gpxFileReading; boolean gpxFileRead; @NonNull diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java index 38380015c3..b53605a0bb 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java @@ -549,7 +549,7 @@ public class TravelDbHelper implements TravelHelper { @Override @Nullable - public TravelArticle getArticleById(@NonNull TravelArticleIdentifier articleId, @NonNull String lang) { + public TravelArticle getArticleById(@NonNull TravelArticleIdentifier articleId, @NonNull String lang, boolean readGpx, @Nullable GpxReadCallback callback) { TravelArticle res = null; SQLiteConnection conn = openConnection(); String routeId = articleId.routeId; @@ -566,24 +566,27 @@ public class TravelDbHelper implements TravelHelper { if (res == null) { res = localDataHelper.getSavedArticle(articleId.file, articleId.routeId, lang); } + if (res != null && callback != null) { + callback.onGpxFileRead(res.gpxFile); + } return res; } @Nullable @Override - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull final String lang) { - return getArticleByTitle(title, new QuadRect(), lang); + public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull final String lang, boolean readGpx, @Nullable GpxReadCallback callback) { + return getArticleByTitle(title, new QuadRect(), lang, readGpx, callback); } @Nullable @Override - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull LatLon latLon, @NonNull final String lang) { - return getArticleByTitle(title, new QuadRect(), lang); + public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull LatLon latLon, @NonNull final String lang, boolean readGpx, @Nullable GpxReadCallback callback) { + return getArticleByTitle(title, new QuadRect(), lang, readGpx, callback); } @Nullable @Override - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull QuadRect rect, @NonNull final String lang) { + public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull QuadRect rect, @NonNull final String lang, boolean readGpx, @Nullable GpxReadCallback callback) { TravelArticle res = null; SQLiteConnection conn = openConnection(); if (conn != null) { @@ -596,6 +599,9 @@ public class TravelDbHelper implements TravelHelper { cursor.close(); } } + if (res != null && callback != null) { + callback.onGpxFileRead(res.gpxFile); + } return res; } diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelHelper.java index 87b5bc1e95..967138b0bd 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelHelper.java @@ -3,6 +3,8 @@ package net.osmand.plus.wikivoyage.data; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import net.osmand.GPXUtilities; +import net.osmand.GPXUtilities.GPXFile; import net.osmand.data.LatLon; import net.osmand.data.QuadRect; import net.osmand.plus.wikivoyage.data.TravelArticle.TravelArticleIdentifier; @@ -14,6 +16,11 @@ import java.util.Map; public interface TravelHelper { + interface GpxReadCallback { + void onGpxFileReading(); + void onGpxFileRead(@Nullable GPXFile gpxFile); + } + TravelLocalDataHelper getBookmarksHelper(); void initializeDataOnAppStartup(); @@ -29,19 +36,19 @@ public interface TravelHelper { List getPopularArticles(); @NonNull - Map> getNavigationMap(@NonNull final TravelArticle article); + Map> getNavigationMap(@NonNull TravelArticle article); @Nullable - TravelArticle getArticleById(@NonNull TravelArticleIdentifier articleId, @NonNull String lang); + TravelArticle getArticleById(@NonNull TravelArticleIdentifier articleId, @NonNull String lang, boolean readGpx, @Nullable GpxReadCallback callback); @Nullable - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull final String lang); + TravelArticle getArticleByTitle(@NonNull String title, @NonNull String lang, boolean readGpx, @Nullable GpxReadCallback callback); @Nullable - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull LatLon latLon, @NonNull final String lang); + TravelArticle getArticleByTitle(@NonNull String title, @NonNull LatLon latLon, @NonNull String lang, boolean readGpx, @Nullable GpxReadCallback callback); @Nullable - TravelArticle getArticleByTitle(@NonNull String title, @NonNull QuadRect rect, @NonNull String lang); + TravelArticle getArticleByTitle(@NonNull String title, @NonNull QuadRect rect, @NonNull String lang, boolean readGpx, @Nullable GpxReadCallback callback); @Nullable TravelArticleIdentifier getArticleId(@NonNull String title, @NonNull String lang); @@ -50,10 +57,10 @@ public interface TravelHelper { ArrayList getArticleLangs(@NonNull TravelArticleIdentifier articleId); @NonNull - String getGPXName(@NonNull final TravelArticle article); + String getGPXName(@NonNull TravelArticle article); @NonNull - File createGpxFile(@NonNull final TravelArticle article); + File createGpxFile(@NonNull TravelArticle article); // TODO: this method should be deleted once TravelDBHelper is deleted @Nullable diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java index 2c59c16ed2..02ee5a32c8 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java @@ -420,7 +420,7 @@ public class TravelLocalDataHelper { if (cursor.moveToFirst()) { do { TravelArticle dbArticle = readSavedArticle(cursor); - TravelArticle article = context.getTravelHelper().getArticleById(dbArticle.generateIdentifier(), dbArticle.lang); + TravelArticle article = context.getTravelHelper().getArticleById(dbArticle.generateIdentifier(), dbArticle.lang, false, null); if (article != null && article.getLastModified() > dbArticle.getLastModified()) { updateSavedArticle(dbArticle, article); res.add(article); diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java index 9a2c80940c..9ea963db81 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java @@ -1,5 +1,6 @@ package net.osmand.plus.wikivoyage.data; +import android.os.AsyncTask; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -97,9 +98,19 @@ public class TravelObfHelper implements TravelHelper { location, POPULAR_ARTICLES_SEARCH_RADIUS, -1, getSearchFilter(false), null); List amenities = reader.searchPoi(req); if (amenities.size() > 0) { + Collections.sort(amenities, new Comparator() { + @Override + public int compare(Amenity a1, Amenity a2) { + int d1 = (int) (MapUtils.getDistance(a1.getLocation().getLatitude(), a1.getLocation().getLongitude(), + location.getLatitude(), location.getLongitude())); + int d2 = (int) (MapUtils.getDistance(a2.getLocation().getLatitude(), a2.getLocation().getLongitude(), + location.getLatitude(), location.getLongitude())); + return d1 < d2 ? -1 : (d1 == d2 ? 0 : 1); + } + }); for (Amenity amenity : amenities) { if (!Algorithms.isEmpty(amenity.getName(lang))) { - TravelArticle article = cacheTravelArticles(reader.getFile(), amenity, lang, false); + TravelArticle article = cacheTravelArticles(reader.getFile(), amenity, lang, false, null); if (article != null) { popularArticles.add(article); if (popularArticles.size() >= MAX_POPULAR_ARTICLES_COUNT) { @@ -108,16 +119,6 @@ public class TravelObfHelper implements TravelHelper { } } } - Collections.sort(popularArticles, new Comparator() { - @Override - public int compare(TravelArticle article1, TravelArticle article2) { - int d1 = (int) (MapUtils.getDistance(article1.getLat(), article1.getLon(), - location.getLatitude(), location.getLongitude())); - int d2 = (int) (MapUtils.getDistance(article2.getLat(), article2.getLon(), - location.getLatitude(), location.getLongitude())); - return d1 < d2 ? -1 : (d1 == d2 ? 0 : 1); - } - }); } } catch (Exception e) { LOG.error(e.getMessage(), e); @@ -128,13 +129,13 @@ public class TravelObfHelper implements TravelHelper { } @Nullable - private TravelArticle cacheTravelArticles(File file, Amenity amenity, String lang, boolean readPoints) { + private TravelArticle cacheTravelArticles(File file, Amenity amenity, String lang, boolean readPoints, @Nullable GpxReadCallback callback) { TravelArticle article = null; - Map articles = readArticles(file, amenity, false); + Map articles = readArticles(file, amenity); if (!Algorithms.isEmpty(articles)) { TravelArticleIdentifier newArticleId = articles.values().iterator().next().generateIdentifier(); cachedArticles.put(newArticleId, articles); - article = getCachedArticle(newArticleId, lang, readPoints); + article = getCachedArticle(newArticleId, lang, readPoints, callback); } return article; } @@ -155,17 +156,17 @@ public class TravelObfHelper implements TravelHelper { } @NonNull - private Map readArticles(@NonNull File file, @NonNull Amenity amenity, boolean readPoints) { + private Map readArticles(@NonNull File file, @NonNull Amenity amenity) { Map articles = new HashMap<>(); Set langs = getLanguages(amenity); for (String lang : langs) { - articles.put(lang, readArticle(file, amenity, lang, readPoints)); + articles.put(lang, readArticle(file, amenity, lang)); } return articles; } @NonNull - private TravelArticle readArticle(@NonNull File file, @NonNull Amenity amenity, @NonNull String lang, boolean readPoints) { + private TravelArticle readArticle(@NonNull File file, @NonNull Amenity amenity, @NonNull String lang) { TravelArticle res = new TravelArticle(); res.file = file; String title = amenity.getName(lang); @@ -182,29 +183,11 @@ public class TravelObfHelper implements TravelHelper { res.lang = lang; res.contentsJson = Algorithms.emptyIfNull(amenity.getTagContent(Amenity.CONTENT_JSON, lang)); res.aggregatedPartOf = Algorithms.emptyIfNull(amenity.getTagContent(Amenity.IS_AGGR_PART, lang)); - if (readPoints) { - res.gpxFile = buildGpxFile(res); - res.gpxFileRead = true; - } return res; } - private GPXFile buildGpxFile(@NonNull TravelArticle article) { - GPXFile gpxFile = null; - List pointList = getPointList(article); - if (!Algorithms.isEmpty(pointList)) { - gpxFile = new GPXFile(article.getTitle(), article.getLang(), article.getContent()); - gpxFile.metadata.link = TravelArticle.getImageUrl(article.getImageTitle(), false); - for (Amenity amenity : pointList) { - WptPt wptPt = createWptPt(amenity, article.getLang()); - gpxFile.addPoint(wptPt); - } - } - return gpxFile; - } - @NonNull - private List getPointList(@NonNull final TravelArticle article) { + private synchronized List getPointList(@NonNull final TravelArticle article) { final List pointList = new ArrayList<>(); final String lang = article.getLang(); for (BinaryMapIndexReader reader : getReaders()) { @@ -312,7 +295,7 @@ public class TravelObfHelper implements TravelHelper { for (Amenity amenity : entry.getValue()) { Set nameLangs = getLanguages(amenity); if (nameLangs.contains(appLang)) { - TravelArticle article = readArticle(file, amenity, appLang, false); + TravelArticle article = readArticle(file, amenity, appLang); ArrayList langs = new ArrayList<>(nameLangs); Collections.sort(langs, new Comparator() { @Override @@ -481,20 +464,28 @@ public class TravelObfHelper implements TravelHelper { LOG.error(e.getMessage()); } if (!Algorithms.isEmpty(amenities)) { - article = readArticle(reader.getFile(), amenities.get(0), lang, false); + article = readArticle(reader.getFile(), amenities.get(0), lang); } } return article; } @Override - public TravelArticle getArticleById(@NonNull TravelArticleIdentifier articleId, @NonNull String lang) { - TravelArticle article = getCachedArticle(articleId, lang, true); - return article == null ? localDataHelper.getSavedArticle(articleId.file, articleId.routeId, lang) : article; + public TravelArticle getArticleById(@NonNull TravelArticleIdentifier articleId, @NonNull String lang, + boolean readGpx, @Nullable GpxReadCallback callback) { + TravelArticle article = getCachedArticle(articleId, lang, readGpx, callback); + if (article == null) { + article = localDataHelper.getSavedArticle(articleId.file, articleId.routeId, lang); + if (article != null && callback != null && readGpx) { + callback.onGpxFileRead(article.gpxFile); + } + } + return article; } @Nullable - private TravelArticle getCachedArticle(@NonNull TravelArticleIdentifier articleId, @NonNull String lang, boolean forceReadPoints) { + private TravelArticle getCachedArticle(@NonNull TravelArticleIdentifier articleId, @NonNull String lang, + boolean forceReadPoints, @Nullable GpxReadCallback callback) { TravelArticle article = null; Map articles = cachedArticles.get(articleId); if (articles != null) { @@ -511,16 +502,24 @@ public class TravelObfHelper implements TravelHelper { } } if (article == null && articles == null) { - article = findArticleById(articleId, lang); + article = findArticleById(articleId, lang, callback); } - if (article != null && !article.gpxFileRead && forceReadPoints && !Algorithms.isEmpty(lang)) { - article.gpxFile = buildGpxFile(article); - article.gpxFileRead = true; + if (article != null && forceReadPoints && !Algorithms.isEmpty(lang)) { + readGpxFile(article, callback); } return article; } - private TravelArticle findArticleById(@NonNull final TravelArticleIdentifier articleId, final String lang) { + private void readGpxFile(@NonNull TravelArticle article, @Nullable GpxReadCallback callback) { + if (!article.gpxFileRead) { + new GpxFileReader(article, callback).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } else if (callback != null) { + callback.onGpxFileRead(article.gpxFile); + } + } + + private TravelArticle findArticleById(@NonNull final TravelArticleIdentifier articleId, + final String lang, @Nullable GpxReadCallback callback) { TravelArticle article = null; final boolean isDbArticle = articleId.file != null && articleId.file.getName().endsWith(IndexConstants.BINARY_WIKIVOYAGE_MAP_INDEX_EXT); final List amenities = new ArrayList<>(); @@ -563,7 +562,7 @@ public class TravelObfHelper implements TravelHelper { LOG.error(e.getMessage()); } if (!Algorithms.isEmpty(amenities)) { - article = cacheTravelArticles(reader.getFile(), amenities.get(0), lang, true); + article = cacheTravelArticles(reader.getFile(), amenities.get(0), lang, true, callback); } } return article; @@ -571,20 +570,23 @@ public class TravelObfHelper implements TravelHelper { @Nullable @Override - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull final String lang) { - return getArticleByTitle(title, new QuadRect(), lang); + public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull final String lang, + boolean readGpx, @Nullable GpxReadCallback callback) { + return getArticleByTitle(title, new QuadRect(), lang, readGpx, callback); } @Nullable @Override - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull LatLon latLon, @NonNull final String lang) { - QuadRect rect = latLon != null ? MapUtils.calculateLatLonBbox(latLon.getLatitude(), latLon.getLongitude(), ARTICLE_SEARCH_RADIUS) : new QuadRect(); - return getArticleByTitle(title, rect, lang); + public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull LatLon latLon, + @NonNull final String lang, boolean readGpx, @Nullable GpxReadCallback callback) { + QuadRect rect = MapUtils.calculateLatLonBbox(latLon.getLatitude(), latLon.getLongitude(), ARTICLE_SEARCH_RADIUS); + return getArticleByTitle(title, rect, lang, readGpx, callback); } @Nullable @Override - public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull QuadRect rect, @NonNull final String lang) { + public TravelArticle getArticleByTitle(@NonNull final String title, @NonNull QuadRect rect, + @NonNull final String lang, boolean readGpx, @Nullable GpxReadCallback callback) { TravelArticle article = null; final List amenities = new ArrayList<>(); int x = 0; @@ -627,7 +629,7 @@ public class TravelObfHelper implements TravelHelper { LOG.error(e.getMessage()); } if (!Algorithms.isEmpty(amenities)) { - article = cacheTravelArticles(reader.getFile(), amenities.get(0), lang, true); + article = cacheTravelArticles(reader.getFile(), amenities.get(0), lang, readGpx, callback); } } return article; @@ -654,7 +656,7 @@ public class TravelObfHelper implements TravelHelper { } } if (a == null) { - TravelArticle article = getArticleByTitle(title, lang); + TravelArticle article = getArticleByTitle(title, lang, false, null); if (article != null) { a = article; } @@ -666,7 +668,7 @@ public class TravelObfHelper implements TravelHelper { @Override public ArrayList getArticleLangs(@NonNull TravelArticleIdentifier articleId) { ArrayList res = new ArrayList<>(); - TravelArticle article = getArticleById(articleId, ""); + TravelArticle article = getArticleById(articleId, "", false, null); if (article != null) { Map articles = cachedArticles.get(article.generateIdentifier()); if (articles != null) { @@ -683,14 +685,14 @@ public class TravelObfHelper implements TravelHelper { @NonNull @Override - public String getGPXName(@NonNull final TravelArticle article) { + public String getGPXName(@NonNull TravelArticle article) { return article.getTitle().replace('/', '_').replace('\'', '_') .replace('\"', '_') + IndexConstants.GPX_FILE_EXT; } @NonNull @Override - public File createGpxFile(@NonNull final TravelArticle article) { + public File createGpxFile(@NonNull TravelArticle article) { final GPXFile gpx = article.getGpxFile(); File file = app.getAppPath(IndexConstants.GPX_TRAVEL_DIR + getGPXName(article)); writeGpxFile(file, gpx); @@ -706,4 +708,46 @@ public class TravelObfHelper implements TravelHelper { public String getWikivoyageFileName() { return WORLD_WIKIVOYAGE_FILE_NAME; } + + private class GpxFileReader extends AsyncTask { + + private final TravelArticle article; + private final GpxReadCallback callback; + + public GpxFileReader(@NonNull TravelArticle article, @Nullable GpxReadCallback callback) { + this.article = article; + this.callback = callback; + } + + @Override + protected void onPreExecute() { + if (callback != null) { + callback.onGpxFileReading(); + } + } + + @Override + protected GPXFile doInBackground(Void... voids) { + GPXFile gpxFile = null; + List pointList = getPointList(article); + if (!Algorithms.isEmpty(pointList)) { + gpxFile = new GPXFile(article.getTitle(), article.getLang(), article.getContent()); + gpxFile.metadata.link = TravelArticle.getImageUrl(article.getImageTitle(), false); + for (Amenity amenity : pointList) { + WptPt wptPt = createWptPt(amenity, article.getLang()); + gpxFile.addPoint(wptPt); + } + } + return gpxFile; + } + + @Override + protected void onPostExecute(GPXFile gpxFile) { + article.gpxFileRead = true; + article.gpxFile = gpxFile; + if (callback != null) { + callback.onGpxFileRead(gpxFile); + } + } + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/menu/WikivoyageWptPtMenuController.java b/OsmAnd/src/net/osmand/plus/wikivoyage/menu/WikivoyageWptPtMenuController.java index 6f3ee2fd43..84507da899 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/menu/WikivoyageWptPtMenuController.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/menu/WikivoyageWptPtMenuController.java @@ -10,6 +10,7 @@ import net.osmand.GPXUtilities.WptPt; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; +import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.controllers.WptPtMenuController; @@ -38,13 +39,14 @@ public class WikivoyageWptPtMenuController extends WptPtMenuController { } private static TravelArticle getTravelArticle(@NonNull MapActivity mapActivity, @NonNull WptPt wpt) { - SelectedGpxFile selectedGpxFile = mapActivity.getMyApplication().getSelectedGpxHelper().getSelectedGPXFile(wpt); + OsmandApplication app = mapActivity.getMyApplication(); + SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().getSelectedGPXFile(wpt); GPXFile gpxFile = selectedGpxFile != null ? selectedGpxFile.getGpxFile() : null; Metadata metadata = gpxFile != null ? gpxFile.metadata : null; String title = metadata != null ? metadata.getArticleTitle() : null; String lang = metadata != null ? metadata.getArticleLang() : null; if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(lang)) { - return mapActivity.getMyApplication().getTravelHelper().getArticleByTitle(title, new LatLon(wpt.lat, wpt.lon), lang); + return app.getTravelHelper().getArticleByTitle(title, new LatLon(wpt.lat, wpt.lon), lang, false, null); } return null; }