diff --git a/OsmAnd/res/layout/plan_route_info.xml b/OsmAnd/res/layout/plan_route_info.xml index 1718487384..28d12fb050 100644 --- a/OsmAnd/res/layout/plan_route_info.xml +++ b/OsmAnd/res/layout/plan_route_info.xml @@ -523,52 +523,6 @@ - - - - - - - - - - - - 0 && slidingUp) { while (menu.getCurrentMenuState() != newState) { @@ -444,7 +434,7 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { } } } else if (slidingDown) { - if (currentMenuState == MenuController.MenuState.HEADER_ONLY) { + if (currentMenuState == MapRouteInfoMenu.MenuState.HEADER_ONLY) { needCloseMenu = true; } else { while (menu.getCurrentMenuState() != newState) { @@ -471,7 +461,7 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { } } int newMenuState = menu.getCurrentMenuState(); - boolean needMapAdjust = currentMenuState != newMenuState && newMenuState != MenuController.MenuState.FULL_SCREEN; + boolean needMapAdjust = currentMenuState != newMenuState && newMenuState != MapRouteInfoMenu.MenuState.FULL_SCREEN; applyPosY(currentY, needCloseMenu, needMapAdjust, currentMenuState, newMenuState, 0); } @@ -487,20 +477,20 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { int posY = 0; switch (destinationState) { - case MenuController.MenuState.HEADER_ONLY: - posY = getMenuStatePosY(MenuController.MenuState.HEADER_ONLY); + case MapRouteInfoMenu.MenuState.HEADER_ONLY: + posY = getMenuStatePosY(MapRouteInfoMenu.MenuState.HEADER_ONLY); break; - case MenuController.MenuState.HALF_SCREEN: - posY = getMenuStatePosY(MenuController.MenuState.HALF_SCREEN); + case MapRouteInfoMenu.MenuState.HALF_SCREEN: + posY = getMenuStatePosY(MapRouteInfoMenu.MenuState.HALF_SCREEN); break; - case MenuController.MenuState.FULL_SCREEN: + case MapRouteInfoMenu.MenuState.FULL_SCREEN: if (currentY != CURRENT_Y_UNDEFINED) { int maxPosY = viewHeight - menuFullHeightMax; - int minPosY = getMenuStatePosY(MenuController.MenuState.FULL_SCREEN); + int minPosY = getMenuStatePosY(MapRouteInfoMenu.MenuState.FULL_SCREEN); if (maxPosY > minPosY) { maxPosY = minPosY; } - if (currentY > minPosY || previousState != MenuController.MenuState.FULL_SCREEN) { + if (currentY > minPosY || previousState != MapRouteInfoMenu.MenuState.FULL_SCREEN) { posY = minPosY; } else if (currentY < maxPosY) { posY = maxPosY; @@ -508,7 +498,7 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { posY = currentY; } } else { - posY = getMenuStatePosY(MenuController.MenuState.FULL_SCREEN); + posY = getMenuStatePosY(MapRouteInfoMenu.MenuState.FULL_SCREEN); } break; default: @@ -539,21 +529,6 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { updateMainViewLayout(posY); } - final float toolbarAlpha = getToolbarAlpha(posY); - if (toolbarAlpha > 0) { - updateVisibility(toolbarContainer, true); - } - toolbarContainer.animate().alpha(toolbarAlpha) - .setDuration(200) - .setInterpolator(new DecelerateInterpolator()) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - updateVisibility(toolbarContainer, toolbarAlpha); - } - }) - .start(); - mainView.animate().y(posY) .setDuration(200) .setInterpolator(new DecelerateInterpolator()) @@ -582,6 +557,9 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { }) .start(); + if (needMapAdjust) { + adjustMapPosition(posY); + } } } @@ -589,44 +567,6 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { runLayoutListener(); } - private float getToolbarAlpha(int y) { - float a = 0; - if (menu != null && portrait) { - if (y < bottomToolbarPosY) { - a = 1f - (y - topScreenPosY) * (1f / (bottomToolbarPosY - topScreenPosY)); - } - if (a < 0) { - a = 0; - } else if (a > 1) { - a = 1; - } - } - return a; - } - - private void updateToolbar() { - float a = getToolbarAlpha(getViewY()); - updateVisibility(toolbarContainer, a); - } - - private void updateVisibility(View v, float alpha) { - boolean visible = alpha > 0; - v.setAlpha(alpha); - if (visible && v.getVisibility() != View.VISIBLE) { - v.setVisibility(View.VISIBLE); - } else if (!visible && v.getVisibility() == View.VISIBLE) { - v.setVisibility(View.INVISIBLE); - } - } - - private void updateVisibility(View v, boolean visible) { - if (visible && v.getVisibility() != View.VISIBLE) { - v.setVisibility(View.VISIBLE); - } else if (!visible && v.getVisibility() == View.VISIBLE) { - v.setVisibility(View.INVISIBLE); - } - } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private void runLayoutListener() { if (view != null) { @@ -677,13 +617,58 @@ public class MapRouteInfoMenuFragment extends BaseOsmAndFragment { } public int getHeight() { - if (mainView != null) { - return mainView.getHeight(); + if (menu != null) { + int height = getMenuStatePosY(menu.getCurrentMenuState()); + return viewHeight - height - AndroidUtils.getStatusBarHeight(getMyApplication()); } else { return 0; } } + private void adjustMapPosition(int y) { + if (menu.isSelectFromMapTouch()) { + return; + } + + RoutingHelper rh = getMyApplication().getRoutingHelper(); + if (rh.isRoutePlanningMode() && getMapActivity().getMapView() != null) { + Location lt = rh.getLastProjection(); + if (lt == null) { + lt = getMyApplication().getTargetPointsHelper().getPointToStartLocation(); + } + if (lt != null) { + double left = lt.getLongitude(), right = lt.getLongitude(); + double top = lt.getLatitude(), bottom = lt.getLatitude(); + List list = rh.getCurrentCalculatedRoute(); + for (Location l : list) { + left = Math.min(left, l.getLongitude()); + right = Math.max(right, l.getLongitude()); + top = Math.max(top, l.getLatitude()); + bottom = Math.min(bottom, l.getLatitude()); + } + List targetPoints = getMyApplication().getTargetPointsHelper().getIntermediatePointsWithTarget(); + for (TargetPointsHelper.TargetPoint l : targetPoints) { + left = Math.min(left, l.getLongitude()); + right = Math.max(right, l.getLongitude()); + top = Math.max(top, l.getLatitude()); + bottom = Math.min(bottom, l.getLatitude()); + } + + RotatedTileBox tb = getMapActivity().getMapView().getCurrentRotatedTileBox().copy(); + int tileBoxWidthPx = 0; + int tileBoxHeightPx = 0; + + if (!portrait) { + tileBoxWidthPx = tb.getPixWidth() - getWidth(); + } else { + int fHeight = viewHeight - y - AndroidUtils.getStatusBarHeight(getMyApplication()); + tileBoxHeightPx = tb.getPixHeight() - fHeight; + } + getMapActivity().getMapView().fitRectToMap(left, right, top, bottom, tileBoxWidthPx, tileBoxHeightPx, 0); + } + } + } + public int getWidth() { if (mainView != null) { return mainView.getWidth();