Update recents

This commit is contained in:
Victor Shcherb 2015-02-23 09:16:04 +01:00
parent 179d2f6d4d
commit 508bdb7ecb
56 changed files with 950 additions and 497 deletions

View file

@ -29,6 +29,7 @@
<string name="photo">Photo</string>
<string name="share_note">Share note</string>
<string name="rename_recording">Rename recording</string>
<string name="location_on_map">Location:\n Lat %1$s\n Lon %2$s</string>
<string name="watch">Watch</string>
<string name="notes">Notes</string>
<string name="online_map">Online map</string>
@ -1790,7 +1791,6 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
<string name="error_reading_gpx">Error reading GPX data</string>
<string name="vector_data">Offline vector maps</string>
<string name="transport_context_menu">Search transport at stop</string>
<string name="point_on_map">Location:\n Lat %1$.5f\n Lon %2$.5f</string>
<string name="osb_bug_name">Bug</string>
<string name="poi_context_menu_modify">Modify POI</string>
<string name="poi_context_menu_delete">Delete POI</string>

View file

@ -6,6 +6,7 @@ import java.util.List;
import java.util.Map;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadPoint;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.R;
@ -155,8 +156,8 @@ public class MapExplorer implements OnGestureListener, IContextMenuProvider {
}
@Override
public String getObjectName(Object o) {
return mapView.getContext().getString(R.string.i_am_here);
public PointDescription getObjectName(Object o) {
return new PointDescription(PointDescription.POINT_TYPE_MARKER, mapView.getContext().getString(R.string.i_am_here));
}
}

View file

@ -28,6 +28,15 @@ public class FavouritePoint implements Serializable, LocationPoint {
return color;
}
public PointDescription getPointDescription() {
return new PointDescription(PointDescription.POINT_TYPE_FAVORITE, name);
}
@Override
public PointDescription getPointDescription(Context ctx) {
return getPointDescription();
}
public void setColor(int color) {
this.color = color;
}

View file

