]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
on-demand: iOS: SSIDs view: Always show the selected SSIDs section
authorRoopesh Chander <roop@roopc.net>
Sat, 9 Mar 2019 04:17:35 +0000 (09:47 +0530)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 Mar 2019 05:46:55 +0000 (06:46 +0100)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/Base.lproj/Localizable.strings
WireGuard/WireGuard/UI/iOS/View/TextCell.swift
WireGuard/WireGuard/UI/iOS/ViewController/SSIDOptionEditTableViewController.swift

index fa271ca9ecbd4dff9ddad63a7b7e32d806017980..de2a8c2f3ff5bb5e1e60e28d10b9a74b89c65334 100644 (file)
@@ -90,8 +90,9 @@
 "tunnelOnDemandOnlySelectedSSIDs" = "Only selected SSIDs";
 "tunnelOnDemandExceptSelectedSSIDs" = "Except selected SSIDs";
 
-"tunnelOnDemandSelectionViewTitle" = "Select SSIDs";
-"tunnelOnDemandSectionTitleSelectedSSIDs" = "Selected SSIDs";
+"tunnelOnDemandSSIDViewTitle" = "SSIDs";
+"tunnelOnDemandSectionTitleSelectedSSIDs" = "SSIDs";
+"tunnelOnDemandNoSSIDs" = "No SSIDs";
 "tunnelOnDemandSectionTitleAddSSIDs" = "Add SSIDs";
 "tunnelOnDemandAddMessageAddNewSSID" = "Add manually";
 "tunnelOnDemandAddMessageAddConnectedSSID (%@)" = "Connected: %@";
index 303f9c7ac477e1a2bd6e403119dd370fc7240303..ba9b37f855ca02f62ff9fef763c07708ef63d167 100644 (file)
@@ -17,8 +17,18 @@ class TextCell: UITableViewCell {
         fatalError("init(coder:) has not been implemented")
     }
 
+    func setTextColor(_ color: UIColor) {
+        textLabel?.textColor = color
+    }
+
+    func setTextAlignment(_ alignment: NSTextAlignment) {
+        textLabel?.textAlignment = alignment
+    }
+
     override func prepareForReuse() {
         super.prepareForReuse()
         message = ""
+        setTextColor(.black)
+        setTextAlignment(.left)
     }
 }
