Fixed excluded categories and icons

This commit is contained in:
Alexey Kulish 2016-10-14 22:11:26 +03:00
parent c40bf1d713
commit 5c3f322ed3
3 changed files with 36 additions and 31 deletions

View file

@ -321,7 +321,7 @@ public class MapPoiTypes {
} }
lastCategory.addPoiType(tp); lastCategory.addPoiType(tp);
} else if (name.equals("poi_reference")) { } else if (name.equals("poi_reference")) {
PoiType tp = new PoiType(this, lastCategory, parser.getAttributeValue("", "name")); PoiType tp = new PoiType(this, lastCategory, lastFilter, parser.getAttributeValue("", "name"));
referenceTypes.add(tp); referenceTypes.add(tp);
tp.setReferenceType(tp); tp.setReferenceType(tp);
if (lastFilter != null) { if (lastFilter != null) {
@ -465,7 +465,7 @@ public class MapPoiTypes {
if (lang != null) { if (lang != null) {
otag += ":" + lang; otag += ":" + lang;
} }
PoiType tp = new PoiType(this, lastCategory, oname); PoiType tp = new PoiType(this, lastCategory, lastFilter, oname);
tp.setBaseLangType(langBaseType); tp.setBaseLangType(langBaseType);
tp.setLang(lang); tp.setLang(lang);
tp.setAdditional(lastType != null ? lastType : tp.setAdditional(lastType != null ? lastType :
@ -499,7 +499,7 @@ public class MapPoiTypes {
if (lang != null) { if (lang != null) {
oname += ":" + lang; oname += ":" + lang;
} }
PoiType tp = new PoiType(this, lastCategory, oname); PoiType tp = new PoiType(this, lastCategory, lastFilter, oname);
String otag = parser.getAttributeValue("", "tag"); String otag = parser.getAttributeValue("", "tag");
if (lang != null) { if (lang != null) {
otag += ":" + lang; otag += ":" + lang;

View file

@ -6,6 +6,7 @@ import java.util.Map;
public class PoiType extends AbstractPoiType { public class PoiType extends AbstractPoiType {
private PoiCategory category; private PoiCategory category;
private PoiFilter filter;
private AbstractPoiType parentType; private AbstractPoiType parentType;
private PoiType referenceType; private PoiType referenceType;
private String osmTag; private String osmTag;
@ -22,9 +23,10 @@ public class PoiType extends AbstractPoiType {
private int order = 90; private int order = 90;
public PoiType(MapPoiTypes poiTypes, PoiCategory category, String name) { public PoiType(MapPoiTypes poiTypes, PoiCategory category, PoiFilter filter, String name) {
super(name, poiTypes); super(name, poiTypes);
this.category = category; this.category = category;
this.filter = filter;
} }
public PoiType getReferenceType() { public PoiType getReferenceType() {
@ -105,6 +107,10 @@ public class PoiType extends AbstractPoiType {
return category; return category;
} }
public PoiFilter getFilter() {
return filter;
}
public Map<PoiCategory, LinkedHashSet<String>> putTypes(Map<PoiCategory, LinkedHashSet<String>> acceptedTypes) { public Map<PoiCategory, LinkedHashSet<String>> putTypes(Map<PoiCategory, LinkedHashSet<String>> acceptedTypes) {
if (isAdditional()) { if (isAdditional()) {
return parentType.putTypes(acceptedTypes); return parentType.putTypes(acceptedTypes);

View file

@ -466,35 +466,36 @@ public class QuickSearchPoiFilterFragment extends DialogFragment {
MapPoiTypes poiTypes = getMyApplication().getPoiTypes(); MapPoiTypes poiTypes = getMyApplication().getPoiTypes();
Set<String> excludedPoiAdditionalCategories = new LinkedHashSet<>(); Set<String> excludedPoiAdditionalCategories = new LinkedHashSet<>();
for (Entry<PoiCategory, LinkedHashSet<String>> entry : filter.getAcceptedTypes().entrySet()) { for (Entry<PoiCategory, LinkedHashSet<String>> entry : filter.getAcceptedTypes().entrySet()) {
for (PoiFilter f : entry.getKey().getPoiFilters()) { if (entry.getKey().getExcludedPoiAdditionalCategories() != null) {
for (PoiType t : f.getPoiTypes()) { excludedPoiAdditionalCategories.addAll(entry.getKey().getExcludedPoiAdditionalCategories());
collectExcludedCategories(poiTypes, t, null, excludedPoiAdditionalCategories); }
if (entry.getValue() != null) {
for (String keyName : entry.getValue()) {
PoiType poiType = poiTypes.getPoiTypeByKey(keyName);
if (poiType != null) {
collectExcludedPoiAdditionalCategories(poiType, excludedPoiAdditionalCategories);
PoiFilter poiFilter = poiType.getFilter();
if (poiFilter != null) {
collectExcludedPoiAdditionalCategories(poiFilter, excludedPoiAdditionalCategories);
}
PoiCategory poiCategory = poiType.getCategory();
if (poiCategory != null) {
collectExcludedPoiAdditionalCategories(poiCategory, excludedPoiAdditionalCategories);
}
} }
collectExcludedCategories(poiTypes, f, null, excludedPoiAdditionalCategories);
} }
for (PoiType t : entry.getKey().getPoiTypes()) {
collectExcludedCategories(poiTypes, t, null, excludedPoiAdditionalCategories);
} }
collectExcludedCategories(poiTypes, entry.getKey(), entry.getValue(), excludedPoiAdditionalCategories);
} }
return excludedPoiAdditionalCategories; return excludedPoiAdditionalCategories;
} }
private void collectExcludedCategories(MapPoiTypes poiTypes, private void collectExcludedPoiAdditionalCategories(AbstractPoiType abstractPoiType,
AbstractPoiType type, LinkedHashSet<String> names,
Set<String> excludedPoiAdditionalCategories) { Set<String> excludedPoiAdditionalCategories) {
if (type.getExcludedPoiAdditionalCategories() != null) { List<String> categories = abstractPoiType.getExcludedPoiAdditionalCategories();
excludedPoiAdditionalCategories.addAll(type.getExcludedPoiAdditionalCategories());
}
if (names != null) {
for (String keyName : names) {
List<String> categories = poiTypes.getPoiTypeByKey(keyName).getExcludedPoiAdditionalCategories();
if (categories != null) { if (categories != null) {
excludedPoiAdditionalCategories.addAll(categories); excludedPoiAdditionalCategories.addAll(categories);
} }
} }
}
}
private List<PoiFilterListItem> getListItems() { private List<PoiFilterListItem> getListItems() {
OsmandApplication app = getMyApplication(); OsmandApplication app = getMyApplication();
@ -528,11 +529,9 @@ public class QuickSearchPoiFilterFragment extends DialogFragment {
items.add(new PoiFilterListItem(PoiFilterListItemType.DIVIDER, 0, null, -1, false, false, false, null, null)); items.add(new PoiFilterListItem(PoiFilterListItemType.DIVIDER, 0, null, -1, false, false, false, null, null));
String categoryIconStr = poiTypes.getPoiAdditionalCategoryIcon(category); String categoryIconStr = poiTypes.getPoiAdditionalCategoryIcon(category);
int categoryIconId; int categoryIconId = 0;
if (!Algorithms.isEmpty(categoryIconStr)) { if (!Algorithms.isEmpty(categoryIconStr)) {
categoryIconId = getResources().getIdentifier(categoryIconStr, "drawable", app.getPackageName()); categoryIconId = RenderingIcons.getBigIconResourceId(categoryIconStr);
} else {
categoryIconId = RenderingIcons.getBigIconResourceId(category);
} }
if (categoryIconId == 0) { if (categoryIconId == 0) {
categoryIconId = R.drawable.ic_action_folder_stroke; categoryIconId = R.drawable.ic_action_folder_stroke;