diff --git a/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java index 99e26ca3e2..00738df442 100644 --- a/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java +++ b/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java @@ -1429,16 +1429,16 @@ public class RouteResultPreparation { } } } - // remove all non-slight turns - if(possibleTurns.size() > 1) { - TIntIterator it = possibleTurns.iterator(); - while(it.hasNext()) { - int nxt = it.next(); - if(!TurnType.isSlightTurn(nxt)) { - it.remove(); - } - } - } + // remove all non-slight turns // TEST don't pass +// if(possibleTurns.size() > 1) { +// TIntIterator it = possibleTurns.iterator(); +// while(it.hasNext()) { +// int nxt = it.next(); +// if(!TurnType.isSlightTurn(nxt)) { +// it.remove(); +// } +// } +// } int infer = 0; if (possibleTurns.size() == 1) { infer = possibleTurns.iterator().next(); diff --git a/OsmAnd/res/layout/map_context_menu_fragment.xml b/OsmAnd/res/layout/map_context_menu_fragment.xml index e51c489a04..1924bf56a3 100644 --- a/OsmAnd/res/layout/map_context_menu_fragment.xml +++ b/OsmAnd/res/layout/map_context_menu_fragment.xml @@ -436,6 +436,35 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + + Donkergeel diff --git a/OsmAnd/src/net/osmand/plus/AppInitializer.java b/OsmAnd/src/net/osmand/plus/AppInitializer.java index 0dc3cc726a..53fb922d9f 100644 --- a/OsmAnd/src/net/osmand/plus/AppInitializer.java +++ b/OsmAnd/src/net/osmand/plus/AppInitializer.java @@ -87,7 +87,7 @@ public class AppInitializer implements IProgress { private static final String VERSION_INSTALLED = "VERSION_INSTALLED"; //$NON-NLS-1$ private static final String EXCEPTION_FILE_SIZE = "EXCEPTION_FS"; //$NON-NLS-1$ - public static final String LATEST_CHANGES_URL = "https://osmand.net/blog?id=osmand-2-7-released"; + public static final String LATEST_CHANGES_URL = "https://osmand.net/blog?id=osmand-2-8-released"; // public static final String LATEST_CHANGES_URL = null; // not enough to read public static final int APP_EXIT_CODE = 4; public static final String APP_EXIT_KEY = "APP_EXIT_KEY"; diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 4e4f9dc846..4aa1980093 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -913,6 +913,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven } public void readLocationToShow() { + mapLayers.getMapControlsLayer().showMapControls(); + LatLon cur = new LatLon(mapView.getLatitude(), mapView.getLongitude()); LatLon latLonToShow = settings.getAndClearMapLocationToShow(); PointDescription mapLabelToShow = settings.getAndClearMapLabelToShow(latLonToShow); diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java index 3aec39ede8..8438311687 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java @@ -851,7 +851,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis } } mapActivity.findViewById(R.id.toolbar_back).setVisibility(isBackButtonVisible() ? View.VISIBLE : View.GONE); - mapActivity.findViewById(R.id.MapHudButtonsOverlay).setVisibility(View.INVISIBLE); + mapActivity.getMapLayers().getMapControlsLayer().hideMapControls(); boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity); if (!portrait) { AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_route_land_left_margin_external), true); @@ -875,7 +875,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis mapActivity.getMapView().refreshMap(); } - mapActivity.findViewById(R.id.MapHudButtonsOverlay).setVisibility(View.VISIBLE); + mapActivity.getMapLayers().getMapControlsLayer().showMapControls(); hideActionButton(); for (WeakReference df : fragList) { if (df.get() != null) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index 843e268078..916fb34fb6 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -368,7 +368,6 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL fragmentRef.get().centerMarkerLocation(); } } - updateControlsVisibility(); } public void show(@NonNull LatLon latLon, @@ -377,7 +376,6 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL if (init(latLon, pointDescription, object)) { showInternal(); } - updateControlsVisibility(); } private void showInternal() { @@ -415,7 +413,8 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL init(latLon, pointDescription, object); } - public void close() { + public boolean close() { + boolean result = false; if (active) { active = false; if (object instanceof MapMarker) { @@ -430,15 +429,17 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL if (this.object != null) { clearSelectedObject(this.object); } - hide(); + result = hide(); if (menuController != null) { menuController.setActive(false); } mapActivity.refreshMap(); } + return result; } - public void hide() { + public boolean hide() { + boolean result = false; if (mapPosition != 0) { mapActivity.getMapView().setMapPosition(mapPosition); mapPosition = 0; @@ -449,20 +450,33 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL WeakReference fragmentRef = findMenuFragment(); if (fragmentRef != null) { fragmentRef.get().dismissMenu(); + result = true; } - updateControlsVisibility(); + return result; } - public void updateControlsVisibility() { - int visibility = shouldShowControls() ? View.VISIBLE : View.GONE; - mapActivity.findViewById(R.id.map_center_info).setVisibility(visibility); - mapActivity.findViewById(R.id.map_left_widgets_panel).setVisibility(visibility); - mapActivity.findViewById(R.id.map_right_widgets_panel).setVisibility(visibility); + public void updateControlsVisibility(boolean menuVisible) { + int topControlsVisibility = shouldShowTopControls(menuVisible) ? View.VISIBLE : View.GONE; + mapActivity.findViewById(R.id.map_center_info).setVisibility(topControlsVisibility); + mapActivity.findViewById(R.id.map_left_widgets_panel).setVisibility(topControlsVisibility); + mapActivity.findViewById(R.id.map_right_widgets_panel).setVisibility(topControlsVisibility); + + int bottomControlsVisibility = shouldShowBottomControls(menuVisible) ? View.VISIBLE : View.GONE; + mapActivity.findViewById(R.id.bottom_controls_container).setVisibility(bottomControlsVisibility); + mapActivity.refreshMap(); } - public boolean shouldShowControls() { - return !isVisible() || isLandscapeLayout() || getCurrentMenuState() == MenuController.MenuState.HEADER_ONLY; + public boolean shouldShowTopControls() { + return shouldShowTopControls(isVisible()); + } + + public boolean shouldShowTopControls(boolean menuVisible) { + return !menuVisible || isLandscapeLayout() || getCurrentMenuState() == MenuController.MenuState.HEADER_ONLY; + } + + public boolean shouldShowBottomControls(boolean menuVisible) { + return !menuVisible || isLandscapeLayout(); } // timeout in msec @@ -633,18 +647,20 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL } } - public void onSingleTapOnMap() { + public boolean onSingleTapOnMap() { + boolean result = false; if (menuController == null || !menuController.handleSingleTapOnMap()) { if (menuController != null && !menuController.isClosable()) { - hide(); + result = hide(); } else { updateMapCenter(null); - close(); + result = close(); } if (mapActivity.getMapLayers().getMapQuickActionLayer().isLayerOn()) { mapActivity.getMapLayers().getMapQuickActionLayer().refreshLayer(); } } + return result; } @Override @@ -710,6 +726,24 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL mapActivity.getMapLayers().getMapControlsLayer().navigateFab(); } + public boolean zoomInPressed() { + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().doZoomIn(); + return true; + } + return false; + } + + public boolean zoomOutPressed() { + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().doZoomOut(); + return true; + } + return false; + } + public void buttonWaypointPressed() { if (pointDescription.isDestination()) { mapActivity.getMapActions().editWaypoints(); @@ -1033,6 +1067,10 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL return menuController == null || menuController.fabVisible(); } + public boolean zoomButtonsVisible() { + return menuController == null || menuController.zoomButtonsVisible(); + } + public boolean isClosable() { return menuController == null || menuController.isClosable(); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 3f83428f8c..b181e47f40 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -66,7 +66,10 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { private View view; private View mainView; - ImageView fabView; + private ImageView fabView; + private View zoomButtonsView; + private ImageButton zoomInButtonView; + private ImageButton zoomOutButtonView; private MapContextMenu menu; private OnLayoutChangeListener containerLayoutListener; @@ -83,6 +86,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { private int screenHeight; private int viewHeight; + private int zoomButtonsHeight; private int fabPaddingTopPx; private int markerPaddingPx; @@ -257,7 +261,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { if (singleTapDetector.onTouchEvent(event)) { moving = false; if (hasMoved) { - applyPosY(getViewY(), false, false, 0, 0); + applyPosY(getViewY(), false, false, 0, 0, 0); } openMenuHalfScreen(); return true; @@ -386,6 +390,32 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { fabView.setVisibility(View.GONE); } + // Zoom buttons + zoomButtonsView = view.findViewById(R.id.context_menu_zoom_buttons); + zoomInButtonView = (ImageButton) view.findViewById(R.id.context_menu_zoom_in_button); + zoomOutButtonView = (ImageButton) view.findViewById(R.id.context_menu_zoom_out_button); + if (menu.zoomButtonsVisible()) { + updateImageButton(zoomInButtonView, R.drawable.map_zoom_in, R.drawable.map_zoom_in_night, + R.drawable.btn_circle_trans, R.drawable.btn_circle_night, nightMode); + updateImageButton(zoomOutButtonView, R.drawable.map_zoom_out, R.drawable.map_zoom_out_night, + R.drawable.btn_circle_trans, R.drawable.btn_circle_night, nightMode); + zoomInButtonView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + menu.zoomInPressed(); + } + }); + zoomOutButtonView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + menu.zoomOutPressed(); + } + }); + zoomButtonsView.setVisibility(View.VISIBLE); + } else { + zoomButtonsView.setVisibility(View.GONE); + } + View buttonsTopBorder = view.findViewById(R.id.buttons_top_border); AndroidUtils.setBackground(getMapActivity(), buttonsTopBorder, nightMode, R.color.dashboard_divider_light, R.color.dashboard_divider_dark); @@ -481,6 +511,16 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { return view; } + private void updateImageButton(ImageButton button, int iconLightId, int iconDarkId, int bgLightId, int bgDarkId, boolean night) { + button.setImageDrawable(getMapActivity().getMyApplication().getIconsCache().getIcon(night ? iconDarkId : iconLightId)); + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { + button.setBackground(getMapActivity().getResources().getDrawable(night ? bgDarkId : bgLightId, + getMapActivity().getTheme())); + } else { + button.setBackgroundDrawable(getMapActivity().getResources().getDrawable(night ? bgDarkId : bgLightId)); + } + } + private void processScreenHeight(ViewParent parent) { View container = (View)parent; if (Build.VERSION.SDK_INT >= 11) { @@ -525,17 +565,33 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { boolean needMapAdjust = oldMenuState != newMenuState && newMenuState != MenuState.FULL_SCREEN; if (newMenuState != oldMenuState) { - menu.updateControlsVisibility(); + menu.updateControlsVisibility(true); doBeforeMenuStateChange(oldMenuState, newMenuState); } - applyPosY(currentY, needCloseMenu, needMapAdjust, oldMenuState, newMenuState); + applyPosY(currentY, needCloseMenu, needMapAdjust, oldMenuState, newMenuState, 0); + } + + public void doZoomIn() { + if (!centered) { + centered = true; + calculateCenterLatLon(menu.getLatLon(), getZoom() + 1, true); + } + applyPosY(getViewY(), false, true, 0, 0, 1); + } + + public void doZoomOut() { + if (!centered) { + centered = true; + calculateCenterLatLon(menu.getLatLon(), getZoom() - 1, true); + } + applyPosY(getViewY(), false, true, 0, 0, -1); } private void applyPosY(final int currentY, final boolean needCloseMenu, boolean needMapAdjust, - final int previousMenuState, final int newMenuState) { + final int previousMenuState, final int newMenuState, int dZoom) { final int posY = getPosY(needCloseMenu); - if (currentY != posY) { + if (currentY != posY || dZoom != 0) { if (posY < currentY) { updateMainViewLayout(posY); } @@ -574,8 +630,13 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { .setInterpolator(new DecelerateInterpolator()) .start(); + zoomButtonsView.animate().y(getZoomButtonsY(posY)) + .setDuration(200) + .setInterpolator(new DecelerateInterpolator()) + .start(); + if (needMapAdjust) { - adjustMapPosition(posY, true, centered); + adjustMapPosition(posY, true, centered, dZoom); } } else { setViewY(posY, false, needMapAdjust); @@ -791,7 +852,8 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { if (parent != null && containerLayoutListener != null) { ((View) parent).addOnLayoutChangeListener(containerLayoutListener); } - + menu.updateControlsVisibility(true); + getMapActivity().getMapLayers().getMapControlsLayer().showMapControls(); } @Override @@ -805,6 +867,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { if (!wasDrawerDisabled) { getMapActivity().enableDrawer(); } + menu.updateControlsVisibility(false); super.onPause(); } @@ -874,6 +937,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { menuTopShadowHeight = view.findViewById(R.id.context_menu_top_shadow).getHeight(); int newMenuTopShadowAllHeight = view.findViewById(R.id.context_menu_top_shadow_all).getHeight(); menuFullHeight = view.findViewById(R.id.context_menu_main).getHeight(); + zoomButtonsHeight = zoomButtonsView.getHeight(); int dy = 0; if (!menu.isLandscapeLayout()) { @@ -960,7 +1024,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { public void centerMarkerLocation() { centered = true; - showOnMap(menu.getLatLon(), true, true, false); + showOnMap(menu.getLatLon(), true, true, false, getZoom()); } private int getZoom() { @@ -994,21 +1058,20 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { return new LatLon(flat, flon); } - private void showOnMap(LatLon latLon, boolean updateCoords, boolean needMove, boolean alreadyAdjusted) { + private void showOnMap(LatLon latLon, boolean updateCoords, boolean needMove, boolean alreadyAdjusted, int zoom) { AnimateDraggingMapThread thread = map.getAnimatedDraggingThread(); - int fZoom = getZoom(); - LatLon calcLatLon = calculateCenterLatLon(latLon, fZoom, updateCoords); + LatLon calcLatLon = calculateCenterLatLon(latLon, zoom, updateCoords); if (updateCoords) { mapCenter = calcLatLon; menu.setMapCenter(mapCenter); } if (!alreadyAdjusted) { - calcLatLon = getAdjustedMarkerLocation(getPosY(), calcLatLon, true, fZoom); + calcLatLon = getAdjustedMarkerLocation(getPosY(), calcLatLon, true, zoom); } if (needMove) { - thread.startMoving(calcLatLon.getLatitude(), calcLatLon.getLongitude(), fZoom, true); + thread.startMoving(calcLatLon.getLatitude(), calcLatLon.getLongitude(), zoom, true); } } @@ -1137,30 +1200,36 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { if (!oldAndroid()) { mainView.setY(y); fabView.setY(getFabY(y)); + zoomButtonsView.setY(getZoomButtonsY(y)); } else { mainView.setPadding(0, y, 0, 0); fabView.setPadding(0, getFabY(y), 0, 0); + zoomButtonsView.setPadding(0, getZoomButtonsY(y), 0, 0); } if (!customMapCenter) { if (adjustMapPos) { - adjustMapPosition(y, animated, centered); + adjustMapPosition(y, animated, centered, 0); } } else { customMapCenter = false; } } - private void adjustMapPosition(int y, boolean animated, boolean center) { + private void adjustMapPosition(int y, boolean animated, boolean center, int dZoom) { map.getAnimatedDraggingThread().stopAnimatingSync(); - LatLon latlon = getAdjustedMarkerLocation(y, menu.getLatLon(), center, getZoom()); + int zoom = getZoom() + dZoom; + LatLon latlon = getAdjustedMarkerLocation(y, menu.getLatLon(), center, zoom); - if (map.getLatitude() == latlon.getLatitude() && map.getLongitude() == latlon.getLongitude()) { + if (map.getLatitude() == latlon.getLatitude() && map.getLongitude() == latlon.getLongitude() && dZoom == 0) { return; } if (animated) { - showOnMap(latlon, false, true, true); + showOnMap(latlon, false, true, true, zoom); } else { + if (dZoom != 0) { + map.setIntZoom(zoom); + } map.setLatLon(latlon.getLatitude(), latlon.getLongitude()); } } @@ -1236,6 +1305,10 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { return fabY; } + private int getZoomButtonsY(int y) { + return y - zoomButtonsHeight - fabPaddingTopPx; + } + private boolean oldAndroid() { return (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH); } @@ -1268,7 +1341,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents { if (mapCenter != null) { map.setLatLon(mapCenter.getLatitude(), mapCenter.getLongitude()); } - adjustMapPosition(getPosY(), true, false); + adjustMapPosition(getPosY(), true, false, 0); } else { view.setVisibility(View.GONE); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java index d7e9d64af4..e6e0d4faa2 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java @@ -353,6 +353,10 @@ public abstract class MenuController extends BaseMenuController { return true; } + public boolean zoomButtonsVisible() { + return !isLandscapeLayout(); + } + public boolean buttonsVisible() { return true; } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenuFragment.java index 6ebf0ee420..1ceedaa33c 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/MapRouteInfoMenuFragment.java @@ -55,6 +55,7 @@ public class MapRouteInfoMenuFragment extends Fragment { if (menu == null) { dismiss(); } + getMapActivity().getMapLayers().getMapControlsLayer().showMapControls(); } @Override diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java index 434792feef..b55066047c 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java @@ -365,6 +365,7 @@ public class PlanRouteFragment extends Fragment implements OsmAndLocationListene if (mapActivity != null) { mapActivity.getMyApplication().getLocationProvider().addLocationListener(this); } + getMapActivity().getMapLayers().getMapControlsLayer().showMapControls(); } @Override diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index cc65e048fe..3345225bae 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -457,6 +457,12 @@ public class MeasurementToolFragment extends Fragment { return view; } + @Override + public void onResume() { + super.onResume(); + getMapActivity().getMapLayers().getMapControlsLayer().showMapControls(); + } + @Override public void onDestroyView() { super.onDestroyView(); diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index 7740d4e12b..350c284eb4 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -809,8 +809,11 @@ public class ContextMenuLayer extends OsmandMapLayer { } } - hideVisibleMenues(); - menu.onSingleTapOnMap(); + boolean processed = hideVisibleMenues(); + processed |= menu.onSingleTapOnMap(); + if (!processed) { + activity.getMapLayers().getMapControlsLayer().switchMapControlsVisibility(); + } return false; } @@ -854,10 +857,12 @@ public class ContextMenuLayer extends OsmandMapLayer { return res; } - private void hideVisibleMenues() { + private boolean hideVisibleMenues() { if (multiSelectionMenu.isVisible()) { multiSelectionMenu.hide(); + return true; } + return false; } private void showContextMenuForSelectedObjects(final LatLon latLon, final Map selectedObjects) { diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index d1b750845f..4895eaa881 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -48,6 +48,7 @@ import net.osmand.plus.dialogs.DirectionsDialogs; import net.osmand.plus.mapcontextmenu.MapContextMenu; import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu; import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu; +import net.osmand.plus.measurementtool.MeasurementToolFragment; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.views.corenative.NativeCoreContext; @@ -628,12 +629,14 @@ public class MapControlsLayer extends OsmandMapLayer { zoomInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + if (mapActivity.getContextMenu().zoomInPressed()) { + return; + } if (view.isZooming()) { mapActivity.changeZoom(2, System.currentTimeMillis()); } else { mapActivity.changeZoom(1, System.currentTimeMillis()); } - } }); final View.OnLongClickListener listener = MapControlsLayer.getOnClickMagnifierListener(view); @@ -645,12 +648,44 @@ public class MapControlsLayer extends OsmandMapLayer { zoomOutButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + if (mapActivity.getContextMenu().zoomOutPressed()) { + return; + } mapActivity.changeZoom(-1, System.currentTimeMillis()); } }); zoomOutButton.setOnLongClickListener(listener); } + public void showMapControls() { + mapActivity.findViewById(R.id.MapHudButtonsOverlay).setVisibility(View.VISIBLE); + } + public void hideMapControls() { + mapActivity.findViewById(R.id.MapHudButtonsOverlay).setVisibility(View.INVISIBLE); + } + + public void setMapControlsVisibility(boolean visible) { + View mapHudButtonsOverlay = mapActivity.findViewById(R.id.MapHudButtonsOverlay); + mapHudButtonsOverlay.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); + } + + public boolean isMapControlsVisible() { + return mapActivity.findViewById(R.id.MapHudButtonsOverlay).getVisibility() == View.VISIBLE; + } + + public void switchMapControlsVisibility() { + if (app.getRoutingHelper().isFollowingMode() || app.getRoutingHelper().isPauseNavigation() + || mapActivity.getMeasurementToolFragment() != null + || mapActivity.getPlanRouteFragment() != null) { + return; + } + if (isMapControlsVisible()) { + hideMapControls(); + } else { + showMapControls(); + } + } + public void startNavigation() { OsmandApplication app = mapActivity.getMyApplication(); RoutingHelper routingHelper = app.getRoutingHelper(); @@ -708,7 +743,7 @@ public class MapControlsLayer extends OsmandMapLayer { boolean routeFollowingMode = !routePlanningMode && rh.isFollowingMode(); boolean routeDialogOpened = MapRouteInfoMenu.isVisible(); boolean trackDialogOpened = TrackDetailsMenu.isVisible(); - boolean contextMenuOpened = mapActivity.getContextMenu().shouldShowControls(); + boolean contextMenuOpened = mapActivity.getContextMenu().shouldShowTopControls(); boolean showRouteCalculationControls = routePlanningMode || ((app.accessibilityEnabled() || (System.currentTimeMillis() - touchEvent < TIMEOUT_TO_SHOW_BUTTONS)) && routeFollowingMode); updateMyLocation(rh, routeDialogOpened || trackDialogOpened || !contextMenuOpened); @@ -790,8 +825,8 @@ public class MapControlsLayer extends OsmandMapLayer { private boolean shouldShowCompass() { float mapRotate = mapActivity.getMapView().getRotate(); return forceShowCompass || mapRotate != 0 - || settings.ROTATE_MAP.get() != OsmandSettings.ROTATE_MAP_NONE - || mapActivity.getMapLayers().getMapInfoLayer().getMapInfoControls().isVisible("compass"); + || settings.ROTATE_MAP.get() != OsmandSettings.ROTATE_MAP_NONE + || mapActivity.getMapLayers().getMapInfoLayer().getMapInfoControls().isVisible("compass"); } public CompassDrawable getCompassDrawable(Drawable originalDrawable) { @@ -1122,8 +1157,8 @@ public class MapControlsLayer extends OsmandMapLayer { this.mapQuickActionLayer = mapQuickActionLayer; } - private boolean isInMovingMarkerMode(){ - return mapQuickActionLayer == null ? contextMenuLayer.isInChangeMarkerPositionMode() || contextMenuLayer.isInAddGpxPointMode(): + private boolean isInMovingMarkerMode() { + return mapQuickActionLayer == null ? contextMenuLayer.isInChangeMarkerPositionMode() || contextMenuLayer.isInAddGpxPointMode() : mapQuickActionLayer.isInMovingMarkerMode() || contextMenuLayer.isInChangeMarkerPositionMode() || contextMenuLayer.isInAddGpxPointMode(); } diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java index b82129c738..0a62258445 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java @@ -28,8 +28,6 @@ import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.WaypointDialogHelper; import net.osmand.plus.helpers.WaypointHelper; import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper; -import net.osmand.plus.mapcontextmenu.MapContextMenu; -import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu; import net.osmand.plus.routing.RouteDirectionInfo; import net.osmand.plus.routing.RoutingHelper; @@ -813,7 +811,7 @@ public class MapInfoWidgetsFactory { } } } - if (map.isTopToolbarActive() || !map.getContextMenu().shouldShowControls()) { + if (map.isTopToolbarActive() || !map.getContextMenu().shouldShowTopControls()) { updateVisibility(false); } else if (!showNextTurn && updateWaypoint()) { updateVisibility(true); diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java index d83d387f7a..ad6af0b50a 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapMarkersWidgetsFactory.java @@ -200,7 +200,7 @@ public class MapMarkersWidgetsFactory { || MapRouteInfoMenu.isVisible() || addressTopBar.getVisibility() == View.VISIBLE || map.isTopToolbarActive() - || !map.getContextMenu().shouldShowControls() + || !map.getContextMenu().shouldShowTopControls() || map.getMapLayers().getMapMarkersLayer().isInPlanRouteMode()) { updateVisibility(false); return;