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.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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue