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/entities/LocationMode.kt2
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt88
2 files changed, 66 insertions, 24 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt
index dbb9b0a..35a77b3 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt
@@ -18,5 +18,5 @@
package foundation.e.privacycentralapp.domain.entities
enum class LocationMode {
- REAL_LOCATION, RANDOM_LOCATION, CUSTOM_LOCATION
+ REAL_LOCATION, RANDOM_LOCATION, SPECIFIC_LOCATION
}
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 6d13f0e..02fdb0f 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
@@ -17,47 +17,89 @@
package foundation.e.privacycentralapp.domain.usecases
-/*import android.app.AppOpsManager
-import android.content.Intent
-import android.util.Log
+import android.app.AppOpsManager
import foundation.e.privacycentralapp.data.repositories.LocalStateRepository
import foundation.e.privacycentralapp.domain.entities.LocationMode
-import foundation.e.privacycentralapp.features.location.LocationApiDelegate
-import foundation.e.privacymodules.location.IFakeLocation
+import foundation.e.privacycentralapp.dummy.CityDataSource
+import foundation.e.privacymodules.location.IFakeLocationModule
import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
import foundation.e.privacymodules.permissions.data.AppOpModes
import foundation.e.privacymodules.permissions.data.ApplicationDescription
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import kotlin.random.Random
class FakeLocationStateUseCase(
- private val fakeLocationModule: IFakeLocation,
+ private val fakeLocationModule: IFakeLocationModule,
+
private val permissionsModule: PermissionsPrivacyModule,
private val localStateRepository: LocalStateRepository,
+ private val citiesRepository: CityDataSource,
private val appDesc: ApplicationDescription,
private val coroutineScope: CoroutineScope
) {
- private fun acquireLocationPermission() {
- try {
-
- permissionsModule.setAppOpMode(
- appDesc, AppOpsManager.OPSTR_COARSE_LOCATION,
- AppOpModes.ALLOWED
- )
- permissionsModule.setAppOpMode(
- appDesc, AppOpsManager.OPSTR_FINE_LOCATION,
- AppOpModes.ALLOWED
- )
- } catch (e: Exception) {
- // Log.e(TAG, "Can't start RealLocation", e)
+ init {
+ coroutineScope.launch {
+ localStateRepository.quickPrivacyEnabledFlow.collect {
+ applySettings(it, localStateRepository.fakeLocation)
+ }
}
}
- private fun applySettings(isQuickPrivacyEnabled: Boolean, fakeLocationMode: LocationMode) {
- when {
- // isQuickPrivacyEnabled ->
+ fun getLocationMode(): LocationMode = when(localStateRepository.fakeLocation) {
+ null -> LocationMode.REAL_LOCATION
+ in citiesRepository.citiesLocationsList -> LocationMode.RANDOM_LOCATION
+ else -> LocationMode.SPECIFIC_LOCATION
+ }
+
+ 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>?) {
+ 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())
+ } else {
+ fakeLocationModule.stopFakeLocation()
}
}
+ fun setSpecificLocation(latitude: Float, longitude: Float) {
+ setFakeLocation(latitude to longitude)
+ }
+
+ fun setRandomLocation() {
+ val randomIndex = Random.nextInt(citiesRepository.citiesLocationsList.size)
+ val location = citiesRepository.citiesLocationsList[randomIndex]
+
+ setFakeLocation(location)
+ }
+
+ private fun setFakeLocation(location: Pair<Float, Float>) {
+ localStateRepository.fakeLocation = location
+ applySettings(true, location)
+ }
+
+ fun stopFakeLocation() {
+ localStateRepository.fakeLocation = null
+ applySettings(true, null)
+ }
-}*/
+}