From 66baccf4d687926e315bd7371ee523dd44519c32 Mon Sep 17 00:00:00 2001 From: jacquarg Date: Sat, 23 Apr 2022 16:29:10 +0200 Subject: 5290 : allow settings while main toggle off. --- .../domain/usecases/FakeLocationStateUseCase.kt | 59 ++++++++++++---------- .../domain/usecases/GetQuickPrivacyStateUseCase.kt | 27 +++++++++- 2 files changed, 57 insertions(+), 29 deletions(-) (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain') 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 + private val _configuredLocationMode = MutableStateFlow>(Triple(LocationMode.REAL_LOCATION, null, null)) + val configuredLocationMode: StateFlow> = _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 { - 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?) { + _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) { 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?): Triple { + 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(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..6e2e7cf 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,10 +21,25 @@ 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 @@ -77,4 +92,14 @@ class GetQuickPrivacyStateUseCase(private val localStateRepository: LocalStateRe val newState = !localStateRepository.isQuickPrivacyEnabled return localStateRepository.setQuickPrivacyReturnIsFirstActivation(newState) } + + val showQuickPrivacyDisabledMessage: StateFlow = localStateRepository.showQuickPrivacyDisabledMessage + + // fun setQuickPrivacyDisabledMessage() { + // localStateRepository.setShowQuickPrivacyDisabledMessage(true) + // } + + fun resetQuickPrivacyDisabledMessage() { + localStateRepository.setShowQuickPrivacyDisabledMessage(false) + } } -- cgit v1.2.3