Compare commits

...

1 Commits

Author SHA1 Message Date
map-per
7c084a8d94 [editor] 'discard' and 'delete' buttons only available when nothing was uploaded to OSM
Signed-off-by: map-per <map-per@gmx.de>
2025-12-17 18:52:30 +01:00
8 changed files with 29 additions and 23 deletions

View File

@@ -948,7 +948,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE); mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
if (Editor.nativeIsMapObjectUploaded()) if (Editor.nativeAreSomeFeatureChangesUploaded())
{ {
mReset.setText(R.string.editor_place_doesnt_exist); mReset.setText(R.string.editor_place_doesnt_exist);
return; return;
@@ -966,7 +966,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private void reset() private void reset()
{ {
if (Editor.nativeIsMapObjectUploaded()) if (Editor.nativeAreSomeFeatureChangesUploaded())
{ {
placeDoesntExist(); placeDoesntExist();
return; return;

View File

@@ -580,10 +580,10 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetMapObject
return static_cast<jint>(osm::Editor::Instance().GetFeatureStatus(g_editableMapObject.GetID())); return static_cast<jint>(osm::Editor::Instance().GetFeatureStatus(g_editableMapObject.GetID()));
} }
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsMapObjectUploaded(JNIEnv * env, jclass clazz) JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeAreSomeFeatureChangesUploaded(JNIEnv * env, jclass clazz)
{ {
return osm::Editor::Instance().IsFeatureUploaded(g_editableMapObject.GetID().m_mwmId, return osm::Editor::Instance().AreSomeFeatureChangesUploaded(g_editableMapObject.GetID().m_mwmId,
g_editableMapObject.GetID().m_index); g_editableMapObject.GetID().m_index);
} }
// static nativeMakeLocalizedName(String langCode, String name); // static nativeMakeLocalizedName(String langCode, String name);

View File

@@ -190,5 +190,5 @@ public final class Editor
@FeatureStatus @FeatureStatus
public static native int nativeGetMapObjectStatus(); public static native int nativeGetMapObjectStatus();
public static native boolean nativeIsMapObjectUploaded(); public static native boolean nativeAreSomeFeatureChangesUploaded();
} }

View File

@@ -158,7 +158,7 @@ void registerCellsForTableView(std::vector<MWMEditorCellID> const & cells, UITab
[self configNavBar]; [self configNavBar];
auto const & fid = m_mapObject.GetID(); auto const & fid = m_mapObject.GetID();
self.featureStatus = osm::Editor::Instance().GetFeatureStatus(fid.m_mwmId, fid.m_index); self.featureStatus = osm::Editor::Instance().GetFeatureStatus(fid.m_mwmId, fid.m_index);
self.isFeatureUploaded = osm::Editor::Instance().IsFeatureUploaded(fid.m_mwmId, fid.m_index); self.isFeatureUploaded = osm::Editor::Instance().AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index);
m_newAdditionalLanguages.clear(); m_newAdditionalLanguages.clear();
if (self.isCreating) if (self.isCreating)
{ {
@@ -1089,7 +1089,7 @@ void registerCellsForTableView(std::vector<MWMEditorCellID> const & cells, UITab
- (void)tapOnButtonCell:(UITableViewCell *)cell - (void)tapOnButtonCell:(UITableViewCell *)cell
{ {
auto const & fid = m_mapObject.GetID(); auto const & fid = m_mapObject.GetID();
self.isFeatureUploaded = osm::Editor::Instance().IsFeatureUploaded(fid.m_mwmId, fid.m_index); self.isFeatureUploaded = osm::Editor::Instance().AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index);
NSIndexPath * ip = [self.tableView indexPathForCell:cell]; NSIndexPath * ip = [self.tableView indexPathForCell:cell];
[self.tableView reloadRowsAtIndexPaths:@[ ip ] withRowAnimation:UITableViewRowAnimationFade]; [self.tableView reloadRowsAtIndexPaths:@[ ip ] withRowAnimation:UITableViewRowAnimationFade];

View File

@@ -406,7 +406,7 @@ void EditorTest::GetFeatureStatusTest()
TEST_EQUAL(editor.GetFeatureStatus(emo.GetID()), FeatureStatus::Created, ()); TEST_EQUAL(editor.GetFeatureStatus(emo.GetID()), FeatureStatus::Created, ());
} }
void EditorTest::IsFeatureUploadedTest() void EditorTest::AreSomeFeatureChangesUploadedTest()
{ {
auto & editor = osm::Editor::Instance(); auto & editor = osm::Editor::Instance();
@@ -419,19 +419,25 @@ void EditorTest::IsFeatureUploadedTest()
}); });
ForEachCafeAtPoint(m_dataSource, m2::PointD(1.0, 1.0), [&editor](FeatureType & ft) ForEachCafeAtPoint(m_dataSource, m2::PointD(1.0, 1.0), [&editor](FeatureType & ft)
{ TEST(!editor.IsFeatureUploaded(ft.GetID().m_mwmId, ft.GetID().m_index), ()); }); { TEST(!editor.AreSomeFeatureChangesUploaded(ft.GetID().m_mwmId, ft.GetID().m_index), ()); });
osm::EditableMapObject emo; osm::EditableMapObject emo;
CreateCafeAtPoint({3.0, 3.0}, mwmId, emo); CreateCafeAtPoint({3.0, 3.0}, mwmId, emo);
TEST(!editor.IsFeatureUploaded(emo.GetID().m_mwmId, emo.GetID().m_index), ()); TEST(!editor.AreSomeFeatureChangesUploaded(emo.GetID().m_mwmId, emo.GetID().m_index), ());
// generate journal with uploaded changes
osm::EditJournal journal;
journal.AddTagChange("addr:housenumber", "", "42");
journal.Clear();
emo.SetJournal(std::move(journal));
pugi::xml_document doc; pugi::xml_document doc;
GenerateUploadedFeature(mwmId, emo, doc); GenerateUploadedFeature(mwmId, emo, doc);
editor.m_storage->Save(doc); editor.m_storage->Save(doc);
editor.LoadEdits(); editor.LoadEdits();
TEST(editor.IsFeatureUploaded(emo.GetID().m_mwmId, emo.GetID().m_index), ()); TEST(editor.AreSomeFeatureChangesUploaded(emo.GetID().m_mwmId, emo.GetID().m_index), ());
} }
void EditorTest::DeleteFeatureTest() void EditorTest::DeleteFeatureTest()
@@ -1309,9 +1315,9 @@ UNIT_CLASS_TEST(EditorTest, GetFeatureStatusTest)
EditorTest::GetFeatureStatusTest(); EditorTest::GetFeatureStatusTest();
} }
UNIT_CLASS_TEST(EditorTest, IsFeatureUploadedTest) UNIT_CLASS_TEST(EditorTest, AreSomeFeatureChangesUploadedTest)
{ {
EditorTest::IsFeatureUploadedTest(); EditorTest::AreSomeFeatureChangesUploadedTest();
} }
UNIT_CLASS_TEST(EditorTest, DeleteFeatureTest) UNIT_CLASS_TEST(EditorTest, DeleteFeatureTest)

