Add the ability to add intermediate points from waypoints dialog options menu
This commit is contained in:
parent
b69d6cd1d9
commit
cc2b19994a
7 changed files with 198 additions and 64 deletions
|
@ -1821,11 +1821,15 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
hideContextMenu();
|
hideContextMenu();
|
||||||
}
|
}
|
||||||
QuickSearchDialogFragment fragment = getQuickSearchDialogFragment();
|
QuickSearchDialogFragment fragment = getQuickSearchDialogFragment();
|
||||||
if (mode == ShowQuickSearchMode.START_POINT_SELECTION || mode == ShowQuickSearchMode.DESTINATION_SELECTION) {
|
if (mode == ShowQuickSearchMode.START_POINT_SELECTION || mode == ShowQuickSearchMode.DESTINATION_SELECTION
|
||||||
|
|| mode == ShowQuickSearchMode.INTERMEDIATE_SELECTION) {
|
||||||
if (fragment != null) {
|
if (fragment != null) {
|
||||||
fragment.dismiss();
|
fragment.dismiss();
|
||||||
}
|
}
|
||||||
if (mode == ShowQuickSearchMode.START_POINT_SELECTION) {
|
if (mode == ShowQuickSearchMode.INTERMEDIATE_SELECTION) {
|
||||||
|
QuickSearchDialogFragment.showInstance(this, "", null,
|
||||||
|
QuickSearchType.INTERMEDIATE, showCategories ? QuickSearchTab.CATEGORIES : QuickSearchTab.ADDRESS, null);
|
||||||
|
} else if (mode == ShowQuickSearchMode.START_POINT_SELECTION) {
|
||||||
QuickSearchDialogFragment.showInstance(this, "", null,
|
QuickSearchDialogFragment.showInstance(this, "", null,
|
||||||
QuickSearchType.START_POINT, showCategories ? QuickSearchTab.CATEGORIES : QuickSearchTab.ADDRESS, null);
|
QuickSearchType.START_POINT, showCategories ? QuickSearchTab.CATEGORIES : QuickSearchTab.ADDRESS, null);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1915,6 +1919,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
CURRENT,
|
CURRENT,
|
||||||
START_POINT_SELECTION,
|
START_POINT_SELECTION,
|
||||||
DESTINATION_SELECTION,
|
DESTINATION_SELECTION,
|
||||||
|
INTERMEDIATE_SELECTION
|
||||||
}
|
}
|
||||||
|
|
||||||
public InAppHelper execInAppTask(@NonNull InAppHelper.InAppRunnable runnable) {
|
public InAppHelper execInAppTask(@NonNull InAppHelper.InAppRunnable runnable) {
|
||||||
|
|
|
@ -15,6 +15,8 @@ import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.FragmentActivity;
|
import android.support.v4.app.FragmentActivity;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.support.v7.widget.ListPopupWindow;
|
||||||
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
|
@ -45,6 +47,7 @@ import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerHalfItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerHalfItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||||
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
|
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
|
||||||
|
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
|
||||||
import net.osmand.plus.poi.PoiUIFilter;
|
import net.osmand.plus.poi.PoiUIFilter;
|
||||||
import net.osmand.plus.views.controls.DynamicListView.DragIcon;
|
import net.osmand.plus.views.controls.DynamicListView.DragIcon;
|
||||||
import net.osmand.plus.views.controls.ListDividerShape;
|
import net.osmand.plus.views.controls.ListDividerShape;
|
||||||
|
@ -1027,7 +1030,19 @@ public class WaypointDialogHelper {
|
||||||
|
|
||||||
items.add(new DividerHalfItem(getContext()));
|
items.add(new DividerHalfItem(getContext()));
|
||||||
|
|
||||||
// add waypoint item
|
final BaseBottomSheetItem[] addWaypointItem = new BaseBottomSheetItem[1];
|
||||||
|
addWaypointItem[0] = new SimpleBottomSheetItem.Builder()
|
||||||
|
.setIcon(getContentIcon(R.drawable.ic_action_plus))
|
||||||
|
.setTitle(getString(R.string.add_waypoint))
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple)
|
||||||
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
onWaypointItemClick(addWaypointItem);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
items.add(addWaypointItem[0]);
|
||||||
|
|
||||||
BaseBottomSheetItem clearIntermediatesItem = new SimpleBottomSheetItem.Builder()
|
BaseBottomSheetItem clearIntermediatesItem = new SimpleBottomSheetItem.Builder()
|
||||||
.setIcon(getContentIcon(R.drawable.ic_action_clear_all))
|
.setIcon(getContentIcon(R.drawable.ic_action_clear_all))
|
||||||
|
@ -1057,6 +1072,41 @@ public class WaypointDialogHelper {
|
||||||
return R.string.shared_string_close;
|
return R.string.shared_string_close;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onWaypointItemClick(BaseBottomSheetItem[] addWaypointItem) {
|
||||||
|
final MapActivity mapActivity = getMapActivity();
|
||||||
|
if (mapActivity != null) {
|
||||||
|
final MapRouteInfoMenu routeMenu = mapActivity.getMapLayers().getMapControlsLayer().getMapRouteInfoMenu();
|
||||||
|
final ListPopupWindow popup = new ListPopupWindow(mapActivity);
|
||||||
|
popup.setAnchorView(addWaypointItem[0].getView());
|
||||||
|
popup.setDropDownGravity(Gravity.END | Gravity.TOP);
|
||||||
|
popup.setVerticalOffset(AndroidUtils.dpToPx(mapActivity, 48f));
|
||||||
|
popup.setModal(true);
|
||||||
|
popup.setAdapter(routeMenu.getIntermediatesPopupAdapter(mapActivity));
|
||||||
|
popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (id == MapRouteInfoMenu.SPINNER_FAV_ID) {
|
||||||
|
routeMenu.selectFavorite(null, false, true);
|
||||||
|
} else if (id == MapRouteInfoMenu.SPINNER_MAP_ID) {
|
||||||
|
routeMenu.selectOnScreen(false, true);
|
||||||
|
} else if (id == MapRouteInfoMenu.SPINNER_ADDRESS_ID) {
|
||||||
|
mapActivity.showQuickSearch(MapActivity.ShowQuickSearchMode.INTERMEDIATE_SELECTION, false);
|
||||||
|
} else if (id == MapRouteInfoMenu.SPINNER_MAP_MARKER_MORE_ID) {
|
||||||
|
routeMenu.selectMapMarker(-1, false, true);
|
||||||
|
} else if (id == MapRouteInfoMenu.SPINNER_MAP_MARKER_1_ID) {
|
||||||
|
routeMenu.selectMapMarker(0, false, true);
|
||||||
|
} else if (id == MapRouteInfoMenu.SPINNER_MAP_MARKER_2_ID) {
|
||||||
|
routeMenu.selectMapMarker(1, false, true);
|
||||||
|
}
|
||||||
|
popup.dismiss();
|
||||||
|
dismiss();
|
||||||
|
mapActivity.getDashboard().hideDashboard();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
popup.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private MapActivity getMapActivity() {
|
private MapActivity getMapActivity() {
|
||||||
Activity activity = getActivity();
|
Activity activity = getActivity();
|
||||||
|
|
|
@ -6,6 +6,8 @@ import android.content.DialogInterface;
|
||||||
import android.content.DialogInterface.OnDismissListener;
|
import android.content.DialogInterface.OnDismissListener;
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
@ -67,6 +69,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
private GeocodingLookupService geocodingLookupService;
|
private GeocodingLookupService geocodingLookupService;
|
||||||
private boolean selectFromMapTouch;
|
private boolean selectFromMapTouch;
|
||||||
private boolean selectFromMapForTarget;
|
private boolean selectFromMapForTarget;
|
||||||
|
private boolean selectFromMapForIntermediate;
|
||||||
|
|
||||||
private boolean showMenu = false;
|
private boolean showMenu = false;
|
||||||
private static boolean visible;
|
private static boolean visible;
|
||||||
|
@ -84,19 +87,19 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
private OnMarkerSelectListener onMarkerSelectListener;
|
private OnMarkerSelectListener onMarkerSelectListener;
|
||||||
|
|
||||||
private static final long SPINNER_MY_LOCATION_ID = 1;
|
private static final long SPINNER_MY_LOCATION_ID = 1;
|
||||||
private static final long SPINNER_FAV_ID = 2;
|
public static final long SPINNER_FAV_ID = 2;
|
||||||
private static final long SPINNER_MAP_ID = 3;
|
public static final long SPINNER_MAP_ID = 3;
|
||||||
private static final long SPINNER_ADDRESS_ID = 4;
|
public static final long SPINNER_ADDRESS_ID = 4;
|
||||||
private static final long SPINNER_START_ID = 5;
|
private static final long SPINNER_START_ID = 5;
|
||||||
private static final long SPINNER_FINISH_ID = 6;
|
private static final long SPINNER_FINISH_ID = 6;
|
||||||
private static final long SPINNER_HINT_ID = 100;
|
private static final long SPINNER_HINT_ID = 100;
|
||||||
private static final long SPINNER_MAP_MARKER_1_ID = 301;
|
public static final long SPINNER_MAP_MARKER_1_ID = 301;
|
||||||
private static final long SPINNER_MAP_MARKER_2_ID = 302;
|
public static final long SPINNER_MAP_MARKER_2_ID = 302;
|
||||||
private static final long SPINNER_MAP_MARKER_3_ID = 303;
|
private static final long SPINNER_MAP_MARKER_3_ID = 303;
|
||||||
private static final long SPINNER_MAP_MARKER_MORE_ID = 350;
|
public static final long SPINNER_MAP_MARKER_MORE_ID = 350;
|
||||||
|
|
||||||
public interface OnMarkerSelectListener {
|
public interface OnMarkerSelectListener {
|
||||||
void onSelect(int index, boolean target);
|
void onSelect(int index, boolean target, boolean intermediate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapRouteInfoMenu(MapActivity mapActivity, MapControlsLayer mapControlsLayer) {
|
public MapRouteInfoMenu(MapActivity mapActivity, MapControlsLayer mapControlsLayer) {
|
||||||
|
@ -109,8 +112,8 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
geocodingLookupService = mapActivity.getMyApplication().getGeocodingLookupService();
|
geocodingLookupService = mapActivity.getMyApplication().getGeocodingLookupService();
|
||||||
onMarkerSelectListener = new OnMarkerSelectListener() {
|
onMarkerSelectListener = new OnMarkerSelectListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelect(int index, boolean target) {
|
public void onSelect(int index, boolean target, boolean intermediate) {
|
||||||
selectMapMarker(index, target);
|
selectMapMarker(index, target, intermediate);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -131,7 +134,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
if (selectFromMapTouch) {
|
if (selectFromMapTouch) {
|
||||||
LatLon latlon = tileBox.getLatLonFromPixel(point.x, point.y);
|
LatLon latlon = tileBox.getLatLonFromPixel(point.x, point.y);
|
||||||
selectFromMapTouch = false;
|
selectFromMapTouch = false;
|
||||||
if (selectFromMapForTarget) {
|
if (selectFromMapForIntermediate) {
|
||||||
|
getTargets().navigateToPoint(latlon, true, getTargets().getIntermediatePoints().size());
|
||||||
|
} else if (selectFromMapForTarget) {
|
||||||
getTargets().navigateToPoint(latlon, true, -1);
|
getTargets().navigateToPoint(latlon, true, -1);
|
||||||
} else {
|
} else {
|
||||||
getTargets().setStartPoint(latlon, true, null);
|
getTargets().setStartPoint(latlon, true, null);
|
||||||
|
@ -337,21 +342,21 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (id == SPINNER_FAV_ID) {
|
if (id == SPINNER_FAV_ID) {
|
||||||
selectFavorite(parentView, true);
|
selectFavorite(parentView, true, false);
|
||||||
} else if (id == SPINNER_MAP_ID) {
|
} else if (id == SPINNER_MAP_ID) {
|
||||||
selectOnScreen(true);
|
selectOnScreen(true, false);
|
||||||
} else if (id == SPINNER_ADDRESS_ID) {
|
} else if (id == SPINNER_ADDRESS_ID) {
|
||||||
mapActivity.showQuickSearch(MapActivity.ShowQuickSearchMode.DESTINATION_SELECTION, false);
|
mapActivity.showQuickSearch(MapActivity.ShowQuickSearchMode.DESTINATION_SELECTION, false);
|
||||||
setupToSpinner(parentView);
|
setupToSpinner(parentView);
|
||||||
} else if (id == SPINNER_MAP_MARKER_MORE_ID) {
|
} else if (id == SPINNER_MAP_MARKER_MORE_ID) {
|
||||||
selectMapMarker(-1, true);
|
selectMapMarker(-1, true, false);
|
||||||
setupToSpinner(parentView);
|
setupToSpinner(parentView);
|
||||||
} else if (id == SPINNER_MAP_MARKER_1_ID) {
|
} else if (id == SPINNER_MAP_MARKER_1_ID) {
|
||||||
selectMapMarker(0, true);
|
selectMapMarker(0, true, false);
|
||||||
} else if (id == SPINNER_MAP_MARKER_2_ID) {
|
} else if (id == SPINNER_MAP_MARKER_2_ID) {
|
||||||
selectMapMarker(1, true);
|
selectMapMarker(1, true, false);
|
||||||
} else if (id == SPINNER_MAP_MARKER_3_ID) {
|
} else if (id == SPINNER_MAP_MARKER_3_ID) {
|
||||||
selectMapMarker(2, true);
|
selectMapMarker(2, true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -407,21 +412,21 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
}
|
}
|
||||||
updateFromIcon(parentView);
|
updateFromIcon(parentView);
|
||||||
} else if (id == SPINNER_FAV_ID) {
|
} else if (id == SPINNER_FAV_ID) {
|
||||||
selectFavorite(parentView, false);
|
selectFavorite(parentView, false, false);
|
||||||
} else if (id == SPINNER_MAP_ID) {
|
} else if (id == SPINNER_MAP_ID) {
|
||||||
selectOnScreen(false);
|
selectOnScreen(false, false);
|
||||||
} else if (id == SPINNER_ADDRESS_ID) {
|
} else if (id == SPINNER_ADDRESS_ID) {
|
||||||
mapActivity.showQuickSearch(MapActivity.ShowQuickSearchMode.START_POINT_SELECTION, false);
|
mapActivity.showQuickSearch(MapActivity.ShowQuickSearchMode.START_POINT_SELECTION, false);
|
||||||
setupFromSpinner(parentView);
|
setupFromSpinner(parentView);
|
||||||
} else if (id == SPINNER_MAP_MARKER_MORE_ID) {
|
} else if (id == SPINNER_MAP_MARKER_MORE_ID) {
|
||||||
selectMapMarker(-1, false);
|
selectMapMarker(-1, false, false);
|
||||||
setupFromSpinner(parentView);
|
setupFromSpinner(parentView);
|
||||||
} else if (id == SPINNER_MAP_MARKER_1_ID) {
|
} else if (id == SPINNER_MAP_MARKER_1_ID) {
|
||||||
selectMapMarker(0, false);
|
selectMapMarker(0, false, false);
|
||||||
} else if (id == SPINNER_MAP_MARKER_2_ID) {
|
} else if (id == SPINNER_MAP_MARKER_2_ID) {
|
||||||
selectMapMarker(1, false);
|
selectMapMarker(1, false, false);
|
||||||
} else if (id == SPINNER_MAP_MARKER_3_ID) {
|
} else if (id == SPINNER_MAP_MARKER_3_ID) {
|
||||||
selectMapMarker(2, false);
|
selectMapMarker(2, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -450,15 +455,18 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
getTargets().getPointToStart() == null ? R.drawable.ic_action_location_color : R.drawable.list_startpoint));
|
getTargets().getPointToStart() == null ? R.drawable.ic_action_location_color : R.drawable.list_startpoint));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void selectOnScreen(boolean target) {
|
public void selectOnScreen(boolean target, boolean intermediate) {
|
||||||
selectFromMapTouch = true;
|
selectFromMapTouch = true;
|
||||||
selectFromMapForTarget = target;
|
selectFromMapForTarget = target;
|
||||||
|
selectFromMapForIntermediate = intermediate;
|
||||||
hide();
|
hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectAddress(String name, LatLon l, final boolean target) {
|
public void selectAddress(String name, LatLon l, final boolean target, final boolean intermediate) {
|
||||||
PointDescription pd = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, name);
|
PointDescription pd = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, name);
|
||||||
if (target) {
|
if (intermediate) {
|
||||||
|
getTargets().navigateToPoint(l, true, getTargets().getIntermediatePoints().size(), pd);
|
||||||
|
} else if (target) {
|
||||||
getTargets().navigateToPoint(l, true, -1, pd);
|
getTargets().navigateToPoint(l, true, -1, pd);
|
||||||
} else {
|
} else {
|
||||||
getTargets().setStartPoint(l, true, pd);
|
getTargets().setStartPoint(l, true, pd);
|
||||||
|
@ -466,31 +474,35 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
updateMenu();
|
updateMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void selectFavorite(final View parentView, final boolean target) {
|
public void selectFavorite(@Nullable final View parentView, final boolean target, final boolean intermediate) {
|
||||||
final FavouritesAdapter favouritesAdapter = new FavouritesAdapter(mapActivity, mapActivity.getMyApplication()
|
final FavouritesAdapter favouritesAdapter = new FavouritesAdapter(mapActivity, mapActivity.getMyApplication()
|
||||||
.getFavorites().getVisibleFavouritePoints(), false);
|
.getFavorites().getVisibleFavouritePoints(), false);
|
||||||
Dialog[] dlgHolder = new Dialog[1];
|
Dialog[] dlgHolder = new Dialog[1];
|
||||||
OnItemClickListener click = getOnFavoriteClickListener(target, favouritesAdapter, dlgHolder);
|
OnItemClickListener click = getOnFavoriteClickListener(target, intermediate, favouritesAdapter, dlgHolder);
|
||||||
OnDismissListener dismissListener = new DialogInterface.OnDismissListener() {
|
OnDismissListener dismissListener = null;
|
||||||
|
if (!intermediate && parentView != null) {
|
||||||
@Override
|
dismissListener = new OnDismissListener() {
|
||||||
public void onDismiss(DialogInterface dialog) {
|
@Override
|
||||||
if (target) {
|
public void onDismiss(DialogInterface dialog) {
|
||||||
setupToSpinner(parentView);
|
if (target) {
|
||||||
} else {
|
setupToSpinner(parentView);
|
||||||
setupFromSpinner(parentView);
|
} else {
|
||||||
|
setupFromSpinner(parentView);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
}
|
||||||
favouritesAdapter.updateLocation(mapActivity.getMapLocation());
|
favouritesAdapter.updateLocation(mapActivity.getMapLocation());
|
||||||
FavoriteDialogs.showFavoritesDialog(mapActivity, favouritesAdapter, click, dismissListener, dlgHolder, true);
|
FavoriteDialogs.showFavoritesDialog(mapActivity, favouritesAdapter, click, dismissListener, dlgHolder, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectMapMarker(final int index, final boolean target) {
|
public void selectMapMarker(final int index, final boolean target, final boolean intermediate) {
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
MapMarker m = mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkers().get(index);
|
MapMarker m = mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkers().get(index);
|
||||||
LatLon point = new LatLon(m.getLatitude(), m.getLongitude());
|
LatLon point = new LatLon(m.getLatitude(), m.getLongitude());
|
||||||
if (target) {
|
if (intermediate) {
|
||||||
|
getTargets().navigateToPoint(point, true, getTargets().getIntermediatePoints().size(), m.getPointDescription(mapActivity));
|
||||||
|
} else if (target) {
|
||||||
getTargets().navigateToPoint(point, true, -1, m.getPointDescription(mapActivity));
|
getTargets().navigateToPoint(point, true, -1, m.getPointDescription(mapActivity));
|
||||||
} else {
|
} else {
|
||||||
getTargets().setStartPoint(point, true, m.getPointDescription(mapActivity));
|
getTargets().setStartPoint(point, true, m.getPointDescription(mapActivity));
|
||||||
|
@ -499,7 +511,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
MapMarkerSelectionFragment selectionFragment = MapMarkerSelectionFragment.newInstance(target);
|
MapMarkerSelectionFragment selectionFragment = MapMarkerSelectionFragment.newInstance(target, intermediate);
|
||||||
selectionFragment.show(mapActivity.getSupportFragmentManager(), MapMarkerSelectionFragment.TAG);
|
selectionFragment.show(mapActivity.getSupportFragmentManager(), MapMarkerSelectionFragment.TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -513,7 +525,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
return iconsCache.getIcon(iconId, 0);
|
return iconsCache.getIcon(iconId, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private OnItemClickListener getOnFavoriteClickListener(final boolean target, final FavouritesAdapter favouritesAdapter,
|
private OnItemClickListener getOnFavoriteClickListener(final boolean target,
|
||||||
|
final boolean intermediate,
|
||||||
|
final FavouritesAdapter favouritesAdapter,
|
||||||
final Dialog[] dlg) {
|
final Dialog[] dlg) {
|
||||||
return new AdapterView.OnItemClickListener() {
|
return new AdapterView.OnItemClickListener() {
|
||||||
|
|
||||||
|
@ -521,7 +535,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
FavouritePoint fp = favouritesAdapter.getItem(position);
|
FavouritePoint fp = favouritesAdapter.getItem(position);
|
||||||
LatLon point = new LatLon(fp.getLatitude(), fp.getLongitude());
|
LatLon point = new LatLon(fp.getLatitude(), fp.getLongitude());
|
||||||
if (target) {
|
if (intermediate) {
|
||||||
|
getTargets().navigateToPoint(point, true, getTargets().getIntermediatePoints().size(), fp.getPointDescription());
|
||||||
|
} else if (target) {
|
||||||
getTargets().navigateToPoint(point, true, -1, fp.getPointDescription());
|
getTargets().navigateToPoint(point, true, -1, fp.getPointDescription());
|
||||||
} else {
|
} else {
|
||||||
getTargets().setStartPoint(point, true, fp.getPointDescription());
|
getTargets().setStartPoint(point, true, fp.getPointDescription());
|
||||||
|
@ -529,7 +545,9 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
if (dlg != null && dlg.length > 0 && dlg[0] != null) {
|
if (dlg != null && dlg.length > 0 && dlg[0] != null) {
|
||||||
dlg[0].dismiss();
|
dlg[0].dismiss();
|
||||||
}
|
}
|
||||||
updateFromIcon();
|
if (!intermediate) {
|
||||||
|
updateFromIcon();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -822,6 +840,26 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
return toSpinner;
|
return toSpinner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RoutePopupListArrayAdapter getIntermediatesPopupAdapter(Context ctx) {
|
||||||
|
List<RouteSpinnerRow> viaActions = new ArrayList<>();
|
||||||
|
|
||||||
|
viaActions.add(new RouteSpinnerRow(SPINNER_FAV_ID, R.drawable.ic_action_fav_dark,
|
||||||
|
mapActivity.getString(R.string.shared_string_favorite) + mapActivity.getString(R.string.shared_string_ellipsis)));
|
||||||
|
viaActions.add(new RouteSpinnerRow(SPINNER_MAP_ID, R.drawable.ic_action_marker_dark,
|
||||||
|
mapActivity.getString(R.string.shared_string_select_on_map)));
|
||||||
|
viaActions.add(new RouteSpinnerRow(SPINNER_ADDRESS_ID, R.drawable.ic_action_home_dark,
|
||||||
|
mapActivity.getString(R.string.shared_string_address) + mapActivity.getString(R.string.shared_string_ellipsis)));
|
||||||
|
|
||||||
|
addMarkersToSpinner(viaActions);
|
||||||
|
|
||||||
|
RoutePopupListArrayAdapter viaAdapter = new RoutePopupListArrayAdapter(ctx);
|
||||||
|
for (RouteSpinnerRow row : viaActions) {
|
||||||
|
viaAdapter.add(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
return viaAdapter;
|
||||||
|
}
|
||||||
|
|
||||||
private void addMarkersToSpinner(List<RouteSpinnerRow> actions) {
|
private void addMarkersToSpinner(List<RouteSpinnerRow> actions) {
|
||||||
MapMarkersHelper markersHelper = mapActivity.getMyApplication().getMapMarkersHelper();
|
MapMarkersHelper markersHelper = mapActivity.getMyApplication().getMapMarkersHelper();
|
||||||
List<MapMarker> markers = markersHelper.getMapMarkers();
|
List<MapMarker> markers = markersHelper.getMapMarkers();
|
||||||
|
@ -944,11 +982,10 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RouteSpinnerArrayAdapter extends ArrayAdapter<RouteSpinnerRow> {
|
private class RouteBaseArrayAdapter extends ArrayAdapter<RouteSpinnerRow> {
|
||||||
|
|
||||||
public RouteSpinnerArrayAdapter(Context context) {
|
RouteBaseArrayAdapter(@NonNull Context context, int resource) {
|
||||||
super(context, android.R.layout.simple_spinner_item);
|
super(context, resource);
|
||||||
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -968,8 +1005,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
return id != SPINNER_HINT_ID;
|
return id != SPINNER_HINT_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
View getRowItemView(int position, View convertView, ViewGroup parent) {
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
|
||||||
TextView label = (TextView) super.getView(position, convertView, parent);
|
TextView label = (TextView) super.getView(position, convertView, parent);
|
||||||
RouteSpinnerRow row = getItem(position);
|
RouteSpinnerRow row = getItem(position);
|
||||||
label.setText(row.text);
|
label.setText(row.text);
|
||||||
|
@ -978,8 +1014,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
View getListItemView(int position, View convertView, ViewGroup parent) {
|
||||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
|
||||||
long id = getItemId(position);
|
long id = getItemId(position);
|
||||||
TextView label = (TextView) super.getDropDownView(position, convertView, parent);
|
TextView label = (TextView) super.getDropDownView(position, convertView, parent);
|
||||||
|
|
||||||
|
@ -1011,4 +1046,36 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class RouteSpinnerArrayAdapter extends RouteBaseArrayAdapter {
|
||||||
|
|
||||||
|
RouteSpinnerArrayAdapter(Context context) {
|
||||||
|
super(context, android.R.layout.simple_spinner_item);
|
||||||
|
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
|
||||||
|
return getRowItemView(position, convertView, parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
|
||||||
|
return getListItemView(position, convertView, parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RoutePopupListArrayAdapter extends RouteBaseArrayAdapter {
|
||||||
|
|
||||||
|
RoutePopupListArrayAdapter(Context context) {
|
||||||
|
super(context, android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
||||||
|
return getListItemView(position, convertView, parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.List;
|
||||||
public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
||||||
public static final String TAG = "MapMarkerSelectionFragment";
|
public static final String TAG = "MapMarkerSelectionFragment";
|
||||||
private static final String TARGET_KEY = "target_key";
|
private static final String TARGET_KEY = "target_key";
|
||||||
|
private static final String INTERMEDIATE_KEY = "intermediate_key";
|
||||||
|
|
||||||
private LatLon loc;
|
private LatLon loc;
|
||||||
private Float heading;
|
private Float heading;
|
||||||
|
@ -37,6 +38,7 @@ public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
||||||
private boolean nightMode;
|
private boolean nightMode;
|
||||||
private int screenOrientation;
|
private int screenOrientation;
|
||||||
private boolean target;
|
private boolean target;
|
||||||
|
private boolean intermediate;
|
||||||
|
|
||||||
private OnMarkerSelectListener onClickListener;
|
private OnMarkerSelectListener onClickListener;
|
||||||
|
|
||||||
|
@ -52,6 +54,7 @@ public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
||||||
}
|
}
|
||||||
if (bundle != null) {
|
if (bundle != null) {
|
||||||
target = bundle.getBoolean(TARGET_KEY);
|
target = bundle.getBoolean(TARGET_KEY);
|
||||||
|
intermediate = bundle.getBoolean(INTERMEDIATE_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
MapActivity mapActivity = getMapActivity();
|
MapActivity mapActivity = getMapActivity();
|
||||||
|
@ -104,7 +107,7 @@ public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
if (onClickListener != null) {
|
if (onClickListener != null) {
|
||||||
onClickListener.onSelect(position, target);
|
onClickListener.onSelect(position, target, intermediate);
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
@ -116,6 +119,7 @@ public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putBoolean(TARGET_KEY, target);
|
outState.putBoolean(TARGET_KEY, target);
|
||||||
|
outState.putBoolean(INTERMEDIATE_KEY, intermediate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class MapMarkersListAdapter extends ArrayAdapter<MapMarker> {
|
private class MapMarkersListAdapter extends ArrayAdapter<MapMarker> {
|
||||||
|
@ -140,10 +144,11 @@ public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MapMarkerSelectionFragment newInstance(boolean target) {
|
public static MapMarkerSelectionFragment newInstance(boolean target, boolean intermediate) {
|
||||||
MapMarkerSelectionFragment fragment = new MapMarkerSelectionFragment();
|
MapMarkerSelectionFragment fragment = new MapMarkerSelectionFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putBoolean(TARGET_KEY, target);
|
args.putBoolean(TARGET_KEY, target);
|
||||||
|
args.putBoolean(INTERMEDIATE_KEY, intermediate);
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,6 +198,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
REGULAR,
|
REGULAR,
|
||||||
START_POINT,
|
START_POINT,
|
||||||
DESTINATION,
|
DESTINATION,
|
||||||
|
INTERMEDIATE
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -365,7 +366,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
} else {
|
} else {
|
||||||
SearchWord word = searchPhrase.getLastSelectedWord();
|
SearchWord word = searchPhrase.getLastSelectedWord();
|
||||||
if (word != null) {
|
if (word != null) {
|
||||||
if ((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION)
|
if ((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION || searchType == QuickSearchType.INTERMEDIATE)
|
||||||
&& word.getLocation() != null) {
|
&& word.getLocation() != null) {
|
||||||
if (mainSearchFragment != null) {
|
if (mainSearchFragment != null) {
|
||||||
mainSearchFragment.showResult(word.getResult());
|
mainSearchFragment.showResult(word.getResult());
|
||||||
|
@ -801,7 +802,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
if (foundPartialLocation) {
|
if (foundPartialLocation) {
|
||||||
buttonToolbarText.setText(app.getString(R.string.advanced_coords_search).toUpperCase());
|
buttonToolbarText.setText(app.getString(R.string.advanced_coords_search).toUpperCase());
|
||||||
} else if (searchEditText.getText().length() > 0) {
|
} else if (searchEditText.getText().length() > 0) {
|
||||||
if (searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION) {
|
if (searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION || searchType == QuickSearchType.INTERMEDIATE) {
|
||||||
if (word != null && word.getResult() != null) {
|
if (word != null && word.getResult() != null) {
|
||||||
buttonToolbarText.setText(app.getString(R.string.shared_string_select).toUpperCase() + " " + word.getResult().localeName.toUpperCase());
|
buttonToolbarText.setText(app.getString(R.string.shared_string_select).toUpperCase() + " " + word.getResult().localeName.toUpperCase());
|
||||||
} else {
|
} else {
|
||||||
|
@ -1761,7 +1762,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
searchEditText.setSelection(txt.length());
|
searchEditText.setSelection(txt.length());
|
||||||
SearchWord lastWord = searchUICore.getPhrase().getLastSelectedWord();
|
SearchWord lastWord = searchUICore.getPhrase().getLastSelectedWord();
|
||||||
boolean buttonToolbarVisible = lastWord == null || searchType == QuickSearchType.REGULAR ||
|
boolean buttonToolbarVisible = lastWord == null || searchType == QuickSearchType.REGULAR ||
|
||||||
((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION)
|
((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION || searchType == QuickSearchType.INTERMEDIATE)
|
||||||
&& ObjectType.isAddress(lastWord.getType()));
|
&& ObjectType.isAddress(lastWord.getType()));
|
||||||
buttonToolbarView.setVisibility(buttonToolbarVisible ? View.VISIBLE : View.GONE);
|
buttonToolbarView.setVisibility(buttonToolbarVisible ? View.VISIBLE : View.GONE);
|
||||||
updateToolbarButton();
|
updateToolbarButton();
|
||||||
|
|
|
@ -269,13 +269,19 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
||||||
case START_POINT: {
|
case START_POINT: {
|
||||||
mapActivity.getMapLayers().getMapControlsLayer().selectAddress(
|
mapActivity.getMapLayers().getMapControlsLayer().selectAddress(
|
||||||
pointDescription != null ? pointDescription.getName() : null,
|
pointDescription != null ? pointDescription.getName() : null,
|
||||||
latitude, longitude, false);
|
latitude, longitude, false, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DESTINATION: {
|
case DESTINATION: {
|
||||||
mapActivity.getMapLayers().getMapControlsLayer().selectAddress(
|
mapActivity.getMapLayers().getMapControlsLayer().selectAddress(
|
||||||
pointDescription != null ? pointDescription.getName() : null,
|
pointDescription != null ? pointDescription.getName() : null,
|
||||||
latitude, longitude, true);
|
latitude, longitude, true, false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case INTERMEDIATE: {
|
||||||
|
mapActivity.getMapLayers().getMapControlsLayer().selectAddress(
|
||||||
|
pointDescription != null ? pointDescription.getName() : null,
|
||||||
|
latitude, longitude, false, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1294,11 +1294,11 @@ public class MapControlsLayer extends OsmandMapLayer {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectAddress(String name, double latitude, double longitude, boolean target) {
|
public void selectAddress(String name, double latitude, double longitude, boolean target, boolean intermediate) {
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
mapRouteInfoMenu.selectAddress(name, new LatLon(latitude, longitude), target);
|
mapRouteInfoMenu.selectAddress(name, new LatLon(latitude, longitude), target, intermediate);
|
||||||
} else {
|
} else {
|
||||||
mapRouteInfoMenu.selectAddress("", new LatLon(latitude, longitude), target);
|
mapRouteInfoMenu.selectAddress("", new LatLon(latitude, longitude), target, intermediate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue