This commit is contained in:
Chumva 2018-09-12 13:46:25 +03:00
parent 5ed6fa2277
commit dcd05c455f
2 changed files with 51 additions and 14 deletions

View file

@ -171,8 +171,9 @@ public class AdvancedEditPoiFragment extends BaseOsmAndFragment
public void updateViews() {
linearLayout.removeAllViews();
editPoiData.setIsInEdit(true);
PoiType pt = editPoiData.getCurrentPoiType();
for (Entry<String, String> tag : editPoiData.getTagValues().entrySet()) {
if (tag.getKey().equals(EditPoiData.POI_TYPE_TAG)
if (tag.getKey().equals(EditPoiData.POI_TYPE_TAG) || tag.getKey().equals(pt != null ? pt.getEditOsmTag() : null)
|| tag.getKey().equals(OSMSettings.OSMTagKey.NAME.getValue()) || tag.getKey().startsWith(EditPoiData.REMOVE_TAG_PREFIX))
continue;
addTagView(tag.getKey(), tag.getValue());

View file

@ -31,6 +31,7 @@ public class EditPoiData {
private boolean hasChangesBeenMade = false;
private Map<String, PoiType> allTranslatedSubTypes;
private PoiCategory category;
private PoiType currentPoiType;
private Set<String> changedTags = new HashSet<>();
@ -59,6 +60,11 @@ public class EditPoiData {
return category;
}
@Nullable
public PoiType getCurrentPoiType() {
return currentPoiType;
}
public PoiType getPoiTypeDefined() {
return allTranslatedSubTypes.get(getPoiTypeString().toLowerCase());
}
@ -199,20 +205,50 @@ public class EditPoiData {
}
public void updateTypeTag(String string, boolean userChanges) {
tagValues.put(POI_TYPE_TAG, string);
if (userChanges) {
changedTags.add(POI_TYPE_TAG);
checkNotInEdit();
try {
tagValues.put(POI_TYPE_TAG, string);
if (userChanges) {
changedTags.add(POI_TYPE_TAG);
}
retrieveType();
PoiType pt = getPoiTypeDefined();
if (pt != null) {
removeTypeTagWithPrefix(!tagValues.containsKey(REMOVE_TAG_PREFIX + pt.getEditOsmTag()));
currentPoiType = pt;
tagValues.put(pt.getEditOsmTag(), pt.getEditOsmValue());
if (userChanges) {
changedTags.add(pt.getEditOsmTag());
}
category = pt.getCategory();
} else if (currentPoiType != null) {
removeTypeTagWithPrefix(true);
category = currentPoiType.getCategory();
}
notifyDatasetChanged(POI_TYPE_TAG);
} finally {
isInEdit = false;
}
retrieveType();
PoiType pt = getPoiTypeDefined();
if(pt != null) {
tagValues.put(REMOVE_TAG_PREFIX+pt.getEditOsmTag(), REMOVE_TAG_VALUE);
tagValues.put(REMOVE_TAG_PREFIX+pt.getOsmTag2(), REMOVE_TAG_VALUE);
tagValues.remove(pt.getEditOsmTag());
tagValues.remove(pt.getOsmTag2());
changedTags.removeAll(Arrays.asList(pt.getEditOsmTag(), pt.getOsmTag2()));
category = pt.getCategory();
}
private void removeTypeTagWithPrefix(boolean needRemovePrefix) {
if (currentPoiType != null) {
if (needRemovePrefix) {
tagValues.put(REMOVE_TAG_PREFIX + currentPoiType.getEditOsmTag(), REMOVE_TAG_VALUE);
tagValues.put(REMOVE_TAG_PREFIX + currentPoiType.getOsmTag2(), REMOVE_TAG_VALUE);
} else {
tagValues.remove(REMOVE_TAG_PREFIX + currentPoiType.getEditOsmTag());
tagValues.remove(REMOVE_TAG_PREFIX + currentPoiType.getOsmTag2());
}
removeCurrentTypeTag();
}
}
private void removeCurrentTypeTag() {
if (currentPoiType != null) {
tagValues.remove(currentPoiType.getEditOsmTag());
tagValues.remove(currentPoiType.getOsmTag2());
changedTags.removeAll(Arrays.asList(currentPoiType.getEditOsmTag(), currentPoiType.getOsmTag2()));
}
notifyDatasetChanged(POI_TYPE_TAG);
}
}