diff --git a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.h b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.h
index 04d52ae9c2..4a68043f91 100644
--- a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.h
+++ b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.h
@@ -15,7 +15,9 @@ NS_SWIFT_NAME(BookmarkGroup)
@property(nonatomic, readonly) MWMMarkGroupID categoryId;
@property(nonatomic, copy) NSString *title;
+@property(nonatomic, readonly, nullable) NSURL *photoUrl;
@property(nonatomic, readonly) NSString *author;
+@property(nonatomic, readonly, nullable) NSString *authorIconPath;
@property(nonatomic, readonly) NSString *annotation;
@property(nonatomic, copy) NSString *detailedAnnotation;
@property(nonatomic, readonly) NSInteger bookmarksCount;
diff --git a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.m b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.m
index d3b61a2cb2..313902dc37 100644
--- a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.m
+++ b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarkGroup.m
@@ -24,6 +24,10 @@
return [self.manager getCategoryName:self.categoryId];
}
+- (NSURL *)photoUrl {
+ return [self.manager getCategoryPhotoUrl:self.categoryId];
+}
+
- (void)setTitle:(NSString *)title {
[self.manager setCategory:self.categoryId name:title];
}
@@ -32,6 +36,15 @@
return [self.manager getCategoryAuthorName:self.categoryId];
}
+- (NSString *)authorIconPath {
+ // TODO: (boriskov) fixme
+ return nil;
+}
+
+- (NSString *)annotation {
+ return [self.manager getCategoryAnnotation:self.categoryId];
+}
+
- (NSString *)detailedAnnotation {
return [self.manager getCategoryDescription:self.categoryId];
}
diff --git a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h
index f3f1ea7135..ff639f3734 100644
--- a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h
+++ b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h
@@ -35,8 +35,10 @@ NS_SWIFT_NAME(BookmarksManager)
- (uint64_t)getCategoryMarksCount:(MWMMarkGroupID)groupId;
- (uint64_t)getCategoryTracksCount:(MWMMarkGroupID)groupId;
- (MWMBookmarkGroupAccessStatus)getCategoryAccessStatus:(MWMMarkGroupID)groupId;
+- (NSString *)getCategoryAnnotation:(MWMMarkGroupID)groupId;
- (NSString *)getCategoryDescription:(MWMMarkGroupID)groupId;
- (NSString *)getCategoryAuthorName:(MWMMarkGroupID)groupId;
+- (NSURL *)getCategoryPhotoUrl:(MWMMarkGroupID)groupId;
- (MWMMarkGroupID)createCategoryWithName:(NSString *)name;
- (void)setCategory:(MWMMarkGroupID)groupId name:(NSString *)name;
diff --git a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm
index 1768ff3c8b..07807cb09f 100644
--- a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm
+++ b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm
@@ -350,6 +350,10 @@ static kml::PredefinedColor convertBookmarkColor(MWMBookmarkColor bookmarkColor)
}
}
+- (NSString *)getCategoryAnnotation:(MWMMarkGroupID)groupId {
+ return @(kml::GetDefaultStr(self.bm.GetCategoryData(groupId).m_annotation).c_str());
+}
+
- (NSString *)getCategoryDescription:(MWMMarkGroupID)groupId
{
return @(kml::GetDefaultStr(self.bm.GetCategoryData(groupId).m_description).c_str());
@@ -360,6 +364,10 @@ static kml::PredefinedColor convertBookmarkColor(MWMBookmarkColor bookmarkColor)
return @(self.bm.GetCategoryData(groupId).m_authorName.c_str());
}
+- (NSURL *)getCategoryPhotoUrl:(MWMMarkGroupID)groupId {
+ return [[NSURL alloc] initWithString:@(self.bm.GetCategoryData(groupId).m_imageUrl.c_str())];
+}
+
- (MWMMarkGroupID)createCategoryWithName:(NSString *)name
{
auto groupId = self.bm.CreateBookmarkCategory(name.UTF8String);
diff --git a/iphone/Maps/Bookmarks/GuideDescription/GuideDescriptionViewController.swift b/iphone/Maps/Bookmarks/GuideDescription/GuideDescriptionViewController.swift
new file mode 100644
index 0000000000..a80afefdd7
--- /dev/null
+++ b/iphone/Maps/Bookmarks/GuideDescription/GuideDescriptionViewController.swift
@@ -0,0 +1,50 @@
+class GuideDescriptionViewController: MWMViewController {
+ @IBOutlet private var photo: UIImageView!
+ @IBOutlet private var photoViewContainer: UIView!
+ @IBOutlet private var photoActivityIndicator: UIActivityIndicatorView!
+ @IBOutlet private var titleLabel: UILabel!
+ @IBOutlet private var subtitleLabel: UILabel!
+ @IBOutlet private var providerIcon: UIImageView!
+ @IBOutlet private var providerLabel: UILabel!
+ @IBOutlet private var descriptionText: UITextView!
+
+ private let category: BookmarkGroup
+
+ init(category: BookmarkGroup) {
+ self.category = category
+ super.init(nibName: nil, bundle: nil)
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ title = category.title
+ titleLabel.text = category.title
+ providerLabel.text = category.author
+ subtitleLabel.attributedText = NSMutableAttributedString(htmlString: category.annotation, baseFont: UIFont.regular16())
+ descriptionText.attributedText = NSMutableAttributedString(htmlString: category.detailedAnnotation, baseFont: UIFont.regular16())
+
+ if FrameworkHelper.isNetworkConnected(), let photoUrl = category.photoUrl {
+ photo.wi_setImage(with: photoUrl, transitionDuration: 0) { [weak self] _, error in
+ if error != nil {
+ self?.photoViewContainer.isHidden = true
+ }
+ self?.photoActivityIndicator.stopAnimating()
+ }
+ } else {
+ photoViewContainer.isHidden = true
+ photoActivityIndicator.stopAnimating()
+ }
+
+ if let authorIconPath = category.authorIconPath,
+ let authorImage = UIImage(contentsOfFile: authorIconPath) {
+ providerIcon.image = authorImage
+ } else {
+ providerIcon.isHidden = true
+ }
+ }
+}
diff --git a/iphone/Maps/Bookmarks/GuideDescription/GuideDescriptionViewController.xib b/iphone/Maps/Bookmarks/GuideDescription/GuideDescriptionViewController.xib
new file mode 100644
index 0000000000..77cf07c262
--- /dev/null
+++ b/iphone/Maps/Bookmarks/GuideDescription/GuideDescriptionViewController.xib
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj
index afb4adc6ad..c4edf6b11e 100644
--- a/iphone/Maps/Maps.xcodeproj/project.pbxproj
+++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj
@@ -553,6 +553,8 @@
9917D17D2396793A00A7E06E /* PaidRoutesSubscriptionCampaign.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9917D17C2396793A00A7E06E /* PaidRoutesSubscriptionCampaign.swift */; };
9917D17F2397B1D600A7E06E /* IPadModalPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9917D17E2397B1D600A7E06E /* IPadModalPresentationController.swift */; };
991A726C250F666D0075348C /* GuideSharingNameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991A726B250F666D0075348C /* GuideSharingNameViewController.swift */; };
+ 991A7270250F6C4A0075348C /* GuideDescriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991A726E250F6C4A0075348C /* GuideDescriptionViewController.swift */; };
+ 991A7271250F6C4A0075348C /* GuideDescriptionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 991A726F250F6C4A0075348C /* GuideDescriptionViewController.xib */; };
991CE2BF2371D349009EB02A /* ABTestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991CE2BA2371D349009EB02A /* ABTestManager.swift */; };
991CE2C02371D349009EB02A /* IABTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991CE2BB2371D349009EB02A /* IABTest.swift */; };
991CE2C22371D349009EB02A /* PromoDiscoveryCampaign.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991CE2BE2371D349009EB02A /* PromoDiscoveryCampaign.swift */; };
@@ -1656,6 +1658,8 @@
9917D17C2396793A00A7E06E /* PaidRoutesSubscriptionCampaign.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaidRoutesSubscriptionCampaign.swift; sourceTree = ""; };
9917D17E2397B1D600A7E06E /* IPadModalPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPadModalPresentationController.swift; sourceTree = ""; };
991A726B250F666D0075348C /* GuideSharingNameViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GuideSharingNameViewController.swift; sourceTree = ""; };
+ 991A726E250F6C4A0075348C /* GuideDescriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideDescriptionViewController.swift; sourceTree = ""; };
+ 991A726F250F6C4A0075348C /* GuideDescriptionViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuideDescriptionViewController.xib; sourceTree = ""; };
991CE2BA2371D349009EB02A /* ABTestManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ABTestManager.swift; sourceTree = ""; };
991CE2BB2371D349009EB02A /* IABTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IABTest.swift; sourceTree = ""; };
991CE2BE2371D349009EB02A /* PromoDiscoveryCampaign.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromoDiscoveryCampaign.swift; sourceTree = ""; };
@@ -3658,6 +3662,15 @@
path = TabBar;
sourceTree = "";
};
+ 991A726D250F6C320075348C /* GuideDescription */ = {
+ isa = PBXGroup;
+ children = (
+ 991A726E250F6C4A0075348C /* GuideDescriptionViewController.swift */,
+ 991A726F250F6C4A0075348C /* GuideDescriptionViewController.xib */,
+ );
+ path = GuideDescription;
+ sourceTree = "";
+ };
991CE2B92371D349009EB02A /* ABTests */ = {
isa = PBXGroup;
children = (
@@ -5007,6 +5020,7 @@
FA36B8011540388B004560CC /* Bookmarks */ = {
isa = PBXGroup;
children = (
+ 991A726D250F6C320075348C /* GuideDescription */,
B32FE73D20D283D600EF7446 /* Catalog */,
FA36B80515403A4F004560CC /* BookmarksVC.h */,
FA36B80615403A4F004560CC /* BookmarksVC.mm */,
@@ -5296,6 +5310,7 @@
4738A8E9239FC526007C0F43 /* AdBannerView.xib in Resources */,
344532511F714FD70059FBCC /* UGCAddReviewController.xib in Resources */,
3490D2E31CE9DD2500D0B838 /* MWMSideButtonsView.xib in Resources */,
+ 991A7271250F6C4A0075348C /* GuideDescriptionViewController.xib in Resources */,
346DB82B1E5C4F6700E3123E /* GalleryCell.xib in Resources */,
F6E2FE2E1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.xib in Resources */,
47A13CAB24BE881000027D4F /* DatePickerViewController.xib in Resources */,
@@ -5701,6 +5716,7 @@
340475531E081A4600C92850 /* MWMCustomFacebookEvents.mm in Sources */,
349D1CE41E3F836900A878FD /* UIViewController+Hierarchy.swift in Sources */,
CDB4D4E1222D70DF00104869 /* CarPlayMapViewController.swift in Sources */,
+ 991A7270250F6C4A0075348C /* GuideDescriptionViewController.swift in Sources */,
471AB98923AA8A3500F56D49 /* IDownloaderDataSource.swift in Sources */,
F692F3831EA0FAF5001E82EB /* MWMAutoupdateController.mm in Sources */,
34BF0CC71C31304A00D097EB /* MWMAuthorizationCommon.mm in Sources */,