diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 2883488e36..51e5efea2a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -17,6 +17,7 @@ import android.os.Message; import android.support.v4.app.NotificationCompat.Builder; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.NotificationCompat; +import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; @@ -545,8 +546,8 @@ public class MapActivity extends AccessibleActivity { dashboardOnMap.hideDashboard(); } if (mapLabelToShow != null) { + contextMenuOnMap.setMapCenter(latLonToShow); contextMenuOnMap.show(latLonToShow, mapLabelToShow, toShow); - //mapLayers.getContextMenuLayer().setLocation(latLonToShow, mapLabelToShow.getFullPlainName(this)); } if (!latLonToShow.equals(cur)) { mapView.getAnimatedDraggingThread().startMoving(latLonToShow.getLatitude(), diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchHistoryFragment.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchHistoryFragment.java index 34c40551e6..11a2d09b0f 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchHistoryFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchHistoryFragment.java @@ -7,9 +7,11 @@ import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; +import android.support.v7.widget.PopupMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -34,6 +36,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmAndListFragment; import net.osmand.plus.activities.search.SearchActivity.SearchActivityChild; import net.osmand.plus.dashboard.DashLocationFragment; +import net.osmand.plus.dialogs.DirectionsDialogs; import net.osmand.plus.helpers.SearchHistoryHelper; import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; import net.osmand.util.MapUtils; @@ -80,10 +83,10 @@ public class SearchHistoryFragment extends OsmAndListFragment implements SearchA Builder bld = new AlertDialog.Builder(getActivity()); bld.setMessage(R.string.confirmation_to_clear_history); bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { - + @Override public void onClick(DialogInterface dialog, int which) { - clearWithoutConfirmation(); + clearWithoutConfirmation(); } }); bld.setNegativeButton(R.string.shared_string_no, null); @@ -190,6 +193,22 @@ public class SearchHistoryFragment extends OsmAndListFragment implements SearchA MapActivity.launchMapActivityMoveToTop(getActivity()); } + private void selectModelOptions(final HistoryEntry model, View v) { + final PopupMenu optionsMenu = new PopupMenu(getActivity(), v); + MenuItem item = optionsMenu.getMenu().add( + R.string.shared_string_delete).setIcon( + getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_action_delete_dark)); + item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + helper.remove(model); + historyAdapter.remove(model); + return true; + } + }); + optionsMenu.show(); + } + class HistoryAdapter extends ArrayAdapter { private LatLon location; @@ -222,7 +241,7 @@ public class SearchHistoryFragment extends OsmAndListFragment implements SearchA options.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - selectModel(historyEntry); + selectModelOptions(historyEntry, v); } }); return row; diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index aadd8b4d0c..e2817c38ee 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -37,6 +37,8 @@ public class MapContextMenu { private Object object; MenuController menuController; + private LatLon mapCenter; + private int leftIconId; private Drawable leftIcon; private String nameStr; @@ -55,6 +57,7 @@ public class MapContextMenu { private static final String KEY_CTX_MENU_TYPE_STR = "key_ctx_menu_type_str"; private static final String KEY_CTX_MENU_STREET_STR = "key_ctx_menu_street_str"; private static final String KEY_CTX_MENU_ADDR_UNKNOWN = "key_ctx_menu_addr_unknown"; + private static final String KEY_CTX_MENU_MAP_CENTER = "key_ctx_menu_map_center"; public boolean isActive() { return active; @@ -68,6 +71,14 @@ public class MapContextMenu { return latLon; } + public LatLon getMapCenter() { + return mapCenter; + } + + public void setMapCenter(LatLon mapCenter) { + this.mapCenter = mapCenter; + } + public PointDescription getPointDescription() { return pointDescription; } @@ -388,6 +399,7 @@ public class MapContextMenu { bundle.putString(KEY_CTX_MENU_TYPE_STR, typeStr); bundle.putString(KEY_CTX_MENU_STREET_STR, streetStr); bundle.putString(KEY_CTX_MENU_ADDR_UNKNOWN, Boolean.toString(addressUnknown)); + bundle.putSerializable(KEY_CTX_MENU_MAP_CENTER, mapCenter); } public void restoreMenuState(Bundle bundle) { @@ -406,6 +418,11 @@ public class MapContextMenu { active = false; } + Object mapCenterObj = bundle.getSerializable(KEY_CTX_MENU_MAP_CENTER); + if (mapCenterObj != null) { + mapCenter = (LatLon) mapCenterObj; + } + nameStr = bundle.getString(KEY_CTX_MENU_NAME_STR); typeStr = bundle.getString(KEY_CTX_MENU_TYPE_STR); streetStr = bundle.getString(KEY_CTX_MENU_STREET_STR); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 4fa23f35da..23e42fb60b 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -74,10 +74,10 @@ public class MapContextMenuFragment extends Fragment { private int markerPaddingXPx; private OsmandMapTileView map; - private double origMapCenterLat; - private double origMapCenterLon; + private LatLon mapCenter; private int origMarkerX; private int origMarkerY; + private boolean customMapCenter; private class SingleTapConfirm implements OnGestureListener { @@ -135,13 +135,20 @@ public class MapContextMenuFragment extends Fragment { } map = getMapActivity().getMapView(); - origMapCenterLat = map.getLatitude(); - origMapCenterLon = map.getLongitude(); - RotatedTileBox box = map.getCurrentRotatedTileBox(); - double markerLat = menu.getLatLon().getLatitude(); - double markerLon = menu.getLatLon().getLongitude(); - origMarkerX = (int)box.getPixXFromLatLon(markerLat, markerLon); - origMarkerY = (int)box.getPixYFromLatLon(markerLat, markerLon); + RotatedTileBox box = map.getCurrentRotatedTileBox().copy(); + customMapCenter = menu.getMapCenter() != null; + if (!customMapCenter) { + mapCenter = box.getCenterLatLon(); + menu.setMapCenter(mapCenter); + double markerLat = menu.getLatLon().getLatitude(); + double markerLon = menu.getLatLon().getLongitude(); + origMarkerX = (int)box.getPixXFromLatLon(markerLat, markerLon); + origMarkerY = (int)box.getPixYFromLatLon(markerLat, markerLon); + } else { + mapCenter = menu.getMapCenter(); + origMarkerX = box.getCenterPixelX(); + origMarkerY = box.getCenterPixelY(); + } view = inflater.inflate(R.layout.map_context_menu_fragment, container, false); mainView = view.findViewById(R.id.context_menu_main); @@ -409,7 +416,8 @@ public class MapContextMenuFragment extends Fragment { @Override public void onDestroyView() { super.onDestroyView(); - map.setLatLon(origMapCenterLat, origMapCenterLon); + map.setLatLon(mapCenter.getLatitude(), mapCenter.getLongitude()); + menu.setMapCenter(null); getMapActivity().getMapLayers().getMapControlsLayer().setControlsClickable(true); } @@ -447,6 +455,11 @@ public class MapContextMenuFragment extends Fragment { obs.removeGlobalOnLayoutListener(this); } + if (origMarkerX == 0 && origMarkerY == 0) { + origMarkerX = view.getWidth() / 2; + origMarkerY = view.getHeight() / 2; + } + doLayoutMenu(); } @@ -454,25 +467,24 @@ public class MapContextMenuFragment extends Fragment { } private void showOnMap(LatLon latLon, boolean updateCoords, boolean ignoreCoef) { - MapActivity ctx = getMapActivity(); - AnimateDraggingMapThread thread = ctx.getMapView().getAnimatedDraggingThread(); - int fZoom = ctx.getMapView().getZoom(); + AnimateDraggingMapThread thread = map.getAnimatedDraggingThread(); + int fZoom = map.getZoom(); double flat = latLon.getLatitude(); double flon = latLon.getLongitude(); - RotatedTileBox cp = ctx.getMapView().getCurrentRotatedTileBox().copy(); + RotatedTileBox cp = map.getCurrentRotatedTileBox().copy(); if (ignoreCoef) { cp.setCenterLocation(0.5f, 0.5f); } else { - cp.setCenterLocation(0.5f, ctx.getMapView().getMapPosition() == OsmandSettings.BOTTOM_CONSTANT ? 0.15f : 0.5f); + cp.setCenterLocation(0.5f, map.getMapPosition() == OsmandSettings.BOTTOM_CONSTANT ? 0.15f : 0.5f); } cp.setLatLonCenter(flat, flon); flat = cp.getLatFromPixel(cp.getPixWidth() / 2, cp.getPixHeight() / 2); flon = cp.getLonFromPixel(cp.getPixWidth() / 2, cp.getPixHeight() / 2); if (updateCoords) { - origMapCenterLat = flat; - origMapCenterLon = flon; + mapCenter = new LatLon(flat, flon); + menu.setMapCenter(mapCenter); origMarkerX = cp.getCenterPixelX(); origMarkerY = cp.getCenterPixelY(); } @@ -558,15 +570,19 @@ public class MapContextMenuFragment extends Fragment { mainView.setPadding(0, y, 0, 0); fabView.setPadding(0, getFabY(y), 0, 0); } - adjustMapPosition(y, animated); + if (!customMapCenter) { + adjustMapPosition(y, animated); + } else { + customMapCenter = false; + } } private void adjustMapPosition(int y, boolean animated) { double markerLat = menu.getLatLon().getLatitude(); double markerLon = menu.getLatLon().getLongitude(); - RotatedTileBox box = map.getCurrentRotatedTileBox(); + RotatedTileBox box = map.getCurrentRotatedTileBox().copy(); - LatLon latlon = new LatLon(origMapCenterLat, origMapCenterLon); + LatLon latlon = mapCenter; if (menu.isLandscapeLayout()) { int markerX = (int)box.getPixXFromLatLon(markerLat, markerLon); int x = dpToPx(menu.getLandscapeWidthDp());