Files
lockdown-iOS-mirror/LockdowniOS/CuratedListsViewController.swift
AliaksandrDvoineu ca2a91ef99 update logic for Firewall restart (#23)
Co-authored-by: Aliaksandr Dvoineu <av.dvoinev@gmail.com>
2023-06-13 13:37:27 +03:00

185 lines
6.1 KiB
Swift

//
// CuratedListsViewController.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 2.06.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
import CocoaLumberjackSwift
final class CuratedListsViewController: UIViewController {
// MARK: - Properties
var didMakeChange = false {
didSet{
}
}
var lockdownBlockLists: [LockdownGroup] = []
var basicLockdownBlockLists: [LockdownGroup] = []
var advancedLockdownBlockLists: [LockdownGroup] = []
let curatedBlockedDomainsTableView = StaticTableView()
private let curatedTableView = UITableView(frame: .zero, style: .insetGrouped)
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .secondarySystemBackground
configureTableView()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reloadTableView()
}
private func configureTableView() {
curatedTableView.delegate = self
curatedTableView.dataSource = self
addTableView(curatedTableView) { tableview in
curatedTableView.anchors.top.pin()
curatedTableView.anchors.leading.pin()
curatedTableView.anchors.trailing.pin()
curatedTableView.anchors.bottom.pin()
}
reloadTableView()
}
func reloadTableView() {
lockdownBlockLists = []
lockdownBlockLists = {
let domains = getLockdownBlockedDomains().lockdownDefaults
let sorted = domains.sorted(by: { $0.key < $1.key })
return Array(sorted.map(\.value))
}()
basicLockdownBlockLists = lockdownBlockLists.filter{ $0.accessLevel == "basic"}
advancedLockdownBlockLists = lockdownBlockLists.filter{ $0.accessLevel == "advanced"}
curatedTableView.reloadData()
}
}
extension CuratedListsViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
let sectionName = UILabel()
sectionName.font = fontBold18
view.addSubview(sectionName)
sectionName.anchors.top.marginsPin()
sectionName.anchors.leading.marginsPin()
sectionName.anchors.bottom.marginsPin()
switch section {
case 0:
sectionName.text = NSLocalizedString("Basic", comment: "")
case 1:
sectionName.text = NSLocalizedString("Premium", comment: "")
let lockImage = UIImageView()
lockImage.image = UIImage(named: "icn_lock")
lockImage.contentMode = .center
view.addSubview(lockImage)
lockImage.anchors.trailing.marginsPin()
lockImage.anchors.centerY.equal(sectionName.anchors.centerY)
if UserDefaults.hasSeenAdvancedPaywall || UserDefaults.hasSeenAnonymousPaywall || UserDefaults.hasSeenUniversalPaywall { lockImage.isHidden = true }
default: break
}
return view
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
40
}
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let numberOfBasicLists = basicLockdownBlockLists.count
let numberOfAdvancedLists = advancedLockdownBlockLists.count
switch section {
case 0: return numberOfBasicLists
case 1: return numberOfAdvancedLists
default: return 0
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
let cell = UITableViewCell()
let blockListView = BlockListView()
blockListView.contents = .lockdownGroup(basicLockdownBlockLists[indexPath.row])
cell.contentView.addSubview(blockListView)
blockListView.anchors.edges.pin()
cell.accessoryType = .disclosureIndicator
return cell
case 1:
let cell = UITableViewCell()
let blockListView = BlockListView()
blockListView.contents = .lockdownGroup(advancedLockdownBlockLists[indexPath.row])
cell.contentView.addSubview(blockListView)
blockListView.anchors.edges.pin()
cell.accessoryType = .disclosureIndicator
return cell
default:
return UITableViewCell()
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
switch indexPath.section {
case 0:
let storyboard = UIStoryboard.main
let target = storyboard.instantiate(BlockListGroupViewController.self)
target.lockdownGroup = basicLockdownBlockLists[indexPath.row]
target.blockListVC = self
self.navigationController?.pushViewController(target, animated: true)
case 1:
if UserDefaults.hasSeenAdvancedPaywall || UserDefaults.hasSeenAnonymousPaywall || UserDefaults.hasSeenUniversalPaywall {
let storyboard = UIStoryboard.main
let target = storyboard.instantiate(BlockListGroupViewController.self)
target.lockdownGroup = advancedLockdownBlockLists[indexPath.row]
target.blockListVC = self
self.navigationController?.pushViewController(target, animated: true)
} else {
let vc = VPNPaywallViewController()
present(vc, animated: true)
}
default:
break
}
}
}
extension CuratedListsViewController: UITableViewDelegate {}