aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/UI/iOS
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-12-03 18:51:51 +0530
committerRoopesh Chander <roop@roopc.net>2018-12-03 18:51:51 +0530
commit046d1413ec83670bb9fb2de5a461c6e4b5d6e400 (patch)
treeb3bfac80ace79a05e99003c6900485f326b4a07a /WireGuard/WireGuard/UI/iOS
parentVPN: Error out when tunnel activation fails because there's no internet (diff)
downloadwireguard-apple-046d1413ec83670bb9fb2de5a461c6e4b5d6e400.tar.xz
wireguard-apple-046d1413ec83670bb9fb2de5a461c6e4b5d6e400.zip
Refactor out VPN-handling stuff from tunnels list VC to the main VC
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/UI/iOS')
-rw-r--r--WireGuard/WireGuard/UI/iOS/AppDelegate.swift2
-rw-r--r--WireGuard/WireGuard/UI/iOS/MainViewController.swift36
-rw-r--r--WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift112
3 files changed, 86 insertions, 64 deletions
diff --git a/WireGuard/WireGuard/UI/iOS/AppDelegate.swift b/WireGuard/WireGuard/UI/iOS/AppDelegate.swift
index fabdae9..7ba77e4 100644
--- a/WireGuard/WireGuard/UI/iOS/AppDelegate.swift
+++ b/WireGuard/WireGuard/UI/iOS/AppDelegate.swift
@@ -39,6 +39,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
}
func applicationDidBecomeActive(_ application: UIApplication) {
- mainVC?.tunnelsListVC?.refreshTunnelConnectionStatuses()
+ mainVC?.refreshTunnelConnectionStatuses()
}
}
diff --git a/WireGuard/WireGuard/UI/iOS/MainViewController.swift b/WireGuard/WireGuard/UI/iOS/MainViewController.swift
index 359fcfe..18853d9 100644
--- a/WireGuard/WireGuard/UI/iOS/MainViewController.swift
+++ b/WireGuard/WireGuard/UI/iOS/MainViewController.swift
@@ -4,6 +4,10 @@
import UIKit
class MainViewController: UISplitViewController {
+
+ var tunnelsManager: TunnelsManager?
+ var onTunnelsManagerReady: ((TunnelsManager) -> Void)?
+
var tunnelsListVC: TunnelsListTableViewController?
init() {
@@ -30,6 +34,38 @@ class MainViewController: UISplitViewController {
// On iPad, always show both masterVC and detailVC, even in portrait mode, like the Settings app
self.preferredDisplayMode = .allVisible
+
+ // Create the tunnels manager, and when it's ready, inform tunnelsListVC
+ TunnelsManager.create { [weak self] tunnelsManager in
+ guard let tunnelsManager = tunnelsManager else { return }
+ guard let s = self else { return }
+
+ s.tunnelsManager = tunnelsManager
+ s.tunnelsListVC?.setTunnelsManager(tunnelsManager: tunnelsManager)
+
+ tunnelsManager.activationDelegate = s
+
+ s.onTunnelsManagerReady?(tunnelsManager)
+ s.onTunnelsManagerReady = nil
+ }
+ }
+}
+
+extension MainViewController: TunnelsManagerActivationDelegate {
+ func tunnelActivationFailed(tunnel: TunnelContainer, error: TunnelActivationError) {
+ ErrorPresenter.showErrorAlert(error: error, from: self)
+ }
+}
+
+extension MainViewController {
+ func refreshTunnelConnectionStatuses() {
+ if let tunnelsManager = tunnelsManager {
+ tunnelsManager.refreshStatuses()
+ } else {
+ onTunnelsManagerReady = { tunnelsManager in
+ tunnelsManager.refreshStatuses()
+ }
+ }
}
}
diff --git a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
index c2c7b58..3cc3fa1 100644
--- a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
+++ b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
@@ -8,7 +8,6 @@ import UserNotifications
class TunnelsListTableViewController: UIViewController {
var tunnelsManager: TunnelsManager?
- var onTunnelsManagerReady: ((TunnelsManager) -> Void)?
var busyIndicator: UIActivityIndicatorView?
var centeredAddButton: BorderedTextButton?
@@ -38,53 +37,58 @@ class TunnelsListTableViewController: UIViewController {
])
busyIndicator.startAnimating()
self.busyIndicator = busyIndicator
+ }
- // Create the tunnels manager, and when it's ready, create the tableView
- TunnelsManager.create { [weak self] tunnelsManager in
- guard let tunnelsManager = tunnelsManager else { return }
- guard let s = self else { return }
-
- let tableView = UITableView(frame: CGRect.zero, style: .plain)
- tableView.rowHeight = 60
- tableView.separatorStyle = .none
- tableView.register(TunnelsListTableViewCell.self, forCellReuseIdentifier: TunnelsListTableViewCell.id)
-
- s.view.addSubview(tableView)
- tableView.translatesAutoresizingMaskIntoConstraints = false
- NSLayoutConstraint.activate([
- tableView.leftAnchor.constraint(equalTo: s.view.leftAnchor),
- tableView.rightAnchor.constraint(equalTo: s.view.rightAnchor),
- tableView.topAnchor.constraint(equalTo: s.view.topAnchor),
- tableView.bottomAnchor.constraint(equalTo: s.view.bottomAnchor)
- ])
- tableView.dataSource = s
- tableView.delegate = s
- s.tableView = tableView
-
- // Add an add button, centered
- let centeredAddButton = BorderedTextButton()
- centeredAddButton.title = "Add a tunnel"
- centeredAddButton.isHidden = true
- s.view.addSubview(centeredAddButton)
- centeredAddButton.translatesAutoresizingMaskIntoConstraints = false
- NSLayoutConstraint.activate([
- centeredAddButton.centerXAnchor.constraint(equalTo: s.view.centerXAnchor),
- centeredAddButton.centerYAnchor.constraint(equalTo: s.view.centerYAnchor)
- ])
- centeredAddButton.onTapped = { [weak self] in
- self?.addButtonTapped(sender: centeredAddButton)
- }
- s.centeredAddButton = centeredAddButton
+ func setTunnelsManager(tunnelsManager: TunnelsManager) {
+ if (self.tunnelsManager != nil) {
+ // If a tunnels manager is already set, do nothing
+ return
+ }
+
+ // Create the table view
+
+ let tableView = UITableView(frame: CGRect.zero, style: .plain)
+ tableView.rowHeight = 60
+ tableView.separatorStyle = .none
+ tableView.register(TunnelsListTableViewCell.self, forCellReuseIdentifier: TunnelsListTableViewCell.id)
- centeredAddButton.isHidden = (tunnelsManager.numberOfTunnels() > 0)
- busyIndicator.stopAnimating()
+ self.view.addSubview(tableView)
+ tableView.translatesAutoresizingMaskIntoConstraints = false
+ NSLayoutConstraint.activate([
+ tableView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
+ tableView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
+ tableView.topAnchor.constraint(equalTo: self.view.topAnchor),
+ tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
+ ])
+ tableView.dataSource = self
+ tableView.delegate = self
+ self.tableView = tableView
+
+ // Add button at the center
- tunnelsManager.delegate = s
- tunnelsManager.activationDelegate = s
- s.tunnelsManager = tunnelsManager
- s.onTunnelsManagerReady?(tunnelsManager)
- s.onTunnelsManagerReady = nil
+ let centeredAddButton = BorderedTextButton()
+ centeredAddButton.title = "Add a tunnel"
+ centeredAddButton.isHidden = true
+ self.view.addSubview(centeredAddButton)
+ centeredAddButton.translatesAutoresizingMaskIntoConstraints = false
+ NSLayoutConstraint.activate([
+ centeredAddButton.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
+ centeredAddButton.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
+ ])
+ centeredAddButton.onTapped = { [weak self] in
+ self?.addButtonTapped(sender: centeredAddButton)
}
+ centeredAddButton.isHidden = (tunnelsManager.numberOfTunnels() > 0)
+ self.centeredAddButton = centeredAddButton
+
+ // Hide the busy indicator
+
+ self.busyIndicator?.stopAnimating()
+
+ // Keep track of the tunnels manager
+
+ self.tunnelsManager = tunnelsManager
+ tunnelsManager.tunnelsListDelegate = self
}
@objc func addButtonTapped(sender: AnyObject) {
@@ -188,16 +192,6 @@ class TunnelsListTableViewController: UIViewController {
}
}
}
-
- func refreshTunnelConnectionStatuses() {
- if let tunnelsManager = tunnelsManager {
- tunnelsManager.refreshStatuses()
- } else {
- onTunnelsManagerReady = { tunnelsManager in
- tunnelsManager.refreshStatuses()
- }
- }
- }
}
// MARK: UIDocumentPickerDelegate
@@ -293,7 +287,7 @@ extension TunnelsListTableViewController: UITableViewDelegate {
// MARK: TunnelsManagerDelegate
-extension TunnelsListTableViewController: TunnelsManagerDelegate {
+extension TunnelsListTableViewController: TunnelsManagerListDelegate {
func tunnelAdded(at index: Int) {
tableView?.insertRows(at: [IndexPath(row: index, section: 0)], with: .automatic)
centeredAddButton?.isHidden = (tunnelsManager?.numberOfTunnels() ?? 0 > 0)
@@ -313,14 +307,6 @@ extension TunnelsListTableViewController: TunnelsManagerDelegate {
}
}
-// MARK: TunnelActivationDelegate
-
-extension TunnelsListTableViewController: TunnelActivationDelegate {
- func tunnelActivationFailed(tunnel: TunnelContainer, error: TunnelActivationError) {
- ErrorPresenter.showErrorAlert(error: error, from: self)
- }
-}
-
class TunnelsListTableViewCell: UITableViewCell {
static let id: String = "TunnelsListTableViewCell"
var tunnel: TunnelContainer? {