DevicePoseProvider: improve getLocation() (#1454)

* Only take updated location when it is of better quality

* Rename to AndroidLocation for clarification

* be pedantic about licenses

* fix race condition in DevicePoseProvider.kt

* add possibility to explicitly skip cache upon requesting location updates for WeatherRepository.kt

* LocationsRepository.kt: use getLocation() in combineTransform() to properly wait for & update on new locations

* LocationItem.kt: fix getAzimuthDegrees() usage for userHeading
This commit is contained in:
shtrophic
2025-07-04 11:55:20 +02:00
committed by GitHub
parent dd14c6cbaa
commit 31a1580db9
7 changed files with 119 additions and 54 deletions
@@ -288,7 +288,7 @@ class SearchVM : ViewModel(), KoinComponent {
locationResults.mergeWith(
results.locations?.filterNot { hiddenKeys.contains(it.key) }
?.let { locations ->
devicePoseProvider.lastLocation?.let {
devicePoseProvider.lastCachedLocation?.let {
locations.asSequence()
.sortedWith { a, b ->
a.distanceTo(it).compareTo(b.distanceTo(it))
@@ -167,7 +167,7 @@ fun LocationItem(
val userLocation by remember {
viewModel.devicePoseProvider.getLocation()
}.collectAsStateWithLifecycle(viewModel.devicePoseProvider.lastLocation)
}.collectAsStateWithLifecycle(null)
val targetHeading by remember(userLocation, location) {
if (userLocation != null) {
@@ -180,9 +180,7 @@ fun LocationItem(
}.collectAsStateWithLifecycle(null)
val userHeading by remember {
if (userLocation != null) {
viewModel.devicePoseProvider.getAzimuthDegrees()
} else emptyFlow()
viewModel.devicePoseProvider.getAzimuthDegrees()
}.collectAsStateWithLifecycle(null)
val icon by viewModel.icon.collectAsStateWithLifecycle()