aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/advancedprivacy/features
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2023-12-23 00:52:30 +0100
committerLeonard Kugis <leonard@kug.is>2023-12-23 00:52:30 +0100
commiteab77a885f6cca1d785ca57c4cd9182dc1a898cf (patch)
tree7dba714b870895220d815368d7762212ff10c5eb /app/src/main/java/foundation/e/advancedprivacy/features
parent98df413858d1ac577f9c510a9490f382b3f848b4 (diff)
downloadadvanced-privacy-eab77a885f6cca1d785ca57c4cd9182dc1a898cf.tar.gz
Implemented altitude/speed/jitter parameters
Diffstat (limited to 'app/src/main/java/foundation/e/advancedprivacy/features')
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationFragment.kt41
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationState.kt4
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationViewModel.kt34
3 files changed, 74 insertions, 5 deletions
diff --git a/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationFragment.kt b/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationFragment.kt
index 1c629c2..2b054ab 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationFragment.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationFragment.kt
@@ -244,6 +244,31 @@ class FakeLocationFragment : NavToolbarFragment(R.layout.fragment_fake_location)
}
}
+ private fun updateMockLocationParameters() {
+ viewModel.submitAction(
+ Action.UpdateMockLocationParameters(
+ binding.altitude.text.toString().toFloat(),
+ binding.speed.text.toString().toFloat(),
+ binding.jitter.text.toString().toFloat(),
+ )
+ )
+ }
+
+ @Suppress("UNUSED_PARAMETER")
+ private fun onAltitudeTextChanged(editable: Editable?) {
+ updateMockLocationParameters()
+ }
+
+ @Suppress("UNUSED_PARAMETER")
+ private fun onSpeedTextChanged(editable: Editable?) {
+ updateMockLocationParameters()
+ }
+
+ @Suppress("UNUSED_PARAMETER")
+ private fun onJitterTextChanged(editable: Editable?) {
+ updateMockLocationParameters()
+ }
+
@Suppress("UNUSED_PARAMETER")
private fun onLatTextChanged(editable: Editable?) {
if (!binding.edittextLatitude.isFocused ||
@@ -291,6 +316,9 @@ class FakeLocationFragment : NavToolbarFragment(R.layout.fragment_fake_location)
}
}
+ binding.altitude.addTextChangedListener(afterTextChanged = ::onAltitudeTextChanged)
+ binding.speed.addTextChangedListener(afterTextChanged = ::onSpeedTextChanged)
+ binding.jitter.addTextChangedListener(afterTextChanged = ::onJitterTextChanged)
binding.edittextLatitude.addTextChangedListener(afterTextChanged = ::onLatTextChanged)
binding.edittextLongitude.addTextChangedListener(afterTextChanged = ::onLonTextChanged)
binding.edittextLatitude.onFocusChangeListener = latLonOnFocusChangeListener
@@ -307,6 +335,19 @@ class FakeLocationFragment : NavToolbarFragment(R.layout.fragment_fake_location)
binding.mapView.isEnabled = (state.mode == LocationMode.SPECIFIC_LOCATION)
+ binding.altitude.isEnabled = state.mode == LocationMode.SPECIFIC_LOCATION
+ binding.speed.isEnabled = state.mode == LocationMode.SPECIFIC_LOCATION
+ binding.jitter.isEnabled = state.mode == LocationMode.SPECIFIC_LOCATION
+
+ if(!binding.altitude.isFocused)
+ binding.altitude.setText(state.altitude?.toString())
+
+ if(!binding.speed.isFocused)
+ binding.speed.setText(state.speed?.toString())
+
+ if(!binding.jitter.isFocused)
+ binding.jitter.setText(state.jitter?.toString())
+
if (state.mode == LocationMode.REAL_LOCATION) {
binding.centeredMarker.isVisible = false
} else {
diff --git a/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationState.kt b/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationState.kt
index baa672b..12ebecf 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationState.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationState.kt
@@ -23,6 +23,10 @@ import foundation.e.advancedprivacy.domain.entities.LocationMode
data class FakeLocationState(
val mode: LocationMode = LocationMode.REAL_LOCATION,
val currentLocation: Location? = null,
+ val altitude: Float? = null,
+ val speed: Float? = null,
+ val jitter: Float? = null,
+ val joystick: Boolean = false,
val specificLatitude: Float? = null,
val specificLongitude: Float? = null,
val forceRefresh: Boolean = false,
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