diff options
| author | Steffen Ernst <steffen.ernst@mullvad.net> | 2025-02-10 07:28:29 +0100 |
|---|---|---|
| committer | Steffen Ernst <steffen.ernst@mullvad.net> | 2025-02-17 09:40:33 +0100 |
| commit | 8b5fee70ee1c00e9cc37f0da78534b57c42e2869 (patch) | |
| tree | 45fbc690ddb6f1e1ef266e2aec3d8742181f9cc4 | |
| parent | 0db06acd7ddaab0faede6c8063a31b154d119daf (diff) | |
| download | mullvadvpn-8b5fee70ee1c00e9cc37f0da78534b57c42e2869.tar.xz mullvadvpn-8b5fee70ee1c00e9cc37f0da78534b57c42e2869.zip | |
Fix welcome screen to navigate further after payment
5 files changed, 40 insertions, 22 deletions
diff --git a/ios/MullvadVPN/Coordinators/AccountCoordinator.swift b/ios/MullvadVPN/Coordinators/AccountCoordinator.swift index c898950dd7..0ff99f583a 100644 --- a/ios/MullvadVPN/Coordinators/AccountCoordinator.swift +++ b/ios/MullvadVPN/Coordinators/AccountCoordinator.swift @@ -87,7 +87,7 @@ final class AccountCoordinator: Coordinator, Presentable, Presenting, @unchecked accountNumber: accountNumber, paymentAction: .purchase ) - coordinator.didFinish = { coordinator in + coordinator.didFinish = { coordinator, _ in coordinator.dismiss(animated: true) } coordinator.start() @@ -101,7 +101,7 @@ final class AccountCoordinator: Coordinator, Presentable, Presenting, @unchecked accountNumber: accountNumber, paymentAction: .restorePurchase ) - coordinator.didFinish = { coordinator in + coordinator.didFinish = { coordinator, _ in coordinator.dismiss(animated: true) } coordinator.start() diff --git a/ios/MullvadVPN/Coordinators/InAppPurchaseCoordinator.swift b/ios/MullvadVPN/Coordinators/InAppPurchaseCoordinator.swift index ac8c6413f6..76d6a10a5a 100644 --- a/ios/MullvadVPN/Coordinators/InAppPurchaseCoordinator.swift +++ b/ios/MullvadVPN/Coordinators/InAppPurchaseCoordinator.swift @@ -21,7 +21,7 @@ final class InAppPurchaseCoordinator: Coordinator, Presentable, Presenting { private let accountNumber: String private let paymentAction: PaymentAction - var didFinish: ((InAppPurchaseCoordinator) -> Void)? + var didFinish: ((InAppPurchaseCoordinator, InAppPurchaseEvent) -> Void)? var presentedViewController: UIViewController { return sheetController! @@ -33,8 +33,8 @@ final class InAppPurchaseCoordinator: Coordinator, Presentable, Presenting { self.paymentAction = paymentAction } - func dismiss() { - didFinish?(self) + func dismiss(event: InAppPurchaseEvent) { + didFinish?(self, event) } func start() { diff --git a/ios/MullvadVPN/Coordinators/OutOfTimeCoordinator.swift b/ios/MullvadVPN/Coordinators/OutOfTimeCoordinator.swift index 8930cc2242..6e36a2d369 100644 --- a/ios/MullvadVPN/Coordinators/OutOfTimeCoordinator.swift +++ b/ios/MullvadVPN/Coordinators/OutOfTimeCoordinator.swift @@ -80,7 +80,7 @@ class OutOfTimeCoordinator: Coordinator, Presenting, @preconcurrency OutOfTimeVi accountNumber: accountNumber, paymentAction: .purchase ) - coordinator.didFinish = { coordinator in + coordinator.didFinish = { coordinator, _ in coordinator.dismiss(animated: true) } coordinator.start() @@ -93,7 +93,7 @@ class OutOfTimeCoordinator: Coordinator, Presenting, @preconcurrency OutOfTimeVi accountNumber: accountNumber, paymentAction: .restorePurchase ) - coordinator.didFinish = { coordinator in + coordinator.didFinish = { coordinator, _ in coordinator.dismiss(animated: true) } coordinator.start() diff --git a/ios/MullvadVPN/Coordinators/WelcomeCoordinator.swift b/ios/MullvadVPN/Coordinators/WelcomeCoordinator.swift index fec5a6f1d7..7660110b91 100644 --- a/ios/MullvadVPN/Coordinators/WelcomeCoordinator.swift +++ b/ios/MullvadVPN/Coordinators/WelcomeCoordinator.swift @@ -15,7 +15,6 @@ final class WelcomeCoordinator: Coordinator, Poppable, Presenting { private let navigationController: RootContainerViewController private let storePaymentManager: StorePaymentManager private let tunnelManager: TunnelManager - private let inAppPurchaseInteractor: InAppPurchaseInteractor private let accountsProxy: RESTAccountHandling private var viewController: WelcomeViewController? @@ -37,7 +36,6 @@ final class WelcomeCoordinator: Coordinator, Poppable, Presenting { self.storePaymentManager = storePaymentManager self.tunnelManager = tunnelManager self.accountsProxy = accountsProxy - self.inAppPurchaseInteractor = InAppPurchaseInteractor(storePaymentManager: storePaymentManager) } func start(animated: Bool) { @@ -158,8 +156,20 @@ extension WelcomeCoordinator: @preconcurrency WelcomeViewControllerDelegate { accountNumber: accountNumber, paymentAction: .purchase ) - coordinator.didFinish = { coordinator in + coordinator.didFinish = { coordinator, event in coordinator.dismiss(animated: true) + switch event { + case .paymentEvent(.finished): + let coordinator = SetupAccountCompletedCoordinator(navigationController: self.navigationController) + coordinator.didFinish = { [weak self] coordinator in + coordinator.removeFromParent() + guard let self else { return } + didFinish?() + } + self.addChild(coordinator) + coordinator.start(animated: true) + default: break + } } coordinator.start() presentChild(coordinator, animated: true) diff --git a/ios/MullvadVPN/View controllers/InAppPurchase/InAppPurchaseViewController.swift b/ios/MullvadVPN/View controllers/InAppPurchase/InAppPurchaseViewController.swift index ec52a4111f..45f808b041 100644 --- a/ios/MullvadVPN/View controllers/InAppPurchase/InAppPurchaseViewController.swift +++ b/ios/MullvadVPN/View controllers/InAppPurchase/InAppPurchaseViewController.swift @@ -9,6 +9,14 @@ import StoreKit import UIKit +enum InAppPurchaseEvent { + case paymentEvent(StorePaymentEvent) + case storePaymentError(StorePaymentManagerError) + case error(Error) + case cancelled + case purchaseRestored +} + class InAppPurchaseViewController: UIViewController, @preconcurrency StorePaymentObserver { private let storePaymentManager: StorePaymentManager private let accountNumber: String @@ -19,7 +27,7 @@ class InAppPurchaseViewController: UIViewController, @preconcurrency StorePaymen SpinnerActivityIndicatorView(style: .large) }() - var didFinish: (() -> Void)? + var didFinish: ((InAppPurchaseEvent) -> Void)? init( storePaymentManager: StorePaymentManager, @@ -66,10 +74,10 @@ class InAppPurchaseViewController: UIViewController, @preconcurrency StorePaymen self.showPurchaseOptions(for: products) case let .failure(failure as StorePaymentManagerError): self.errorPresenter.showAlertForError(failure, context: .purchase) { - self.didFinish?() + self.didFinish?(.storePaymentError(failure)) } - default: - self.didFinish?() + case let .failure(failure): + self.didFinish?(.error(failure)) } } } @@ -81,14 +89,14 @@ class InAppPurchaseViewController: UIViewController, @preconcurrency StorePaymen switch result { case let .success(success): self.errorPresenter.showAlertForResponse(success, context: .restoration) { - self.didFinish?() + self.didFinish?(.purchaseRestored) } case let .failure(failure as StorePaymentManagerError): self.errorPresenter.showAlertForError(failure, context: .restoration) { - self.didFinish?() + self.didFinish?(.storePaymentError(failure)) } - default: - self.didFinish?() + case let .failure(failure): + self.didFinish?(.error(failure)) } } } @@ -133,7 +141,7 @@ class InAppPurchaseViewController: UIViewController, @preconcurrency StorePaymen value: "Cancel", comment: "" ), style: .cancel) { _ in - self.didFinish?() + self.didFinish?(.cancelled) } cancelAction.accessibilityIdentifier = "actoin-sheet-cancel-button" sheetController.addAction(cancelAction) @@ -146,16 +154,16 @@ class InAppPurchaseViewController: UIViewController, @preconcurrency StorePaymen switch event { case let .finished(completion): errorPresenter.showAlertForResponse(completion.serverResponse, context: .purchase) { - self.didFinish?() + self.didFinish?(.paymentEvent(event)) } case let .failure(paymentFailure): switch paymentFailure.error { case .storePayment(SKError.paymentCancelled): - self.didFinish?() + self.didFinish?(.paymentEvent(event)) default: errorPresenter.showAlertForError(paymentFailure.error, context: .purchase) { - self.didFinish?() + self.didFinish?(.paymentEvent(event)) } } } |
