From 503b8c6ac6e76de0cd62ea031fe2e49d260817b0 Mon Sep 17 00:00:00 2001 From: "o.bolovintseva" Date: Thu, 25 Oct 2018 12:13:51 +0300 Subject: [PATCH] [ios] Sharing main screen --- .../BMCView/BMCViewController.swift | 35 +-- .../Sharing/BookmarksSharingFlow.storyboard | 201 ++++++++++++++++++ .../BookmarksSharingViewController.swift | 76 +++++++ .../Categories/Sharing/UploadActionCell.swift | 14 ++ .../UIViewController+Authorization.swift | 14 ++ .../Maps/Core/Framework/MWMFrameworkHelper.h | 2 + .../Maps/Core/Framework/MWMFrameworkHelper.mm | 29 +++ iphone/Maps/Core/Storage/MWMStorage.mm | 37 +--- .../Images.xcassets/Sharing/Contents.json | 6 + .../ic24PxGlobe.imageset/Contents.json | 15 ++ .../ic24PxGlobe.imageset/ic24PxGlobe.pdf | Bin 0 -> 7619 bytes .../Sharing/ic24PxLink.imageset/Contents.json | 15 ++ .../ic24PxLink.imageset/ic24PxLink.pdf | Bin 0 -> 6625 bytes iphone/Maps/Maps.xcodeproj/project.pbxproj | 24 +++ .../Migration/MWMMigrationViewController.mm | 10 +- iphone/Maps/UI/Storyboard/Storyboard.swift | 2 + 16 files changed, 409 insertions(+), 71 deletions(-) create mode 100644 iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingFlow.storyboard create mode 100644 iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift create mode 100644 iphone/Maps/Bookmarks/Categories/Sharing/UploadActionCell.swift create mode 100644 iphone/Maps/Categories/UIViewController+Authorization.swift create mode 100644 iphone/Maps/Images.xcassets/Sharing/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/ic24PxGlobe.pdf create mode 100644 iphone/Maps/Images.xcassets/Sharing/ic24PxLink.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Sharing/ic24PxLink.imageset/ic24PxLink.pdf diff --git a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift index 6f65e55dbf..98765d093f 100644 --- a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift @@ -73,25 +73,11 @@ final class BMCViewController: MWMViewController { } private func shareCategory(category: BMCCategory, anchor: UIView) { - let shareOnSuccess = { [viewModel] (url: URL) in - typealias AVC = MWMActivityViewController - let message = L("share_bookmarks_email_body") - let shareController = AVC.share(for: url, message: message) { [viewModel] _, _, _, _ in - viewModel?.finishShareCategory() - } - shareController!.present(inParentViewController: self, anchorView: anchor) - } - - let showAlertOnError = { (title: String, text: String) in - MWMAlertViewController.activeAlert().presentInfoAlert(title, text: text) - } + let storyboard = UIStoryboard.instance(.sharing) + let shareController = storyboard.instantiateInitialViewController() as! BookmarksSharingViewController - viewModel.shareCategory(category: category) { (status: BMCShareCategoryStatus) in - switch status { - case let .success(url): shareOnSuccess(url) - case let .error(title, text): showAlertOnError(title, text) - } - } + MapViewController.topViewController().navigationController?.pushViewController(shareController, + animated: true) } private func openCategory(category: BMCCategory) { @@ -100,19 +86,6 @@ final class BMCViewController: MWMViewController { animated: true) } - private func signup(anchor: UIView, onComplete: @escaping (Bool) -> Void) { - if MWMAuthorizationViewModel.isAuthenticated() { - onComplete(true) - } else { - let authVC = AuthorizationViewController(popoverSourceView: anchor, - sourceComponent: .bookmarks, - permittedArrowDirections: .any, - successHandler: { _ in onComplete(true) }, - errorHandler: { _ in onComplete(false) }) - present(authVC, animated: true, completion: nil) - } - } - private func editCategory(category: BMCCategory, anchor: UIView) { let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) if let ppc = actionSheet.popoverPresentationController { diff --git a/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingFlow.storyboard b/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingFlow.storyboard new file mode 100644 index 0000000000..7db96f3765 --- /dev/null +++ b/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingFlow.storyboard @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift b/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift new file mode 100644 index 0000000000..77d0588fa4 --- /dev/null +++ b/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift @@ -0,0 +1,76 @@ +import SafariServices + +final class BookmarksSharingViewController: MWMTableViewController { + typealias ViewModel = MWMAuthorizationViewModel + + @IBOutlet weak var uploadAndPublishCell: UploadActionCell! + @IBOutlet weak var getDirectLinkCell: UploadActionCell! + + @IBOutlet weak var uploadAndPublishDescLabel: UILabel! { + didSet { + uploadAndPublishDescLabel.text = L("upload_and_publish_desc") + } + } + + @IBOutlet private weak var licenseAgreementTextView: UITextView! { + didSet { + let htmlString = String(coreFormat: L("ugc_routes_user_agreement"), arguments: [ViewModel.termsOfUseLink()]) + let attributes: [NSAttributedStringKey : Any] = [NSAttributedStringKey.font: UIFont.regular14(), + NSAttributedStringKey.foregroundColor: UIColor.blackSecondaryText()] + licenseAgreementTextView.attributedText = NSAttributedString.string(withHtml: htmlString, + defaultAttributes: attributes) + licenseAgreementTextView.delegate = self + } + } + + @IBOutlet weak var getDirectLinkDescLabel: UILabel! { + didSet { + getDirectLinkDescLabel.text = L("get_direct_link_desc") + } + } + + override func viewDidLoad() { + super.viewDidLoad() + + title = L("sharing_options") //"Sharing options" + self.configureActionCells() + } + + func configureActionCells() { + uploadAndPublishCell.config(title: L("upload_and_publish"), image: UIImage(named: "ic24PxGlobe")!) + getDirectLinkCell.config(title: L("upload_and_get_direct_link"), image: UIImage(named: "ic24PxLink")!) + } + + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return UITableViewAutomaticDimension + } + + override func tableView(_ tableView: UITableView, + titleForHeaderInSection section: Int) -> String? { + return section == 0 ? L("public_access") : L("limited_access") + } + + override func tableView(_ tableView: UITableView, + didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + + let cell = tableView.cellForRow(at: indexPath) + if (cell == self.uploadAndPublishCell || cell == self.getDirectLinkCell) { + MWMFrameworkHelper.checkConnectionAndPerformAction { [unowned self] in + self.signup(anchor: self.view, onComplete: { success in + if (success) { + //impl uploading + } + }) + } + } + } +} + +extension BookmarksSharingViewController: UITextViewDelegate { + func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { + let safari = SFSafariViewController(url: URL) + self.present(safari, animated: true, completion: nil) + return false; + } +} diff --git a/iphone/Maps/Bookmarks/Categories/Sharing/UploadActionCell.swift b/iphone/Maps/Bookmarks/Categories/Sharing/UploadActionCell.swift new file mode 100644 index 0000000000..1c943d5e61 --- /dev/null +++ b/iphone/Maps/Bookmarks/Categories/Sharing/UploadActionCell.swift @@ -0,0 +1,14 @@ +final class UploadActionCell: MWMTableViewCell { + @IBOutlet private weak var actionImage: UIImageView! { + didSet { + actionImage.tintColor = .linkBlue() + } + } + + @IBOutlet private weak var actionTitle: UILabel! + + func config(title: String, image: UIImage) { + actionImage.image = image + actionTitle.text = title + } +} diff --git a/iphone/Maps/Categories/UIViewController+Authorization.swift b/iphone/Maps/Categories/UIViewController+Authorization.swift new file mode 100644 index 0000000000..6df2a35080 --- /dev/null +++ b/iphone/Maps/Categories/UIViewController+Authorization.swift @@ -0,0 +1,14 @@ +extension UIViewController { + func signup(anchor: UIView, onComplete: @escaping (Bool) -> Void) { + if MWMAuthorizationViewModel.isAuthenticated() { + onComplete(true) + } else { + let authVC = AuthorizationViewController(popoverSourceView: anchor, + sourceComponent: .bookmarks, + permittedArrowDirections: .any, + successHandler: { _ in onComplete(true) }, + errorHandler: { _ in onComplete(false) }) + present(authVC, animated: true, completion: nil) + } + } +} diff --git a/iphone/Maps/Core/Framework/MWMFrameworkHelper.h b/iphone/Maps/Core/Framework/MWMFrameworkHelper.h index 1066269db0..bad48cb1cf 100644 --- a/iphone/Maps/Core/Framework/MWMFrameworkHelper.h +++ b/iphone/Maps/Core/Framework/MWMFrameworkHelper.h @@ -8,6 +8,8 @@ + (MWMDayTime)daytime; ++ (void)checkConnectionAndPerformAction:(MWMVoidBlock)action; + + (void)createFramework; + (BOOL)canUseNetwork; diff --git a/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm b/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm index 8010a372ae..25e28d434b 100644 --- a/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm +++ b/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm @@ -1,6 +1,7 @@ #import "MWMFrameworkHelper.h" #import "MWMLocationManager.h" #import "MapViewController.h" +#import "MWMAlertViewController.h" #include "Framework.h" @@ -66,6 +67,34 @@ } } ++ (void)checkConnectionAndPerformAction:(MWMVoidBlock)action +{ + switch (Platform::ConnectionStatus()) + { + case Platform::EConnectionType::CONNECTION_NONE: + [[MWMAlertViewController activeAlertController] presentNoConnectionAlert]; + break; + case Platform::EConnectionType::CONNECTION_WIFI: + action(); + break; + case Platform::EConnectionType::CONNECTION_WWAN: + { + if (!GetFramework().GetDownloadingPolicy().IsCellularDownloadEnabled()) + { + [[MWMAlertViewController activeAlertController] presentNoWiFiAlertWithOkBlock:[action] { + GetFramework().GetDownloadingPolicy().EnableCellularDownload(true); + action(); + }]; + } + else + { + action(); + } + break; + } + } +} + + (void)createFramework { UNUSED_VALUE(GetFramework()); } + (BOOL)canUseNetwork diff --git a/iphone/Maps/Core/Storage/MWMStorage.mm b/iphone/Maps/Core/Storage/MWMStorage.mm index e91fc195ef..5429caa402 100644 --- a/iphone/Maps/Core/Storage/MWMStorage.mm +++ b/iphone/Maps/Core/Storage/MWMStorage.mm @@ -1,6 +1,7 @@ #import "MWMStorage.h" #import "MWMAlertViewController.h" #import "MWMRouter.h" +#import "MWMFrameworkHelper.h" #include "Framework.h" @@ -16,7 +17,7 @@ using namespace storage; { if (IsEnoughSpaceForDownload(countryId, GetFramework().GetStorage())) { - [self checkConnectionAndPerformAction:[countryId, onSuccess] { + [MWMFrameworkHelper checkConnectionAndPerformAction:[countryId, onSuccess] { GetFramework().GetStorage().DownloadNode(countryId); if (onSuccess) onSuccess(); @@ -30,7 +31,7 @@ using namespace storage; + (void)retryDownloadNode:(TCountryId const &)countryId { - [self checkConnectionAndPerformAction:[countryId] { + [MWMFrameworkHelper checkConnectionAndPerformAction:[countryId] { GetFramework().GetStorage().RetryDownloadNode(countryId); }]; } @@ -39,7 +40,7 @@ using namespace storage; { if (IsEnoughSpaceForUpdate(countryId, GetFramework().GetStorage())) { - [self checkConnectionAndPerformAction:[countryId] { + [MWMFrameworkHelper checkConnectionAndPerformAction:[countryId] { GetFramework().GetStorage().UpdateNode(countryId); }]; } @@ -92,7 +93,7 @@ using namespace storage; }); if (storage::IsEnoughSpaceForDownload(requiredSize)) { - [self checkConnectionAndPerformAction:[countryIds, onSuccess, &s] { + [MWMFrameworkHelper checkConnectionAndPerformAction:[countryIds, onSuccess, &s] { for (auto const & countryId : countryIds) s.DownloadNode(countryId); if (onSuccess) @@ -105,32 +106,4 @@ using namespace storage; } } -+ (void)checkConnectionAndPerformAction:(MWMVoidBlock)action -{ - switch (Platform::ConnectionStatus()) - { - case Platform::EConnectionType::CONNECTION_NONE: - [[MWMAlertViewController activeAlertController] presentNoConnectionAlert]; - break; - case Platform::EConnectionType::CONNECTION_WIFI: - action(); - break; - case Platform::EConnectionType::CONNECTION_WWAN: - { - if (!GetFramework().GetDownloadingPolicy().IsCellularDownloadEnabled()) - { - [[MWMAlertViewController activeAlertController] presentNoWiFiAlertWithOkBlock:[action] { - GetFramework().GetDownloadingPolicy().EnableCellularDownload(true); - action(); - }]; - } - else - { - action(); - } - break; - } - } -} - @end diff --git a/iphone/Maps/Images.xcassets/Sharing/Contents.json b/iphone/Maps/Images.xcassets/Sharing/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/iphone/Maps/Images.xcassets/Sharing/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/Contents.json b/iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/Contents.json new file mode 100644 index 0000000000..cc1646154a --- /dev/null +++ b/iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "ic24PxGlobe.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/ic24PxGlobe.pdf b/iphone/Maps/Images.xcassets/Sharing/ic24PxGlobe.imageset/ic24PxGlobe.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bf62482b726049bc54fd574cda95ef82a431b8df GIT binary patch literal 7619 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 literal 0 HcmV?d00001 diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 5e284a97d5..429411c88a 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -9,6 +9,10 @@ /* Begin PBXBuildFile section */ 1DA7908820762CEB008BDD6B /* libopen_location_code.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DA7908920762CEB008BDD6B /* libopen_location_code.a */; }; 1DFA2F6A20D3B57400FB2C66 /* UIColor+PartnerColor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1DFA2F6920D3B57400FB2C66 /* UIColor+PartnerColor.mm */; }; + 3358607E217632A2006D11F2 /* BookmarksSharingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3358607D217632A2006D11F2 /* BookmarksSharingViewController.swift */; }; + 33BCD61621777A7400CA30B4 /* BookmarksSharingFlow.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33BCD61521777A7400CA30B4 /* BookmarksSharingFlow.storyboard */; }; + 33C558E3217F6CF100299E70 /* UploadActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33C558E2217F6CF100299E70 /* UploadActionCell.swift */; }; + 33E905462180C40900868CAC /* UIViewController+Authorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33E905452180C40900868CAC /* UIViewController+Authorization.swift */; }; 3404163C1E7BDFE000E2B6D6 /* PhotosViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3404163A1E7BDFE000E2B6D6 /* PhotosViewController.swift */; }; 340416441E7BED3900E2B6D6 /* PhotosTransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340416421E7BED3900E2B6D6 /* PhotosTransitionAnimator.swift */; }; 340416481E7BF28E00E2B6D6 /* UIView+Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340416461E7BF28E00E2B6D6 /* UIView+Snapshot.swift */; }; @@ -767,6 +771,10 @@ 1DFA2F6E20D3CA9200FB2C66 /* UIColorRoutines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIColorRoutines.h; sourceTree = ""; }; 28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = main.mm; sourceTree = ""; }; + 3358607D217632A2006D11F2 /* BookmarksSharingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksSharingViewController.swift; sourceTree = ""; }; + 33BCD61521777A7400CA30B4 /* BookmarksSharingFlow.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BookmarksSharingFlow.storyboard; sourceTree = ""; }; + 33C558E2217F6CF100299E70 /* UploadActionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadActionCell.swift; sourceTree = ""; }; + 33E905452180C40900868CAC /* UIViewController+Authorization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Authorization.swift"; sourceTree = ""; }; 3404163A1E7BDFE000E2B6D6 /* PhotosViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotosViewController.swift; sourceTree = ""; }; 340416421E7BED3900E2B6D6 /* PhotosTransitionAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotosTransitionAnimator.swift; sourceTree = ""; }; 340416461E7BF28E00E2B6D6 /* UIView+Snapshot.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Snapshot.swift"; sourceTree = ""; }; @@ -2120,6 +2128,16 @@ name = Frameworks; sourceTree = ""; }; + 33C49D5C21774222000F8B6A /* Sharing */ = { + isa = PBXGroup; + children = ( + 3358607D217632A2006D11F2 /* BookmarksSharingViewController.swift */, + 33BCD61521777A7400CA30B4 /* BookmarksSharingFlow.storyboard */, + 33C558E2217F6CF100299E70 /* UploadActionCell.swift */, + ); + path = Sharing; + sourceTree = ""; + }; 340416391E7BDFB800E2B6D6 /* Photos */ = { isa = PBXGroup; children = ( @@ -2340,6 +2358,7 @@ 3404F4A02028A6C00090E401 /* Categories */ = { isa = PBXGroup; children = ( + 33C49D5C21774222000F8B6A /* Sharing */, 343D7B6D202AF4CA007D56A8 /* Actions */, 3404F48F202898CC0090E401 /* BMCModels.swift */, 343D7B6F202AF7AC007D56A8 /* BMCView */, @@ -2546,6 +2565,7 @@ 349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */, 34F7422F1E0834F400AC1FD6 /* UIViewController+Navigation.h */, 34F742301E0834F400AC1FD6 /* UIViewController+Navigation.mm */, + 33E905452180C40900868CAC /* UIViewController+Authorization.swift */, 347E03981FAC5F1D00426032 /* UIWindow+InputLanguage.swift */, 4767CDA320AAF66B00BD8166 /* NSAttributedString+HTML.swift */, ); @@ -4495,6 +4515,7 @@ 4554B6EC1E55F0EF0084017F /* drules_proto_vehicle_clear.bin in Resources */, F6E2FE761E097BA00083EBEC /* MWMOpeningHoursCell.xib in Resources */, 34AB66351FC5AA330078E451 /* RouteManagerCell.xib in Resources */, + 33BCD61621777A7400CA30B4 /* BookmarksSharingFlow.storyboard in Resources */, F6E2FE011E097BA00083EBEC /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */, F6E2FE071E097BA00083EBEC /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */, F6A806531FDAE51600D4D26F /* DiscoveryViatorCollectionHolderCell.xib in Resources */, @@ -4845,6 +4866,7 @@ 34AC8FDB1EFC07FE00E7F910 /* UILabel+NumberOfVisibleLines.swift in Sources */, 4767CD9F20AAD48A00BD8166 /* Checkmark.swift in Sources */, F6E2FD981E097BA00083EBEC /* MWMBookmarkTitleCell.m in Sources */, + 33E905462180C40900868CAC /* UIViewController+Authorization.swift in Sources */, 6741A9E81BF340DE002C974C /* MWMAPIBar.mm in Sources */, 349A13831DEC138C00C7DB60 /* MWMMobileInternetAlert.mm in Sources */, 349D1ADE1E2E325C004A2006 /* MWMBottomMenuViewController.mm in Sources */, @@ -4874,6 +4896,7 @@ 6741A9F51BF340DE002C974C /* BookmarksVC.mm in Sources */, B33D21B820E130D000BAD749 /* BookmarksTabViewController.swift in Sources */, 3404754A1E081A4600C92850 /* AppInfo.mm in Sources */, + 3358607E217632A2006D11F2 /* BookmarksSharingViewController.swift in Sources */, 34AB662F1FC5AA330078E451 /* RouteManageriPhonePresentationController.swift in Sources */, 34AB66201FC5AA330078E451 /* RouteStartButton.swift in Sources */, 34F4072C1E9E1AFF00E57AC0 /* Banner.swift in Sources */, @@ -4999,6 +5022,7 @@ 34B127EA1FBDD410008713D9 /* MWMRouterTransitStepInfo.mm in Sources */, 34926BE71EA4C2A700DCF14C /* SearchBanners.swift in Sources */, 34D3B02A1E389D05004100F9 /* MWMEditorAdditionalNameTableViewCell.mm in Sources */, + 33C558E3217F6CF100299E70 /* UploadActionCell.swift in Sources */, 347E039A1FAC5F1D00426032 /* UIWindow+InputLanguage.swift in Sources */, 340475711E081A4600C92850 /* MWMSettings.mm in Sources */, 3404165C1E7C29AE00E2B6D6 /* PhotosInteractionAnimator.swift in Sources */, diff --git a/iphone/Maps/UI/Migration/MWMMigrationViewController.mm b/iphone/Maps/UI/Migration/MWMMigrationViewController.mm index 0184944771..241a41926c 100644 --- a/iphone/Maps/UI/Migration/MWMMigrationViewController.mm +++ b/iphone/Maps/UI/Migration/MWMMigrationViewController.mm @@ -3,19 +3,13 @@ #import "MWMMapDownloaderViewController.h" #import "MWMMigrationView.h" #import "MWMMigrationViewController.h" -#import "MWMStorage.h" +#import "MWMFrameworkHelper.h" #import "Statistics.h" #include "Framework.h" using namespace storage; -@interface MWMStorage () - -+ (void)checkConnectionAndPerformAction:(MWMVoidBlock)action; - -@end - @interface MWMMigrationViewController () @end @@ -101,7 +95,7 @@ using namespace storage; [view setProgress:static_cast(progress.first) / progress.second]; }; - [MWMStorage checkConnectionAndPerformAction:^{ + [MWMFrameworkHelper checkConnectionAndPerformAction:^{ self->m_countryId = f.PreMigrate(position, onStatusChanged, onProgressChanged); if (self->m_countryId != kInvalidCountryId) [self setState:MWMMigrationViewState::Processing]; diff --git a/iphone/Maps/UI/Storyboard/Storyboard.swift b/iphone/Maps/UI/Storyboard/Storyboard.swift index 5f84db26a2..c0d2f5468e 100644 --- a/iphone/Maps/UI/Storyboard/Storyboard.swift +++ b/iphone/Maps/UI/Storyboard/Storyboard.swift @@ -9,6 +9,7 @@ enum Storyboard: Int { case searchFilters case settings case welcome + case sharing } extension UIStoryboard { @@ -21,6 +22,7 @@ extension UIStoryboard { case .searchFilters: name = "SearchFilters" case .settings: name = "Settings" case .welcome: name = "Welcome" + case .sharing: name = "BookmarksSharingFlow" } return UIStoryboard(name: name, bundle: nil) }