diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index 584d059857..255e7a1478 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -564,6 +564,14 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeSetCategoryAccessR static_cast(catId), static_cast(accessRules)); } +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeSetCategoryCustomProperty( + JNIEnv * env, jobject, jlong catId, jstring key, jstring value) +{ + frm()->GetBookmarkManager().GetEditSession().SetCategoryCustomProperty( + static_cast(catId), ToNativeString(env, key), ToNativeString(env, value)); +} + JNIEXPORT jstring JNICALL Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetCategoryName( JNIEnv * env, jobject thiz, jlong catId) diff --git a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java index a06a9077e2..f036784b82 100644 --- a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java +++ b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java @@ -646,6 +646,8 @@ public enum BookmarkManager private native void nativeSetCategoryAccessRules(long catId, @AccessRules int accessRules); + private native void nativeSetCategoryCustomProperty(long catId, String key, String value); + @NonNull private native String nativeGetCategoryAuthor(long catId); diff --git a/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java b/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java index 548c21d692..146540f8fb 100644 --- a/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java +++ b/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java @@ -20,6 +20,7 @@ import com.mapswithme.maps.Framework; import com.mapswithme.maps.R; import com.mapswithme.maps.auth.BaseMwmAuthorizationFragment; import com.mapswithme.maps.bookmarks.data.BookmarkManager; +import com.mapswithme.maps.bookmarks.data.CatalogCustomProperty; import com.mapswithme.maps.bookmarks.data.CatalogTagsGroup; import com.mapswithme.maps.dialog.AlertDialog; import com.mapswithme.maps.dialog.ProgressDialogFragment; @@ -248,6 +249,13 @@ public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment impl } + @Override + public void onCustomPropertiesReceived(boolean successful, + @NonNull CatalogCustomProperty[] properties) + { + + } + @Override public void onUploadStarted(long originCategoryId) { diff --git a/map/bookmark.cpp b/map/bookmark.cpp index 5bfa2ac775..578d889480 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -258,6 +258,16 @@ void BookmarkCategory::SetTags(std::vector const & tags) m_data.m_tags = tags; } +void BookmarkCategory::SetCustomProperty(std::string const & key, std::string const & value) +{ + auto it = m_data.m_properties.find(key); + if (it != m_data.m_properties.end() && it->second == value) + return; + + SetDirty(); + m_data.m_properties[key] = value; +} + std::string BookmarkCategory::GetName() const { return GetPreferredBookmarkStr(m_data.m_name); diff --git a/map/bookmark.hpp b/map/bookmark.hpp index fd8b89c0d1..964c847fc4 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -92,6 +92,7 @@ public: void SetAuthor(std::string const & name, std::string const & id); void SetAccessRules(kml::AccessRules accessRules); void SetTags(std::vector const & tags); + void SetCustomProperty(std::string const & key, std::string const & value); private: void SetDirty() override; diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index c504e933c6..49d52380bb 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -827,6 +827,15 @@ void BookmarkManager::SetCategoryAccessRules(kml::MarkGroupId categoryId, kml::A category->SetAccessRules(accessRules); } +void BookmarkManager::SetCategoryCustomProperty(kml::MarkGroupId categoryId, std::string const & key, + std::string const & value) +{ + CHECK_THREAD_CHECKER(m_threadChecker, ()); + auto category = GetBmCategory(categoryId); + CHECK(category != nullptr, ()); + category->SetCustomProperty(key, value); +} + std::string BookmarkManager::GetCategoryFileName(kml::MarkGroupId categoryId) const { CHECK_THREAD_CHECKER(m_threadChecker, ()); @@ -2662,6 +2671,13 @@ void BookmarkManager::EditSession::SetCategoryAccessRules(kml::MarkGroupId categ m_bmManager.SetCategoryAccessRules(categoryId, accessRules); } +void BookmarkManager::EditSession::SetCategoryCustomProperty(kml::MarkGroupId categoryId, std::string const & key, + std::string const & value) +{ + CHECK(m_bmManager.IsEditableCategory(categoryId), ()); + m_bmManager.SetCategoryCustomProperty(categoryId, key, value); +} + bool BookmarkManager::EditSession::DeleteBmCategory(kml::MarkGroupId groupId) { return m_bmManager.DeleteBmCategory(groupId); diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index cee2354587..09ceb3670a 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -127,6 +127,8 @@ public: void SetCategoryName(kml::MarkGroupId categoryId, std::string const & name); void SetCategoryTags(kml::MarkGroupId categoryId, std::vector const & tags); void SetCategoryAccessRules(kml::MarkGroupId categoryId, kml::AccessRules accessRules); + void SetCategoryCustomProperty(kml::MarkGroupId categoryId, std::string const & key, + std::string const & value); bool DeleteBmCategory(kml::MarkGroupId groupId); void NotifyChanges(); @@ -438,6 +440,8 @@ private: void SetCategoryName(kml::MarkGroupId categoryId, std::string const & name); void SetCategoryTags(kml::MarkGroupId categoryId, std::vector const & tags); void SetCategoryAccessRules(kml::MarkGroupId categoryId, kml::AccessRules accessRules); + void SetCategoryCustomProperty(kml::MarkGroupId categoryId, std::string const & key, + std::string const & value); bool DeleteBmCategory(kml::MarkGroupId groupId); void ClearCategories();