summaryrefslogtreecommitdiff
path: root/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt
diff options
context:
space:
mode:
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.kt41
1 files changed, 36 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 143612f..c88c638 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
@@ -36,12 +36,16 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlin.time.Duration.Companion.milliseconds
+import foundation.e.advancedprivacy.domain.entities.FakeLocationCoordinate
class FakeLocationViewModel(
private val fakeLocationStateUseCase: FakeLocationStateUseCase
) : ViewModel() {
companion object {
private val SET_SPECIFIC_LOCATION_DELAY = 200.milliseconds
+ private val SET_MOCK_LOCATION_PARAMETERS_DELAY = 1000.milliseconds
+ private val SET_ROUTE_LOOP_ENABLED_DELAY = 1000.milliseconds
+ private val SET_ROUTE_DELAY = 1000.milliseconds
}
private val _state = MutableStateFlow(FakeLocationState())
@@ -54,6 +58,8 @@ class FakeLocationViewModel(
private val specificLocationInputFlow = MutableSharedFlow<Action.SetSpecificLocationAction>()
private val mockLocationParametersInputFlow = MutableSharedFlow<Action.UpdateMockLocationParameters>()
+ private val setRouteLoopEnabledInputFlow = MutableSharedFlow<Action.SetRouteLoopEnabledAction>()
+ private val setRouteInputFlow = MutableSharedFlow<Action.SetRoute>()
@OptIn(FlowPreview::class)
suspend fun doOnStartedState() = withContext(Dispatchers.Main) {
@@ -73,12 +79,20 @@ class FakeLocationViewModel(
},
specificLocationInputFlow
.debounce(SET_SPECIFIC_LOCATION_DELAY).map { action ->
- fakeLocationStateUseCase.setSpecificLocation(action.latitude, action.longitude)
+ fakeLocationStateUseCase.useFakeLocation(Pair<Float,Float>(action.latitude, action.longitude))
},
mockLocationParametersInputFlow
- .debounce(SET_SPECIFIC_LOCATION_DELAY).map { action ->
+ .debounce(SET_MOCK_LOCATION_PARAMETERS_DELAY).map { action ->
fakeLocationStateUseCase.setFakeLocationParameters(action.altitude, action.speed, action.jitter)
},
+ setRouteLoopEnabledInputFlow
+ .debounce(SET_ROUTE_LOOP_ENABLED_DELAY).map { action ->
+ fakeLocationStateUseCase.setRouteLoopEnabled(action.isEnabled)
+ },
+ setRouteInputFlow
+ .debounce(SET_ROUTE_DELAY).map { action ->
+ fakeLocationStateUseCase.setRoute(action.route)
+ },
).collect {}
}
}
@@ -88,10 +102,14 @@ class FakeLocationViewModel(
is Action.StartListeningLocation -> actionStartListeningLocation()
is Action.StopListeningLocation -> fakeLocationStateUseCase.stopListeningLocation()
is Action.SetSpecificLocationAction -> setSpecificLocation(action)
- is Action.UseRandomLocationAction -> fakeLocationStateUseCase.setRandomLocation()
- is Action.UseRealLocationAction ->
- fakeLocationStateUseCase.stopFakeLocation()
+ is Action.UseRandomLocationAction -> fakeLocationStateUseCase.useRandomLocation()
+ is Action.UseRealLocationAction -> fakeLocationStateUseCase.useRealLocation()
+ is Action.UseRoute -> fakeLocationStateUseCase.useRoute()
is Action.UpdateMockLocationParameters -> updateMockLocationParameters(action)
+ is Action.SetRoute -> setRouteInputFlow.emit(action)
+ is Action.SetRouteLoopEnabledAction -> setRouteLoopEnabled(action)
+ is Action.RouteStartAction -> fakeLocationStateUseCase.routeStart()
+ is Action.RouteStopAction -> fakeLocationStateUseCase.routeStop()
}
}
@@ -110,6 +128,10 @@ class FakeLocationViewModel(
mockLocationParametersInputFlow.emit(action)
}
+ private suspend fun setRouteLoopEnabled(action: Action.SetRouteLoopEnabledAction) {
+ setRouteLoopEnabledInputFlow.emit(action)
+ }
+
sealed class SingleEvent {
object RequestLocationPermission : SingleEvent()
data class ErrorEvent(val error: String) : SingleEvent()
@@ -120,6 +142,7 @@ class FakeLocationViewModel(
object StopListeningLocation : Action()
object UseRealLocationAction : Action()
object UseRandomLocationAction : Action()
+ object UseRoute : Action()
data class UpdateMockLocationParameters(
val altitude: Float,
val speed: Float,
@@ -129,5 +152,13 @@ class FakeLocationViewModel(
val latitude: Float,
val longitude: Float
) : Action()
+ data class SetRoute(
+ val route: List<FakeLocationCoordinate>
+ ) : Action()
+ data class SetRouteLoopEnabledAction(
+ val isEnabled: Boolean
+ ) : Action()
+ object RouteStartAction : Action()
+ object RouteStopAction : Action()
}
}