Fix bug with context menu on the center of screen

This commit is contained in:
Alexey Kulish 2015-11-11 19:08:13 +03:00
parent d4c37547ae
commit 3c6d2398b4
2 changed files with 31 additions and 15 deletions

View file

@ -7,7 +7,6 @@ import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
@ -520,21 +519,23 @@ public class MapContextMenu extends MenuTitleController {
} }
public void updateMyLocation(net.osmand.Location location) { public void updateMyLocation(net.osmand.Location location) {
if (location != null) { if (location != null && active && displayDistanceDirection()) {
myLocation = new LatLon(location.getLatitude(), location.getLongitude()); myLocation = new LatLon(location.getLatitude(), location.getLongitude());
updateLocation(false, true, false); updateLocation(false, true, false);
} }
} }
public void updateCompassValue(float value) { public void updateCompassValue(float value) {
// 99 in next line used to one-time initialize arrows (with reference vs. fixed-north direction) if (active && displayDistanceDirection()) {
// on non-compass devices // 99 in next line used to one-time initialize arrows (with reference vs. fixed-north direction)
float lastHeading = heading != null ? heading : 99; // on non-compass devices
heading = value; float lastHeading = heading != null ? heading : 99;
if (Math.abs(MapUtils.degreesDiff(lastHeading, heading)) > 5) { heading = value;
updateLocation(false, false, true); if (Math.abs(MapUtils.degreesDiff(lastHeading, heading)) > 5) {
} else { updateLocation(false, false, true);
heading = lastHeading; } else {
heading = lastHeading;
}
} }
} }

View file

@ -74,6 +74,9 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
private int menuFullHeight; private int menuFullHeight;
private int menuFullHeightMax; private int menuFullHeightMax;
private int screenHeight;
private int viewHeight;
private int fabPaddingTopPx; private int fabPaddingTopPx;
private int markerPaddingPx; private int markerPaddingPx;
private int markerPaddingXPx; private int markerPaddingXPx;
@ -126,6 +129,9 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
screenHeight = getScreenHeight();
viewHeight = screenHeight - getStatusBarHeight();
fabPaddingTopPx = dpToPx(FAB_PADDING_TOP_DP); fabPaddingTopPx = dpToPx(FAB_PADDING_TOP_DP);
markerPaddingPx = dpToPx(MARKER_PADDING_DP); markerPaddingPx = dpToPx(MARKER_PADDING_DP);
markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP); markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP);
@ -704,26 +710,26 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
private int getPosY(boolean needCloseMenu) { private int getPosY(boolean needCloseMenu) {
if (needCloseMenu) { if (needCloseMenu) {
return getScreenHeight(); return screenHeight;
} }
int destinationState; int destinationState;
int minHalfY; int minHalfY;
if (menu.isExtended()) { if (menu.isExtended()) {
destinationState = menu.getCurrentMenuState(); destinationState = menu.getCurrentMenuState();
minHalfY = view.getHeight() - (int)(view.getHeight() * menu.getHalfScreenMaxHeightKoef()); minHalfY = viewHeight - (int)(viewHeight * menu.getHalfScreenMaxHeightKoef());
} else { } else {
destinationState = MenuController.MenuState.HEADER_ONLY; destinationState = MenuController.MenuState.HEADER_ONLY;
minHalfY = view.getHeight(); minHalfY = viewHeight;
} }
int posY = 0; int posY = 0;
switch (destinationState) { switch (destinationState) {
case MenuController.MenuState.HEADER_ONLY: case MenuController.MenuState.HEADER_ONLY:
posY = view.getHeight() - (menuTitleHeight - dpToPx(SHADOW_HEIGHT_BOTTOM_DP)); posY = viewHeight - (menuTitleHeight - dpToPx(SHADOW_HEIGHT_BOTTOM_DP));
break; break;
case MenuController.MenuState.HALF_SCREEN: case MenuController.MenuState.HALF_SCREEN:
posY = view.getHeight() - menuFullHeightMax; posY = viewHeight - menuFullHeightMax;
posY = Math.max(posY, minHalfY); posY = Math.max(posY, minHalfY);
break; break;
case MenuController.MenuState.FULL_SCREEN: case MenuController.MenuState.FULL_SCREEN:
@ -925,6 +931,15 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
return dm.heightPixels; return dm.heightPixels;
} }
public int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
public void updateLocation(boolean centerChanged, boolean locationChanged, boolean compassChanged) { public void updateLocation(boolean centerChanged, boolean locationChanged, boolean compassChanged) {
updateDistanceDirection(); updateDistanceDirection();
} }