Compare commits
2 Commits
b4e5f42007
...
da8583bd3e
| Author | SHA1 | Date | |
|---|---|---|---|
| da8583bd3e | |||
|
|
b809a48631 |
@ -72,7 +72,7 @@ tasks.register("generateManifest") {
|
|||||||
"latestVersionCode" to android.defaultConfig.versionCode,
|
"latestVersionCode" to android.defaultConfig.versionCode,
|
||||||
"developer" to "github.com/timklge",
|
"developer" to "github.com/timklge",
|
||||||
"description" to "Open-source extension that provides headwind direction, wind speed, forecast and other weather data fields.",
|
"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(
|
"screenshotUrls" to listOf(
|
||||||
"$baseUrl/preview1.png",
|
"$baseUrl/preview1.png",
|
||||||
"$baseUrl/preview3.png",
|
"$baseUrl/preview3.png",
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package de.timklge.karooheadwind
|
|||||||
|
|
||||||
import io.hammerhead.karooext.KarooSystemService
|
import io.hammerhead.karooext.KarooSystemService
|
||||||
import io.hammerhead.karooext.models.ActiveRidePage
|
import io.hammerhead.karooext.models.ActiveRidePage
|
||||||
import io.hammerhead.karooext.models.OnLocationChanged
|
|
||||||
import io.hammerhead.karooext.models.OnNavigationState
|
import io.hammerhead.karooext.models.OnNavigationState
|
||||||
import io.hammerhead.karooext.models.OnStreamState
|
import io.hammerhead.karooext.models.OnStreamState
|
||||||
import io.hammerhead.karooext.models.RideState
|
import io.hammerhead.karooext.models.RideState
|
||||||
@ -14,7 +13,6 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
import kotlinx.coroutines.flow.conflate
|
import kotlinx.coroutines.flow.conflate
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.sample
|
|
||||||
import kotlinx.coroutines.flow.transform
|
import kotlinx.coroutines.flow.transform
|
||||||
|
|
||||||
fun KarooSystemService.streamDataFlow(dataTypeId: String): Flow<StreamState> {
|
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> {
|
fun KarooSystemService.streamNavigationState(): Flow<OnNavigationState> {
|
||||||
return callbackFlow {
|
return callbackFlow {
|
||||||
val listenerId = addConsumer { event: OnNavigationState ->
|
val listenerId = addConsumer { event: OnNavigationState ->
|
||||||
|
|||||||
@ -12,11 +12,11 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.emitAll
|
import kotlinx.coroutines.flow.emitAll
|
||||||
import kotlinx.coroutines.flow.filter
|
|
||||||
import kotlinx.coroutines.flow.filterNotNull
|
import kotlinx.coroutines.flow.filterNotNull
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
|
import kotlinx.coroutines.flow.mapNotNull
|
||||||
|
|
||||||
sealed class HeadingResponse {
|
sealed class HeadingResponse {
|
||||||
data object NoGps: 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 lat = dataPoint.values[DataType.Field.LOC_LATITUDE]
|
||||||
val lng = dataPoint.values[DataType.Field.LOC_LONGITUDE]
|
val lng = dataPoint.values[DataType.Field.LOC_LONGITUDE]
|
||||||
val orientation = dataPoint.values[DataType.Field.LOC_BEARING]
|
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))
|
emit(GpsCoordinates(lat, lng, orientation))
|
||||||
|
|
||||||
Log.i(KarooHeadwindExtension.TAG, "No last known position found, fetched initial GPS position")
|
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()
|
val gpsFlow = streamDataFlow(DataType.Type.LOCATION).mapNotNull { it as? StreamState.Streaming }
|
||||||
.filter { it.orientation != null }
|
.mapNotNull { dataPoint ->
|
||||||
.map { GpsCoordinates(it.lat, it.lng, it.orientation) }
|
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)
|
val concatenatedFlow = concatenate(initialFlow, gpsFlow)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user