This commit is contained in:
crimean 2019-04-07 16:25:35 +03:00
parent 2611dbf829
commit d022bec9a2
6 changed files with 261 additions and 161 deletions

View file

@ -165,6 +165,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
private MapViewTrackingUtilities mapViewTrackingUtilities;
private static MapContextMenu mapContextMenu = new MapContextMenu();
private static MapRouteInfoMenu mapRouteInfoMenu = new MapRouteInfoMenu();
private static TrackDetailsMenu trackDetailsMenu = new TrackDetailsMenu();
private static Intent prevActivityIntent = null;
private List<ActivityResultListener> activityResultListeners = new ArrayList<>();
@ -228,6 +229,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
mapViewTrackingUtilities = app.getMapViewTrackingUtilities();
mapContextMenu.setMapActivity(this);
mapRouteInfoMenu.setMapActivity(this);
trackDetailsMenu.setMapActivity(this);
super.onCreate(savedInstanceState);
// Full screen is not used here
@ -345,8 +347,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
if (removeFragment(PlanRouteFragment.TAG)) {
app.getMapMarkersHelper().getPlanRouteContext().setFragmentVisible(true);
}
if (TrackDetailsMenu.isVisible()) {
mapLayers.getMapControlsLayer().getTrackDetailsMenu().hide();
if (trackDetailsMenu.isVisible()) {
trackDetailsMenu.dismiss();
}
removeFragment(ImportGpxBottomSheetDialogFragment.TAG);
removeFragment(AdditionalActionsBottomSheetDialogFragment.TAG);
@ -587,8 +589,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
showQuickSearch(ShowQuickSearchMode.CURRENT, false);
return;
}
if (TrackDetailsMenu.isVisible()) {
getMapLayers().getMapControlsLayer().getTrackDetailsMenu().hide();
if (trackDetailsMenu.isVisible()) {
trackDetailsMenu.hide();
if (prevActivityIntent == null) {
return;
}
@ -1094,6 +1096,9 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
dashboardOnMap.hideDashboard();
}
}
if (trackDetailsMenu.isVisible()) {
trackDetailsMenu.show();
}
if (searchRequestToShow != null) {
showQuickSearch(searchRequestToShow);
}
@ -1124,7 +1129,6 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
//mapContextMenu.setMapZoom(settings.getMapZoomToShow());
mapContextMenu.setMapZoom(tb.getZoom());
if (toShow instanceof GpxDisplayItem) {
TrackDetailsMenu trackDetailsMenu = mapLayers.getMapControlsLayer().getTrackDetailsMenu();
trackDetailsMenu.setGpxItem((GpxDisplayItem) toShow);
trackDetailsMenu.show();
} else if (mapRouteInfoMenu.isVisible()) {
@ -1269,6 +1273,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
super.onDestroy();
mapContextMenu.setMapActivity(null);
mapRouteInfoMenu.setMapActivity(null);
trackDetailsMenu.setMapActivity(null);
unregisterReceiver(screenOffReceiver);
app.getAidlApi().onDestroyMapActivity(this);
FailSafeFuntions.quitRouteRestoreDialog();
@ -1596,6 +1601,11 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
return mapRouteInfoMenu;
}
@NonNull
public TrackDetailsMenu getTrackDetailsMenu() {
return trackDetailsMenu;
}
public void openDrawer() {
mapActions.updateDrawerMenu();
boolean animate = !settings.DO_NOT_USE_ANIMATIONS.get();

View file

@ -3,7 +3,7 @@ package net.osmand.plus.mapcontextmenu.other;
import android.content.Context;
import android.graphics.Matrix;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.annotation.Nullable;
import android.support.v7.widget.PopupMenu;
import android.view.MenuItem;
import android.view.MotionEvent;
@ -21,14 +21,14 @@ import com.github.mikephil.charting.listener.OnChartGestureListener;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import net.osmand.AndroidUtils;
import net.osmand.data.LatLon;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.GPXUtilities;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.GPXUtilities.GPXTrackAnalysis;
import net.osmand.GPXUtilities.TrkSegment;
import net.osmand.GPXUtilities.WptPt;
import net.osmand.data.LatLon;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
@ -43,7 +43,6 @@ import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@ -51,42 +50,114 @@ import java.util.List;
public class TrackDetailsMenu {
@Nullable
private MapActivity mapActivity;
@Nullable
private GpxDisplayItem gpxItem;
@Nullable
private TrackDetailsBarController toolbarController;
@Nullable
private TrkSegment segment;
@Nullable
private TrackChartPoints trackChartPoints;
@Nullable
private List<WptPt> xAxisPoints;
private int topMarginPx;
private boolean visible;
private boolean hidding;
private static boolean VISIBLE;
public TrackDetailsMenu(@NonNull MapActivity mapActivity) {
this.mapActivity = mapActivity;
topMarginPx = AndroidUtils.dpToPx(mapActivity, 48f);
public TrackDetailsMenu() {
}
@Nullable
public MapActivity getMapActivity() {
return mapActivity;
}
public void setMapActivity(@Nullable MapActivity mapActivity) {
this.mapActivity = mapActivity;
if (mapActivity != null) {
if (topMarginPx == 0) {
topMarginPx = AndroidUtils.dpToPx(mapActivity, 48f);
}
}
}
@Nullable
public GpxDisplayItem getGpxItem() {
return gpxItem;
}
public void setGpxItem(GpxDisplayItem gpxItem) {
public void setGpxItem(@NonNull GpxDisplayItem gpxItem) {
this.gpxItem = gpxItem;
}
public static boolean isVisible() {
return VISIBLE;
public boolean isVisible() {
return visible;
}
public void show() {
if (!VISIBLE) {
VISIBLE = true;
MapActivity mapActivity = getMapActivity();
if (mapActivity != null && getGpxItem() != null) {
visible = true;
TrackDetailsMenuFragment.showInstance(mapActivity);
}
}
public void dismiss() {
TrackDetailsMenuFragment fragment = getMenuFragment();
if (fragment != null) {
fragment.dismiss();
}
}
public void hide() {
TrackDetailsMenuFragment fragment = getMenuFragment();
if (fragment != null) {
hidding = true;
fragment.dismiss();
} else {
segment = null;
trackChartPoints = null;
}
}
public void update() {
TrackDetailsMenuFragment fragment = getMenuFragment();
if (fragment != null) {
fragment.updateInfo();
}
}
private TrackDetailsMenuFragment getMenuFragment() {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
TrackDetailsMenuFragment fragment = (TrackDetailsMenuFragment) mapActivity.getSupportFragmentManager()
.findFragmentByTag(TrackDetailsMenuFragment.TAG);
if (fragment != null && !fragment.isDetached()) {
return fragment;
}
}
return null;
}
public void onShow() {
MapActivity mapActivity = getMapActivity();
GpxDisplayItem gpxItem = getGpxItem();
if (mapActivity != null && gpxItem != null) {
OsmandApplication app = mapActivity.getMyApplication();
GPXFile groupGpx = gpxItem.group.getGpx();
if (groupGpx != null) {
gpxItem.wasHidden = app.getSelectedGpxHelper().getSelectedFileByPath(groupGpx.path) == null;
app.getSelectedGpxHelper().setGpxFileToDisplay(groupGpx);
}
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
if (!portrait) {
mapActivity.getMapView().setMapPositionX(1);
} else {
toolbarController = new TrackDetailsBarController();
if (gpxItem != null && gpxItem.group != null) {
TrackDetailsBarController toolbarController = new TrackDetailsBarController();
this.toolbarController = toolbarController;
if (gpxItem.group != null) {
toolbarController.setTitle(gpxItem.group.getGpxName());
} else {
toolbarController.setTitle(mapActivity.getString(R.string.rendering_category_details));
@ -94,7 +165,10 @@ public class TrackDetailsMenu {
toolbarController.setOnBackButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mapActivity.onBackPressed();
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
mapActivity.onBackPressed();
}
}
});
toolbarController.setOnCloseButtonClickListener(new View.OnClickListener() {
@ -105,55 +179,34 @@ public class TrackDetailsMenu {
});
mapActivity.showTopToolbar(toolbarController);
}
mapActivity.refreshMap();
TrackDetailsMenuFragment.showInstance(mapActivity);
mapActivity.getMapLayers().getContextMenuLayer().enterGpxDetailsMode();
}
}
public void hide() {
WeakReference<TrackDetailsMenuFragment> fragmentRef = findMenuFragment();
if (fragmentRef != null) {
fragmentRef.get().dismiss();
} else {
segment = null;
VISIBLE = false;
}
}
public void update() {
WeakReference<TrackDetailsMenuFragment> fragmentRef = findMenuFragment();
if (fragmentRef != null) {
fragmentRef.get().updateInfo();
}
}
private WeakReference<TrackDetailsMenuFragment> findMenuFragment() {
Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag(TrackDetailsMenuFragment.TAG);
if (fragment != null && !fragment.isDetached()) {
return new WeakReference<>((TrackDetailsMenuFragment) fragment);
} else {
return null;
}
}
public void onDismiss() {
VISIBLE = false;
if (gpxItem != null && !gpxItem.route && gpxItem.wasHidden && gpxItem.group != null && gpxItem.group.getGpx() != null) {
mapActivity.getMyApplication().getSelectedGpxHelper().selectGpxFile(gpxItem.group.getGpx(), false, false);
GpxDisplayItem gpxItem = getGpxItem();
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
if (gpxItem != null && !gpxItem.route && gpxItem.wasHidden && gpxItem.group != null && gpxItem.group.getGpx() != null) {
mapActivity.getMyApplication().getSelectedGpxHelper().selectGpxFile(gpxItem.group.getGpx(), false, false);
}
TrackDetailsBarController toolbarController = this.toolbarController;
if (toolbarController != null) {
mapActivity.hideTopToolbar(toolbarController);
}
mapActivity.getMapLayers().getContextMenuLayer().exitGpxDetailsMode();
mapActivity.getMapLayers().getGpxLayer().setTrackChartPoints(null);
mapActivity.getMapLayers().getMapInfoLayer().setTrackChartPoints(null);
mapActivity.getMapView().setMapPositionX(0);
mapActivity.getMapView().refreshMap();
}
if (toolbarController != null) {
mapActivity.hideTopToolbar(toolbarController);
if (hidding) {
hidding = false;
visible = false;
segment = null;
trackChartPoints = null;
}
mapActivity.getMapLayers().getContextMenuLayer().exitGpxDetailsMode();
mapActivity.getMapLayers().getGpxLayer().setTrackChartPoints(null);
mapActivity.getMapLayers().getMapInfoLayer().setTrackChartPoints(null);
mapActivity.getMapView().setMapPositionX(0);
mapActivity.getMapView().refreshMap();
segment = null;
trackChartPoints = null;
}
public void updateInfo(final View main) {
@ -161,9 +214,11 @@ public class TrackDetailsMenu {
}
private TrkSegment getTrackSegment(LineChart chart) {
TrkSegment segment = this.segment;
if (segment == null) {
List<ILineDataSet> ds = chart.getLineData().getDataSets();
if (ds != null && ds.size() > 0) {
GpxDisplayItem gpxItem = getGpxItem();
if (ds != null && ds.size() > 0 && gpxItem != null) {
for (GPXUtilities.Track t : gpxItem.group.getGpx().tracks) {
for (TrkSegment s : t.segments) {
if (s.points.size() > 0 && s.points.get(0).equals(gpxItem.analysis.locationStart)) {
@ -175,6 +230,7 @@ public class TrackDetailsMenu {
break;
}
}
this.segment = segment;
}
}
return segment;
@ -183,11 +239,12 @@ public class TrackDetailsMenu {
private WptPt getPoint(LineChart chart, float pos) {
WptPt wpt = null;
List<ILineDataSet> ds = chart.getLineData().getDataSets();
if (ds != null && ds.size() > 0) {
GpxDisplayItem gpxItem = getGpxItem();
if (ds != null && ds.size() > 0 && gpxItem != null) {
TrkSegment segment = getTrackSegment(chart);
OrderedLineDataSet dataSet = (OrderedLineDataSet) ds.get(0);
if (gpxItem.chartAxisType == GPXDataSetAxisType.TIME ||
gpxItem.chartAxisType == GPXDataSetAxisType.TIMEOFDAY) {
gpxItem.chartAxisType == GPXDataSetAxisType.TIMEOFDAY) {
float time = pos * 1000;
for (WptPt p : segment.points) {
if (p.time - gpxItem.analysis.startTime >= time) {
@ -220,7 +277,8 @@ public class TrackDetailsMenu {
double left = 0, right = 0;
double top = 0, bottom = 0;
List<ILineDataSet> ds = chart.getLineData().getDataSets();
if (ds != null && ds.size() > 0) {
GpxDisplayItem gpxItem = getGpxItem();
if (ds != null && ds.size() > 0 && gpxItem != null) {
TrkSegment segment = getTrackSegment(chart);
OrderedLineDataSet dataSet = (OrderedLineDataSet) ds.get(0);
if (gpxItem.chartAxisType == GPXDataSetAxisType.TIME || gpxItem.chartAxisType == GPXDataSetAxisType.TIMEOFDAY) {
@ -274,45 +332,55 @@ public class TrackDetailsMenu {
private void fitTrackOnMap(LineChart chart, LatLon location, boolean forceFit) {
QuadRect rect = getRect(chart, chart.getLowestVisibleX(), chart.getHighestVisibleX());
RotatedTileBox tb = mapActivity.getMapView().getCurrentRotatedTileBox().copy();
int tileBoxWidthPx = 0;
int tileBoxHeightPx = 0;
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
RotatedTileBox tb = mapActivity.getMapView().getCurrentRotatedTileBox().copy();
int tileBoxWidthPx = 0;
int tileBoxHeightPx = 0;
WeakReference<TrackDetailsMenuFragment> fragmentRef = findMenuFragment();
if (fragmentRef != null) {
TrackDetailsMenuFragment f = fragmentRef.get();
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
if (!portrait) {
tileBoxWidthPx = tb.getPixWidth() - f.getWidth();
} else {
tileBoxHeightPx = tb.getPixHeight() - f.getHeight();
TrackDetailsMenuFragment fragment = getMenuFragment();
if (fragment != null) {
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
if (!portrait) {
tileBoxWidthPx = tb.getPixWidth() - fragment.getWidth();
} else {
tileBoxHeightPx = tb.getPixHeight() - fragment.getHeight();
}
}
}
if (tileBoxHeightPx > 0 || tileBoxWidthPx > 0) {
if (forceFit) {
mapActivity.getMapView().fitRectToMap(rect.left, rect.right, rect.top, rect.bottom,
tileBoxWidthPx, tileBoxHeightPx, topMarginPx);
} else if (location != null &&
!mapActivity.getMapView().getTileBox(tileBoxWidthPx, tileBoxHeightPx, topMarginPx).containsLatLon(location)) {
boolean animating = mapActivity.getMapView().getAnimatedDraggingThread().isAnimating();
mapActivity.getMapView().fitLocationToMap(location.getLatitude(), location.getLongitude(),
mapActivity.getMapView().getZoom(), tileBoxWidthPx, tileBoxHeightPx, topMarginPx, !animating);
} else {
mapActivity.refreshMap();
if (tileBoxHeightPx > 0 || tileBoxWidthPx > 0) {
if (forceFit) {
mapActivity.getMapView().fitRectToMap(rect.left, rect.right, rect.top, rect.bottom,
tileBoxWidthPx, tileBoxHeightPx, topMarginPx);
} else if (location != null &&
!mapActivity.getMapView().getTileBox(tileBoxWidthPx, tileBoxHeightPx, topMarginPx).containsLatLon(location)) {
boolean animating = mapActivity.getMapView().getAnimatedDraggingThread().isAnimating();
mapActivity.getMapView().fitLocationToMap(location.getLatitude(), location.getLongitude(),
mapActivity.getMapView().getZoom(), tileBoxWidthPx, tileBoxHeightPx, topMarginPx, !animating);
} else {
mapActivity.refreshMap();
}
}
}
}
private void refreshChart(LineChart chart, boolean forceFit) {
MapActivity mapActivity = getMapActivity();
GpxDisplayItem gpxItem = getGpxItem();
if (mapActivity == null || gpxItem == null) {
return;
}
Highlight[] highlights = chart.getHighlighted();
LatLon location = null;
TrackChartPoints trackChartPoints = this.trackChartPoints;
if (trackChartPoints == null) {
trackChartPoints = new TrackChartPoints();
TrkSegment segment = getTrackSegment(chart);
int segmentColor = segment != null ? segment.getColor(0) : 0;
trackChartPoints.setSegmentColor(segmentColor);
trackChartPoints.setGpx(getGpxItem().group.getGpx());
trackChartPoints.setGpx(gpxItem.group.getGpx());
this.trackChartPoints = trackChartPoints;
}
float minimumVisibleXValue = chart.getLowestVisibleX();
@ -370,6 +438,11 @@ public class TrackDetailsMenu {
}
private void updateView(final View parentView) {
MapActivity mapActivity = getMapActivity();
GpxDisplayItem gpxItem = getGpxItem();
if (mapActivity == null || gpxItem == null) {
return;
}
GPXTrackAnalysis analysis = gpxItem.analysis;
if (analysis == null || gpxItem.chartTypes == null) {
parentView.setVisibility(View.GONE);
@ -408,15 +481,18 @@ public class TrackDetailsMenu {
@Override
public void onChartGestureEnd(MotionEvent me, ChartGesture lastPerformedGesture) {
if ((lastPerformedGesture == ChartGesture.DRAG && hasTranslated) ||
lastPerformedGesture == ChartGesture.X_ZOOM ||
lastPerformedGesture == ChartGesture.Y_ZOOM ||
lastPerformedGesture == ChartGesture.PINCH_ZOOM ||
lastPerformedGesture == ChartGesture.DOUBLE_TAP ||
lastPerformedGesture == ChartGesture.ROTATE) {
GpxDisplayItem gpxItem = getGpxItem();
if (gpxItem != null) {
if ((lastPerformedGesture == ChartGesture.DRAG && hasTranslated) ||
lastPerformedGesture == ChartGesture.X_ZOOM ||
lastPerformedGesture == ChartGesture.Y_ZOOM ||
lastPerformedGesture == ChartGesture.PINCH_ZOOM ||
lastPerformedGesture == ChartGesture.DOUBLE_TAP ||
lastPerformedGesture == ChartGesture.ROTATE) {
gpxItem.chartMatrix = new Matrix(chart.getViewPortHandler().getMatrixTouch());
refreshChart(chart, true);
gpxItem.chartMatrix = new Matrix(chart.getViewPortHandler().getMatrixTouch());
refreshChart(chart, true);
}
}
}
@ -500,21 +576,21 @@ public class TrackDetailsMenu {
final List<GPXDataSetType[]> availableTypes = new ArrayList<>();
boolean hasSlopeChart = false;
if (analysis.hasElevationData) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE });
availableTypes.add(new GPXDataSetType[]{GPXDataSetType.ALTITUDE});
if (gpxItem.chartAxisType != GPXDataSetAxisType.TIME
&& gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) {
&& gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) {
availableTypes.add(new GPXDataSetType[]{GPXDataSetType.SLOPE});
}
}
if (analysis.hasSpeedData) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.SPEED });
availableTypes.add(new GPXDataSetType[]{GPXDataSetType.SPEED});
}
if (analysis.hasElevationData && gpxItem.chartAxisType != GPXDataSetAxisType.TIME
&& gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE, GPXDataSetType.SLOPE });
&& gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) {
availableTypes.add(new GPXDataSetType[]{GPXDataSetType.ALTITUDE, GPXDataSetType.SLOPE});
}
if (analysis.hasElevationData && analysis.hasSpeedData) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE, GPXDataSetType.SPEED });
availableTypes.add(new GPXDataSetType[]{GPXDataSetType.ALTITUDE, GPXDataSetType.SPEED});
}
for (GPXDataSetType t : gpxItem.chartTypes) {
@ -529,7 +605,7 @@ public class TrackDetailsMenu {
yAxis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu optionsMenu = new PopupMenu(mapActivity, v);
PopupMenu optionsMenu = new PopupMenu(v.getContext(), v);
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
for (final GPXDataSetType[] types : availableTypes) {
MenuItem menuItem = optionsMenu.getMenu()
@ -538,6 +614,7 @@ public class TrackDetailsMenu {
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem mItem) {
GpxDisplayItem gpxItem = getGpxItem();
gpxItem.chartTypes = types;
update();
return true;
@ -572,20 +649,24 @@ public class TrackDetailsMenu {
xAxis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu optionsMenu = new PopupMenu(mapActivity, v);
final PopupMenu optionsMenu = new PopupMenu(v.getContext(), v);
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
for (final GPXDataSetAxisType type : GPXDataSetAxisType.values()) {
MenuItem menuItem = optionsMenu.getMenu()
.add(type.getStringId()).setIcon(type.getImageDrawable(app));
.add(type.getStringId()).setIcon(type.getImageDrawable(app));
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem mItem) {
gpxItem.chartAxisType = type;
gpxItem.chartHighlightPos = -1;
gpxItem.chartMatrix = null;
update();
return true;
GpxDisplayItem gpxItem = getGpxItem();
if (gpxItem != null) {
gpxItem.chartAxisType = type;
gpxItem.chartHighlightPos = -1;
gpxItem.chartMatrix = null;
update();
return true;
} else {
return false;
}
}
});
}
@ -603,15 +684,18 @@ public class TrackDetailsMenu {
}
private void updateChart(LineChart chart) {
GpxDisplayItem gpxItem = getGpxItem();
chart.notifyDataSetChanged();
chart.invalidate();
if (gpxItem.chartMatrix != null) {
chart.getViewPortHandler().refresh(new Matrix(gpxItem.chartMatrix), chart, true);
}
if (gpxItem.chartHighlightPos != -1) {
chart.highlightValue(gpxItem.chartHighlightPos, 0);
} else {
chart.highlightValue(null);
if (gpxItem != null) {
if (gpxItem.chartMatrix != null) {
chart.getViewPortHandler().refresh(new Matrix(gpxItem.chartMatrix), chart, true);
}
if (gpxItem.chartHighlightPos != -1) {
chart.highlightValue(gpxItem.chartHighlightPos, 0);
} else {
chart.highlightValue(null);
}
}
}

View file

@ -3,6 +3,7 @@ package net.osmand.plus.mapcontextmenu.other;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.view.ContextThemeWrapper;
@ -25,16 +26,23 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
private TrackDetailsMenu menu;
private View mainView;
private boolean paused = true;
@Nullable
private MapActivity getMapActivity() {
return (MapActivity) getActivity();
}
@NonNull
private MapActivity requireMapActivity() {
return (MapActivity) requireMyActivity();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
MapActivity mapActivity = getMapActivity();
menu = mapActivity.getMapLayers().getMapControlsLayer().getTrackDetailsMenu();
MapActivity mapActivity = requireMapActivity();
menu = mapActivity.getTrackDetailsMenu();
boolean nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightModeForMapControls();
ContextThemeWrapper context =
new ContextThemeWrapper(mapActivity, !nightMode ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme);
@ -74,7 +82,7 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
menu.hide();
}
});
}
@ -107,7 +115,16 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
super.onResume();
if (menu == null || menu.getGpxItem() == null) {
dismiss();
} else {
menu.onShow();
}
paused = false;
}
@Override
public void onPause() {
super.onPause();
paused = true;
}
@Override
@ -123,6 +140,10 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
return R.color.status_bar_transparent_gradient;
}
public boolean isPaused() {
return paused;
}
public int getHeight() {
if (mainView != null) {
return mainView.getHeight();
@ -164,26 +185,28 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
public void applyDayNightMode() {
MapActivity ctx = getMapActivity();
boolean portraitMode = AndroidUiHelper.isOrientationPortrait(ctx);
boolean landscapeLayout = !portraitMode;
boolean nightMode = ctx.getMyApplication().getDaynightHelper().isNightModeForMapControls();
if (!landscapeLayout) {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
} else {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_left_menu_light, R.drawable.bg_left_menu_dark);
}
if (ctx != null) {
boolean portraitMode = AndroidUiHelper.isOrientationPortrait(ctx);
boolean landscapeLayout = !portraitMode;
boolean nightMode = ctx.getMyApplication().getDaynightHelper().isNightModeForMapControls();
if (!landscapeLayout) {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
} else {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_left_menu_light, R.drawable.bg_left_menu_dark);
}
AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.y_axis_title), nightMode);
AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.x_axis_title), nightMode);
AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.y_axis_title), nightMode);
AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.x_axis_title), nightMode);
ImageView yAxisArrow = (ImageView) mainView.findViewById(R.id.y_axis_arrow);
ImageView xAxisArrow = (ImageView) mainView.findViewById(R.id.x_axis_arrow);
yAxisArrow.setImageDrawable(getContentIcon(R.drawable.ic_action_arrow_drop_down));
xAxisArrow.setImageDrawable(getContentIcon(R.drawable.ic_action_arrow_drop_down));
ImageView yAxisArrow = (ImageView) mainView.findViewById(R.id.y_axis_arrow);
ImageView xAxisArrow = (ImageView) mainView.findViewById(R.id.x_axis_arrow);
yAxisArrow.setImageDrawable(getContentIcon(R.drawable.ic_action_arrow_drop_down));
xAxisArrow.setImageDrawable(getContentIcon(R.drawable.ic_action_arrow_drop_down));
ImageButton backButton = (ImageButton) mainView.findViewById(R.id.top_bar_back_button);
if (backButton != null) {
backButton.setImageDrawable(getIcon(R.drawable.ic_arrow_back, R.color.color_white));
ImageButton backButton = (ImageButton) mainView.findViewById(R.id.top_bar_back_button);
if (backButton != null) {
backButton.setImageDrawable(getIcon(R.drawable.ic_arrow_back, R.color.color_white));
}
}
}

View file

@ -1358,10 +1358,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
if (list.size() > 0) {
gpxItem.chartTypes = list.toArray(new GPXDataSetType[list.size()]);
}
if (gpxItem.group.getGpx() != null) {
gpxItem.wasHidden = app.getSelectedGpxHelper().getSelectedFileByPath(gpxInfo.file.getAbsolutePath()) == null;
app.getSelectedGpxHelper().setGpxFileToDisplay(gpxItem.group.getGpx());
}
final OsmandSettings settings = app.getSettings();
settings.setMapLocationToShow(gpxItem.locationStart.lat, gpxItem.locationStart.lon,
settings.getLastKnownMapZoom(),

View file

@ -1168,12 +1168,6 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit
gpxItem.locationOnMap = gpxItem.locationStart;
}
GPXFile gpx = getGpx();
GPXFile groupGpx = gpxItem.group.getGpx();
if (gpx != null && groupGpx != null) {
gpxItem.wasHidden = app.getSelectedGpxHelper().getSelectedFileByPath(gpx.path) == null;
app.getSelectedGpxHelper().setGpxFileToDisplay(groupGpx);
}
final OsmandSettings settings = app.getSettings();
settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(),
settings.getLastKnownMapZoom(),

View file

@ -46,14 +46,13 @@ import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.MapActivity.ShowQuickSearchMode;
import net.osmand.plus.base.ContextMenuFragment.MenuState;
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu;
import net.osmand.plus.base.ContextMenuFragment.MenuState;
import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu.PointType;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchType;
@ -101,7 +100,6 @@ public class MapControlsLayer extends OsmandMapLayer {
private OsmandSettings settings;
private MapRouteInfoMenu mapRouteInfoMenu;
private TrackDetailsMenu trackDetailsMenu;
private MapHudButton backToLocationControl;
private MapHudButton menuControl;
private MapHudButton compassHud;
@ -132,10 +130,6 @@ public class MapControlsLayer extends OsmandMapLayer {
contextMenuLayer = mapActivity.getMapLayers().getContextMenuLayer();
}
public TrackDetailsMenu getTrackDetailsMenu() {
return trackDetailsMenu;
}
@Override
public boolean drawInScreenPixels() {
return true;
@ -299,7 +293,6 @@ public class MapControlsLayer extends OsmandMapLayer {
private void initRouteControls() {
mapRouteInfoMenu = mapActivity.getMapRouteInfoMenu();
trackDetailsMenu = new TrackDetailsMenu(mapActivity);
}
public void setControlsClickable(boolean clickable) {
@ -753,7 +746,7 @@ public class MapControlsLayer extends OsmandMapLayer {
routePlanningMode = true;
}
boolean routeFollowingMode = !routePlanningMode && rh.isFollowingMode();
boolean trackDialogOpened = TrackDetailsMenu.isVisible();
boolean trackDialogOpened = mapActivity.getTrackDetailsMenu().isVisible();
boolean contextMenuOpened = !mapActivity.getContextMenu().shouldShowTopControls();
boolean showRouteCalculationControls = routePlanningMode ||
((app.accessibilityEnabled() || (System.currentTimeMillis() - touchEvent < TIMEOUT_TO_SHOW_BUTTONS)) && routeFollowingMode);