Fix - add popup menu 'Delete' at Waypoints. Fix - crash on flat waypoints list
This commit is contained in:
parent
de6e16b583
commit
717adce97a
10 changed files with 211 additions and 105 deletions
|
@ -99,7 +99,6 @@
|
|||
android:clickable="false"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_flat_list_dark"
|
||||
android:tag="DragIcon"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</LinearLayout>
|
|
@ -9,6 +9,7 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="switch_start_finish">Switch start & finish</string>
|
||||
<string name="item_deleted">Item deleted</string>
|
||||
<string name="n_items_deleted">items deleted</string>
|
||||
<string name="shared_string_undo_all">UNDO ALL</string>
|
||||
|
|
|
@ -86,7 +86,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
routingHelper = mapActivity.getMyApplication().getRoutingHelper();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
public void addAsWaypoint(double latitude, double longitude, PointDescription pd) {
|
||||
TargetPointsHelper targets = getMyApplication().getTargetPointsHelper();
|
||||
boolean destination = (targets.getPointToNavigate() == null);
|
||||
|
@ -97,7 +97,8 @@ public class MapActivityActions implements DialogProvider {
|
|||
|
||||
openIntermediateEditPointsDialog();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
public void addAsTarget(double latitude, double longitude, PointDescription pd) {
|
||||
TargetPointsHelper targets = getMyApplication().getTargetPointsHelper();
|
||||
targets.navigateToPoint(new LatLon(latitude, longitude), true, targets.getIntermediatePoints().size() + 1,
|
||||
|
@ -736,9 +737,11 @@ public class MapActivityActions implements DialogProvider {
|
|||
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.WAYPOINTS);
|
||||
}
|
||||
|
||||
/*
|
||||
public void openIntermediateEditPointsDialog() {
|
||||
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.WAYPOINTS_EDIT);
|
||||
}
|
||||
*/
|
||||
|
||||
public void openRoutePreferencesDialog() {
|
||||
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.ROUTE_PREFERENCES);
|
||||
|
@ -758,6 +761,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
settings.LAST_ROUTING_APPLICATION_MODE = settings.APPLICATION_MODE.get();
|
||||
settings.APPLICATION_MODE.set(settings.DEFAULT_APPLICATION_MODE.get());
|
||||
mapActivity.updateApplicationModeSettings();
|
||||
mapActivity.getDashboard().clearDeletedPoints();
|
||||
}
|
||||
|
||||
public AlertDialog stopNavigationActionConfirm() {
|
||||
|
|
|
@ -96,7 +96,7 @@ public class DashWaypointsFragment extends DashLocationFragment {
|
|||
View dv = getActivity().getLayoutInflater().inflate(R.layout.divider, null);
|
||||
favorites.addView(dv);
|
||||
View v = WaypointDialogHelper.updateWaypointItemView(false, null, getMyApplication(),
|
||||
getActivity(), null, ps, null, !getMyApplication().getSettings().isLightContent(), true);
|
||||
getActivity(), null, null, ps, null, !getMyApplication().getSettings().isLightContent(), true);
|
||||
favorites.addView(v);
|
||||
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ import net.osmand.plus.dialogs.ConfigureMapMenu;
|
|||
import net.osmand.plus.download.DownloadActivity;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.helpers.WaypointDialogHelper;
|
||||
import net.osmand.plus.helpers.WaypointDialogHelper.PointDeleteCallback;
|
||||
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
|
||||
import net.osmand.plus.mapcontextmenu.other.RoutePreferencesMenu;
|
||||
import net.osmand.plus.mapcontextmenu.other.RoutePreferencesMenu.LocalRoutingParameter;
|
||||
|
@ -79,7 +80,8 @@ import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicListViewCallbacks, IRouteInformationListener {
|
||||
public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicListViewCallbacks,
|
||||
IRouteInformationListener, PointDeleteCallback {
|
||||
private static final org.apache.commons.logging.Log LOG =
|
||||
PlatformUtil.getLog(DashboardOnMap.class);
|
||||
private static final String TAG = "DashboardOnMap";
|
||||
|
@ -149,7 +151,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
public enum DashboardType {
|
||||
WAYPOINTS,
|
||||
WAYPOINTS_FLAT,
|
||||
WAYPOINTS_EDIT,
|
||||
CONFIGURE_SCREEN,
|
||||
CONFIGURE_MAP,
|
||||
LIST_MENU,
|
||||
|
@ -178,6 +179,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
public void createDashboardView() {
|
||||
baseColor = mapActivity.getResources().getColor(R.color.osmand_orange) & 0x00ffffff;
|
||||
waypointDialogHelper = new WaypointDialogHelper(mapActivity);
|
||||
waypointDialogHelper.setPointDeleteCallback(this);
|
||||
landscape = !AndroidUiHelper.isOrientationPortrait(mapActivity);
|
||||
dashboardView = (FrameLayout) mapActivity.findViewById(R.id.dashboard);
|
||||
final View.OnClickListener listener = new View.OnClickListener() {
|
||||
|
@ -202,7 +204,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
@Override
|
||||
public boolean canDismiss(int position) {
|
||||
boolean res = false;
|
||||
if (listAdapter instanceof StableArrayAdapter) {
|
||||
if (visibleType == DashboardType.WAYPOINTS && listAdapter instanceof StableArrayAdapter) {
|
||||
List<Object> activeObjects = ((StableArrayAdapter) listAdapter).getActiveObjects();
|
||||
Object obj = listAdapter.getItem(position);
|
||||
res = activeObjects.contains(obj);
|
||||
|
@ -232,7 +234,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
stableAdapter = null;
|
||||
activeObjPos = 0;
|
||||
}
|
||||
|
||||
return new Undoable() {
|
||||
@Override
|
||||
public void undo() {
|
||||
|
@ -242,7 +243,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
stableAdapter.getObjects().add(position, item);
|
||||
stableAdapter.getActiveObjects().add(activeObjPos, item);
|
||||
stableAdapter.refreshData();
|
||||
|
||||
onItemsSwapped(stableAdapter.getActiveObjects());
|
||||
}
|
||||
}
|
||||
|
@ -380,7 +380,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
//
|
||||
// @Override
|
||||
// public void onClick(View v) {
|
||||
mapActivity.getMyApplication().getWaypointHelper().removeVisibleLocationPoint(deletedPoints);
|
||||
// mapActivity.getMyApplication().getWaypointHelper().removeVisibleLocationPoint(deletedPoints);
|
||||
// hideDashboard();
|
||||
// }
|
||||
// });
|
||||
|
@ -473,7 +473,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
button = actionButtons.get(DashboardActionButtonType.MY_LOCATION);
|
||||
} else if (type == DashboardType.ROUTE_PREFERENCES) {
|
||||
button = actionButtons.get(DashboardActionButtonType.NAVIGATE);
|
||||
} else if (type == DashboardType.WAYPOINTS || type == DashboardType.WAYPOINTS_EDIT || type == DashboardType.WAYPOINTS_FLAT) {
|
||||
} else if (type == DashboardType.WAYPOINTS || type == DashboardType.WAYPOINTS_FLAT) {
|
||||
boolean routePlanningMode = false;
|
||||
RoutingHelper rh = mapActivity.getRoutingHelper();
|
||||
if (rh.isRoutePlanningMode()) {
|
||||
|
@ -679,13 +679,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
dynamicListView.setActiveItemsList(listAdapter.getActiveObjects());
|
||||
|
||||
updateListAdapter(listAdapter, listener);
|
||||
} else if (DashboardType.WAYPOINTS_EDIT == visibleType) {
|
||||
deletedPoints.clear();
|
||||
ArrayAdapter<Object> listAdapter = waypointDialogHelper.getWaypointsDrawerAdapter(true, deletedPoints, mapActivity, running,
|
||||
DashboardType.WAYPOINTS_FLAT == visibleType, nightMode);
|
||||
OnItemClickListener listener = waypointDialogHelper.getDrawerItemClickListener(mapActivity, running,
|
||||
listAdapter);
|
||||
updateListAdapter(listAdapter, listener);
|
||||
|
||||
} else {
|
||||
if (DashboardType.CONFIGURE_SCREEN == visibleType) {
|
||||
|
@ -718,8 +711,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
}
|
||||
|
||||
public void refreshContent(boolean force) {
|
||||
if (visibleType == DashboardType.WAYPOINTS || visibleType == DashboardType.WAYPOINTS_EDIT
|
||||
|| force) {
|
||||
if (visibleType == DashboardType.WAYPOINTS || force) {
|
||||
updateListAdapter();
|
||||
} else if (visibleType == DashboardType.CONFIGURE_MAP || visibleType == DashboardType.ROUTE_PREFERENCES) {
|
||||
int index = listView.getFirstVisiblePosition();
|
||||
|
@ -981,7 +973,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
private boolean isActionButtonVisible() {
|
||||
return visibleType == DashboardType.DASHBOARD
|
||||
|| visibleType == DashboardType.WAYPOINTS
|
||||
|| visibleType == DashboardType.WAYPOINTS_EDIT
|
||||
|| visibleType == DashboardType.WAYPOINTS_FLAT
|
||||
|| visibleType == DashboardType.LIST_MENU
|
||||
|| visibleType == DashboardType.ROUTE_PREFERENCES
|
||||
|
@ -1132,6 +1123,10 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
transaction.show(frag).commit();
|
||||
}
|
||||
|
||||
public void clearDeletedPoints() {
|
||||
deletedPoints.clear();
|
||||
}
|
||||
|
||||
View getParentView() {
|
||||
return dashboardView;
|
||||
}
|
||||
|
@ -1167,7 +1162,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
getMyApplication().runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (visibleType == DashboardType.WAYPOINTS) {
|
||||
if (visibleType == DashboardType.WAYPOINTS || visibleType == DashboardType.WAYPOINTS_FLAT) {
|
||||
List<TargetPoint> allTargets = new ArrayList<>();
|
||||
if (items != null) {
|
||||
for (Object obj : items) {
|
||||
|
@ -1203,6 +1198,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
if ((DashboardType.WAYPOINTS == visibleType || DashboardType.WAYPOINTS_FLAT == visibleType)
|
||||
&& listAdapter != null && listAdapter instanceof StableArrayAdapter) {
|
||||
StableArrayAdapter stableAdapter = (StableArrayAdapter) listAdapter;
|
||||
getMyApplication().getWaypointHelper().removeVisibleLocationPoint(deletedPoints);
|
||||
waypointDialogHelper.reloadListAdapter(stableAdapter);
|
||||
if (listView instanceof DynamicListView) {
|
||||
DynamicListView dynamicListView = (DynamicListView) listView;
|
||||
|
@ -1223,4 +1219,11 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
|||
swipeDismissListener.discardUndo();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteWaypoint(int position) {
|
||||
if (swipeDismissListener != null) {
|
||||
swipeDismissListener.delete(position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,13 +5,14 @@ import android.content.Context;
|
|||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
import android.content.DialogInterface.OnDismissListener;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.ShapeDrawable;
|
||||
import android.graphics.drawable.shapes.Shape;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.PopupMenu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
|
@ -31,10 +32,11 @@ import net.osmand.plus.OsmAndFormatter;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
||||
import net.osmand.plus.activities.IntermediatePointsDialog;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.dialogs.DirectionsDialogs;
|
||||
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.views.controls.DynamicListView.DragIcon;
|
||||
import net.osmand.plus.views.controls.ListDividerShape;
|
||||
import net.osmand.plus.views.controls.StableArrayAdapter;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
@ -49,7 +51,12 @@ public class WaypointDialogHelper {
|
|||
private MapActivity mapActivity;
|
||||
private OsmandApplication app;
|
||||
private WaypointHelper waypointHelper;
|
||||
private PointDeleteCallback dCallback;
|
||||
private boolean flat;
|
||||
|
||||
public interface PointDeleteCallback {
|
||||
void deleteWaypoint(int position);
|
||||
}
|
||||
|
||||
private static class RadiusItem {
|
||||
int type;
|
||||
|
@ -59,6 +66,10 @@ public class WaypointDialogHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public void setPointDeleteCallback(PointDeleteCallback callback) {
|
||||
this.dCallback = callback;
|
||||
}
|
||||
|
||||
public WaypointDialogHelper(MapActivity mapActivity) {
|
||||
this.app = mapActivity.getMyApplication();
|
||||
waypointHelper = this.app.getWaypointHelper();
|
||||
|
@ -154,6 +165,16 @@ public class WaypointDialogHelper {
|
|||
// 0);
|
||||
}
|
||||
|
||||
private List<Object> getPoints() {
|
||||
final List<Object> points;
|
||||
if (flat) {
|
||||
points = new ArrayList<Object>(waypointHelper.getAllPoints());
|
||||
} else {
|
||||
points = getStandardPoints();
|
||||
}
|
||||
return points;
|
||||
}
|
||||
|
||||
private List<Object> getActivePoints(List<Object> points) {
|
||||
List<Object> activePoints = new ArrayList<>();
|
||||
for (Object p : points) {
|
||||
|
@ -250,14 +271,13 @@ public class WaypointDialogHelper {
|
|||
final boolean edit, final List<LocationPointWrapper> deletedPoints,
|
||||
final MapActivity ctx, final int[] running, final boolean flat, final boolean nightMode) {
|
||||
|
||||
final List<Object> points;
|
||||
if (flat) {
|
||||
points = new ArrayList<Object>(waypointHelper.getAllPoints());
|
||||
} else {
|
||||
points = getPoints();
|
||||
}
|
||||
this.flat = flat;
|
||||
|
||||
final List<Object> points = getPoints();
|
||||
List<Object> activePoints = getActivePoints(points);
|
||||
|
||||
final WaypointDialogHelper helper = this;
|
||||
|
||||
return new StableArrayAdapter(ctx,
|
||||
R.layout.waypoint_reached, R.id.title, points, activePoints) {
|
||||
|
||||
|
@ -306,7 +326,7 @@ public class WaypointDialogHelper {
|
|||
v = ctx.getLayoutInflater().inflate(R.layout.card_bottom_divider, null);
|
||||
} else if (obj instanceof LocationPointWrapper) {
|
||||
LocationPointWrapper point = (LocationPointWrapper) obj;
|
||||
v = updateWaypointItemView(edit, deletedPoints, app, ctx, v, point, this,
|
||||
v = updateWaypointItemView(edit, deletedPoints, app, ctx, helper, v, point, this,
|
||||
nightMode, flat);
|
||||
AndroidUtils.setListItemBackground(mapActivity, v, nightMode);
|
||||
}
|
||||
|
@ -317,7 +337,8 @@ public class WaypointDialogHelper {
|
|||
|
||||
|
||||
public static View updateWaypointItemView(final boolean edit, final List<LocationPointWrapper> deletedPoints,
|
||||
final OsmandApplication app, final Activity ctx, View v,
|
||||
final OsmandApplication app, final Activity ctx,
|
||||
final WaypointDialogHelper helper, View v,
|
||||
final LocationPointWrapper point,
|
||||
final ArrayAdapter adapter, final boolean nightMode,
|
||||
final boolean flat) {
|
||||
|
@ -325,9 +346,9 @@ public class WaypointDialogHelper {
|
|||
v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null);
|
||||
}
|
||||
updatePointInfoView(app, ctx, v, point, true, nightMode, edit);
|
||||
View more = v.findViewById(R.id.all_points);
|
||||
View move = v.findViewById(R.id.info_move);
|
||||
View remove = v.findViewById(R.id.info_close);
|
||||
final View more = v.findViewById(R.id.all_points);
|
||||
final View move = v.findViewById(R.id.info_move);
|
||||
final View remove = v.findViewById(R.id.info_close);
|
||||
if (!edit) {
|
||||
remove.setVisibility(View.GONE);
|
||||
move.setVisibility(View.GONE);
|
||||
|
@ -342,8 +363,31 @@ public class WaypointDialogHelper {
|
|||
more.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
//hideDashboard();
|
||||
IntermediatePointsDialog.openIntermediatePointsDialog(ctx, app, true);
|
||||
final PopupMenu optionsMenu = new PopupMenu(ctx, more);
|
||||
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
|
||||
MenuItem item;
|
||||
item = optionsMenu.getMenu().add(
|
||||
R.string.intermediate_items_sort_by_distance).setIcon(app.getIconsCache().
|
||||
getContentIcon(R.drawable.ic_sort_waypoint_dark));
|
||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
// sort
|
||||
//IntermediatePointsDialog.openIntermediatePointsDialog(ctx, app, true);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
item = optionsMenu.getMenu().add(
|
||||
R.string.switch_start_finish).setIcon(app.getIconsCache().
|
||||
getContentIcon(R.drawable.ic_action_undo_dark));
|
||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
// switch start & finish
|
||||
return true;
|
||||
}
|
||||
});
|
||||
optionsMenu.show();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
@ -352,6 +396,25 @@ public class WaypointDialogHelper {
|
|||
more.setVisibility(View.GONE);
|
||||
((ImageView) move).setImageDrawable(app.getIconsCache().getContentIcon(
|
||||
R.drawable.ic_flat_list_dark, !nightMode));
|
||||
move.setTag(new DragIcon() {
|
||||
@Override
|
||||
public void onClick() {
|
||||
final PopupMenu optionsMenu = new PopupMenu(ctx, move);
|
||||
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
|
||||
MenuItem item;
|
||||
item = optionsMenu.getMenu().add(
|
||||
R.string.shared_string_delete).setIcon(app.getIconsCache().
|
||||
getContentIcon(R.drawable.ic_action_remove_dark));
|
||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
deletePoint(app, adapter, helper, point, deletedPoints, true);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
optionsMenu.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
remove.setVisibility(View.VISIBLE);
|
||||
|
@ -362,22 +425,40 @@ public class WaypointDialogHelper {
|
|||
remove.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
ArrayList<LocationPointWrapper> arr = new ArrayList<>();
|
||||
arr.add(point);
|
||||
app.getWaypointHelper().removeVisibleLocationPoint(arr);
|
||||
|
||||
deletedPoints.add(point);
|
||||
if (adapter != null) {
|
||||
adapter.setNotifyOnChange(false);
|
||||
adapter.remove(point);
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
deletePoint(app, adapter, helper, point, deletedPoints, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
public static void deletePoint(final OsmandApplication app, final ArrayAdapter adapter,
|
||||
final WaypointDialogHelper helper,
|
||||
final Object item,
|
||||
final List<LocationPointWrapper> deletedPoints,
|
||||
final boolean needCallback) {
|
||||
|
||||
if (item instanceof LocationPointWrapper && adapter != null) {
|
||||
LocationPointWrapper point = (LocationPointWrapper) item;
|
||||
if (point.type == WaypointHelper.TARGETS && adapter instanceof StableArrayAdapter) {
|
||||
StableArrayAdapter stableAdapter = (StableArrayAdapter) adapter;
|
||||
if (helper != null && helper.dCallback != null && needCallback) {
|
||||
helper.dCallback.deleteWaypoint(stableAdapter.getPosition(item));
|
||||
}
|
||||
} else {
|
||||
ArrayList<LocationPointWrapper> arr = new ArrayList<>();
|
||||
arr.add(point);
|
||||
app.getWaypointHelper().removeVisibleLocationPoint(arr);
|
||||
|
||||
deletedPoints.add(point);
|
||||
|
||||
adapter.setNotifyOnChange(false);
|
||||
adapter.remove(point);
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected View createItemForRadiusProximity(final FragmentActivity ctx, final int type, final int[] running,
|
||||
final int position, final ArrayAdapter<Object> thisAdapter, boolean nightMode) {
|
||||
|
@ -603,8 +684,8 @@ public class WaypointDialogHelper {
|
|||
return str;
|
||||
}
|
||||
|
||||
protected List<Object> getPoints() {
|
||||
final List<Object> points = new ArrayList<Object>();
|
||||
protected List<Object> getStandardPoints() {
|
||||
final List<Object> points = new ArrayList<>();
|
||||
boolean rc = waypointHelper.isRouteCalculated();
|
||||
for (int i = 0; i < WaypointHelper.MAX; i++) {
|
||||
List<LocationPointWrapper> tp = waypointHelper.getWaypoints(i);
|
||||
|
|
|
@ -12,7 +12,6 @@ import android.support.v4.app.FragmentActivity;
|
|||
import android.support.v4.app.FragmentManager;
|
||||
import android.util.TypedValue;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.GestureDetector.OnGestureListener;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.VelocityTracker;
|
||||
|
@ -45,6 +44,7 @@ import net.osmand.plus.mapcontextmenu.MenuController.TitleButtonController;
|
|||
import net.osmand.plus.mapcontextmenu.MenuController.TitleProgressController;
|
||||
import net.osmand.plus.views.AnimateDraggingMapThread;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
import net.osmand.plus.views.controls.SingleTapConfirm;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
||||
|
@ -98,41 +98,6 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
|
|||
|
||||
private int screenOrientation;
|
||||
|
||||
private class SingleTapConfirm implements OnGestureListener {
|
||||
|
||||
@Override
|
||||
public boolean onDown(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
|
|
|
@ -32,6 +32,8 @@ import android.support.annotation.NonNull;
|
|||
import android.support.v4.view.ViewCompat;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -46,7 +48,6 @@ import java.util.List;
|
|||
|
||||
public class DynamicListView extends ObservableListView {
|
||||
|
||||
public final String TAG_DRAG_ICON = "DragIcon";
|
||||
protected final int SMOOTH_SCROLL_AMOUNT_AT_EDGE = 15;
|
||||
protected final int MOVE_DURATION = 150;
|
||||
|
||||
|
@ -82,6 +83,13 @@ public class DynamicListView extends ObservableListView {
|
|||
private boolean mIsWaitingForScrollFinish = false;
|
||||
private int mScrollState = OnScrollListener.SCROLL_STATE_IDLE;
|
||||
|
||||
private GestureDetector singleTapDetector;
|
||||
private DragIcon tag;
|
||||
|
||||
public interface DragIcon {
|
||||
void onClick();
|
||||
}
|
||||
|
||||
public DynamicListView(Context context) {
|
||||
super(context);
|
||||
init(context);
|
||||
|
@ -101,6 +109,7 @@ public class DynamicListView extends ObservableListView {
|
|||
setOnScrollListener(mScrollListener);
|
||||
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
mSmoothScrollAmountAtEdge = (int) (SMOOTH_SCROLL_AMOUNT_AT_EDGE / metrics.density);
|
||||
singleTapDetector = new GestureDetector(context, new SingleTapConfirm());
|
||||
}
|
||||
|
||||
public void setDynamicListViewCallbacks(DynamicListViewCallbacks callbacks) {
|
||||
|
@ -249,7 +258,7 @@ public class DynamicListView extends ObservableListView {
|
|||
|
||||
// Draw dividers
|
||||
StableArrayAdapter stableAdapter = getStableAdapter();
|
||||
if (stableAdapter != null && stableAdapter.hasDividers()) {
|
||||
if (getDivider() == null && stableAdapter != null && stableAdapter.hasDividers()) {
|
||||
List<Drawable> dividers = stableAdapter.getDividers();
|
||||
|
||||
final int count = getChildCount();
|
||||
|
@ -296,20 +305,28 @@ public class DynamicListView extends ObservableListView {
|
|||
@Override
|
||||
public boolean onTouchEvent(@NonNull MotionEvent event) {
|
||||
|
||||
if (singleTapDetector.onTouchEvent(event)) {
|
||||
if (tag != null) {
|
||||
tag.onClick();
|
||||
}
|
||||
touchEventsCancelled();
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (event.getAction() & MotionEvent.ACTION_MASK) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
if (!mCellIsMobile && mHoverCell == null) {
|
||||
mDownX = (int) event.getX();
|
||||
mDownY = (int) event.getY();
|
||||
mActivePointerId = event.getPointerId(0);
|
||||
|
||||
// Find the view that the user pressed their finger down on.
|
||||
View v = findViewAtPositionWithTag(getRootView(), (int) event.getRawX(), (int) event.getRawY(), TAG_DRAG_ICON);
|
||||
View v = findViewAtPositionWithDragIconTag(getRootView(), (int) event.getRawX(), (int) event.getRawY());
|
||||
|
||||
// If the view contains a tag set to "DragIcon", it means that the user wants to
|
||||
// If the view contains a tag set to "DragIcon" class, it means that the user wants to
|
||||
// reorder the list item.
|
||||
if ((v != null) && (v.getTag() != null) && (v.getTag().equals(TAG_DRAG_ICON))) {
|
||||
if ((v != null) && (v.getTag() != null) && (v.getTag() instanceof DragIcon)) {
|
||||
mDownX = (int) event.getX();
|
||||
mDownY = (int) event.getY();
|
||||
mActivePointerId = event.getPointerId(0);
|
||||
mTotalOffset = 0;
|
||||
tag = (DragIcon) v.getTag();
|
||||
|
||||
int position = pointToPosition(mDownX, mDownY);
|
||||
if (position != INVALID_POSITION) {
|
||||
|
@ -564,6 +581,7 @@ public class DynamicListView extends ObservableListView {
|
|||
mBelowItemId = INVALID_ID;
|
||||
setAllVisible();
|
||||
mHoverCell = null;
|
||||
tag = null;
|
||||
setEnabled(true);
|
||||
invalidate();
|
||||
processSwapped();
|
||||
|
@ -718,7 +736,7 @@ public class DynamicListView extends ObservableListView {
|
|||
* @param y The Y location to be tested.
|
||||
* @return Returns the most inner view that contains the XY coordinate or null if no view could be found.
|
||||
*/
|
||||
private View findViewAtPositionWithTag(View v, int x, int y, String tag) {
|
||||
private View findViewAtPositionWithDragIconTag(View v, int x, int y) {
|
||||
View vXY = null;
|
||||
|
||||
if (v instanceof ViewGroup) {
|
||||
|
@ -732,9 +750,9 @@ public class DynamicListView extends ObservableListView {
|
|||
|
||||
if ((x >= loc[0] && (x <= (loc[0] + c.getWidth()))) && (y >= loc[1] && (y <= (loc[1] + c.getHeight())))) {
|
||||
vXY = c;
|
||||
View viewAtPosition = findViewAtPositionWithTag(c, x, y, tag);
|
||||
View viewAtPosition = findViewAtPositionWithDragIconTag(c, x, y);
|
||||
|
||||
if ((viewAtPosition != null) && (viewAtPosition.getTag() != null) && viewAtPosition.getTag().equals(tag)) {
|
||||
if ((viewAtPosition != null) && (viewAtPosition.getTag() != null) && viewAtPosition.getTag() instanceof DragIcon) {
|
||||
vXY = viewAtPosition;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package net.osmand.plus.views.controls;
|
||||
|
||||
import android.view.GestureDetector;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
public class SingleTapConfirm implements GestureDetector.OnGestureListener {
|
||||
|
||||
@Override
|
||||
public boolean onDown(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -472,20 +472,18 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
|
|||
* Delete the list item at the specified position. This will animate the item sliding out of the
|
||||
* list and then collapsing until it vanished (same as if the user slides out an item).
|
||||
* <p/>
|
||||
* NOTE: If you are using list headers, be aware, that the position argument must take care of
|
||||
* them. Meaning 0 references the first list header. So if you want to delete the first list
|
||||
* item, you have to pass the number of list headers as {@code position}. Most of the times
|
||||
* that shouldn't be a problem, since you most probably will evaluate the position which should
|
||||
* be deleted in a way, that respects the list headers.
|
||||
*/
|
||||
public void delete(int position) {
|
||||
if (mCallbacks == null) {
|
||||
throw new IllegalStateException("You must set an OnDismissCallback, before deleting items.");
|
||||
}
|
||||
if (position < 0 || position >= mListView.getCount()) {
|
||||
throw new IndexOutOfBoundsException(String.format("Tried to delete item %d. #items in list: %d", position, mListView.getCount()));
|
||||
|
||||
int pos = position + mListView.getHeaderViewsCount();
|
||||
|
||||
if (pos < 0 || pos >= mListView.getCount()) {
|
||||
throw new IndexOutOfBoundsException(String.format("Tried to delete item %d. #items in list: %d", pos, mListView.getCount()));
|
||||
}
|
||||
View childView = mListView.getChildAt(position - mListView.getFirstVisiblePosition());
|
||||
View childView = mListView.getChildAt(pos - mListView.getFirstVisiblePosition());
|
||||
View view = null;
|
||||
if (mSwipingLayout > 0) {
|
||||
view = childView.findViewById(mSwipingLayout);
|
||||
|
|
Loading…
Reference in a new issue