diff --git a/OsmAnd/res/layout-land/map_hud_bottom.xml b/OsmAnd/res/layout-land/map_hud_bottom.xml
index a624492a3a..31ebf31aaa 100644
--- a/OsmAnd/res/layout-land/map_hud_bottom.xml
+++ b/OsmAnd/res/layout-land/map_hud_bottom.xml
@@ -193,38 +193,6 @@
android:src="@drawable/headliner_close"/>
-
-
-
-
-
-
-
-
-
-
-
@@ -274,6 +242,17 @@
+
+
-
diff --git a/OsmAnd/res/layout/map_hud_bottom.xml b/OsmAnd/res/layout/map_hud_bottom.xml
index 12067945c8..a401a300b4 100644
--- a/OsmAnd/res/layout/map_hud_bottom.xml
+++ b/OsmAnd/res/layout/map_hud_bottom.xml
@@ -233,7 +233,18 @@
-
+
+
@@ -251,36 +262,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"/>
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OsmAnd/res/layout/map_hud_top.xml b/OsmAnd/res/layout/map_hud_top.xml
index 27ce58301f..654bb611ec 100644
--- a/OsmAnd/res/layout/map_hud_top.xml
+++ b/OsmAnd/res/layout/map_hud_top.xml
@@ -647,16 +647,6 @@
-
diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
index 887027c7d9..13376edd5b 100644
--- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
@@ -907,27 +907,26 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
}
}
- public void recordVideo(final double lat, final double lon, final MapActivity mapActivity, final boolean forceExternal) {
- if (AV_EXTERNAL_RECORDER.get() || forceExternal) {
- captureVideoExternal(lat, lon, mapActivity);
- } else {
- if (ActivityCompat.checkSelfPermission(mapActivity, Manifest.permission.CAMERA)
- == PackageManager.PERMISSION_GRANTED
- && ActivityCompat.checkSelfPermission(mapActivity, Manifest.permission.RECORD_AUDIO)
- == PackageManager.PERMISSION_GRANTED) {
+ public void recordVideo(final double lat, final double lon, final MapActivity mapActivity,
+ final boolean forceExternal) {
+ if (ActivityCompat.checkSelfPermission(mapActivity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
+ && ActivityCompat.checkSelfPermission(mapActivity, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) {
+ if (AV_EXTERNAL_RECORDER.get() || forceExternal) {
+ captureVideoExternal(lat, lon, mapActivity);
+ } else {
openCamera();
if (cam != null) {
initRecMenu(AVActionType.REC_VIDEO, lat, lon);
recordVideoCamera(lat, lon, mapActivity);
}
- } else {
- actionLat = lat;
- actionLon = lon;
- ActivityCompat.requestPermissions(mapActivity,
- new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
- CAMERA_FOR_VIDEO_REQUEST_CODE);
}
+ } else {
+ actionLat = lat;
+ actionLon = lon;
+ ActivityCompat.requestPermissions(mapActivity, new String[] { Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO }, CAMERA_FOR_VIDEO_REQUEST_CODE);
}
+
}
public void recordVideoCamera(final double lat, final double lon, final MapActivity mapActivity) {
diff --git a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java
index 3ccc4f4cf9..321c697869 100644
--- a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java
+++ b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java
@@ -381,7 +381,7 @@ public class GpxUiHelper {
public void onClick(DialogInterface dialog, int which) {
int position = selectedPosition[0];
- if (position != -1) {
+ if (position != -1 && position < list.size()) {
if (showCurrentGpx && position == 0) {
callbackWithObject.processResult(null);
app.getSettings().LAST_SELECTED_GPX_TRACK_FOR_NEW_POINT.set(null);
diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java b/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java
index 90287ed9ba..afd6f7afd2 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RouteCalculationResult.java
@@ -5,6 +5,7 @@ import android.content.Context;
import net.osmand.Location;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
+import net.osmand.binary.RouteDataObject;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.plus.ApplicationMode;
@@ -13,6 +14,7 @@ import net.osmand.plus.R;
import net.osmand.plus.routing.AlarmInfo.AlarmInfoType;
import net.osmand.router.RouteSegmentResult;
import net.osmand.router.TurnType;
+import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import java.util.ArrayList;
@@ -74,7 +76,7 @@ public class RouteCalculationResult {
addMissingTurnsToRoute(locations, localDirections, params.start,params.end,
params.mode, params.ctx, params.leftSide);
// if there is no closest points to start - add it
- introduceFirstPointAndLastPoint(locations, localDirections, null, params.start, params.end);
+ introduceFirstPointAndLastPoint(locations, localDirections, null, params.start, params.end, params.ctx);
}
this.appMode = params.mode;
this.locations = Collections.unmodifiableList(locations);
@@ -99,7 +101,7 @@ public class RouteCalculationResult {
List locations = new ArrayList();
ArrayList alarms = new ArrayList();
List segments = convertVectorResult(computeDirections, locations, list, alarms, ctx);
- introduceFirstPointAndLastPoint(locations, computeDirections, segments, start, end);
+ introduceFirstPointAndLastPoint(locations, computeDirections, segments, start, end, ctx);
this.locations = Collections.unmodifiableList(locations);
this.segments = Collections.unmodifiableList(segments);
@@ -584,8 +586,9 @@ public class RouteCalculationResult {
* If beginning is too far from start point, then introduce GO Ahead
* @param end
*/
- private static void introduceFirstPointAndLastPoint(List locations, List directions, List segs, Location start,
- LatLon end) {
+ private static void introduceFirstPointAndLastPoint(List locations, List directions,
+ List segs, Location start, LatLon end,
+ OsmandApplication ctx) {
if (!locations.isEmpty() && locations.get(0).distanceTo(start) > 50) {
// add start point
locations.add(0, start);
@@ -619,6 +622,16 @@ public class RouteCalculationResult {
}
// Wrong AvgSpeed for the last turn can cause significantly wrong total travel time if calculated route ends on a GPX route segment (then last turn is where GPX is joined again)
RouteDirectionInfo info = new RouteDirectionInfo(lastDirInf != null ? lastDirInf.getAverageSpeed() : 1, TurnType.valueOf(type, false));
+ if (segs != null) {
+ RouteSegmentResult lastSegmentResult = segs.get(segs.size() - 1);
+ RouteDataObject routeDataObject = lastSegmentResult.getObject();
+ info.setRef(routeDataObject.getRef(ctx.getSettings().MAP_PREFERRED_LOCALE.get(),
+ ctx.getSettings().MAP_TRANSLITERATE_NAMES.get(), lastSegmentResult.isForwardDirection()));
+ info.setStreetName(routeDataObject.getName(ctx.getSettings().MAP_PREFERRED_LOCALE.get(),
+ ctx.getSettings().MAP_TRANSLITERATE_NAMES.get()));
+ info.setDestinationName(routeDataObject.getDestinationName(ctx.getSettings().MAP_PREFERRED_LOCALE.get(),
+ ctx.getSettings().MAP_TRANSLITERATE_NAMES.get(), lastSegmentResult.isForwardDirection()));
+ }
info.distance = 0;
info.afterLeftTime = 0;
info.routePointOffset = locations.size() - 1;
@@ -688,7 +701,19 @@ public class RouteCalculationResult {
}
return null;
}
-
+
+ public RouteSegmentResult getNextStreetSegmentResult() {
+ int cs = currentRoute > 0 ? currentRoute - 1 : 0;
+ while(cs < segments.size()) {
+ RouteSegmentResult segmentResult = segments.get(cs);
+ if (!Algorithms.isEmpty(segmentResult.getObject().getName())) {
+ return segmentResult;
+ }
+ cs++;
+ }
+ return null;
+ }
+
public List getUpcomingTunnel(float distToStart) {
int cs = currentRoute > 0 ? currentRoute - 1 : 0;
if(cs < segments.size()) {
diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
index 29006d7be0..0bf319b8ea 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
@@ -783,19 +783,40 @@ public class RoutingHelper {
}
RouteSegmentResult rs = getCurrentSegmentResult();
if(rs != null) {
- String nm = rs.getObject().getName(settings.MAP_PREFERRED_LOCALE.get(), settings.MAP_TRANSLITERATE_NAMES.get());
- String rf = rs.getObject().getRef(settings.MAP_PREFERRED_LOCALE.get(), settings.MAP_TRANSLITERATE_NAMES.get(), rs.isForwardDirection());
- String dn = rs.getObject().getDestinationName(settings.MAP_PREFERRED_LOCALE.get(),
- settings.MAP_TRANSLITERATE_NAMES.get(), rs.isForwardDirection());
- return formatStreetName(nm, rf, dn, "»");
+ String name = getRouteSegmentStreetName(rs);
+ if (!Algorithms.isEmpty(name)) {
+ return name;
+ }
+ }
+ rs = getNextStreetSegmentResult();
+ if(rs != null) {
+ String name = getRouteSegmentStreetName(rs);
+ if (!Algorithms.isEmpty(name)) {
+ if(next != null) {
+ next[0] = TurnType.valueOf(TurnType.C, false);
+ }
+ return name;
+ }
}
return null;
}
- public RouteSegmentResult getCurrentSegmentResult() {
+ private String getRouteSegmentStreetName(RouteSegmentResult rs) {
+ String nm = rs.getObject().getName(settings.MAP_PREFERRED_LOCALE.get(), settings.MAP_TRANSLITERATE_NAMES.get());
+ String rf = rs.getObject().getRef(settings.MAP_PREFERRED_LOCALE.get(), settings.MAP_TRANSLITERATE_NAMES.get(), rs.isForwardDirection());
+ String dn = rs.getObject().getDestinationName(settings.MAP_PREFERRED_LOCALE.get(),
+ settings.MAP_TRANSLITERATE_NAMES.get(), rs.isForwardDirection());
+ return formatStreetName(nm, rf, dn, "»");
+ }
+
+ public RouteSegmentResult getCurrentSegmentResult() {
return route.getCurrentSegmentResult();
}
+ public RouteSegmentResult getNextStreetSegmentResult() {
+ return route.getNextStreetSegmentResult();
+ }
+
public List getUpcomingTunnel(float distToStart) {
return route.getUpcomingTunnel(distToStart);
}