View File

@@ -31,7 +31,7 @@ public:
void SetIndexTest(); void SetIndexTest();
void GetEditedFeatureStreetTest(); void GetEditedFeatureStreetTest();
void GetFeatureStatusTest(); void GetFeatureStatusTest();
void IsFeatureUploadedTest(); void AreSomeFeatureChangesUploadedTest();
void DeleteFeatureTest(); void DeleteFeatureTest();
void ClearAllLocalEditsTest(); void ClearAllLocalEditsTest();
void GetFeaturesByStatusTest(); void GetFeaturesByStatusTest();

View File

@@ -279,10 +279,10 @@ FeatureStatus Editor::GetFeatureStatus(FeatureID const & fid) const
return GetFeatureStatusImpl(*features, fid.m_mwmId, fid.m_index); return GetFeatureStatusImpl(*features, fid.m_mwmId, fid.m_index);
} }
bool Editor::IsFeatureUploaded(MwmId const & mwmId, uint32_t index) const bool Editor::AreSomeFeatureChangesUploaded(MwmId const & mwmId, uint32_t index) const
{ {
auto const features = m_features.Get(); auto const features = m_features.Get();
return IsFeatureUploadedImpl(*features, mwmId, index); return AreSomeFeatureChangesUploadedImpl(*features, mwmId, index);
} }
void Editor::DeleteFeature(FeatureID const & fid) void Editor::DeleteFeature(FeatureID const & fid)
@@ -425,7 +425,7 @@ bool Editor::RollBackChanges(FeatureID const & fid)
{ {
CHECK_THREAD_CHECKER(MainThreadChecker, ("")); CHECK_THREAD_CHECKER(MainThreadChecker, (""));
if (IsFeatureUploaded(fid.m_mwmId, fid.m_index)) if (AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index))
return false; return false;
return RemoveFeature(fid); return RemoveFeature(fid);
@@ -982,7 +982,7 @@ void Editor::CreateNote(ms::LatLon const & latLon, FeatureID const & fid, featur
"but was not found on the ground.\n"; "but was not found on the ground.\n";
auto const features = m_features.Get(); auto const features = m_features.Get();
auto const isCreated = GetFeatureStatusImpl(*features, fid.m_mwmId, fid.m_index) == FeatureStatus::Created; auto const isCreated = GetFeatureStatusImpl(*features, fid.m_mwmId, fid.m_index) == FeatureStatus::Created;
auto const createdAndUploaded = (isCreated && IsFeatureUploadedImpl(*features, fid.m_mwmId, fid.m_index)); auto const createdAndUploaded = (isCreated && AreSomeFeatureChangesUploadedImpl(*features, fid.m_mwmId, fid.m_index));
CHECK(!isCreated || createdAndUploaded, ()); CHECK(!isCreated || createdAndUploaded, ());
if (createdAndUploaded) if (createdAndUploaded)
@@ -1177,10 +1177,10 @@ FeatureStatus Editor::GetFeatureStatusImpl(FeaturesContainer const & features, M
return featureInfo->m_status; return featureInfo->m_status;
} }
bool Editor::IsFeatureUploadedImpl(FeaturesContainer const & features, MwmId const & mwmId, uint32_t index) bool Editor::AreSomeFeatureChangesUploadedImpl(FeaturesContainer const & features, MwmId const & mwmId, uint32_t index)
{ {
auto const * info = GetFeatureTypeInfo(features, mwmId, index); auto const * info = GetFeatureTypeInfo(features, mwmId, index);
return info && info->m_uploadStatus == kUploaded; return info && !info->m_object.GetJournal().GetJournalHistory().empty();
} }
void Editor::UpdateXMLFeatureTags(editor::XMLFeature & feature, std::list<JournalEntry> const & journal, void Editor::UpdateXMLFeatureTags(editor::XMLFeature & feature, std::list<JournalEntry> const & journal,

View File

@@ -125,7 +125,7 @@ public:
FeatureStatus GetFeatureStatus(FeatureID const & fid) const; FeatureStatus GetFeatureStatus(FeatureID const & fid) const;
/// @returns true if a feature was uploaded to osm. /// @returns true if a feature was uploaded to osm.
bool IsFeatureUploaded(MwmId const & mwmId, uint32_t index) const; bool AreSomeFeatureChangesUploaded(MwmId const & mwmId, uint32_t index) const;
/// Marks feature as "deleted" from MwM file. /// Marks feature as "deleted" from MwM file.
void DeleteFeature(FeatureID const & fid); void DeleteFeature(FeatureID const & fid);
@@ -240,7 +240,7 @@ private:
static FeatureStatus GetFeatureStatusImpl(FeaturesContainer const & features, MwmId const & mwmId, uint32_t index); static FeatureStatus GetFeatureStatusImpl(FeaturesContainer const & features, MwmId const & mwmId, uint32_t index);
static bool IsFeatureUploadedImpl(FeaturesContainer const & features, MwmId const & mwmId, uint32_t index); static bool AreSomeFeatureChangesUploadedImpl(FeaturesContainer const & features, MwmId const & mwmId, uint32_t index);
static void UpdateXMLFeatureTags(editor::XMLFeature & feature, std::list<JournalEntry> const & journal, static void UpdateXMLFeatureTags(editor::XMLFeature & feature, std::list<JournalEntry> const & journal,
ChangesetWrapper & changeset); ChangesetWrapper & changeset);