summaryrefslogtreecommitdiff
path: root/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt')
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt95
1 files changed, 13 insertions, 82 deletions
diff --git a/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt b/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt
index 79c79f7..00613dd 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt
@@ -18,43 +18,27 @@
package foundation.e.advancedprivacy.domain.usecases
-import android.content.Intent
-import foundation.e.advancedprivacy.common.isStandaloneBuild
import foundation.e.advancedprivacy.data.repositories.AppListsRepository
-import foundation.e.advancedprivacy.data.repositories.LocalStateRepository
-import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
-import foundation.e.advancedprivacy.domain.entities.FeatureServiceState
-import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule
-import foundation.e.advancedprivacy.ipscrambler.OrbotServiceSupervisor
-import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersServiceSupervisor
+import foundation.e.advancedprivacy.domain.entities.FeatureState
+import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository
+import foundation.e.advancedprivacy.ipscrambler.OrbotSupervisor
import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.launch
class IpScramblingStateUseCase(
- private val orbotServiceSupervisor: OrbotServiceSupervisor,
- private val permissionsPrivacyModule: IPermissionsPrivacyModule,
- private val appDesc: ApplicationDescription,
+ private val orbotSupervisor: OrbotSupervisor,
private val localStateRepository: LocalStateRepository,
private val appListsRepository: AppListsRepository,
- private val trackersServiceSupervisor: TrackersServiceSupervisor,
private val coroutineScope: CoroutineScope
) {
- val internetPrivacyMode: StateFlow<FeatureServiceState> = orbotServiceSupervisor.state
+ val internetPrivacyMode: StateFlow<FeatureState> = orbotSupervisor.state
init {
- orbotServiceSupervisor.requestStatus()
+ orbotSupervisor.requestStatus()
- coroutineScope.launch(Dispatchers.Default) {
- localStateRepository.ipScramblingSetting.collect {
- applySettings(it)
- }
- }
-
- orbotServiceSupervisor.state.map {
+ orbotSupervisor.state.map {
localStateRepository.internetPrivacyMode.value = it
}.launchIn(coroutineScope)
}
@@ -68,7 +52,7 @@ class IpScramblingStateUseCase(
}
val bypassTorApps: Set<String> get() {
- var whitelist = orbotServiceSupervisor.appList
+ var whitelist = orbotSupervisor.appList
if (getHiddenPackageNames().any { it in whitelist }) {
val mutable = whitelist.toMutableSet()
mutable.removeAll(getHiddenPackageNames())
@@ -86,7 +70,7 @@ class IpScramblingStateUseCase(
fun toggleBypassTor(packageName: String) {
val visibleList = bypassTorApps.toMutableSet()
- val rawList = orbotServiceSupervisor.appList.toMutableSet()
+ val rawList = orbotSupervisor.appList.toMutableSet()
if (visibleList.contains(packageName)) {
if (packageName == appListsRepository.dummySystemApp.packageName) {
@@ -105,69 +89,16 @@ class IpScramblingStateUseCase(
rawList.add(packageName)
}
}
- orbotServiceSupervisor.appList = rawList
+ orbotSupervisor.appList = rawList
}
- val availablesLocations: List<String> = orbotServiceSupervisor.getAvailablesLocations().sorted()
+ val availablesLocations: List<String> = orbotSupervisor.getAvailablesLocations().sorted()
- val exitCountry: String get() = orbotServiceSupervisor.getExitCountryCode()
+ val exitCountry: String get() = orbotSupervisor.getExitCountryCode()
suspend fun setExitCountry(locationId: String) {
if (locationId != exitCountry) {
- orbotServiceSupervisor.setExitCountryCode(locationId)
+ orbotSupervisor.setExitCountryCode(locationId)
}
}
-
- private suspend fun applySettings(isIpScramblingEnabled: Boolean) {
- val currentMode = localStateRepository.internetPrivacyMode.value
- when {
- isIpScramblingEnabled && currentMode in setOf(FeatureServiceState.OFF, FeatureServiceState.STOPPING) ->
- applyStartIpScrambling()
-
- !isIpScramblingEnabled && currentMode in setOf(FeatureServiceState.ON, FeatureServiceState.STARTING) ->
- orbotServiceSupervisor.stop()
-
- else -> {}
- }
- }
-
- private suspend fun applyStartIpScrambling() {
- val authorizeVpnIntent = orbotServiceSupervisor.prepareAndroidVpn()
- if (authorizeVpnIntent == null) {
- localStateRepository.emitStartVpnDisclaimer(null)
-
- startIpScrambling()
- return
- }
-
- acquireVpnAuthorization(authorizeVpnIntent)
- }
-
- private suspend fun acquireVpnAuthorization(authorizeVpnIntent: Intent) {
- val authorized = permissionsPrivacyModule.setVpnPackageAuthorization(appDesc.packageName)
- val alwaysOnVpnPackage = permissionsPrivacyModule.getAlwaysOnVpnPackage()
-
- when {
- authorized && alwaysOnVpnPackage == null -> {
- localStateRepository.emitStartVpnDisclaimer(null)
- startIpScrambling()
- }
- authorized && alwaysOnVpnPackage != null -> {
- localStateRepository.emitOtherVpnRunning(
- permissionsPrivacyModule.getApplicationDescription(
- packageName = alwaysOnVpnPackage,
- withIcon = false
- )
- )
- localStateRepository.setIpScramblingSetting(enabled = false)
- }
- else -> localStateRepository.emitStartVpnDisclaimer(authorizeVpnIntent)
- }
- }
-
- fun startIpScrambling() {
- localStateRepository.internetPrivacyMode.value = FeatureServiceState.STARTING
- orbotServiceSupervisor.setDNSFilter((trackersServiceSupervisor.dnsFilterForIpScrambling))
- orbotServiceSupervisor.start(enableNotification = isStandaloneBuild)
- }
}