diff options
| author | Jon Petersson <jon.petersson@mullvad.net> | 2024-11-15 13:25:48 +0100 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2024-11-18 11:49:53 +0100 |
| commit | b087eb714e0f671453a83634e5d7941f75bd6f26 (patch) | |
| tree | dc7f4e0ea08cfb5828870b5ab92efe833d7ab74f | |
| parent | 61e5a9509ccd0799f3c72da6efe564703b32fc4c (diff) | |
| download | mullvadvpn-b087eb714e0f671453a83634e5d7941f75bd6f26.tar.xz mullvadvpn-b087eb714e0f671453a83634e5d7941f75bd6f26.zip | |
Fix reloading of data in settings cells
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) |
