on-demand: iOS: SSIDs view: Always show the selected SSIDs section

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander 2019-03-09 09:47:35 +05:30 committed by Jason A. Donenfeld
parent 062b4d4b16
commit 64925cab89
3 changed files with 38 additions and 25 deletions

View 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: %@";

View 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)
}
}

View 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)