From 3ef36d63d254f1ecbc8d084584631f9a3c8f3f3b Mon Sep 17 00:00:00 2001 From: Aleksey Belouosv Date: Fri, 6 Sep 2019 18:32:55 +0300 Subject: [PATCH] [iOS] crown button https://jira.mail.ru/browse/MAPSME-11763 --- .../BookmarksSubscriptionViewController.swift | 6 +- ...ubscriptionGoToCatalogViewController.swift | 25 ++++ ...sSubscriptionGoToCatalogViewController.xib | 129 ++++++++++++++++++ .../MWMMapViewControlsManager.mm | 42 ++++++ .../SideButtons/MWMSideButtons.h | 1 + .../SideButtons/MWMSideButtons.mm | 4 + .../Maps/Core/Framework/MWMFrameworkHelper.h | 2 + .../Maps/Core/Framework/MWMFrameworkHelper.mm | 5 + iphone/Maps/Core/Metrics/MWMEye.h | 1 + iphone/Maps/Core/Metrics/MWMEye.mm | 5 + .../ FAB _ 48px - Blue.pdf | Bin 0 -> 13103 bytes .../Contents.json | 12 ++ iphone/Maps/Maps.xcodeproj/project.pbxproj | 8 ++ 13 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.swift create mode 100644 iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.xib create mode 100644 iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/ FAB _ 48px - Blue.pdf create mode 100644 iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/Contents.json diff --git a/iphone/Maps/Bookmarks/Catalog/BookmarksSubscriptionViewController.swift b/iphone/Maps/Bookmarks/Catalog/BookmarksSubscriptionViewController.swift index 1626422fa7..fa6d007f8b 100644 --- a/iphone/Maps/Bookmarks/Catalog/BookmarksSubscriptionViewController.swift +++ b/iphone/Maps/Bookmarks/Catalog/BookmarksSubscriptionViewController.swift @@ -1,6 +1,6 @@ import SafariServices -class BookmarksSubscriptionViewController: MWMViewController { +@objc class BookmarksSubscriptionViewController: MWMViewController { @IBOutlet private var annualView: UIView! @IBOutlet private var monthlyView: UIView! @IBOutlet private var gradientView: GradientView! @@ -15,8 +15,8 @@ class BookmarksSubscriptionViewController: MWMViewController { private var annualSubscription: ISubscription? private var selectedSubscription: ISubscription? - var onSubscribe: MWMVoidBlock? - var onCancel: MWMVoidBlock? + @objc var onSubscribe: MWMVoidBlock? + @objc var onCancel: MWMVoidBlock? override var supportedInterfaceOrientations: UIInterfaceOrientationMask { get { return [.portrait] } diff --git a/iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.swift b/iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.swift new file mode 100644 index 0000000000..e10f087e26 --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.swift @@ -0,0 +1,25 @@ +@objc class BookmarksSubscriptionGoToCatalogViewController: UIViewController { + private let transitioning = FadeTransitioning() + private let onOk: MWMVoidBlock + private let onCancel: MWMVoidBlock + + @objc init(onOk: @escaping MWMVoidBlock, onCancel: @escaping MWMVoidBlock) { + self.onOk = onOk + self.onCancel = onCancel + super.init(nibName: nil, bundle: nil) + transitioningDelegate = transitioning + modalPresentationStyle = .custom + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + @IBAction func onOk(_ sender: UIButton) { + onOk() + } + + @IBAction func onCancel(_ sender: UIButton) { + onCancel() + } +} diff --git a/iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.xib b/iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.xib new file mode 100644 index 0000000000..5724d0429a --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/Dialogs/BookmarksSubscriptionGoToCatalogViewController.xib @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm index 238ff02a9b..62b5408923 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm @@ -35,6 +35,7 @@ extern NSString * const kAlohalyticsTapEventKey; @property(nonatomic) MWMSideButtons * sideButtons; @property(nonatomic) MWMTrafficButtonViewController * trafficButton; +@property(nonatomic) UIButton * crownButton; @property(nonatomic) MWMBottomMenuViewController * menuController; @property(nonatomic) id placePageManager; @property(nonatomic) MWMNavigationDashboardManager * navigationManager; @@ -64,6 +65,13 @@ extern NSString * const kAlohalyticsTapEventKey; self.trafficButtonHidden = NO; self.isDirectionViewHidden = YES; self.menuRestoreState = MWMBottomMenuStateInactive; + if ([MWMFrameworkHelper shouldShowCrown]) { + [controller.controlsView addSubview:self.crownButton]; + self.crownButton.translatesAutoresizingMaskIntoConstraints = NO; + [NSLayoutConstraint activateConstraints: + @[[self.crownButton.leftAnchor constraintEqualToAnchor:self.trafficButton.view.leftAnchor constant:-4], + [self.crownButton.topAnchor constraintEqualToAnchor:self.sideButtons.view.topAnchor]]]; + } return self; } @@ -290,8 +298,42 @@ extern NSString * const kAlohalyticsTapEventKey; self.trafficButtonHidden = NO; } +- (void)onCrown:(UIButton *)sender { + BookmarksSubscriptionViewController *controller = [[BookmarksSubscriptionViewController alloc] init]; + controller.onSubscribe = ^{ + MapViewController *mapViewController = self.ownerController; + [mapViewController dismissViewControllerAnimated:YES completion:nil]; + BookmarksSubscriptionGoToCatalogViewController *successDialog = + [[BookmarksSubscriptionGoToCatalogViewController alloc] initOnOk:^{ + [mapViewController dismissViewControllerAnimated:YES completion:nil]; + [mapViewController openCatalogAnimated:YES utm:MWMUTMNone]; + } onCancel:^{ + [mapViewController dismissViewControllerAnimated:YES completion:nil]; + }]; + [mapViewController presentViewController:successDialog animated:YES completion:nil]; + }; + + controller.onCancel = ^{ + [self.ownerController dismissViewControllerAnimated:YES completion:nil]; + }; + + [self.ownerController presentViewController:controller animated:YES completion:^{ + self.crownButton.hidden = YES; + }]; + [MWMEye crownClicked]; +} + #pragma mark - Properties +- (UIButton *)crownButton { + if (!_crownButton) { + _crownButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_crownButton setImage:[UIImage imageNamed:@"bookmarksSubscriptionPromo"] forState:UIControlStateNormal]; + [_crownButton addTarget:self action:@selector(onCrown:) forControlEvents:UIControlEventTouchUpInside]; + } + return _crownButton; +} + - (MWMSideButtons *)sideButtons { if (!_sideButtons) diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.h b/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.h index 3e1c82ca7e..6243fdca6c 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.h @@ -6,6 +6,7 @@ @property (nonatomic) BOOL zoomHidden; @property (nonatomic) BOOL hidden; +@property (nonatomic, readonly) UIView *view; - (instancetype)init __attribute__((unavailable("init is not available"))); - (instancetype)initWithParentView:(UIView *)view; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.mm index db2acf7440..6f4f0f5c8d 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/SideButtons/MWMSideButtons.mm @@ -40,6 +40,10 @@ NSString * const kMWMSideButtonsViewNibName = @"MWMSideButtonsView"; @implementation MWMSideButtons +- (UIView *)view { + return self.sideView; +} + + (MWMSideButtons *)buttons { return [MWMMapViewControlsManager manager].sideButtons; } - (instancetype)initWithParentView:(UIView *)view { diff --git a/iphone/Maps/Core/Framework/MWMFrameworkHelper.h b/iphone/Maps/Core/Framework/MWMFrameworkHelper.h index ddc26745a5..f0d7adc4bb 100644 --- a/iphone/Maps/Core/Framework/MWMFrameworkHelper.h +++ b/iphone/Maps/Core/Framework/MWMFrameworkHelper.h @@ -36,4 +36,6 @@ NS_SWIFT_NAME(FrameworkHelper) + (void)rotateMap:(double)azimuth animated:(BOOL)isAnimated; + (void)updatePositionArrowOffset:(BOOL)useDefault offset:(int)offsetY; ++ (BOOL)shouldShowCrown; + @end diff --git a/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm b/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm index 486e9e0317..87b8aadfcd 100644 --- a/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm +++ b/iphone/Maps/Core/Framework/MWMFrameworkHelper.mm @@ -15,6 +15,7 @@ extern NSString * const kAlohalyticsTapEventKey; #include "base/sunrise_sunset.hpp" +#include "map/crown.hpp" @implementation MWMFrameworkHelper @@ -184,4 +185,8 @@ extern NSString * const kAlohalyticsTapEventKey; GetFramework().UpdateMyPositionRoutingOffset(useDefault, offsetY); } ++ (BOOL)shouldShowCrown { + return crown::NeedToShow(GetFramework().GetPurchase()); +} + @end diff --git a/iphone/Maps/Core/Metrics/MWMEye.h b/iphone/Maps/Core/Metrics/MWMEye.h index fbfac51ee1..db442b8f7f 100644 --- a/iphone/Maps/Core/Metrics/MWMEye.h +++ b/iphone/Maps/Core/Metrics/MWMEye.h @@ -35,5 +35,6 @@ typedef NS_ENUM(NSUInteger, MWMEyeDiscoveryEvent) + (void)discoveryItemClickedWithEvent:(MWMEyeDiscoveryEvent)event; + (void)transitionToBookingWithPos:(CGPoint)pos; + (void)promoAfterBookingShownWithCityId:(NSString *)cityId; ++ (void)crownClicked; @end diff --git a/iphone/Maps/Core/Metrics/MWMEye.mm b/iphone/Maps/Core/Metrics/MWMEye.mm index 0224cca9cc..eb72eb89e6 100644 --- a/iphone/Maps/Core/Metrics/MWMEye.mm +++ b/iphone/Maps/Core/Metrics/MWMEye.mm @@ -45,4 +45,9 @@ { eye::Eye::Event::PromoAfterBookingShown(cityId.UTF8String); } + ++ (void)crownClicked { + eye::Eye::Event::CrownClicked(); +} + @end diff --git a/iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/ FAB _ 48px - Blue.pdf b/iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/ FAB _ 48px - Blue.pdf new file mode 100644 index 0000000000000000000000000000000000000000..780947cdcad670a9929f2cfcf31f303cb711def8 GIT binary patch literal 13103 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/Contents.json b/iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/Contents.json new file mode 100644 index 0000000000..ef65d32571 --- /dev/null +++ b/iphone/Maps/Images.xcassets/BookmarksSubscription/bookmarksSubscriptionPromo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : " FAB _ 48px - Blue.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 2d8e9684e5..037e29da7d 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -375,6 +375,8 @@ 4719A647219CBD7F009F9AA7 /* IBillingPendingTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4719A646219CBD7F009F9AA7 /* IBillingPendingTransaction.swift */; }; 4719A64E21A30C3B009F9AA7 /* PaidRouteStatistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4719A64D21A30C3B009F9AA7 /* PaidRouteStatistics.swift */; }; 471BBD942130390F00EB17C9 /* TutorialViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471BBD932130390F00EB17C9 /* TutorialViewController.swift */; }; + 471C448C2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471C448A2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.swift */; }; + 471C448D2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 471C448B2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.xib */; }; 4726254921C27D4B00C7BAAD /* PlacePageDescriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4726254821C27D4B00C7BAAD /* PlacePageDescriptionViewController.swift */; }; 47289E5A2212DFFF002ABFC0 /* EditOnWebAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47289E582212DFFF002ABFC0 /* EditOnWebAlertViewController.swift */; }; 47289E5B2212DFFF002ABFC0 /* EditOnWebAlertViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 47289E592212DFFF002ABFC0 /* EditOnWebAlertViewController.xib */; }; @@ -1465,6 +1467,8 @@ 4719A646219CBD7F009F9AA7 /* IBillingPendingTransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IBillingPendingTransaction.swift; sourceTree = ""; }; 4719A64D21A30C3B009F9AA7 /* PaidRouteStatistics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaidRouteStatistics.swift; sourceTree = ""; }; 471BBD932130390F00EB17C9 /* TutorialViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TutorialViewController.swift; sourceTree = ""; }; + 471C448A2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksSubscriptionGoToCatalogViewController.swift; sourceTree = ""; }; + 471C448B2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BookmarksSubscriptionGoToCatalogViewController.xib; sourceTree = ""; }; 4726254821C27D4B00C7BAAD /* PlacePageDescriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlacePageDescriptionViewController.swift; sourceTree = ""; }; 47289E582212DFFF002ABFC0 /* EditOnWebAlertViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditOnWebAlertViewController.swift; sourceTree = ""; }; 47289E592212DFFF002ABFC0 /* EditOnWebAlertViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EditOnWebAlertViewController.xib; sourceTree = ""; }; @@ -3616,6 +3620,8 @@ 47C8789822DF622400A772DA /* BookmarksSubscriptionFailViewController.xib */, 47C8789B22DF662700A772DA /* BookmarksSubscriptionExpiredViewController.swift */, 47C8789C22DF662700A772DA /* BookmarksSubscriptionExpiredViewController.xib */, + 471C448A2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.swift */, + 471C448B2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.xib */, ); path = Dialogs; sourceTree = ""; @@ -4992,6 +4998,7 @@ F6E2FD6E1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.xib in Resources */, 345E8F551F839E6C00A826CC /* GoogleService-Info.plist in Resources */, 3477528B1F725002000D46A3 /* UGCAddReviewRatingCell.xib in Resources */, + 471C448D2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.xib in Resources */, F6E2FD741E097BA00083EBEC /* MWMMapDownloaderTableViewCell.xib in Resources */, 349A13851DEC138C00C7DB60 /* MWMMobileInternetAlert.xib in Resources */, 34D3B04B1E389D05004100F9 /* MWMNoteCell.xib in Resources */, @@ -5674,6 +5681,7 @@ 34B924431DC8A29C0008D971 /* MWMMailViewController.mm in Sources */, 340475651E081A4600C92850 /* MWMRouter.mm in Sources */, 47E3C72F2111F472008B3B27 /* CoverVerticalModalTransitioning.swift in Sources */, + 471C448C2322A7C800C307EC /* BookmarksSubscriptionGoToCatalogViewController.swift in Sources */, 346DB83D1E5C4F6700E3123E /* GalleryModel.swift in Sources */, 4710366522D3764600585272 /* BookmarksSubscriptionCellViewController.swift in Sources */, 34E776101F14B165003040B3 /* VisibleArea.swift in Sources */,