diff options
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
4 files changed, 71 insertions, 33 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt index c07657a..fb773b2 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt @@ -33,6 +33,7 @@ import foundation.e.privacymodules.permissions.data.AppOpModes import foundation.e.privacymodules.permissions.data.ApplicationDescription import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlin.random.Random @@ -46,8 +47,8 @@ class FakeLocationStateUseCase( private val appContext: Context, private val coroutineScope: CoroutineScope ) { - // private val _locationMode = MutableStateFlow(LocationMode.REAL_LOCATION) - // val locationMode: StateFlow<LocationMode> = _locationMode + private val _configuredLocationMode = MutableStateFlow<Triple<LocationMode, Float?, Float?>>(Triple(LocationMode.REAL_LOCATION, null, null)) + val configuredLocationMode: StateFlow<Triple<LocationMode, Float?, Float?>> = _configuredLocationMode init { coroutineScope.launch { @@ -60,44 +61,23 @@ class FakeLocationStateUseCase( private val locationManager: LocationManager get() = appContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager - fun getLocationMode(): Triple<LocationMode, Float?, Float?> { - val fakeLocation = localStateRepository.fakeLocation - return if (fakeLocation != null && localStateRepository.locationMode.value == LocationMode.SPECIFIC_LOCATION) { - Triple( - LocationMode.SPECIFIC_LOCATION, - fakeLocation.first, - fakeLocation.second - ) - } else { - Triple(localStateRepository.locationMode.value, null, null) - } - } - private fun acquireLocationPermission() { permissionsModule.toggleDangerousPermission( appDesc, android.Manifest.permission.ACCESS_FINE_LOCATION, true ) - - // permissionsModule.setAppOpMode( - // appDesc, AppOpsManager.OPSTR_COARSE_LOCATION, - // AppOpModes.ALLOWED - // ) - // permissionsModule.setAppOpMode( - // appDesc, AppOpsManager.OPSTR_FINE_LOCATION, - // AppOpModes.ALLOWED - // ) } private fun applySettings(isQuickPrivacyEnabled: Boolean, fakeLocation: Pair<Float, Float>?) { + _configuredLocationMode.value = computeLocationMode(fakeLocation) + if (isQuickPrivacyEnabled && fakeLocation != null) { if (permissionsModule.getAppOpMode(appDesc, AppOpsManager.OPSTR_MOCK_LOCATION) != AppOpModes.ALLOWED) { permissionsModule.setAppOpMode(appDesc, AppOpsManager.OPSTR_MOCK_LOCATION, AppOpModes.ALLOWED) } fakeLocationModule.startFakeLocation() fakeLocationModule.setFakeLocation(fakeLocation.first.toDouble(), fakeLocation.second.toDouble()) - localStateRepository.locationMode.value = if (fakeLocation in citiesRepository.citiesLocationsList) LocationMode.RANDOM_LOCATION - else LocationMode.SPECIFIC_LOCATION + localStateRepository.locationMode.value = configuredLocationMode.value.first } else { fakeLocationModule.stopFakeLocation() localStateRepository.locationMode.value = LocationMode.REAL_LOCATION @@ -105,10 +85,18 @@ class FakeLocationStateUseCase( } fun setSpecificLocation(latitude: Float, longitude: Float) { + if (!localStateRepository.isQuickPrivacyEnabled) { + localStateRepository.setShowQuickPrivacyDisabledMessage(true) + } + setFakeLocation(latitude to longitude) } fun setRandomLocation() { + if (!localStateRepository.isQuickPrivacyEnabled) { + localStateRepository.setShowQuickPrivacyDisabledMessage(true) + } + val randomIndex = Random.nextInt(citiesRepository.citiesLocationsList.size) val location = citiesRepository.citiesLocationsList[randomIndex] @@ -117,12 +105,27 @@ class FakeLocationStateUseCase( private fun setFakeLocation(location: Pair<Float, Float>) { localStateRepository.fakeLocation = location - applySettings(true, location) + applySettings(localStateRepository.isQuickPrivacyEnabled, location) } fun stopFakeLocation() { + if (!localStateRepository.isQuickPrivacyEnabled) { + localStateRepository.setShowQuickPrivacyDisabledMessage(true) + } + localStateRepository.fakeLocation = null - applySettings(true, null) + applySettings(localStateRepository.isQuickPrivacyEnabled, null) + } + + private fun computeLocationMode(fakeLocation: Pair<Float, Float>?): Triple<LocationMode, Float?, Float?> { + return Triple( + when { + fakeLocation == null -> LocationMode.REAL_LOCATION + fakeLocation in citiesRepository.citiesLocationsList -> LocationMode.RANDOM_LOCATION + else -> LocationMode.SPECIFIC_LOCATION + }, + fakeLocation?.first, fakeLocation?.second + ) } val currentLocation = MutableStateFlow<Location?>(null) diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt index fd9430c..36599cb 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt @@ -21,12 +21,26 @@ import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode import foundation.e.privacycentralapp.domain.entities.LocationMode import foundation.e.privacycentralapp.domain.entities.QuickPrivacyState +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.launch + +class GetQuickPrivacyStateUseCase( + private val localStateRepository: LocalStateRepository, + private val coroutineScope: CoroutineScope +) { + + init { + coroutineScope.launch { + localStateRepository.quickPrivacyEnabledFlow.collect { + if (it) resetQuickPrivacyDisabledMessage() + } + } + } -class GetQuickPrivacyStateUseCase(private val localStateRepository: LocalStateRepository) { val quickPrivacyEnabledFlow = localStateRepository.quickPrivacyEnabledFlow - val isQuickPrivacyEnabled get() = localStateRepository.isQuickPrivacyEnabled val quickPrivacyState = combine( localStateRepository.quickPrivacyEnabledFlow, @@ -77,4 +91,10 @@ class GetQuickPrivacyStateUseCase(private val localStateRepository: LocalStateRe val newState = !localStateRepository.isQuickPrivacyEnabled return localStateRepository.setQuickPrivacyReturnIsFirstActivation(newState) } + + val showQuickPrivacyDisabledMessage: StateFlow<Boolean> = localStateRepository.showQuickPrivacyDisabledMessage + + fun resetQuickPrivacyDisabledMessage() { + localStateRepository.setShowQuickPrivacyDisabledMessage(false) + } } diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt index a701eec..0d25d16 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt @@ -25,6 +25,7 @@ import foundation.e.privacymodules.permissions.IPermissionsPrivacyModule import foundation.e.privacymodules.permissions.data.ApplicationDescription import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.callbackFlow @@ -41,6 +42,9 @@ class IpScramblingStateUseCase( coroutineScope: CoroutineScope ) { + val _configuredMode = MutableStateFlow(localStateRepository.isIpScramblingEnabled) + val configuredMode: StateFlow<Boolean> = _configuredMode + val internetPrivacyMode: StateFlow<InternetPrivacyMode> = callbackFlow { val listener = object : IIpScramblerModule.Listener { override fun onStatusChanged(newStatus: IIpScramblerModule.Status) { @@ -78,10 +82,14 @@ class IpScramblingStateUseCase( } fun toggle(hideIp: Boolean) { - if (!localStateRepository.isQuickPrivacyEnabled) return - localStateRepository.isIpScramblingEnabled = hideIp - applySettings(true, hideIp) + _configuredMode.value = hideIp + + if (!localStateRepository.isQuickPrivacyEnabled) { + localStateRepository.setShowQuickPrivacyDisabledMessage(true) + } else { + applySettings(true, hideIp) + } } private fun getHiddenPackageNames(): List<String> { diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt index 5263559..3319eb0 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt @@ -79,6 +79,10 @@ class TrackersStateUseCase( } fun toggleAppWhitelist(appUid: Int, isWhitelisted: Boolean) { + if (!localStateRepository.isQuickPrivacyEnabled) { + localStateRepository.setShowQuickPrivacyDisabledMessage(true) + } + if (appUid == appListsRepository.dummySystemApp.uid) { appListsRepository.getHiddenSystemApps().forEach { blockTrackersPrivacyModule.setWhiteListed(it.uid, isWhitelisted) @@ -89,6 +93,9 @@ class TrackersStateUseCase( } fun blockTracker(appUid: Int, tracker: Tracker, isBlocked: Boolean) { + if (!localStateRepository.isQuickPrivacyEnabled) { + localStateRepository.setShowQuickPrivacyDisabledMessage(true) + } if (appUid == appListsRepository.dummySystemApp.uid) { appListsRepository.getHiddenSystemApps().forEach { blockTrackersPrivacyModule.setWhiteListed(tracker, it.uid, !isBlocked) |
