From 2906535c55e46da618fce2d0a22b312baa9510c0 Mon Sep 17 00:00:00 2001 From: Aleksey Belousov Date: Thu, 12 Mar 2020 20:22:34 +0300 Subject: [PATCH] [iOS] fix update of "edit bookmark" button in PP on add/remove bookmark https://jira.mail.ru/browse/MAPSME-13004 --- .../CoreApi/PlacePageData/PlacePageData.h | 2 ++ .../CoreApi/PlacePageData/PlacePageData.mm | 14 ++++++++++++++ .../Layouts/PlacePageCommonLayout.swift | 16 ++++++++++++++++ .../PlacePageManager/MWMPlacePageManager.mm | 2 ++ 4 files changed, 34 insertions(+) diff --git a/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.h b/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.h index 7f73a7dbfa..ebe497f7f3 100644 --- a/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.h +++ b/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.h @@ -69,6 +69,7 @@ NS_ASSUME_NONNULL_BEGIN @property(nonatomic, readonly, nullable) NSString *sponsoredMoreURL; @property(nonatomic, readonly, nullable) NSString *sponsoredReviewURL; @property(nonatomic, readonly, nullable) NSString *sponsoredDeeplink; +@property(nonatomic, copy, nullable) MWMVoidBlock onBookmarkStatusUpdate; - (instancetype)initWithLocalizationProvider:(id)localization; - (instancetype)init NS_UNAVAILABLE; @@ -76,6 +77,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)loadOnlineDataWithCompletion:(MWMVoidBlock)completion; - (void)loadUgcWithCompletion:(MWMVoidBlock)completion; - (void)loadCatalogPromoWithCompletion:(MWMVoidBlock)completion; +- (void)updateBookmarkStatus; @end diff --git a/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.mm b/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.mm index 88a17cd32d..bc95266739 100644 --- a/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.mm +++ b/iphone/CoreApi/CoreApi/PlacePageData/PlacePageData.mm @@ -241,4 +241,18 @@ static PlacePageTaxiProvider convertTaxiProvider(taxi::Provider::Type providerTy }); } +- (void)updateBookmarkStatus { + if (!GetFramework().HasPlacePageInfo()) { + return; + } + if (rawData().IsBookmark()) { + _bookmarkData = [[PlacePageBookmarkData alloc] initWithRawData:rawData()]; + } else { + _bookmarkData = nil; + } + if (self.onBookmarkStatusUpdate != nil) { + self.onBookmarkStatusUpdate(); + } +} + @end diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/Layouts/PlacePageCommonLayout.swift b/iphone/Maps/UI/PlacePage/PlacePageLayout/Layouts/PlacePageCommonLayout.swift index d7011370cf..b3466d3801 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/Layouts/PlacePageCommonLayout.swift +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/Layouts/PlacePageCommonLayout.swift @@ -193,6 +193,9 @@ class PlacePageCommonLayout: NSObject, IPlacePageLayout { } placePageData.loadOnlineData(completion: onLoadOnlineData) + placePageData.onBookmarkStatusUpdate = { [weak self] in + self?.updateBookmarkSection() + } MWMLocationManager.add(observer: self) if let lastLocation = MWMLocationManager.lastLocation() { @@ -294,6 +297,19 @@ extension PlacePageCommonLayout { previewViewController.updateBanner(banner) presenter?.updatePreviewOffset() } + + func updateBookmarkSection() { + var hidden = false + if let bookmarkData = placePageData.bookmarkData { + bookmarkViewController.bookmarkData = bookmarkData + } else { + hidden = true + } + UIView.animate(withDuration: kDefaultAnimationDuration) { [unowned self] in + self.bookmarkViewController.view.isHidden = hidden + self.presenter?.layoutIfNeeded() + } + } } // MARK: - MWMLocationObserver diff --git a/iphone/Maps/UI/PlacePage/PlacePageManager/MWMPlacePageManager.mm b/iphone/Maps/UI/PlacePage/PlacePageManager/MWMPlacePageManager.mm index 00bf3735c5..35a2380b82 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageManager/MWMPlacePageManager.mm +++ b/iphone/Maps/UI/PlacePage/PlacePageManager/MWMPlacePageManager.mm @@ -264,6 +264,7 @@ void RegisterEventIfPossible(eye::MapObject::Event::Type const type) buildInfo.m_match = place_page::BuildInfo::Match::Everything; buildInfo.m_userMarkId = bookmark->GetId(); f.UpdatePlacePageInfoForCurrentSelection(buildInfo); + [data updateBookmarkStatus]; } - (void)removeBookmark:(PlacePageData *)data @@ -278,6 +279,7 @@ void RegisterEventIfPossible(eye::MapObject::Event::Type const type) buildInfo.m_match = place_page::BuildInfo::Match::FeatureOnly; buildInfo.m_userMarkId = kml::kInvalidMarkId; f.UpdatePlacePageInfoForCurrentSelection(buildInfo); + [data updateBookmarkStatus]; } - (void)call:(PlacePageData *)data {