@ -2,6 +2,7 @@ package net.osmand.data;
import android.content.Context;
/**
*/
public interface LocationPoint {
@ -10,12 +11,12 @@ public interface LocationPoint {
public double getLongitude();
public String getName(Context ctx);
public int getColor();
public boolean isVisible();
public PointDescription getPointDescription(Context ctx);
// public String getSpeakableName();
//public void prepareCommandPlayer(CommandBuilder cmd, String names);

View file

@ -0,0 +1,285 @@
package net.osmand.data;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import java.util.StringTokenizer;
import com.jwetherell.openmap.common.LatLonPoint;
import com.jwetherell.openmap.common.UTMPoint;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.util.Algorithms;
import android.content.Context;
import android.support.annotation.NonNull;
public class PointDescription {
private String type = "";
private String name = "";
private String typeName;
public static final String POINT_TYPE_FAVORITE = "favorite";
public static final String POINT_TYPE_WPT = "wpt";
public static final String POINT_TYPE_POI = "poi";
public static final String POINT_TYPE_ADDRESS = "address";
public static final String POINT_TYPE_OSM_NOTE= "osm_note";
public static final String POINT_TYPE_MARKER = "marker";
public static final String POINT_TYPE_NOTE = "avnote";
public static final String POINT_TYPE_LOCATION = "location";
public static final String POINT_TYPE_ALARM = "alarm";
public static final String POINT_TYPE_TARGET = "destination";
public static final PointDescription LOCATION_POINT = new PointDescription(POINT_TYPE_LOCATION, "");
public PointDescription(String type, String name) {
this.type = type;
this.name = name;
if (this.name == null) {
this.name = "";
}
}
public PointDescription(String type, String typeName, String name) {
this.type = type;
this.name = name;
this.typeName = typeName;
if (this.name == null) {
this.name = "";
}
}
@NonNull
public String getName() {
return name;
}
public String getFullPlainName(Context ctx, double lat, double lon) {
if (isLocation()) {
OsmandSettings st = ((OsmandApplication) ctx.getApplicationContext()).getSettings();
int f = st.COORDINATES_FORMAT.get();
if (f == PointDescription.UTM_FORMAT) {
UTMPoint pnt = new UTMPoint(new LatLonPoint(lat, lon));
return pnt.zone_number + "" + pnt.zone_letter + " " + ((long) pnt.northing) + " "
+ ((long) pnt.easting);
} else {
return ctx.getString(R.string.location_on_map, convert(lat, f), convert(lon, f));
}
} else {
String typeName = this.typeName;
if (isFavorite()) {
typeName = ctx.getString(R.string.favorite);
} else if (isPoi()) {
typeName = ctx.getString(R.string.poi);
} else if (isWpt()) {
return ctx.getString(R.string.gpx_wpt);
}
if (!Algorithms.isEmpty(typeName)) {
if (Algorithms.isEmpty(name)) {
return typeName;
} else {
return typeName + ": " + name;
}
}
return name;
}
}
public boolean isLocation() {
return POINT_TYPE_LOCATION.equals(type);
}
public boolean isAddress() {
return POINT_TYPE_ADDRESS.equals(type);
}
public boolean isWpt() {
return POINT_TYPE_WPT.equals(type);
}
public boolean isPoi() {
return POINT_TYPE_POI.equals(type);
}
public boolean isFavorite() {
return POINT_TYPE_FAVORITE.equals(type);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
result = prime * result + ((typeName == null) ? 0 : typeName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
PointDescription other = (PointDescription) obj;
if (Algorithms.objectEquals(other.name, name)
&& Algorithms.objectEquals(other.type, type)
&& Algorithms.objectEquals(other.typeName, typeName)) {
return true;
}
return false;
}
public static String getSimpleName(LocationPoint o, Context ctx) {
return o.getPointDescription(ctx).getFullPlainName(ctx, o.getLatitude(), o.getLongitude());
}
public static String serializeToString(PointDescription p) {
if (p == null) {
return "";
}
String tp = p.type ;
if(!Algorithms.isEmpty(p.typeName)) {
tp = tp +'.' + p.typeName;
}
return tp + "#" + p.name;
}
public static PointDescription deserializeFromString(String s) {
if (s != null && s.length() > 0) {
int in = s.indexOf('#');
if (in >= 0) {
String nm = s.substring(in + 1).trim();
String tp = s.substring(0, in);
if(tp.contains(".")) {
return new PointDescription(tp.substring(0, tp.indexOf('.')), tp.substring(tp.indexOf('.') + 1), nm);
} else {
return new PointDescription(tp, nm);
}
}
}
return null;
}
////////////////////////////////////////////////////////////////////////////
// THIS code is copied from Location.convert() in order to change locale
// and to fix bug in android implementation : doesn't convert if min = 59.23 or sec = 59.32 or deg=179.3
public static final int FORMAT_DEGREES = 0;
public static final int FORMAT_MINUTES = 1;
public static final int FORMAT_SECONDS = 2;
public static final int UTM_FORMAT = 3;
private static final char DELIM = ':';
/**
* Converts a String in one of the formats described by
* FORMAT_DEGREES, FORMAT_MINUTES, or FORMAT_SECONDS into a
* double.
*
* @throws NullPointerException if coordinate is null
* @throws IllegalArgumentException if the coordinate is not
* in one of the valid formats.
*/
public static double convert(String coordinate) {
coordinate = coordinate.replace(' ', ':').replace('#', ':').replace(',', '.');
if (coordinate == null) {
throw new NullPointerException("coordinate");
}
boolean negative = false;
if (coordinate.charAt(0) == '-') {
coordinate = coordinate.substring(1);
negative = true;
}
StringTokenizer st = new StringTokenizer(coordinate, ":");
int tokens = st.countTokens();
if (tokens < 1) {
throw new IllegalArgumentException("coordinate=" + coordinate);
}
try {
String degrees = st.nextToken();
double val;
if (tokens == 1) {
val = Double.parseDouble(degrees);
return negative ? -val : val;
}
String minutes = st.nextToken();
int deg = Integer.parseInt(degrees);
double min;
double sec = 0.0;
if (st.hasMoreTokens()) {
min = Integer.parseInt(minutes);
String seconds = st.nextToken();
sec = Double.parseDouble(seconds);
} else {
min = Double.parseDouble(minutes);
}
boolean isNegative180 = negative && (deg == 180) &&
(min == 0) && (sec == 0);
// deg must be in [0, 179] except for the case of -180 degrees
if ((deg < 0.0) || (deg > 180 && !isNegative180)) {
throw new IllegalArgumentException("coordinate=" + coordinate);
}
if (min < 0 || min > 60d) {
throw new IllegalArgumentException("coordinate=" +
coordinate);
}
if (sec < 0 || sec > 60d) {
throw new IllegalArgumentException("coordinate=" +
coordinate);
}
val = deg*3600.0 + min*60.0 + sec;
val /= 3600.0;
return negative ? -val : val;
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException("coordinate=" + coordinate);
}
}
public static String convert(double coordinate, int outputType) {
if (coordinate < -180.0 || coordinate > 180.0 || Double.isNaN(coordinate)) {
throw new IllegalArgumentException("coordinate=" + coordinate); //$NON-NLS-1$
}
if ((outputType != FORMAT_DEGREES) && (outputType != FORMAT_MINUTES) && (outputType != FORMAT_SECONDS)) {
throw new IllegalArgumentException("outputType=" + outputType); //$NON-NLS-1$
}
StringBuilder sb = new StringBuilder();
// Handle negative values
if (coordinate < 0) {
sb.append('-');
coordinate = -coordinate;
}
DecimalFormat df = new DecimalFormat("###.#####", new DecimalFormatSymbols(Locale.US)); //$NON-NLS-1$
if (outputType == FORMAT_MINUTES || outputType == FORMAT_SECONDS) {
int degrees = (int) Math.floor(coordinate);
sb.append(degrees);
sb.append(DELIM);
coordinate -= degrees;
coordinate *= 60.0;
if (outputType == FORMAT_SECONDS) {
int minutes = (int) Math.floor(coordinate);
sb.append(minutes);
sb.append(DELIM);
coordinate -= minutes;
coordinate *= 60.0;
}
}
sb.append(df.format(coordinate));
return sb.toString();
}
}

View file

@ -12,7 +12,6 @@ import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
@ -31,6 +30,7 @@ import java.util.TimeZone;
import net.osmand.Location;
import net.osmand.PlatformUtil;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -115,9 +115,10 @@ public class GPXUtilities {
return lon;
}
@Override
public String getName(Context ctx) {
return name;
public PointDescription getPointDescription(Context ctx) {
return new PointDescription(PointDescription.POINT_TYPE_WPT, name);
}
public WptPt(double lat, double lon, long time, double ele, double speed, double hdop) {

View file

@ -14,9 +14,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import net.osmand.IndexConstants;
import net.osmand.StateChangedListener;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.map.ITileSource;
import net.osmand.map.TileSourceManager;
import net.osmand.map.TileSourceManager.TileSourceTemplate;
@ -1278,10 +1280,10 @@ public class OsmandSettings {
return new LatLon(lat, lon);
}
public String getAndClearMapLabelToShow(){
public PointDescription getAndClearMapLabelToShow(){
String label = settingsAPI.getString(globalPreferences,MAP_LABEL_TO_SHOW, null);
settingsAPI.edit(globalPreferences).remove(MAP_LABEL_TO_SHOW).commit();
return label;
return PointDescription.deserializeFromString(label);
}
private Object objectToShow;
@ -1295,30 +1297,30 @@ public class OsmandSettings {
return settingsAPI.getInt(globalPreferences,MAP_ZOOM_TO_SHOW, 5);
}
public void setMapLocationToShow(double latitude, double longitude, int zoom, String historyDescription,
String labelToShow, Object toShow) {
public void setMapLocationToShow(double latitude, double longitude, int zoom, PointDescription pointDescription,
boolean addToHistory, Object toShow) {
SettingsEditor edit = settingsAPI.edit(globalPreferences);
edit.putFloat(MAP_LAT_TO_SHOW, (float) latitude);
edit.putFloat(MAP_LON_TO_SHOW, (float) longitude);
if (labelToShow != null) {
edit.putString(MAP_LABEL_TO_SHOW, labelToShow);
if (pointDescription != null) {
edit.putString(MAP_LABEL_TO_SHOW, PointDescription.serializeToString(pointDescription));
} else {
edit.remove(MAP_LABEL_TO_SHOW);
}
edit.putInt(MAP_ZOOM_TO_SHOW, zoom);
edit.commit();
objectToShow = toShow;
if(historyDescription != null){
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription);
if(addToHistory){
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, pointDescription);
}
}
public void setMapLocationToShow(double latitude, double longitude, int zoom) {
setMapLocationToShow(latitude, longitude, zoom, null, null, null);
setMapLocationToShow(latitude, longitude, zoom, null, false, null);
}
public void setMapLocationToShow(double latitude, double longitude, int zoom, String historyDescription){
setMapLocationToShow(latitude, longitude, zoom, historyDescription, historyDescription, null);
public void setMapLocationToShow(double latitude, double longitude, int zoom, PointDescription historyDescription){
setMapLocationToShow(latitude, longitude, zoom, historyDescription, true, null);
}
// Do not use that method if you want to show point on map. Use setMapLocationToShow
@ -1368,12 +1370,14 @@ public class OsmandSettings {
return new LatLon(lat, lon);
}
public String getStartPointDescription() {
return settingsAPI.getString(globalPreferences, START_POINT_DESCRIPTION, "");
public PointDescription getStartPointDescription() {
return
PointDescription.deserializeFromString(settingsAPI.getString(globalPreferences, START_POINT_DESCRIPTION, ""));
}
public String getPointNavigateDescription() {
return settingsAPI.getString(globalPreferences, POINT_NAVIGATE_DESCRIPTION, "");
public PointDescription getPointNavigateDescription() {
return
PointDescription.deserializeFromString(settingsAPI.getString(globalPreferences, POINT_NAVIGATE_DESCRIPTION, ""));
}
@ -1422,16 +1426,17 @@ public class OsmandSettings {
return list;
}
public boolean insertIntermediatePoint(double latitude, double longitude, String historyDescription, int index) {
public boolean insertIntermediatePoint(double latitude, double longitude, PointDescription historyDescription, int index) {
List<LatLon> ps = getIntermediatePoints();
List<String> ds = getIntermediatePointDescriptions(ps.size());
ps.add(index, new LatLon(latitude, longitude));
ds.add(index, historyDescription);
ds.add(index, PointDescription.serializeToString(historyDescription));
if (historyDescription != null) {
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription);
}
return saveIntermediatePoints(ps,ds);
}
public boolean deleteIntermediatePoint( int index) {
List<LatLon> ps = getIntermediatePoints();
List<String> ds = getIntermediatePointDescriptions(ps.size());
@ -1474,23 +1479,20 @@ public class OsmandSettings {
remove(START_POINT_DESCRIPTION).commit();
}
public boolean setPointToNavigate(double latitude, double longitude, String historyDescription) {
public boolean setPointToNavigate(double latitude, double longitude, PointDescription p) {
boolean add = settingsAPI.edit(globalPreferences).putFloat(POINT_NAVIGATE_LAT, (float) latitude).putFloat(POINT_NAVIGATE_LON, (float) longitude).commit();
settingsAPI.edit(globalPreferences).putString(POINT_NAVIGATE_DESCRIPTION, historyDescription).commit();
settingsAPI.edit(globalPreferences).putString(POINT_NAVIGATE_DESCRIPTION, PointDescription.serializeToString(p)).commit();
if(add){
if(historyDescription != null){
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription);
if(p != null){
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, p);
}
}
return add;
}
public boolean setPointToStart(double latitude, double longitude, String description) {
public boolean setPointToStart(double latitude, double longitude, PointDescription p) {
boolean add = settingsAPI.edit(globalPreferences).putFloat(START_POINT_LAT, (float) latitude).putFloat(START_POINT_LON, (float) longitude).commit();
if (description == null) {
description = "";
}
settingsAPI.edit(globalPreferences).putString(START_POINT_DESCRIPTION, description).commit();
settingsAPI.edit(globalPreferences).putString(START_POINT_DESCRIPTION, PointDescription.serializeToString(p)).commit();
return add;
}
@ -1738,6 +1740,8 @@ public class OsmandSettings {
public final OsmandPreference<String> CONTRIBUTION_INSTALL_APP_DATE = new StringPreference("CONTRIBUTION_INSTALL_APP_DATE", null).makeGlobal();
public final OsmandPreference<Integer> COORDINATES_FORMAT = new IntPreference("coordinates_format", PointDescription.FORMAT_DEGREES).makeGlobal();
public final OsmandPreference<Boolean> FOLLOW_THE_ROUTE = new BooleanPreference("follow_to_route", false).makeGlobal();
public final OsmandPreference<String> FOLLOW_THE_GPX_ROUTE = new StringPreference("follow_gpx", null).makeGlobal();

View file

@ -4,15 +4,15 @@ package net.osmand.plus;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import net.osmand.Location;
import net.osmand.StateChangedListener;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.util.MapUtils;
import android.content.Context;
public class TargetPointsHelper {
@ -26,43 +26,47 @@ public class TargetPointsHelper {
public static class TargetPoint implements LocationPoint {
public LatLon point;
public String name;
private PointDescription pointDescription;
public int index;
public boolean intermediate;
public TargetPoint(LatLon point, String name) {
public TargetPoint(LatLon point, PointDescription name) {
this.point = point;
this.name = name;
this.pointDescription = name;
}
public TargetPoint(LatLon point, String name, int index) {
public TargetPoint(LatLon point, PointDescription name, int index) {
this.point = point;
this.name = name;
this.pointDescription = name;
this.index = index;
this.intermediate = true;
}
public static TargetPoint create(LatLon point, String name) {
public PointDescription getPointDescription(Context ctx) {
if (!intermediate) {
return new PointDescription(PointDescription.POINT_TYPE_TARGET, ctx.getString(R.string.destination_point, ""),
getOnlyName());
} else {
return new PointDescription(PointDescription.POINT_TYPE_TARGET, (index + 1) + ". " + ctx.getString(R.string.intermediate_point, ""),
getOnlyName());
}
}
public PointDescription getOriginalPointDescription() {
return pointDescription;
};
public String getOnlyName() {
return pointDescription == null ? "" : pointDescription.getName();
}
public static TargetPoint create(LatLon point, PointDescription name) {
if(point != null) {
return new TargetPoint(point, name);
}
return null;
}
private String vName() {
if(name.trim().length()==0) {
return "";
}
return ": " + name;
}
public String getVisibleName(Context ctx) {
if (!intermediate) {
return ctx.getString(R.string.destination_point, "") + vName();
} else {
return (index + 1) + ". " + ctx.getString(R.string.intermediate_point, "") + vName();
}
}
public double getLatitude() {
return point.getLatitude();
@ -72,11 +76,6 @@ public class TargetPointsHelper {
return point.getLongitude();
}
@Override
public String getName(Context ctx) {
return getVisibleName(ctx);
}
@Override
public int getColor() {
return 0;
@ -103,7 +102,7 @@ public class TargetPointsHelper {
List<LatLon> ips = settings.getIntermediatePoints();
List<String> desc = settings.getIntermediatePointDescriptions(ips.size());
for(int i = 0; i < ips.size(); i++) {
intermediatePoints.add(new TargetPoint(ips.get(i), desc.get(i), i));
intermediatePoints.add(new TargetPoint(ips.get(i), PointDescription.deserializeFromString(desc.get(i)), i));
}
}
@ -115,7 +114,7 @@ public class TargetPointsHelper {
return pointToStart;
}
public String getStartPointDescription(){
public PointDescription getStartPointDescription(){
return settings.getStartPointDescription();
}
@ -170,7 +169,7 @@ public class TargetPointsHelper {
public void makeWayPointDestination(boolean updateRoute, int index){
pointToNavigate = intermediatePoints.remove(index);
settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(),
pointToNavigate.name);
pointToNavigate.pointDescription);
settings.deleteIntermediatePoint(index);
updateRouteAndReferesh(updateRoute);
}
@ -184,7 +183,7 @@ public class TargetPointsHelper {
settings.deleteIntermediatePoint(sz- 1);
pointToNavigate = intermediatePoints.remove(sz - 1);
settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(),
pointToNavigate.name);
pointToNavigate.pointDescription);
}
} else {
settings.deleteIntermediatePoint(index);
@ -268,12 +267,12 @@ public class TargetPointsHelper {
ArrayList<String> names = new ArrayList<String>(subList.size());
ArrayList<LatLon> ls = new ArrayList<LatLon>(subList.size());
for(int i = 0; i < subList.size(); i++) {
names.add(subList.get(i).name);
names.add(PointDescription.serializeToString(subList.get(i).pointDescription));
ls.add(subList.get(i).point);
}
settings.saveIntermediatePoints(ls, names);
TargetPoint p = point.get(point.size() - 1);
settings.setPointToNavigate(p.getLatitude(), p.getLongitude(), p.name);
settings.setPointToNavigate(p.getLatitude(), p.getLongitude(), p.pointDescription);
} else {
settings.clearIntermediatePoints();
}
@ -306,13 +305,13 @@ public class TargetPointsHelper {
navigateToPoint(point, updateRoute, intermediate, null);
}
public void navigateToPoint(LatLon point, boolean updateRoute, int intermediate, String historyName){
public void navigateToPoint(LatLon point, boolean updateRoute, int intermediate, PointDescription historyName){
if(point != null){
if(intermediate < 0 || intermediate > intermediatePoints.size()) {
if(intermediate > intermediatePoints.size()) {
TargetPoint pn = getPointToNavigate();
if(pn != null) {
settings.insertIntermediatePoint(pn.getLatitude(), pn.getLongitude(), pn.name,
settings.insertIntermediatePoint(pn.getLatitude(), pn.getLongitude(), pn.pointDescription,
intermediatePoints.size());
}
}
@ -329,7 +328,7 @@ public class TargetPointsHelper {
updateRouteAndReferesh(updateRoute);
}
public void setStartPoint(LatLon startPoint, boolean updateRoute, String name) {
public void setStartPoint(LatLon startPoint, boolean updateRoute, PointDescription name) {
if(startPoint != null) {
settings.setPointToStart(startPoint.getLatitude(), startPoint.getLongitude(), name);
} else {

View file

@ -12,13 +12,6 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
import android.os.Handler;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.SearchView;
import android.view.*;
import net.osmand.IndexConstants;
import net.osmand.access.AccessibleToast;
import net.osmand.plus.ContextMenuAdapter;
@ -46,15 +39,24 @@ import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.SearchView;
import android.text.Html;
import android.text.Spanned;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageButton;
@ -70,7 +72,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
// public static final int ACTION_ID = 0;
// protected static final int DELETE_ACTION_ID = 1;
private boolean selectionMode = false;
private List<GpxInfo> selectedItems = new ArrayList<>();
private List<GpxInfo> selectedItems = new ArrayList<GpxInfo>();
private ActionMode actionMode;
private LoadGpxTask asyncLoader;
private GpxIndexesAdapter listAdapter;

View file

@ -111,10 +111,9 @@ public class FavoritesListFragment extends ListFragment implements SearchActivit
if (!isSelectFavoriteMode()) {
FavouritePoint point = favouritesAdapter.getItem(position);
String name = getString(R.string.favorite) + ": " + point.getName();
LatLon location = new LatLon(point.getLatitude(), point.getLongitude());
final PopupMenu optionsMenu = new PopupMenu(getActivity(), v);
DirectionsDialogs.createDirectionActionsPopUpMenu(optionsMenu, location, point, name, settings.getLastKnownMapZoom(),
DirectionsDialogs.createDirectionActionsPopUpMenu(optionsMenu, location, point, point.getPointDescription(), settings.getLastKnownMapZoom(),
getActivity(), true, false);
optionsMenu.show();
} else {
@ -171,11 +170,8 @@ public class FavoritesListFragment extends ListFragment implements SearchActivit
}
public String getName(FavouritePoint model){
if(Algorithms.isEmpty(model.getCategory())) {
return model.getName();
}
return model.getCategory() + ": " + model.getName();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View file

@ -24,6 +24,7 @@ import java.util.Set;
import net.osmand.access.AccessibleToast;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
@ -167,10 +168,10 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment {
qa.setAnchor(v);
final OsmandSettings settings = getMyApplication().getSettings();
String name = getString(R.string.favorite) + ": " + point.getName();
LatLon location = new LatLon(point.getLatitude(), point.getLongitude());
final PopupMenu optionsMenu = new PopupMenu(getActivity(), v);
DirectionsDialogs.createDirectionActionsPopUpMenu(optionsMenu, location, point, name, settings.getLastKnownMapZoom(),
DirectionsDialogs.createDirectionActionsPopUpMenu(optionsMenu, location, point,
new PointDescription(PointDescription.POINT_TYPE_FAVORITE, point.getName()), settings.getLastKnownMapZoom(),
getActivity(), true, false);
boolean light = getMyApplication().getSettings().isLightContent();
@ -427,7 +428,7 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment {
for(FavouritePoint fp : favoritesSelected) {
targetPointsHelper.navigateToPoint(new LatLon(fp.getLatitude(), fp.getLongitude()), false,
targetPointsHelper.getIntermediatePoints().size() + 1,
getString(R.string.favorite) + ": " + fp.getName());
new PointDescription(PointDescription.POINT_TYPE_FAVORITE, fp.getName()));
}
if(getMyApplication().getRoutingHelper().isRouteCalculated()) {
targetPointsHelper.updateRouteAndReferesh(true);

View file

@ -143,7 +143,7 @@ public class IntermediatePointsDialog {
TargetPoint start ;
if(activity instanceof MapActivity) {
LatLon ll = new LatLon(((MapActivity) activity).getMapView().getLatitude(), ((MapActivity) activity).getMapView().getLongitude());
start = TargetPoint.create(ll, "");
start = TargetPoint.create(ll, null);
} else {
start = lt.get(0);
}
@ -209,7 +209,7 @@ public class IntermediatePointsDialog {
} else {
nm += app.getString(R.string.destination_point, distString);
}
String descr = tp.name;
String descr = tp.getOnlyName();
if(descr != null && descr.trim().length() > 0) {
nm += "\n" + descr;
}

View file

@ -17,6 +17,7 @@ import net.osmand.access.AccessibleToast;
import net.osmand.access.MapAccessibilityActions;
import net.osmand.core.android.AtlasMapRendererView;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadPoint;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.MapTileDownloader.DownloadRequest;
@ -370,7 +371,7 @@ public class MapActivity extends AccessibleActivity {
LatLon cur = new LatLon(mapView.getLatitude(), mapView.getLongitude());
LatLon latLonToShow = settings.getAndClearMapLocationToShow();
String mapLabelToShow = settings.getAndClearMapLabelToShow();
PointDescription mapLabelToShow = settings.getAndClearMapLabelToShow();
Object toShow = settings.getAndClearObjectToShow();
int status = settings.isRouteToPointNavigateAndClear();
if(status != 0){
@ -382,7 +383,8 @@ public class MapActivity extends AccessibleActivity {
}
if(mapLabelToShow != null && latLonToShow != null){
mapLayers.getContextMenuLayer().setSelectedObject(toShow);
mapLayers.getContextMenuLayer().setLocation(latLonToShow, mapLabelToShow);
mapLayers.getContextMenuLayer().setLocation(latLonToShow, mapLabelToShow.getFullPlainName(this,
latLonToShow.getLatitude(), latLonToShow.getLongitude()));
}
if (latLonToShow != null && !latLonToShow.equals(cur)) {
mapView.getAnimatedDraggingThread().startMoving(latLonToShow.getLatitude(), latLonToShow.getLongitude(),
@ -799,7 +801,8 @@ public class MapActivity extends AccessibleActivity {
if (zoom != null) {
z = Integer.parseInt(zoom);
}
settings.setMapLocationToShow(lt, ln, z, getString(R.string.shared_location));
settings.setMapLocationToShow(lt, ln, z, new PointDescription(
PointDescription.POINT_TYPE_MARKER, getString(R.string.shared_location)));
} catch (NumberFormatException e) {
}
}

View file

@ -15,6 +15,7 @@ import net.osmand.Location;
import net.osmand.access.AccessibleAlertBuilder;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.ITileSource;
@ -333,17 +334,18 @@ public class MapActivityActions implements DialogProvider {
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mapActivity.startActivity(intent);
} else if (standardId == R.string.context_menu_item_directions_to) {
targets.navigateToPoint(new LatLon(latitude, longitude), true, -1, "");
targets.navigateToPoint(new LatLon(latitude, longitude), true, -1, null);
enterRoutePlanningMode(null, null, false);
} else if (standardId == R.string.context_menu_item_directions_from) {
String name = mapActivity.getMapLayers().getContextMenuLayer().getSelectedObjectName();
enterRoutePlanningMode(new LatLon(latitude, longitude), name, false);
List<PointDescription> nms = mapActivity.getMapLayers().getContextMenuLayer().getSelectedObjectNames();
enterRoutePlanningMode(new LatLon(latitude, longitude), nms.isEmpty() ? null : nms.get(0), false);
} else if (standardId == R.string.context_menu_item_intermediate_point ||
standardId == R.string.context_menu_item_destination_point) {
boolean dest = standardId == R.string.context_menu_item_destination_point;
String selected = mapActivity.getMapLayers().getContextMenuLayer().getSelectedObjectName();
List<PointDescription> nms = mapActivity.getMapLayers().getContextMenuLayer().getSelectedObjectNames();
targets.navigateToPoint(new LatLon(latitude, longitude), true,
dest ? -1 : targets.getIntermediatePoints().size(), dest? "" : selected);
dest ? -1 : targets.getIntermediatePoints().size(), nms.size() == 0?null :
nms.get(0));
if(targets.getIntermediatePoints().size() > 0) {
openIntermediatePointsDialog();
}
@ -388,7 +390,7 @@ public class MapActivityActions implements DialogProvider {
}
}
public void enterRoutePlanningMode(final LatLon from, final String fromName, boolean useCurrentGPX) {
public void enterRoutePlanningMode(final LatLon from, final PointDescription fromName, boolean useCurrentGPX) {
List<SelectedGpxFile> selectedGPXFiles = mapActivity.getMyApplication().getSelectedGpxHelper()
.getSelectedGPXFiles();
final List<GPXFile> gpxFiles = new ArrayList<GPXFile>();
@ -446,7 +448,7 @@ public class MapActivityActions implements DialogProvider {
}
}
private void enterRoutePlanningModeImpl(GPXFile gpxFile, LatLon from, String fromName) {
private void enterRoutePlanningModeImpl(GPXFile gpxFile, LatLon from, PointDescription fromName) {
ApplicationMode mode = settings.DEFAULT_APPLICATION_MODE.get();
ApplicationMode selected = settings.APPLICATION_MODE.get();
@ -549,7 +551,8 @@ public class MapActivityActions implements DialogProvider {
switch (id) {
case DIALOG_ADD_FAVORITE:
FavoriteDialogs.prepareAddFavouriteDialog(mapActivity, dialog, args,
args.getDouble(KEY_LATITUDE), args.getDouble(KEY_LONGITUDE),args.getString(KEY_NAME));
args.getDouble(KEY_LATITUDE), args.getDouble(KEY_LONGITUDE),
new PointDescription(PointDescription.POINT_TYPE_FAVORITE, args.getString(KEY_NAME)));
break;
case DIALOG_ADD_WAYPOINT:
EditText v = (EditText) dialog.getWindow().findViewById(android.R.id.edit);

View file

@ -1,14 +1,8 @@
package net.osmand.plus.activities;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import java.util.StringTokenizer;
import android.content.pm.ActivityInfo;
import android.support.v4.view.MenuItemCompat;
import net.osmand.PlatformUtil;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
@ -20,10 +14,11 @@ import net.osmand.plus.helpers.ScreenOrientationHelper;
import net.osmand.util.MapUtils;
import android.app.Dialog;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.support.v4.view.MenuItemCompat;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
@ -50,7 +45,6 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
public static final String SEARCH_NORTHING = "NORTHING";
public static final String SEARCH_EASTING = "EASTING";
public static final String SEARCH_ZONE = "ZONE";
private static final int UTM_FORMAT = 3;
private static final String SELECTION = "SELECTION";
@ -62,12 +56,14 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
private View view;
private LatLon location;
private OsmandApplication app;
public View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.navigate_point, container, false);
setHasOptionsMenu(true);
location = null;
OsmandApplication app = (OsmandApplication) getActivity().getApplication();
app = (OsmandApplication) getActivity().getApplication();
Intent intent = getActivity().getIntent();
if(intent != null){
double lat = intent.getDoubleExtra(SEARCH_LAT, 0);
@ -82,9 +78,10 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
if (location == null) {
location = app.getSettings().getLastKnownMapLocation();
}
currentFormat = app.getSettings().COORDINATES_FORMAT.get();
initUI(location.getLatitude(), location.getLongitude());
if(savedInstanceState != null && savedInstanceState.containsKey(SEARCH_LAT) && savedInstanceState.containsKey(SEARCH_LON) &&
currentFormat != UTM_FORMAT) {
currentFormat != PointDescription.UTM_FORMAT) {
String lat = savedInstanceState.getString(SEARCH_LAT);
String lon = savedInstanceState.getString(SEARCH_LON);
if(lat != null && lon != null && lat.length() > 0 && lon.length() > 0) {
@ -223,13 +220,13 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
protected void showCurrentFormat(LatLon l) {
final EditText latEdit = ((EditText)view.findViewById(R.id.LatitudeEdit));
final EditText lonEdit = ((EditText)view.findViewById(R.id.LongitudeEdit));
boolean utm = currentFormat == UTM_FORMAT;
boolean utm = currentFormat == PointDescription.UTM_FORMAT;
view.findViewById(R.id.easting_row).setVisibility(utm ? View.VISIBLE : View.GONE);
view.findViewById(R.id.northing_row).setVisibility(utm ? View.VISIBLE : View.GONE);
view.findViewById(R.id.zone_row).setVisibility(utm ? View.VISIBLE : View.GONE);
view.findViewById(R.id.lat_row).setVisibility(!utm ? View.VISIBLE : View.GONE);
view.findViewById(R.id.lon_row).setVisibility(!utm ? View.VISIBLE : View.GONE);
if(currentFormat == UTM_FORMAT) {
if(currentFormat == PointDescription.UTM_FORMAT) {
final EditText northingEdit = ((EditText)view.findViewById(R.id.NorthingEdit));
final EditText eastingEdit = ((EditText)view.findViewById(R.id.EastingEdit));
final EditText zoneEdit = ((EditText)view.findViewById(R.id.ZoneEdit));
@ -238,14 +235,14 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
northingEdit.setText(((long)pnt.northing)+"");
eastingEdit.setText(((long)pnt.easting)+"");
} else {
latEdit.setText(convert(MapUtils.checkLatitude(l.getLatitude()), currentFormat));
lonEdit.setText(convert(MapUtils.checkLongitude(l.getLongitude()), currentFormat));
latEdit.setText(PointDescription. convert(MapUtils.checkLatitude(l.getLatitude()), currentFormat));
lonEdit.setText(PointDescription. convert(MapUtils.checkLongitude(l.getLongitude()), currentFormat));
}
}
protected LatLon parseLocation() {
LatLon loc ;
if(currentFormat == UTM_FORMAT) {
if(currentFormat == PointDescription.UTM_FORMAT) {
double northing = Double.parseDouble(((EditText)view.findViewById(R.id.NorthingEdit)).getText().toString());
double easting = Double.parseDouble(((EditText)view.findViewById(R.id.EastingEdit)).getText().toString());
String zone = ((EditText)view.findViewById(R.id.ZoneEdit)).getText().toString();
@ -255,15 +252,14 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
LatLonPoint ll = upoint.toLatLonPoint();
loc = new LatLon(ll.getLatitude(), ll.getLongitude());
} else {
double lat = convert(((EditText) view.findViewById(R.id.LatitudeEdit)).getText().toString());
double lon = convert(((EditText) view.findViewById(R.id.LongitudeEdit)).getText().toString());
double lat = PointDescription. convert(((EditText) view.findViewById(R.id.LatitudeEdit)).getText().toString());
double lon = PointDescription. convert(((EditText) view.findViewById(R.id.LongitudeEdit)).getText().toString());
loc = new LatLon(lat, lon);
}
return loc;
}
public void initUI(double latitude, double longitude){
currentFormat = Location.FORMAT_DEGREES;
showCurrentFormat(new LatLon(latitude, longitude));
final Spinner format = ((Spinner)view.findViewById(R.id.Format));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, new String[] {
@ -282,17 +278,18 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
int newFormat = currentFormat;
String itm = (String) format.getItemAtPosition(position);
if(getString(R.string.navigate_point_format_D).equals(itm)){
newFormat = Location.FORMAT_DEGREES;
newFormat = PointDescription.FORMAT_DEGREES;
} else if(getString(R.string.navigate_point_format_DM).equals(itm)){
newFormat = Location.FORMAT_MINUTES;
newFormat = PointDescription.FORMAT_MINUTES;
} else if(getString(R.string.navigate_point_format_DMS).equals(itm)){
newFormat = Location.FORMAT_SECONDS;
} else if (position == UTM_FORMAT) {
newFormat = UTM_FORMAT;
newFormat = PointDescription.FORMAT_SECONDS;
} else if (position == PointDescription.UTM_FORMAT) {
newFormat = PointDescription.UTM_FORMAT;
}
try {
LatLon loc = parseLocation();
currentFormat = newFormat;
app.getSettings().COORDINATES_FORMAT.set(currentFormat);
view.findViewById(R.id.ValidateTextView).setVisibility(View.INVISIBLE);
showCurrentFormat(loc);
} catch (RuntimeException e) {
@ -397,15 +394,15 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
Bundle b = new Bundle();
Dialog dlg = FavoriteDialogs.createAddFavouriteDialog(getActivity(), b);
dlg.show();
FavoriteDialogs.prepareAddFavouriteDialog(getActivity(), dlg, b, lat, lon, getString(R.string.point_on_map, lat, lon));
FavoriteDialogs.prepareAddFavouriteDialog(getActivity(), dlg, b, lat, lon, PointDescription.LOCATION_POINT);
} else if (mode == NAVIGATE_TO) {
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), lat, lon, getString(R.string.point_on_map, lat, lon));
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), lat, lon, PointDescription.LOCATION_POINT);
} else if (mode == ADD_WAYPOINT) {
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), lat, lon, getString(R.string.point_on_map, lat, lon));
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), lat, lon, PointDescription.LOCATION_POINT);
} else if (mode == SHOW_ON_MAP){
OsmandApplication app = (OsmandApplication) getActivity().getApplication();
app.getSettings().setMapLocationToShow(lat, lon, Math.max(12, app.getSettings().getLastKnownMapZoom()),
getString(R.string.point_on_map, lat, lon));
PointDescription.LOCATION_POINT);
MapActivity.launchMapActivityMoveToTop(getActivity());
}
@ -416,119 +413,4 @@ public class NavigatePointFragment extends Fragment implements SearchActivityChi
}
}
////////////////////////////////////////////////////////////////////////////
// THIS code is copied from Location.convert() in order to change locale
// and to fix bug in android implementation : doesn't convert if min = 59.23 or sec = 59.32 or deg=179.3
public static final int FORMAT_DEGREES = 0;
public static final int FORMAT_MINUTES = 1;
public static final int FORMAT_SECONDS = 2;
private static final char DELIM = ':';
/**
* Converts a String in one of the formats described by
* FORMAT_DEGREES, FORMAT_MINUTES, or FORMAT_SECONDS into a
* double.
*
* @throws NullPointerException if coordinate is null
* @throws IllegalArgumentException if the coordinate is not
* in one of the valid formats.
*/
public static double convert(String coordinate) {
coordinate = coordinate.replace(' ', ':').replace('#', ':').replace(',', '.');
if (coordinate == null) {
throw new NullPointerException("coordinate");
}
boolean negative = false;
if (coordinate.charAt(0) == '-') {
coordinate = coordinate.substring(1);
negative = true;
}
StringTokenizer st = new StringTokenizer(coordinate, ":");
int tokens = st.countTokens();
if (tokens < 1) {
throw new IllegalArgumentException("coordinate=" + coordinate);
}
try {
String degrees = st.nextToken();
double val;
if (tokens == 1) {
val = Double.parseDouble(degrees);
return negative ? -val : val;
}
String minutes = st.nextToken();
int deg = Integer.parseInt(degrees);
double min;
double sec = 0.0;
if (st.hasMoreTokens()) {
min = Integer.parseInt(minutes);
String seconds = st.nextToken();
sec = Double.parseDouble(seconds);
} else {
min = Double.parseDouble(minutes);
}
boolean isNegative180 = negative && (deg == 180) &&
(min == 0) && (sec == 0);
// deg must be in [0, 179] except for the case of -180 degrees
if ((deg < 0.0) || (deg > 180 && !isNegative180)) {
throw new IllegalArgumentException("coordinate=" + coordinate);
}
if (min < 0 || min > 60d) {
throw new IllegalArgumentException("coordinate=" +
coordinate);
}
if (sec < 0 || sec > 60d) {
throw new IllegalArgumentException("coordinate=" +
coordinate);
}
val = deg*3600.0 + min*60.0 + sec;
val /= 3600.0;
return negative ? -val : val;
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException("coordinate=" + coordinate);
}
}
public static String convert(double coordinate, int outputType) {
if (coordinate < -180.0 || coordinate > 180.0 || Double.isNaN(coordinate)) {
throw new IllegalArgumentException("coordinate=" + coordinate); //$NON-NLS-1$
}
if ((outputType != FORMAT_DEGREES) && (outputType != FORMAT_MINUTES) && (outputType != FORMAT_SECONDS)) {
throw new IllegalArgumentException("outputType=" + outputType); //$NON-NLS-1$
}
StringBuilder sb = new StringBuilder();
// Handle negative values
if (coordinate < 0) {
sb.append('-');
coordinate = -coordinate;
}
DecimalFormat df = new DecimalFormat("###.#####", new DecimalFormatSymbols(Locale.US)); //$NON-NLS-1$
if (outputType == FORMAT_MINUTES || outputType == FORMAT_SECONDS) {
int degrees = (int) Math.floor(coordinate);
sb.append(degrees);
sb.append(DELIM);
coordinate -= degrees;
coordinate *= 60.0;
if (outputType == FORMAT_SECONDS) {
int minutes = (int) Math.floor(coordinate);
sb.append(minutes);
sb.append(DELIM);
coordinate -= minutes;
coordinate *= 60.0;
}
}
sb.append(df.format(coordinate));
return sb.toString();
}
}

View file

@ -12,6 +12,7 @@ import java.util.List;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
import net.osmand.plus.FavouritesDbHelper;
@ -190,7 +191,7 @@ public class SelectedGPXFragment extends OsmandExpandableListFragment {
if (resId == R.string.show_gpx_route) {
OsmandSettings settings = app.getSettings();
settings.setMapLocationToShow(gpxDisplayItem.locationStart.lat, gpxDisplayItem.locationStart.lon,
settings.getLastKnownMapZoom(), Html.fromHtml(gpxDisplayItem.name).toString());
settings.getLastKnownMapZoom(), new PointDescription(PointDescription.POINT_TYPE_WPT, Html.fromHtml(gpxDisplayItem.name).toString()));
MapActivity.launchMapActivityMoveToTop(getMyActivity());
}
return true;
@ -609,7 +610,7 @@ public class SelectedGPXFragment extends OsmandExpandableListFragment {
child.group.getType() == GpxDisplayItemType.TRACK_ROUTE_POINTS) {
ContextMenuAdapter qa = new ContextMenuAdapter(v.getContext());
qa.setAnchor(v);
String name = app.getString(R.string.favorite) + ": " + child.name;
PointDescription name = new PointDescription(PointDescription.POINT_TYPE_FAVORITE, child.name);
LatLon location = new LatLon(child.locationStart.lat, child.locationStart.lon);
OsmandSettings settings = app.getSettings();
final PopupMenu optionsMenu = new PopupMenu(getActivity(), v);

View file

@ -16,6 +16,7 @@ import android.view.*;
import android.widget.*;
import net.osmand.IndexConstants;
import net.osmand.Location;
import net.osmand.data.PointDescription;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.OsmAndFormatter;
@ -125,7 +126,9 @@ public class ShowRouteInfoActivity extends OsmandListActivity {
MapRouteInfoControl.directionInfo = position - 1;
OsmandSettings settings = ((OsmandApplication) getApplication()).getSettings();
settings.setMapLocationToShow(loc.getLatitude(),loc.getLongitude(),
Math.max(13, settings.getLastKnownMapZoom()), null, item.getDescriptionRoutePart() + " " + getTimeDescription(item), null);
Math.max(13, settings.getLastKnownMapZoom()),
new PointDescription(PointDescription.POINT_TYPE_MARKER, item.getDescriptionRoutePart() + " " + getTimeDescription(item)),
false, null);
MapActivity.launchMapActivityMoveToTop(this);
}
}

View file

@ -15,6 +15,7 @@ import net.osmand.data.Amenity;
import net.osmand.data.City;
import net.osmand.data.LatLon;
import net.osmand.data.MapObject;
import net.osmand.data.PointDescription;
import net.osmand.data.Street;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
@ -165,19 +166,20 @@ public class GeoIntentActivity extends OsmandListActivity {
} else {
distanceLabel.setText(""); //$NON-NLS-1$
}
label.setText(getString(model));
label.setText(getString(model).getFullPlainName(getApplication(), 0, 0));
return row;
}
}
private String getString(MapObject o) {
private PointDescription getString(MapObject o) {
if (o instanceof Amenity) {
return OsmAndFormatter.getPoiSimpleFormat((Amenity) o, getMyApplication(), false);
return new PointDescription(PointDescription.POINT_TYPE_POI,
OsmAndFormatter.getPoiSimpleFormat((Amenity) o, getMyApplication(), false));
}
if (o instanceof Street) {
return getString(R.string.address) + " " + ((Street) o).getCity().getName() + " " + o.getName();
return new PointDescription(PointDescription.POINT_TYPE_ADDRESS, ((Street) o).getCity().getName() + " " + o.getName());
}
return getString(R.string.address) + " : " + o.toString();
return new PointDescription(PointDescription.POINT_TYPE_ADDRESS, o.toString());
}

View file

@ -11,6 +11,7 @@ import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
@ -290,18 +291,22 @@ public class SearchAddressFragment extends Fragment {
}
public static class AddressInformation {
String historyName = null;
String objectName = "";
String objectType = "";
int zoom = 14;
public String objectName ="";
public PointDescription getHistoryName() {
return new PointDescription(PointDescription.POINT_TYPE_ADDRESS, objectType, objectName);
}
public static AddressInformation build2StreetIntersection(Context ctx, OsmandSettings settings){
AddressInformation ai = new AddressInformation();
String postcode = settings.getLastSearchedPostcode();
String city = settings.getLastSearchedCityName();
String cityName = !Algorithms.isEmpty(postcode) ? postcode : city;
ai.objectName = settings.getLastSearchedStreet();
ai.historyName = MessageFormat.format(ctx != null ? ctx.getString(R.string.search_history_int_streets) : "", settings.getLastSearchedStreet(),
settings.getLastSearchedIntersectedStreet(), cityName);
ai.objectName = settings.getLastSearchedStreet() +" x " +
settings.getLastSearchedIntersectedStreet() + " " + cityName;
ai.objectType = ctx.getString(R.string.search_address_street_option);
ai.zoom = 17;
return ai;
}
@ -312,8 +317,8 @@ public class SearchAddressFragment extends Fragment {
String city = settings.getLastSearchedCityName();
String cityName = !Algorithms.isEmpty(postcode) ? postcode : city;
String street = settings.getLastSearchedStreet();
ai.objectName = street;
ai.historyName = MessageFormat.format(ctx != null ? ctx.getString(R.string.search_history_street) : "", street, cityName);
ai.objectName = cityName + ", " + street;
ai.objectType = ctx.getString(R.string.search_address_street);
ai.zoom = 16;
return ai;
}
@ -326,9 +331,8 @@ public class SearchAddressFragment extends Fragment {
String cityName = !Algorithms.isEmpty(postcode) ? postcode : city;
String street = settings.getLastSearchedStreet();
String building = settings.getLastSearchedBuilding();
ai.objectName = street + " " + building;
ai.historyName = MessageFormat.format(ctx != null ? ctx.getString(R.string.search_history_building) : "", building, street,
cityName);
ai.objectName = cityName+", "+ street + " " + building;
ai.objectType = ctx.getString(R.string.search_address_building);;
ai.zoom = 17;
return ai;
}
@ -336,8 +340,8 @@ public class SearchAddressFragment extends Fragment {
public static AddressInformation buildCity(Context ctx, OsmandSettings settings){
AddressInformation ai = new AddressInformation();
String city = settings.getLastSearchedCityName();
ai.historyName = MessageFormat.format(ctx != null ? ctx.getString(R.string.search_history_city) : "", city);
ai.objectName = city;
ai.objectType = ctx.getString(R.string.search_address_city);
ai.zoom = 14;
return ai;
}
@ -362,7 +366,8 @@ public class SearchAddressFragment extends Fragment {
Bundle b = new Bundle();
Dialog dlg = FavoriteDialogs.createAddFavouriteDialog(getActivity(), b);
dlg.show();
FavoriteDialogs.prepareAddFavouriteDialog(getActivity(), dlg, b, searchPoint.getLatitude(), searchPoint.getLongitude(), ai.objectName);
FavoriteDialogs.prepareAddFavouriteDialog(getActivity(), dlg, b, searchPoint.getLatitude(), searchPoint.getLongitude(),
ai.getHistoryName());
} else if(mode == SELECT_POINT ){
Intent intent = getActivity().getIntent();
intent.putExtra(SELECT_ADDRESS_POINT_INTENT_KEY, ai.objectName);
@ -372,11 +377,11 @@ public class SearchAddressFragment extends Fragment {
getActivity().finish();
} else {
if (mode == NAVIGATE_TO) {
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(), searchPoint.getLongitude(), ai.historyName);
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(), searchPoint.getLongitude(), ai.getHistoryName());
} else if (mode == ADD_WAYPOINT) {
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(), searchPoint.getLongitude(), ai.historyName);
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(), searchPoint.getLongitude(), ai.getHistoryName());
} else if (mode == SHOW_ON_MAP) {
osmandSettings.setMapLocationToShow(searchPoint.getLatitude(), searchPoint.getLongitude(), ai.zoom, ai.historyName);
osmandSettings.setMapLocationToShow(searchPoint.getLatitude(), searchPoint.getLongitude(), ai.zoom, ai.getHistoryName());
MapActivity.launchMapActivityMoveToTop(getActivity());
}
}

View file

@ -17,7 +17,11 @@ import android.view.MenuItem.OnMenuItemClickListener;
import net.osmand.PlatformUtil;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
<<<<<<< HEAD
import net.osmand.osm.io.NetworkUtils;
=======
import net.osmand.data.PointDescription;
>>>>>>> Update recents
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
@ -230,7 +234,7 @@ public class SearchAddressOnlineFragment extends Fragment implements SearchActiv
Place item = adapter.getItem(position);
final PopupMenu optionsMenu = new PopupMenu(getActivity(), view);
DirectionsDialogs.createDirectionsActionsPopUpMenu(optionsMenu, new LatLon(item.lat, item.lon), item,
getString(R.string.address) + " : " + item.displayName, Math.max(15, settings.getLastKnownMapZoom()),
new PointDescription(PointDescription.POINT_TYPE_ADDRESS, item.displayName), Math.max(15, settings.getLastKnownMapZoom()),
getActivity(), true);
optionsMenu.show();
}

View file

@ -8,7 +8,6 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.pm.ActivityInfo;
import android.os.*;
import android.support.v4.view.MenuItemCompat;
@ -22,6 +21,7 @@ import net.osmand.OsmAndCollator;
import net.osmand.PlatformUtil;
import net.osmand.data.LatLon;
import net.osmand.data.MapObject;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
@ -32,9 +32,8 @@ import net.osmand.plus.activities.OsmandListActivity;
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.dialogs.FavoriteDialogs;
import org.apache.commons.logging.Log;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Dialog;
@ -51,6 +50,7 @@ import android.widget.TextView.BufferType;
import android.widget.TextView.OnEditorActionListener;
@SuppressLint("NewApi")
public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity {
private EditText searchText;
@ -82,12 +82,16 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
protected void setActionBarSettings() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
getWindow().setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
separateMethod();
}
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
getSupportActionBar().setIcon(R.drawable.tab_search_address_icon);
}
private void separateMethod() {
getWindow().setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -585,16 +589,16 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
Dialog dlg = FavoriteDialogs.createAddFavouriteDialog(getActivity(), b);
dlg.show();
FavoriteDialogs.prepareAddFavouriteDialog(getActivity(), dlg, b, searchPoint.getLatitude(),
searchPoint.getLongitude(), ai.objectName);
searchPoint.getLongitude(), new PointDescription(PointDescription.POINT_TYPE_ADDRESS, ai.objectName));
} else if (mode == NAVIGATE_TO) {
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
searchPoint.getLongitude(), ai.historyName);
searchPoint.getLongitude(), ai.getHistoryName());
} else if (mode == ADD_WAYPOINT) {
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
searchPoint.getLongitude(), ai.historyName);
searchPoint.getLongitude(), ai.getHistoryName());
} else if (mode == SHOW_ON_MAP) {
settings.setMapLocationToShow(searchPoint.getLatitude(), searchPoint.getLongitude(), ai.zoom,
ai.historyName);
ai.getHistoryName());
MapActivity.launchMapActivityMoveToTop(getActivity());
}
}

View file

@ -1,34 +1,34 @@
package net.osmand.plus.activities.search;
import java.text.MessageFormat;
import java.util.List;
import android.support.v4.app.ListFragment;
import android.support.v7.widget.PopupMenu;
import android.view.*;
import net.osmand.data.LatLon;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.helpers.SearchHistoryHelper;
import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry;
import net.osmand.plus.activities.MapActivityActions;
import net.osmand.plus.activities.search.SearchActivity.SearchActivityChild;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.helpers.SearchHistoryHelper;
import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry;
import net.osmand.util.MapUtils;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.ListFragment;
import android.support.v7.widget.PopupMenu;
import android.text.Spannable;
import android.text.style.ForegroundColorSpan;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.ActionMenuView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.BufferType;
@ -94,6 +94,8 @@ public class SearchHistoryFragment extends ListFragment implements SearchActivit
if (location == null) {
location = ((OsmandApplication) activity.getApplication()).getSettings().getLastKnownMapLocation();
}
historyAdapter.clear();
historyAdapter.addAll(helper.getHistoryEntries());
locationUpdate(location);
clearButton.setVisibility(historyAdapter.isEmpty() ? View.GONE : View.VISIBLE);
@ -115,11 +117,11 @@ public class SearchHistoryFragment extends ListFragment implements SearchActivit
}
private void selectModel(final HistoryEntry model, View v) {
String name = model.getName();
PointDescription name = model.getName();
final PopupMenu optionsMenu = new PopupMenu(getActivity(), v);
OsmandSettings settings = ((OsmandApplication) getActivity().getApplication()).getSettings();
DirectionsDialogs.createDirectionsActionsPopUpMenu(optionsMenu, new LatLon(model.getLat(), model.getLon()),
model, name, settings.getLastKnownMapZoom(), getActivity(), false);
model, name, settings.getLastKnownMapZoom(), getActivity(), true);
optionsMenu.show();
}
@ -150,7 +152,8 @@ public class SearchHistoryFragment extends ListFragment implements SearchActivit
int dist = (int) (MapUtils.getDistance(location, model.getLat(), model.getLon()));
distance = OsmAndFormatter.getFormattedDistance(dist, (OsmandApplication) getActivity().getApplication()) + " ";
}
label.setText(distance + model.getName(), BufferType.SPANNABLE);
String rnk = MessageFormat.format(" {0,number,#.##E00} ", ((float)model.getRank(System.currentTimeMillis())));
label.setText(distance + rnk + model.getName().getName(), BufferType.SPANNABLE);
((Spannable) label.getText()).setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color_distance)), 0, distance.length(), 0);
icon.setOnClickListener(new View.OnClickListener() {
@Override

View file

@ -20,6 +20,7 @@ import net.osmand.access.AccessibleToast;
import net.osmand.access.NavigationInfo;
import net.osmand.data.Amenity;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiType;
import net.osmand.plus.OsmAndConstants;
@ -560,7 +561,7 @@ public class SearchPOIActivity extends OsmandListActivity implements OsmAndCompa
public void onItemClick(AdapterView<?> parent,final View view, int position, long id) {
final Amenity amenity = ((AmenityAdapter) getListAdapter()).getItem(position);
String poiSimpleFormat = OsmAndFormatter.getPoiSimpleFormat(amenity, getMyApplication(), settings.usingEnglishNames());
String name = poiSimpleFormat;
PointDescription name = new PointDescription(PointDescription.POINT_TYPE_POI, poiSimpleFormat);
int z = Math.max(16, settings.getLastKnownMapZoom());
final PopupMenu optionsMenu = new PopupMenu(this, view);
DirectionsDialogs.createDirectionsActionsPopUpMenu(optionsMenu, amenity.getLocation(), amenity, name, z, this, true);

View file

@ -7,6 +7,7 @@ import net.osmand.access.AccessibleAlertBuilder;
import net.osmand.access.AccessibleToast;
import net.osmand.data.DataTileManager;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ContextMenuAdapter;
@ -167,12 +168,12 @@ public class AudioNotesLayer extends OsmandMapLayer implements IContextMenuProvi
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if(o instanceof Recording){
if(((Recording)o).getName() == null) {
return view.getResources().getString(R.string.recording_default_name);
return new PointDescription(PointDescription.POINT_TYPE_NOTE, view.getResources().getString(R.string.recording_default_name));
}
return ((Recording)o).getName(); //$NON-NLS-1$
return new PointDescription(PointDescription.POINT_TYPE_NOTE, ((Recording)o).getName());
}
return null;
}

View file

@ -3,6 +3,7 @@ package net.osmand.plus.audionotes;
import java.util.ArrayList;
import java.util.List;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
@ -95,8 +96,9 @@ public class DashAudioVideoNotesFragment extends DashBaseFragment {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15, null,
recording.getName() != null ? recording.getName() : recording.getDescription(getActivity()),
getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15,
new PointDescription(PointDescription.POINT_TYPE_NOTE,
recording.getName() != null ? recording.getName() : recording.getDescription(getActivity())), true,
recording); //$NON-NLS-1$
MapActivity.launchMapActivityMoveToTop(getActivity());
}

View file

@ -19,7 +19,7 @@ import android.widget.ExpandableListView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
@ -27,7 +27,6 @@ import net.osmand.plus.activities.FavoritesActivity;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording;
import net.osmand.plus.dialogs.DirectionsDialogs;
import android.support.v4.app.ListFragment;
import java.util.ArrayList;
@ -55,7 +54,7 @@ public class NotesFragment extends ListFragment {
@Override
public void onResume() {
super.onResume();
items = new ArrayList<>(plugin.getAllRecordings());
items = new ArrayList<Recording>(plugin.getAllRecordings());
listAdapter = new NotesAdapter(items);
getListView().setAdapter(listAdapter);
}
@ -129,7 +128,8 @@ public class NotesFragment extends ListFragment {
}
private void showOnMap(Recording recording) {
getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15, null, recording.getName(),
getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15,
new PointDescription(PointDescription.POINT_TYPE_NOTE, recording.getName()), true,
recording); //$NON-NLS-1$
MapActivity.launchMapActivityMoveToTop(getActivity());
}

View file

@ -8,6 +8,7 @@ import java.util.List;
import net.osmand.Location;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.OsmAndAppCustomization;
import net.osmand.plus.OsmAndFormatter;
@ -16,20 +17,15 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.FavoriteImageDrawable;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.views.DirectionDrawable;
import net.osmand.util.MapUtils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
@ -152,7 +148,8 @@ public class DashFavoritesFragment extends DashLocationFragment implements Favou
view.findViewById(R.id.navigate_to).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), point.getLatitude(), point.getLongitude(), point.getName());
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), point.getLatitude(), point.getLongitude(),
new PointDescription(PointDescription.POINT_TYPE_FAVORITE, point.getName()));
}
});
label.setText(distance, TextView.BufferType.SPANNABLE);
@ -160,7 +157,8 @@ public class DashFavoritesFragment extends DashLocationFragment implements Favou
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getMyApplication().getSettings().setMapLocationToShow(point.getLatitude(), point.getLongitude(), 15, null, point.getName(),
getMyApplication().getSettings().setMapLocationToShow(point.getLatitude(), point.getLongitude(), 15,
new PointDescription(PointDescription.POINT_TYPE_FAVORITE, point.getName()), true,
point); //$NON-NLS-1$
MapActivity.launchMapActivityMoveToTop(getActivity());
}

View file

@ -1,6 +1,7 @@
package net.osmand.plus.dialogs;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.Item;
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
@ -24,7 +25,7 @@ import java.lang.reflect.Method;
public class DirectionsDialogs {
public static void directionsToDialogAndLaunchMap(final Activity act, final double lat, final double lon, final String name) {
public static void directionsToDialogAndLaunchMap(final Activity act, final double lat, final double lon, final PointDescription name) {
final OsmandApplication ctx = (OsmandApplication) act.getApplication();
final TargetPointsHelper targetPointsHelper = ctx.getTargetPointsHelper();
if (targetPointsHelper.getIntermediatePoints().size() > 0) {
@ -52,13 +53,13 @@ public class DirectionsDialogs {
}
}
public static void createDirectionsActionsPopUpMenu(final PopupMenu optionsMenu , final LatLon location, final Object obj, final String name,
public static void createDirectionsActionsPopUpMenu(final PopupMenu optionsMenu , final LatLon location, final Object obj, final PointDescription name,
final int z, final Activity activity, final boolean saveHistory) {
createDirectionActionsPopUpMenu(optionsMenu, location, obj, name, z, activity, saveHistory, true);
}
public static void createDirectionActionsPopUpMenu(final PopupMenu optionsMenu, final LatLon location, final Object obj, final String name,
public static void createDirectionActionsPopUpMenu(final PopupMenu optionsMenu, final LatLon location, final Object obj, final PointDescription name,
final int z, final Activity activity, final boolean saveHistory, boolean favorite) {
setupPopUpMenuIcon(optionsMenu);
final OsmandApplication app = ((OsmandApplication) activity.getApplication());
@ -100,7 +101,7 @@ public class DirectionsDialogs {
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
app.getSettings().setMapLocationToShow(location.getLatitude(), location.getLongitude(), z, saveHistory ? name : null, name,
app.getSettings().setMapLocationToShow(location.getLatitude(), location.getLongitude(), z, name, saveHistory,
obj); //$NON-NLS-1$
MapActivity.launchMapActivityMoveToTop(activity);
return true;
@ -124,7 +125,7 @@ public class DirectionsDialogs {
}
}
public static void addWaypointDialogAndLaunchMap(final Activity act, final double lat, final double lon, final String name) {
public static void addWaypointDialogAndLaunchMap(final Activity act, final double lat, final double lon, final PointDescription name) {
final OsmandApplication ctx = (OsmandApplication) act.getApplication();
final TargetPointsHelper targetPointsHelper = ctx.getTargetPointsHelper();
if (targetPointsHelper.getPointToNavigate() != null) {

View file

@ -11,6 +11,7 @@ import java.util.List;
import net.osmand.AndroidUtils;
import net.osmand.access.AccessibleToast;
import net.osmand.data.FavouritePoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.OsmAndFormatter;
@ -153,9 +154,10 @@ public class FavoriteDialogs {
return al;
}
public static void prepareAddFavouriteDialog(Activity activity, Dialog dialog, Bundle args, double lat, double lon, String name) {
public static void prepareAddFavouriteDialog(Activity activity, Dialog dialog, Bundle args, double lat, double lon, PointDescription desc) {
final Resources resources = activity.getResources();
if(name == null) {
String name = desc == null ? "" : desc.getName();
if(name.length() == 0) {
name = resources.getString(R.string.add_favorite_dialog_default_favourite_name);
}
OsmandApplication app = (OsmandApplication) activity.getApplication();

View file

@ -14,6 +14,7 @@ import net.osmand.CallbackWithObject;
import net.osmand.IndexConstants;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
@ -611,7 +612,7 @@ public class DistanceCalculatorPlugin extends OsmandPlugin {
@Override
public String getObjectDescription(Object o) {
if(o instanceof WptPt) {
String desc = getObjectName(o);
PointDescription desc = getObjectName(o);
List<String> l = new ArrayList<String>();
if(!Double.isNaN(((WptPt) o).ele)) {
l.add(app.getString(R.string.plugin_distance_point_ele) + " "+ OsmAndFormatter.getFormattedDistance((float) ((WptPt) o).ele, app));
@ -628,18 +629,18 @@ public class DistanceCalculatorPlugin extends OsmandPlugin {
java.text.DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(app);
l.add(app.getString(R.string.plugin_distance_point_time) + " "+ dateFormat.format(date) + " " + timeFormat.format(date));
}
return desc + " " + l;
return desc.getName() + " " + l;
}
return null;
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if(o instanceof WptPt) {
if(((WptPt) o).desc == null) {
return app.getString(R.string.plugin_distance_point);
return new PointDescription(PointDescription.POINT_TYPE_MARKER, app.getString(R.string.plugin_distance_point));
}
return ((WptPt) o).desc;
return new PointDescription(PointDescription.POINT_TYPE_MARKER, ((WptPt) o).desc );
}
return null;
}

View file

@ -156,7 +156,7 @@ public class DownloadIndexesThread {
DownloadEntry item = (DownloadEntry)o;
String name = item.item.getBasename();
long count = dbHelper.getCount(name, DatabaseHelper.DOWNLOAD_ENTRY) + 1;
DatabaseHelper.HistoryEntry entry = new DatabaseHelper.HistoryEntry(name,count);
DatabaseHelper.HistoryDownloadEntry entry = new DatabaseHelper.HistoryDownloadEntry(name,count);
if (count == 1) {
dbHelper.add(entry, DatabaseHelper.DOWNLOAD_ENTRY);
} else {
@ -171,7 +171,7 @@ public class DownloadIndexesThread {
IndexItem item = (IndexItem)o;
long count = dbHelper.getCount(item.getBasename(), DatabaseHelper.DOWNLOAD_ENTRY) + 1;
dbHelper.add(new DatabaseHelper.HistoryEntry(item.getBasename(), count), DatabaseHelper.DOWNLOAD_ENTRY);
dbHelper.add(new DatabaseHelper.HistoryDownloadEntry(item.getBasename(), count), DatabaseHelper.DOWNLOAD_ENTRY);
}
} else if (o instanceof String) {
String message = (String) o;

View file

@ -13,29 +13,24 @@ import java.util.List;
public class DatabaseHelper {
public static final int DOWNLOAD_ENTRY = 0;
public static final int FAVORITES_ENTRY = 1;
private static final String DB_NAME = "usage_history"; //$NON-NLS-1$
private static final int DB_VERSION = 1;
private static final String DOWNLOADS_TABLE_NAME = "downloads"; //$NON-NLS-1$
private static final String FAVORITES_TABLE_NAME = "favorites"; //$NON-NLS-1$
private static final String HISTORY_COL_NAME = "name"; //$NON-NLS-1$
private static final String HISTORY_COL_COUNT = "count"; //$NON-NLS-1$
private static final String DOWNLOAD_TABLE_CREATE = "CREATE TABLE " + DOWNLOADS_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$
HISTORY_COL_NAME + " TEXT, " + HISTORY_COL_COUNT + " long);"; //$NON-NLS-1$ //$NON-NLS-2$
private static final String FAVORITES_TABLE_CREATE = "CREATE TABLE " + FAVORITES_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$
HISTORY_COL_NAME + " TEXT, " + HISTORY_COL_COUNT + " long);"; //$NON-NLS-1$ //$NON-NLS-2$
private OsmandApplication app;
public static class HistoryEntry {
public static class HistoryDownloadEntry {
long count;
String name;
public HistoryEntry(String name, long count){
public HistoryDownloadEntry(String name, long count){
this.count = count;
this.name = name;
@ -74,21 +69,18 @@ public class DatabaseHelper {
public void onCreate(SQLiteAPI.SQLiteConnection db) {
db.execSQL(DOWNLOAD_TABLE_CREATE);
db.execSQL(FAVORITES_TABLE_CREATE);
}
public void onUpgrade(SQLiteAPI.SQLiteConnection db, int oldVersion, int newVersion) {
}
public boolean remove(HistoryEntry e, int type){
public boolean remove(HistoryDownloadEntry e, int type){
SQLiteAPI.SQLiteConnection db = openConnection(false);
if(db != null){
try {
switch (type){
case DOWNLOAD_ENTRY:
db.execSQL("DELETE FROM " + DOWNLOADS_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
case FAVORITES_ENTRY:
db.execSQL("DELETE FROM " + FAVORITES_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
} finally {
db.close();
@ -111,15 +103,13 @@ public class DatabaseHelper {
return false;
}
public boolean update(HistoryEntry e, int type){
public boolean update(HistoryDownloadEntry e, int type){
SQLiteAPI.SQLiteConnection db = openConnection(false);
if(db != null){
try {
switch (type) {
case DOWNLOAD_ENTRY:
db.execSQL("UPDATE " + DOWNLOADS_TABLE_NAME + " SET " + HISTORY_COL_COUNT + " = ? WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { e.getCount(), e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
case FAVORITES_ENTRY:
db.execSQL("UPDATE " + FAVORITES_TABLE_NAME + " SET " + HISTORY_COL_COUNT + " = ? WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { e.getCount(), e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
} finally {
db.close();
@ -129,15 +119,13 @@ public class DatabaseHelper {
return false;
}
public boolean add(HistoryEntry e, int type){
public boolean add(HistoryDownloadEntry e, int type){
SQLiteAPI.SQLiteConnection db = openConnection(false);
if(db != null){
try {
switch (type) {
case DOWNLOAD_ENTRY:
db.execSQL("INSERT INTO " + DOWNLOADS_TABLE_NAME + " VALUES (?, ?)", new Object[] { e.getName(), e.getCount()}); //$NON-NLS-1$ //$NON-NLS-2$
case FAVORITES_ENTRY:
db.execSQL("INSERT INTO " + FAVORITES_TABLE_NAME + " VALUES (?, ?)", new Object[] { e.getName(), e.getCount()}); //$NON-NLS-1$ //$NON-NLS-2$
}
} finally {
db.close();
@ -159,11 +147,6 @@ public class DatabaseHelper {
"SELECT " + HISTORY_COL_COUNT + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
DOWNLOADS_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + "='" + name + "'", null); //$NON-NLS-1$//$NON-NLS-2$
break;
case FAVORITES_ENTRY:
query = db.rawQuery(
"SELECT " + HISTORY_COL_COUNT + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
FAVORITES_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + "='" + name + "'", null); //$NON-NLS-1$//$NON-NLS-2$
break;
default:
query = null;
break;
@ -182,8 +165,8 @@ public class DatabaseHelper {
return count;
}
public List<HistoryEntry> getEntries(int type){
List<HistoryEntry> entries = new ArrayList<HistoryEntry>();
public List<HistoryDownloadEntry> getEntries(int type){
List<HistoryDownloadEntry> entries = new ArrayList<HistoryDownloadEntry>();
SQLiteAPI.SQLiteConnection db = openConnection(true);
if(db != null){
try {
@ -194,11 +177,6 @@ public class DatabaseHelper {
"SELECT " + HISTORY_COL_NAME + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
DOWNLOADS_TABLE_NAME + " ORDER BY " + HISTORY_COL_COUNT + " DESC", null); //$NON-NLS-1$//$NON-NLS-2$
break;
case FAVORITES_ENTRY:
query = db.rawQuery(
"SELECT " + HISTORY_COL_NAME + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
FAVORITES_TABLE_NAME + " ORDER BY " + HISTORY_COL_COUNT + " DESC", null); //$NON-NLS-1$//$NON-NLS-2$
break;
default:
query = null; //$NON-NLS-1$//$NON-NLS-2$
break;
@ -206,7 +184,7 @@ public class DatabaseHelper {
if (query != null) {
if (query.moveToFirst()) {
do {
HistoryEntry e = new HistoryEntry(
HistoryDownloadEntry e = new HistoryDownloadEntry(
query.getString(0), query.getInt(1));
entries.add(e);
} while (query.moveToNext());

View file

@ -1,134 +1,269 @@
package net.osmand.plus.helpers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
import net.osmand.util.Algorithms;
public class SearchHistoryHelper {
private static final int HISTORY_LIMIT = 50;
private static final int HISTORY_LIMIT = 1500;
private OsmandApplication context;
private List<HistoryEntry> loadedEntries = null;
private Map<PointDescription, HistoryEntry> mp = new HashMap<PointDescription, SearchHistoryHelper.HistoryEntry>();
public SearchHistoryHelper(OsmandApplication context) {
this.context = context;
}
private static SearchHistoryHelper instance = null;
public static SearchHistoryHelper getInstance(OsmandApplication context){
return new SearchHistoryHelper(context);
if(instance == null) {
instance = new SearchHistoryHelper(context);
}
return instance;
}
private static final int[] DEF_INTERVALS_MIN = new int[] {
5, 60, 60 * 24, 5 * 60 * 24, 10 * 60 * 24, 30 * 60 * 24
};
private static Comparator<HistoryEntry> historyEntryComparator = new Comparator<HistoryEntry>() {
@Override
public int compare(HistoryEntry lhs, HistoryEntry rhs) {
long time = System.currentTimeMillis();
double l = lhs.getRank(time);
double r = rhs.getRank(time);
return -Double.compare(l, r);
}
};
public static class HistoryEntry {
double lat;
double lon;
String name;
PointDescription name;
private long lastAccessedTime;
private int[] intervals = new int[0];
private double[] intervalValues = new double[0];
public HistoryEntry(double lat, double lon, String name){
public HistoryEntry(double lat, double lon, PointDescription name){
this.lat = lat;
this.lon = lon;
this.name = name;
}
public String getName() {
private double rankFunction(double cf, double timeDiff) {
if(timeDiff <= 0) {
return 0;
}
return cf / timeDiff;
}
public double getRank(long time) {
double baseTimeDiff = ((time - lastAccessedTime) / 1000) + 1;
double timeDiff = 0;
double vl = 1;
double rnk = rankFunction(vl, baseTimeDiff + timeDiff);
for (int k = 0; k < intervals.length; k++) {
double ntimeDiff = intervals[k] * 60 * 1000;
double nvl = intervalValues[k];
if(ntimeDiff < timeDiff || nvl <= vl){
continue;
}
rnk += rankFunction(nvl - vl, baseTimeDiff + (ntimeDiff - timeDiff) / 2 + timeDiff);
vl = nvl - vl;
timeDiff = ntimeDiff;
}
return rnk;
}
public PointDescription getName() {
return name;
}
public String getSerializedName() {
return PointDescription.serializeToString(name);
}
public double getLat() {
return lat;
}
public double getLon() {
return lon;
}
public void markAsAccessed(long time) {
int[] nintervals = new int[DEF_INTERVALS_MIN.length];
double[] nintervalValues = new double[DEF_INTERVALS_MIN.length];
for(int k = 0; k < nintervals.length; k++) {
nintervals[k] = DEF_INTERVALS_MIN[k];
nintervalValues[k] = getUsageLastTime(time, 0, 0, nintervals[k]) + 1;
}
intervals = nintervals;
intervalValues = nintervalValues;
this.lastAccessedTime = time;
}
public double getUsageLastTime(long time, int days, int hours, int minutes) {
long mins = (minutes + (hours + 24 * days) * 60);
long timeInPast = time - mins * 60 * 1000;
if (this.lastAccessedTime <= timeInPast) {
return 0;
}
double res = 0;
for (int k = 0; k < intervals.length; k++) {
long intPast = intervals[k] * 60 * 1000;
if (intPast > 0) {
double r;
if (lastAccessedTime - timeInPast >= intPast) {
r = intervalValues[k];
} else {
r = intervalValues[k] * ((double) lastAccessedTime - timeInPast) / ((double) intPast);
}
res = Math.max(res, r);
}
}
return res;
}
public void setFrequency(String intervalsString, String values) {
if(!Algorithms.isEmpty(intervalsString) && !Algorithms.isEmpty(values)) {
markAsAccessed(this.lastAccessedTime);
return;
}
String[] ints = intervalsString.split(",");
String[] vsl = values.split(",");
intervals = new int[ints.length];
intervalValues = new double[ints.length];
try {
for(int i = 0; i < ints.length && i < vsl.length; i++) {
intervals[i] = Integer.parseInt(ints[i]);
intervalValues[i] = Double.parseDouble(vsl[i]);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
public long getLastAccessTime() {
return lastAccessedTime;
}
public String getIntervalsValues() {
StringBuilder s = new StringBuilder();
for(int i = 0; i < intervalValues.length; i++) {
if(i > 0) {
s.append(",");
}
s.append(intervalValues[i]);
}
return s.toString();
}
public String getIntervals() {
StringBuilder s = new StringBuilder();
for(int i = 0; i < intervals.length; i++) {
if(i > 0) {
s.append(",");
}
s.append(intervals[i]);
}
return s.toString();
}
public void setLastAccessTime(long time) {
this.lastAccessedTime = time;
}
}
public List<HistoryEntry> getHistoryEntries() {
if(loadedEntries == null){
checkLoadedEntries();
}
return loadedEntries;
return new ArrayList<SearchHistoryHelper.HistoryEntry>(loadedEntries);
}
private HistoryItemDBHelper checkLoadedEntries(){
private HistoryItemDBHelper checkLoadedEntries() {
HistoryItemDBHelper helper = new HistoryItemDBHelper();
if(loadedEntries == null){
if (loadedEntries == null) {
loadedEntries = helper.getEntries();
Collections.sort(loadedEntries, historyEntryComparator);
for(HistoryEntry he : loadedEntries) {
mp.put(he.getName(), he);
}
}
return helper;
}
public void remove(HistoryEntry model) {
HistoryItemDBHelper helper = checkLoadedEntries();
if(helper.remove(model)){
if (helper.remove(model)) {
loadedEntries.remove(model);
mp.remove(model.getName());
}
}
public void removeAll() {
HistoryItemDBHelper helper = checkLoadedEntries();
if(helper.removeAll()){
if (helper.removeAll()) {
loadedEntries.clear();
mp.clear();
}
}
public void selectEntry(HistoryEntry model) {
public void addNewItemToHistory(HistoryEntry model) {
HistoryItemDBHelper helper = checkLoadedEntries();
int i = loadedEntries.indexOf(model);
updateModelAt(model, helper, i);
if(mp.containsKey(model.getName())) {
model = mp.get(model.getName());
model.markAsAccessed(System.currentTimeMillis());
helper.update(model);
} else {
loadedEntries.add(model);
mp.put(model.getName(), model);
model.markAsAccessed(System.currentTimeMillis());
helper.add(model);
}
private void updateModelAt(HistoryEntry model, HistoryItemDBHelper helper, int i) {
if(i == -1){
if(helper.add(model)){
loadedEntries.add(0, model);
Collections.sort(loadedEntries, historyEntryComparator);
if(loadedEntries.size() > HISTORY_LIMIT){
if(helper.remove(loadedEntries.get(loadedEntries.size() - 1))){
loadedEntries.remove(loadedEntries.size() - 1);
}
}
}
} else {
if(helper.update(model)){
loadedEntries.remove(i);
loadedEntries.add(0, model);
}
}
}
public HistoryEntry addNewItemToHistory(double lat, double lon, String description){
HistoryItemDBHelper helper = checkLoadedEntries();
int i = 0;
HistoryEntry model = new HistoryEntry(lat, lon, description);
for(HistoryEntry e : loadedEntries){
if(description.equals(e.getName())){
break;
}
i++;
}
if(i == loadedEntries.size()){
i = -1;
}
if (i != 0) {
updateModelAt(model, helper, i);
}
return model;
}
private class HistoryItemDBHelper {
private static final String DB_NAME = "search_history"; //$NON-NLS-1$
private static final int DB_VERSION = 1;
private static final String HISTORY_TABLE_NAME = "history"; //$NON-NLS-1$
private static final int DB_VERSION = 2;
private static final String HISTORY_TABLE_NAME = "history_recents"; //$NON-NLS-1$
private static final String HISTORY_COL_NAME = "name"; //$NON-NLS-1$
private static final String HISTORY_COL_TIME = "time"; //$NON-NLS-1$
private static final String HISTORY_COL_TYPE = "type"; //$NON-NLS-1$
private static final String HISTORY_COL_FREQ_INTERVALS = "freq_intervals"; //$NON-NLS-1$
private static final String HISTORY_COL_FREQ_VALUES = "freq_values"; //$NON-NLS-1$
private static final String HISTORY_COL_LAT = "latitude"; //$NON-NLS-1$
private static final String HISTORY_COL_LON = "longitude"; //$NON-NLS-1$
private static final String HISTORY_TABLE_CREATE = "CREATE TABLE " + HISTORY_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$
HISTORY_COL_NAME + " TEXT, " + HISTORY_COL_TIME + " long, " + HISTORY_COL_TYPE + " TEXT, " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private static final String HISTORY_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " + HISTORY_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$
HISTORY_COL_NAME + " TEXT, " +
HISTORY_COL_TIME + " long, " +
HISTORY_COL_FREQ_INTERVALS + " TEXT, " +
HISTORY_COL_FREQ_VALUES + " TEXT, " +
HISTORY_COL_LAT + " double, " +HISTORY_COL_LON + " double);"; //$NON-NLS-1$ //$NON-NLS-2$
@ -158,13 +293,19 @@ public class SearchHistoryHelper {
}
public void onUpgrade(SQLiteConnection db, int oldVersion, int newVersion) {
if(newVersion == 2) {
db.execSQL(HISTORY_TABLE_CREATE);
for(HistoryEntry he : getLegacyEntries(db)) {
insert(he, db);
}
}
}
public boolean remove(HistoryEntry e){
SQLiteConnection db = openConnection(false);
if(db != null){
try {
db.execSQL("DELETE FROM " + HISTORY_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
removeQuery(e.getSerializedName(), db);
} finally {
db.close();
}
@ -173,6 +314,11 @@ public class SearchHistoryHelper {
return false;
}
private void removeQuery(String name, SQLiteConnection db) {
db.execSQL("DELETE FROM " + HISTORY_TABLE_NAME + " WHERE " + HISTORY_COL_NAME + " = ?",
new Object[] { name }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public boolean removeAll(){
SQLiteConnection db = openConnection(false);
if(db != null){
@ -191,7 +337,9 @@ public class SearchHistoryHelper {
if(db != null){
try {
db.execSQL(
"UPDATE " + HISTORY_TABLE_NAME + " SET time = ? WHERE " + HISTORY_COL_NAME + " = ?", new Object[] { System.currentTimeMillis(), e.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"UPDATE " + HISTORY_TABLE_NAME + " SET time = ? and freq_intervals = ? and freq_values = ? WHERE " + HISTORY_COL_NAME + " = ?",
new Object[] { e.getLastAccessTime(), e.getIntervals(), e.getIntervalsValues(),
e.getSerializedName() }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} finally {
db.close();
}
@ -204,8 +352,7 @@ public class SearchHistoryHelper {
SQLiteConnection db = openConnection(false);
if(db != null){
try {
db.execSQL(
"INSERT INTO " + HISTORY_TABLE_NAME + " VALUES (?, ?, ?, ?, ?)", new Object[] { e.getName(), System.currentTimeMillis(), null, e.getLat(), e.getLon() }); //$NON-NLS-1$ //$NON-NLS-2$
insert(e, db);
} finally {
db.close();
}
@ -214,18 +361,79 @@ public class SearchHistoryHelper {
return false;
}
private void insert(HistoryEntry e, SQLiteConnection db) {
db.execSQL(
"INSERT INTO " + HISTORY_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?)",
new Object[] { e.getSerializedName(), e.getLastAccessTime(),
e.getIntervals(), e.getIntervalsValues(), e.getLat(), e.getLon() }); //$NON-NLS-1$ //$NON-NLS-2$
}
public List<HistoryEntry> getLegacyEntries(SQLiteConnection db){
List<HistoryEntry> entries = new ArrayList<HistoryEntry>();
if (db != null) {
// LEGACY QUERY !!
SQLiteCursor query = db.rawQuery(
"SELECT name, latitude, longitude, time FROM history ORDER BY time DESC", null); //$NON-NLS-1$//$NON-NLS-2$
if (query.moveToFirst()) {
do {
String name = query.getString(0);
String type = PointDescription.POINT_TYPE_MARKER;
// make it proper name with type
if (name.contains(context.getString(R.string.favorite))) {
type = PointDescription.POINT_TYPE_FAVORITE;
} else if (name.contains(context.getString(R.string.search_address_building))) {
type = PointDescription.POINT_TYPE_ADDRESS;
} else if (name.contains(context.getString(R.string.search_address_city))) {
type = PointDescription.POINT_TYPE_ADDRESS;
} else if (name.contains(context.getString(R.string.search_address_street))) {
type = PointDescription.POINT_TYPE_ADDRESS;
} else if (name.contains(context.getString(R.string.search_address_street_option))) {
type = PointDescription.POINT_TYPE_ADDRESS;
} else if (name.contains(context.getString(R.string.poi))) {
type = PointDescription.POINT_TYPE_POI;
}
if (name.contains(":")) {
name = name.substring(name.indexOf(':') + 1);
}
HistoryEntry e = new HistoryEntry(query.getDouble(1), query.getDouble(2), new PointDescription(
type, name));
e.markAsAccessed(query.getLong(3));
entries.add(e);
} while (query.moveToNext());
}
query.close();
}
return entries;
}
public List<HistoryEntry> getEntries(){
List<HistoryEntry> entries = new ArrayList<HistoryEntry>();
SQLiteConnection db = openConnection(true);
if(db != null){
try {
SQLiteCursor query = db.rawQuery(
"SELECT " + HISTORY_COL_NAME + ", " + HISTORY_COL_LAT + "," + HISTORY_COL_LON + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
HISTORY_TABLE_NAME + " ORDER BY " + HISTORY_COL_TIME + " DESC", null); //$NON-NLS-1$//$NON-NLS-2$
"SELECT " + HISTORY_COL_NAME + ", " + HISTORY_COL_LAT + "," + HISTORY_COL_LON +", " +
HISTORY_COL_TIME + ", " + HISTORY_COL_FREQ_INTERVALS + ", " + HISTORY_COL_FREQ_VALUES +
" FROM " + HISTORY_TABLE_NAME , null); //$NON-NLS-1$//$NON-NLS-2$
Map<String, HistoryEntry> st = new TreeMap<String, HistoryEntry>();
if (query.moveToFirst()) {
do {
HistoryEntry e = new HistoryEntry(query.getDouble(1), query.getDouble(2), query.getString(0));
String name = query.getString(0);
HistoryEntry prev = st.get(name);
HistoryEntry e = new HistoryEntry(query.getDouble(1), query.getDouble(2),
PointDescription.deserializeFromString(name));
long time = query.getLong(3);
e.setLastAccessTime(time);
e.setFrequency(query.getString(4), query.getString(5));
if(prev != null) {
entries.remove(prev);
}
if(prev != null || !Algorithms.objectEquals(name, e.getSerializedName())) {
removeQuery(name, db);
insert(e, db);
}
entries.add(e);
st.put(name, e);
} while (query.moveToNext());
}
query.close();
@ -238,6 +446,11 @@ public class SearchHistoryHelper {
}
public void addNewItemToHistory(double latitude, double longitude, PointDescription pointDescription) {
addNewItemToHistory(new HistoryEntry(latitude, longitude, pointDescription));
}

View file

@ -6,6 +6,7 @@ import java.util.List;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;
@ -164,7 +165,7 @@ public class WaypointDialogHelper implements OsmAndLocationListener {
} else {
textDist.setText("");
}
text.setText(point.getName(app));
text.setText(PointDescription.getSimpleName(point, app));
// ((Spannable) text.getText()).setSpan(
// new ForegroundColorSpan(ctx.getResources().getColor(R.color.color_distance)), 0, distance.length() - 1,
// 0);
@ -687,7 +688,7 @@ public class WaypointDialogHelper implements OsmAndLocationListener {
ctx.getMapLayers()
.getContextMenuLayer()
.setLocation(new LatLon(locationPoint.getLatitude(), locationPoint.getLongitude()),
locationPoint.getName(ctx));
PointDescription.getSimpleName(locationPoint, ctx));
dialog.dismiss();
}
}

View file

@ -16,6 +16,7 @@ import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
import net.osmand.binary.RouteDataObject;
import net.osmand.data.Amenity;
import net.osmand.data.PointDescription;
import net.osmand.data.Amenity.AmenityRoutePoint;
import net.osmand.data.LocationPoint;
import net.osmand.osm.PoiType;
@ -783,9 +784,10 @@ public class WaypointHelper {
return a.getLocation().getLongitude();
}
@Override
public String getName(Context ctx) {
return OsmAndFormatter.getPoiSimpleFormat(a, ctx, app.getSettings().usingEnglishNames());
public PointDescription getPointDescription(Context ctx) {
return new PointDescription(PointDescription.POINT_TYPE_POI, OsmAndFormatter.getPoiSimpleFormat(a, ctx, app.getSettings().usingEnglishNames()));
}
@Override

View file

@ -14,6 +14,7 @@ import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.osm.io.NetworkUtils;
@ -523,9 +524,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if(o instanceof OpenStreetNote){
return ((OpenStreetNote)o).getCommentDescription();
return new PointDescription(PointDescription.POINT_TYPE_OSM_NOTE, ((OpenStreetNote)o).getCommentDescription());
}
return null;
}

View file

@ -4,6 +4,7 @@ import java.util.List;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.NavigationService;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.TargetPointsHelper;
@ -92,7 +93,7 @@ public class OsMoControlDevice implements OsMoReactor {
robj.put("version", Version.getAppVersion(app));
TargetPointsHelper tg = app.getTargetPointsHelper();
if(tg.getPointToNavigate() != null) {
addPoint(robj, "target_", tg.getPointToNavigate().point, tg.getPointToNavigate().name);
addPoint(robj, "target_", tg.getPointToNavigate().point, tg.getPointToNavigate().getOriginalPointDescription());
}
List<TargetPoint> intermediatePoints = tg.getIntermediatePoints();
if (intermediatePoints.size() > 0) {
@ -101,7 +102,7 @@ public class OsMoControlDevice implements OsMoReactor {
for (int i = 0; i < intermediatePoints.size(); i++) {
JSONObject js = new JSONObject();
ar.put(js);
addPoint(js, "", intermediatePoints.get(i).point, intermediatePoints.get(i).name);
addPoint(js, "", intermediatePoints.get(i).point, intermediatePoints.get(i).getOriginalPointDescription());
}
}
service.pushCommand("OSMAND_INFO|"+robj.toString());
@ -118,11 +119,11 @@ public class OsMoControlDevice implements OsMoReactor {
return false;
}
private void addPoint(JSONObject robj, String prefix, LatLon pointToNavigate, String pointNavigateDescription) throws JSONException {
private void addPoint(JSONObject robj, String prefix, LatLon pointToNavigate, PointDescription pointNavigateDescription) throws JSONException {
robj.put(prefix+"lat", pointToNavigate.getLatitude());
robj.put(prefix+"lon", pointToNavigate.getLongitude());
if(pointNavigateDescription != null) {
robj.put(prefix+"name", pointNavigateDescription);
robj.put(prefix+"name", pointNavigateDescription.getName());
}
}

View file

@ -9,6 +9,7 @@ import android.support.v4.view.MenuItemCompat;
import android.support.v7.view.ActionMode;
import android.view.*;
import gnu.trove.list.array.TIntArrayList;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
@ -17,10 +18,12 @@ import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.osmand.AndroidUtils;
import net.osmand.Location;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.NavigationService;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndFormatter;
@ -528,7 +531,8 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements
MapActivity.getSingleMapViewTrackingUtilities().setMapLinkedToLocation(false);
if (location != null) {
app.getSettings().setMapLocationToShow(location.getLatitude(), location.getLongitude(), app.getSettings().getLastKnownMapZoom(),
null, device.getVisibleName(), device);
new PointDescription(PointDescription.POINT_TYPE_MARKER, device.getVisibleName()), false,
device);
}
OsMoPositionLayer.setFollowTrackerId(device);
MapActivity.launchMapActivityMoveToTop(OsMoGroupsActivity.this);

View file

@ -9,6 +9,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import net.osmand.Location;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.R;
@ -246,11 +247,12 @@ public class OsMoPositionLayer extends OsmandMapLayer implements ContextMenuLaye
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
// if(o instanceof OsMoDevice) {
// return map.getString(R.string.osmo_user_name) + " " + ((OsMoDevice) o).getVisibleName();
// }
return getObjectDescription(o);
String desc = getObjectDescription(o);
return desc == null ? null : new PointDescription(PointDescription.POINT_TYPE_MARKER, desc);
}
public void refresh() {

View file

@ -5,6 +5,7 @@ import java.util.List;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
@ -177,8 +178,9 @@ public class ParkingPositionLayer extends OsmandMapLayer implements ContextMenuL
}
@Override
public String getObjectName(Object o) {
return view.getContext().getString(R.string.osmand_parking_position_name);
public PointDescription getObjectName(Object o) {
return new PointDescription(PointDescription.POINT_TYPE_MARKER,
view.getContext().getString(R.string.osmand_parking_position_name), "");
}
public void refresh() {

View file

@ -5,6 +5,7 @@ import android.graphics.PointF;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.GPXUtilities;
@ -45,7 +46,7 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
return null;
}

View file

@ -1,21 +1,25 @@
package net.osmand.plus.routepointsnavigation;
import java.io.File;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import net.osmand.data.LatLon;
import net.osmand.plus.*;
import net.osmand.data.PointDescription;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.Route;
import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.views.MapInfoLayer;
@ -24,10 +28,18 @@ import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.mapwidgets.TextInfoWidget;
import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Paint;
import android.os.AsyncTask;
import android.text.format.DateFormat;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
/**
* Created by Barsik on 10.06.2014.
@ -261,7 +273,7 @@ public class RoutePointsPlugin extends OsmandPlugin {
public UUID id;
public String getName() {
return wpt.name;
return wpt.name == null ? "" : wpt.name;
}
public WptPt getWpt() {
@ -401,7 +413,8 @@ public class RoutePointsPlugin extends OsmandPlugin {
RoutePoint first = currentPoints.get(0);
if (!first.isVisited()) {
app.getTargetPointsHelper().navigateToPoint(first.getPoint(), true, -1, first.getName());
app.getTargetPointsHelper().navigateToPoint(first.getPoint(), true, -1,
new PointDescription(PointDescription.POINT_TYPE_WPT, first.getName()));
first.isNextNavigate = true;
return true;
} else {
@ -445,7 +458,7 @@ public class RoutePointsPlugin extends OsmandPlugin {
if (rt != null) {
TargetPointsHelper targetPointsHelper = app.getTargetPointsHelper();
TargetPoint pointToNavigate = targetPointsHelper.getPointToNavigate();
String locName = pointToNavigate == null ? null : pointToNavigate.name;
String locName = pointToNavigate == null ? null : pointToNavigate.getOnlyName();
for (int i = 0; i < rt.points.size(); i++) {
WptPt wptPt = rt.points.get(i);
RoutePoint rtp = new RoutePoint(wptPt);
@ -473,7 +486,8 @@ public class RoutePointsPlugin extends OsmandPlugin {
}
rp.isNextNavigate = true;
sortPoints();
app.getTargetPointsHelper().navigateToPoint(rp.getPoint(), true, -1, rp.getName());
app.getTargetPointsHelper().navigateToPoint(rp.getPoint(), true, -1,
new PointDescription(PointDescription.POINT_TYPE_WPT, rp.getName()));
}
public void updateCurrentTargetPoint() {
@ -481,11 +495,8 @@ public class RoutePointsPlugin extends OsmandPlugin {
TargetPoint tp = targetPointsHelper.getPointToNavigate();
for (int i = 0; i < currentPoints.size(); i++) {
RoutePoint rtp = currentPoints.get(i);
rtp.isNextNavigate = rtp.visitedTime == 0 && tp != null && !Algorithms.isEmpty(tp.name) && tp.name.equals(rtp.getName());
if (rtp.isNextNavigate) {
tp.name = "";
}
rtp.isNextNavigate = rtp.visitedTime == 0 && tp != null && !Algorithms.isEmpty(tp.getOnlyName()) &&
tp.getOnlyName().equals(rtp.getName());
}
sortPoints();
}

View file

@ -4,6 +4,7 @@ import android.content.Context;
import net.osmand.Location;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.R;
public class AlarmInfo implements LocationPoint {
@ -148,8 +149,8 @@ public class AlarmInfo implements LocationPoint {
}
@Override
public String getName(Context ctx) {
return type.getVisualName(ctx);
public PointDescription getPointDescription(Context ctx) {
return new PointDescription(PointDescription.POINT_TYPE_ALARM, type.getVisualName(ctx));
}
@Override

View file

@ -1049,7 +1049,7 @@ public class RouteProvider {
pt.lat = ps.get(k).getLatitude();
pt.lon = ps.get(k).getLongitude();
if(k < ps.size()) {
pt.name = ps.get(k).name +"";
pt.name = ps.get(k).getOnlyName() +"";
if(k == ps.size() - 1) {
String target = ctx.getString(R.string.destination_point, "" );
if(pt.name.startsWith(target)) {

View file

@ -439,7 +439,7 @@ public class RoutingHelper {
int toDel = targets.getIntermediatePoints().size() - route.getIntermediatePointsToPass();
int currentIndex = toDel - 1;
String name = currentIndex < 0 || currentIndex >= ns.size() ||
ns.get(currentIndex ) == null ? "" : ns.get(currentIndex ).name;
ns.get(currentIndex ) == null ? "" : ns.get(currentIndex ).getOnlyName();
if(isFollowingMode) {
voiceRouter.arrivedIntermediatePoint(name);
}
@ -459,7 +459,7 @@ public class RoutingHelper {
showMessage(app.getString(R.string.arrived_at_destination));
TargetPointsHelper targets = app.getTargetPointsHelper();
TargetPoint tp = targets.getPointToNavigate();
String description = tp == null ? "" : tp.name;
String description = tp == null ? "" : tp.getOnlyName();
if(isFollowingMode) {
voiceRouter.arrivedDestinationPoint(description);
}

View file

@ -2,12 +2,12 @@ package net.osmand.plus.routing;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import net.osmand.Location;
import net.osmand.binary.RouteDataObject;
import net.osmand.data.PointDescription;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
@ -22,11 +22,8 @@ import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import alice.tuprolog.Struct;
import alice.tuprolog.Term;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Handler;
import android.os.Looper;
public class VoiceRouter {
@ -322,7 +319,7 @@ public class VoiceRouter {
} else {
text += ", ";
}
text += point.getPoint().getName(router.getApplication());
text += PointDescription.getSimpleName(point.getPoint(), router.getApplication());
}
return text;
}

View file

@ -711,7 +711,7 @@ public class SherpafyCustomization extends OsmAndAppCustomization {
WptPt lp = gpx.getLastPoint();
if (lp != null) {
TargetPointsHelper targetPointsHelper = app.getTargetPointsHelper();
targetPointsHelper.navigateToPoint(new LatLon(lp.lat, lp.lon), true, -1, lp.name);
targetPointsHelper.navigateToPoint(new LatLon(lp.lat, lp.lon), true, -1, lp.getPointDescription(a));
app.getSettings().navigateDialog(true);
}
}

View file

@ -4,9 +4,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.graphics.PointF;
import android.support.v4.app.FragmentActivity;
import net.osmand.data.LocationPoint;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.OsmandApplication;
@ -14,7 +11,8 @@ import net.osmand.plus.R;
import net.osmand.plus.sherpafy.TourInformation.StageFavorite;
import net.osmand.plus.sherpafy.TourInformation.StageInformation;
import net.osmand.plus.views.FavoritesLayer;
import net.osmand.plus.views.OsmandMapTileView;
import android.graphics.PointF;
import android.support.v4.app.FragmentActivity;
public class StageFavoritesLayer extends FavoritesLayer {

View file

@ -14,6 +14,7 @@ import java.util.WeakHashMap;
import net.osmand.PlatformUtil;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.util.Algorithms;
@ -301,8 +302,9 @@ public class TourInformation {
return location.getLongitude();
}
public String getName(Context ctx) {
return name;
@Override
public PointDescription getPointDescription(Context ctx) {
return new PointDescription(PointDescription.POINT_TYPE_WPT, name);
}
public String getName() {

View file

@ -9,11 +9,11 @@ import java.util.concurrent.ConcurrentHashMap;
import net.osmand.CallbackWithObject;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import alice.util.Sleep;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
@ -41,7 +41,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
public String getObjectDescription(Object o);
public String getObjectName(Object o);
public PointDescription getObjectName(Object o);
}
@ -196,9 +196,8 @@ public class ContextMenuLayer extends OsmandMapLayer {
public void setLocation(LatLon loc, String description){
latLon = loc;
if(latLon != null){
if(description == null || description.length() == 0){
description = view.getContext().getString(R.string.point_on_map,
latLon.getLatitude(), latLon.getLongitude());
if(description == null){
description = PointDescription.LOCATION_POINT.getFullPlainName(activity, loc.getLatitude(), loc.getLongitude());
}
textView.setText(Html.fromHtml(description.replace("\n", "<br/>")));
} else {
@ -309,6 +308,19 @@ public class ContextMenuLayer extends OsmandMapLayer {
return getSelectedObjectInfo(true);
}
public List<PointDescription> getSelectedObjectNames() {
List<PointDescription> list = new ArrayList<PointDescription>();
Iterator<Entry<Object, IContextMenuProvider>> it = selectedObjects.entrySet().iterator();
while (it.hasNext()) {
Entry<Object, IContextMenuProvider> e = it.next();
PointDescription onames = e.getValue().getObjectName(e.getKey());
if (onames != null) {
list.add(onames);
}
}
return list;
}
public String getSelectedObjectDescription(){
return getSelectedObjectInfo(false);
}
@ -327,7 +339,10 @@ public class ContextMenuLayer extends OsmandMapLayer {
description.append("\n" + (i + 1) + ". ");
}
if(name) {
description.append(e.getValue().getObjectName(e.getKey()));
PointDescription nm = e.getValue().getObjectName(e.getKey());
LatLon ll = e.getValue().getObjectLocation(e.getKey());
description.append(nm.getFullPlainName(activity, ll == null? 0 : ll.getLatitude(), ll == null? 0
: ll.getLongitude()));
} else {
description.append(e.getValue().getObjectDescription(e.getKey()));
}

View file

@ -7,6 +7,7 @@ import net.osmand.access.AccessibleToast;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ContextMenuAdapter;
@ -150,9 +151,9 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
int i = 0;
for(LocationPoint fav : favs) {
if (i++ > 0) {
res.append("\n\n");
res.append("\n");
}
res.append(getObjName() + " : " + fav.getName(view.getContext())); //$NON-NLS-1$
res.append(PointDescription.getSimpleName(fav, view.getContext())); //$NON-NLS-1$
}
AccessibleToast.makeText(view.getContext(), res.toString(), Toast.LENGTH_LONG).show();
return true;
@ -167,7 +168,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
if(o!= null && fcl.isInstance(o)) {
String desciption = ((FavouritePoint)o).getDescription() != null ?
" " + ((FavouritePoint)o).getDescription() : "";
return getObjName() + ": " + ((LocationPoint)o).getName(view.getContext())
return PointDescription.getSimpleName((LocationPoint) o, view.getContext()) + " "
+ desciption; //$NON-NLS-1$
}
return null;
@ -176,9 +177,9 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if(o instanceof LocationPoint){
return ((LocationPoint)o).getName(view.getContext()); //$NON-NLS-1$
return ((LocationPoint) o).getPointDescription(view.getContext()); //$NON-NLS-1$
}
return null;
}
@ -238,7 +239,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
@Override
public String getText(LocationPoint o) {
return o.getName(view.getContext());
return PointDescription.getSimpleName(o, view.getContext());
}

View file

@ -8,6 +8,7 @@ import java.util.List;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.GPXUtilities.GPXFile;
@ -403,9 +404,9 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if(o instanceof WptPt){
return ((WptPt)o).name; //$NON-NLS-1$
return new PointDescription(PointDescription.POINT_TYPE_WPT, ((WptPt)o).name); //$NON-NLS-1$
}
return null;
}

View file

@ -9,6 +9,7 @@ import net.osmand.ResultMatcher;
import net.osmand.access.AccessibleToast;
import net.osmand.data.Amenity;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.osm.MapPoiTypes;
@ -320,9 +321,9 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if (o instanceof Amenity) {
return ((Amenity) o).getName(); //$NON-NLS-1$
return new PointDescription(PointDescription.POINT_TYPE_POI, ((Amenity) o).getName());
}
return null;
}

View file

@ -3,6 +3,7 @@ package net.osmand.plus.views;
import java.util.List;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadPoint;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ContextMenuAdapter;
@ -201,15 +202,16 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
@Override
public String getObjectDescription(Object o) {
if (o instanceof TargetPoint) {
return ((TargetPoint) o).getVisibleName(view.getContext());
return ((TargetPoint) o).getPointDescription(view.getContext()).getFullPlainName(view.getContext(),
((TargetPoint) o).getLatitude(), ((TargetPoint) o).getLongitude());
}
return null;
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if (o instanceof TargetPoint) {
return ((TargetPoint) o).getVisibleName(view.getContext());
return ((TargetPoint) o).getPointDescription(view.getContext());
}
return null;
}

View file

@ -5,6 +5,7 @@ import java.util.List;
import net.osmand.access.AccessibleToast;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.data.TransportStop;
@ -190,9 +191,10 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa
}
@Override
public String getObjectName(Object o) {
public PointDescription getObjectName(Object o) {
if(o instanceof TransportStop){
return ((TransportStop)o).getName();
return new PointDescription(PointDescription.POINT_TYPE_POI, view.getContext().getString(R.string.transport_Stop),
((TransportStop)o).getName());
}
return null;
}

View file

@ -3,20 +3,19 @@ package net.osmand.plus.views.controls;
import java.util.ArrayList;
import java.util.List;
import android.view.*;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.development.OsmandDevelopmentPlugin;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.activities.FavoritesListFragment.FavouritesAdapter;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.ShowRouteInfoActivity;
import net.osmand.plus.development.OsmandDevelopmentPlugin;
import net.osmand.plus.routing.RouteDirectionInfo;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelper.IRouteInformationListener;
@ -33,6 +32,10 @@ import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
@ -216,11 +219,10 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FavouritePoint fp = favouritesAdapter.getItem(position);
LatLon point = new LatLon(fp.getLatitude(), fp.getLongitude());
String name = mapActivity.getString(R.string.favorite) + ": " + fp.getName();
if(target) {
getTargets().navigateToPoint(point, true, -1, name);
getTargets().navigateToPoint(point, true, -1, fp.getPointDescription());
} else {
getTargets().setStartPoint(point, true, name);
getTargets().setStartPoint(point, true, fp.getPointDescription());
}
favoritesDialog.dismiss();
//Next 2 lines ensure Dialog is shown in the right correct position after a selection been made
@ -360,7 +362,7 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
return via;
}
for (int i = 0; i < points.size() ; i++) {
via += "\n - " + getRoutePointDescription(points.get(i).point, points.get(i).name);
via += "\n - " + getRoutePointDescription(points.get(i).point, points.get(i).getOnlyName());
}
return mapActivity.getString(R.string.route_via) + via;
}
@ -387,7 +389,7 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
TargetPoint start = getTargets().getPointToStart();
if (start != null) {
String oname = start.name != null && start.name.length() > 0 ? start.name
String oname = start.getOnlyName().length() > 0 ? start.getOnlyName()
: (mapActivity.getString(R.string.route_descr_map_location) + " " + getRoutePointDescription(start.getLatitude(), start.getLongitude()));
fromActions.add(oname);
}
@ -416,7 +418,7 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
if (targets.getPointToNavigate() != null) {
toActions.add(mapActivity.getString(R.string.route_descr_destination) + " "
+ getRoutePointDescription(targets.getPointToNavigate().point,
targets.getPointToNavigate().name));
targets.getPointToNavigate().getOnlyName()));
} else {
toSpinner.setPromptId(R.string.route_descr_select_destination);
toActions.add(mapActivity.getString(R.string.route_descr_select_destination));