diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-11-01 06:37:55 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-11-03 10:58:53 +0100 |
| commit | b9046b8cdda26d07671dbab7b2831c304974ff63 (patch) | |
| tree | 21100eaea8bc8b8a4e3394ef0fd9a6709880139a | |
| parent | 4a92804d47f26a3c2b55b68fa4893b98a053e7a2 (diff) | |
| download | mullvadvpn-b9046b8cdda26d07671dbab7b2831c304974ff63.tar.xz mullvadvpn-b9046b8cdda26d07671dbab7b2831c304974ff63.zip | |
Add settings interactor
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | ios/MullvadVPN/SettingsDataSource.swift | 40 | ||||
| -rw-r--r-- | ios/MullvadVPN/SettingsInteractor.swift | 33 | ||||
| -rw-r--r-- | ios/MullvadVPN/SettingsViewController.swift | 6 |
4 files changed, 54 insertions, 29 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index cd607eea5c..466336fc5c 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -137,6 +137,7 @@ 585E820327F3285E00939F0E /* SendStoreReceiptOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585E820227F3285E00939F0E /* SendStoreReceiptOperation.swift */; }; 5862805422428EF100F5A6E1 /* TranslucentButtonBlurView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5862805322428EF100F5A6E1 /* TranslucentButtonBlurView.swift */; }; 5867770E29096984006F721F /* OutOfTimeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5867770D29096984006F721F /* OutOfTimeInteractor.swift */; }; + 58677712290976FB006F721F /* SettingsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58677711290976FB006F721F /* SettingsInteractor.swift */; }; 5867771429097BCD006F721F /* PaymentState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5867771329097BCD006F721F /* PaymentState.swift */; }; 5867771629097C5B006F721F /* ProductState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5867771529097C5B006F721F /* ProductState.swift */; }; 5868585524054096000B8131 /* AppButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5868585424054096000B8131 /* AppButton.swift */; }; @@ -628,6 +629,7 @@ 5862805322428EF100F5A6E1 /* TranslucentButtonBlurView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslucentButtonBlurView.swift; sourceTree = "<group>"; }; 5866F39B2243B82D00168AE5 /* MullvadVPN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = MullvadVPN.entitlements; sourceTree = "<group>"; }; 5867770D29096984006F721F /* OutOfTimeInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutOfTimeInteractor.swift; sourceTree = "<group>"; }; + 58677711290976FB006F721F /* SettingsInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsInteractor.swift; sourceTree = "<group>"; }; 5867771329097BCD006F721F /* PaymentState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentState.swift; sourceTree = "<group>"; }; 5867771529097C5B006F721F /* ProductState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductState.swift; sourceTree = "<group>"; }; 5868585424054096000B8131 /* AppButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppButton.swift; sourceTree = "<group>"; }; @@ -1323,6 +1325,7 @@ 584D26C1270C8542004EA533 /* SettingsStaticTextFooterView.swift */, 58ACF64A26553C3F00ACE4B7 /* SettingsSwitchCell.swift */, 58CCA01122424D11004F3011 /* SettingsViewController.swift */, + 58677711290976FB006F721F /* SettingsInteractor.swift */, 75FD0C2028B108570021E33E /* ShortcutsDataSource.swift */, 75FD0C2228B109860021E33E /* ShortcutsDataSourceDelegate.swift */, 753D6C0B28B4BF3E0052D9E1 /* ShortcutsManager.swift */, @@ -2160,6 +2163,7 @@ 5891BF1C25E3E3EB006D6FB0 /* Bundle+ProductVersion.swift in Sources */, 5878A26F2907E7E00096FC88 /* ProblemReportInteractor.swift in Sources */, 5807E2C02432038B00F5FF30 /* String+Split.swift in Sources */, + 58677712290976FB006F721F /* SettingsInteractor.swift in Sources */, 58CE5E66224146200008646E /* LoginViewController.swift in Sources */, 58EF580B25D69D7A00AEBA94 /* ProblemReportSubmissionOverlayView.swift in Sources */, 58FD5BE724192A2C00112C88 /* StoreReceipt.swift in Sources */, diff --git a/ios/MullvadVPN/SettingsDataSource.swift b/ios/MullvadVPN/SettingsDataSource.swift index 0f0f9b6cd2..ed4bf23c3d 100644 --- a/ios/MullvadVPN/SettingsDataSource.swift +++ b/ios/MullvadVPN/SettingsDataSource.swift @@ -8,7 +8,7 @@ import UIKit -class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITableViewDelegate { +final class SettingsDataSource: NSObject, UITableViewDataSource, UITableViewDelegate { private enum CellReuseIdentifiers: String, CaseIterable { case accountCell case basicCell @@ -50,6 +50,7 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab } private var snapshot = DataSourceSnapshot<Section, Item>() + private let interactor: SettingsInteractor private var storedAccountData: StoredAccountData? weak var delegate: SettingsDataSourceDelegate? @@ -63,11 +64,15 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab } } - override init() { + init(interactor: SettingsInteractor) { + self.interactor = interactor + super.init() - TunnelManager.shared.addObserver(self) - storedAccountData = TunnelManager.shared.deviceState.accountData + interactor.didUpdateDeviceState = { [weak self] deviceState in + self?.didUpdateDeviceState(deviceState) + } + storedAccountData = interactor.deviceState.accountData updateDataSnapshot() } @@ -91,7 +96,7 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab private func updateDataSnapshot() { var newSnapshot = DataSourceSnapshot<Section, Item>() - if TunnelManager.shared.deviceState.isLoggedIn { + if interactor.deviceState.isLoggedIn { newSnapshot.appendSections([.main]) newSnapshot.appendItems([.account, .preferences, .shortcuts], in: .main) } @@ -130,7 +135,7 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab value: "Account", comment: "" ) - cell.accountExpiryDate = TunnelManager.shared.deviceState.accountData?.expiry + cell.accountExpiryDate = interactor.deviceState.accountData?.expiry cell.accessibilityIdentifier = "AccountCell" cell.disclosureType = .chevron @@ -259,21 +264,9 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab return 0 } - // MARK: - TunnelObserver - - func tunnelManagerDidLoadConfiguration(_ manager: TunnelManager) { - // no-op - } - - func tunnelManager(_ manager: TunnelManager, didFailWithError error: Error) { - // no-op - } - - func tunnelManager(_ manager: TunnelManager, didUpdateTunnelStatus tunnelStatus: TunnelStatus) { - // no-op - } + // MARK: - Private - func tunnelManager(_ manager: TunnelManager, didUpdateDeviceState deviceState: DeviceState) { + private func didUpdateDeviceState(_ deviceState: DeviceState) { let newAccountData = deviceState.accountData let oldAccountData = storedAccountData @@ -295,11 +288,4 @@ class SettingsDataSource: NSObject, TunnelObserver, UITableViewDataSource, UITab updateDataSnapshot() tableView?.reloadData() } - - func tunnelManager( - _ manager: TunnelManager, - didUpdateTunnelSettings tunnelSettings: TunnelSettingsV2 - ) { - // no-op - } } diff --git a/ios/MullvadVPN/SettingsInteractor.swift b/ios/MullvadVPN/SettingsInteractor.swift new file mode 100644 index 0000000000..cd5c6e6e68 --- /dev/null +++ b/ios/MullvadVPN/SettingsInteractor.swift @@ -0,0 +1,33 @@ +// +// SettingsInteractor.swift +// MullvadVPN +// +// Created by pronebird on 26/10/2022. +// Copyright © 2022 Mullvad VPN AB. All rights reserved. +// + +import Foundation + +final class SettingsInteractor { + private let tunnelManager: TunnelManager + private var tunnelObserver: TunnelObserver? + + var didUpdateDeviceState: ((DeviceState) -> Void)? + + var deviceState: DeviceState { + return tunnelManager.deviceState + } + + init(tunnelManager: TunnelManager) { + self.tunnelManager = tunnelManager + + let tunnelObserver = + TunnelBlockObserver(didUpdateDeviceState: { [weak self] manager, deviceState in + self?.didUpdateDeviceState?(deviceState) + }) + + tunnelManager.addObserver(tunnelObserver) + + self.tunnelObserver = tunnelObserver + } +} diff --git a/ios/MullvadVPN/SettingsViewController.swift b/ios/MullvadVPN/SettingsViewController.swift index 0048c2eed3..3f5ce245df 100644 --- a/ios/MullvadVPN/SettingsViewController.swift +++ b/ios/MullvadVPN/SettingsViewController.swift @@ -23,9 +23,11 @@ class SettingsViewController: UITableViewController, SettingsDataSourceDelegate, return .lightContent } - private let dataSource = SettingsDataSource() + private let dataSource: SettingsDataSource + + init(interactor: SettingsInteractor) { + dataSource = SettingsDataSource(interactor: interactor) - init() { super.init(style: .grouped) } |
