]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
iOS: Fix stale tunnel being shown on iPad
authorRoopesh Chander <roop@roopc.net>
Wed, 23 Jan 2019 10:15:24 +0000 (15:45 +0530)
committerRoopesh Chander <roop@roopc.net>
Wed, 23 Jan 2019 10:41:55 +0000 (16:11 +0530)
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>
WireGuard/WireGuard/Tunnel/TunnelsManager.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift

index 82d10a3890ea0c12dd64a2ff5e48fc138fc4be6e..75d823048779243cabc135f98e0329da516a7b5f 100644 (file)
@@ -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)
         }
index 9531c171409e1e8307213227dfb8a06c7bc72e24..867eda760a515be4b904c0d05c818b744baa857c 100644 (file)
@@ -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
index 6a2f3a1c15ba7e443f4206f20996018887e9a753..ccef4cd748fb0099cf3e42585f1b2c4ec5f03d96 100644 (file)
@@ -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)
             }