@@ -13,17 +13,18 @@ final class ListSettingsViewController: UIViewController {
13
13
14
14
// MARK: - Properties
15
15
16
+ var listName = " "
17
+ var descriptionText = " "
18
+
16
19
var blockedList : UserBlockListsGroup ?
17
20
18
21
weak var blockListVC : BlockListViewController ?
19
22
20
- var titleName = " "
21
-
22
23
var didMakeChange = false
23
24
24
25
lazy var navigationView : ConfiguredNavigationView = {
25
26
let view = ConfiguredNavigationView ( )
26
- view. titleLabel. text = titleName
27
+ view. titleLabel. text = listName
27
28
view. leftNavButton. setTitle ( NSLocalizedString ( " BACK " , comment: " " ) , for: . normal)
28
29
view. leftNavButton. setImage ( UIImage ( systemName: " chevron.left " ) , for: . normal)
29
30
view. leftNavButton. addTarget ( self , action: #selector( backButtonClicked) , for: . touchUpInside)
@@ -36,13 +37,15 @@ final class ListSettingsViewController: UIViewController {
36
37
private lazy var switchBlockingView : SwitchBlockingView = {
37
38
let view = SwitchBlockingView ( )
38
39
view. titleLabel. text = NSLocalizedString ( " Blocking " , comment: " " )
40
+ view. switchView. addTarget ( self , action: #selector( toggleBlocking) , for: . valueChanged)
39
41
return view
40
42
} ( )
41
43
42
44
private lazy var subMenu : ListsSubmenuView = {
43
45
let view = ListsSubmenuView ( )
44
46
view. topButton. setTitle ( NSLocalizedString ( " Export List... " , comment: " " ) , for: . normal)
45
47
view. topButton. setImage ( UIImage ( named: " icn_export_folder " ) , for: . normal)
48
+ view. topButton. addTarget ( self , action: #selector( exportList) , for: . touchUpInside)
46
49
view. bottomButton. setTitle ( NSLocalizedString ( " Delete List... " , comment: " " ) , for: . normal)
47
50
view. bottomButton. setImage ( UIImage ( named: " icn_trash " ) , for: . normal)
48
51
view. bottomButton. addTarget ( self , action: #selector( deleteList) , for: . touchUpInside)
@@ -55,6 +58,10 @@ final class ListSettingsViewController: UIViewController {
55
58
override func viewDidLoad( ) {
56
59
super. viewDidLoad ( )
57
60
view. backgroundColor = . secondarySystemBackground
61
+ if let list = blockedList {
62
+ switchBlockingView. switchView. isOn = list. enabled
63
+ }
64
+
58
65
configureUI ( )
59
66
configureTableView ( )
60
67
}
@@ -84,8 +91,9 @@ final class ListSettingsViewController: UIViewController {
84
91
subMenu. anchors. trailing. marginsPin ( )
85
92
subMenu. isHidden = true
86
93
87
- // let tap = UITapGestureRecognizer(target: self, action: #selector(hideSubmenu))
88
- // view.addGestureRecognizer(tap)
94
+ let tap = UITapGestureRecognizer ( target: self , action: #selector( hideSubmenu) )
95
+ tap. cancelsTouchesInView = false
96
+ view. addGestureRecognizer ( tap)
89
97
}
90
98
91
99
func configureTableView( ) {
@@ -144,10 +152,12 @@ extension ListSettingsViewController: UITableViewDataSource {
144
152
}
145
153
146
154
func tableView( _ tableView: UITableView , numberOfRowsInSection section: Int ) -> Int {
155
+ let userBlockedLists = getBlockedLists ( ) . userBlockListsDefaults
156
+ let numberOfDomains = userBlockedLists [ listName] ? . domains. count
147
157
148
158
switch section {
149
159
case 0 , 1 : return 1
150
- case 2 : return getUserBlockedDomains ( ) . count
160
+ case 2 : return numberOfDomains ?? 0
151
161
default : return 0
152
162
}
153
163
}
@@ -157,27 +167,29 @@ extension ListSettingsViewController: UITableViewDataSource {
157
167
}
158
168
159
169
func tableView( _ tableView: UITableView , cellForRowAt indexPath: IndexPath ) -> UITableViewCell {
160
-
161
- let domains = getUserBlockedDomains ( )
170
+ let userBlockedLists = getBlockedLists ( ) . userBlockListsDefaults
171
+ let domains = userBlockedLists [ listName ] ? . domains
162
172
163
173
switch indexPath. section {
164
174
case 0 :
165
175
guard let cell = tableView. dequeueReusableCell ( withIdentifier: ListBlockedTableViewCell . identifier, for: indexPath) as? ListBlockedTableViewCell else {
166
176
return UITableViewCell ( )
167
177
}
168
- cell. label. text = title
178
+ cell. label. text = userBlockedLists [ listName ] ? . name
169
179
return cell
170
180
case 1 :
171
181
guard let cell = tableView. dequeueReusableCell ( withIdentifier: ListBlockedTableViewCell . identifier, for: indexPath) as? ListBlockedTableViewCell else {
172
182
return UITableViewCell ( )
173
183
}
174
- cell. label. text = " Description "
184
+
185
+ cell. label. text = userBlockedLists [ listName] ? . description ?? " Description "
186
+
175
187
return cell
176
188
case 2 :
177
189
guard let cell = tableView. dequeueReusableCell ( withIdentifier: DomainsBlockedTableViewCell . identifier, for: indexPath) as? DomainsBlockedTableViewCell else {
178
190
return UITableViewCell ( )
179
191
}
180
- cell. label. text = " reroi.com "
192
+ cell. label. text = domains ? [ indexPath . row ] . name
181
193
return cell
182
194
default :
183
195
return UITableViewCell ( )
@@ -189,9 +201,11 @@ extension ListSettingsViewController: UITableViewDataSource {
189
201
switch indexPath. section {
190
202
case 0 :
191
203
let vc = ListDetailViewController ( )
204
+ vc. listName = listName
192
205
navigationController? . pushViewController ( vc, animated: true )
193
206
case 1 :
194
207
let vc = ListDescriptionViewController ( )
208
+ vc. listName = listName
195
209
navigationController? . pushViewController ( vc, animated: true )
196
210
default :
197
211
break
@@ -213,7 +227,13 @@ extension ListSettingsViewController {
213
227
func saveNewDomain( userEnteredDomainName: String ) {
214
228
didMakeChange = true
215
229
DDLogInfo ( " Adding custom domain - \( userEnteredDomainName) " )
216
- addUserBlockedDomain ( domain: userEnteredDomainName. lowercased ( ) )
230
+
231
+ let domains = getBlockedLists ( ) . userBlockListsDefaults
232
+ let userList = domains [ listName]
233
+
234
+ if let list = userList {
235
+ addDomainToBlockedList ( domain: userEnteredDomainName, for: list. name. lowercased ( ) )
236
+ }
217
237
tableView. reloadData ( )
218
238
}
219
239
@@ -253,8 +273,51 @@ extension ListSettingsViewController {
253
273
style: UIAlertAction . Style. destructive,
254
274
handler: { [ weak self] ( _) in
255
275
guard let self else { return }
256
- self . tableView. reloadData ( )
276
+ if let vc = self . blockListVC {
277
+ vc. didMakeChange = true
278
+ }
279
+
280
+
281
+ if let list = self . blockedList {
282
+ deleteBlockedList ( listName: list. name)
283
+ }
284
+ self . backButtonClicked ( )
257
285
} ) )
258
286
self . present ( alert, animated: true , completion: nil )
259
287
}
288
+
289
+ @objc func toggleBlocking( sender: UISwitch ) {
290
+ let sender = switchBlockingView. switchView
291
+ setBlockingEnabled ( sender. isOn)
292
+ }
293
+
294
+ func setBlockingEnabled( _ isEnabled: Bool ) {
295
+ if let vc = self . blockListVC {
296
+ vc. didMakeChange = true
297
+ }
298
+
299
+ let domains = getBlockedLists ( ) . userBlockListsDefaults
300
+ var userList = domains [ listName]
301
+
302
+ userList? . enabled = isEnabled
303
+
304
+ var data = getBlockedLists ( )
305
+ data. userBlockListsDefaults [ listName] = userList
306
+ let encodedData = try ? JSONEncoder ( ) . encode ( data)
307
+ defaults. set ( encodedData, forKey: kUserBlockedLists)
308
+ }
309
+
310
+ @objc func exportList( _ sender: UIButton ) {
311
+ let domains = getBlockedLists ( ) . userBlockListsDefaults
312
+ var domainsList = domains [ listName] ? . domains
313
+
314
+ guard let url = domainsList? . first? . exportToURL ( ) else { return }
315
+
316
+ let activity = UIActivityViewController (
317
+ activityItems: [ " Export your domains " , url] ,
318
+ applicationActivities: nil
319
+ )
320
+ activity. popoverPresentationController? . sourceView = sender
321
+ present ( activity, animated: true , completion: nil )
322
+ }
260
323
}
0 commit comments