Fix for Edit/Delete existing POI broken functionality.

Deletion now implemented with dialog fragment.
And editing is working with new editing screen.
Editing screen fixed to work with existing poi
This commit is contained in:
GaidamakUA 2015-08-31 15:30:20 +03:00
parent 4a7c7f9c0e
commit b65bbdc779
6 changed files with 52 additions and 17 deletions

View file

@ -1,7 +1,8 @@
package net.osmand.data; package net.osmand.data;
import java.io.Serializable;
public class LatLon { public class LatLon implements Serializable {
private final double longitude; private final double longitude;
private final double latitude; private final double latitude;

View file

@ -140,6 +140,7 @@ public class BasicDataFragment extends Fragment {
mIsUserInput = true; mIsUserInput = true;
} }
}; };
mTagsChangedListener.onTagsChanged();
getData().addListener(mTagsChangedListener); getData().addListener(mTagsChangedListener);
} }

View file

@ -61,8 +61,8 @@ public class EditPoiFragment extends Fragment {
public static final String TAG = "EditPoiFragment"; public static final String TAG = "EditPoiFragment";
private static final Log LOG = PlatformUtil.getLog(EditPoiFragment.class); private static final Log LOG = PlatformUtil.getLog(EditPoiFragment.class);
private static final String KEY_AMENITY_NODE = "amenity_node"; private static final String KEY_AMENITY_NODE = "key_amenity_node";
private static final String KEY_AMENITY = "amenity"; private static final String KEY_AMENITY = "key_amenity";
private static final String TAGS_LIST = "tags_list"; private static final String TAGS_LIST = "tags_list";
private final EditPoiData editPoiData = new EditPoiData(); private final EditPoiData editPoiData = new EditPoiData();
@ -114,6 +114,34 @@ public class EditPoiFragment extends Fragment {
editPoiData.tags = (LinkedHashSet<Tag>) savedInstanceState.getSerializable(TAGS_LIST); editPoiData.tags = (LinkedHashSet<Tag>) savedInstanceState.getSerializable(TAGS_LIST);
} else { } else {
editPoiData.tags = new LinkedHashSet<>(); editPoiData.tags = new LinkedHashSet<>();
LOG.debug("node.tags=" + node.getTags());
tryAddTag(OSMSettings.OSMTagKey.ADDR_STREET.getValue(),
node.getTag(OSMSettings.OSMTagKey.ADDR_STREET));
tryAddTag(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue(),
node.getTag(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER));
tryAddTag(OSMSettings.OSMTagKey.PHONE.getValue(),
editPoiData.amenity.getPhone());
tryAddTag(OSMSettings.OSMTagKey.WEBSITE.getValue(),
editPoiData.amenity.getSite());
for (String tag : node.getTagKeySet()) {
tryAddTag(tag, node.getTag(tag));
}
String subType = editPoiData.amenity.getSubType();
String key;
String value;
if (allTranslatedSubTypes.get(subType) != null) {
PoiType pt = allTranslatedSubTypes.get(subType);
key = pt.getOsmTag();
value = pt.getOsmValue();
} else {
key = editPoiData.amenity.getType().getDefaultTag();
value = subType;
}
final Tag tag = new Tag(key, value);
editPoiData.tags.remove(tag);
tag.tag = POI_TYPE_TAG;
editPoiData.tags.add(tag);
} }
View view = inflater.inflate(R.layout.fragment_edit_poi, container, false); View view = inflater.inflate(R.layout.fragment_edit_poi, container, false);
@ -193,6 +221,7 @@ public class EditPoiFragment extends Fragment {
} }
} }
}); });
poiNameEditText.setText(node.getTag(OSMSettings.OSMTagKey.NAME));
poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout); poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout);
poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText); poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText);
poiTypeEditText.addTextChangedListener(new TextWatcher() { poiTypeEditText.addTextChangedListener(new TextWatcher() {
@ -305,6 +334,12 @@ public class EditPoiFragment extends Fragment {
return view; return view;
} }
private void tryAddTag(String key, String value) {
if (!Algorithms.isEmpty(value)) {
editPoiData.tags.add(new Tag(key, value));
}
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
outState.putSerializable(TAGS_LIST, editPoiData.tags); outState.putSerializable(TAGS_LIST, editPoiData.tags);
@ -412,8 +447,9 @@ public class EditPoiFragment extends Fragment {
}); });
} }
public static void showEditInstance(final Amenity amenity, OsmandSettings settings, public static void showEditInstance(final Amenity amenity,
final MapActivity mapActivity) { final MapActivity mapActivity) {
final OsmandSettings settings = mapActivity.getMyApplication().getSettings();
final OpenstreetmapUtil openstreetmapUtilToLoad; final OpenstreetmapUtil openstreetmapUtilToLoad;
if (settings.OFFLINE_EDITION.get() || !settings.isInternetConnectionAvailable(true)) { if (settings.OFFLINE_EDITION.get() || !settings.isInternetConnectionAvailable(true)) {
OsmEditingPlugin plugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class); OsmEditingPlugin plugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class);
@ -427,15 +463,16 @@ public class EditPoiFragment extends Fragment {
@Override @Override
protected Node doInBackground(Void... params) { protected Node doInBackground(Void... params) {
return openstreetmapUtilToLoad.loadNode((Amenity) amenity); return openstreetmapUtilToLoad.loadNode(amenity);
} }
protected void onPostExecute(Node n) { protected void onPostExecute(Node n) {
if (n != null) { if (n != null) {
EditPoiFragment fragment = EditPoiFragment fragment =
EditPoiFragment.createInstance(n, (Amenity) amenity); EditPoiFragment.createInstance(n, amenity);
mapActivity.getSupportFragmentManager().beginTransaction() mapActivity.getSupportFragmentManager().beginTransaction()
.add(fragment, "EditPoiFragment").commit(); .add(R.id.fragmentContainer, fragment, "EditPoiFragment")
.addToBackStack(null).commit();
} else { } else {
AccessibleToast.makeText(mapActivity, AccessibleToast.makeText(mapActivity,
mapActivity.getString(R.string.poi_error_poi_not_found), mapActivity.getString(R.string.poi_error_poi_not_found),

View file

@ -139,9 +139,9 @@ public class EditingPOIDialogProvider implements DialogProvider {
} else { } else {
AccessibleToast.makeText(activity, activity.getString(R.string.poi_error_poi_not_found), Toast.LENGTH_SHORT).show(); AccessibleToast.makeText(activity, activity.getString(R.string.poi_error_poi_not_found), Toast.LENGTH_SHORT).show();
} }
}; }
}.execute(new Void[0]); }.execute();
} }
public void showCreateDialog(double latitude, double longitude){ public void showCreateDialog(double latitude, double longitude){

View file

@ -28,7 +28,6 @@ import net.osmand.plus.activities.EnumAdapter;
import net.osmand.plus.activities.EnumAdapter.IEnumWithResource; import net.osmand.plus.activities.EnumAdapter.IEnumWithResource;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.TabActivity; import net.osmand.plus.activities.TabActivity;
import net.osmand.plus.dashboard.DashPluginsFragment;
import net.osmand.plus.dashboard.tools.DashFragmentData; import net.osmand.plus.dashboard.tools.DashFragmentData;
import net.osmand.plus.myplaces.AvailableGPXFragment; import net.osmand.plus.myplaces.AvailableGPXFragment;
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo; import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
@ -171,13 +170,11 @@ public class OsmEditingPlugin extends OsmandPlugin {
osmBugsLayer.openBug(latitude, longitude); osmBugsLayer.openBug(latitude, longitude);
} else if (resId == R.string.poi_context_menu_delete) { } else if (resId == R.string.poi_context_menu_delete) {
LOG.debug("delete poi"); LOG.debug("delete poi");
// new EditPoiFragment.ShowDeleteDialogAsyncTask(mapActivity) new EditPoiFragment.ShowDeleteDialogAsyncTask(mapActivity)
// .execute((Amenity) selectedObj); .execute((Amenity) selectedObj);
// TODO implement delete
getPoiActions(mapActivity).showDeleteDialog((Amenity) selectedObj);
} else if (resId == R.string.poi_context_menu_modify) { } else if (resId == R.string.poi_context_menu_modify) {
// TODO implement edit LOG.debug("edit poi");
getPoiActions(mapActivity).showEditDialog((Amenity) selectedObj); EditPoiFragment.showEditInstance((Amenity) selectedObj, mapActivity);
} }
return true; return true;
} }

View file

@ -21,7 +21,6 @@ public class Tag implements Serializable {
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (o == null || getClass() != o.getClass()) return false;
Tag tag1 = (Tag) o; Tag tag1 = (Tag) o;
LOG.debug("this=" + this + "; that=" + tag1);
return tag.equals(tag1.tag); return tag.equals(tag1.tag);
} }