Show address in location item; fix distance calculation

This commit is contained in:
Alex 2017-10-11 12:01:27 +03:00
parent 4e5f769ba9
commit 1a8d1a710b

View file

@ -11,7 +11,10 @@ import android.view.ViewGroup;
import net.osmand.Location; import net.osmand.Location;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
import net.osmand.plus.GeocodingLookupService.OnAddressLookupResult;
import net.osmand.plus.IconsCache; import net.osmand.plus.IconsCache;
import net.osmand.plus.MapMarkersHelper.MapMarker; import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmAndFormatter;
@ -43,6 +46,8 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
private boolean showLocationItem; private boolean showLocationItem;
private Location myLoc; private Location myLoc;
private AddressLookupRequest locRequest;
private PointDescription locDescription;
private Map<Pair<WptPt, WptPt>, List<WptPt>> snappedToRoadPoints; private Map<Pair<WptPt, WptPt>, List<WptPt>> snappedToRoadPoints;
@ -55,6 +60,8 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
} }
public MapMarkersListAdapter(MapActivity mapActivity) { public MapMarkersListAdapter(MapActivity mapActivity) {
locDescription = new PointDescription(PointDescription.POINT_TYPE_MY_LOCATION,
mapActivity.getString(R.string.shared_string_location));
this.mapActivity = mapActivity; this.mapActivity = mapActivity;
reloadData(); reloadData();
} }
@ -84,7 +91,7 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
boolean finish = pos == finishPos && startPos != finishPos; boolean finish = pos == finishPos && startPos != finishPos;
boolean firstSelectedMarker = pos == firstSelectedMarkerPos; boolean firstSelectedMarker = pos == firstSelectedMarkerPos;
boolean useLocation = app.getMapMarkersHelper().isStartFromMyLocation() && myLoc != null; boolean useLocation = app.getMapMarkersHelper().isStartFromMyLocation() && showLocationItem;
MapMarker marker = locationItem ? null : (MapMarker) getItem(pos); MapMarker marker = locationItem ? null : (MapMarker) getItem(pos);
@ -105,10 +112,11 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
holder.bottomShadow.setVisibility(lastMarkerItem ? View.VISIBLE : View.GONE); holder.bottomShadow.setVisibility(lastMarkerItem ? View.VISIBLE : View.GONE);
holder.iconReorder.setVisibility(View.VISIBLE); holder.iconReorder.setVisibility(View.VISIBLE);
holder.iconReorder.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_reorder)); holder.iconReorder.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_reorder));
holder.description.setTextColor(ContextCompat.getColor(mapActivity, night ? R.color.dash_search_icon_dark : R.color.icon_color));
holder.firstDescription.setVisibility((start || finish) ? View.VISIBLE : View.GONE); holder.firstDescription.setVisibility((start || finish) ? View.VISIBLE : View.GONE);
if (start) { if (start) {
holder.firstDescription.setText(mapActivity.getString(R.string.shared_string_control_start) + (locationItem && !useLocation ? "" : "")); holder.firstDescription.setText(mapActivity.getString(R.string.shared_string_control_start) + "");
} else if (finish) { } else if (finish) {
holder.firstDescription.setText(mapActivity.getString(R.string.shared_string_finish) + ""); holder.firstDescription.setText(mapActivity.getString(R.string.shared_string_finish) + "");
} }
@ -123,18 +131,16 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
if (locationItem) { if (locationItem) {
holder.topDivider.setVisibility(View.VISIBLE); holder.topDivider.setVisibility(View.VISIBLE);
holder.icon.setImageDrawable(ContextCompat.getDrawable(mapActivity, R.drawable.map_pedestrian_location)); holder.icon.setImageDrawable(ContextCompat.getDrawable(mapActivity, R.drawable.map_pedestrian_location));
holder.point.setVisibility(View.GONE);
holder.checkBox.setChecked(app.getMapMarkersHelper().isStartFromMyLocation()); holder.checkBox.setChecked(app.getMapMarkersHelper().isStartFromMyLocation());
holder.iconReorder.setAlpha(.5f); holder.iconReorder.setAlpha(.5f);
holder.iconReorder.setOnTouchListener(null); holder.iconReorder.setOnTouchListener(null);
holder.description.setVisibility(View.GONE);
holder.distance.setVisibility(View.GONE); holder.distance.setVisibility(View.GONE);
holder.description.setText(locDescription.getName());
} else { } else {
holder.topDivider.setVisibility((!showLocationItem && firstMarkerItem) ? View.VISIBLE : View.GONE); holder.topDivider.setVisibility((!showLocationItem && firstMarkerItem) ? View.VISIBLE : View.GONE);
if (!iconSettled) { if (!iconSettled) {
holder.icon.setImageDrawable(iconsCache.getIcon(R.drawable.ic_action_flag_dark, MapMarker.getColorId(marker.colorIndex))); holder.icon.setImageDrawable(iconsCache.getIcon(R.drawable.ic_action_flag_dark, MapMarker.getColorId(marker.colorIndex)));
} }
holder.point.setVisibility(View.VISIBLE);
holder.checkBox.setChecked(marker.selected); holder.checkBox.setChecked(marker.selected);
holder.iconReorder.setAlpha(1f); holder.iconReorder.setAlpha(1f);
@ -148,8 +154,6 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
} }
}); });
holder.description.setVisibility(View.VISIBLE);
holder.description.setTextColor(ContextCompat.getColor(mapActivity, night ? R.color.dash_search_icon_dark : R.color.icon_color));
String descr; String descr;
if ((descr = marker.groupName) != null) { if ((descr = marker.groupName) != null) {
if (descr.equals("")) { if (descr.equals("")) {
@ -168,14 +172,16 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
} }
boolean showDistance = locationItem ? useLocation : marker.selected; boolean showDistance = locationItem ? useLocation : marker.selected;
boolean showPoint = showDistance && !locationItem; int visibility = showDistance ? View.VISIBLE : View.GONE;
holder.distance.setVisibility(showDistance ? View.VISIBLE : View.GONE); holder.distance.setVisibility(visibility);
holder.point.setVisibility(showPoint ? View.VISIBLE : View.GONE); holder.point.setVisibility(visibility);
holder.leftPointSpace.setVisibility(visibility);
holder.rightPointSpace.setVisibility(visibility);
if (showDistance) { if (showDistance) {
holder.distance.setTextColor(ContextCompat.getColor(mapActivity, night ? R.color.color_distance : R.color.color_myloc_distance)); holder.distance.setTextColor(ContextCompat.getColor(mapActivity, night ? R.color.color_distance : R.color.color_myloc_distance));
LatLon first = firstSelectedMarker && useLocation LatLon first = firstSelectedMarker && useLocation
? new LatLon(myLoc.getLatitude(), myLoc.getLongitude()) ? new LatLon(myLoc.getLatitude(), myLoc.getLongitude())
: getPreviousSelectedMarkerLatLon(pos - 1); : getPreviousSelectedMarkerLatLon(pos);
float dist = 0; float dist = 0;
if (first != null && marker != null) { if (first != null && marker != null) {
WptPt pt1 = new WptPt(); WptPt pt1 = new WptPt();
@ -254,14 +260,36 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
public void reloadData() { public void reloadData() {
items.clear(); items.clear();
myLoc = mapActivity.getMyApplication().getLocationProvider().getLastStaleKnownLocation(); OsmandApplication app = mapActivity.getMyApplication();
myLoc = app.getLocationProvider().getLastStaleKnownLocation();
showLocationItem = myLoc != null; showLocationItem = myLoc != null;
if (showLocationItem) { if (showLocationItem) {
lookupLocationAddress(app);
items.add(myLoc); items.add(myLoc);
} }
items.addAll(mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkers()); items.addAll(mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkers());
} }
private void lookupLocationAddress(OsmandApplication app) {
LatLon loc = new LatLon(myLoc.getLatitude(), myLoc.getLongitude());
if (locRequest == null || !locRequest.getLatLon().equals(loc)) {
if (locRequest != null) {
app.getGeocodingLookupService().cancel(locRequest);
}
locRequest = new AddressLookupRequest(loc, new OnAddressLookupResult() {
@Override
public void geocodingDone(String address) {
locRequest = null;
locDescription.setName(address);
if (showLocationItem) {
notifyItemChanged(0);
}
}
}, null);
app.getGeocodingLookupService().lookupAddress(locRequest);
}
}
public void calculateStartAndFinishPos() { public void calculateStartAndFinishPos() {
OsmandApplication app = mapActivity.getMyApplication(); OsmandApplication app = mapActivity.getMyApplication();
boolean startCalculated = false; boolean startCalculated = false;
@ -280,7 +308,7 @@ public class MapMarkersListAdapter extends RecyclerView.Adapter<MapMarkerItemVie
startPos = i; startPos = i;
startCalculated = true; startCalculated = true;
} }
firstSelectedMarkerPos = i + 1; firstSelectedMarkerPos = i;
firstSelectedMarkerCalculated = true; firstSelectedMarkerCalculated = true;
break; break;
} }