diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index 78a3937a09..4cc8c2d2db 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -1,17 +1,22 @@ package net.osmand.plus.mapcontextmenu; +import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.util.Log; +import android.widget.Toast; import net.osmand.binary.RouteDataObject; import net.osmand.data.Amenity; import net.osmand.data.FavouritePoint; +import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.osm.PoiType; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; +import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.sections.AmenityInfoMenuController; import net.osmand.plus.mapcontextmenu.sections.MenuController; @@ -57,28 +62,32 @@ public class MapContextMenu { this.pointDescription = pointDescription; this.object = object; + foundStreetName = null; - acquireStretName(); + acquireStretName(mapActivity, new LatLon(pointDescription.getLat(), pointDescription.getLon())); MapContextMenuFragment.showInstance(mapActivity); } public void hide(MapActivity mapActivity) { - - Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag("MapContextMenuFragment"); + MapContextMenuFragment fragment = findMenuFragment(mapActivity); if (fragment != null) - ((MapContextMenuFragment)fragment).dismissMenu(); + fragment.dismissMenu(); } - private void acquireStretName() { - RouteDataObject rt = app.getLocationProvider().getLastKnownRouteSegment(); - if(rt != null) { - foundStreetName = RoutingHelper.formatStreetName(rt.getName(settings.MAP_PREFERRED_LOCALE.get()), - rt.getRef(), rt.getDestinationName(settings.MAP_PREFERRED_LOCALE.get())); - } else { - foundStreetName = null; - } + public void refreshMenuTitle(MapActivity mapActivity) { + MapContextMenuFragment fragment = findMenuFragment(mapActivity); + if (fragment != null) + fragment.refreshTitle(); + } + + private MapContextMenuFragment findMenuFragment(MapActivity mapActivity) { + Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag("MapContextMenuFragment"); + if (fragment != null) + return (MapContextMenuFragment)fragment; + else + return null; } public int getLeftIconId() { @@ -135,6 +144,46 @@ public class MapContextMenu { return foundStreetName; } + private void acquireStretName(final MapActivity activity, final LatLon loc) { + new AsyncTask() { + Exception e = null; + + @Override + protected RouteDataObject doInBackground(LatLon... params) { + try { + return app.getLocationProvider().findRoute(loc.getLatitude(), loc.getLongitude()); + } catch (Exception e) { + this.e = e; + e.printStackTrace(); + return null; + } + } + + protected void onPostExecute(RouteDataObject result) { + if(e != null) { + //Toast.makeText(activity, R.string.error_avoid_specific_road, Toast.LENGTH_LONG).show(); + foundStreetName = null; + } else if(result != null) { + foundStreetName = RoutingHelper.formatStreetName(result.getName(settings.MAP_PREFERRED_LOCALE.get()), + result.getRef(), result.getDestinationName(settings.MAP_PREFERRED_LOCALE.get())); + if (foundStreetName != null && foundStreetName.trim().length() == 0) { + foundStreetName = null; + } + } else { + foundStreetName = null; + } + + if (foundStreetName != null) { + activity.runOnUiThread(new Runnable() { + public void run() { + refreshMenuTitle(activity); + } + }); + } + }; + }.execute(loc); + } + public MenuController getMenuController() { if (object != null) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 118c5fe4ac..39109275f6 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -9,6 +9,7 @@ import android.graphics.PointF; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.GestureDetector; @@ -360,13 +361,7 @@ public class MapContextMenuFragment extends Fragment { light ? R.color.osmand_orange : R.color.osmand_orange_dark)); } - // Text line 1 - TextView line1 = (TextView) view.findViewById(R.id.context_menu_line1); - line1.setText(getCtxMenu().getAddressStr()); - - // Text line 2 - TextView line2 = (TextView) view.findViewById(R.id.context_menu_line2); - line2.setText(getCtxMenu().getLocationStr(getMapActivity())); + setAddressLocation(); // Close button final ImageView closeButtonView = (ImageView)view.findViewById(R.id.context_menu_close_btn_view); @@ -440,6 +435,16 @@ public class MapContextMenuFragment extends Fragment { return view; } + private void setAddressLocation() { + // Text line 1 + TextView line1 = (TextView) view.findViewById(R.id.context_menu_line1); + line1.setText(getCtxMenu().getAddressStr()); + + // Text line 2 + TextView line2 = (TextView) view.findViewById(R.id.context_menu_line2); + line2.setText(getCtxMenu().getLocationStr(getMapActivity())); + } + private int getPosY() { int destinationState; int minHalfY; @@ -506,7 +511,14 @@ public class MapContextMenuFragment extends Fragment { } public void dismissMenu() { - getActivity().getSupportFragmentManager().popBackStack(); + FragmentActivity activity = getActivity(); + if (activity != null) { + activity.getSupportFragmentManager().popBackStack(); + } + } + + public void refreshTitle() { + setAddressLocation(); } public OsmandApplication getMyApplication() {