diff options
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | ios/MullvadVPN/RevokedDeviceInteractor.swift | 33 | ||||
| -rw-r--r-- | ios/MullvadVPN/RevokedDeviceViewController.swift | 49 | ||||
| -rw-r--r-- | ios/MullvadVPN/SceneDelegate.swift | 4 |
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 } |
