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

View file

@ -74,6 +74,9 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
private int menuFullHeight;
private int menuFullHeightMax;
private int screenHeight;
private int viewHeight;
private int fabPaddingTopPx;
private int markerPaddingPx;
private int markerPaddingXPx;
@ -126,6 +129,9 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
screenHeight = getScreenHeight();
viewHeight = screenHeight - getStatusBarHeight();
fabPaddingTopPx = dpToPx(FAB_PADDING_TOP_DP);
markerPaddingPx = dpToPx(MARKER_PADDING_DP);
markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP);
@ -704,26 +710,26 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
private int getPosY(boolean needCloseMenu) {
if (needCloseMenu) {
return getScreenHeight();
return screenHeight;
}
int destinationState;
int minHalfY;
if (menu.isExtended()) {
destinationState = menu.getCurrentMenuState();
minHalfY = view.getHeight() - (int)(view.getHeight() * menu.getHalfScreenMaxHeightKoef());
minHalfY = viewHeight - (int)(viewHeight * menu.getHalfScreenMaxHeightKoef());
} else {
destinationState = MenuController.MenuState.HEADER_ONLY;
minHalfY = view.getHeight();
minHalfY = viewHeight;
}
int posY = 0;
switch (destinationState) {
case MenuController.MenuState.HEADER_ONLY:
posY = view.getHeight() - (menuTitleHeight - dpToPx(SHADOW_HEIGHT_BOTTOM_DP));
posY = viewHeight - (menuTitleHeight - dpToPx(SHADOW_HEIGHT_BOTTOM_DP));
break;
case MenuController.MenuState.HALF_SCREEN:
posY = view.getHeight() - menuFullHeightMax;
posY = viewHeight - menuFullHeightMax;
posY = Math.max(posY, minHalfY);
break;
case MenuController.MenuState.FULL_SCREEN:
@ -925,6 +931,15 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
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) {
updateDistanceDirection();
}