package net.osmand.plus.osmedit;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.PopupMenu;
import android.util.Xml;
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;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import net.osmand.data.PointDescription;
import net.osmand.osm.edit.Node;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.ActionBarProgressActivity;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.OsmandActionBarActivity;
import net.osmand.plus.base.OsmAndListFragment;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.plus.dialogs.ProgressDialogFragment;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.myplaces.FavoritesActivity;
import net.osmand.plus.osmedit.OsmPoint.Action;
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class OsmEditsFragment extends OsmAndListFragment
implements SendPoiDialogFragment.ProgressDialogPoiUploader {
OsmEditingPlugin plugin;
private OsmEditsAdapter listAdapter;
private View footerView;
private boolean selectionMode = false;
private final static int MODE_DELETE = 100;
private final static int MODE_UPLOAD = 101;
private ActionMode actionMode;
private long refreshId;
private ArrayList<OsmPoint> osmEditsSelected = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class);
View view = getActivity().getLayoutInflater().inflate(R.layout.update_index, container, false);
((TextView) view.findViewById(R.id.header)).setText(R.string.your_edits);
final CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all);
selectAll.setVisibility(View.GONE);
selectAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectAll.isChecked()) {
selectAll();
} else {
deselectAll();
}
updateSelectionTitle(actionMode);
}
});
return view;
}
public android.widget.ArrayAdapter<?> getAdapter() {
return listAdapter;
}
private void selectAll() {
for (int i = 0; i < listAdapter.getCount(); i++) {
OsmPoint point = listAdapter.getItem(i);
if (!osmEditsSelected.contains(point)) {
osmEditsSelected.add(point);
}
}
listAdapter.notifyDataSetInvalidated();
}
private void deselectAll() {
osmEditsSelected.clear();
listAdapter.notifyDataSetInvalidated();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
if (AndroidUiHelper.isOrientationPortrait(getActivity())) {
menu = ((ActionBarProgressActivity) getActivity()).getClearToolbar(true).getMenu();
} else {
((ActionBarProgressActivity) getActivity()).getClearToolbar(false);
}
((ActionBarProgressActivity) getActivity()).updateListViewFooter(footerView);
MenuItem item = menu.add(R.string.local_openstreetmap_uploadall).
setIcon(R.drawable.ic_action_export);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
enterSelectionMode(MODE_UPLOAD);
return true;
}
});
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
item = menu.add(R.string.local_osm_changes_backup).
setIcon(R.drawable.ic_action_gshare_dark);
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
new BackupOpenstreetmapPointAsyncTask().execute(
listAdapter.dataPoints.toArray(new OsmPoint[listAdapter.dataPoints.size()]));
return true;
}
});
item = menu.add(R.string.shared_string_delete_all).
setIcon(R.drawable.ic_action_delete_dark);
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
enterSelectionMode(MODE_DELETE);
return true;
}
});
}
private void enterUploadMode() {
actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(final ActionMode mode, Menu menu) {
enableSelectionMode(true);
MenuItem item = menu.add(R.string.local_openstreetmap_uploadall).
setIcon(R.drawable.ic_action_export);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
uploadItems(osmEditsSelected.toArray(new OsmPoint[osmEditsSelected.size()]));
mode.finish();
return true;
}
});
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
osmEditsSelected.clear();
listAdapter.notifyDataSetInvalidated();
updateSelectionMode(mode);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
enableSelectionMode(false);
listAdapter.notifyDataSetInvalidated();
}
});
}
private void enterSelectionMode(int type) {
switch (type) {
case MODE_DELETE:
enterDeleteMode();
break;
case MODE_UPLOAD:
enterUploadMode();
break;
}
}
private void enterDeleteMode() {
actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(final ActionMode mode, Menu menu) {
enableSelectionMode(true);
MenuItem item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
deleteItems(osmEditsSelected);
mode.finish();
return true;
}
});
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
osmEditsSelected.clear();
listAdapter.notifyDataSetInvalidated();
updateSelectionMode(mode);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
enableSelectionMode(false);
listAdapter.notifyDataSetInvalidated();
}
});
}
private void updateSelectionMode(ActionMode m) {
updateSelectionTitle(m);
refreshSelectAll();
}
private void updateSelectionTitle(ActionMode m) {
if (osmEditsSelected.size() > 0) {
m.setTitle(osmEditsSelected.size() + " "
+ getMyApplication().getString(R.string.shared_string_selected_lowercase));
} else {
m.setTitle("");
}
}
private void refreshSelectAll() {
View view = getView();
if (view == null) {
return;
}
CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all);
for (int i = 0; i < listAdapter.getCount(); i++) {
OsmPoint point = listAdapter.getItem(i);
if (!osmEditsSelected.contains(point)) {
selectAll.setChecked(false);
return;
}
}
selectAll.setChecked(true);
}
private void enableSelectionMode(boolean selectionMode) {
this.selectionMode = selectionMode;
//noinspection ConstantConditions
getView().findViewById(R.id.select_all).setVisibility(selectionMode ? View.VISIBLE : View.GONE);
((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode &&
AndroidUiHelper.isOrientationPortrait(getActivity()));
((FavoritesActivity) getActivity()).updateListViewFooter(footerView);
}
public OsmandActionBarActivity getActionBarActivity() {
if (getActivity() instanceof OsmandActionBarActivity) {
return (OsmandActionBarActivity) getActivity();
}
return null;
}
private void deleteItems(final ArrayList<OsmPoint> points) {
DeleteOsmEditsConfirmDialogFragment.createInstance(points).
show(getChildFragmentManager(), DeleteOsmEditsConfirmDialogFragment.TAG);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getListView().setBackgroundColor(
getResources().getColor(
getMyApplication().getSettings().isLightContent() ? R.color.ctx_menu_info_view_bg_light
: R.color.ctx_menu_info_view_bg_dark));
}
@Override
public void onResume() {
super.onResume();
ArrayList<OsmPoint> dataPoints = new ArrayList<>();
List<OpenstreetmapPoint> l1 = plugin.getDBPOI().getOpenstreetmapPoints();
List<OsmNotesPoint> l2 = plugin.getDBBug().getOsmbugsPoints();
dataPoints.addAll(l1);
dataPoints.addAll(l2);
if (listAdapter == null) {
listAdapter = new OsmEditsAdapter(dataPoints);
ListView listView = getListView();
if (dataPoints.size() > 0 && footerView == null) {
//listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false));
footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, null, false);
listView.addFooterView(footerView);
listView.setHeaderDividersEnabled(false);
listView.setFooterDividersEnabled(false);
}
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
OsmPoint it = listAdapter.getItem(position);
openPopUpMenu(view, it);
}
});
} else {
listAdapter.setNewList(dataPoints);
}
}
public static void getOsmEditView(View v, OsmPoint child, OsmandApplication app) {
TextView viewName = ((TextView) v.findViewById(R.id.name));
ImageView icon = (ImageView) v.findViewById(R.id.icon);
String name = OsmEditingPlugin.getEditName(child);
viewName.setText(name);
if (child.getGroup() == OsmPoint.Group.POI) {
icon.setImageDrawable(app.getIconsCache().
getIcon(R.drawable.ic_type_info, R.color.color_distance));
} else if (child.getGroup() == OsmPoint.Group.BUG) {
icon.setImageDrawable(app.getIconsCache().
getIcon(R.drawable.ic_type_bug, R.color.color_distance));
}
TextView descr = (TextView) v.findViewById(R.id.description);
if (child.getAction() == OsmPoint.Action.CREATE) {
descr.setText(R.string.action_create);
} else if (child.getAction() == OsmPoint.Action.MODIFY) {
descr.setText(R.string.action_modify);
} else if (child.getAction() == OsmPoint.Action.DELETE) {
descr.setText(R.string.action_delete);
} else if (child.getAction() == OsmPoint.Action.REOPEN) {
descr.setText(R.string.action_modify);
}
}
protected class OsmEditsAdapter extends ArrayAdapter<OsmPoint> {
private List<OsmPoint> dataPoints;
public OsmEditsAdapter(List<OsmPoint> points) {
super(getActivity(), net.osmand.plus.R.layout.note, points);
dataPoints = points;
}
public void setNewList(List<OsmPoint> dp) {
dataPoints = dp;
setNotifyOnChange(false);
clear();
for (OsmPoint pnt : dp) {
add(pnt);
}
setNotifyOnChange(true);
notifyDataSetChanged();
}
public List<OsmPoint> getDataPoints() {
return dataPoints;
}
public void delete(OsmPoint i) {
dataPoints.remove(i);
remove(i);
listAdapter.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final OsmPoint child = getItem(position);
if (v == null) {
LayoutInflater inflater = getActivity().getLayoutInflater();
v = inflater.inflate(net.osmand.plus.R.layout.note, parent, false);
}
getOsmEditView(v, child, getMyApplication());
v.findViewById(R.id.play).setVisibility(View.GONE);
final CheckBox ch = (CheckBox) v.findViewById(R.id.check_local_index);
View options = v.findViewById(R.id.options);
if (selectionMode) {
options.setVisibility(View.GONE);
ch.setVisibility(View.VISIBLE);
ch.setChecked(osmEditsSelected.contains(child));
v.findViewById(R.id.icon).setVisibility(View.GONE);
ch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemSelect(ch, child);
}
});
} else {
v.findViewById(R.id.icon).setVisibility(View.VISIBLE);
options.setVisibility(View.VISIBLE);
ch.setVisibility(View.GONE);
}
((ImageView) options).setImageDrawable(getMyApplication().getIconsCache()
.getThemedIcon(R.drawable.ic_overflow_menu_white));
options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openPopUpMenu(v, child);
}
});
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectionMode) {
ch.setChecked(!ch.isChecked());
onItemSelect(ch, child);
} else {
showOnMap(child);
}
}
});
return v;
}
public void onItemSelect(CheckBox ch, OsmPoint child) {
if (ch.isChecked()) {
osmEditsSelected.add(child);
} else {
osmEditsSelected.remove(child);
}
updateSelectionMode(actionMode);
}
}
private void openPopUpMenu(View v, final OsmPoint info) {
OsmandApplication app = getMyApplication();
final PopupMenu optionsMenu = new PopupMenu(getActivity(), v);
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
MenuItem item = optionsMenu.getMenu().add(R.string.shared_string_show_on_map).
setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_show_on_map));
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
OsmandSettings settings = getMyApplication().getSettings();
settings.setMapLocationToShow(info.getLatitude(), info.getLongitude(), settings.getLastKnownMapZoom());
MapActivity.launchMapActivityMoveToTop(getActivity());
return true;
}
});
if (info instanceof OpenstreetmapPoint && info.getAction() != Action.DELETE) {
item = optionsMenu.getMenu().add(R.string.poi_context_menu_modify_osm_change)
.setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark));
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
OpenstreetmapPoint i = (OpenstreetmapPoint) getPointAfterModify(info);
final Node entity = i.getEntity();
refreshId = entity.getId();
EditPoiDialogFragment.createInstance(entity, false)
.show(getActivity().getSupportFragmentManager(), "edit_poi");
return true;
}
});
}
item = optionsMenu.getMenu().add(R.string.shared_string_delete).
setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_delete_dark));
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
ArrayList<OsmPoint> points = new ArrayList<>();
points.add(info);
deleteItems(new ArrayList<>(points));
return true;
}
});
item = optionsMenu.getMenu().add(R.string.local_openstreetmap_upload).
setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_export));
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
uploadItems(new OsmPoint[]{getPointAfterModify(info)});
return true;
}
});
optionsMenu.show();
}
protected OsmPoint getPointAfterModify(OsmPoint info) {
if(info instanceof OpenstreetmapPoint && info.getId() == refreshId) {
for(OpenstreetmapPoint p : plugin.getDBPOI().getOpenstreetmapPoints()) {
if(p.getId() == info.getId()) {
return p;
}
}
}
return info;
}
public OsmandApplication getMyApplication() {
return (OsmandApplication) getActivity().getApplication();
}
private void uploadItems(final OsmPoint[] items) {
SendPoiDialogFragment.createInstance(items).show(getChildFragmentManager(),
SendPoiDialogFragment.TAG);
// UploadOsmEditsConfirmDialogFragment.createInstancee(items).show(getChildFragmentManager(),
// UploadOsmEditsConfirmDialogFragment.TAG);
}
public void showProgressDialog(OsmPoint[] points, boolean closeChangeSet, boolean anonymously) {
ProgressDialogFragment dialog = ProgressDialogFragment.createInstance(
R.string.uploading,
R.string.local_openstreetmap_uploading,
ProgressDialog.STYLE_HORIZONTAL);
OsmEditsUploadListener listener = new OsmEditsUploadListenerHelper(getActivity(),
getString(R.string.local_openstreetmap_were_uploaded)) {
@Override
public void uploadEnded(Map<OsmPoint, String> loadErrorsMap) {
super.uploadEnded(loadErrorsMap);
for (OsmPoint osmPoint : loadErrorsMap.keySet()) {
if (loadErrorsMap.get(osmPoint) == null) {
listAdapter.remove(osmPoint);
}
}
listAdapter.notifyDataSetChanged();
}
};
dialog.show(getActivity().getSupportFragmentManager(), ProgressDialogFragment.TAG);
UploadOpenstreetmapPointAsyncTask uploadTask = new UploadOpenstreetmapPointAsyncTask(
dialog, listener, plugin, points.length, closeChangeSet, anonymously);
uploadTask.execute(points);
}
public class BackupOpenstreetmapPointAsyncTask extends AsyncTask<OsmPoint, OsmPoint, String> {
private File osmchange;
public BackupOpenstreetmapPointAsyncTask() {
OsmandApplication app = (OsmandApplication) getActivity().getApplication();
osmchange = app.getAppPath("poi_modification.osc");
}
@Override
protected String doInBackground(OsmPoint... points) {
FileOutputStream out = null;
try {
out = new FileOutputStream(osmchange);
XmlSerializer sz = Xml.newSerializer();
sz.setOutput(out, "UTF-8");
sz.startDocument("UTF-8", true);
sz.startTag("", "osmChange");
sz.attribute("", "generator", "OsmAnd");
sz.attribute("", "version", "0.6");
sz.startTag("", "create");
writeContent(sz, points, OsmPoint.Action.CREATE);
sz.endTag("", "create");
sz.startTag("", "modify");
writeContent(sz, points, OsmPoint.Action.MODIFY);
writeContent(sz, points, OsmPoint.Action.REOPEN);
sz.endTag("", "modify");
sz.startTag("", "delete");
writeContent(sz, points, OsmPoint.Action.DELETE);
sz.endTag("", "delete");
sz.endTag("", "osmChange");
sz.endDocument();
} catch (Exception e) {
return e.getMessage();
} finally {
try {
if (out != null) out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private void writeContent(XmlSerializer sz, OsmPoint[] points, OsmPoint.Action a) throws IllegalArgumentException, IllegalStateException, IOException {
for (OsmPoint point : points) {
if (point.getGroup() == OsmPoint.Group.POI) {
OpenstreetmapPoint p = (OpenstreetmapPoint) point;
if (p.getAction() == a) {
sz.startTag("", "node");
sz.attribute("", "lat", p.getLatitude() + "");
sz.attribute("", "lon", p.getLongitude() + "");
sz.attribute("", "id", p.getId() + "");
sz.attribute("", "version", "1");
for (String tag : p.getEntity().getTagKeySet()) {
String val = p.getEntity().getTag(tag);
if (val == null || val.length() == 0 || tag.length() == 0 || "poi_type_tag".equals(tag)) {
continue;
}
sz.startTag("", "tag");
sz.attribute("", "k", tag);
sz.attribute("", "v", val);
sz.endTag("", "tag");
}
sz.endTag("", "node");
}
} else if (point.getGroup() == OsmPoint.Group.BUG) {
OsmNotesPoint p = (OsmNotesPoint) point;
if (p.getAction() == a) {
sz.startTag("", "note");
sz.attribute("", "lat", p.getLatitude() + "");
sz.attribute("", "lon", p.getLongitude() + "");
sz.attribute("", "id", p.getId() + "");
sz.startTag("", "comment");
sz.attribute("", "text", p.getText() + "");
sz.endTag("", "comment");
sz.endTag("", "note");
}
}
}
}
@Override
protected void onPreExecute() {
getActivity().setProgressBarIndeterminateVisibility(true);
}
@Override
protected void onPostExecute(String result) {
getActivity().setProgressBarIndeterminateVisibility(false);
if (result != null) {
Toast.makeText(getActivity(), getString(R.string.local_osm_changes_backup_failed) + " " + result, Toast.LENGTH_LONG).show();
} else {
final Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_osm_edits_subject));
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(osmchange));
sendIntent.setType("text/plain");
startActivity(sendIntent);
}
}
}
private void showOnMap(OsmPoint osmPoint) {
boolean isOsmPoint = osmPoint instanceof OpenstreetmapPoint;
String type = osmPoint.getGroup() == OsmPoint.Group.POI ? PointDescription.POINT_TYPE_POI : PointDescription.POINT_TYPE_OSM_BUG;
String name = (isOsmPoint ? ((OpenstreetmapPoint) osmPoint).getName() : ((OsmNotesPoint) osmPoint).getText());
getMyApplication().getSettings().setMapLocationToShow(osmPoint.getLatitude(), osmPoint.getLongitude(), 15,
new PointDescription(type, name), true, osmPoint); //$NON-NLS-1$
MapActivity.launchMapActivityMoveToTop(getActivity());
}
private void deletePoint(OsmPoint osmPoint) {
listAdapter.delete(osmPoint);
}
private void notifyDataSetChanged() {
listAdapter.notifyDataSetChanged();
}
public static class DeleteOsmEditsConfirmDialogFragment extends DialogFragment {
public static final String TAG = "DeleteOsmEditsConfirmDialogFragment";
private static final String POINTS_LIST = "points_list";
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final OsmEditsFragment parentFragment = (OsmEditsFragment) getParentFragment();
final OsmEditingPlugin plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class);
@SuppressWarnings("unchecked")
final ArrayList<OsmPoint> points =
(ArrayList<OsmPoint>) getArguments().getSerializable(POINTS_LIST);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
assert points != null;
builder.setMessage(getString(R.string.local_osm_changes_delete_all_confirm,
points.size()));
builder.setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Iterator<OsmPoint> it = points.iterator();
while (it.hasNext()) {
OsmPoint osmPoint = it.next();
assert plugin != null;
if (osmPoint.getGroup() == OsmPoint.Group.POI) {
plugin.getDBPOI().deletePOI((OpenstreetmapPoint) osmPoint);
} else if (osmPoint.getGroup() == OsmPoint.Group.BUG) {
plugin.getDBBug().deleteAllBugModifications((OsmNotesPoint) osmPoint);
}
it.remove();
parentFragment.deletePoint(osmPoint);
}
parentFragment.notifyDataSetChanged();
}
});
builder.setNegativeButton(R.string.shared_string_cancel, null);
return builder.create();
}
public static DeleteOsmEditsConfirmDialogFragment createInstance(
ArrayList<OsmPoint> points) {
DeleteOsmEditsConfirmDialogFragment fragment = new DeleteOsmEditsConfirmDialogFragment();
Bundle args = new Bundle();
args.putSerializable(POINTS_LIST, points);
fragment.setArguments(args);
return fragment;
}
}
}