diff --git a/iphone/Maps/Bookmarks/BookmarksTabViewController.swift b/iphone/Maps/Bookmarks/BookmarksTabViewController.swift
new file mode 100644
index 0000000000..86547085c9
--- /dev/null
+++ b/iphone/Maps/Bookmarks/BookmarksTabViewController.swift
@@ -0,0 +1,34 @@
+@objc(MWMBookmarksTabViewController)
+class BookmarksTabViewController: TabViewController {
+ private static let selectedIndexKey = "BookmarksTabViewController_selectedIndexKey"
+ private var selectedIndex: Int {
+ get {
+ return UserDefaults.standard.integer(forKey: BookmarksTabViewController.selectedIndexKey)
+ }
+ set {
+ UserDefaults.standard.set(newValue, forKey: BookmarksTabViewController.selectedIndexKey)
+ }
+ }
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ let bookmarks = BMCViewController()
+ let catalog = DownloadedBookmarksViewController()
+ bookmarks.title = L("bookmarks_page_my")
+ catalog.title = L("bookmarks_page_downloaded")
+ viewControllers = [bookmarks, catalog]
+
+ title = L("bookmarks");
+ tabView.barTintColor = .primary()
+ tabView.tintColor = .white()
+ tabView.headerTextAttributes = [.foregroundColor: UIColor.whitePrimaryText(),
+ .font: UIFont.medium14()]
+ tabView.selectedIndex = selectedIndex
+ }
+
+ override func viewDidDisappear(_ animated: Bool) {
+ super.viewDidDisappear(animated)
+ selectedIndex = tabView.selectedIndex
+ }
+}
diff --git a/iphone/Maps/Bookmarks/Catalog/CatalogWebViewController.swift b/iphone/Maps/Bookmarks/Catalog/CatalogWebViewController.swift
index be73ad5c41..d30cc7bad8 100644
--- a/iphone/Maps/Bookmarks/Catalog/CatalogWebViewController.swift
+++ b/iphone/Maps/Bookmarks/Catalog/CatalogWebViewController.swift
@@ -86,6 +86,16 @@ class CatalogWebViewController: WebViewController {
}
})
+ if MWMBookmarksManager.isCategoryDownloading(id) {
+ //TODO: add alert
+ return
+ }
+
+ if MWMBookmarksManager.hasCategoryDownloaded(id) {
+ //TODO: add alert
+ return
+ }
+
MWMBookmarksManager.downloadItem(withId: id, name: name, progress: { (progress) in
self.updateProgress()
}) { (error) in
@@ -112,8 +122,8 @@ class CatalogWebViewController: WebViewController {
} else {
Toast.toast(withText: L("bookmarks_webview_success_toast")).show()
}
+ self.updateProgress()
}
- self.updateProgress()
}
private func showDiskError() {
@@ -134,7 +144,8 @@ class CatalogWebViewController: WebViewController {
}
private func showImportError() {
- // TODO: add import error alert
+ MWMAlertViewController.activeAlert().presentInfoAlert(L("title_error_downloading_bookmarks"),
+ text: L("subtitle_error_downloading_bookmarks"))
}
private func updateProgress() {
diff --git a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift
index f36c9051cf..fe36f71260 100644
--- a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift
+++ b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift
@@ -1,16 +1,14 @@
-class DownloadedBookmarksViewController: MWMTableViewController {
+class DownloadedBookmarksViewController: MWMViewController {
- @IBOutlet var topView: UIView!
@IBOutlet var bottomView: UIView!
-
+ @IBOutlet weak var noDataView: UIView!
+ @IBOutlet weak var tableView: UITableView!
+
let dataSource = DownloadedBookmarksDataSource()
override func viewDidLoad() {
super.viewDidLoad()
- if dataSource.categoriesCount == 0 {
- tableView.tableHeaderView = topView
- }
tableView.tableFooterView = bottomView
tableView.registerNib(cell: CatalogCategoryCell.self)
tableView.registerNibForHeaderFooterView(BMCCategoriesHeader.self)
@@ -20,43 +18,10 @@ class DownloadedBookmarksViewController: MWMTableViewController {
super.viewWillAppear(animated)
dataSource.reload()
+ noDataView.isHidden = dataSource.categoriesCount > 0
tableView.reloadData()
}
- override func numberOfSections(in tableView: UITableView) -> Int {
- return dataSource.categoriesCount > 0 ? 1 : 0
- }
-
- override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return dataSource.categoriesCount
- }
-
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(cell: CatalogCategoryCell.self, indexPath: indexPath)
- cell.update(with: dataSource.category(at: indexPath.row), delegate: self)
- return cell
- }
-
- override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
- return 48
- }
-
- override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
- let headerView = tableView.dequeueReusableHeaderFooterView(BMCCategoriesHeader.self)
- headerView.isShowAll = !dataSource.allCategoriesVisible
- headerView.delegate = self
- return headerView
- }
-
- override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- tableView.deselectRow(at: indexPath, animated: true)
- let category = dataSource.category(at: indexPath.row)
- if let bmViewController = BookmarksVC(category: category.categoryId) {
- MapViewController.topViewController().navigationController?.pushViewController(bmViewController,
- animated: true)
- }
- }
-
@IBAction func onDownloadBookmarks(_ sender: Any) {
if MWMPlatform.networkConnectionType() == .none {
MWMAlertViewController.activeAlert().presentNoConnectionAlert();
@@ -85,12 +50,51 @@ class DownloadedBookmarksViewController: MWMTableViewController {
}
private func deleteCategory(at index: Int) {
- self.dataSource.deleteCategory(at: index)
- if self.dataSource.categoriesCount > 0 {
- self.tableView.deleteRows(at: [IndexPath(row: index, section: 0)], with: .automatic)
+ dataSource.deleteCategory(at: index)
+ if dataSource.categoriesCount > 0 {
+ tableView.deleteRows(at: [IndexPath(row: index, section: 0)], with: .automatic)
} else {
- self.tableView.tableHeaderView = self.topView
- self.tableView.reloadData()
+ noDataView.isHidden = false
+ tableView.reloadData()
+ }
+ }
+}
+
+extension DownloadedBookmarksViewController: UITableViewDataSource {
+ func numberOfSections(in tableView: UITableView) -> Int {
+ return dataSource.categoriesCount > 0 ? 1 : 0
+ }
+
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataSource.categoriesCount
+ }
+
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = tableView.dequeueReusableCell(cell: CatalogCategoryCell.self, indexPath: indexPath)
+ cell.update(with: dataSource.category(at: indexPath.row), delegate: self)
+ return cell
+ }
+}
+
+extension DownloadedBookmarksViewController: UITableViewDelegate {
+
+ func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+ return 48
+ }
+
+ func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+ let headerView = tableView.dequeueReusableHeaderFooterView(BMCCategoriesHeader.self)
+ headerView.isShowAll = !dataSource.allCategoriesVisible
+ headerView.delegate = self
+ return headerView
+ }
+
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ tableView.deselectRow(at: indexPath, animated: true)
+ let category = dataSource.category(at: indexPath.row)
+ if let bmViewController = BookmarksVC(category: category.categoryId) {
+ MapViewController.topViewController().navigationController?.pushViewController(bmViewController,
+ animated: true)
}
}
}
diff --git a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib
index 76ad00c819..e94cf05b87 100644
--- a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib
+++ b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib
@@ -13,27 +13,18 @@
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Press the button to download thousands of intresting places and routes created by MAPS.ME users. You will need the internet connection.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/iphone/Maps/Classes/Components/TabView/TabView.swift b/iphone/Maps/Classes/Components/TabView/TabView.swift
index fad7221209..e2e206cab0 100644
--- a/iphone/Maps/Classes/Components/TabView/TabView.swift
+++ b/iphone/Maps/Classes/Components/TabView/TabView.swift
@@ -75,7 +75,8 @@ class TabView: UIView {
private let slidingView = UIView()
private var slidingViewLeft: NSLayoutConstraint!
private var slidingViewWidth: NSLayoutConstraint!
- private var pageCount = 0
+ private lazy var pageCount = { return self.dataSource?.numberOfPages(in: self) ?? 0; }()
+ var selectedIndex = -1
weak var dataSource: TabViewDataSource?
@@ -191,17 +192,16 @@ class TabView: UIView {
slidingView.addConstraint(slidingViewWidth)
}
- override func willMove(toSuperview newSuperview: UIView?) {
- super.willMove(toSuperview: newSuperview)
- pageCount = dataSource?.numberOfPages(in: self) ?? 0
- }
-
override func layoutSubviews() {
super.layoutSubviews()
- slidingViewWidth.constant = bounds.width / CGFloat(pageCount)
+ slidingViewWidth.constant = pageCount > 0 ? bounds.width / CGFloat(pageCount) : 0
tabsLayout.invalidateLayout()
tabsContentLayout.invalidateLayout()
+ tabsContentCollectionView.layoutIfNeeded()
+ if selectedIndex >= 0 {
+ tabsContentCollectionView.scrollToItem(at: IndexPath(item: selectedIndex, section: 0), at: .left, animated: false)
+ }
}
}
@@ -237,8 +237,13 @@ extension TabView : UICollectionViewDelegateFlowLayout {
slidingViewLeft.constant = scrollOffset * bounds.width
}
+ func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
+ selectedIndex = Int(round(scrollView.contentOffset.x / scrollView.bounds.width))
+ }
+
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if (collectionView == tabsCollectionView) {
+ selectedIndex = indexPath.item
tabsContentCollectionView.scrollToItem(at: indexPath, at: .left, animated: true)
}
}
diff --git a/iphone/Maps/Classes/Components/TabView/TabViewController.swift b/iphone/Maps/Classes/Components/TabView/TabViewController.swift
index 9a3fa97308..c983eedcb2 100644
--- a/iphone/Maps/Classes/Components/TabView/TabViewController.swift
+++ b/iphone/Maps/Classes/Components/TabView/TabViewController.swift
@@ -1,8 +1,13 @@
-@objcMembers
-@objc(MWMTabViewController)
class TabViewController: MWMViewController {
- var viewControllers: [UIViewController] = []
- var selectedIndex = 0
+ var viewControllers: [UIViewController] = [] {
+ didSet {
+ viewControllers.forEach {
+ self.addChildViewController($0)
+ $0.didMove(toParentViewController: self)
+ }
+ }
+ }
+
var tabView: TabView {
get {
return view as! TabView
@@ -14,15 +19,6 @@ class TabViewController: MWMViewController {
v.dataSource = self
view = v
}
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- viewControllers.forEach { (vc) in
- self.addChildViewController(vc)
- vc.didMove(toParentViewController: self)
- }
- }
}
extension TabViewController: TabViewDataSource {
diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm
index 0693ecdb4a..51ac5d5439 100644
--- a/iphone/Maps/Classes/MapViewController.mm
+++ b/iphone/Maps/Classes/MapViewController.mm
@@ -358,19 +358,8 @@ BOOL gIsFirstMyPositionMode = YES;
- (void)openMigration { [self performSegueWithIdentifier:kMigrationSegue sender:self]; }
- (void)openBookmarks
{
- BMCViewController * bookmarks = [[BMCViewController alloc] init];
- DownloadedBookmarksViewController * catalog = [[DownloadedBookmarksViewController alloc] init];
- bookmarks.title = L(@"bookmarks_page_my");
- catalog.title = L(@"bookmarks_page_downloaded");
-
- MWMTabViewController * tvc = [[MWMTabViewController alloc] init];
- tvc.title = L(@"bookmarks");
- tvc.tabView.barTintColor = [UIColor primary];
- tvc.tabView.tintColor = [UIColor white];
- tvc.tabView.headerTextAttributes = @{NSForegroundColorAttributeName: [UIColor whitePrimaryText],
- NSFontAttributeName: [UIFont medium14]};
- tvc.viewControllers = @[bookmarks, catalog];
- [self.navigationController pushViewController:tvc animated:YES];
+ [self.navigationController pushViewController:[[MWMBookmarksTabViewController alloc] init]
+ animated:YES];
}
- (void)openMapsDownloader:(MWMMapDownloaderMode)mode
diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h
index dfc5172fc4..f34d3b10ff 100644
--- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h
+++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h
@@ -55,6 +55,8 @@
+ (BOOL)isCategoryFromCatalog:(MWMMarkGroupID)groupId;
+ (NSArray * _Nonnull)categoriesFromCatalog;
+ (NSInteger)getCatalogDownloadsCount;
++ (BOOL)isCategoryDownloading:(NSString * _Nonnull)itemId;
++ (BOOL)hasCategoryDownloaded:(NSString * _Nonnull)itemId;
- (instancetype)init __attribute__((unavailable("call +manager instead")));
- (instancetype)copy __attribute__((unavailable("call +manager instead")));
diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm
index 6521401239..f9c4484808 100644
--- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm
+++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm
@@ -540,4 +540,14 @@ NSString * const CloudErrorToString(Cloud::SynchronizationResult result)
return GetFramework().GetBookmarkManager().GetCatalog().GetDownloadingCount();
}
++ (BOOL)isCategoryDownloading:(NSString *)itemId
+{
+ return GetFramework().GetBookmarkManager().GetCatalog().IsDownloading(itemId.UTF8String);
+}
+
++ (BOOL)hasCategoryDownloaded:(NSString *)itemId
+{
+ return GetFramework().GetBookmarkManager().GetCatalog().HasDownloaded(itemId.UTF8String);
+}
+
@end
diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj
index 94292bc59c..dfbb3c24b6 100644
--- a/iphone/Maps/Maps.xcodeproj/project.pbxproj
+++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj
@@ -470,6 +470,7 @@
B33D21AD20DA515800BAD749 /* MWMCategoryInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B33D21AB20DA515800BAD749 /* MWMCategoryInfoCell.xib */; };
B33D21AF20DAF9F000BAD749 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = B33D21AE20DAF9F000BAD749 /* Toast.swift */; };
B33D21B220DBCC5E00BAD749 /* MWMCatalogObserver.mm in Sources */ = {isa = PBXBuildFile; fileRef = B33D21B120DBCC5D00BAD749 /* MWMCatalogObserver.mm */; };
+ B33D21B820E130D000BAD749 /* BookmarksTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B33D21B720E130D000BAD749 /* BookmarksTabViewController.swift */; };
B366130420D5D9BC00E7DC3E /* MWMCatalogCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = B366130320D5D9BC00E7DC3E /* MWMCatalogCategory.m */; };
B366130720D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm in Sources */ = {isa = PBXBuildFile; fileRef = B366130620D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm */; };
B366130A20D5E2E000E7DC3E /* CatalogCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B366130820D5E2E000E7DC3E /* CatalogCategoryCell.swift */; };
@@ -1399,6 +1400,7 @@
B33D21B020DBCC5D00BAD749 /* MWMCatalogObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCatalogObserver.h; sourceTree = ""; };
B33D21B120DBCC5D00BAD749 /* MWMCatalogObserver.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMCatalogObserver.mm; sourceTree = ""; };
B33D21B320DBF3EB00BAD749 /* MWMCatalogCommon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCatalogCommon.h; sourceTree = ""; };
+ B33D21B720E130D000BAD749 /* BookmarksTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTabViewController.swift; sourceTree = ""; };
B366130220D5D9BC00E7DC3E /* MWMCatalogCategory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCatalogCategory.h; sourceTree = ""; };
B366130320D5D9BC00E7DC3E /* MWMCatalogCategory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MWMCatalogCategory.m; sourceTree = ""; };
B366130520D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MWMCatalogCategory+Convenience.h"; sourceTree = ""; };
@@ -4114,6 +4116,7 @@
3404F4A02028A6C00090E401 /* Categories */,
FA054610155C465E001F4E37 /* SelectSetVC.h */,
FA054611155C465E001F4E37 /* SelectSetVC.mm */,
+ B33D21B720E130D000BAD749 /* BookmarksTabViewController.swift */,
);
path = Bookmarks;
sourceTree = "";
@@ -4721,6 +4724,7 @@
34BBD65C1F826FD30070CA50 /* AuthorizationiPhonePresentationController.swift in Sources */,
56C74C391C74A3BC00B71B9F /* MWMInputEmailValidator.mm in Sources */,
6741A9F51BF340DE002C974C /* BookmarksVC.mm in Sources */,
+ B33D21B820E130D000BAD749 /* BookmarksTabViewController.swift in Sources */,
3404754A1E081A4600C92850 /* AppInfo.mm in Sources */,
34AB662F1FC5AA330078E451 /* RouteManageriPhonePresentationController.swift in Sources */,
34AB66201FC5AA330078E451 /* RouteStartButton.swift in Sources */,