POI-Panel: Allow to search for other POIs of the same category
This commit is contained in:
parent
acff47bf8a
commit
62313cc468
4 changed files with 49 additions and 28 deletions
|
@ -12,6 +12,7 @@
|
|||
|
||||
-->
|
||||
|
||||
<string name="search_more">Search more…</string>
|
||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||
<string name="output">Output</string>
|
||||
<string name="user_points">User points</string>
|
||||
|
|
|
@ -1217,33 +1217,40 @@ public class MenuBuilder {
|
|||
return new CollapsableView(textView, this, collapsed);
|
||||
}
|
||||
|
||||
protected CollapsableView getCollapsableView(Context context, boolean collapsed, List<Amenity> nearestAmenities, String nearestPoiType) {
|
||||
LinearLayout view = buildCollapsableContentView(context, collapsed, true);
|
||||
protected CollapsableView getCollapsableView(final Context context, boolean collapsed, List<Amenity> nearestAmenities, String nearestPoiType) {
|
||||
final LinearLayout view = buildCollapsableContentView(context, collapsed, true);
|
||||
|
||||
for (final Amenity poi : nearestAmenities) {
|
||||
TextViewEx button = buildButtonInCollapsableView(context, false, false);
|
||||
String name = poi.getName(preferredMapAppLang, transliterateNames);
|
||||
final PointDescription pointDescription = mapActivity.getMapLayers().getPoiMapLayer().getObjectName(poi);
|
||||
String name = mapActivity.getMapLayers().getPoiMapLayer().getObjectName(poi).getName();
|
||||
if (Algorithms.isBlank(name)) {
|
||||
name = AmenityMenuController.getTypeStr(poi);
|
||||
}
|
||||
float dist = (float) MapUtils.getDistance(latLon, poi.getLocation());
|
||||
name += " (" + OsmAndFormatter.getFormattedDistance(dist, app) + ")";
|
||||
button.setText(name);
|
||||
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
LatLon latLon = new LatLon(poi.getLocation().getLatitude(), poi.getLocation().getLongitude());
|
||||
PointDescription pointDescription = mapActivity.getMapLayers().getPoiMapLayer().getObjectName(poi);
|
||||
mapActivity.getContextMenu().show(latLon, pointDescription, poi);
|
||||
mapActivity.getContextMenu().update(latLon, pointDescription, poi);
|
||||
mapActivity.setMapLocation(poi.getLocation().getLatitude(), poi.getLocation().getLongitude());
|
||||
}
|
||||
});
|
||||
view.addView(button);
|
||||
|
||||
}
|
||||
|
||||
PoiUIFilter filter = getPoiFilterForType(nearestPoiType);
|
||||
if (filter != null) {
|
||||
boolean isPoiFilter = nearestPoiType.equals(NEAREST_POI_KEY);
|
||||
if (filter != null && nearestPoi.size() > 0) {
|
||||
view.addView(createShowAllButton(context, filter));
|
||||
}
|
||||
if (isPoiFilter && nearestPoi.size() == 0) {
|
||||
view.addView(createSearchMoreButton(context, filter));
|
||||
}
|
||||
return new CollapsableView(view, this, collapsed);
|
||||
}
|
||||
|
||||
|
@ -1288,6 +1295,18 @@ public class MenuBuilder {
|
|||
return buttonShowAll;
|
||||
}
|
||||
|
||||
private View createSearchMoreButton(Context context, final PoiUIFilter filter) {
|
||||
TextViewEx buttonShowAll = buildButtonInCollapsableView(context, false, false);
|
||||
buttonShowAll.setText(app.getString(R.string.search_more));
|
||||
buttonShowAll.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mapActivity.showQuickSearch(filter);
|
||||
}
|
||||
});
|
||||
return buttonShowAll;
|
||||
}
|
||||
|
||||
protected LinearLayout buildCollapsableContentView(Context context, boolean collapsed, boolean needMargin) {
|
||||
final LinearLayout view = new LinearLayout(context);
|
||||
view.setOrientation(LinearLayout.VERTICAL);
|
||||
|
@ -1381,8 +1400,8 @@ public class MenuBuilder {
|
|||
}
|
||||
|
||||
private List<Amenity> getSortedAmenities(PoiUIFilter filter, final LatLon latLon) {
|
||||
QuadRect rect = MapUtils.calculateLatLonBbox(latLon.getLatitude(), latLon.getLongitude(), 250);
|
||||
|
||||
boolean isWikiFilter = filter.getFilterId().equals("std_osmwiki");
|
||||
QuadRect rect = MapUtils.calculateLatLonBbox(latLon.getLatitude(), latLon.getLongitude(), isWikiFilter ? 250 : 1000);
|
||||
List<Amenity> nearestAmenities = getAmenities(rect, filter);
|
||||
nearestAmenities.remove(amenity);
|
||||
|
||||
|
@ -1395,8 +1414,11 @@ public class MenuBuilder {
|
|||
return Double.compare(d1, d2);
|
||||
}
|
||||
});
|
||||
|
||||
if (isWikiFilter) {
|
||||
return nearestAmenities;
|
||||
} else {
|
||||
return nearestAmenities.subList(0, Math.min(10, nearestAmenities.size()));
|
||||
}
|
||||
}
|
||||
|
||||
private List<Amenity> getAmenities(QuadRect rect, PoiUIFilter filter) {
|
||||
|
|
|
@ -28,6 +28,7 @@ import net.osmand.plus.OsmandPlugin;
|
|||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.search.SearchActivity;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.mapcontextmenu.CollapsableView;
|
||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||
|
@ -68,7 +69,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
private static final String WIKI_LINK = ".wikipedia.org/w";
|
||||
public final static Log LOG = PlatformUtil.getLog(AmenityMenuBuilder.class);
|
||||
private final static DecimalFormat DF = new DecimalFormat("#.##");
|
||||
private MetricsConstants metricSystem;
|
||||
private final MetricsConstants metricSystem;
|
||||
private final Amenity amenity;
|
||||
|
||||
|
||||
|
@ -661,7 +662,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
buildAmenityRow(view, wikiInfo);
|
||||
}
|
||||
|
||||
if (processNearestPoi() && nearestPoi.size() > 0) {
|
||||
if (processNearestPoi()) {
|
||||
AmenityInfoRow poiInfo = new AmenityInfoRow(
|
||||
NEAREST_POI_KEY, AmenityMenuController.getRightIconId(amenity), null,
|
||||
app.getString(R.string.speak_poi) + " \"" + AmenityMenuController.getTypeStr(amenity) + "\" (" + nearestPoi.size() + ")",
|
||||
|
@ -725,7 +726,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
}
|
||||
break;
|
||||
case "distance":
|
||||
if(Algorithms.isFloat(value)) {
|
||||
if (Algorithms.isFloat(value)) {
|
||||
float valueAsFloatInMeters = Float.parseFloat(value) * 1000;
|
||||
if (metricSystem == MetricsConstants.KILOMETERS_AND_METERS) {
|
||||
formattedValue =
|
||||
|
@ -740,20 +741,20 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
}
|
||||
case "capacity":
|
||||
if (amenity.getSubType().equals("water_tower") || amenity.getSubType().equals("storage_tank")) {
|
||||
if(Algorithms.isFloat(value)) {
|
||||
if (Algorithms.isFloat(value)) {
|
||||
formattedValue = value + " " + mapActivity.getResources().getString(R.string.cubic_m);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "maxweight":
|
||||
if(Algorithms.isInt(value)) {
|
||||
if (Algorithms.isInt(value)) {
|
||||
formattedValue = value + " " + mapActivity.getResources().getString(R.string.metric_ton);
|
||||
}
|
||||
break;
|
||||
case "students":
|
||||
case "spots":
|
||||
case "seats":
|
||||
if(Algorithms.isInt(value)) {
|
||||
if (Algorithms.isInt(value)) {
|
||||
formattedPrefix = formatPrefix(prefix, mapActivity.getResources().getString(R.string.shared_string_capacity));
|
||||
}
|
||||
break;
|
||||
|
@ -764,7 +765,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
}
|
||||
|
||||
private String formatPrefix(String prefix, String units) {
|
||||
return (!prefix.isEmpty()) ? (prefix + ", " + units): units;
|
||||
return (!prefix.isEmpty()) ? (prefix + ", " + units) : units;
|
||||
}
|
||||
|
||||
public void buildAmenityRow(View view, AmenityInfoRow info) {
|
||||
|
|
|
@ -604,9 +604,6 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
|
|||
selectedItems.clear();
|
||||
}
|
||||
notifyDataSetChanged();
|
||||
if (selectionListener != null) {
|
||||
selectionListener.onUpdateSelectionMode(selectedItems);
|
||||
}
|
||||
} else {
|
||||
QuickSearchListItem listItem = getItem(position);
|
||||
if (ch.isChecked()) {
|
||||
|
@ -614,11 +611,11 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
|
|||
} else {
|
||||
selectedItems.remove(listItem);
|
||||
}
|
||||
}
|
||||
if (selectionListener != null) {
|
||||
selectionListener.onUpdateSelectionMode(selectedItems);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCompassVisibility(View view, QuickSearchListItem listItem) {
|
||||
View compassView = view.findViewById(R.id.compass_layout);
|
||||
|
|
Loading…
Reference in a new issue