summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN.xcodeproj/project.pbxproj4
-rw-r--r--ios/MullvadVPN/RevokedDeviceInteractor.swift33
-rw-r--r--ios/MullvadVPN/RevokedDeviceViewController.swift49
-rw-r--r--ios/MullvadVPN/SceneDelegate.swift4
4 files changed, 59 insertions, 31 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj
index 12d7a6d8ba..b092636d2d 100644
--- a/ios/MullvadVPN.xcodeproj/project.pbxproj
+++ b/ios/MullvadVPN.xcodeproj/project.pbxproj
@@ -163,6 +163,7 @@
5878A27729093A4F0096FC88 /* StorePaymentBlockObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878A27629093A4F0096FC88 /* StorePaymentBlockObserver.swift */; };
5878A279290954790096FC88 /* ConnectInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878A278290954790096FC88 /* ConnectInteractor.swift */; };
5878A27B2909649A0096FC88 /* CustomOverlayRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878A27A2909649A0096FC88 /* CustomOverlayRenderer.swift */; };
+ 5878A27D2909657C0096FC88 /* RevokedDeviceInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878A27C2909657C0096FC88 /* RevokedDeviceInteractor.swift */; };
587988C728A2A01F00E3DF54 /* AccountDataThrottling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587988C628A2A01F00E3DF54 /* AccountDataThrottling.swift */; };
587A01FC23F1F0BE00B68763 /* SimulatorTunnelProviderHost.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587A01FB23F1F0BE00B68763 /* SimulatorTunnelProviderHost.swift */; };
587AD7C623421D7000E93A53 /* TunnelSettingsV1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */; };
@@ -644,6 +645,7 @@
5878A27629093A4F0096FC88 /* StorePaymentBlockObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorePaymentBlockObserver.swift; sourceTree = "<group>"; };
5878A278290954790096FC88 /* ConnectInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectInteractor.swift; sourceTree = "<group>"; };
5878A27A2909649A0096FC88 /* CustomOverlayRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomOverlayRenderer.swift; sourceTree = "<group>"; };
+ 5878A27C2909657C0096FC88 /* RevokedDeviceInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevokedDeviceInteractor.swift; sourceTree = "<group>"; };
587988C628A2A01F00E3DF54 /* AccountDataThrottling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDataThrottling.swift; sourceTree = "<group>"; };
587A01FB23F1F0BE00B68763 /* SimulatorTunnelProviderHost.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimulatorTunnelProviderHost.swift; sourceTree = "<group>"; };
587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunnelSettingsV1.swift; sourceTree = "<group>"; };
@@ -1291,6 +1293,7 @@
06FAE67828F83CA50033DD93 /* RESTCreateApplePaymentResponse+Localization.swift */,
58F1311427E0B2AB007AC5BC /* Result+Extensions.swift */,
580909D22876D09A0078138D /* RevokedDeviceViewController.swift */,
+ 5878A27C2909657C0096FC88 /* RevokedDeviceInteractor.swift */,
587425C02299833500CA2045 /* RootContainerViewController.swift */,
58E25F802837BBBB002CFB2C /* SceneDelegate.swift */,
5888AD82227B11080051EB06 /* SelectLocationCell.swift */,
@@ -2160,6 +2163,7 @@
5857F24324C8662600CF6F47 /* SelectLocationHeaderView.swift in Sources */,
58EE2E3A272FF814003BFF93 /* SettingsDataSource.swift in Sources */,
58421032282E42B000F24E46 /* UpdateDeviceDataOperation.swift in Sources */,
+ 5878A27D2909657C0096FC88 /* RevokedDeviceInteractor.swift in Sources */,
5872631D283F755900E14ADF /* IntentHandlers.swift in Sources */,
58CCA01222424D11004F3011 /* SettingsViewController.swift in Sources */,
580F8B8628197958002E0998 /* DNSSettings.swift in Sources */,
diff --git a/ios/MullvadVPN/RevokedDeviceInteractor.swift b/ios/MullvadVPN/RevokedDeviceInteractor.swift
new file mode 100644
index 0000000000..7ceacb2676
--- /dev/null
+++ b/ios/MullvadVPN/RevokedDeviceInteractor.swift
@@ -0,0 +1,33 @@
+//
+// RevokedDeviceInteractor.swift
+// MullvadVPN
+//
+// Created by pronebird on 26/10/2022.
+// Copyright © 2022 Mullvad VPN AB. All rights reserved.
+//
+
+import Foundation
+
+final class RevokedDeviceInteractor {
+ private let tunnelManager: TunnelManager
+ private var tunnelObserver: TunnelObserver?
+
+ var didUpdateTunnelStatus: ((TunnelStatus) -> Void)?
+
+ var tunnelStatus: TunnelStatus {
+ return tunnelManager.tunnelStatus
+ }
+
+ init(tunnelManager: TunnelManager) {
+ self.tunnelManager = tunnelManager
+
+ let tunnelObserver =
+ TunnelBlockObserver(didUpdateTunnelStatus: { [weak self] manager, tunnelStatus in
+ self?.didUpdateTunnelStatus?(tunnelStatus)
+ })
+
+ tunnelManager.addObserver(tunnelObserver)
+
+ self.tunnelObserver = tunnelObserver
+ }
+}
diff --git a/ios/MullvadVPN/RevokedDeviceViewController.swift b/ios/MullvadVPN/RevokedDeviceViewController.swift
index cb7ff2f7e1..2d81f318cb 100644
--- a/ios/MullvadVPN/RevokedDeviceViewController.swift
+++ b/ios/MullvadVPN/RevokedDeviceViewController.swift
@@ -12,7 +12,7 @@ protocol RevokedDeviceViewControllerDelegate: AnyObject {
func revokedDeviceControllerDidRequestLogout(_ controller: RevokedDeviceViewController)
}
-class RevokedDeviceViewController: UIViewController, RootContainment, TunnelObserver {
+class RevokedDeviceViewController: UIViewController, RootContainment {
private lazy var imageView: StatusImageView = {
let statusImageView = StatusImageView(style: .failure)
statusImageView.translatesAutoresizingMaskIntoConstraints = false
@@ -87,7 +87,7 @@ class RevokedDeviceViewController: UIViewController, RootContainment, TunnelObse
}
var preferredHeaderBarPresentation: HeaderBarPresentation {
- let tunnelState = TunnelManager.shared.tunnelStatus.state
+ let tunnelState = interactor.tunnelStatus.state
return HeaderBarPresentation(
style: tunnelState.isSecured ? .secured : .unsecured,
@@ -99,6 +99,17 @@ class RevokedDeviceViewController: UIViewController, RootContainment, TunnelObse
return false
}
+ private let interactor: RevokedDeviceInteractor
+
+ init(interactor: RevokedDeviceInteractor) {
+ self.interactor = interactor
+ super.init(nibName: nil, bundle: nil)
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+
override func viewDidLoad() {
super.viewDidLoad()
@@ -149,8 +160,12 @@ class RevokedDeviceViewController: UIViewController, RootContainment, TunnelObse
logoutButton.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor),
])
- TunnelManager.shared.addObserver(self)
- updateView(tunnelState: TunnelManager.shared.tunnelStatus.state)
+ interactor.didUpdateTunnelStatus = { [weak self] tunnelStatus in
+ self?.setNeedsHeaderBarStyleAppearanceUpdate()
+ self?.updateView(tunnelState: tunnelStatus.state)
+ }
+
+ updateView(tunnelState: interactor.tunnelStatus.state)
}
@objc private func didTapLogoutButton(_ sender: Any?) {
@@ -163,30 +178,4 @@ class RevokedDeviceViewController: UIViewController, RootContainment, TunnelObse
logoutButton.style = tunnelState.isSecured ? .danger : .default
footerLabel.isHidden = !tunnelState.isSecured
}
-
- // MARK: - TunnelObserver
-
- func tunnelManagerDidLoadConfiguration(_ manager: TunnelManager) {
- // no-op
- }
-
- func tunnelManager(_ manager: TunnelManager, didUpdateTunnelStatus tunnelStatus: TunnelStatus) {
- setNeedsHeaderBarStyleAppearanceUpdate()
- updateView(tunnelState: tunnelStatus.state)
- }
-
- func tunnelManager(_ manager: TunnelManager, didUpdateDeviceState deviceState: DeviceState) {
- // no-op
- }
-
- func tunnelManager(
- _ manager: TunnelManager,
- didUpdateTunnelSettings tunnelSettings: TunnelSettingsV2
- ) {
- // no-op
- }
-
- func tunnelManager(_ manager: TunnelManager, didFailWithError error: Error) {
- // no-op
- }
}
diff --git a/ios/MullvadVPN/SceneDelegate.swift b/ios/MullvadVPN/SceneDelegate.swift
index d4fc584bf7..afb431faea 100644
--- a/ios/MullvadVPN/SceneDelegate.swift
+++ b/ios/MullvadVPN/SceneDelegate.swift
@@ -421,7 +421,9 @@ extension SceneDelegate {
}
private func makeRevokedDeviceController() -> RevokedDeviceViewController {
- let controller = RevokedDeviceViewController()
+ let controller = RevokedDeviceViewController(
+ interactor: RevokedDeviceInteractor(tunnelManager: .shared)
+ )
controller.delegate = self
return controller
}