From 59d0c16de1a611908023838f638947dba9ee73de Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Thu, 26 Jul 2018 12:00:57 +0300 Subject: [PATCH] Added support of catalog popup --- android/jni/com/mapswithme/maps/Framework.cpp | 6 +++++ .../maps/bookmarks/data/BookmarkManager.cpp | 10 ++++--- .../src/com/mapswithme/maps/Framework.java | 1 + .../bookmarks/BookmarksCatalogFragment.java | 2 +- .../CachedBookmarkCategoriesFragment.java | 2 +- .../maps/bookmarks/data/BookmarkManager.java | 9 ++++--- .../Core/Bookmarks/MWMBookmarksManager.mm | 16 ++++++------ map/bookmark_manager.cpp | 14 ++++++++-- map/bookmark_manager.hpp | 1 + map/framework.cpp | 26 +++++++++++++++++++ map/framework.hpp | 1 + 11 files changed, 68 insertions(+), 20 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 335876c4d5..64c256c17a 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -1667,6 +1667,12 @@ Java_com_mapswithme_maps_Framework_nativeShowFeatureByLatLon(JNIEnv * env, jclas frm()->ShowFeatureByMercator(MercatorBounds::FromLatLon(ms::LatLon(lat, lon))); } +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_Framework_nativeShowBookmarkCategory(JNIEnv * env, jclass, jlong cat) +{ + frm()->ShowBookmarkCategory(static_cast(cat)); +} + JNIEXPORT jint JNICALL Java_com_mapswithme_maps_Framework_nativeGetFilterRating(JNIEnv * env, jclass, jfloat rawRating) { diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index 1f451f75a8..6dcc890936 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -67,7 +67,7 @@ void PrepareClassRefs(JNIEnv * env) g_onImportStartedMethod = jni::GetMethodID(env, bookmarkManagerInstance, "onImportStarted", "(Ljava/lang/String;)V"); g_onImportFinishedMethod = - jni::GetMethodID(env, bookmarkManagerInstance, "onImportFinished", "(Ljava/lang/String;Z)V"); + jni::GetMethodID(env, bookmarkManagerInstance, "onImportFinished", "(Ljava/lang/String;JZ)V"); g_bookmarkCategoryClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/BookmarkCategory"); //public BookmarkCategory(long id, @@ -213,13 +213,15 @@ void OnImportStarted(JNIEnv * env, std::string const & serverId) jni::HandleJavaException(env); } -void OnImportFinished(JNIEnv * env, std::string const & serverId, bool successful) +void OnImportFinished(JNIEnv * env, std::string const & serverId, kml::MarkGroupId categoryId, + bool successful) { ASSERT(g_bookmarkManagerClass, ()); jobject bookmarkManagerInstance = env->GetStaticObjectField(g_bookmarkManagerClass, g_bookmarkManagerInstanceField); env->CallVoidMethod(bookmarkManagerInstance, g_onImportFinishedMethod, - jni::ToJavaString(env, serverId), static_cast(successful)); + jni::ToJavaString(env, serverId), static_cast(categoryId), + static_cast(successful)); jni::HandleJavaException(env); } } // namespace @@ -254,7 +256,7 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeLoadBookmarks(JNIE frm()->GetBookmarkManager().SetCatalogHandlers(nullptr, nullptr, std::bind(&OnImportStarted, env, _1), - std::bind(&OnImportFinished, env, _1, _2)); + std::bind(&OnImportFinished, env, _1, _2, _3)); frm()->LoadBookmarks(); } diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index 755714a356..56ae937f07 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -440,6 +440,7 @@ public class Framework public static native String nativeGetTermsOfUseLink(); public static native void nativeShowFeatureByLatLon(double lat, double lon); + public static native void nativeShowBookmarkCategory(long cat); private static native int nativeGetFilterRating(float rawRating); diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java index 3fd1b7c997..a3c230483e 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java @@ -260,7 +260,7 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment } @Override - public void onImportFinished(@NonNull String serverId, boolean successful) + public void onImportFinished(@NonNull String serverId, long catId, boolean successful) { if (mFragment == null) { diff --git a/android/src/com/mapswithme/maps/bookmarks/CachedBookmarkCategoriesFragment.java b/android/src/com/mapswithme/maps/bookmarks/CachedBookmarkCategoriesFragment.java index c2f068455d..64a5772790 100644 --- a/android/src/com/mapswithme/maps/bookmarks/CachedBookmarkCategoriesFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/CachedBookmarkCategoriesFragment.java @@ -152,7 +152,7 @@ public class CachedBookmarkCategoriesFragment extends BaseBookmarkCategoriesFrag } @Override - public void onImportFinished(@NonNull String serverId, boolean successful) + public void onImportFinished(@NonNull String serverId, long catId, boolean successful) { if (successful) { diff --git a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java index 80ed2b2f34..e1daa2f4ba 100644 --- a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java +++ b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java @@ -254,10 +254,10 @@ public enum BookmarkManager // Called from JNI. @SuppressWarnings("unused") @MainThread - public void onImportFinished(@NonNull String id, boolean successful) + public void onImportFinished(@NonNull String id, long catId, boolean successful) { for (BookmarksCatalogListener listener : mCatalogListeners) - listener.onImportFinished(id, successful); + listener.onImportFinished(id, catId, successful); } public boolean isVisible(long catId) @@ -726,9 +726,10 @@ public enum BookmarkManager * The method is called when the importing of a file from the catalog is finished. * * @param serverId is server identifier of the file. + * @param catId is client identifier of the created bookmarks category. * @param successful is result of the importing. */ - void onImportFinished(@NonNull String serverId, boolean successful); + void onImportFinished(@NonNull String serverId, long catId, boolean successful); } public static class DefaultBookmarksCatalogListener implements BookmarksCatalogListener @@ -741,7 +742,7 @@ public enum BookmarkManager } @Override - public void onImportFinished(@NonNull String serverId, boolean successful) + public void onImportFinished(@NonNull String serverId, long catId, boolean successful) { /* do noting by default */ } diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm index 9bcea1a1d8..62ecd97389 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm @@ -467,15 +467,15 @@ NSString * const CloudErrorToString(Cloud::SynchronizationResult result) static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [MWMBookmarksManager manager].catalogObservers = [NSMutableDictionary dictionary]; - auto onDownloadStarted = [](std::string const & catId) + auto onDownloadStarted = [](std::string const & serverCatId) { - auto observer = [MWMBookmarksManager manager].catalogObservers[@(catId.c_str())]; + auto observer = [MWMBookmarksManager manager].catalogObservers[@(serverCatId.c_str())]; if (observer) [observer onDownloadStart]; }; - auto onDownloadFinished = [](std::string const & catId, platform::RemoteFile::Result const & result) + auto onDownloadFinished = [](std::string const & serverCatId, platform::RemoteFile::Result const & result) { - auto observer = [MWMBookmarksManager manager].catalogObservers[@(catId.c_str())]; + auto observer = [MWMBookmarksManager manager].catalogObservers[@(serverCatId.c_str())]; if (observer) { [observer onDownloadComplete:result.m_status]; @@ -484,15 +484,15 @@ NSString * const CloudErrorToString(Cloud::SynchronizationResult result) } } }; - auto onImportStarted = [](std::string const & catId) + auto onImportStarted = [](std::string const & serverCatId) { - auto observer = [MWMBookmarksManager manager].catalogObservers[@(catId.c_str())]; + auto observer = [MWMBookmarksManager manager].catalogObservers[@(serverCatId.c_str())]; if (observer) [observer onImportStart]; }; - auto onImportFinished = [](std::string const & catId, bool successful) + auto onImportFinished = [](std::string const & serverCatId, kml::MarkGroupId categoryId, bool successful) { - auto observer = [MWMBookmarksManager manager].catalogObservers[@(catId.c_str())]; + auto observer = [MWMBookmarksManager manager].catalogObservers[@(serverCatId.c_str())]; if (observer) { [observer onImportCompleteSuccessful:successful]; diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 6bf2d7847c..f96160bc0b 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -2117,8 +2117,18 @@ void BookmarkManager::ImportDownloadedFromCatalog(std::string const & id, std::s CreateCategories(std::move(*collection)); + kml::MarkGroupId newCategoryId = kml::kInvalidMarkGroupId; + for (auto const & group : m_categories) + { + if (id == group.second->GetServerId()) + { + newCategoryId = group.first; + break; + } + } + if (m_onCatalogImportFinished) - m_onCatalogImportFinished(id, true /* successful */); + m_onCatalogImportFinished(id, newCategoryId, true /* successful */); }); } else @@ -2127,7 +2137,7 @@ void BookmarkManager::ImportDownloadedFromCatalog(std::string const & id, std::s { m_bookmarkCatalog.UnregisterDownloadedId(id); if (m_onCatalogImportFinished) - m_onCatalogImportFinished(id, false /* successful */); + m_onCatalogImportFinished(id, kml::kInvalidMarkGroupId, false /* successful */); }); } }); diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index 8d2bf50d93..b8c672a982 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -287,6 +287,7 @@ public: platform::RemoteFile::Result const &)>; using OnCatalogImportStartedHandler = platform::SafeCallback; using OnCatalogImportFinishedHandler = platform::SafeCallback; void SetCatalogHandlers(OnCatalogDownloadStartedHandler && onCatalogDownloadStarted, OnCatalogDownloadFinishedHandler && onCatalogDownloadFinished, diff --git a/map/framework.cpp b/map/framework.cpp index 70579426bb..f69772ff9c 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -994,6 +994,32 @@ void Framework::ShowTrack(Track const & track) ShowRect(rect); } +void Framework::ShowBookmarkCategory(kml::MarkGroupId categoryId) +{ + auto const & bm = GetBookmarkManager(); + if (bm.IsCategoryEmpty(categoryId)) + return; + + m2::RectD rect; + for (auto const id : bm.GetUserMarkIds(categoryId)) + { + auto const bookmark = bm.GetBookmark(id); + rect.Add(bookmark->GetPivot()); + } + for (auto const id : bm.GetTrackIds(categoryId)) + { + auto const track = bm.GetTrack(id); + rect.Add(track->GetLimitRect()); + } + if (!rect.IsValid()) + return; + + double const kPaddingScale = 1.2; + StopLocationFollow(); + rect.Scale(kPaddingScale); + ShowRect(rect); +} + void Framework::ShowFeatureByMercator(m2::PointD const & pt) { StopLocationFollow(); diff --git a/map/framework.hpp b/map/framework.hpp index 149366e8ec..a0f61995e0 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -331,6 +331,7 @@ public: void ShowBookmark(Bookmark const * bookmark); void ShowTrack(Track const & track); void ShowFeatureByMercator(m2::PointD const & pt); + void ShowBookmarkCategory(kml::MarkGroupId categoryId); void AddBookmarksFile(string const & filePath, bool isTemporaryFile);