Fix bug with context menu on the center of screen
This commit is contained in:
parent
d4c37547ae
commit
3c6d2398b4
2 changed files with 31 additions and 15 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue