From 5c5c04533351e104606fd16c378487fefc2bcc1c Mon Sep 17 00:00:00 2001 From: Alexander Boriskov Date: Thu, 9 Jul 2020 13:42:22 +0300 Subject: [PATCH] [iOS] UI for trial subscriptions https://jira.mail.ru/browse/MAPSME-14170 --- iphone/Maps/Maps.xcodeproj/project.pbxproj | 3 +- .../AllPass/AllPassSubscriptionBuilder.swift | 0 .../AllPassSubscriptionViewController.swift | 39 +++++-- .../AllPassSubscriptionViewController.xib | 107 +++++++++++------- .../City/CitySubscriptionBuilder.swift | 0 .../City/CitySubscriptionViewController.swift | 4 + .../City/CitySubscriptionViewController.xib | 2 +- .../BookmarksSubscriptionButton.swift | 0 .../Subscription/SubscriptionInteractor.swift | 15 +++ .../Subscription/SubscriptionPresenter.swift | 46 ++++++-- .../UI}/Subscription/SubscriptionRouter.swift | 0 .../SubscriptionViewBuilder.swift | 0 .../SubscriptionViewProtocol.swift | 4 +- 13 files changed, 156 insertions(+), 64 deletions(-) rename {xcode/geometry => iphone/Maps/UI}/Subscription/AllPass/AllPassSubscriptionBuilder.swift (100%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/AllPass/AllPassSubscriptionViewController.swift (83%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/AllPass/AllPassSubscriptionViewController.xib (88%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/City/CitySubscriptionBuilder.swift (100%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/City/CitySubscriptionViewController.swift (97%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/City/CitySubscriptionViewController.xib (99%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/Components/BookmarksSubscriptionButton.swift (100%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/SubscriptionInteractor.swift (83%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/SubscriptionPresenter.swift (69%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/SubscriptionRouter.swift (100%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/SubscriptionViewBuilder.swift (100%) rename {xcode/geometry => iphone/Maps/UI}/Subscription/SubscriptionViewProtocol.swift (90%) diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index e267275599..bfb89e2d32 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -3887,8 +3887,7 @@ 99EBF72424B4B53800FE1F1F /* AllPass */, 99BFEF0824B48D8600A65F5B /* City */, ); - name = Subscription; - path = ../../../xcode/geometry/Subscription; + path = Subscription; sourceTree = ""; }; 99BFEF0824B48D8600A65F5B /* City */ = { diff --git a/xcode/geometry/Subscription/AllPass/AllPassSubscriptionBuilder.swift b/iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionBuilder.swift similarity index 100% rename from xcode/geometry/Subscription/AllPass/AllPassSubscriptionBuilder.swift rename to iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionBuilder.swift diff --git a/xcode/geometry/Subscription/AllPass/AllPassSubscriptionViewController.swift b/iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionViewController.swift similarity index 83% rename from xcode/geometry/Subscription/AllPass/AllPassSubscriptionViewController.swift rename to iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionViewController.swift index e11eeb9e0c..7dd3586b07 100644 --- a/xcode/geometry/Subscription/AllPass/AllPassSubscriptionViewController.swift +++ b/iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionViewController.swift @@ -5,11 +5,15 @@ class AllPassSubscriptionViewController: UIViewController { @IBOutlet private var annualSubscriptionButton: BookmarksSubscriptionButton! @IBOutlet private var annualDiscountLabel: InsetsLabel! @IBOutlet private var monthlySubscriptionButton: BookmarksSubscriptionButton! + @IBOutlet private var trialSubscriptionButton: UIButton! + @IBOutlet private var trialSubscriptionLabel: UILabel! @IBOutlet private var descriptionPageScrollView: UIScrollView! @IBOutlet private var contentView: UIView! @IBOutlet private var statusBarBackgroundView: UIVisualEffectView! @IBOutlet private var descriptionSubtitles: [UILabel]! @IBOutlet private var loadingView: UIView! + @IBOutlet private var stackTopOffset: NSLayoutConstraint! + @IBOutlet private var loadingStateActivityIndicator: UIActivityIndicatorView! override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return [.portrait] } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } @@ -29,6 +33,8 @@ class AllPassSubscriptionViewController: UIViewController { private let animationDuration: TimeInterval = 0.75 private let animationBackDuration: TimeInterval = 0.3 private let statusBarBackVisibleThreshold: CGFloat = 60 + private let stackTopOffsetSubscriptions: CGFloat = 60 + private let stackTopOffsetTrial: CGFloat = 48 override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) @@ -86,6 +92,14 @@ class AllPassSubscriptionViewController: UIViewController { @IBAction func onPrivacy(_ sender: UIButton) { presenter.onPrivacyPressed() } + + @IBAction func onRestore(sender: UIButton) { + presenter.restore(anchor: sender) + } + + @IBAction func onTrial(sender: UIButton) { + presenter.trial(anchor: sender) + } } extension AllPassSubscriptionViewController: SubscriptionViewProtocol { @@ -99,16 +113,20 @@ extension AllPassSubscriptionViewController: SubscriptionViewProtocol { } func setModel(_ model: SubscriptionViewModel) { + annualSubscriptionButton.isHidden = true + monthlySubscriptionButton.isHidden = true + trialSubscriptionButton.isHidden = true + trialSubscriptionLabel.isHidden = true + annualDiscountLabel.isHidden = true + loadingStateActivityIndicator.isHidden = true switch model { case .loading: - annualSubscriptionButton.config(title: L("annual_subscription_title"), - price: "...", - enabled: false) - monthlySubscriptionButton.config(title: L("montly_subscription_title"), - price: "...", - enabled: false) - annualDiscountLabel.isHidden = true + loadingStateActivityIndicator.isHidden = false + stackTopOffset.constant = stackTopOffsetSubscriptions case let .subsctiption(subscriptionData): + annualSubscriptionButton.isHidden = false + monthlySubscriptionButton.isHidden = false + stackTopOffset.constant = stackTopOffsetSubscriptions for data in subscriptionData { if data.period == .month { monthlySubscriptionButton.config(title: data.title, @@ -123,8 +141,11 @@ extension AllPassSubscriptionViewController: SubscriptionViewProtocol { annualDiscountLabel.text = data.discount } } - case .trial: - assertionFailure() + case let .trial(trialData): + trialSubscriptionButton.isHidden = false + trialSubscriptionLabel.isHidden = false + stackTopOffset.constant = stackTopOffsetTrial + trialSubscriptionLabel.text = String(format: L("guides_trial_message"), trialData.price) } } } diff --git a/xcode/geometry/Subscription/AllPass/AllPassSubscriptionViewController.xib b/iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionViewController.xib similarity index 88% rename from xcode/geometry/Subscription/AllPass/AllPassSubscriptionViewController.xib rename to iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionViewController.xib index c6cc708ee8..ec68ce85df 100644 --- a/xcode/geometry/Subscription/AllPass/AllPassSubscriptionViewController.xib +++ b/iphone/Maps/UI/Subscription/AllPass/AllPassSubscriptionViewController.xib @@ -15,9 +15,13 @@ + + + + @@ -53,7 +57,7 @@ - + @@ -233,10 +237,16 @@ - + + + + + + + + + + - - - - - - - -