Tunnel detail: Show VPN-on-demand information
This commit is contained in:
parent
dc19529f10
commit
8385e8d19e
|
@ -42,6 +42,7 @@ class TunnelDetailTableViewController: UITableViewController {
|
||||||
self.tableView.register(TunnelDetailTableViewStatusCell.self, forCellReuseIdentifier: TunnelDetailTableViewStatusCell.id)
|
self.tableView.register(TunnelDetailTableViewStatusCell.self, forCellReuseIdentifier: TunnelDetailTableViewStatusCell.id)
|
||||||
self.tableView.register(TunnelDetailTableViewKeyValueCell.self, forCellReuseIdentifier: TunnelDetailTableViewKeyValueCell.id)
|
self.tableView.register(TunnelDetailTableViewKeyValueCell.self, forCellReuseIdentifier: TunnelDetailTableViewKeyValueCell.id)
|
||||||
self.tableView.register(TunnelDetailTableViewButtonCell.self, forCellReuseIdentifier: TunnelDetailTableViewButtonCell.id)
|
self.tableView.register(TunnelDetailTableViewButtonCell.self, forCellReuseIdentifier: TunnelDetailTableViewButtonCell.id)
|
||||||
|
self.tableView.register(TunnelDetailTableViewActivateOnDemandCell.self, forCellReuseIdentifier: TunnelDetailTableViewActivateOnDemandCell.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func editTapped() {
|
@objc func editTapped() {
|
||||||
|
@ -95,7 +96,7 @@ extension TunnelDetailTableViewController: TunnelEditTableViewControllerDelegate
|
||||||
|
|
||||||
extension TunnelDetailTableViewController {
|
extension TunnelDetailTableViewController {
|
||||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
return 3 + tunnelViewModel.peersData.count
|
return 4 + tunnelViewModel.peersData.count
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
@ -112,7 +113,11 @@ extension TunnelDetailTableViewController {
|
||||||
// Peer
|
// Peer
|
||||||
let peerData = tunnelViewModel.peersData[section - 2]
|
let peerData = tunnelViewModel.peersData[section - 2]
|
||||||
return peerData.filterFieldsWithValueOrControl(peerFields: peerFields).count
|
return peerData.filterFieldsWithValueOrControl(peerFields: peerFields).count
|
||||||
|
} else if (section < (3 + numberOfPeerSections)) {
|
||||||
|
// Activate on demand
|
||||||
|
return 1
|
||||||
} else {
|
} else {
|
||||||
|
assert(section == (3 + numberOfPeerSections))
|
||||||
// Delete tunnel
|
// Delete tunnel
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -130,6 +135,9 @@ extension TunnelDetailTableViewController {
|
||||||
} else if ((numberOfPeerSections > 0) && (section < (2 + numberOfPeerSections))) {
|
} else if ((numberOfPeerSections > 0) && (section < (2 + numberOfPeerSections))) {
|
||||||
// Peer
|
// Peer
|
||||||
return "Peer"
|
return "Peer"
|
||||||
|
} else if (section < (3 + numberOfPeerSections)) {
|
||||||
|
// On-Demand Activation
|
||||||
|
return "On-Demand Activation"
|
||||||
} else {
|
} else {
|
||||||
// Delete tunnel
|
// Delete tunnel
|
||||||
return nil
|
return nil
|
||||||
|
@ -181,8 +189,13 @@ extension TunnelDetailTableViewController {
|
||||||
cell.key = field.rawValue
|
cell.key = field.rawValue
|
||||||
cell.value = peerData[field]
|
cell.value = peerData[field]
|
||||||
return cell
|
return cell
|
||||||
|
} else if (section < (3 + numberOfPeerSections)) {
|
||||||
|
// On-Demand Activation
|
||||||
|
let cell = tableView.dequeueReusableCell(withIdentifier: TunnelDetailTableViewActivateOnDemandCell.id, for: indexPath) as! TunnelDetailTableViewActivateOnDemandCell
|
||||||
|
cell.tunnel = self.tunnel
|
||||||
|
return cell
|
||||||
} else {
|
} else {
|
||||||
assert(section == (2 + numberOfPeerSections))
|
assert(section == (3 + numberOfPeerSections))
|
||||||
// Delete configuration
|
// Delete configuration
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: TunnelDetailTableViewButtonCell.id, for: indexPath) as! TunnelDetailTableViewButtonCell
|
let cell = tableView.dequeueReusableCell(withIdentifier: TunnelDetailTableViewButtonCell.id, for: indexPath) as! TunnelDetailTableViewButtonCell
|
||||||
cell.buttonText = "Delete tunnel"
|
cell.buttonText = "Delete tunnel"
|
||||||
|
@ -392,3 +405,55 @@ class TunnelDetailTableViewButtonCell: UITableViewCell {
|
||||||
hasDestructiveAction = false
|
hasDestructiveAction = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TunnelDetailTableViewActivateOnDemandCell: UITableViewCell {
|
||||||
|
static let id: String = "TunnelDetailTableViewActivateOnDemandCell"
|
||||||
|
|
||||||
|
var tunnel: TunnelContainer? {
|
||||||
|
didSet(value) {
|
||||||
|
update(from: tunnel?.activateOnDemandSetting())
|
||||||
|
onDemandStatusObservervationToken = tunnel?.observe(\.isActivateOnDemandEnabled) { [weak self] (tunnel, _) in
|
||||||
|
self?.update(from: tunnel.activateOnDemandSetting())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var onDemandStatusObservervationToken: AnyObject?
|
||||||
|
|
||||||
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||||
|
super.init(style: .value1, reuseIdentifier: reuseIdentifier)
|
||||||
|
textLabel?.text = "Activate on demand"
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func update(from activateOnDemandSetting: ActivateOnDemandSetting?) {
|
||||||
|
let detailText: String
|
||||||
|
if let activateOnDemandSetting = activateOnDemandSetting {
|
||||||
|
if (activateOnDemandSetting.isActivateOnDemandEnabled) {
|
||||||
|
switch (activateOnDemandSetting.activateOnDemandOption) {
|
||||||
|
case .none:
|
||||||
|
detailText = "Off"
|
||||||
|
case .useOnDemandOverWifiOrCellular:
|
||||||
|
detailText = "Wifi or cellular"
|
||||||
|
case .useOnDemandOverWifiOnly:
|
||||||
|
detailText = "Wifi only"
|
||||||
|
case .useOnDemandOverCellularOnly:
|
||||||
|
detailText = "Cellular only"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
detailText = "Off"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
detailText = "Off"
|
||||||
|
}
|
||||||
|
detailTextLabel?.text = detailText
|
||||||
|
}
|
||||||
|
|
||||||
|
override func prepareForReuse() {
|
||||||
|
super.prepareForReuse()
|
||||||
|
detailTextLabel?.text = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue