diff options
Diffstat (limited to 'app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt')
-rw-r--r-- | app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt b/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt index deca4c1..29bfbfa 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt @@ -52,24 +52,32 @@ class FakeLocationViewModel( val singleEvents = _singleEvents.asSharedFlow() private val specificLocationInputFlow = MutableSharedFlow<Action.SetSpecificLocationAction>() + private val mockLocationParametersInputFlow = MutableSharedFlow<Action.UpdateMockLocationParameters>() @OptIn(FlowPreview::class) suspend fun doOnStartedState() = withContext(Dispatchers.Main) { launch { merge( - fakeLocationStateUseCase.configuredLocationMode.map { (mode, lat, lon) -> + fakeLocationStateUseCase.configuredLocationMode.map { ss -> _state.update { s -> s.copy( - mode = mode, - specificLatitude = lat, - specificLongitude = lon + mode = ss.mode, + altitude = ss.altitude, + speed = ss.speed, + jitter = ss.jitter, + specificLatitude = ss.specificLatitude, + specificLongitude = ss.specificLongitude ) } }, specificLocationInputFlow .debounce(SET_SPECIFIC_LOCATION_DELAY).map { action -> fakeLocationStateUseCase.setSpecificLocation(action.latitude, action.longitude) - } + }, + mockLocationParametersInputFlow + .debounce(SET_SPECIFIC_LOCATION_DELAY).map { action -> + fakeLocationStateUseCase.setFakeLocationParameters(action.altitude, action.speed, action.jitter) + }, ).collect {} } } @@ -82,6 +90,8 @@ class FakeLocationViewModel( is Action.UseRandomLocationAction -> fakeLocationStateUseCase.setRandomLocation() is Action.UseRealLocationAction -> fakeLocationStateUseCase.stopFakeLocation() + is Action.UpdateMockLocationParameters -> updateMockLocationParameters(action) + is Action.UseJoystick -> enableJoystick() } } @@ -96,6 +106,14 @@ class FakeLocationViewModel( specificLocationInputFlow.emit(action) } + private suspend fun updateMockLocationParameters(action: Action.UpdateMockLocationParameters) { + mockLocationParametersInputFlow.emit(action) + } + + private suspend fun enableJoystick() { + + } + sealed class SingleEvent { object RequestLocationPermission : SingleEvent() data class ErrorEvent(val error: String) : SingleEvent() @@ -106,6 +124,12 @@ class FakeLocationViewModel( object StopListeningLocation : Action() object UseRealLocationAction : Action() object UseRandomLocationAction : Action() + object UseJoystick : Action() + data class UpdateMockLocationParameters( + val altitude: Float, + val speed: Float, + val jitter: Float + ) : Action() data class SetSpecificLocationAction( val latitude: Float, val longitude: Float |