summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSteffen Ernst <steffen.ernst@mullvad.net>2025-02-10 07:28:29 +0100
committerSteffen Ernst <steffen.ernst@mullvad.net>2025-02-17 09:40:33 +0100
commit8b5fee70ee1c00e9cc37f0da78534b57c42e2869 (patch)
tree45fbc690ddb6f1e1ef266e2aec3d8742181f9cc4
parent0db06acd7ddaab0faede6c8063a31b154d119daf (diff)
downloadmullvadvpn-8b5fee70ee1c00e9cc37f0da78534b57c42e2869.tar.xz
mullvadvpn-8b5fee70ee1c00e9cc37f0da78534b57c42e2869.zip
Fix welcome screen to navigate further after payment
-rw-r--r--ios/MullvadVPN/Coordinators/AccountCoordinator.swift4
-rw-r--r--ios/MullvadVPN/Coordinators/InAppPurchaseCoordinator.swift6
-rw-r--r--ios/MullvadVPN/Coordinators/OutOfTimeCoordinator.swift4
-rw-r--r--ios/MullvadVPN/Coordinators/WelcomeCoordinator.swift16
-rw-r--r--ios/MullvadVPN/View controllers/InAppPurchase/InAppPurchaseViewController.swift32
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))
}
}
}