From 3d3da9ee8efcd3318913fc9be0a303c88f227ae9 Mon Sep 17 00:00:00 2001 From: Nazar-Kutz Date: Wed, 8 Apr 2020 12:15:20 +0300 Subject: [PATCH] Wikipedia Poi (Fixes 1) --- .../main/java/net/osmand/osm/MapPoiTypes.java | 29 +++++-- .../dash_item_with_description_72dp.xml | 4 +- OsmAnd/res/values-large/sizes.xml | 1 + OsmAnd/res/values/sizes.xml | 1 + OsmAnd/src/net/osmand/AndroidUtils.java | 12 --- .../src/net/osmand/plus/OsmandSettings.java | 2 +- .../plus/activities/MapActivityLayers.java | 3 +- .../activities/search/SearchPOIActivity.java | 3 +- .../osmand/plus/dialogs/ConfigureMapMenu.java | 10 +-- .../osmand/plus/helpers/WaypointHelper.java | 1 - .../net/osmand/plus/poi/PoiFiltersHelper.java | 54 ++++++++---- .../net/osmand/plus/poi/PoiTemplateList.java | 5 -- .../src/net/osmand/plus/poi/PoiUIFilter.java | 6 +- .../actions/ShowHidePoiAction.java | 3 +- .../MapRouteInfoMenu.java | 3 +- .../ShowAlongTheRouteBottomSheet.java | 3 +- .../search/QuickSearchDialogFragment.java | 2 +- .../osmand/plus/search/QuickSearchHelper.java | 3 +- .../net/osmand/plus/views/POIMapLayer.java | 1 - .../SelectWikiLanguagesBottomSheet.java | 49 +++-------- .../plus/wikipedia/WikipediaPoiMenu.java | 86 ++++++++++++------- 21 files changed, 155 insertions(+), 126 deletions(-) delete mode 100644 OsmAnd/src/net/osmand/plus/poi/PoiTemplateList.java diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java index 38e914a63d..0edd44aa6e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java @@ -36,8 +36,10 @@ public class MapPoiTypes { private PoiCategory otherCategory; private PoiCategory otherMapCategory; - public static final String WIKI_LANG_KEY_PREFFIX = "wiki_lang:"; - static final String OSM_WIKI_CATEGORY = "osmwiki"; + public static final String WIKI_LANG = "wiki_lang"; + public static final String WIKI_PLACE = "wiki_place"; + public static final String OSM_WIKI_CATEGORY = "osmwiki"; + private PoiTranslator poiTranslator = null; private boolean init; Map poiTypesByTag = new LinkedHashMap(); @@ -137,6 +139,19 @@ public class MapPoiTypes { return null; } + public List getAllAvailableWikiLocales() { + List availableWikiLocales = new ArrayList<>(); + for (PoiType type : getOsmwiki().getPoiTypeByKeyName(WIKI_PLACE).getPoiAdditionals()) { + String name = type.getKeyName(); + String wikiLang = WIKI_LANG + ":"; + if (name != null && name.startsWith(wikiLang)) { + String locale = name.substring(wikiLang.length()); + availableWikiLocales.add(locale); + } + } + return availableWikiLocales; + } + private void sortList(List lf) { final Collator instance = Collator.getInstance(); Collections.sort(lf, new Comparator() { @@ -411,7 +426,7 @@ public class MapPoiTypes { } else if (name.equals("poi_type")) { if (lastCategory == null) { lastCategory = getOtherMapCategory(); - } + } if(!Algorithms.isEmpty(parser.getAttributeValue("", "deprecated_of"))){ String vl = parser.getAttributeValue("", "name"); String target = parser.getAttributeValue("", "deprecated_of"); @@ -605,7 +620,7 @@ public class MapPoiTypes { tp.setOsmValue(parser.getAttributeValue("", "value")); tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"), parser.getAttributeValue("", "edit_value")); - + tp.setOsmTag2(parser.getAttributeValue("", "tag2")); tp.setOsmValue2(parser.getAttributeValue("", "value2")); tp.setText("text".equals(parser.getAttributeValue("", "type"))); @@ -816,7 +831,7 @@ public class MapPoiTypes { poiTypesByTag.put(key, p); } } - + public String replaceDeprecatedSubtype(PoiCategory type, String subtype) { if(deprecatedTags.containsKey(subtype)) { return deprecatedTags.get(subtype); @@ -902,9 +917,9 @@ public class MapPoiTypes { } - - + + } diff --git a/OsmAnd/res/layout/dash_item_with_description_72dp.xml b/OsmAnd/res/layout/dash_item_with_description_72dp.xml index 768ae56024..cf4bdf9f36 100644 --- a/OsmAnd/res/layout/dash_item_with_description_72dp.xml +++ b/OsmAnd/res/layout/dash_item_with_description_72dp.xml @@ -36,7 +36,9 @@ android:paddingLeft="@dimen/content_padding" android:paddingRight="@dimen/content_padding" android:paddingStart="@dimen/content_padding" - android:paddingEnd="@dimen/content_padding"> + android:paddingEnd="@dimen/content_padding" + android:paddingTop="@dimen/content_padding" + android:paddingBottom="@dimen/content_padding"> 84dp 15dp 84dp + 192dp 354dp 102dp diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index 57f4331982..4b6eb58c81 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -258,6 +258,7 @@ 10dp 56dp 1.25 + 128dp 236dp 68dp diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java index 5a9025c088..de35fad5a0 100644 --- a/OsmAnd/src/net/osmand/AndroidUtils.java +++ b/OsmAnd/src/net/osmand/AndroidUtils.java @@ -252,18 +252,6 @@ public class AndroidUtils { return ""; } - public static String makeStringFromList(@NonNull List strings, @NonNull String divider) { - if (strings.size() == 0) { - return ""; - } - StringBuilder result = new StringBuilder(strings.get(0)); - for (int i = 1; i < strings.size(); i++) { - result.append(divider); - result.append(strings.get(i)); - } - return result.toString(); - } - public static View findParentViewById(View view, int id) { ViewParent viewParent = view.getParent(); diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index b5d2cf32a8..287b235e31 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -1287,7 +1287,7 @@ public class OsmandSettings { public final CommonPreference WIKI_ARTICLE_SHOW_IMAGES = new EnumIntPreference<>("wikivoyage_show_imgs", WikiArticleShowImages.OFF, WikiArticleShowImages.values()).makeGlobal(); public final CommonPreference SHOW_WIKIPEDIA_POI = new BooleanPreference("show_wikipedia_poi", false).makeProfile(); public final CommonPreference GLOBAL_WIKIPEDIA_POI_ENABLED = new BooleanPreference("global_wikipedia_poi_enabled", false).makeProfile(); - public final ListStringPreference WIKIPEDIA_POI_ENABLED_LANGUAGES = (ListStringPreference) new ListStringPreference("wikipedia_poi_enabled_languages", null, ",,").makeProfile().cache(); + public final ListStringPreference WIKIPEDIA_POI_ENABLED_LANGUAGES = (ListStringPreference) new ListStringPreference("wikipedia_poi_enabled_languages", null, ",").makeProfile().cache(); public final CommonPreference SELECT_MARKER_ON_SINGLE_TAP = new BooleanPreference("select_marker_on_single_tap", false).makeProfile(); public final CommonPreference KEEP_PASSED_MARKERS_ON_MAP = new BooleanPreference("keep_passed_markers_on_map", true).makeProfile(); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java index a112d0ed96..e516f997be 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java @@ -35,7 +35,6 @@ import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode; import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.measurementtool.MeasurementToolLayer; import net.osmand.plus.poi.PoiFiltersHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin; import net.osmand.plus.render.MapVectorLayer; @@ -66,6 +65,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map.Entry; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + /** * Object is responsible to maintain layers using by map activity */ diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java index cbc165ad99..819600f085 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java @@ -58,7 +58,6 @@ import net.osmand.plus.activities.EditPOIFilterActivity; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmandListActivity; import net.osmand.plus.poi.NominatimPoiFilter; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.poi.PoiUIFilter.AmenityNameFilter; import net.osmand.plus.render.RenderingIcons; @@ -79,6 +78,8 @@ import java.util.TreeMap; import gnu.trove.set.hash.TLongHashSet; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + /** * Search poi activity */ diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java index 424d936d98..d036379d6d 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java @@ -50,7 +50,6 @@ import net.osmand.plus.activities.SettingsActivity; import net.osmand.plus.dashboard.DashboardOnMap; import net.osmand.plus.inapp.InAppPurchaseHelper; import net.osmand.plus.poi.PoiFiltersHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin; import net.osmand.plus.render.RendererRegistry; import net.osmand.plus.srtmplugin.SRTMPlugin; @@ -102,6 +101,7 @@ import static net.osmand.aidlapi.OsmAndCustomizationConstants.TEXT_SIZE_ID; import static net.osmand.aidlapi.OsmAndCustomizationConstants.TRANSPORT_ID; import static net.osmand.aidlapi.OsmAndCustomizationConstants.TRANSPORT_RENDERING_ID; import static net.osmand.aidlapi.OsmAndCustomizationConstants.WIKIPEDIA_ID; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_DENSITY_ATTR; import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_LINES_ATTR; import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_LINES_SCHEME_ATTR; @@ -306,7 +306,7 @@ public class ConfigureMapMenu { } } - private void createLayersItems(List customRules, ContextMenuAdapter adapter, + private void createLayersItems(List customRules, ContextMenuAdapter adapter, final MapActivity activity, final int themeRes, final boolean nightMode) { final OsmandApplication app = activity.getMyApplication(); final OsmandSettings settings = app.getSettings(); @@ -537,7 +537,7 @@ public class ConfigureMapMenu { .setSecondaryIcon(R.drawable.ic_action_additional_option) .setListener(l).createItem()); - selected = settings.SHOW_WIKIPEDIA_POI.get(); + selected = app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.WIKI); adapter.addItem(new ContextMenuItem.ItemBuilder() .setId(WIKIPEDIA_ID) .setTitleId(R.string.shared_string_wikipedia, activity) @@ -588,7 +588,7 @@ public class ConfigureMapMenu { final OsmandSettings settings = app.getSettings(); final int selectedProfileColorRes = settings.APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode); final int selectedProfileColor = ContextCompat.getColor(app, selectedProfileColorRes); - + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity) .setId(MAP_RENDERING_CATEGORY_ID) .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); @@ -1172,7 +1172,7 @@ public class ConfigureMapMenu { final AlertDialog dialog = bld.create(); dialogAdapter.setDialog(dialog); - + if (customRulesIncluded != null) { for (RenderingRuleProperty p : customRulesIncluded) { if (!p.isBoolean()) { diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java index 6443915ab3..7f51847964 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java @@ -25,7 +25,6 @@ import net.osmand.plus.TargetPointsHelper.TargetPoint; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.IntermediatePointsDialog; import net.osmand.plus.base.FavoriteImageDrawable; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.render.RenderingIcons; import net.osmand.plus.routing.AlarmInfo; diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java index 90447f2bf4..8e8864af75 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java @@ -32,6 +32,8 @@ import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import static net.osmand.osm.MapPoiTypes.WIKI_PLACE; + public class PoiFiltersHelper { private final OsmandApplication application; @@ -45,6 +47,7 @@ public class PoiFiltersHelper { private PoiUIFilter localWikiPoiFilter; private PoiUIFilter globalWikiPoiFilter; private List cacheTopStandardFilters; + private List cacheWikipediaFilters; private Map> selectedPoiFilters = new TreeMap<>(); private static final String UDF_CAR_AID = "car_aid"; @@ -62,6 +65,10 @@ public class PoiFiltersHelper { UDF_CAR_AID, UDF_FOR_TOURISTS, UDF_FOOD_SHOP, UDF_FUEL, UDF_SIGHTSEEING, UDF_EMERGENCY, UDF_PUBLIC_TRANSPORT, UDF_ACCOMMODATION, UDF_RESTAURANTS, UDF_PARKING }; + + public enum PoiTemplateList { + POI, WIKI + } public PoiFiltersHelper(OsmandApplication application) { this.application = application; @@ -110,7 +117,7 @@ public class PoiFiltersHelper { public PoiUIFilter getLocalWikiPOIFilter() { if (localWikiPoiFilter == null) { - PoiType place = application.getPoiTypes().getPoiTypeByKey("wiki_place"); + PoiType place = application.getPoiTypes().getPoiTypeByKey(WIKI_PLACE); if (place != null && !Algorithms.isEmpty(application.getLanguage())) { PoiUIFilter filter = new PoiUIFilter(place, application, " " + application.getLangTranslation(application.getLanguage())); @@ -135,26 +142,41 @@ public class PoiFiltersHelper { return globalWikiPoiFilter; } - public List getWikiPOIFilters() { - List cacheWikipediaFilters = new ArrayList<>(); - List enabledLanguages = null; - Bundle wikiPoiSettings = WikipediaPoiMenu.getWikiPoiSettings(application); - if (wikiPoiSettings != null) { - enabledLanguages = wikiPoiSettings.getStringArrayList(WikipediaPoiMenu.ENABLED_WIKI_POI_LANGUAGES_KEY); - } - if (enabledLanguages != null) { - for (String language : enabledLanguages) { - PoiType place = application.getPoiTypes().getPoiTypeByKey("wiki_place"); - if (place != null) { - String locale = new Locale(language).getLanguage(); + public List getLocalWikipediaPoiFilters(boolean onlyActiveLocales) { + String wikiLang = "wiki:lang:"; + if (cacheWikipediaFilters == null) { + cacheWikipediaFilters = new ArrayList<>(); + PoiType place = application.getPoiTypes().getPoiTypeByKey(WIKI_PLACE); + if (place != null) { + for (String locale : application.getPoiTypes().getAllAvailableWikiLocales()) { PoiUIFilter filter = new PoiUIFilter(place, application, " " + - application.getLangTranslation(locale)); - filter.setSavedFilterByName("wiki:lang:" + locale); + WikipediaPoiMenu.getTranslation(application, locale)); + filter.setSavedFilterByName(wikiLang + locale); filter.setStandardFilter(true); cacheWikipediaFilters.add(filter); } } } + if (onlyActiveLocales && cacheWikipediaFilters.size() > 0) { + List onlyActiveLocalFilters = new ArrayList<>(); + Bundle wikiPoiSettings = WikipediaPoiMenu.getWikiPoiSettings(application); + if (wikiPoiSettings != null) { + List enabledWikipediaPoiLocales = + wikiPoiSettings.getStringArrayList(WikipediaPoiMenu.ENABLED_WIKI_POI_LANGUAGES_KEY); + if (enabledWikipediaPoiLocales != null) { + for (PoiUIFilter filter : cacheWikipediaFilters) { + for (String locale : enabledWikipediaPoiLocales) { + String filterId = filter.getSavedFilterByName(); + String filterLocale = filterId.substring(wikiLang.length()); + if (locale.equalsIgnoreCase(filterLocale)) { + onlyActiveLocalFilters.add(filter); + } + } + } + } + } + return onlyActiveLocalFilters; + } return cacheWikipediaFilters; } @@ -202,7 +224,7 @@ public class PoiFiltersHelper { return f; } } - for (PoiUIFilter f : getWikiPOIFilters()) { + for (PoiUIFilter f : getLocalWikipediaPoiFilters(true)) { if (f.getFilterId().equals(filterId)) { return f; } diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiTemplateList.java b/OsmAnd/src/net/osmand/plus/poi/PoiTemplateList.java deleted file mode 100644 index 59a790b3ab..0000000000 --- a/OsmAnd/src/net/osmand/plus/poi/PoiTemplateList.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.osmand.plus.poi; - -public enum PoiTemplateList { - POI, WIKI -} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java b/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java index 5afdd742cc..59d22aef93 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java @@ -39,6 +39,9 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; +import static net.osmand.osm.MapPoiTypes.OSM_WIKI_CATEGORY; +import static net.osmand.osm.MapPoiTypes.WIKI_PLACE; + public class PoiUIFilter implements SearchPoiTypeFilter, Comparable, CustomSearchPoiFilter { public final static String STD_PREFIX = "std_"; //$NON-NLS-1$ @@ -147,7 +150,8 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable } public boolean isWikiFilter() { - return filterId.startsWith(STD_PREFIX + "wiki_place") || filterId.equals(STD_PREFIX + "osmwiki"); + return filterId.startsWith(STD_PREFIX + WIKI_PLACE) + || filterId.equals(STD_PREFIX + OSM_WIKI_CATEGORY); } public String getFilterByName() { diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java index 8186951771..2052bbe020 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java @@ -23,7 +23,6 @@ import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.poi.PoiFiltersHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.quickaction.QuickActionType; @@ -34,6 +33,8 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + public class ShowHidePoiAction extends QuickAction { diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java index 81f0f6a3d0..e16c872c91 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java @@ -70,7 +70,6 @@ import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.helpers.WaypointHelper; import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenuFragment; import net.osmand.plus.mapmarkers.MapMarkerSelectionFragment; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.profiles.AppModesBottomSheetDialogFragment; import net.osmand.plus.profiles.ConfigureAppModesBottomSheetDialogFragment; @@ -120,6 +119,8 @@ import java.util.Map; import java.util.Set; import java.util.Stack; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + public class MapRouteInfoMenu implements IRouteInformationListener, CardListener, FavoritesListener { private static final Log LOG = PlatformUtil.getLog(MapRouteInfoMenu.class); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java index 466d18cd40..8f40582bdc 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java @@ -36,7 +36,6 @@ import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.SimpleDividerItem; import net.osmand.plus.helpers.WaypointDialogHelper; import net.osmand.plus.helpers.WaypointHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.routing.IRouteInformationListener; import net.osmand.plus.routing.IRoutingDataUpdateListener; @@ -45,6 +44,8 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment implements IRouteInformationListener, IRoutingDataUpdateListener { public static final String TAG = "ShowAlongTheRouteBottomSheet"; diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java index 91cd25a83d..17bf11ee5b 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java @@ -79,7 +79,6 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode; import net.osmand.plus.helpers.SearchHistoryHelper; import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.poi.RearrangePoiFiltersFragment; import net.osmand.plus.resources.RegionAddressRepository; @@ -108,6 +107,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; import static net.osmand.plus.search.SendSearchQueryBottomSheet.MISSING_SEARCH_LOCATION_KEY; import static net.osmand.plus.search.SendSearchQueryBottomSheet.MISSING_SEARCH_QUERY_KEY; import static net.osmand.search.core.ObjectType.POI_TYPE; diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java index 93b4c3127a..e51454e548 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java @@ -27,7 +27,6 @@ import net.osmand.plus.helpers.SearchHistoryHelper; import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; import net.osmand.plus.poi.NominatimPoiFilter; import net.osmand.plus.poi.PoiFiltersHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.resources.ResourceManager.ResourceListener; import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController; @@ -47,6 +46,8 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + public class QuickSearchHelper implements ResourceListener { public static final int SEARCH_FAVORITE_API_PRIORITY = 50; diff --git a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java index ba7a9eee85..ebb3efa034 100644 --- a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java @@ -39,7 +39,6 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.WaypointHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.render.RenderingIcons; import net.osmand.plus.routing.IRouteInformationListener; diff --git a/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java b/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java index 474cac110c..97bd1d746a 100644 --- a/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java @@ -11,9 +11,6 @@ import androidx.core.content.ContextCompat; import net.osmand.AndroidUtils; import net.osmand.CallbackWithObject; -import net.osmand.osm.MapPoiTypes; -import net.osmand.osm.PoiCategory; -import net.osmand.osm.PoiType; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; @@ -53,6 +50,9 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen app = requiredMyApplication(); settings = app.getSettings(); initLanguagesData(); + if (savedInstanceState != null) { + dismiss(); + } } @Override @@ -105,18 +105,12 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen @Override public void onClick(View v) { boolean newValue = !languageItem[0].isChecked(); + languageItem[0].setChecked(newValue); language.setChecked(newValue); } }) .create(); languageItems.add(languageItem[0]); - language.setOnCheckLanguageCallback(new CallbackWithObject() { - @Override - public boolean processResult(Boolean result) { - languageItem[0].setChecked(result); - return true; - } - }); } items.addAll(languageItems); } @@ -125,29 +119,19 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen languages = new ArrayList<>(); Bundle wikiPoiSettings = WikipediaPoiMenu.getWikiPoiSettings(app); - List activatedLocales = null; + List enabledWikiPoiLocales = null; if (wikiPoiSettings != null) { isGlobalWikiPoiEnabled = wikiPoiSettings.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY); - activatedLocales = wikiPoiSettings.getStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY); + enabledWikiPoiLocales = wikiPoiSettings.getStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY); } - - PoiCategory osmwiki = app.getPoiTypes().getOsmwiki(); - if (activatedLocales != null) { - for (PoiType type : osmwiki.getPoiTypeByKeyName("wiki_place").getPoiAdditionals()) { - String name = type.getKeyName(); - if (name != null && name.startsWith(MapPoiTypes.WIKI_LANG_KEY_PREFFIX)) { - String locale = name.substring(MapPoiTypes.WIKI_LANG_KEY_PREFFIX.length()); - boolean checked = activatedLocales.contains(locale); - languages.add(new WikiLanguageItem(locale, app.getLangTranslation(locale), checked)); - } + if (enabledWikiPoiLocales != null) { + for (String locale : app.getPoiTypes().getAllAvailableWikiLocales()) { + boolean checked = enabledWikiPoiLocales.contains(locale); + languages.add(new WikiLanguageItem(locale, WikipediaPoiMenu.getTranslation(app, locale), checked)); } } else { - for (PoiType type : osmwiki.getPoiTypeByKeyName("wiki_place").getPoiAdditionals()) { - String name = type.getKeyName(); - if (name != null && name.startsWith(MapPoiTypes.WIKI_LANG_KEY_PREFFIX)) { - String locale = name.substring(MapPoiTypes.WIKI_LANG_KEY_PREFFIX.length()); - languages.add(new WikiLanguageItem(locale, app.getLangTranslation(locale), false)); - } + for (String locale : app.getPoiTypes().getAllAvailableWikiLocales()) { + languages.add(new WikiLanguageItem(locale, WikipediaPoiMenu.getTranslation(app, locale), false)); } } @@ -224,7 +208,6 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen private String locale; private String title; private boolean checked; - private CallbackWithObject onCheckLanguageCallback; public WikiLanguageItem(String locale, String title, boolean checked) { this.locale = locale; @@ -242,20 +225,12 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen public void setChecked(boolean checked) { this.checked = checked; - if (onCheckLanguageCallback != null) { - onCheckLanguageCallback.processResult(checked); - } - } - - public void setOnCheckLanguageCallback(CallbackWithObject onCheckLanguageCallback) { - this.onCheckLanguageCallback = onCheckLanguageCallback; } public String getTitle() { return title; } - @Override public int compareTo(WikiLanguageItem other) { return this.title.compareToIgnoreCase(other.title); diff --git a/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java b/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java index 58df48ee63..4baf24a982 100644 --- a/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java +++ b/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java @@ -1,12 +1,10 @@ package net.osmand.plus.wikipedia; import android.os.Bundle; -import android.view.View; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; -import net.osmand.AndroidUtils; import net.osmand.CallbackWithObject; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; @@ -21,14 +19,17 @@ import net.osmand.plus.download.DownloadResources; import net.osmand.plus.download.DownloadValidationManager; import net.osmand.plus.download.IndexItem; import net.osmand.plus.poi.PoiFiltersHelper; -import net.osmand.plus.poi.PoiTemplateList; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.util.Algorithms; import java.io.IOException; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; +import static net.osmand.osm.MapPoiTypes.WIKI_LANG; +import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList; + public class WikipediaPoiMenu { public static final String GLOBAL_WIKI_POI_ENABLED_KEY = "global_wikipedia_poi_enabled_key"; @@ -51,19 +52,14 @@ public class WikipediaPoiMenu { private ContextMenuAdapter createLayersItems() { final int toggleActionStringId = R.string.shared_string_wikipedia; final int languageActionStringId = R.string.shared_string_language; + final int spaceHeight = app.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_big_item_height); + final boolean enabled = app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.WIKI); ContextMenuAdapter adapter = new ContextMenuAdapter(); adapter.setDefaultLayoutId(R.layout.dash_item_with_description_72dp); adapter.setProfileDependent(true); adapter.setNightMode(nightMode); ContextMenuAdapter.OnRowItemClick l = new ContextMenuAdapter.OnRowItemClick() { - - @Override - public boolean onRowItemClick(ArrayAdapter adapter, - View view, int itemId, int pos) { - return super.onRowItemClick(adapter, view, itemId, pos); - } - @Override public boolean onContextMenuClick(final ArrayAdapter adapter, final int itemId, final int position, final boolean isChecked, int[] viewCoordinates) { @@ -71,7 +67,7 @@ public class WikipediaPoiMenu { app.runInUIThread(new Runnable() { @Override public void run() { - toggleWikipediaPoi(mapActivity, !settings.SHOW_WIKIPEDIA_POI.getModeValue(appMode), true); + toggleWikipediaPoi(mapActivity, !enabled, true); } }); } else if (itemId == languageActionStringId) { @@ -83,7 +79,6 @@ public class WikipediaPoiMenu { int toggleIconId = R.drawable.ic_plugin_wikipedia; int toggleIconColorId; - boolean enabled = settings.SHOW_WIKIPEDIA_POI.getModeValue(appMode); if (enabled) { toggleIconColorId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; } else { @@ -132,8 +127,13 @@ public class WikipediaPoiMenu { adapter.addItem(new ContextMenuItem.ItemBuilder() .setLayout(R.layout.list_item_icon_and_download) .setTitleId(R.string.downloading_list_indexes, mapActivity) + .hideDivider(true) .setLoading(true) .setListener(l).createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setLayout(R.layout.card_bottom_divider) + .setMinHeight(spaceHeight) + .createItem()); } else { try { IndexItem currentDownloadingItem = downloadThread.getCurrentDownloadingItem(); @@ -146,12 +146,15 @@ public class WikipediaPoiMenu { .setDescription(app.getString(R.string.wiki_menu_download_descr)) .setCategory(true) .setLayout(R.layout.list_group_title_with_descr).createItem()); - for (final IndexItem indexItem : wikiIndexes) { + for (int i = 0; i < wikiIndexes.size(); i++) { + final IndexItem indexItem = wikiIndexes.get(i); + boolean isLastItem = i == wikiIndexes.size() - 1; ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder() .setLayout(R.layout.list_item_icon_and_download) .setTitle(indexItem.getVisibleName(app, app.getRegions(), false)) .setDescription(DownloadActivityType.WIKIPEDIA_FILE.getString(app) + " • " + indexItem.getSizeDescription(app)) .setIcon(DownloadActivityType.WIKIPEDIA_FILE.getIconResource()) + .hideDivider(isLastItem) .setListener(new ContextMenuAdapter.ItemClickListener() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int position, boolean isChecked, int[] viewCoordinates) { @@ -207,6 +210,10 @@ public class WikipediaPoiMenu { } adapter.addItem(itemBuilder.createItem()); } + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setLayout(R.layout.card_bottom_divider) + .setMinHeight(spaceHeight) + .createItem()); } } catch (IOException e) { e.printStackTrace(); @@ -227,8 +234,10 @@ public class WikipediaPoiMenu { if (result) { Bundle wikiPoiSetting = getWikiPoiSettingsForProfile(app, appMode); if (wikiPoiSetting != null) { + boolean globalWikiEnabled = + wikiPoiSetting.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY); if (refresh) { - refreshWikiPoi(mapActivity, wikiPoiSetting); + refreshWikiPoi(mapActivity, globalWikiEnabled); } else { toggleWikipediaPoi(mapActivity, true, usedOnMap); } @@ -241,6 +250,25 @@ public class WikipediaPoiMenu { }); } + public static String getTranslation(OsmandApplication app, String locale) { + String translation = app.getLangTranslation(locale); + if (translation.equalsIgnoreCase(locale)) { + translation = getTranslationFromPhrases(app, locale); + } + return translation; + } + + private static String getTranslationFromPhrases(OsmandApplication app, String locale) { + String keyName = WIKI_LANG + "_" + locale; + try { + Field f = R.string.class.getField("poi_" + keyName); + Integer in = (Integer) f.get(null); + return app.getString(in); + } catch (Throwable e) { + return locale; + } + } + public static Bundle getWikiPoiSettings(OsmandApplication app) { Bundle wikiSettings = getWikiPoiSettingsForProfile(app, app.getSettings().getApplicationMode()); if (wikiSettings == null) { @@ -272,7 +300,8 @@ public class WikipediaPoiMenu { Bundle wikiPoiSettings = getWikiPoiSettings(app); if (wikiPoiSettings != null) { settings.SHOW_WIKIPEDIA_POI.set(true); - showWikiOnMap(app, wikiPoiSettings); + boolean globalWikiEnabled = wikiPoiSettings.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY); + showWikiOnMap(app, globalWikiEnabled); } else { ApplicationMode appMode = settings.getApplicationMode(); showLanguagesDialog(mapActivity, appMode, usedOnMap, false); @@ -285,21 +314,20 @@ public class WikipediaPoiMenu { mapActivity.refreshMap(); } - public static void refreshWikiPoi(MapActivity mapActivity, @NonNull Bundle wikiPoiSettings) { + public static void refreshWikiPoi(MapActivity mapActivity, boolean globalWikiEnabled) { OsmandApplication app = mapActivity.getMyApplication(); hideWikiFromMap(app); - showWikiOnMap(app, wikiPoiSettings); + showWikiOnMap(app, globalWikiEnabled); mapActivity.getDashboard().refreshContent(true); mapActivity.refreshMap(); } - private static void showWikiOnMap(OsmandApplication app, Bundle wikiPoiSettings) { + private static void showWikiOnMap(OsmandApplication app, boolean globalWikiEnabled) { PoiFiltersHelper ph = app.getPoiFilters(); - boolean globalWikiEnabled = wikiPoiSettings.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY); if (globalWikiEnabled) { ph.addSelectedPoiFilter(PoiTemplateList.WIKI, ph.getGlobalWikiPoiFilter()); } else { - List filters = ph.getWikiPOIFilters(); + List filters = ph.getLocalWikipediaPoiFilters(true); for (PoiUIFilter filter : filters) { ph.addSelectedPoiFilter(PoiTemplateList.WIKI, filter); } @@ -318,28 +346,22 @@ public class WikipediaPoiMenu { Bundle wikiLanguagesSetting = getWikiPoiSettings(app); if (wikiLanguagesSetting != null) { boolean globalWikiEnabled = wikiLanguagesSetting.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY); - List enabledLanguages = wikiLanguagesSetting.getStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY); + List enabledLocales = wikiLanguagesSetting.getStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY); if (globalWikiEnabled) { return app.getString(R.string.shared_string_all_languages); - } else if (enabledLanguages != null) { + } else if (enabledLocales != null) { List translations = new ArrayList<>(); - for (String language : enabledLanguages) { - translations.add(app.getLangTranslation(language)); + for (String locale : enabledLocales) { + translations.add(getTranslation(app, locale)); } - return AndroidUtils.makeStringFromList(translations, ", "); + return android.text.TextUtils.join(", ", translations); } } return null; } public static boolean isWikiPoiEnabled(OsmandApplication app) { - OsmandSettings settings = app.getSettings(); - boolean shouldShowWiki = settings.SHOW_WIKIPEDIA_POI.get(); - if (shouldShowWiki && getWikiPoiSettings(app) == null) { - settings.SHOW_WIKIPEDIA_POI.set(false); - shouldShowWiki = false; - } - return shouldShowWiki; + return app.getSettings().SHOW_WIKIPEDIA_POI.get() && getWikiPoiSettings(app) != null; } public static ContextMenuAdapter createListAdapter(final MapActivity mapActivity) {