From 2b4d14f494da893b7a1d71b0c588d0bc2fbc099d Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Mon, 2 Sep 2019 18:31:58 +0300 Subject: [PATCH] [bookmarks][android][iOS] Limit indexed bookmarks count. --- .../maps/bookmarks/data/BookmarkManager.cpp | 14 +++++ .../maps/bookmarks/BookmarksListFragment.java | 3 +- .../maps/bookmarks/data/BookmarkManager.java | 9 +++- iphone/Maps/Bookmarks/BookmarksVC.mm | 5 +- .../Maps/Core/Bookmarks/MWMBookmarksManager.h | 1 + .../Core/Bookmarks/MWMBookmarksManager.mm | 4 ++ map/bookmark_manager.cpp | 54 +++++++++++++------ map/bookmark_manager.hpp | 16 ++++-- map/framework.cpp | 1 + map/map_tests/bookmarks_test.cpp | 2 + 10 files changed, 84 insertions(+), 25 deletions(-) diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index 61047c9623..e8f31fef2e 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -851,6 +851,20 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeIsEditableCategory return static_cast(frm()->GetBookmarkManager().IsEditableCategory(static_cast(catId))); } +JNIEXPORT jboolean JNICALL +Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeIsSearchAllowed( + JNIEnv * env, jobject thiz, jlong catId) +{ + return static_cast(frm()->GetBookmarkManager().IsSearchAllowed(static_cast(catId))); +} + +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativePrepareForSearch( + JNIEnv * env, jobject thiz, jlong catId) +{ + frm()->GetBookmarkManager().PrepareForSearch(static_cast(catId)); +} + JNIEXPORT jboolean JNICALL Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeAreAllCategoriesInvisible( JNIEnv * env, jobject thiz, jint type) diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java index 18f0be675a..3f075a56f3 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java @@ -147,7 +147,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragmentsecond->GetUserMarks().size(); + } + auto const bookmarksCount = GetUserMarkIds(groupId).size(); + auto const maxCount = m_callbacks.m_getSearchAPI().GetMaximumPossibleNumberOfBookmarksToIndex(); + return indexedBookmarksCount + bookmarksCount <= maxCount; +} + +void BookmarkManager::PrepareForSearch(kml::MarkGroupId groupId) +{ + CHECK_THREAD_CHECKER(m_threadChecker, ()); + CHECK(m_callbacks.m_getSearchAPI != nullptr, ()); + m_callbacks.m_getSearchAPI().EnableIndexingOfBookmarkGroup(groupId, true /* enable */); } void BookmarkManager::SetDrapeEngine(ref_ptr engine) @@ -2121,20 +2143,6 @@ void BookmarkManager::SendBookmarksChanges() m_callbacks.m_updatedBookmarksCallback(bookmarksInfo); } - if (m_callbacks.m_deletedBookmarksCallback != nullptr) - { - kml::MarkIdCollection bookmarkIds; - auto const & removedIds = m_changesTracker.GetRemovedMarkIds(); - bookmarkIds.reserve(removedIds.size()); - for (auto markId : removedIds) - { - if (IsBookmark(markId)) - bookmarkIds.push_back(markId); - } - if (!bookmarkIds.empty()) - m_callbacks.m_deletedBookmarksCallback(bookmarkIds); - } - std::vector groupsInfo; if (m_callbacks.m_attachedBookmarksCallback != nullptr) @@ -2150,6 +2158,20 @@ void BookmarkManager::SendBookmarksChanges() if (!groupsInfo.empty()) m_callbacks.m_detachedBookmarksCallback(groupsInfo); } + + if (m_callbacks.m_deletedBookmarksCallback != nullptr) + { + kml::MarkIdCollection bookmarkIds; + auto const & removedIds = m_changesTracker.GetRemovedMarkIds(); + bookmarkIds.reserve(removedIds.size()); + for (auto markId : removedIds) + { + if (IsBookmark(markId)) + bookmarkIds.push_back(markId); + } + if (!bookmarkIds.empty()) + m_callbacks.m_deletedBookmarksCallback(bookmarkIds); + } } bool BookmarkManager::HasBmCategory(kml::MarkGroupId groupId) const diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index da0563aa6e..446d439555 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -41,6 +41,7 @@ class CountryInfoGetter; } // namespace storage class DataSource; +class SearchAPI; class User; class BookmarkManager final @@ -71,18 +72,22 @@ public: struct Callbacks { using GetStringsBundleFn = std::function; + using GetSeacrhAPIFn = std::function; using CreatedBookmarksCallback = std::function const &)>; using UpdatedBookmarksCallback = std::function const &)>; using DeletedBookmarksCallback = std::function const &)>; using AttachedBookmarksCallback = std::function const &)>; using DetachedBookmarksCallback = std::function const &)>; - template - Callbacks(StringsBundleProvider && stringsBundleProvider, CreateListener && createListener, + Callbacks(StringsBundleProvider && stringsBundleProvider, + SearchAPIProvider && searchAPIProvider, CreateListener && createListener, UpdateListener && updateListener, DeleteListener && deleteListener, AttachListener && attachListener, DetachListener && detachListener) : m_getStringsBundle(std::forward(stringsBundleProvider)) + , m_getSearchAPI(std::forward(searchAPIProvider)) , m_createdBookmarksCallback(std::forward(createListener)) , m_updatedBookmarksCallback(std::forward(updateListener)) , m_deletedBookmarksCallback(std::forward(deleteListener)) @@ -91,6 +96,7 @@ public: {} GetStringsBundleFn m_getStringsBundle; + GetSeacrhAPIFn m_getSearchAPI; CreatedBookmarksCallback m_createdBookmarksCallback; UpdatedBookmarksCallback m_updatedBookmarksCallback; DeletedBookmarksCallback m_deletedBookmarksCallback; @@ -240,9 +246,11 @@ public: void SetLastSortingType(kml::MarkGroupId groupId, SortingType sortingType); void ResetLastSortingType(kml::MarkGroupId groupId); - bool IsVisible(kml::MarkGroupId groupId) const; bool IsSearchAllowed(kml::MarkGroupId groupId) const; - + void PrepareForSearch(kml::MarkGroupId groupId); + + bool IsVisible(kml::MarkGroupId groupId) const; + kml::MarkGroupId CreateBookmarkCategory(kml::CategoryData && data, bool autoSave = true); kml::MarkGroupId CreateBookmarkCategory(std::string const & name, bool autoSave = true); diff --git a/map/framework.cpp b/map/framework.cpp index 84624c2693..81665965cd 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -496,6 +496,7 @@ Framework::Framework(FrameworkParams const & params) m_bmManager = make_unique(m_user, BookmarkManager::Callbacks( [this]() -> StringsBundle const & { return m_stringsBundle; }, + [this]() -> SearchAPI & { return GetSearchAPI(); }, [this](vector const & marks) { GetSearchAPI().OnBookmarksCreated(marks); }, [this](vector const & marks) { GetSearchAPI().OnBookmarksUpdated(marks); }, [this](vector const & marks) { GetSearchAPI().OnBookmarksDeleted(marks); }, diff --git a/map/map_tests/bookmarks_test.cpp b/map/map_tests/bookmarks_test.cpp index 113d1d41f3..e77bdb1128 100644 --- a/map/map_tests/bookmarks_test.cpp +++ b/map/map_tests/bookmarks_test.cpp @@ -142,6 +142,7 @@ BookmarkManager::Callbacks const bmCallbacks( static StringsBundle dummyBundle; return dummyBundle; }, + static_cast(nullptr), static_cast(nullptr), static_cast(nullptr), static_cast(nullptr), @@ -1214,6 +1215,7 @@ UNIT_CLASS_TEST(Runner, Bookmarks_Listeners) static StringsBundle dummyBundle; return dummyBundle; }, + static_cast(nullptr), onCreate, onUpdate, onDelete, onAttach, onDetach); User user;