Merge pull request #9261 from osmandapp/gpx_context_menu
Gpx context menu fixes
This commit is contained in:
commit
86378cbc93
8 changed files with 54 additions and 31 deletions
|
@ -957,6 +957,24 @@ public class GPXUtilities {
|
|||
return ls;
|
||||
}
|
||||
|
||||
public static QuadRect calculateBounds(List<WptPt> pts) {
|
||||
QuadRect trackBounds = new QuadRect(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,
|
||||
Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
|
||||
updateBounds(trackBounds, pts, 0);
|
||||
|
||||
return trackBounds;
|
||||
}
|
||||
|
||||
public static void updateBounds(QuadRect trackBounds, List<WptPt> pts, int startIndex) {
|
||||
for (int i = startIndex; i < pts.size(); i++) {
|
||||
WptPt pt = pts.get(i);
|
||||
trackBounds.right = Math.max(trackBounds.right, pt.lon);
|
||||
trackBounds.left = Math.min(trackBounds.left, pt.lon);
|
||||
trackBounds.top = Math.max(trackBounds.top, pt.lat);
|
||||
trackBounds.bottom = Math.min(trackBounds.bottom, pt.lat);
|
||||
}
|
||||
}
|
||||
|
||||
public static class GPXFile extends GPXExtensions {
|
||||
public String author;
|
||||
public Metadata metadata;
|
||||
|
|
|
@ -289,6 +289,10 @@ public class PointDescription {
|
|||
return POINT_TYPE_CUSTOM_POI_FILTER.equals(type);
|
||||
}
|
||||
|
||||
public boolean isGpxPoint() {
|
||||
return POINT_TYPE_GPX.equals(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
|
|
|
@ -673,6 +673,11 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
}
|
||||
if (trackDetailsMenu.isVisible()) {
|
||||
trackDetailsMenu.hide(true);
|
||||
if (mapContextMenu.isActive() && mapContextMenu.getPointDescription() != null
|
||||
&& mapContextMenu.getPointDescription().isGpxPoint()) {
|
||||
mapContextMenu.show();
|
||||
return;
|
||||
}
|
||||
if (prevActivityIntent == null) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ public class SelectedGpxMenuController extends MenuController {
|
|||
public void buttonPressed() {
|
||||
Intent intent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getTrackActivity());
|
||||
intent.putExtra(TrackActivity.TRACK_FILE_NAME, item.getGpxFile().path);
|
||||
intent.putExtra(TrackActivity.OPEN_TRACKS_LIST, true);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
mapActivity.startActivity(intent);
|
||||
}
|
||||
|
|
|
@ -212,8 +212,8 @@ public class TrackDetailsMenu {
|
|||
}
|
||||
}
|
||||
|
||||
public void updateInfo(final View main) {
|
||||
updateView(main);
|
||||
public void updateInfo(final View main, boolean forceFitTrackOnMap) {
|
||||
updateView(main, forceFitTrackOnMap);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -485,7 +485,7 @@ public class TrackDetailsMenu {
|
|||
return xAxisPoints;
|
||||
}
|
||||
|
||||
private void updateView(final View parentView) {
|
||||
private void updateView(final View parentView, boolean forceFitTrackOnMap) {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
GpxDisplayItem gpxItem = getGpxItem();
|
||||
if (mapActivity == null || gpxItem == null) {
|
||||
|
@ -724,7 +724,7 @@ public class TrackDetailsMenu {
|
|||
xAxisArrow.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
refreshChart(chart, true);
|
||||
refreshChart(chart, forceFitTrackOnMap);
|
||||
}
|
||||
|
||||
private void updateChart(LineChart chart) {
|
||||
|
|
|
@ -23,6 +23,7 @@ import net.osmand.plus.R;
|
|||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||
|
||||
public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
|
||||
public static final String TAG = "TrackDetailsMenuFragment";
|
||||
|
@ -91,14 +92,20 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
|
|||
});
|
||||
}
|
||||
|
||||
updateInfo();
|
||||
MapContextMenu contextMenu = mapActivity.getContextMenu();
|
||||
final boolean forceFitTrackOnMap;
|
||||
if (contextMenu.isActive()) {
|
||||
forceFitTrackOnMap = !(contextMenu.getPointDescription() != null && contextMenu.getPointDescription().isGpxPoint());
|
||||
} else {
|
||||
forceFitTrackOnMap = true;
|
||||
}
|
||||
updateInfo(forceFitTrackOnMap);
|
||||
|
||||
ViewTreeObserver vto = mainView.getViewTreeObserver();
|
||||
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
|
||||
ViewTreeObserver obs = mainView.getViewTreeObserver();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||
obs.removeOnGlobalLayoutListener(this);
|
||||
|
@ -106,7 +113,7 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
|
|||
obs.removeGlobalOnLayoutListener(this);
|
||||
}
|
||||
if (getMapActivity() != null) {
|
||||
updateInfo();
|
||||
updateInfo(forceFitTrackOnMap);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -165,7 +172,11 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
|
|||
}
|
||||
|
||||
public void updateInfo() {
|
||||
menu.updateInfo(mainView);
|
||||
updateInfo(true);
|
||||
}
|
||||
|
||||
public void updateInfo(boolean forceFitTrackOnMap) {
|
||||
menu.updateInfo(mainView, forceFitTrackOnMap);
|
||||
applyDayNightMode();
|
||||
}
|
||||
|
||||
|
|
|
@ -604,8 +604,8 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
|
|||
for (SelectedGpxFile selectedGpxFile : selectedGpxFiles) {
|
||||
List<TrkSegment> segments = selectedGpxFile.getPointsToDisplay();
|
||||
for (TrkSegment segment : segments) {
|
||||
boolean nearSegment = isPointNearSegment(tb, segment.points, r, mx, my);
|
||||
if (nearSegment) {
|
||||
QuadRect trackBounds = GPXUtilities.calculateBounds(segment.points);
|
||||
if (QuadRect.trivialOverlap(tb.getLatLonBounds(), trackBounds) && isPointNearSegment(tb, segment.points, r, mx, my)) {
|
||||
res.add(selectedGpxFile);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.graphics.Paint;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.data.QuadRect;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
|
@ -61,10 +62,10 @@ public class Renderable {
|
|||
protected AsynchronousResampler culler = null; // The currently active resampler
|
||||
protected Paint paint = null; // MUST be set by 'updateLocalPaint' before use
|
||||
|
||||
public RenderableSegment(List <WptPt> points, double segmentSize) {
|
||||
public RenderableSegment(List<WptPt> points, double segmentSize) {
|
||||
this.points = points;
|
||||
calculateBounds(points);
|
||||
this.segmentSize = segmentSize;
|
||||
trackBounds = GPXUtilities.calculateBounds(points);
|
||||
}
|
||||
|
||||
protected void updateLocalPaint(Paint p) {
|
||||
|
@ -90,23 +91,6 @@ public class Renderable {
|
|||
}
|
||||
}
|
||||
|
||||
private void calculateBounds(List<WptPt> pts) {
|
||||
trackBounds = new QuadRect(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,
|
||||
Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
|
||||
updateBounds(pts, 0);
|
||||
}
|
||||
|
||||
protected void updateBounds(List<WptPt> pts, int startIndex) {
|
||||
pointSize = pts.size();
|
||||
for (int i = startIndex; i < pointSize; i++) {
|
||||
WptPt pt = pts.get(i);
|
||||
trackBounds.right = Math.max(trackBounds.right, pt.lon);
|
||||
trackBounds.left = Math.min(trackBounds.left, pt.lon);
|
||||
trackBounds.top = Math.max(trackBounds.top, pt.lat);
|
||||
trackBounds.bottom = Math.min(trackBounds.bottom, pt.lat);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRDP(List<WptPt> cull) {
|
||||
culled = cull;
|
||||
}
|
||||
|
@ -198,7 +182,9 @@ public class Renderable {
|
|||
|
||||
@Override public void drawSegment(double zoom, Paint p, Canvas canvas, RotatedTileBox tileBox) {
|
||||
if (points.size() != pointSize) {
|
||||
updateBounds(points, pointSize);
|
||||
int prevSize = pointSize;
|
||||
pointSize = points.size();
|
||||
GPXUtilities.updateBounds(trackBounds, points, prevSize);
|
||||
}
|
||||
drawSingleSegment(zoom, p, canvas, tileBox);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue