Stop the weather worker pinning location for providers that manage it
Some checks failed
Trigger F-Droid repository rebuild / trigger (release) Has been cancelled
Some checks failed
Trigger F-Droid repository rebuild / trigger (release) Has been cancelled
Breezy Weather resolves its own location and pushes weather updates, but WeatherUpdateWorker only looked at autoLocation before requesting a location. BreezyWeatherProvider.getWeatherData() is a noop that always returns null, so the worker then returned Result.retry() forever and never set lastUpdate - which meant the update interval check could never short-circuit it either. Every attempt called getLastKnownLocation(), which registers GPS *and* network listeners at a one second interval and held them for up to ten minutes, so the location stack never idled. On the phone this showed up as ~46k delivered fixes, `*location*` wakelocks held ~99% of the time and Doze never engaging at all. - expose the selected provider's managedLocation in WeatherSettingsData - skip and cancel the weather work for providers that manage their own location - give up on a fix after two minutes instead of ten - LocationsRepository: don't collect the location flow when location search is off or not permitted. As a combineTransform argument it was always collected, so every search query registered GPS and network listeners for up to 30s. Bump to 1.40.2-typing.8 (versionCode 2026091201).
This commit is contained in:
@@ -38,6 +38,13 @@ data class WeatherSettingsData(
|
||||
val lastLocation: LatLon? = null,
|
||||
val lastUpdate: Long = 0L,
|
||||
val providerSettings: Map<String, ProviderSettings> = emptyMap(),
|
||||
|
||||
/**
|
||||
* Whether the selected provider resolves its own location (e.g. Breezy Weather, which is
|
||||
* configured with a [WeatherLocation.Managed]). The launcher must then not request a location
|
||||
* for it.
|
||||
*/
|
||||
val managedLocation: Boolean = false,
|
||||
)
|
||||
|
||||
class WeatherSettings internal constructor(
|
||||
@@ -53,6 +60,7 @@ class WeatherSettings internal constructor(
|
||||
lastLocation = it.weatherLastLocation,
|
||||
lastUpdate = it.weatherLastUpdate,
|
||||
providerSettings = it.weatherProviderSettings,
|
||||
managedLocation = it.weatherProviderSettings[it.weatherProvider]?.managedLocation == true,
|
||||
)
|
||||
}.distinctUntilChanged()
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user