Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import UIKit
import Combine
import Defaults
import Integration
import PushFeature
import DependencyInjection
final class SearchContainerViewModel {
@Dependency var session: SessionType
@Dependency var pushHandler: PushHandling
@KeyObject(.dummyTrafficOn, defaultValue: false) var isCoverTrafficEnabled
@KeyObject(.pushNotifications, defaultValue: false) var pushNotifications
@KeyObject(.askedDummyTrafficOnce, defaultValue: false) var offeredCoverTraffic
var coverTrafficPublisher: AnyPublisher<Void, Never> {
coverTrafficSubject.eraseToAnyPublisher()
}
private let coverTrafficSubject = PassthroughSubject<Void, Never>()
func didAppear() {
verifyCoverTraffic()
verifyNotifications()
}
func didEnableCoverTraffic() {
isCoverTrafficEnabled = true
session.setDummyTraffic(status: true)
}
private func verifyCoverTraffic() {
guard offeredCoverTraffic == false else { return }
offeredCoverTraffic = true
coverTrafficSubject.send()
}
private func verifyNotifications() {
guard pushNotifications == false else { return }
pushHandler.requestAuthorization { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let granted):
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
self.pushNotifications = granted
case .failure:
self.pushNotifications = false
}
}
}
}