diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index 97cfcf3a42..f879e571de 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -12,6 +12,7 @@
-->
+ Search more…
%1$s → …
Output
User points
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java
index 6c55242e35..c83a5d9069 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java
@@ -1217,33 +1217,40 @@ public class MenuBuilder {
return new CollapsableView(textView, this, collapsed);
}
- protected CollapsableView getCollapsableView(Context context, boolean collapsed, List nearestAmenities, String nearestPoiType) {
- LinearLayout view = buildCollapsableContentView(context, collapsed, true);
+ protected CollapsableView getCollapsableView(final Context context, boolean collapsed, List 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 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 nearestAmenities = getAmenities(rect, filter);
nearestAmenities.remove(amenity);
@@ -1395,8 +1414,11 @@ public class MenuBuilder {
return Double.compare(d1, d2);
}
});
-
- return nearestAmenities;
+ if (isWikiFilter) {
+ return nearestAmenities;
+ } else {
+ return nearestAmenities.subList(0, Math.min(10, nearestAmenities.size()));
+ }
}
private List getAmenities(QuadRect rect, PoiUIFilter filter) {
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java
index 3907bb69dd..6fbcbb2236 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java
@@ -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;
@@ -417,7 +418,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
} else if (Amenity.OPENING_HOURS.equals(key)) {
iconId = R.drawable.ic_action_time;
collapsableView = getCollapsableTextView(view.getContext(), true,
- amenity.getAdditionalInfo(key).replace("; ", "\n").replace(",", ", "));
+ amenity.getAdditionalInfo(key).replace("; ", "\n").replace(",", ", "));
collapsable = true;
OpeningHoursParser.OpeningHours rs = OpeningHoursParser.parseOpenedHours(amenity.getAdditionalInfo(key));
if (rs != null) {
@@ -459,7 +460,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
vl = sb.toString();
} else if (key.contains(Amenity.ROUTE)
|| key.equals(Amenity.WIKIDATA)
- || key.equals(Amenity.WIKIMEDIA_COMMONS)) {
+ || key.equals(Amenity.WIKIMEDIA_COMMONS)) {
continue;
} else {
if (key.contains(Amenity.DESCRIPTION)) {
@@ -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,35 +726,35 @@ 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 =
- value + " " + mapActivity.getResources().getString(R.string.km);
+ value + " " + mapActivity.getResources().getString(R.string.km);
} else {
formattedValue = OsmAndFormatter.getFormattedDistance(valueAsFloatInMeters,
- mapActivity.getMyApplication());
+ mapActivity.getMyApplication());
}
formattedPrefix = formatPrefix(prefix,
- mapActivity.getResources().getString(R.string.distance));
+ mapActivity.getResources().getString(R.string.distance));
break;
}
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) {
diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchListAdapter.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchListAdapter.java
index d8a0811601..834ef131b6 100644
--- a/OsmAnd/src/net/osmand/plus/search/QuickSearchListAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchListAdapter.java
@@ -604,9 +604,6 @@ public class QuickSearchListAdapter extends ArrayAdapter {
selectedItems.clear();
}
notifyDataSetChanged();
- if (selectionListener != null) {
- selectionListener.onUpdateSelectionMode(selectedItems);
- }
} else {
QuickSearchListItem listItem = getItem(position);
if (ch.isChecked()) {
@@ -614,9 +611,9 @@ public class QuickSearchListAdapter extends ArrayAdapter {
} else {
selectedItems.remove(listItem);
}
- if (selectionListener != null) {
- selectionListener.onUpdateSelectionMode(selectedItems);
- }
+ }
+ if (selectionListener != null) {
+ selectionListener.onUpdateSelectionMode(selectedItems);
}
}