summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-11-01 06:37:55 +0100
committerAndrej Mihajlov <and@mullvad.net>2022-11-03 10:58:53 +0100
commitb9046b8cdda26d07671dbab7b2831c304974ff63 (patch)
tree21100eaea8bc8b8a4e3394ef0fd9a6709880139a
parent4a92804d47f26a3c2b55b68fa4893b98a053e7a2 (diff)
downloadmullvadvpn-b9046b8cdda26d07671dbab7b2831c304974ff63.tar.xz
mullvadvpn-b9046b8cdda26d07671dbab7b2831c304974ff63.zip
Add settings interactor
-rw-r--r--ios/MullvadVPN.xcodeproj/project.pbxproj4
-rw-r--r--ios/MullvadVPN/SettingsDataSource.swift40
-rw-r--r--ios/MullvadVPN/SettingsInteractor.swift33
-rw-r--r--ios/MullvadVPN/SettingsViewController.swift6
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)
}