diff options
| author | jacquarg <guillaume.jacquart@hoodbrains.com> | 2021-11-07 22:43:32 +0100 |
|---|---|---|
| committer | jacquarg <guillaume.jacquart@hoodbrains.com> | 2021-11-12 13:13:23 +0100 |
| commit | 5891ac8ea718dcb40014f5a90d2672f902eb6c55 (patch) | |
| tree | 083007df227f0c91fed1c48ed81471074dae853f /app/src/main/java/foundation/e/privacycentralapp/domain | |
| parent | 2ea0e99f1bcec61e1a94bb7c35605fca49c53d1c (diff) | |
| download | advanced-privacy-5891ac8ea718dcb40014f5a90d2672f902eb6c55.tar.gz | |
Update fake location
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt | 2 | ||||
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt | 88 |
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) + } -}*/ +} |
