This commit is contained in:
Alexey Kulish 2016-10-18 13:53:43 +03:00
parent c5cbb77267
commit fb61cad9a4
3 changed files with 112 additions and 56 deletions

View file

@ -7,6 +7,7 @@ import net.osmand.plus.R;
import net.osmand.util.Algorithms;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.jwetherell.openmap.common.LatLonPoint;
import com.jwetherell.openmap.common.UTMPoint;
@ -15,6 +16,7 @@ public class PointDescription {
private String type = "";
private String name = "";
private String typeName;
private String iconName;
private double lat = 0;
private double lon = 0;
@ -91,6 +93,15 @@ public class PointDescription {
return typeName;
}
@Nullable
public String getIconName() {
return iconName;
}
public void setIconName(String iconName) {
this.iconName = iconName;
}
@NonNull
public String getName() {
return name;
@ -281,7 +292,11 @@ public class PointDescription {
if(!Algorithms.isEmpty(p.typeName)) {
tp = tp +'.' + p.typeName;
}
return tp + "#" + p.name;
String res = tp + "#" + p.name;
if (!Algorithms.isEmpty(p.iconName)) {
res += "#" + p.iconName;
}
return res;
}
public static PointDescription deserializeFromString(String s, LatLon l) {
@ -289,12 +304,23 @@ public class PointDescription {
if (s != null && s.length() > 0) {
int in = s.indexOf('#');
if (in >= 0) {
String nm = s.substring(in + 1).trim();
int ii = s.indexOf('#', in + 1);
String name;
String icon = null;
if (ii > 0) {
name = s.substring(in + 1, ii).trim();
icon = s.substring(ii + 1).trim();
} else {
name = s.substring(in + 1).trim();
}
String tp = s.substring(0, in);
if(tp.contains(".")) {
pd = new PointDescription(tp.substring(0, tp.indexOf('.')), tp.substring(tp.indexOf('.') + 1), nm);
pd = new PointDescription(tp.substring(0, tp.indexOf('.')), tp.substring(tp.indexOf('.') + 1), name);
} else {
pd = new PointDescription(tp, nm);
pd = new PointDescription(tp, name);
}
if (!Algorithms.isEmpty(icon)) {
pd.setIconName(icon);
}
}
}

View file

@ -166,8 +166,10 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
Object object = searchResult.object;
switch (searchResult.objectType) {
case POI:
String poiSimpleFormat = OsmAndFormatter.getPoiStringWithoutType((Amenity) object, lang, transliterate);
Amenity a = (Amenity) object;
String poiSimpleFormat = OsmAndFormatter.getPoiStringWithoutType(a, lang, transliterate);
pointDescription = new PointDescription(PointDescription.POINT_TYPE_POI, poiSimpleFormat);
pointDescription.setIconName(QuickSearchListItem.getAmenityIconName(a));
break;
case RECENT_OBJ:
HistoryEntry entry = (HistoryEntry) object;
@ -178,6 +180,7 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
object = amenity;
pointDescription = new PointDescription(PointDescription.POINT_TYPE_POI,
OsmAndFormatter.getPoiStringWithoutType(amenity, lang, transliterate));
pointDescription.setIconName(QuickSearchListItem.getAmenityIconName(amenity));
}
} else if (pointDescription.isFavorite()) {
LatLon entryLatLon = new LatLon(entry.getLat(), entry.getLon());
@ -209,10 +212,12 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
name = searchResult.localeRelatedObjectName + " " + name;
}
pointDescription = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, typeNameHouse, name);
pointDescription.setIconName("ic_action_building");
break;
case LOCATION:
LatLon latLon = (LatLon) object;
pointDescription = new PointDescription(latLon.getLatitude(), latLon.getLongitude());
pointDescription.setIconName("ic_action_world_globe");
break;
case STREET_INTERSECTION:
String typeNameIntersection = QuickSearchListItem.getTypeName(app, searchResult);
@ -221,6 +226,7 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
}
pointDescription = new PointDescription(PointDescription.POINT_TYPE_ADDRESS,
typeNameIntersection, QuickSearchListItem.getName(app, searchResult));
pointDescription.setIconName("ic_action_intersection");
break;
case WPT:
GPXUtilities.WptPt wpt = (GPXUtilities.WptPt) object;

View file

@ -2,6 +2,7 @@ package net.osmand.plus.search;
import android.content.Context;
import android.graphics.drawable.Drawable;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.Amenity;
import net.osmand.data.City;
@ -155,30 +156,30 @@ public class QuickSearchListItem {
}
return "";
case POI_TYPE:
String res= "";
if (searchResult.object instanceof AbstractPoiType) {
AbstractPoiType abstractPoiType = (AbstractPoiType) searchResult.object;
if (abstractPoiType instanceof PoiCategory) {
res = "";
} else if (abstractPoiType instanceof PoiFilter) {
PoiFilter poiFilter = (PoiFilter) abstractPoiType;
res = poiFilter.getPoiCategory() != null ? poiFilter.getPoiCategory().getTranslation() : "";
String res = "";
if (searchResult.object instanceof AbstractPoiType) {
AbstractPoiType abstractPoiType = (AbstractPoiType) searchResult.object;
if (abstractPoiType instanceof PoiCategory) {
res = "";
} else if (abstractPoiType instanceof PoiFilter) {
PoiFilter poiFilter = (PoiFilter) abstractPoiType;
res = poiFilter.getPoiCategory() != null ? poiFilter.getPoiCategory().getTranslation() : "";
} else if (abstractPoiType instanceof PoiType) {
PoiType poiType = (PoiType) abstractPoiType;
res = poiType.getParentType() != null ? poiType.getParentType().getTranslation() : null;
if (res == null) {
res = poiType.getCategory() != null ? poiType.getCategory().getTranslation() : null;
}
if (res == null) {
} else if (abstractPoiType instanceof PoiType) {
PoiType poiType = (PoiType) abstractPoiType;
res = poiType.getParentType() != null ? poiType.getParentType().getTranslation() : null;
if (res == null) {
res = poiType.getCategory() != null ? poiType.getCategory().getTranslation() : null;
}
if (res == null) {
res = "";
}
} else {
res = "";
}
} else {
res = "";
} else if (searchResult.object instanceof CustomSearchPoiFilter) {
res = ((CustomSearchPoiFilter) searchResult.object).getName();
}
} else if (searchResult.object instanceof CustomSearchPoiFilter) {
res = ((CustomSearchPoiFilter) searchResult.object).getName();
}
return res;
case POI:
Amenity amenity = (Amenity) searchResult.object;
@ -257,17 +258,41 @@ public class QuickSearchListItem {
return getIcon(app, searchResult);
}
public static String getPoiTypeIconName(AbstractPoiType abstractPoiType) {
if (RenderingIcons.containsBigIcon(abstractPoiType.getIconKeyName())) {
return abstractPoiType.getIconKeyName();
} else if (abstractPoiType instanceof PoiType
&& RenderingIcons.containsBigIcon(
((PoiType) abstractPoiType).getOsmTag() + "_" + ((PoiType) abstractPoiType).getOsmValue())) {
return ((PoiType) abstractPoiType).getOsmTag() + "_" + ((PoiType) abstractPoiType).getOsmValue();
}
return null;
}
public static String getAmenityIconName(Amenity amenity) {
PoiType st = amenity.getType().getPoiTypeByKeyName(amenity.getSubType());
if (st != null) {
if (RenderingIcons.containsBigIcon(st.getIconKeyName())) {
return st.getIconKeyName();
} else if (RenderingIcons.containsBigIcon(st.getOsmTag() + "_" + st.getOsmValue())) {
return st.getOsmTag() + "_" + st.getOsmValue();
}
}
return null;
}
public static Drawable getIcon(OsmandApplication app, SearchResult searchResult) {
if (searchResult == null || searchResult.objectType == null) {
return null;
}
int iconId = -1;
switch (searchResult.objectType) {
case CITY:
return app.getIconsCache().getIcon(R.drawable.ic_action_building_number,
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
case VILLAGE:
return app.getIconsCache().getIcon(R.drawable. ic_action_home_dark,
return app.getIconsCache().getIcon(R.drawable.ic_action_home_dark,
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
case POSTCODE:
case STREET:
@ -280,25 +305,19 @@ public class QuickSearchListItem {
return app.getIconsCache().getIcon(R.drawable.ic_action_intersection,
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
case POI_TYPE:
int iconId = -1;
if (searchResult.object instanceof AbstractPoiType) {
AbstractPoiType abstractPoiType = (AbstractPoiType) searchResult.object;
if (RenderingIcons.containsBigIcon(abstractPoiType.getIconKeyName())) {
iconId = RenderingIcons.getBigIconResourceId(abstractPoiType.getIconKeyName());
} else if (abstractPoiType instanceof PoiType
&& RenderingIcons.containsBigIcon(((PoiType) abstractPoiType).getOsmTag() + "_"
+ ((PoiType) abstractPoiType).getOsmValue())) {
iconId = RenderingIcons.getBigIconResourceId(((PoiType) abstractPoiType).getOsmTag() + "_"
+ ((PoiType) abstractPoiType).getOsmValue());
if (searchResult.object instanceof AbstractPoiType) {
String iconName = getPoiTypeIconName((AbstractPoiType) searchResult.object);
if (!Algorithms.isEmpty(iconName)) {
iconId = RenderingIcons.getBigIconResourceId(iconName);
}
} else if (searchResult.object instanceof CustomSearchPoiFilter) {
Object res = ((CustomSearchPoiFilter) searchResult.object).getIconResource();
if (res instanceof String && RenderingIcons.containsBigIcon(res.toString())) {
iconId = RenderingIcons.getBigIconResourceId(res.toString());
} else {
iconId = R.drawable.mx_user_defined;
}
}
} else if (searchResult.object instanceof CustomSearchPoiFilter) {
Object res = ((CustomSearchPoiFilter) searchResult.object).getIconResource();
if (res instanceof String && RenderingIcons.containsBigIcon(res.toString())) {
iconId = RenderingIcons.getBigIconResourceId(res.toString());
} else {
iconId = R.drawable.mx_user_defined;
}
}
if (iconId != -1) {
return app.getIconsCache().getIcon(iconId,
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
@ -307,15 +326,7 @@ public class QuickSearchListItem {
}
case POI:
Amenity amenity = (Amenity) searchResult.object;
String id = null;
PoiType st = amenity.getType().getPoiTypeByKeyName(amenity.getSubType());
if (st != null) {
if (RenderingIcons.containsBigIcon(st.getIconKeyName())) {
id = st.getIconKeyName();
} else if (RenderingIcons.containsBigIcon(st.getOsmTag() + "_" + st.getOsmValue())) {
id = st.getOsmTag() + "_" + st.getOsmValue();
}
}
String id = getAmenityIconName(amenity);
if (id != null) {
iconId = RenderingIcons.getBigIconResourceId(id);
return app.getIconsCache().getIcon(iconId,
@ -334,8 +345,21 @@ public class QuickSearchListItem {
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
case RECENT_OBJ:
HistoryEntry entry = (HistoryEntry) searchResult.object;
return app.getIconsCache().getIcon(SearchHistoryFragment.getItemIcon(entry.getName()),
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
if (entry.getName() != null && !Algorithms.isEmpty(entry.getName().getIconName())) {
String iconName = entry.getName().getIconName();
if (RenderingIcons.containsBigIcon(iconName)) {
iconId = RenderingIcons.getBigIconResourceId(iconName);
} else {
iconId = app.getResources().getIdentifier(iconName, "drawable", app.getPackageName());
}
}
if (iconId == -1) {
return app.getIconsCache().getIcon(SearchHistoryFragment.getItemIcon(entry.getName()),
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
} else {
return app.getIconsCache().getIcon(iconId,
app.getSettings().isLightContent() ? R.color.osmand_orange : R.color.osmand_orange_dark);
}
case WPT:
WptPt wpt = (WptPt) searchResult.object;
return FavoriteImageDrawable.getOrCreate(app, wpt.getColor(), false);