diff options
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.kt | 50 |
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 |