diff --git a/OsmAnd/res/layout/package_delivered.xml b/OsmAnd/res/layout/package_delivered.xml
new file mode 100644
index 0000000000..61ce46fb05
--- /dev/null
+++ b/OsmAnd/res/layout/package_delivered.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/values/routepoints.xml b/OsmAnd/res/values/routepoints.xml
index 98d1a295e3..f18c7f3108 100644
--- a/OsmAnd/res/values/routepoints.xml
+++ b/OsmAnd/res/values/routepoints.xml
@@ -12,4 +12,5 @@
Route points
Route Points
Navigate dialog
+ Was the package delivered?
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index 18d2358dce..45bb9660ae 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -711,4 +711,8 @@ public class MapActivity extends AccessibleActivity {
public void refreshMap() {
getMapView().refreshMap();
}
+
+ public View getLayout() {
+ return getWindow().getDecorView().findViewById(android.R.id.content);
+ }
}
diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsActivity.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsActivity.java
index 3e8acd2d04..f777fdcd4c 100644
--- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsActivity.java
+++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsActivity.java
@@ -192,7 +192,11 @@ public class RoutePointsActivity extends OsmandListActivity {
if (point.isVisited()) {
holder.image.setImageResource(R.drawable.ic_action_ok_dark);
- holder.name.setTextColor(getResources().getColor(R.color.osmbug_closed));
+ if (point.isDelivered()){
+ holder.name.setTextColor(getResources().getColor(R.color.osmbug_closed));
+ } else {
+ holder.name.setTextColor(getResources().getColor(R.color.color_invalid));
+ }
holder.dateOrDistance.setTextColor(getResources().getColor(R.color.color_unknown));
holder.dateOrDistance.setText(point.getTime());
holder.dateOrDistance.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
@@ -273,7 +277,13 @@ public class RoutePointsActivity extends OsmandListActivity {
finish();
} else if (menuItem.getItemId() == AS_VISITED_ID) {
// inverts selection state of item
+ if (!rp.isVisited()){
+ rp.setDelivered(true);
+ } else if (rp.isDelivered()){
+ rp.setDelivered(false);
+ }
plugin.getCurrentRoute().markPoint(rp, !rp.isVisited());
+
saveGPXAsync();
prepareView();
}
diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java
index 7df13be7e8..abdea19a7f 100644
--- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java
+++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java
@@ -78,17 +78,17 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye
public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) {
if (itemId == R.string.mark_as_not_visited){
plugin.getCurrentRoute().markPoint(point,false);
- plugin.saveGPXAsync();
+ plugin.saveCurrentRoute();
} else if (itemId == R.string.mark_as_visited) {
plugin.getCurrentRoute().markPoint(point, true);
- plugin.saveGPXAsync();
+ plugin.saveCurrentRoute();
} else if (itemId == R.string.mark_as_current){
plugin.getCurrentRoute().markPoint(point, false);
plugin.getCurrentRoute().navigateToPoint(point);
- plugin.saveGPXAsync();
+ plugin.saveCurrentRoute();
} else if (itemId == R.string.navigate_to_next){
plugin.getCurrentRoute().navigateToNextPoint();
- plugin.saveGPXAsync();
+ plugin.saveCurrentRoute();
}
map.refreshMap();
}
diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java
index 2948fc541d..36667e9a4e 100644
--- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsPlugin.java
@@ -1,12 +1,14 @@
package net.osmand.plus.routepointsnavigation;
import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import android.app.ActionBar;
+import android.content.Context;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.widget.Button;
+import android.widget.FrameLayout;
import net.osmand.data.LatLon;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.GPXUtilities;
@@ -38,11 +40,15 @@ public class RoutePointsPlugin extends OsmandPlugin {
public static final String ID = "osmand.route.stepsPlugin";
private static final String VISITED_KEY = "VISITED_KEY";
+ private static final String DELIVERED_KEY = "DELIVERED_KEY";
private OsmandApplication app;
private TextInfoWidget routeStepsControl;
private SelectedRouteGpxFile currentRoute;
+ private View deliveredView;
+ private MapActivity mapActivity;
+
private RoutePointsLayer routePointsLayer;
public RoutePointsPlugin(OsmandApplication app) {
@@ -63,16 +69,43 @@ public class RoutePointsPlugin extends OsmandPlugin {
}
}
+ private void prepareDeliveredView() {
+ LayoutInflater vi = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ deliveredView = vi.inflate(R.layout.package_delivered, null);
+
+ Button btnY = (Button) deliveredView.findViewById(R.id.delivered_yes);
+
+ btnY.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ currentRoute.navigateToNextPoint(true);
+ FrameLayout layout = (FrameLayout) mapActivity.getLayout();
+ layout.removeView(deliveredView);
+ }
+ });
+
+ Button btnN = (Button) deliveredView.findViewById(R.id.delivered_no);
+
+ btnN.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ currentRoute.navigateToNextPoint(false);
+ FrameLayout layout = (FrameLayout) mapActivity.getLayout();
+ layout.removeView(deliveredView);
+ }
+ });
+ }
+
@Override
public boolean destinationReached() {
if (currentRoute != null) {
- boolean naviateToNextPoint = currentRoute.navigateToNextPoint();
-
- if (naviateToNextPoint) {
- return false;
- }
+ FrameLayout layout = (FrameLayout) mapActivity.getLayout();
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
+ params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
+ layout.addView(deliveredView, params);
}
+
return true;
}
@@ -109,7 +142,8 @@ public class RoutePointsPlugin extends OsmandPlugin {
@Override
public void registerLayers(MapActivity activity) {
super.registerLayers(activity);
-
+ mapActivity = activity;
+ prepareDeliveredView();
if (routePointsLayer != null) {
activity.getMapView().removeLayer(routePointsLayer);
}
@@ -121,7 +155,7 @@ public class RoutePointsPlugin extends OsmandPlugin {
@Override
public void updateLayers(OsmandMapTileView mapView, MapActivity activity) {
- if (routePointsLayer == null){
+ if (routePointsLayer == null) {
registerLayers(activity);
}
@@ -139,6 +173,12 @@ public class RoutePointsPlugin extends OsmandPlugin {
}
}
+ public void saveCurrentRoute(){
+ if (currentRoute != null){
+ currentRoute.saveGPXAsync();
+ }
+ }
+
private TextInfoWidget createRouteStepsInfoControl(final MapActivity map, Paint paintText, Paint paintSubText) {
TextInfoWidget routeStepsControl = new TextInfoWidget(map, 0, paintText, paintSubText) {
@@ -172,6 +212,7 @@ public class RoutePointsPlugin extends OsmandPlugin {
int gpxOrder;
long visitedTime; // 0 not visited
WptPt wpt;
+ boolean delivered;
public String getName() {
return wpt.name;
@@ -189,6 +230,8 @@ public class RoutePointsPlugin extends OsmandPlugin {
return visitedTime != 0;
}
+ public boolean isDelivered() { return delivered;}
+
public int getGpxOrder() {
return gpxOrder;
}
@@ -216,6 +259,11 @@ public class RoutePointsPlugin extends OsmandPlugin {
return new LatLon(wpt.lat, wpt.lon);
}
+ public void setDelivered(boolean d) {
+ wpt.getExtensionsToWrite().put(DELIVERED_KEY, String.valueOf(d));
+ this.delivered = d;
+ }
+
public void setVisitedTime(long currentTimeMillis) {
visitedTime = currentTimeMillis;
wpt.getExtensionsToWrite().put(VISITED_KEY, visitedTime + "");
@@ -227,7 +275,6 @@ public class RoutePointsPlugin extends OsmandPlugin {
private GPXUtilities.GPXFile gpx;
private List currentPoints = new ArrayList();
-
public SelectedRouteGpxFile(GPXUtilities.GPXFile gpx) {
this.gpx = gpx;
parseGPXFile(gpx);
@@ -276,23 +323,27 @@ public class RoutePointsPlugin extends OsmandPlugin {
}
public boolean navigateToNextPoint() {
- if (!currentPoints.isEmpty()) {
- RoutePoint rp = currentPoints.get(0);
- if (rp.isNextNavigate) {
- rp.setVisitedTime(System.currentTimeMillis());
- rp.isNextNavigate = false;
- sortPoints();
- }
- RoutePoint first = currentPoints.get(0);
- if (!first.isVisited()) {
- app.getTargetPointsHelper().navigateToPoint(first.getPoint(), true, -1, first.getName());
- first.isNextNavigate = true;
- return true;
- } else {
- app.getTargetPointsHelper().clearPointToNavigate(true);
- }
+ if (currentPoints.isEmpty()) {
+ return false;
+ }
+
+ RoutePoint rp = currentPoints.get(0);
+ if (rp.isNextNavigate) {
+ rp.setVisitedTime(System.currentTimeMillis());
+ rp.isNextNavigate = false;
+ sortPoints();
+ }
+
+ RoutePoint first = currentPoints.get(0);
+ if (!first.isVisited()) {
+ app.getTargetPointsHelper().navigateToPoint(first.getPoint(), true, -1, first.getName());
+ first.isNextNavigate = true;
+ return true;
+ } else {
+ app.getTargetPointsHelper().clearPointToNavigate(true);
}
return false;
+
}
private void sortPoints() {
@@ -334,6 +385,9 @@ public class RoutePointsPlugin extends OsmandPlugin {
RoutePoint rtp = new RoutePoint();
rtp.gpxOrder = i;
rtp.wpt = wptPt;
+ String delivered = wptPt.getExtensionsToRead().get(DELIVERED_KEY);
+ rtp.delivered = Boolean.parseBoolean(delivered);
+
String time = wptPt.getExtensionsToRead().get(VISITED_KEY);
try {
rtp.visitedTime = Long.parseLong(time);
@@ -408,24 +462,36 @@ public class RoutePointsPlugin extends OsmandPlugin {
}
return null;
}
- }
-
- public void saveGPXAsync() {
- new AsyncTask() {
-
- protected void onPreExecute() {
+
+ public boolean navigateToNextPoint(boolean delivered) {
+ if (currentPoints.isEmpty()) {
+ return false;
}
- @Override
- protected Void doInBackground(RoutePointsPlugin.SelectedRouteGpxFile... params) {
- if(getCurrentRoute() != null) {
- getCurrentRoute().saveFile();
+ RoutePoint rp = currentPoints.get(0);
+ if (rp.isNextNavigate) {
+ rp.setDelivered(delivered);
+ return navigateToNextPoint();
+ }
+
+ return false;
+ }
+
+ public void saveGPXAsync() {
+ new AsyncTask() {
+
+ protected void onPreExecute() {
}
- return null;
- }
- protected void onPostExecute(Void result) {
- }
- }.execute(getCurrentRoute());
+ @Override
+ protected Void doInBackground(RoutePointsPlugin.SelectedRouteGpxFile... params) {
+ saveFile();
+ return null;
+ }
+
+ protected void onPostExecute(Void result) {
+ }
+ }.execute(getCurrentRoute());
+ }
}
}