Merge branch 'r3.3'

This commit is contained in:
crimean 2019-04-20 18:03:54 +03:00
commit 4b5240586b
6 changed files with 99 additions and 26 deletions

View file

@ -878,7 +878,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment {
if (getActivity() == null) { if (getActivity() == null) {
return; return;
} }
calculateLayout(view); calculateLayout(view, initLayout);
if (!moving) { if (!moving) {
doLayoutMenu(); doLayoutMenu();
@ -895,7 +895,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment {
} }
} }
protected void calculateLayout(View view) { protected void calculateLayout(View view, boolean initLayout) {
menuFullHeight = mainView.getHeight(); menuFullHeight = mainView.getHeight();
menuBottomViewHeight = menuFullHeight; menuBottomViewHeight = menuFullHeight;
menuFullHeightMax = view.findViewById(R.id.route_menu_cards_container).getHeight() + menuFullHeightMax = view.findViewById(R.id.route_menu_cards_container).getHeight() +

View file

@ -338,14 +338,13 @@ public class TrackDetailsMenu {
int tileBoxWidthPx = 0; int tileBoxWidthPx = 0;
int tileBoxHeightPx = 0; int tileBoxHeightPx = 0;
TrackDetailsMenuFragment fragment = getMenuFragment(); boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
if (fragment != null) { if (!portrait) {
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity); int width = getFragmentWidth();
if (!portrait) { tileBoxWidthPx = width != -1 ? tb.getPixWidth() - width : 0;
tileBoxWidthPx = tb.getPixWidth() - fragment.getWidth(); } else {
} else { int height = getFragmentHeight();
tileBoxHeightPx = tb.getPixHeight() - fragment.getHeight(); tileBoxHeightPx = height != -1 ? tb.getPixHeight() - height : 0;
}
} }
if (tileBoxHeightPx > 0 || tileBoxWidthPx > 0) { if (tileBoxHeightPx > 0 || tileBoxWidthPx > 0) {
if (forceFit) { if (forceFit) {
@ -363,6 +362,22 @@ public class TrackDetailsMenu {
} }
} }
protected int getFragmentWidth() {
TrackDetailsMenuFragment fragment = getMenuFragment();
if (fragment != null) {
return fragment.getWidth();
}
return -1;
}
protected int getFragmentHeight() {
TrackDetailsMenuFragment fragment = getMenuFragment();
if (fragment != null) {
return fragment.getHeight();
}
return -1;
}
public void refreshChart(LineChart chart, boolean forceFit) { public void refreshChart(LineChart chart, boolean forceFit) {
MapActivity mapActivity = getMapActivity(); MapActivity mapActivity = getMapActivity();
GpxDisplayItem gpxItem = getGpxItem(); GpxDisplayItem gpxItem = getGpxItem();

View file

@ -246,11 +246,11 @@ public class MapRouteInfoMenuFragment extends ContextMenuFragment {
} }
@Override @Override
protected void calculateLayout(View view) { protected void calculateLayout(View view, boolean initLayout) {
menuTitleHeight = view.findViewById(R.id.route_menu_top_shadow_all).getHeight() menuTitleHeight = view.findViewById(R.id.route_menu_top_shadow_all).getHeight()
+ view.findViewById(R.id.control_buttons).getHeight() + view.findViewById(R.id.control_buttons).getHeight()
- view.findViewById(R.id.buttons_shadow).getHeight(); - view.findViewById(R.id.buttons_shadow).getHeight();
super.calculateLayout(view); super.calculateLayout(view, initLayout);
} }
private void adjustMapPosition(int y) { private void adjustMapPosition(int y) {

View file

@ -35,6 +35,8 @@ import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.dataprovider.BarDataProvider; import com.github.mikephil.charting.interfaces.dataprovider.BarDataProvider;
import com.github.mikephil.charting.listener.ChartTouchListener;
import com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture;
import com.github.mikephil.charting.renderer.HorizontalBarChartRenderer; import com.github.mikephil.charting.renderer.HorizontalBarChartRenderer;
import com.github.mikephil.charting.utils.ViewPortHandler; import com.github.mikephil.charting.utils.ViewPortHandler;
@ -120,12 +122,25 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
private RouteDetailsFragmentListener routeDetailsListener; private RouteDetailsFragmentListener routeDetailsListener;
private RouteStatisticCard statisticCard; private RouteStatisticCard statisticCard;
private List<RouteInfoCard> routeInfoCards = new ArrayList<>(); private List<RouteInfoCard> routeInfoCards = new ArrayList<>();
private TrackDetailsMenu trackDetailsMenu; private RouteDetailsMenu routeDetailsMenu;
public interface RouteDetailsFragmentListener { public interface RouteDetailsFragmentListener {
void onNavigationRequested(); void onNavigationRequested();
} }
private class RouteDetailsMenu extends TrackDetailsMenu {
@Override
protected int getFragmentWidth() {
return getWidth();
}
@Override
protected int getFragmentHeight() {
return getMenuFullHeight();
}
}
@Override @Override
public int getMainLayoutId() { public int getMainLayoutId() {
return R.layout.route_info_layout; return R.layout.route_info_layout;
@ -186,8 +201,8 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
MapActivity mapActivity = getMapActivity(); MapActivity mapActivity = getMapActivity();
if (mapActivity != null && isPortrait()) { if (mapActivity != null && isPortrait()) {
mapActivity.findViewById(R.id.bottom_controls_container).setVisibility(View.GONE); mapActivity.findViewById(R.id.bottom_controls_container).setVisibility(View.GONE);
if (trackDetailsMenu != null) { if (routeDetailsMenu != null) {
trackDetailsMenu.setMapActivity(mapActivity); routeDetailsMenu.setMapActivity(mapActivity);
} }
} }
} }
@ -197,8 +212,8 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
MapActivity mapActivity = getMapActivity(); MapActivity mapActivity = getMapActivity();
if (mapActivity != null && isPortrait()) { if (mapActivity != null && isPortrait()) {
mapActivity.findViewById(R.id.bottom_controls_container).setVisibility(View.VISIBLE); mapActivity.findViewById(R.id.bottom_controls_container).setVisibility(View.VISIBLE);
if (trackDetailsMenu != null) { if (routeDetailsMenu != null) {
trackDetailsMenu.setMapActivity(null); routeDetailsMenu.setMapActivity(null);
} }
} }
super.onPause(); super.onPause();
@ -376,17 +391,24 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
addRouteCard(cardsContainer, routeSmoothnessCard); addRouteCard(cardsContainer, routeSmoothnessCard);
} }
} }
trackDetailsMenu = new TrackDetailsMenu(); routeDetailsMenu = new RouteDetailsMenu();
GpxDisplayItem gpxItem = statisticCard.getGpxItem(); GpxDisplayItem gpxItem = statisticCard.getGpxItem();
if (gpxItem != null) { if (gpxItem != null) {
trackDetailsMenu.setGpxItem(gpxItem); routeDetailsMenu.setGpxItem(gpxItem);
} }
trackDetailsMenu.setMapActivity(mapActivity); routeDetailsMenu.setMapActivity(mapActivity);
LineChart chart = statisticCard.getChart(); LineChart chart = statisticCard.getChart();
if (chart != null) { if (chart != null) {
chart.setExtraRightOffset(16); chart.setExtraRightOffset(16);
chart.setExtraLeftOffset(16); chart.setExtraLeftOffset(16);
trackDetailsMenu.refreshChart(chart, true); }
}
@Override
protected void calculateLayout(View view, boolean initLayout) {
super.calculateLayout(view, initLayout);
if (!initLayout && getCurrentMenuState() != MenuState.FULL_SCREEN) {
refreshChart(false);
} }
} }
@ -1644,12 +1666,13 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
} }
} }
private void refreshChart() { private void refreshChart(boolean forceFit) {
MapActivity mapActivity = getMapActivity(); MapActivity mapActivity = getMapActivity();
if (mapActivity != null && trackDetailsMenu != null && statisticCard != null) { if (mapActivity != null && routeDetailsMenu != null && statisticCard != null &&
!mapActivity.getMyApplication().getRoutingHelper().isFollowingMode()) {
LineChart chart = statisticCard.getChart(); LineChart chart = statisticCard.getChart();
if (chart != null) { if (chart != null) {
trackDetailsMenu.refreshChart(chart, false); routeDetailsMenu.refreshChart(chart, forceFit);
mapActivity.refreshMap(); mapActivity.refreshMap();
} }
} }
@ -1670,7 +1693,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
@Override @Override
public void onValueSelected(BaseCard card, Entry e, Highlight h) { public void onValueSelected(BaseCard card, Entry e, Highlight h) {
refreshChart(); refreshChart(false);
highlightRouteInfoCharts(h); highlightRouteInfoCharts(h);
} }
@ -1679,6 +1702,23 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
highlightRouteInfoCharts(null); highlightRouteInfoCharts(null);
} }
@Override
public void onChartGestureStart(BaseCard card, MotionEvent me, ChartGesture lastPerformedGesture) {
}
@Override
public void onChartGestureEnd(BaseCard card, MotionEvent me, ChartGesture lastPerformedGesture, boolean hasTranslated) {
if ((lastPerformedGesture == ChartGesture.DRAG && hasTranslated) ||
lastPerformedGesture == ChartGesture.X_ZOOM ||
lastPerformedGesture == ChartGesture.Y_ZOOM ||
lastPerformedGesture == ChartGesture.PINCH_ZOOM ||
lastPerformedGesture == ChartGesture.DOUBLE_TAP ||
lastPerformedGesture == ChartGesture.ROTATE) {
refreshChart(true);
}
}
public static class CumulativeInfo { public static class CumulativeInfo {
public int distance; public int distance;
public int time; public int time;

View file

@ -1,7 +1,11 @@
package net.osmand.plus.routepreparationmenu.cards; package net.osmand.plus.routepreparationmenu.cards;
import android.view.MotionEvent;
import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.listener.ChartTouchListener;
import com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture;
public interface CardChartListener { public interface CardChartListener {
/** /**
@ -17,4 +21,8 @@ public interface CardChartListener {
* Called when nothing has been selected or an "un-select" has been made. * Called when nothing has been selected or an "un-select" has been made.
*/ */
void onNothingSelected(BaseCard card); void onNothingSelected(BaseCard card);
void onChartGestureStart(BaseCard card, MotionEvent me, ChartGesture lastPerformedGesture);
void onChartGestureEnd(BaseCard card, MotionEvent me, ChartGesture lastPerformedGesture, boolean hasTranslated);
} }

View file

@ -278,16 +278,21 @@ public class RouteStatisticCard extends BaseCard {
}); });
mChart.setOnChartGestureListener(new OnChartGestureListener() { mChart.setOnChartGestureListener(new OnChartGestureListener() {
boolean hasTranslated = false;
float highlightDrawX = -1; float highlightDrawX = -1;
@Override @Override
public void onChartGestureStart(MotionEvent me, ChartGesture lastPerformedGesture) { public void onChartGestureStart(MotionEvent me, ChartGesture lastPerformedGesture) {
hasTranslated = false;
if (mChart.getHighlighted() != null && mChart.getHighlighted().length > 0) { if (mChart.getHighlighted() != null && mChart.getHighlighted().length > 0) {
highlightDrawX = mChart.getHighlighted()[0].getDrawX(); highlightDrawX = mChart.getHighlighted()[0].getDrawX();
} else { } else {
highlightDrawX = -1; highlightDrawX = -1;
} }
CardChartListener chartListener = getChartListener();
if (chartListener != null) {
chartListener.onChartGestureStart(RouteStatisticCard.this, me, lastPerformedGesture);
}
} }
@Override @Override
@ -299,6 +304,10 @@ public class RouteStatisticCard extends BaseCard {
} else { } else {
gpxItem.chartHighlightPos = -1; gpxItem.chartHighlightPos = -1;
} }
CardChartListener chartListener = getChartListener();
if (chartListener != null) {
chartListener.onChartGestureEnd(RouteStatisticCard.this, me, lastPerformedGesture, hasTranslated);
}
} }
@Override @Override
@ -323,6 +332,7 @@ public class RouteStatisticCard extends BaseCard {
@Override @Override
public void onChartTranslate(MotionEvent me, float dX, float dY) { public void onChartTranslate(MotionEvent me, float dX, float dY) {
hasTranslated = true;
if (highlightDrawX != -1) { if (highlightDrawX != -1) {
Highlight h = mChart.getHighlightByTouchPoint(highlightDrawX, 0f); Highlight h = mChart.getHighlightByTouchPoint(highlightDrawX, 0f);
if (h != null) { if (h != null) {