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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/*
* Copyright (C) 2021 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package foundation.e.advancedprivacy.domain.usecases
import foundation.e.advancedprivacy.data.repositories.LocalStateRepository
import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
import foundation.e.advancedprivacy.domain.entities.InternetPrivacyMode
import foundation.e.advancedprivacy.domain.entities.LocationMode
import foundation.e.advancedprivacy.domain.entities.QuickPrivacyState
import foundation.e.advancedprivacy.domain.entities.TrackerMode
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
class GetQuickPrivacyStateUseCase(
private val localStateRepository: LocalStateRepository,
) {
val quickPrivacyState: Flow<QuickPrivacyState> = combine(
localStateRepository.blockTrackers,
localStateRepository.areAllTrackersBlocked,
localStateRepository.locationMode,
localStateRepository.internetPrivacyMode
) { isBlockTrackers, isAllTrackersBlocked, locationMode, internetPrivacyMode ->
when {
!isBlockTrackers &&
locationMode == LocationMode.REAL_LOCATION &&
internetPrivacyMode == InternetPrivacyMode.REAL_IP -> QuickPrivacyState.DISABLED
isAllTrackersBlocked &&
locationMode != LocationMode.REAL_LOCATION &&
internetPrivacyMode in listOf(
InternetPrivacyMode.HIDE_IP,
InternetPrivacyMode.HIDE_IP_LOADING
) -> QuickPrivacyState.FULL_ENABLED
else -> QuickPrivacyState.ENABLED
}
}
val trackerMode: Flow<TrackerMode> = combine(
localStateRepository.blockTrackers,
localStateRepository.areAllTrackersBlocked
) { isBlockTrackers, isAllTrackersBlocked ->
when {
isBlockTrackers && isAllTrackersBlocked -> TrackerMode.DENIED
isBlockTrackers && !isAllTrackersBlocked -> TrackerMode.CUSTOM
else -> TrackerMode.VULNERABLE
}
}
val isLocationHidden: Flow<Boolean> = localStateRepository.locationMode.map { locationMode ->
locationMode != LocationMode.REAL_LOCATION
}
val locationMode: StateFlow<LocationMode> = localStateRepository.locationMode
val ipScramblingMode: Flow<InternetPrivacyMode> = localStateRepository.internetPrivacyMode
fun toggleTrackers(enabled: Boolean?) {
val value = enabled ?: !localStateRepository.blockTrackers.value
if (value != localStateRepository.blockTrackers.value) {
localStateRepository.setBlockTrackers(value)
}
}
fun toggleLocation(enabled: Boolean?) {
val value = enabled ?: !localStateRepository.fakeLocationEnabled.value
if (value != localStateRepository.fakeLocationEnabled.value) {
localStateRepository.setFakeLocationEnabled(value)
}
}
fun toggleIpScrambling(enabled: Boolean?) {
val value = enabled ?: !localStateRepository.ipScramblingSetting.value
if (value != localStateRepository.ipScramblingSetting.value) {
localStateRepository.setIpScramblingSetting(value)
}
}
val otherVpnRunning: SharedFlow<ApplicationDescription> = localStateRepository.otherVpnRunning
}
|