// // PreferencesViewController.swift // MullvadVPN // // Created by pronebird on 19/05/2021. // Copyright © 2021 Mullvad VPN AB. All rights reserved. // import Logging import UIKit class PreferencesViewController: UITableViewController, PreferencesDataSourceDelegate, TunnelObserver { private let dataSource = PreferencesDataSource() override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } init() { super.init(style: .grouped) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() tableView.backgroundColor = .secondaryColor tableView.separatorColor = .secondaryColor tableView.rowHeight = UITableView.automaticDimension tableView.estimatedRowHeight = 60 dataSource.tableView = tableView dataSource.delegate = self navigationItem.title = NSLocalizedString( "NAVIGATION_TITLE", tableName: "Preferences", value: "Preferences", comment: "" ) navigationItem.rightBarButtonItem = editButtonItem TunnelManager.shared.addObserver(self) dataSource.update(from: TunnelManager.shared.settings.dnsSettings) } override func setEditing(_ editing: Bool, animated: Bool) { dataSource.setEditing(editing, animated: animated) navigationItem.setHidesBackButton(editing, animated: animated) // Disable swipe to dismiss when editing isModalInPresentation = editing super.setEditing(editing, animated: animated) } // MARK: - PreferencesDataSourceDelegate func preferencesDataSource( _ dataSource: PreferencesDataSource, didChangeViewModel dataModel: PreferencesViewModel ) { let dnsSettings = dataModel.asDNSSettings() TunnelManager.shared.setDNSSettings(dnsSettings) } // MARK: - TunnelObserver func tunnelManagerDidLoadConfiguration(_ manager: TunnelManager) { // no-op } func tunnelManager(_ manager: TunnelManager, didUpdateTunnelStatus tunnelStatus: TunnelStatus) { // no-op } func tunnelManager(_ manager: TunnelManager, didFailWithError error: Error) { // no-op } func tunnelManager( _ manager: TunnelManager, didUpdateTunnelSettings tunnelSettings: TunnelSettingsV2 ) { dataSource.update(from: tunnelSettings.dnsSettings) } func tunnelManager(_ manager: TunnelManager, didUpdateDeviceState deviceState: DeviceState) { // no-op } }