Add reorder intermediate points
This commit is contained in:
parent
7df983425a
commit
b3f445dd2a
21 changed files with 516 additions and 286 deletions
BIN
OsmAnd/res/drawable-hdpi/av_download.png
Normal file
BIN
OsmAnd/res/drawable-hdpi/av_download.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
OsmAnd/res/drawable-hdpi/av_upload.png
Normal file
BIN
OsmAnd/res/drawable-hdpi/av_upload.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
OsmAnd/res/drawable-mdpi/av_download.png
Normal file
BIN
OsmAnd/res/drawable-mdpi/av_download.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
OsmAnd/res/drawable-mdpi/av_upload.png
Normal file
BIN
OsmAnd/res/drawable-mdpi/av_upload.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
25
OsmAnd/res/layout/change_order_item.xml
Normal file
25
OsmAnd/res/layout/change_order_item.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/LinearLayout1"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginTop="2dip"
|
||||||
|
android:layout_marginLeft="5dip"
|
||||||
|
android:layout_marginRight="5dip"
|
||||||
|
android:weightSum="1" android:background="@color/color_white">
|
||||||
|
<ImageButton android:src="@drawable/av_download" android:id="@+id/down" android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:text="@string/layer_poi"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:textColor="@color/color_black" android:layout_weight="1"/>
|
||||||
|
<ImageButton android:src="@drawable/av_upload" android:id="@+id/up"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -7,7 +7,7 @@
|
||||||
android:layout_marginTop="2dip"
|
android:layout_marginTop="2dip"
|
||||||
android:layout_marginLeft="5dip"
|
android:layout_marginLeft="5dip"
|
||||||
android:layout_marginRight="5dip"
|
android:layout_marginRight="5dip"
|
||||||
android:weightSum="1" >
|
android:weightSum="1" android:background="@color/color_white">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
|
|
|
@ -236,8 +236,9 @@ public class NavigationInfo {
|
||||||
|
|
||||||
public synchronized void setLocation(Location location) {
|
public synchronized void setLocation(Location location) {
|
||||||
currentLocation = location;
|
currentLocation = location;
|
||||||
if (autoAnnounce && ((OsmandApplication)(context.getApplicationContext())).accessibilityEnabled()) {
|
OsmandApplication app = ((OsmandApplication)(context.getApplicationContext()));
|
||||||
final LatLon point = settings.getPointToNavigate();
|
if (autoAnnounce && app.accessibilityEnabled()) {
|
||||||
|
final LatLon point = app.getTargetPointsHelper().getPointToNavigate();
|
||||||
if (point != null) {
|
if (point != null) {
|
||||||
if ((currentLocation != null) && currentLocation.hasBearing()) {
|
if ((currentLocation != null) && currentLocation.hasBearing()) {
|
||||||
final long now = SystemClock.uptimeMillis();
|
final long now = SystemClock.uptimeMillis();
|
||||||
|
|
|
@ -76,6 +76,7 @@ public class OsmandApplication extends Application {
|
||||||
private GPXFile gpxFileToDisplay;
|
private GPXFile gpxFileToDisplay;
|
||||||
private SavingTrackHelper savingTrackHelper;
|
private SavingTrackHelper savingTrackHelper;
|
||||||
private LiveMonitoringHelper liveMonitoringHelper;
|
private LiveMonitoringHelper liveMonitoringHelper;
|
||||||
|
private TargetPointsHelper targetPointsHelper;
|
||||||
|
|
||||||
private boolean applicationInitializing = false;
|
private boolean applicationInitializing = false;
|
||||||
private Locale prefferedLocale = null;
|
private Locale prefferedLocale = null;
|
||||||
|
@ -96,6 +97,7 @@ public class OsmandApplication extends Application {
|
||||||
liveMonitoringHelper = new LiveMonitoringHelper(this);
|
liveMonitoringHelper = new LiveMonitoringHelper(this);
|
||||||
uiHandler = new Handler();
|
uiHandler = new Handler();
|
||||||
rendererRegistry = new RendererRegistry();
|
rendererRegistry = new RendererRegistry();
|
||||||
|
targetPointsHelper = new TargetPointsHelper(osmandSettings, routingHelper);
|
||||||
checkPrefferedLocale();
|
checkPrefferedLocale();
|
||||||
startApplication();
|
startApplication();
|
||||||
if (LOG.isDebugEnabled()) {
|
if (LOG.isDebugEnabled()) {
|
||||||
|
@ -575,6 +577,10 @@ public class OsmandApplication extends Application {
|
||||||
return ((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE)).isEnabled();
|
return ((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE)).isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TargetPointsHelper getTargetPointsHelper() {
|
||||||
|
return targetPointsHelper;
|
||||||
|
}
|
||||||
|
|
||||||
public ClientContext getClientContext() {
|
public ClientContext getClientContext() {
|
||||||
if (clientContext == null) {
|
if (clientContext == null) {
|
||||||
clientContext = new AndroidClientContext(this);
|
clientContext = new AndroidClientContext(this);
|
||||||
|
|
|
@ -1076,7 +1076,7 @@ public class OsmandSettings {
|
||||||
return saveIntermediatePoints(ps,ds);
|
return saveIntermediatePoints(ps,ds);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean saveIntermediatePoints(List<LatLon> ps, List<String> ds) {
|
public boolean saveIntermediatePoints(List<LatLon> ps, List<String> ds) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for(int i=0; i<ps.size(); i++) {
|
for(int i=0; i<ps.size(); i++) {
|
||||||
if(i > 0){
|
if(i > 0){
|
||||||
|
|
192
OsmAnd/src/net/osmand/plus/TargetPointsHelper.java
Normal file
192
OsmAnd/src/net/osmand/plus/TargetPointsHelper.java
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
package net.osmand.plus;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.AlertDialog.Builder;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import net.osmand.access.AccessibleToast;
|
||||||
|
import net.osmand.osm.LatLon;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
|
|
||||||
|
public class TargetPointsHelper {
|
||||||
|
|
||||||
|
private List<LatLon> intermediatePoints = new ArrayList<LatLon>();
|
||||||
|
private List<String> intermediatePointNames = new ArrayList<String>();
|
||||||
|
private LatLon pointToNavigate = null;
|
||||||
|
private OsmandSettings settings;
|
||||||
|
private RoutingHelper routingHelper;
|
||||||
|
|
||||||
|
public TargetPointsHelper(OsmandSettings settings, RoutingHelper routingHelper){
|
||||||
|
this.settings = settings;
|
||||||
|
this.routingHelper = routingHelper;
|
||||||
|
readFromSettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readFromSettings(OsmandSettings settings) {
|
||||||
|
pointToNavigate = settings.getPointToNavigate();
|
||||||
|
intermediatePoints.clear();
|
||||||
|
intermediatePointNames.clear();
|
||||||
|
intermediatePoints.addAll(settings.getIntermediatePoints());
|
||||||
|
intermediatePointNames.addAll(settings.getIntermediatePointDescriptions(intermediatePoints.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public LatLon getPointToNavigate() {
|
||||||
|
return pointToNavigate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPointNavigateDescription(){
|
||||||
|
return settings.getPointNavigateDescription();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getIntermediatePointNames() {
|
||||||
|
return intermediatePointNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<LatLon> getIntermediatePoints() {
|
||||||
|
return intermediatePoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<LatLon> getIntermediatePointsWithTarget() {
|
||||||
|
List<LatLon> res = new ArrayList<LatLon>();
|
||||||
|
res.addAll(intermediatePoints);
|
||||||
|
if(pointToNavigate != null) {
|
||||||
|
res.add(pointToNavigate);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getIntermediatePointNamesWithTarget() {
|
||||||
|
List<String> res = new ArrayList<String>();
|
||||||
|
res.addAll(intermediatePointNames);
|
||||||
|
if(pointToNavigate != null) {
|
||||||
|
res.add(getPointNavigateDescription());
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LatLon getFirstIntermediatePoint(){
|
||||||
|
if(intermediatePoints.size() > 0) {
|
||||||
|
return intermediatePoints.get(0);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void removeWayPoint(MapActivity map, boolean updateRoute, int index){
|
||||||
|
if(index < 0){
|
||||||
|
settings.clearPointToNavigate();
|
||||||
|
pointToNavigate = null;
|
||||||
|
if(intermediatePoints.size() > 0) {
|
||||||
|
settings.deleteIntermediatePoint(intermediatePoints.size() - 1);
|
||||||
|
pointToNavigate = intermediatePoints.remove(intermediatePoints.size() - 1);
|
||||||
|
settings.setPointToNavigate(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(),
|
||||||
|
intermediatePointNames.remove(intermediatePoints.size() - 1));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
settings.deleteIntermediatePoint(index);
|
||||||
|
intermediatePoints.remove(index);
|
||||||
|
intermediatePointNames.remove(index);
|
||||||
|
}
|
||||||
|
updateRouteAndReferesh(map, updateRoute);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateRouteAndReferesh(MapActivity map, boolean updateRoute) {
|
||||||
|
if(updateRoute && ( routingHelper.isRouteBeingCalculated() || routingHelper.isRouteCalculated() ||
|
||||||
|
routingHelper.isFollowingMode())) {
|
||||||
|
Location lastKnownLocation = map == null ? routingHelper.getLastProjection() : map.getLastKnownLocation();
|
||||||
|
routingHelper.setFinalAndCurrentLocation(settings.getPointToNavigate(),
|
||||||
|
settings.getIntermediatePoints(), lastKnownLocation, routingHelper.getCurrentGPXRoute());
|
||||||
|
}
|
||||||
|
if(map != null) {
|
||||||
|
map.getMapView().refreshMap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void clearPointToNavigate(MapActivity map, boolean updateRoute) {
|
||||||
|
settings.clearPointToNavigate();
|
||||||
|
settings.clearIntermediatePoints();
|
||||||
|
readFromSettings(settings);
|
||||||
|
updateRouteAndReferesh(map, updateRoute);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reorderAllTargetPoints(MapActivity map, List<LatLon> point,
|
||||||
|
List<String> names, boolean updateRoute){
|
||||||
|
settings.clearPointToNavigate();
|
||||||
|
if (point.size() > 0) {
|
||||||
|
settings.saveIntermediatePoints(point.subList(0, point.size() - 1), names.subList(0, point.size() - 1));
|
||||||
|
LatLon p = point.get(point.size() - 1);
|
||||||
|
String nm = names.get(point.size() - 1);
|
||||||
|
settings.setPointToNavigate(p.getLatitude(), p.getLongitude(), nm);
|
||||||
|
} else {
|
||||||
|
settings.clearIntermediatePoints();
|
||||||
|
}
|
||||||
|
readFromSettings(settings);
|
||||||
|
updateRouteAndReferesh(map, updateRoute);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void navigateToPoint(MapActivity map, LatLon point, boolean updateRoute, int intermediate){
|
||||||
|
if(point != null){
|
||||||
|
if(intermediate < 0) {
|
||||||
|
settings.setPointToNavigate(point.getLatitude(), point.getLongitude(), null);
|
||||||
|
} else {
|
||||||
|
settings.insertIntermediatePoint(point.getLatitude(), point.getLongitude(), null,
|
||||||
|
intermediate, false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
settings.clearPointToNavigate();
|
||||||
|
settings.clearIntermediatePoints();
|
||||||
|
}
|
||||||
|
readFromSettings(settings);
|
||||||
|
updateRouteAndReferesh(map, updateRoute);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkPointToNavigate(Context ctx ){
|
||||||
|
if(pointToNavigate == null){
|
||||||
|
AccessibleToast.makeText(ctx, R.string.mark_final_location_first, Toast.LENGTH_LONG).show();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void navigatePointDialogAndLaunchMap(final Context ctx, final double lat, final double lon, final String name){
|
||||||
|
if(pointToNavigate != null) {
|
||||||
|
Builder builder = new AlertDialog.Builder(ctx);
|
||||||
|
builder.setTitle(R.string.new_destination_point_dialog);
|
||||||
|
builder.setItems(new String[] {
|
||||||
|
ctx.getString(R.string.replace_destination_point),
|
||||||
|
ctx.getString(R.string.add_as_first_destination_point),
|
||||||
|
ctx.getString(R.string.add_as_last_destination_point)
|
||||||
|
}, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
if(which == 0) {
|
||||||
|
settings.setPointToNavigate(lat, lon, true, name);
|
||||||
|
} else if(which == 2) {
|
||||||
|
int sz = intermediatePoints.size();
|
||||||
|
LatLon pt = pointToNavigate;
|
||||||
|
settings.insertIntermediatePoint(pt.getLatitude(), pt.getLongitude(),
|
||||||
|
settings.getPointNavigateDescription(), sz, true);
|
||||||
|
settings.setPointToNavigate(lat, lon, true, name);
|
||||||
|
} else {
|
||||||
|
settings.insertIntermediatePoint(lat, lon, name, 0, true);
|
||||||
|
}
|
||||||
|
readFromSettings(settings);
|
||||||
|
MapActivity.launchMapActivityMoveToTop(ctx);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.show();
|
||||||
|
} else {
|
||||||
|
settings.setPointToNavigate(lat, lon, true, name);
|
||||||
|
MapActivity.launchMapActivityMoveToTop(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,189 @@
|
||||||
|
package net.osmand.plus.activities;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.osmand.OsmAndFormatter;
|
||||||
|
import net.osmand.access.AccessibleAlertBuilder;
|
||||||
|
import net.osmand.osm.LatLon;
|
||||||
|
import net.osmand.osm.MapUtils;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
|
import net.osmand.plus.views.AnimateDraggingMapThread;
|
||||||
|
import android.app.AlertDialog.Builder;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.AdapterView.OnItemClickListener;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class IntermediatePointsDialog {
|
||||||
|
|
||||||
|
|
||||||
|
public static void openIntermediatePointsDialog(MapActivity mapActivity, OsmandApplication app){
|
||||||
|
openIntermediatePointsDialog(mapActivity, app, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void openIntermediatePointsDialog(final MapActivity mapActivity,
|
||||||
|
final OsmandApplication app, final boolean changeOrder){
|
||||||
|
TargetPointsHelper targets = app.getTargetPointsHelper();
|
||||||
|
final List<LatLon> intermediates = targets.getIntermediatePointsWithTarget();
|
||||||
|
final List<String> names = targets.getIntermediatePointNamesWithTarget();
|
||||||
|
final boolean[] checkedIntermediates = new boolean[intermediates.size()];
|
||||||
|
final ArrayAdapter<LatLon> listadapter = new ArrayAdapter<LatLon>(app,
|
||||||
|
changeOrder? R.layout.change_order_item : R.layout.layers_list_activity_item, R.id.title,
|
||||||
|
intermediates) {
|
||||||
|
@Override
|
||||||
|
public View getView(final int position, View convertView, ViewGroup parent) {
|
||||||
|
|
||||||
|
// User super class to create the View
|
||||||
|
View v = super.getView(position, convertView, parent);
|
||||||
|
TextView tv = (TextView) v.findViewById(R.id.title);
|
||||||
|
String nm = (position + 1) + ". ";
|
||||||
|
String distString = "";
|
||||||
|
if(mapActivity != null) {
|
||||||
|
double lat = mapActivity.getMapView().getLatitude();
|
||||||
|
double lon = mapActivity.getMapView().getLongitude();
|
||||||
|
double meters = MapUtils.getDistance(intermediates.get(position), lat, lon);
|
||||||
|
distString = OsmAndFormatter.getFormattedDistance((float) meters, mapActivity);
|
||||||
|
}
|
||||||
|
|
||||||
|
nm += app.getString(R.string.target_point, distString);
|
||||||
|
String descr = names.get(position);
|
||||||
|
if(descr != null && descr.trim().length() > 0) {
|
||||||
|
nm += "\n" + descr;
|
||||||
|
}
|
||||||
|
tv.setText(nm);
|
||||||
|
checkedIntermediates[position] = true;
|
||||||
|
if (changeOrder) {
|
||||||
|
((ImageButton) v.findViewById(R.id.up)).setOnClickListener(new View.OnClickListener(){
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if(position > 0) {
|
||||||
|
LatLon old = intermediates.remove(position - 1);
|
||||||
|
String oldN = names.remove(position - 1);
|
||||||
|
names.add(position, oldN);
|
||||||
|
intermediates.add(position, old);
|
||||||
|
notifyDataSetInvalidated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
((ImageButton) v.findViewById(R.id.down)).setOnClickListener(new View.OnClickListener(){
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if(position < intermediates.size() - 1) {
|
||||||
|
LatLon old = intermediates.remove(position + 1);
|
||||||
|
String oldN = names.remove(position + 1);
|
||||||
|
names.add(position, oldN);
|
||||||
|
intermediates.add(position, old);
|
||||||
|
notifyDataSetInvalidated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (position == intermediates.size() - 1) {
|
||||||
|
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.list_view_set_destination, 0, 0, 0);
|
||||||
|
final CheckBox ch = ((CheckBox) v.findViewById(R.id.check_item));
|
||||||
|
ch.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
// list_view_set_intermediate
|
||||||
|
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.list_view_set_intermediate, 0, 0, 0);
|
||||||
|
final CheckBox ch = ((CheckBox) v.findViewById(R.id.check_item));
|
||||||
|
ch.setVisibility(View.VISIBLE);
|
||||||
|
ch.setChecked(true);
|
||||||
|
ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
|
checkedIntermediates[position] = isChecked;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ListView lv = new ListView(app);
|
||||||
|
lv.setAdapter(listadapter);
|
||||||
|
lv.setBackgroundColor(Color.WHITE);
|
||||||
|
lv.setOnItemClickListener(new OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (mapActivity != null) {
|
||||||
|
// AnimateDraggingMapThread thread = mapActivity.getMapView().getAnimatedDraggingThread();
|
||||||
|
LatLon pointToNavigate = intermediates.get(position);
|
||||||
|
float fZoom = mapActivity.getMapView().getFloatZoom() < 15 ? 15 : mapActivity.getMapView().getFloatZoom();
|
||||||
|
// thread.startMoving(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), fZoom, true);
|
||||||
|
mapActivity.getMapView().setZoom(fZoom);
|
||||||
|
mapActivity.getMapView().setLatLon(pointToNavigate.getLatitude(), pointToNavigate.getLongitude());
|
||||||
|
listadapter.notifyDataSetInvalidated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Builder builder = new AccessibleAlertBuilder(app);
|
||||||
|
builder.setView(lv);
|
||||||
|
builder.setInverseBackgroundForced(true);
|
||||||
|
builder.setPositiveButton(R.string.default_buttons_ok, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
if(changeOrder) {
|
||||||
|
commitChangePointsOrder(app, mapActivity, intermediates, names);
|
||||||
|
} else {
|
||||||
|
commitPointsRemoval(app, mapActivity, checkedIntermediates);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!changeOrder) {
|
||||||
|
builder.setNeutralButton("Change order", new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
openIntermediatePointsDialog(mapActivity, app, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void commitPointsRemoval(OsmandApplication app, final MapActivity mapActivity, final boolean[] checkedIntermediates) {
|
||||||
|
int cnt = 0;
|
||||||
|
for (int i = checkedIntermediates.length - 1; i >= 0; i--) {
|
||||||
|
if (!checkedIntermediates[i]) {
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cnt > 0) {
|
||||||
|
for (int i = checkedIntermediates.length - 1; i >= 0; i--) {
|
||||||
|
if (!checkedIntermediates[i]) {
|
||||||
|
cnt--;
|
||||||
|
app.getTargetPointsHelper().removeWayPoint(mapActivity, cnt == 0, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(mapActivity != null) {
|
||||||
|
mapActivity.getMapLayers().getContextMenuLayer().setLocation(null, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void commitChangePointsOrder(OsmandApplication app, final MapActivity mapActivity, List<LatLon> target, List<String> names) {
|
||||||
|
TargetPointsHelper targets = app.getTargetPointsHelper();
|
||||||
|
List<LatLon> cur = targets.getIntermediatePointsWithTarget();
|
||||||
|
boolean eq = true;
|
||||||
|
for(int j = 0; j < cur.size() && j < target.size() ; j++) {
|
||||||
|
if(cur.get(j) != target.get(j)) {
|
||||||
|
eq = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!eq) {
|
||||||
|
targets.reorderAllTargetPoints(mapActivity, target, names, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,7 @@ import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.ResourceManager;
|
import net.osmand.plus.ResourceManager;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
import net.osmand.plus.activities.search.SearchActivity;
|
import net.osmand.plus.activities.search.SearchActivity;
|
||||||
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
||||||
import net.osmand.plus.routing.RoutingHelper;
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
|
@ -207,7 +208,7 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
// This situtation could be when navigation suddenly crashed and after restarting
|
// This situtation could be when navigation suddenly crashed and after restarting
|
||||||
// it tries to continue the last route
|
// it tries to continue the last route
|
||||||
if(settings.FOLLOW_THE_ROUTE.get() && !routingHelper.isRouteCalculated()){
|
if(settings.FOLLOW_THE_ROUTE.get() && !routingHelper.isRouteCalculated()){
|
||||||
restoreRoutingMode(settings.getPointToNavigate(), settings.getIntermediatePoints());
|
restoreRoutingMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
mapView.setMapLocationListener(this);
|
mapView.setMapLocationListener(this);
|
||||||
|
@ -285,7 +286,6 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
setRequestedOrientation(settings.MAP_SCREEN_ORIENTATION.get());
|
setRequestedOrientation(settings.MAP_SCREEN_ORIENTATION.get());
|
||||||
// can't return from this method we are not sure if activity will be recreated or not
|
// can't return from this method we are not sure if activity will be recreated or not
|
||||||
}
|
}
|
||||||
mapLayers.getNavigationLayer().setPointToNavigate(settings.getPointToNavigate(), settings.getIntermediatePoints());
|
|
||||||
|
|
||||||
Location loc = getLastKnownLocation();
|
Location loc = getLastKnownLocation();
|
||||||
if (loc != null && (System.currentTimeMillis() - loc.getTime()) > 30 * 1000) {
|
if (loc != null && (System.currentTimeMillis() - loc.getTime()) > 30 * 1000) {
|
||||||
|
@ -308,12 +308,13 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
mapLayers.getMapInfoLayer().getBackToLocation().setEnabled(false);
|
mapLayers.getMapInfoLayer().getBackToLocation().setEnabled(false);
|
||||||
|
|
||||||
// if destination point was changed try to recalculate route
|
// if destination point was changed try to recalculate route
|
||||||
|
TargetPointsHelper targets = getTargetPoints();
|
||||||
if (routingHelper.isFollowingMode() && (
|
if (routingHelper.isFollowingMode() && (
|
||||||
!Algoritms.objectEquals(settings.getPointToNavigate(), routingHelper.getFinalLocation() )||
|
!Algoritms.objectEquals(targets.getPointToNavigate(), routingHelper.getFinalLocation() )||
|
||||||
!Algoritms.objectEquals(settings.getIntermediatePoints(), routingHelper.getIntermediatePoints())
|
!Algoritms.objectEquals(targets.getIntermediatePoints(), routingHelper.getIntermediatePoints())
|
||||||
)) {
|
)) {
|
||||||
routingHelper.setFinalAndCurrentLocation(settings.getPointToNavigate(),
|
routingHelper.setFinalAndCurrentLocation(targets.getPointToNavigate(),
|
||||||
settings.getIntermediatePoints(),
|
targets.getIntermediatePoints(),
|
||||||
getLastKnownLocation(), routingHelper.getCurrentGPXRoute());
|
getLastKnownLocation(), routingHelper.getCurrentGPXRoute());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,8 +386,10 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
mapView.refreshMap(changed);
|
mapView.refreshMap(changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restoreRoutingMode(final LatLon pointToNavigate, final List<LatLon> intermediates) {
|
private void restoreRoutingMode() {
|
||||||
final String gpxPath = settings.FOLLOW_THE_GPX_ROUTE.get();
|
final String gpxPath = settings.FOLLOW_THE_GPX_ROUTE.get();
|
||||||
|
final TargetPointsHelper targetPoints = getTargetPoints();
|
||||||
|
final LatLon pointToNavigate = targetPoints.getPointToNavigate();
|
||||||
if (pointToNavigate == null && gpxPath == null) {
|
if (pointToNavigate == null && gpxPath == null) {
|
||||||
notRestoreRoutingMode();
|
notRestoreRoutingMode();
|
||||||
} else {
|
} else {
|
||||||
|
@ -475,7 +478,7 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
if (endPoint == null) {
|
if (endPoint == null) {
|
||||||
notRestoreRoutingMode();
|
notRestoreRoutingMode();
|
||||||
} else {
|
} else {
|
||||||
followRoute(settings.getApplicationMode(), endPoint, intermediates, startPoint, gpxRoute);
|
followRoute(settings.getApplicationMode(), endPoint, targetPoints.getIntermediatePoints(), startPoint, gpxRoute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -674,7 +677,7 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
}
|
}
|
||||||
|
|
||||||
private void emitNavigationHint() {
|
private void emitNavigationHint() {
|
||||||
final LatLon point = settings.getPointToNavigate();
|
final LatLon point = getTargetPoints().getPointToNavigate();
|
||||||
if (point != null) {
|
if (point != null) {
|
||||||
if (routingHelper.isRouteCalculated()) {
|
if (routingHelper.isRouteCalculated()) {
|
||||||
routingHelper.getVoiceRouter().announceCurrentDirection(getLastKnownLocation());
|
routingHelper.getVoiceRouter().announceCurrentDirection(getLastKnownLocation());
|
||||||
|
@ -985,16 +988,6 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
return zoomDelta;
|
return zoomDelta;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeIntermediatePoint(boolean updateRoute, int index){
|
|
||||||
mapLayers.getNavigationLayer().getIntermediatePoints().remove(index);
|
|
||||||
settings.deleteIntermediatePoint(index);
|
|
||||||
if(updateRoute && ( routingHelper.isRouteBeingCalculated() || routingHelper.isRouteCalculated() ||
|
|
||||||
routingHelper.isFollowingMode())) {
|
|
||||||
routingHelper.setFinalAndCurrentLocation(settings.getPointToNavigate(),
|
|
||||||
settings.getIntermediatePoints(), getLastKnownLocation(), routingHelper.getCurrentGPXRoute());
|
|
||||||
}
|
|
||||||
mapView.refreshMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void followRoute(ApplicationMode appMode, LatLon finalLocation, List<LatLon> intermediatePoints, Location currentLocation, GPXRouteParams gpxRoute){
|
public void followRoute(ApplicationMode appMode, LatLon finalLocation, List<LatLon> intermediatePoints, Location currentLocation, GPXRouteParams gpxRoute){
|
||||||
// change global settings
|
// change global settings
|
||||||
|
@ -1016,25 +1009,6 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
getMyApplication().showDialogInitializingCommandPlayer(MapActivity.this);
|
getMyApplication().showDialogInitializingCommandPlayer(MapActivity.this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void navigateToPoint(LatLon point, boolean updateRoute, int intermediate){
|
|
||||||
if(point != null){
|
|
||||||
if(intermediate < 0) {
|
|
||||||
settings.setPointToNavigate(point.getLatitude(), point.getLongitude(), null);
|
|
||||||
} else {
|
|
||||||
settings.insertIntermediatePoint(point.getLatitude(), point.getLongitude(), null,
|
|
||||||
intermediate, false);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
settings.clearPointToNavigate();
|
|
||||||
settings.clearIntermediatePoints();
|
|
||||||
}
|
|
||||||
if(updateRoute && ( routingHelper.isRouteBeingCalculated() || routingHelper.isRouteCalculated() ||
|
|
||||||
routingHelper.isFollowingMode())) {
|
|
||||||
routingHelper.setFinalAndCurrentLocation(settings.getPointToNavigate(),
|
|
||||||
settings.getIntermediatePoints(), getLastKnownLocation(), routingHelper.getCurrentGPXRoute());
|
|
||||||
}
|
|
||||||
mapLayers.getNavigationLayer().setPointToNavigate(settings.getPointToNavigate(), settings.getIntermediatePoints());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Location getLastKnownLocation(){
|
public Location getLastKnownLocation(){
|
||||||
if(mapLayers.getLocationLayer() == null) {
|
if(mapLayers.getLocationLayer() == null) {
|
||||||
|
@ -1047,21 +1021,12 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
|
||||||
return new LatLon(mapView.getLatitude(), mapView.getLongitude());
|
return new LatLon(mapView.getLatitude(), mapView.getLongitude());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TargetPointsHelper getTargetPoints(){
|
||||||
|
return getMyApplication().getTargetPointsHelper();
|
||||||
|
}
|
||||||
|
|
||||||
public LatLon getPointToNavigate(){
|
public LatLon getPointToNavigate(){
|
||||||
return mapLayers.getNavigationLayer().getPointToNavigate();
|
return getTargetPoints().getPointToNavigate();
|
||||||
}
|
|
||||||
|
|
||||||
public List<LatLon> getIntermediatePoints(){
|
|
||||||
return mapLayers.getNavigationLayer().getIntermediatePoints();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public LatLon getFirstIntermediatePoint(){
|
|
||||||
List<LatLon> ip = mapLayers.getNavigationLayer().getIntermediatePoints();
|
|
||||||
if(ip.size() > 0) {
|
|
||||||
return ip.get(0);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public RoutingHelper getRoutingHelper() {
|
public RoutingHelper getRoutingHelper() {
|
||||||
|
|
|
@ -15,7 +15,6 @@ import net.osmand.AndroidUtils;
|
||||||
import net.osmand.CallbackWithObject;
|
import net.osmand.CallbackWithObject;
|
||||||
import net.osmand.FavouritePoint;
|
import net.osmand.FavouritePoint;
|
||||||
import net.osmand.GPXUtilities;
|
import net.osmand.GPXUtilities;
|
||||||
import net.osmand.OsmAndFormatter;
|
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.LogUtil;
|
import net.osmand.LogUtil;
|
||||||
import net.osmand.Version;
|
import net.osmand.Version;
|
||||||
|
@ -36,10 +35,10 @@ import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.ResourceManager;
|
import net.osmand.plus.ResourceManager;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
import net.osmand.plus.activities.search.SearchActivity;
|
import net.osmand.plus.activities.search.SearchActivity;
|
||||||
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
||||||
import net.osmand.plus.routing.RoutingHelper;
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
import net.osmand.plus.views.AnimateDraggingMapThread;
|
|
||||||
import net.osmand.plus.views.BaseMapLayer;
|
import net.osmand.plus.views.BaseMapLayer;
|
||||||
import net.osmand.plus.views.MapTileLayer;
|
import net.osmand.plus.views.MapTileLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
@ -50,7 +49,6 @@ import android.app.Dialog;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.DialogInterface.OnMultiChoiceClickListener;
|
import android.content.DialogInterface.OnMultiChoiceClickListener;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -77,7 +75,6 @@ import android.widget.AutoCompleteTextView;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
|
@ -462,15 +459,6 @@ public class MapActivityActions implements DialogProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean checkPointToNavigate(){
|
|
||||||
MapActivityLayers mapLayers = mapActivity.getMapLayers();
|
|
||||||
if(mapLayers.getNavigationLayer().getPointToNavigate() == null){
|
|
||||||
AccessibleToast.makeText(mapActivity, R.string.mark_final_location_first, Toast.LENGTH_LONG).show();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRoutePointDescription(double lat, double lon) {
|
public String getRoutePointDescription(double lat, double lon) {
|
||||||
return mapActivity.getString(R.string.route_descr_lat_lon, lat, lon);
|
return mapActivity.getString(R.string.route_descr_lat_lon, lat, lon);
|
||||||
}
|
}
|
||||||
|
@ -491,22 +479,23 @@ public class MapActivityActions implements DialogProvider {
|
||||||
from = getRoutePointDescription(fromOrCurrent.getLatitude(),
|
from = getRoutePointDescription(fromOrCurrent.getLatitude(),
|
||||||
fromOrCurrent.getLongitude());
|
fromOrCurrent.getLongitude());
|
||||||
}
|
}
|
||||||
|
TargetPointsHelper targets = mapActivity.getTargetPoints();
|
||||||
String tos;
|
String tos;
|
||||||
if(to == null) {
|
if(to == null) {
|
||||||
tos = getRoutePointDescription(mapActivity.getPointToNavigate(),
|
tos = getRoutePointDescription(targets.getPointToNavigate(),
|
||||||
settings.getPointNavigateDescription());
|
targets.getPointNavigateDescription());
|
||||||
} else {
|
} else {
|
||||||
tos = getRoutePointDescription(to, "");
|
tos = getRoutePointDescription(to, "");
|
||||||
}
|
}
|
||||||
int sz = mapActivity.getIntermediatePoints().size();
|
|
||||||
|
int sz = targets.getIntermediatePoints().size();
|
||||||
if(sz == 0) {
|
if(sz == 0) {
|
||||||
return mapActivity.getString(R.string.route_descr_from_to, from, tos);
|
return mapActivity.getString(R.string.route_descr_from_to, from, tos);
|
||||||
} else {
|
} else {
|
||||||
String via = "";
|
String via = "";
|
||||||
List<String> names = settings.getIntermediatePointDescriptions(sz);
|
List<String> names = targets.getIntermediatePointNames();
|
||||||
for (int i = 0; i < sz ; i++) {
|
for (int i = 0; i < sz ; i++) {
|
||||||
via += "\n - " + getRoutePointDescription(mapActivity.getIntermediatePoints().get(i),
|
via += "\n - " + getRoutePointDescription(targets.getIntermediatePoints().get(i),
|
||||||
names.get(i));
|
names.get(i));
|
||||||
}
|
}
|
||||||
return mapActivity.getString(R.string.route_descr_from_to_via, from, via, tos);
|
return mapActivity.getString(R.string.route_descr_from_to_via, from, via, tos);
|
||||||
|
@ -516,9 +505,8 @@ public class MapActivityActions implements DialogProvider {
|
||||||
|
|
||||||
public void getDirections(final Location fromOrCurrent, final LatLon to, boolean gpxRouteEnabled) {
|
public void getDirections(final Location fromOrCurrent, final LatLon to, boolean gpxRouteEnabled) {
|
||||||
|
|
||||||
final RoutingHelper routingHelper = mapActivity.getRoutingHelper();
|
|
||||||
|
|
||||||
Builder builder = new AlertDialog.Builder(mapActivity);
|
Builder builder = new AlertDialog.Builder(mapActivity);
|
||||||
|
final TargetPointsHelper targets = mapActivity.getTargetPoints();
|
||||||
|
|
||||||
View view = mapActivity.getLayoutInflater().inflate(R.layout.calculate_route, null);
|
View view = mapActivity.getLayoutInflater().inflate(R.layout.calculate_route, null);
|
||||||
final CheckBox nonoptimal = (CheckBox) view.findViewById(R.id.OptimalCheckox);
|
final CheckBox nonoptimal = (CheckBox) view.findViewById(R.id.OptimalCheckox);
|
||||||
|
@ -577,14 +565,14 @@ public class MapActivityActions implements DialogProvider {
|
||||||
DialogInterface.OnClickListener onlyShowCall = new DialogInterface.OnClickListener() {
|
DialogInterface.OnClickListener onlyShowCall = new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
if(to != null) {
|
if (to != null) {
|
||||||
mapActivity.navigateToPoint(to, false, -1);
|
targets.navigateToPoint(mapActivity, to, false, -1);
|
||||||
}
|
}
|
||||||
if (!checkPointToNavigate()) {
|
if (!targets.checkPointToNavigate(mapActivity)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Location from = fromOrCurrent;
|
Location from = fromOrCurrent;
|
||||||
if(from == null) {
|
if (from == null) {
|
||||||
from = mapActivity.getLastKnownLocation();
|
from = mapActivity.getLastKnownLocation();
|
||||||
}
|
}
|
||||||
if (from == null) {
|
if (from == null) {
|
||||||
|
@ -592,7 +580,8 @@ public class MapActivityActions implements DialogProvider {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PREV_APPLICATION_MODE also needs to be set here to overwrite possibly outdated value from prior follow-navigation in different profile
|
// PREV_APPLICATION_MODE also needs to be set here to overwrite possibly outdated value from prior follow-navigation in
|
||||||
|
// different profile
|
||||||
// Do not overwrite PREV_APPLICATION_MODE if already navigating
|
// Do not overwrite PREV_APPLICATION_MODE if already navigating
|
||||||
if (!routingHelper.isFollowingMode()) {
|
if (!routingHelper.isFollowingMode()) {
|
||||||
settings.PREV_APPLICATION_MODE.set(settings.APPLICATION_MODE.get());
|
settings.PREV_APPLICATION_MODE.set(settings.APPLICATION_MODE.get());
|
||||||
|
@ -604,8 +593,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
settings.FOLLOW_THE_ROUTE.set(false);
|
settings.FOLLOW_THE_ROUTE.set(false);
|
||||||
settings.FOLLOW_THE_GPX_ROUTE.set(null);
|
settings.FOLLOW_THE_GPX_ROUTE.set(null);
|
||||||
routingHelper.setFollowingMode(false);
|
routingHelper.setFollowingMode(false);
|
||||||
routingHelper.setFinalAndCurrentLocation(mapActivity.getPointToNavigate(),
|
routingHelper.setFinalAndCurrentLocation(targets.getPointToNavigate(), targets.getIntermediatePoints(), from, null);
|
||||||
mapActivity.getIntermediatePoints(),from, null);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -613,9 +601,9 @@ public class MapActivityActions implements DialogProvider {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
if(to != null) {
|
if(to != null) {
|
||||||
mapActivity.navigateToPoint(to, false, -1);
|
targets.navigateToPoint(mapActivity, to, false, -1);
|
||||||
}
|
}
|
||||||
if (!checkPointToNavigate()) {
|
if (!targets.checkPointToNavigate(mapActivity)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean msg = true;
|
boolean msg = true;
|
||||||
|
@ -638,7 +626,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
ApplicationMode mode = getAppMode(buttons, settings);
|
ApplicationMode mode = getAppMode(buttons, settings);
|
||||||
settings.OPTIMAL_ROUTE_MODE.setModeValue(mode, !nonoptimal.isChecked());
|
settings.OPTIMAL_ROUTE_MODE.setModeValue(mode, !nonoptimal.isChecked());
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
mapActivity.followRoute(mode, mapActivity.getPointToNavigate(), mapActivity.getIntermediatePoints(),
|
mapActivity.followRoute(mode, targets.getPointToNavigate(), targets.getIntermediatePoints(),
|
||||||
current, null);
|
current, null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -647,7 +635,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
if(to != null) {
|
if(to != null) {
|
||||||
mapActivity.navigateToPoint(to, false, -1);
|
targets.navigateToPoint(mapActivity, to, false, -1);
|
||||||
}
|
}
|
||||||
ApplicationMode mode = getAppMode(buttons, settings);
|
ApplicationMode mode = getAppMode(buttons, settings);
|
||||||
navigateUsingGPX(mode);
|
navigateUsingGPX(mode);
|
||||||
|
@ -712,8 +700,8 @@ public class MapActivityActions implements DialogProvider {
|
||||||
endPoint = point;
|
endPoint = point;
|
||||||
}
|
}
|
||||||
if(endPoint != null) {
|
if(endPoint != null) {
|
||||||
settings.setPointToNavigate(point.getLatitude(), point.getLongitude(), null);
|
mapActivity.getTargetPoints().navigateToPoint(
|
||||||
mapLayers.getNavigationLayer().setPointToNavigate(point, new ArrayList<LatLon>());
|
mapActivity, point, false, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(endPoint != null){
|
if(endPoint != null){
|
||||||
|
@ -820,8 +808,9 @@ public class MapActivityActions implements DialogProvider {
|
||||||
|
|
||||||
adapter.registerItem(R.string.context_menu_item_navigate_point, R.drawable.list_view_set_destination);
|
adapter.registerItem(R.string.context_menu_item_navigate_point, R.drawable.list_view_set_destination);
|
||||||
adapter.registerItem(R.string.context_menu_item_directions, R.drawable.list_activities_directions_to_here);
|
adapter.registerItem(R.string.context_menu_item_directions, R.drawable.list_activities_directions_to_here);
|
||||||
if(settings.getPointToNavigate() != null) {
|
final TargetPointsHelper targets = mapActivity.getTargetPoints();
|
||||||
if(mapActivity.getIntermediatePoints().size() == 0) {
|
if(targets.getPointToNavigate() != null) {
|
||||||
|
if(targets.getIntermediatePoints().size() == 0) {
|
||||||
adapter.registerItem(R.string.context_menu_item_intermediate_point, R.drawable.list_view_set_intermediate);
|
adapter.registerItem(R.string.context_menu_item_intermediate_point, R.drawable.list_view_set_intermediate);
|
||||||
} else {
|
} else {
|
||||||
adapter.registerItem(R.string.context_menu_item_first_intermediate_point, R.drawable.list_view_set_intermediate);
|
adapter.registerItem(R.string.context_menu_item_first_intermediate_point, R.drawable.list_view_set_intermediate);
|
||||||
|
@ -874,23 +863,27 @@ public class MapActivityActions implements DialogProvider {
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
mapActivity.startActivity(intent);
|
mapActivity.startActivity(intent);
|
||||||
} else if (standardId == R.string.context_menu_item_navigate_point) {
|
} else if (standardId == R.string.context_menu_item_navigate_point) {
|
||||||
mapActivity.navigateToPoint(new LatLon(latitude, longitude), true, -1);
|
mapActivity.getTargetPoints().navigateToPoint(mapActivity,
|
||||||
|
new LatLon(latitude, longitude), true, -1);
|
||||||
} else if (standardId == R.string.context_menu_item_directions) {
|
} else if (standardId == R.string.context_menu_item_directions) {
|
||||||
// always enable and follow and let calculate it (GPS is not accessible in garage)
|
// always enable and follow and let calculate it (GPS is not accessible in garage)
|
||||||
getDirections(null, new LatLon(latitude, longitude), true);
|
getDirections(null, new LatLon(latitude, longitude), true);
|
||||||
} else if (standardId == R.string.context_menu_item_show_route) {
|
} else if (standardId == R.string.context_menu_item_show_route) {
|
||||||
if (checkPointToNavigate()) {
|
if (targets.checkPointToNavigate(mapActivity)) {
|
||||||
Location loc = new Location("map");
|
Location loc = new Location("map");
|
||||||
loc.setLatitude(latitude);
|
loc.setLatitude(latitude);
|
||||||
loc.setLongitude(longitude);
|
loc.setLongitude(longitude);
|
||||||
getDirections(loc, null, true);
|
getDirections(loc, null, true);
|
||||||
}
|
}
|
||||||
} else if (standardId == R.string.context_menu_item_intermediate_point) {
|
} else if (standardId == R.string.context_menu_item_intermediate_point) {
|
||||||
mapActivity.navigateToPoint(new LatLon(latitude, longitude), true, mapActivity.getIntermediatePoints().size());
|
targets.navigateToPoint(mapActivity,
|
||||||
|
new LatLon(latitude, longitude), true, targets.getIntermediatePoints().size());
|
||||||
} else if (standardId == R.string.context_menu_item_first_intermediate_point) {
|
} else if (standardId == R.string.context_menu_item_first_intermediate_point) {
|
||||||
mapActivity.navigateToPoint(new LatLon(latitude, longitude), true, 0);
|
targets.navigateToPoint(mapActivity,
|
||||||
|
new LatLon(latitude, longitude), true, 0);
|
||||||
} else if (standardId == R.string.context_menu_item_last_intermediate_point) {
|
} else if (standardId == R.string.context_menu_item_last_intermediate_point) {
|
||||||
mapActivity.navigateToPoint(new LatLon(latitude, longitude), true, mapActivity.getIntermediatePoints().size());
|
targets.navigateToPoint(mapActivity,
|
||||||
|
new LatLon(latitude, longitude), true, targets.getIntermediatePoints().size());
|
||||||
} else if (standardId == R.string.context_menu_item_share_location) {
|
} else if (standardId == R.string.context_menu_item_share_location) {
|
||||||
shareLocation(latitude, longitude, mapActivity.getMapView().getZoom());
|
shareLocation(latitude, longitude, mapActivity.getMapView().getZoom());
|
||||||
} else if (standardId == R.string.context_menu_item_add_favorite) {
|
} else if (standardId == R.string.context_menu_item_add_favorite) {
|
||||||
|
@ -1038,7 +1031,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
new OnOptionsMenuClick() {
|
new OnOptionsMenuClick() {
|
||||||
@Override
|
@Override
|
||||||
public void prepareOptionsMenu(Menu menu, MenuItem navigateToPointMenu) {
|
public void prepareOptionsMenu(Menu menu, MenuItem navigateToPointMenu) {
|
||||||
if (settings.getPointToNavigate() != null) {
|
if (mapActivity.getPointToNavigate() != null) {
|
||||||
navigateToPointMenu.setTitle((routingHelper.isRouteCalculated() || routingHelper.isFollowingMode() ||
|
navigateToPointMenu.setTitle((routingHelper.isRouteCalculated() || routingHelper.isFollowingMode() ||
|
||||||
routingHelper.isRouteBeingCalculated()) ? R.string.stop_routing : R.string.stop_navigation);
|
routingHelper.isRouteBeingCalculated()) ? R.string.stop_routing : R.string.stop_navigation);
|
||||||
navigateToPointMenu.setVisible(true);
|
navigateToPointMenu.setVisible(true);
|
||||||
|
@ -1056,7 +1049,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
mapActivity.updateApplicationModeSettings();
|
mapActivity.updateApplicationModeSettings();
|
||||||
mapView.refreshMap(changed);
|
mapView.refreshMap(changed);
|
||||||
} else {
|
} else {
|
||||||
mapActivity.navigateToPoint(null, true, -1);
|
mapActivity.getTargetPoints().clearPointToNavigate(mapActivity, true);
|
||||||
}
|
}
|
||||||
mapView.refreshMap();
|
mapView.refreshMap();
|
||||||
return true;
|
return true;
|
||||||
|
@ -1121,7 +1114,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
optionsMenuHelper.registerOptionsMenuItem(R.string.target_points, R.string.target_points, new OnOptionsMenuClick() {
|
optionsMenuHelper.registerOptionsMenuItem(R.string.target_points, R.string.target_points, new OnOptionsMenuClick() {
|
||||||
@Override
|
@Override
|
||||||
public void prepareOptionsMenu(Menu menu, MenuItem item) {
|
public void prepareOptionsMenu(Menu menu, MenuItem item) {
|
||||||
item.setVisible(mapActivity.getIntermediatePoints().size() > 0);
|
item.setVisible(mapActivity.getTargetPoints().getIntermediatePoints().size() > 0);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public boolean onClick(MenuItem item) {
|
public boolean onClick(MenuItem item) {
|
||||||
|
@ -1168,99 +1161,10 @@ public class MapActivityActions implements DialogProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openIntermediatePointsDialog(){
|
public void openIntermediatePointsDialog(){
|
||||||
Builder builder = new AlertDialog.Builder(mapActivity);
|
IntermediatePointsDialog.openIntermediatePointsDialog(mapActivity, mapActivity.getMyApplication());
|
||||||
final ArrayList<LatLon> intermediates = new ArrayList<LatLon>(mapActivity.getIntermediatePoints());
|
|
||||||
final ArrayList<String> names = new ArrayList<String>(settings.getIntermediatePointDescriptions(
|
|
||||||
intermediates.size()));
|
|
||||||
final int targetPointInd = mapActivity.getPointToNavigate() == null ? -1 : intermediates.size();
|
|
||||||
if(mapActivity.getPointToNavigate() != null) {
|
|
||||||
intermediates.add(mapActivity.getPointToNavigate());
|
|
||||||
if(settings.getPointNavigateDescription() != null) {
|
|
||||||
names.add(settings.getPointNavigateDescription());
|
|
||||||
} else {
|
|
||||||
names.add("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final List<String> intermediateNames = new ArrayList<String>();
|
|
||||||
double lat = mapActivity.getMapView().getLatitude();
|
|
||||||
double lon = mapActivity.getMapView().getLongitude();
|
|
||||||
for (int i = 0; i < intermediates.size(); i++) {
|
|
||||||
double meters = MapUtils.getDistance(intermediates.get(i), lat, lon);
|
|
||||||
String distString = OsmAndFormatter.getFormattedDistance((float) meters, mapActivity);
|
|
||||||
String nm = (i+1)+". " + mapActivity.getString(R.string.target_point, distString);
|
|
||||||
String descr = names.get(i);
|
|
||||||
if(names.get(i) != null && descr.trim().length() > 0) {
|
|
||||||
nm += "\n" + descr;
|
|
||||||
}
|
|
||||||
intermediateNames.add(nm);
|
|
||||||
}
|
|
||||||
final boolean[] checkedIntermediates = new boolean[intermediateNames.size()];
|
|
||||||
ListAdapter listadapter = new ArrayAdapter<String>(mapActivity, R.layout.layers_list_activity_item, R.id.title,
|
|
||||||
intermediateNames) {
|
|
||||||
@Override
|
|
||||||
public View getView(final int position, View convertView, ViewGroup parent) {
|
|
||||||
// User super class to create the View
|
|
||||||
View v = super.getView(position, convertView, parent);
|
|
||||||
TextView tv = (TextView) v.findViewById(R.id.title);
|
|
||||||
tv.setText(intermediateNames.get(position));
|
|
||||||
|
|
||||||
checkedIntermediates[position] = true;
|
|
||||||
if(position == targetPointInd) {
|
|
||||||
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.list_view_set_destination, 0, 0, 0);
|
|
||||||
final CheckBox ch = ((CheckBox) v.findViewById(R.id.check_item));
|
|
||||||
ch.setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.list_view_set_intermediate, 0, 0, 0);
|
|
||||||
final CheckBox ch = ((CheckBox) v.findViewById(R.id.check_item));
|
|
||||||
ch.setVisibility(View.VISIBLE);
|
|
||||||
ch.setChecked(true);
|
|
||||||
ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
||||||
checkedIntermediates[position] = isChecked;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
builder.setAdapter(listadapter, new DialogInterface.OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
AnimateDraggingMapThread thread = mapActivity.getMapView().getAnimatedDraggingThread();
|
|
||||||
LatLon pointToNavigate = intermediates.get(which);
|
|
||||||
float fZoom = mapActivity.getMapView().getFloatZoom() < 15 ? 15 : mapActivity.getMapView().getFloatZoom();
|
|
||||||
thread.startMoving(pointToNavigate.getLatitude(), pointToNavigate.getLongitude(), fZoom, true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.setPositiveButton(R.string.default_buttons_ok, new DialogInterface.OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
int cnt = 0;
|
|
||||||
for (int i = checkedIntermediates.length - 1; i >= 0; i--) {
|
|
||||||
if (!checkedIntermediates[i]) {
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cnt > 0) {
|
|
||||||
for (int i = checkedIntermediates.length - 1; i >= 0; i--) {
|
|
||||||
if (!checkedIntermediates[i]) {
|
|
||||||
cnt--;
|
|
||||||
mapActivity.removeIntermediatePoint(cnt == 0, i);
|
|
||||||
if (cnt == 0) {
|
|
||||||
mapActivity.getMapView().refreshMap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mapActivity.getMapLayers().getContextMenuLayer().setLocation(null, "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void startGpsStatusIntent() {
|
private void startGpsStatusIntent() {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
|
@ -1306,7 +1210,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
mapActivity.backToLocationImpl();
|
mapActivity.backToLocationImpl();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
mapActivity.getNavigationInfo().show(settings.getPointToNavigate(),
|
mapActivity.getNavigationInfo().show(mapActivity.getPointToNavigate(),
|
||||||
mapActivity.getMapLayers().getLocationLayer().getHeading());
|
mapActivity.getMapLayers().getLocationLayer().getHeading());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1345,9 +1249,8 @@ public class MapActivityActions implements DialogProvider {
|
||||||
if(onShow != null) {
|
if(onShow != null) {
|
||||||
onShow.onClick(v);
|
onShow.onClick(v);
|
||||||
}
|
}
|
||||||
navigateToPoint(activity, location.getLatitude(), location.getLongitude(), name);
|
app.getTargetPointsHelper().navigatePointDialogAndLaunchMap(activity,
|
||||||
// app.getSettings().setPointToNavigate(location.getLatitude(), location.getLongitude(), name);
|
location.getLatitude(), location.getLongitude(), name);
|
||||||
// MapActivity.launchMapActivityMoveToTop(activity);
|
|
||||||
qa.dismiss();
|
qa.dismiss();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1369,38 +1272,4 @@ public class MapActivityActions implements DialogProvider {
|
||||||
// qa.addActionItem(directionsTo);
|
// qa.addActionItem(directionsTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void navigateToPoint(final Context activity, final double lat, final double lon, final String name){
|
|
||||||
final OsmandApplication app = ((OsmandApplication) activity.getApplicationContext());
|
|
||||||
if(app.getSettings().getPointToNavigate() != null) {
|
|
||||||
Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle(R.string.new_destination_point_dialog);
|
|
||||||
builder.setItems(new String[] {
|
|
||||||
activity.getString(R.string.replace_destination_point),
|
|
||||||
activity.getString(R.string.add_as_first_destination_point),
|
|
||||||
activity.getString(R.string.add_as_last_destination_point)
|
|
||||||
}, new DialogInterface.OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
if(which == 0) {
|
|
||||||
app.getSettings().setPointToNavigate(lat, lon, true, name);
|
|
||||||
} else if(which == 2) {
|
|
||||||
int sz = app.getSettings().getIntermediatePoints().size();
|
|
||||||
// app.getSettings().insertIntermediatePoint(lat, lon, name, sz);
|
|
||||||
LatLon pt = app.getSettings().getPointToNavigate();
|
|
||||||
app.getSettings().insertIntermediatePoint(pt.getLatitude(), pt.getLongitude(),
|
|
||||||
app.getSettings().getPointNavigateDescription(), sz, true);
|
|
||||||
app.getSettings().setPointToNavigate(lat, lon, true, name);
|
|
||||||
} else {
|
|
||||||
app.getSettings().insertIntermediatePoint(lat, lon, name, 0, true);
|
|
||||||
}
|
|
||||||
MapActivity.launchMapActivityMoveToTop(activity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
} else {
|
|
||||||
app.getSettings().setPointToNavigate(lat, lon, true, name);
|
|
||||||
MapActivity.launchMapActivityMoveToTop(activity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,9 +257,11 @@ public class NavigatePointActivity extends Activity implements SearchActivityChi
|
||||||
|
|
||||||
if(navigate){
|
if(navigate){
|
||||||
if(activity != null) {
|
if(activity != null) {
|
||||||
MapActivityActions.navigateToPoint(activity, lat, lon, getString(R.string.point_on_map, lat, lon));
|
OsmandApplication app = (OsmandApplication) activity.getApplication();
|
||||||
|
app.getTargetPointsHelper().navigatePointDialogAndLaunchMap(activity, lat, lon, getString(R.string.point_on_map, lat, lon));
|
||||||
} else {
|
} else {
|
||||||
MapActivityActions.navigateToPoint(this, lat, lon, getString(R.string.point_on_map, lat, lon));
|
OsmandApplication app = (OsmandApplication) getApplication();
|
||||||
|
app.getTargetPointsHelper().navigatePointDialogAndLaunchMap(this, lat, lon, getString(R.string.point_on_map, lat, lon));
|
||||||
}
|
}
|
||||||
if(dlg != null){
|
if(dlg != null){
|
||||||
dlg.dismiss();
|
dlg.dismiss();
|
||||||
|
|
|
@ -12,6 +12,7 @@ import net.osmand.plus.RegionAddressRepository;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.MapActivityActions;
|
import net.osmand.plus.activities.MapActivityActions;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.Application;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -236,7 +237,8 @@ public class SearchAddressActivity extends Activity {
|
||||||
finish();
|
finish();
|
||||||
} else {
|
} else {
|
||||||
if (navigateTo) {
|
if (navigateTo) {
|
||||||
MapActivityActions.navigateToPoint(SearchAddressActivity.this, searchPoint.getLatitude(), searchPoint.getLongitude(), historyName);
|
OsmandApplication app = (OsmandApplication) getApplication();
|
||||||
|
app.getTargetPointsHelper().navigatePointDialogAndLaunchMap(SearchAddressActivity.this, searchPoint.getLatitude(), searchPoint.getLongitude(), historyName);
|
||||||
} else {
|
} else {
|
||||||
osmandSettings.setMapLocationToShow(searchPoint.getLatitude(), searchPoint.getLongitude(), zoom, historyName);
|
osmandSettings.setMapLocationToShow(searchPoint.getLatitude(), searchPoint.getLongitude(), zoom, historyName);
|
||||||
MapActivity.launchMapActivityMoveToTop(SearchAddressActivity.this);
|
MapActivity.launchMapActivityMoveToTop(SearchAddressActivity.this);
|
||||||
|
|
|
@ -22,6 +22,7 @@ import net.osmand.plus.activities.TransportRouteHelper;
|
||||||
import net.osmand.plus.activities.search.SearchActivity.SearchActivityChild;
|
import net.osmand.plus.activities.search.SearchActivity.SearchActivityChild;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.AlertDialog.Builder;
|
import android.app.AlertDialog.Builder;
|
||||||
|
import android.app.Application;
|
||||||
import android.app.ListActivity;
|
import android.app.ListActivity;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -142,8 +143,8 @@ public class SearchTransportActivity extends ListActivity implements SearchActiv
|
||||||
if (startPoint == null) {
|
if (startPoint == null) {
|
||||||
startPoint = settings.getLastKnownMapLocation();
|
startPoint = settings.getLastKnownMapLocation();
|
||||||
}
|
}
|
||||||
|
OsmandApplication app = (OsmandApplication) getApplication();
|
||||||
LatLon pointToNavigate = settings.getPointToNavigate();
|
LatLon pointToNavigate = app.getTargetPointsHelper().getPointToNavigate();
|
||||||
if(!Algoritms.objectEquals(pointToNavigate, this.destinationLocation) ||
|
if(!Algoritms.objectEquals(pointToNavigate, this.destinationLocation) ||
|
||||||
!Algoritms.objectEquals(startPoint, this.lastKnownMapLocation)){
|
!Algoritms.objectEquals(startPoint, this.lastKnownMapLocation)){
|
||||||
destinationLocation = pointToNavigate;
|
destinationLocation = pointToNavigate;
|
||||||
|
|
|
@ -63,7 +63,7 @@ public class OsmandDevelopmentPlugin extends OsmandPlugin {
|
||||||
@Override
|
@Override
|
||||||
public void prepareOptionsMenu(Menu menu, MenuItem animateMenu) {
|
public void prepareOptionsMenu(Menu menu, MenuItem animateMenu) {
|
||||||
animateMenu.setTitle(routeAnimation.isRouteAnimating() ? R.string.animate_route_off : R.string.animate_route);
|
animateMenu.setTitle(routeAnimation.isRouteAnimating() ? R.string.animate_route_off : R.string.animate_route);
|
||||||
animateMenu.setVisible(settings.getPointToNavigate() != null);
|
animateMenu.setVisible(app.getTargetPointsHelper().getPointToNavigate() != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -174,9 +174,10 @@ public class DistanceCalculatorPlugin extends OsmandPlugin {
|
||||||
measurementPoints.add(l);
|
measurementPoints.add(l);
|
||||||
view.refreshMap();
|
view.refreshMap();
|
||||||
updateText();
|
updateText();
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongPressEvent(PointF point) {
|
public boolean onLongPressEvent(PointF point) {
|
||||||
|
@ -184,9 +185,10 @@ public class DistanceCalculatorPlugin extends OsmandPlugin {
|
||||||
measurementPoints.remove(measurementPoints.size() - 1);
|
measurementPoints.remove(measurementPoints.size() - 1);
|
||||||
view.refreshMap();
|
view.refreshMap();
|
||||||
updateText();
|
updateText();
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDraw(Canvas canvas, RectF latlonRect, RectF tilesRect, DrawSettings settings) {
|
public void onDraw(Canvas canvas, RectF latlonRect, RectF tilesRect, DrawSettings settings) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.OsmandSettings.MetricsConstants;
|
import net.osmand.plus.OsmandSettings.MetricsConstants;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
import net.osmand.plus.activities.ApplicationMode;
|
import net.osmand.plus.activities.ApplicationMode;
|
||||||
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
||||||
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
||||||
|
@ -362,9 +363,10 @@ public class RoutingHelper {
|
||||||
showMessage(app.getString(R.string.arrived_at_intermediate_point));
|
showMessage(app.getString(R.string.arrived_at_intermediate_point));
|
||||||
voiceRouter.arrivedIntermediatePoint();
|
voiceRouter.arrivedIntermediatePoint();
|
||||||
route.passIntermediatePoint();
|
route.passIntermediatePoint();
|
||||||
int toDel = settings.getIntermediatePoints().size() - route.getIntermediatePointsToPass();
|
TargetPointsHelper targets = app.getTargetPointsHelper();
|
||||||
|
int toDel = targets.getIntermediatePoints().size() - route.getIntermediatePointsToPass();
|
||||||
while(toDel > 0) {
|
while(toDel > 0) {
|
||||||
settings.deleteIntermediatePoint(0);
|
targets.removeWayPoint(null, false, 0);
|
||||||
toDel--;
|
toDel--;
|
||||||
}
|
}
|
||||||
while(intermediatePoints != null && route.getIntermediatePointsToPass() < intermediatePoints.size()) {
|
while(intermediatePoints != null && route.getIntermediatePointsToPass() < intermediatePoints.size()) {
|
||||||
|
@ -378,6 +380,8 @@ public class RoutingHelper {
|
||||||
showMessage(app.getString(R.string.arrived_at_destination));
|
showMessage(app.getString(R.string.arrived_at_destination));
|
||||||
voiceRouter.arrivedDestinationPoint();
|
voiceRouter.arrivedDestinationPoint();
|
||||||
clearCurrentRoute(null, null);
|
clearCurrentRoute(null, null);
|
||||||
|
TargetPointsHelper targets = app.getTargetPointsHelper();
|
||||||
|
targets.clearPointToNavigate(null, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
package net.osmand.plus.views;
|
package net.osmand.plus.views;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.osmand.osm.LatLon;
|
import net.osmand.osm.LatLon;
|
||||||
import net.osmand.plus.ContextMenuAdapter;
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
|
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.routing.RoutingHelper;
|
|
||||||
import net.osmand.plus.views.ContextMenuLayer.IContextMenuProvider;
|
import net.osmand.plus.views.ContextMenuLayer.IContextMenuProvider;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
@ -31,8 +30,6 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
private Paint point;
|
private Paint point;
|
||||||
private Paint bitmapPaint;
|
private Paint bitmapPaint;
|
||||||
|
|
||||||
protected LatLon pointToNavigate = null;
|
|
||||||
protected List<LatLon> intermediatePoints = new ArrayList<LatLon>();
|
|
||||||
private OsmandMapTileView view;
|
private OsmandMapTileView view;
|
||||||
private float[] calculations = new float[2];
|
private float[] calculations = new float[2];
|
||||||
|
|
||||||
|
@ -43,8 +40,6 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
|
|
||||||
private Paint textPaint;
|
private Paint textPaint;
|
||||||
|
|
||||||
private RoutingHelper routingHelper;
|
|
||||||
|
|
||||||
private final MapActivity map;
|
private final MapActivity map;
|
||||||
|
|
||||||
public PointNavigationLayer(MapActivity map) {
|
public PointNavigationLayer(MapActivity map) {
|
||||||
|
@ -88,7 +83,6 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
dm = new DisplayMetrics();
|
dm = new DisplayMetrics();
|
||||||
WindowManager wmgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
|
WindowManager wmgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
|
||||||
wmgr.getDefaultDisplay().getMetrics(dm);
|
wmgr.getDefaultDisplay().getMetrics(dm);
|
||||||
routingHelper = view.getApplication().getRoutingHelper();
|
|
||||||
initUI();
|
initUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,14 +92,8 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
public void onDraw(Canvas canvas, RectF latLonBounds, RectF tilesRect, DrawSettings nightMode) {
|
public void onDraw(Canvas canvas, RectF latLonBounds, RectF tilesRect, DrawSettings nightMode) {
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
if(routingHelper != null && routingHelper.isFollowingMode() && routingHelper.isRouteCalculated()) {
|
TargetPointsHelper targetPoints = map.getTargetPoints();
|
||||||
List<LatLon> ip = routingHelper.getIntermediatePoints();
|
for (LatLon ip : targetPoints.getIntermediatePoints()) {
|
||||||
int sz = ip == null ? 0 : ip.size();
|
|
||||||
while(sz > intermediatePoints.size()) {
|
|
||||||
intermediatePoints.remove(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (LatLon ip : intermediatePoints) {
|
|
||||||
index ++;
|
index ++;
|
||||||
if (isLocationVisible(ip)) {
|
if (isLocationVisible(ip)) {
|
||||||
int marginX = intermediatePoint.getWidth() / 3;
|
int marginX = intermediatePoint.getWidth() / 3;
|
||||||
|
@ -118,6 +106,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
canvas.rotate(view.getRotate(), locationX, locationY);
|
canvas.rotate(view.getRotate(), locationX, locationY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LatLon pointToNavigate = targetPoints.getPointToNavigate();
|
||||||
if (isLocationVisible(pointToNavigate)) {
|
if (isLocationVisible(pointToNavigate)) {
|
||||||
int marginX = targetPoint.getWidth() / 3;
|
int marginX = targetPoint.getWidth() / 3;
|
||||||
int marginY = 2 * targetPoint.getHeight() / 3;
|
int marginY = 2 * targetPoint.getHeight() / 3;
|
||||||
|
@ -145,22 +134,6 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public LatLon getPointToNavigate() {
|
|
||||||
return pointToNavigate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPointToNavigate(LatLon pointToNavigate, List<LatLon> intermediatePoints) {
|
|
||||||
this.pointToNavigate = pointToNavigate;
|
|
||||||
this.intermediatePoints.clear();
|
|
||||||
this.intermediatePoints.addAll(intermediatePoints);
|
|
||||||
view.refreshMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<LatLon> getIntermediatePoints() {
|
|
||||||
return intermediatePoints;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void destroyLayer() {
|
public void destroyLayer() {
|
||||||
|
|
||||||
|
@ -184,15 +157,11 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, List<Object> o) {
|
public void collectObjectsFromPoint(PointF point, List<Object> o) {
|
||||||
for(int i=0; i<=intermediatePoints.size(); i++) {
|
List<LatLon> intermediatePoints = map.getTargetPoints().getIntermediatePointsWithTarget();
|
||||||
LatLon latLon;
|
for (int i = 0; i < intermediatePoints.size(); i++) {
|
||||||
boolean target = i == intermediatePoints.size();
|
LatLon latLon = intermediatePoints.get(i);
|
||||||
if(target){
|
boolean target = i == intermediatePoints.size() - 1;
|
||||||
latLon = pointToNavigate;
|
if (latLon != null) {
|
||||||
} else {
|
|
||||||
latLon = intermediatePoints.get(i);
|
|
||||||
}
|
|
||||||
if(latLon != null) {
|
|
||||||
int ex = (int) point.x;
|
int ex = (int) point.x;
|
||||||
int ey = (int) point.y;
|
int ey = (int) point.y;
|
||||||
int x = view.getRotatedMapXForPoint(latLon.getLatitude(), latLon.getLongitude());
|
int x = view.getRotatedMapXForPoint(latLon.getLatitude(), latLon.getLongitude());
|
||||||
|
@ -202,7 +171,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
TargetPoint tp = new TargetPoint();
|
TargetPoint tp = new TargetPoint();
|
||||||
tp.location = latLon;
|
tp.location = latLon;
|
||||||
tp.intermediate = !target;
|
tp.intermediate = !target;
|
||||||
if(target) {
|
if (target) {
|
||||||
tp.name = view.getContext().getString(R.string.target_point, "");
|
tp.name = view.getContext().getString(R.string.target_point, "");
|
||||||
} else {
|
} else {
|
||||||
tp.name = (i + 1) + ". " + view.getContext().getString(R.string.intermediate_point, "");
|
tp.name = (i + 1) + ". " + view.getContext().getString(R.string.intermediate_point, "");
|
||||||
|
@ -262,10 +231,11 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
|
||||||
@Override
|
@Override
|
||||||
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
|
||||||
if (itemId == R.string.delete_target_point) {
|
if (itemId == R.string.delete_target_point) {
|
||||||
|
TargetPointsHelper targetPointsHelper = map.getMyApplication().getTargetPointsHelper();
|
||||||
if(a.intermediate) {
|
if(a.intermediate) {
|
||||||
map.removeIntermediatePoint(true, a.index);
|
targetPointsHelper.removeWayPoint(map, true, a.index);
|
||||||
} else {
|
} else {
|
||||||
map.navigateToPoint(null, true, -1);
|
targetPointsHelper.removeWayPoint(map, true, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
map.getMapLayers().getContextMenuLayer().setLocation(null, "");
|
map.getMapLayers().getContextMenuLayer().setLocation(null, "");
|
||||||
|
|
|
@ -10,6 +10,7 @@ import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.OsmandSettings.OsmandPreference;
|
import net.osmand.plus.OsmandSettings.OsmandPreference;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.routing.AlarmInfo;
|
import net.osmand.plus.routing.AlarmInfo;
|
||||||
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
||||||
|
@ -464,12 +465,13 @@ public class RouteInfoControls {
|
||||||
|
|
||||||
protected TextInfoControl createIntermediateDistanceControl(final MapActivity map, Paint paintText, Paint paintSubText) {
|
protected TextInfoControl createIntermediateDistanceControl(final MapActivity map, Paint paintText, Paint paintSubText) {
|
||||||
final OsmandMapTileView view = map.getMapView();
|
final OsmandMapTileView view = map.getMapView();
|
||||||
|
final TargetPointsHelper targets = map.getTargetPoints();
|
||||||
DistanceToPointInfoControl distanceControl = new DistanceToPointInfoControl(map, 0, paintText, paintSubText, map.getResources()
|
DistanceToPointInfoControl distanceControl = new DistanceToPointInfoControl(map, 0, paintText, paintSubText, map.getResources()
|
||||||
.getDrawable(R.drawable.info_intermediate), view) {
|
.getDrawable(R.drawable.info_intermediate), view) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void click(OsmandMapTileView view) {
|
protected void click(OsmandMapTileView view) {
|
||||||
if(map.getIntermediatePoints().size() > 1) {
|
if(targets.getIntermediatePoints().size() > 1) {
|
||||||
map.getMapActions().openIntermediatePointsDialog();
|
map.getMapActions().openIntermediatePointsDialog();
|
||||||
} else {
|
} else {
|
||||||
super.click(view);
|
super.click(view);
|
||||||
|
@ -478,7 +480,7 @@ public class RouteInfoControls {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LatLon getPointToNavigate() {
|
public LatLon getPointToNavigate() {
|
||||||
return map.getFirstIntermediatePoint();
|
return targets.getFirstIntermediatePoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue