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.kt50
1 files changed, 37 insertions, 13 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 a7ed660..27e7fe4 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
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2021 E FOUNDATION, 2023 MURENA SAS
+ * Copyright (C) 2023 MURENA SAS
+ * 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
@@ -17,6 +18,7 @@
package foundation.e.advancedprivacy.domain.usecases
+import android.content.Intent
import foundation.e.advancedprivacy.data.repositories.AppListsRepository
import foundation.e.advancedprivacy.data.repositories.LocalStateRepository
import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
@@ -139,7 +141,7 @@ class IpScramblingStateUseCase(
ipScramblerModule.appList = rawList
}
- private fun applySettings(isIpScramblingEnabled: Boolean) {
+ private suspend fun applySettings(isIpScramblingEnabled: Boolean) {
val currentMode = localStateRepository.internetPrivacyMode.value
when {
isIpScramblingEnabled && currentMode in setOf(REAL_IP, REAL_IP_LOADING) ->
@@ -152,23 +154,45 @@ class IpScramblingStateUseCase(
}
}
- private fun applyStartIpScrambling() {
- localStateRepository.internetPrivacyMode.value = HIDE_IP_LOADING
- ipScramblerModule.prepareAndroidVpn()?.let {
- permissionsPrivacyModule.setVpnPackageAuthorization(appDesc.packageName)
- permissionsPrivacyModule.getAlwaysOnVpnPackage()
- }?.let {
- coroutineScope.launch {
+ private suspend fun applyStartIpScrambling() {
+ val authorizeVpnIntent = ipScramblerModule.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 = it, withIcon = false)
+ permissionsPrivacyModule.getApplicationDescription(
+ packageName = alwaysOnVpnPackage,
+ withIcon = false
+ )
)
+ localStateRepository.setIpScramblingSetting(enabled = false)
}
- localStateRepository.setIpScramblingSetting(enabled = false)
- } ?: run {
- ipScramblerModule.start(enableNotification = false)
+ else -> localStateRepository.emitStartVpnDisclaimer(authorizeVpnIntent)
}
}
+ fun startIpScrambling() {
+ localStateRepository.internetPrivacyMode.value = HIDE_IP_LOADING
+ ipScramblerModule.start(enableNotification = false) // change the false ?
+ }
+
private fun map(status: IpScramblerModule.Status): InternetPrivacyMode {
return when (status) {
IpScramblerModule.Status.OFF -> REAL_IP