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:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user