index f83d4789df07dc4eb5462e38a03df302980aa267..1256f562f7ab92eedc40124e110931c31a11a9ae 100644 (file)
@@ -50,7 +50,7 @@ class SSIDOptionEditTableViewController: UITableViewController {
 
     override func viewDidLoad() {
         super.viewDidLoad()
-        title = tr("tunnelOnDemandSelectionViewTitle")
+        title = tr("tunnelOnDemandSSIDViewTitle")
 
         tableView.estimatedRowHeight = 44
         tableView.rowHeight = UITableView.automaticDimension
@@ -66,9 +66,7 @@ class SSIDOptionEditTableViewController: UITableViewController {
         sections.removeAll()
         sections.append(.ssidOption)
         if selectedOption != .anySSID {
-            if !selectedSSIDs.isEmpty {
-                sections.append(.selectedSSIDs)
-            }
+            sections.append(.selectedSSIDs)
             sections.append(.addSSIDs)
         }
     }
@@ -112,7 +110,7 @@ extension SSIDOptionEditTableViewController {
         case .ssidOption:
             return ssidOptionFields.count
         case .selectedSSIDs:
-            return selectedSSIDs.count
+            return selectedSSIDs.isEmpty ? 1 : selectedSSIDs.count
         case .addSSIDs:
             return addSSIDRows.count
         }
@@ -123,7 +121,11 @@ extension SSIDOptionEditTableViewController {
         case .ssidOption:
             return ssidOptionCell(for: tableView, at: indexPath)
         case .selectedSSIDs:
-            return selectedSSIDCell(for: tableView, at: indexPath)
+            if !selectedSSIDs.isEmpty {
+                return selectedSSIDCell(for: tableView, at: indexPath)
+            } else {
+                return noSSIDsCell(for: tableView, at: indexPath)
+            }
         case .addSSIDs:
             return addSSIDCell(for: tableView, at: indexPath)
         }
@@ -133,7 +135,9 @@ extension SSIDOptionEditTableViewController {
         switch sections[indexPath.section] {
         case .ssidOption:
             return false
-        case .selectedSSIDs, .addSSIDs:
+        case .selectedSSIDs:
+            return !selectedSSIDs.isEmpty
+        case .addSSIDs:
             return true
         }
     }
@@ -169,6 +173,14 @@ extension SSIDOptionEditTableViewController {
         return cell
     }
 
+    private func noSSIDsCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
+        let cell: TextCell = tableView.dequeueReusableCell(for: indexPath)
+        cell.message = tr("tunnelOnDemandNoSSIDs")
+        cell.setTextColor(.gray)
+        cell.setTextAlignment(.center)
+        return cell
+    }
+
     private func selectedSSIDCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
         let cell: EditableTextCell = tableView.dequeueReusableCell(for: indexPath)
         cell.message = selectedSSIDs[indexPath.row]
@@ -203,18 +215,15 @@ extension SSIDOptionEditTableViewController {
         case .selectedSSIDs:
             assert(editingStyle == .delete)
             selectedSSIDs.remove(at: indexPath.row)
-            loadSections()
-            let hasSelectedSSIDsSection = sections.contains(.selectedSSIDs)
-            if hasSelectedSSIDsSection {
+            if !selectedSSIDs.isEmpty {
                 tableView.deleteRows(at: [indexPath], with: .automatic)
             } else {
-                tableView.deleteSections(IndexSet(integer: indexPath.section), with: .automatic)
+                tableView.reloadRows(at: [indexPath], with: .automatic)
             }
             loadAddSSIDRows()
             updateTableViewAddSSIDRows()
         case .addSSIDs:
             assert(editingStyle == .insert)
-            let hasSelectedSSIDsSection = sections.contains(.selectedSSIDs)
             let newSSID: String
             switch addSSIDRows[indexPath.row] {
             case .addConnectedSSID(let connectedSSID):
@@ -226,8 +235,8 @@ extension SSIDOptionEditTableViewController {
             loadSections()
             let selectedSSIDsSection = sections.firstIndex(of: .selectedSSIDs)!
             let indexPath = IndexPath(row: selectedSSIDs.count - 1, section: selectedSSIDsSection)
-            if !hasSelectedSSIDsSection {
-                tableView.insertSections(IndexSet(integer: selectedSSIDsSection), with: .automatic)
+            if selectedSSIDs.count == 1 {
+                tableView.reloadRows(at: [indexPath], with: .automatic)
             } else {
                 tableView.insertRows(at: [indexPath], with: .automatic)
             }
@@ -240,12 +249,6 @@ extension SSIDOptionEditTableViewController {
             }
         }
     }
-
-    func lastSelectedSSIDItemIndexPath() -> IndexPath? {
-        guard !selectedSSIDs.isEmpty else { return nil }
-        guard let section = sections.firstIndex(of: .selectedSSIDs) else { return nil }
-        return IndexPath(row: selectedSSIDs.count - 1, section: section)
-    }
 }
 
 extension SSIDOptionEditTableViewController {
@@ -262,15 +265,14 @@ extension SSIDOptionEditTableViewController {
         switch sections[indexPath.section] {
         case .ssidOption:
             let previousOption = selectedOption
-            let previousSectionCount = sections.count
             selectedOption = ssidOptionFields[indexPath.row]
             loadSections()
             if previousOption == .anySSID {
-                let indexSet = selectedSSIDs.isEmpty ? IndexSet(integer: 1) : IndexSet(1 ... 2)
+                let indexSet = IndexSet(1 ... 2)
                 tableView.insertSections(indexSet, with: .fade)
             }
             if selectedOption == .anySSID {
-                let indexSet = previousSectionCount == 2 ? IndexSet(integer: 1) : IndexSet(1 ... 2)
+                let indexSet = IndexSet(1 ... 2)
                 tableView.deleteSections(indexSet, with: .fade)
             }
             tableView.reloadSections(IndexSet(integer: indexPath.section), with: .none)