diff --git a/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java b/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java index b2afed912..b86b62b54 100644 --- a/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java @@ -948,7 +948,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE); - if (Editor.nativeIsMapObjectUploaded()) + if (Editor.nativeAreSomeFeatureChangesUploaded()) { mReset.setText(R.string.editor_place_doesnt_exist); return; @@ -966,7 +966,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe private void reset() { - if (Editor.nativeIsMapObjectUploaded()) + if (Editor.nativeAreSomeFeatureChangesUploaded()) { placeDoesntExist(); return; diff --git a/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp b/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp index cfa01c107..cdd491ac3 100644 --- a/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp +++ b/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp @@ -580,10 +580,10 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetMapObject return static_cast(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, - g_editableMapObject.GetID().m_index); + return osm::Editor::Instance().AreSomeFeatureChangesUploaded(g_editableMapObject.GetID().m_mwmId, + g_editableMapObject.GetID().m_index); } // static nativeMakeLocalizedName(String langCode, String name); diff --git a/android/sdk/src/main/java/app/organicmaps/sdk/editor/Editor.java b/android/sdk/src/main/java/app/organicmaps/sdk/editor/Editor.java index 9e99bfac8..32f847ae1 100644 --- a/android/sdk/src/main/java/app/organicmaps/sdk/editor/Editor.java +++ b/android/sdk/src/main/java/app/organicmaps/sdk/editor/Editor.java @@ -190,5 +190,5 @@ public final class Editor @FeatureStatus public static native int nativeGetMapObjectStatus(); - public static native boolean nativeIsMapObjectUploaded(); + public static native boolean nativeAreSomeFeatureChangesUploaded(); } diff --git a/iphone/Maps/UI/Editor/MWMEditorViewController.mm b/iphone/Maps/UI/Editor/MWMEditorViewController.mm index 79588f461..f2fc0392d 100644 --- a/iphone/Maps/UI/Editor/MWMEditorViewController.mm +++ b/iphone/Maps/UI/Editor/MWMEditorViewController.mm @@ -158,7 +158,7 @@ void registerCellsForTableView(std::vector const & cells, UITab [self configNavBar]; auto const & fid = m_mapObject.GetID(); 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(); if (self.isCreating) { @@ -1089,7 +1089,7 @@ void registerCellsForTableView(std::vector const & cells, UITab - (void)tapOnButtonCell:(UITableViewCell *)cell { 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]; [self.tableView reloadRowsAtIndexPaths:@[ ip ] withRowAnimation:UITableViewRowAnimationFade]; diff --git a/libs/editor/editor_tests/osm_editor_test.cpp b/libs/editor/editor_tests/osm_editor_test.cpp index 113aca2bc..aedf68729 100644 --- a/libs/editor/editor_tests/osm_editor_test.cpp +++ b/libs/editor/editor_tests/osm_editor_test.cpp @@ -406,7 +406,7 @@ void EditorTest::GetFeatureStatusTest() TEST_EQUAL(editor.GetFeatureStatus(emo.GetID()), FeatureStatus::Created, ()); } -void EditorTest::IsFeatureUploadedTest() +void EditorTest::AreSomeFeatureChangesUploadedTest() { auto & editor = osm::Editor::Instance(); @@ -419,19 +419,25 @@ void EditorTest::IsFeatureUploadedTest() }); 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; 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; GenerateUploadedFeature(mwmId, emo, doc); editor.m_storage->Save(doc); 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() @@ -1309,9 +1315,9 @@ UNIT_CLASS_TEST(EditorTest, GetFeatureStatusTest) EditorTest::GetFeatureStatusTest(); } -UNIT_CLASS_TEST(EditorTest, IsFeatureUploadedTest) +UNIT_CLASS_TEST(EditorTest, AreSomeFeatureChangesUploadedTest) { - EditorTest::IsFeatureUploadedTest(); + EditorTest::AreSomeFeatureChangesUploadedTest(); } UNIT_CLASS_TEST(EditorTest, DeleteFeatureTest) diff --git a/libs/editor/editor_tests/osm_editor_test.hpp b/libs/editor/editor_tests/osm_editor_test.hpp index d6e33a1cb..a36df8575 100644 --- a/libs/editor/editor_tests/osm_editor_test.hpp +++ b/libs/editor/editor_tests/osm_editor_test.hpp @@ -31,7 +31,7 @@ public: void SetIndexTest(); void GetEditedFeatureStreetTest(); void GetFeatureStatusTest(); - void IsFeatureUploadedTest(); + void AreSomeFeatureChangesUploadedTest(); void DeleteFeatureTest(); void ClearAllLocalEditsTest(); void GetFeaturesByStatusTest(); diff --git a/libs/editor/osm_editor.cpp b/libs/editor/osm_editor.cpp index 0abb9477a..443b78b89 100644 --- a/libs/editor/osm_editor.cpp +++ b/libs/editor/osm_editor.cpp @@ -279,10 +279,10 @@ FeatureStatus Editor::GetFeatureStatus(FeatureID const & fid) const 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(); - return IsFeatureUploadedImpl(*features, mwmId, index); + return AreSomeFeatureChangesUploadedImpl(*features, mwmId, index); } void Editor::DeleteFeature(FeatureID const & fid) @@ -425,7 +425,7 @@ bool Editor::RollBackChanges(FeatureID const & fid) { CHECK_THREAD_CHECKER(MainThreadChecker, ("")); - if (IsFeatureUploaded(fid.m_mwmId, fid.m_index)) + if (AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index)) return false; 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"; auto const features = m_features.Get(); 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, ()); if (createdAndUploaded) @@ -1177,10 +1177,10 @@ FeatureStatus Editor::GetFeatureStatusImpl(FeaturesContainer const & features, M 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); - return info && info->m_uploadStatus == kUploaded; + return info && !info->m_object.GetJournal().GetJournalHistory().empty(); } void Editor::UpdateXMLFeatureTags(editor::XMLFeature & feature, std::list const & journal, diff --git a/libs/editor/osm_editor.hpp b/libs/editor/osm_editor.hpp index a08aca5ca..5adfd3edb 100644 --- a/libs/editor/osm_editor.hpp +++ b/libs/editor/osm_editor.hpp @@ -125,7 +125,7 @@ public: FeatureStatus GetFeatureStatus(FeatureID const & fid) const; /// @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. void DeleteFeature(FeatureID const & fid); @@ -240,7 +240,7 @@ private: 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 const & journal, ChangesetWrapper & changeset);