Compare commits
2 Commits
b4e5f42007
...
da8583bd3e
| Author | SHA1 | Date | |
|---|---|---|---|
| da8583bd3e | |||
|
|
b809a48631 |
@ -72,7 +72,7 @@ tasks.register("generateManifest") {
|
||||
"latestVersionCode" to android.defaultConfig.versionCode,
|
||||
"developer" to "github.com/timklge",
|
||||
"description" to "Open-source extension that provides headwind direction, wind speed, forecast and other weather data fields.",
|
||||
"releaseNotes" to "* Fix unit of plain wind gust / speed datafield\n* Fix headwind forecast preview\n* Add UV-index datafield (thx @saversux!)\n* Readd a datafield that shows headwind direction and absolute wind speed datafield",
|
||||
"releaseNotes" to "* Open main extension menu when clicking on graphical headwind / tailwind datafield\n* Only update position if the estimated accuracy is within 500 meters\n* Add force distribution datafield\n* Only increase relative elevation gain when relative grade is positive",
|
||||
"screenshotUrls" to listOf(
|
||||
"$baseUrl/preview1.png",
|
||||
"$baseUrl/preview3.png",
|
||||
|
||||
@ -2,7 +2,6 @@ package de.timklge.karooheadwind
|
||||
|
||||
import io.hammerhead.karooext.KarooSystemService
|
||||
import io.hammerhead.karooext.models.ActiveRidePage
|
||||
import io.hammerhead.karooext.models.OnLocationChanged
|
||||
import io.hammerhead.karooext.models.OnNavigationState
|
||||
import io.hammerhead.karooext.models.OnStreamState
|
||||
import io.hammerhead.karooext.models.RideState
|
||||
@ -14,7 +13,6 @@ import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.callbackFlow
|
||||
import kotlinx.coroutines.flow.conflate
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.sample
|
||||
import kotlinx.coroutines.flow.transform
|
||||
|
||||
fun KarooSystemService.streamDataFlow(dataTypeId: String): Flow<StreamState> {
|
||||
@ -28,17 +26,6 @@ fun KarooSystemService.streamDataFlow(dataTypeId: String): Flow<StreamState> {
|
||||
}
|
||||
}
|
||||
|
||||
fun KarooSystemService.streamLocation(): Flow<OnLocationChanged> {
|
||||
return callbackFlow {
|
||||
val listenerId = addConsumer { event: OnLocationChanged ->
|
||||
trySendBlocking(event)
|
||||
}
|
||||
awaitClose {
|
||||
removeConsumer(listenerId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun KarooSystemService.streamNavigationState(): Flow<OnNavigationState> {
|
||||
return callbackFlow {
|
||||
val listenerId = addConsumer { event: OnNavigationState ->
|
||||
|
||||
@ -12,11 +12,11 @@ import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.emitAll
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.mapNotNull
|
||||
|
||||
sealed class HeadingResponse {
|
||||
data object NoGps: HeadingResponse()
|
||||
@ -108,8 +108,9 @@ fun KarooSystemService.getGpsCoordinateFlow(context: Context): Flow<GpsCoordinat
|
||||
val lat = dataPoint.values[DataType.Field.LOC_LATITUDE]
|
||||
val lng = dataPoint.values[DataType.Field.LOC_LONGITUDE]
|
||||
val orientation = dataPoint.values[DataType.Field.LOC_BEARING]
|
||||
val accuracy = dataPoint.values[DataType.Field.LOC_ACCURACY]
|
||||
|
||||
if (lat != null && lng != null) {
|
||||
if (lat != null && lng != null && accuracy != null && accuracy < 500) {
|
||||
emit(GpsCoordinates(lat, lng, orientation))
|
||||
|
||||
Log.i(KarooHeadwindExtension.TAG, "No last known position found, fetched initial GPS position")
|
||||
@ -130,9 +131,21 @@ fun KarooSystemService.getGpsCoordinateFlow(context: Context): Flow<GpsCoordinat
|
||||
}
|
||||
}
|
||||
|
||||
val gpsFlow = streamLocation()
|
||||
.filter { it.orientation != null }
|
||||
.map { GpsCoordinates(it.lat, it.lng, it.orientation) }
|
||||
val gpsFlow = streamDataFlow(DataType.Type.LOCATION).mapNotNull { it as? StreamState.Streaming }
|
||||
.mapNotNull { dataPoint ->
|
||||
val lat = dataPoint.dataPoint.values[DataType.Field.LOC_LATITUDE]
|
||||
val lng = dataPoint.dataPoint.values[DataType.Field.LOC_LONGITUDE]
|
||||
val orientation = dataPoint.dataPoint.values[DataType.Field.LOC_BEARING]
|
||||
val accuracy = dataPoint.dataPoint.values[DataType.Field.LOC_ACCURACY]
|
||||
|
||||
Log.i(KarooHeadwindExtension.TAG, "Received GPS update: lat=$lat, lng=$lng, accuracy=$accuracy, orientation=$orientation")
|
||||
|
||||
if (lat != null && lng != null && accuracy != null && accuracy < 500) {
|
||||
GpsCoordinates(lat, lng, orientation)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
val concatenatedFlow = concatenate(initialFlow, gpsFlow)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user