summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJon Petersson <jon.petersson@mullvad.net>2024-11-15 13:25:48 +0100
committerEmīls <emils@mullvad.net>2024-11-18 11:49:53 +0100
commitb087eb714e0f671453a83634e5d7941f75bd6f26 (patch)
treedc7f4e0ea08cfb5828870b5ab92efe833d7ab74f
parent61e5a9509ccd0799f3c72da6efe564703b32fc4c (diff)
downloadmullvadvpn-b087eb714e0f671453a83634e5d7941f75bd6f26.tar.xz
mullvadvpn-b087eb714e0f671453a83634e5d7941f75bd6f26.zip
Fix reloading of data in settings cells
-rw-r--r--ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsDataSource.swift23
-rw-r--r--ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsInteractor.swift4
-rw-r--r--ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsViewController.swift2
3 files changed, 21 insertions, 8 deletions
diff --git a/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsDataSource.swift b/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsDataSource.swift
index d07110c6d8..f74717f1bc 100644
--- a/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsDataSource.swift
+++ b/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsDataSource.swift
@@ -264,14 +264,16 @@ final class VPNSettingsDataSource: UITableViewDiffableDataSource<
}
func update(from tunnelSettings: LatestTunnelSettings) {
- let newViewModel = VPNSettingsViewModel(from: tunnelSettings)
- let mergedViewModel = viewModel.merged(newViewModel)
+ updateViewModel(from: tunnelSettings)
+ updateSnapshot()
+ }
- if viewModel != mergedViewModel {
- viewModel = mergedViewModel
- }
+ func reload(from tunnelSettings: LatestTunnelSettings) {
+ updateViewModel(from: tunnelSettings)
- updateSnapshot()
+ var snapshot = snapshot()
+ snapshot.reconfigureItems(snapshot.itemIdentifiers)
+ applySnapshot(snapshot, animated: false)
}
// MARK: - UITableViewDelegate
@@ -416,6 +418,15 @@ final class VPNSettingsDataSource: UITableViewDiffableDataSource<
// MARK: - Private
+ func updateViewModel(from tunnelSettings: LatestTunnelSettings) {
+ let newViewModel = VPNSettingsViewModel(from: tunnelSettings)
+ let mergedViewModel = viewModel.merged(newViewModel)
+
+ if viewModel != mergedViewModel {
+ viewModel = mergedViewModel
+ }
+ }
+
private func registerClasses() {
CellReuseIdentifiers.allCases.forEach { enumCase in
tableView?.register(
diff --git a/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsInteractor.swift b/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsInteractor.swift
index e304a8e4b6..88fddf83b2 100644
--- a/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsInteractor.swift
+++ b/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsInteractor.swift
@@ -30,10 +30,12 @@ final class VPNSettingsInteractor {
self.tunnelManager = tunnelManager
self.relayCacheTracker = relayCacheTracker
- tunnelObserver =
+ let tunnelObserver =
TunnelBlockObserver(didUpdateTunnelSettings: { [weak self] _, newSettings in
self?.tunnelSettingsDidChange?(newSettings)
})
+ self.tunnelObserver = tunnelObserver
+ tunnelManager.addObserver(tunnelObserver)
}
func updateSettings(_ changes: [TunnelSettingsUpdate], completion: (() -> Void)? = nil) {
diff --git a/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsViewController.swift b/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsViewController.swift
index c957422c67..f6628feaa9 100644
--- a/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsViewController.swift
+++ b/ios/MullvadVPN/View controllers/VPNSettings/VPNSettingsViewController.swift
@@ -57,7 +57,7 @@ class VPNSettingsViewController: UITableViewController {
)
interactor.tunnelSettingsDidChange = { [weak self] newSettings in
- self?.dataSource?.update(from: newSettings)
+ self?.dataSource?.reload(from: newSettings)
}
dataSource?.update(from: interactor.tunnelSettings)