iOS: Fix stale tunnel being shown on iPad

When the detail view is shown in the iPad and we delete
the current tunnel with a list view swipe rather than the delete button,
the detail view should go blank.

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander
2019-01-23 15:45:24 +05:30
parent 77d4a02139
commit 11e44f9ae5
3 changed files with 10 additions and 15 deletions
@@ -9,7 +9,7 @@ protocol TunnelsManagerListDelegate: class {
func tunnelAdded(at index: Int) func tunnelAdded(at index: Int)
func tunnelModified(at index: Int) func tunnelModified(at index: Int)
func tunnelMoved(from oldIndex: Int, to newIndex: Int) func tunnelMoved(from oldIndex: Int, to newIndex: Int)
func tunnelRemoved(at index: Int) func tunnelRemoved(at index: Int, tunnel: TunnelContainer)
} }
protocol TunnelsManagerActivationDelegate: class { protocol TunnelsManagerActivationDelegate: class {
@@ -65,7 +65,7 @@ class TunnelsManager {
if !loadedTunnelProviders.contains(where: { $0.tunnelConfiguration == currentTunnel.tunnelConfiguration }) { if !loadedTunnelProviders.contains(where: { $0.tunnelConfiguration == currentTunnel.tunnelConfiguration }) {
// Tunnel was deleted outside the app // Tunnel was deleted outside the app
self.tunnels.remove(at: index) self.tunnels.remove(at: index)
self.tunnelsListDelegate?.tunnelRemoved(at: index) self.tunnelsListDelegate?.tunnelRemoved(at: index, tunnel: currentTunnel)
} }
} }
for loadedTunnelProvider in loadedTunnelProviders { for loadedTunnelProvider in loadedTunnelProviders {
@@ -212,7 +212,7 @@ class TunnelsManager {
if let self = self { if let self = self {
let index = self.tunnels.firstIndex(of: tunnel)! let index = self.tunnels.firstIndex(of: tunnel)!
self.tunnels.remove(at: index) self.tunnels.remove(at: index)
self.tunnelsListDelegate?.tunnelRemoved(at: index) self.tunnelsListDelegate?.tunnelRemoved(at: index, tunnel: tunnel)
} }
completionHandler(nil) completionHandler(nil)
} }
@@ -239,14 +239,6 @@ extension TunnelDetailTableViewController {
return return
} }
} }
if self.splitViewController?.isCollapsed != false {
self.navigationController?.navigationController?.popToRootViewController(animated: true)
} else {
let detailVC = UIViewController()
detailVC.view.backgroundColor = .white
let detailNC = UINavigationController(rootViewController: detailVC)
self.showDetailViewController(detailNC, sender: self)
}
} }
} }
return cell return cell
@@ -31,6 +31,8 @@ class TunnelsListTableViewController: UIViewController {
return busyIndicator return busyIndicator
}() }()
var detailDisplayedTunnel: TunnelContainer?
override func loadView() { override func loadView() {
view = UIView() view = UIView()
view.backgroundColor = .white view.backgroundColor = .white
@@ -217,6 +219,7 @@ extension TunnelsListTableViewController: UITableViewDelegate {
let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC) let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC)
tunnelDetailNC.restorationIdentifier = "DetailNC" tunnelDetailNC.restorationIdentifier = "DetailNC"
showDetailViewController(tunnelDetailNC, sender: self) // Shall get propagated up to the split-vc showDetailViewController(tunnelDetailNC, sender: self) // Shall get propagated up to the split-vc
detailDisplayedTunnel = tunnel
} }
func tableView(_ tableView: UITableView, func tableView(_ tableView: UITableView,
@@ -251,19 +254,19 @@ extension TunnelsListTableViewController: TunnelsManagerListDelegate {
tableView.moveRow(at: IndexPath(row: oldIndex, section: 0), to: IndexPath(row: newIndex, section: 0)) tableView.moveRow(at: IndexPath(row: oldIndex, section: 0), to: IndexPath(row: newIndex, section: 0))
} }
func tunnelRemoved(at index: Int) { func tunnelRemoved(at index: Int, tunnel: TunnelContainer) {
let selectedIndex = tableView.indexPathForSelectedRow?.row
tableView.deleteRows(at: [IndexPath(row: index, section: 0)], with: .automatic) tableView.deleteRows(at: [IndexPath(row: index, section: 0)], with: .automatic)
centeredAddButton.isHidden = tunnelsManager?.numberOfTunnels() ?? 0 > 0 centeredAddButton.isHidden = tunnelsManager?.numberOfTunnels() ?? 0 > 0
if let selectedIndex = selectedIndex, selectedIndex == index, let splitViewController = splitViewController { if detailDisplayedTunnel == tunnel, let splitViewController = splitViewController {
if splitViewController.isCollapsed != false { if splitViewController.isCollapsed != false {
(splitViewController.viewControllers[0] as? UINavigationController)?.popViewController(animated: false) (splitViewController.viewControllers[0] as? UINavigationController)?.popToRootViewController(animated: false)
} else { } else {
let detailVC = UIViewController() let detailVC = UIViewController()
detailVC.view.backgroundColor = .white detailVC.view.backgroundColor = .white
let detailNC = UINavigationController(rootViewController: detailVC) let detailNC = UINavigationController(rootViewController: detailVC)
splitViewController.showDetailViewController(detailNC, sender: self) splitViewController.showDetailViewController(detailNC, sender: self)
} }
detailDisplayedTunnel = nil
if let presentedNavController = self.presentedViewController as? UINavigationController, presentedNavController.viewControllers.first is TunnelEditTableViewController { if let presentedNavController = self.presentedViewController as? UINavigationController, presentedNavController.viewControllers.first is TunnelEditTableViewController {
self.presentedViewController?.dismiss(animated: false, completion: nil) self.presentedViewController?.dismiss(animated: false, completion: nil)
} }