aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/domain
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt59
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt27
2 files changed, 57 insertions, 29 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..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<Boolean> = localStateRepository.showQuickPrivacyDisabledMessage
+
+ // fun setQuickPrivacyDisabledMessage() {
+ // localStateRepository.setShowQuickPrivacyDisabledMessage(true)
+ // }
+
+ fun resetQuickPrivacyDisabledMessage() {
+ localStateRepository.setShowQuickPrivacyDisabledMessage(false)
+ }
}