From d272cc2ab3486b84ad34921baf1d6ca8626a3a75 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Wed, 23 Jan 2019 15:45:24 +0530 Subject: [PATCH] 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. --- WireGuard/WireGuard/Tunnel/TunnelsManager.swift | 6 +++--- .../TunnelDetailTableViewController.swift | 8 -------- .../TunnelsListTableViewController.swift | 11 +++++++---- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index 82d10a3..75d8230 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -9,7 +9,7 @@ protocol TunnelsManagerListDelegate: class { func tunnelAdded(at index: Int) func tunnelModified(at index: Int) func tunnelMoved(from oldIndex: Int, to newIndex: Int) - func tunnelRemoved(at index: Int) + func tunnelRemoved(at index: Int, tunnel: TunnelContainer) } protocol TunnelsManagerActivationDelegate: class { @@ -65,7 +65,7 @@ class TunnelsManager { if !loadedTunnelProviders.contains(where: { $0.tunnelConfiguration == currentTunnel.tunnelConfiguration }) { // Tunnel was deleted outside the app self.tunnels.remove(at: index) - self.tunnelsListDelegate?.tunnelRemoved(at: index) + self.tunnelsListDelegate?.tunnelRemoved(at: index, tunnel: currentTunnel) } } for loadedTunnelProvider in loadedTunnelProviders { @@ -212,7 +212,7 @@ class TunnelsManager { if let self = self { let index = self.tunnels.firstIndex(of: tunnel)! self.tunnels.remove(at: index) - self.tunnelsListDelegate?.tunnelRemoved(at: index) + self.tunnelsListDelegate?.tunnelRemoved(at: index, tunnel: tunnel) } completionHandler(nil) } diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift index 9531c17..867eda7 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift @@ -239,14 +239,6 @@ extension TunnelDetailTableViewController { 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 diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift index 6a2f3a1..ccef4cd 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift @@ -31,6 +31,8 @@ class TunnelsListTableViewController: UIViewController { return busyIndicator }() + var detailDisplayedTunnel: TunnelContainer? + override func loadView() { view = UIView() view.backgroundColor = .white @@ -217,6 +219,7 @@ extension TunnelsListTableViewController: UITableViewDelegate { let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC) tunnelDetailNC.restorationIdentifier = "DetailNC" showDetailViewController(tunnelDetailNC, sender: self) // Shall get propagated up to the split-vc + detailDisplayedTunnel = tunnel } 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)) } - func tunnelRemoved(at index: Int) { - let selectedIndex = tableView.indexPathForSelectedRow?.row + func tunnelRemoved(at index: Int, tunnel: TunnelContainer) { tableView.deleteRows(at: [IndexPath(row: index, section: 0)], with: .automatic) 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 { - (splitViewController.viewControllers[0] as? UINavigationController)?.popViewController(animated: false) + (splitViewController.viewControllers[0] as? UINavigationController)?.popToRootViewController(animated: false) } else { let detailVC = UIViewController() detailVC.view.backgroundColor = .white let detailNC = UINavigationController(rootViewController: detailVC) splitViewController.showDetailViewController(detailNC, sender: self) } + detailDisplayedTunnel = nil if let presentedNavController = self.presentedViewController as? UINavigationController, presentedNavController.viewControllers.first is TunnelEditTableViewController { self.presentedViewController?.dismiss(animated: false, completion: nil) }