diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/BaseDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/BaseDataType.kt index 07ff588..d7d5627 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/BaseDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/BaseDataType.kt @@ -15,10 +15,12 @@ import io.hammerhead.karooext.models.DataPoint import io.hammerhead.karooext.models.DataType import io.hammerhead.karooext.models.StreamState import io.hammerhead.karooext.models.UpdateGraphicConfig +import io.hammerhead.karooext.models.UserProfile import io.hammerhead.karooext.models.ViewConfig import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.launch @@ -27,22 +29,25 @@ abstract class BaseDataType( private val applicationContext: Context, dataTypeId: String ) : DataTypeImpl("karoo-headwind", dataTypeId) { - abstract fun getValue(data: WeatherData): Double? + abstract fun getValue(data: WeatherData, userProfile: UserProfile): Double? open fun getFormatDataType(): String? = null override fun startStream(emitter: Emitter) { Log.d(KarooHeadwindExtension.TAG, "start $dataTypeId stream") val job = CoroutineScope(Dispatchers.IO).launch { - val currentWeatherData = applicationContext.streamCurrentWeatherData(karooSystemService) - val userProfile = karooSystemService.streamUserProfile() + data class StreamData(val weatherData: WeatherData, val userProfile: UserProfile) + + val currentWeatherData = combine(applicationContext.streamCurrentWeatherData(karooSystemService).filterNotNull(), karooSystemService.streamUserProfile()) { weatherData, userProfile -> + StreamData(weatherData, userProfile) + } val refreshRate = karooSystemService.getRefreshRateInMilliseconds(applicationContext) currentWeatherData.filterNotNull() .throttle(refreshRate) - .collect { data -> - val value = getValue(data) + .collect { (data, userProfile) -> + val value = getValue(data, userProfile) Log.d(KarooHeadwindExtension.TAG, "$dataTypeId: $value") if (value != null) { diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/CloudCoverDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/CloudCoverDataType.kt index f3ed860..d6369a3 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/CloudCoverDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/CloudCoverDataType.kt @@ -3,9 +3,10 @@ package de.timklge.karooheadwind.datatypes import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService +import io.hammerhead.karooext.models.UserProfile class CloudCoverDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "cloudCover"){ - override fun getValue(data: WeatherData): Double? { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double? { return data.cloudCover } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/ForecastDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/ForecastDataType.kt index 94fe006..aac3f32 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/ForecastDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/ForecastDataType.kt @@ -119,7 +119,7 @@ abstract class ForecastDataType(private val karooSystem: KarooSystemService, typ WeatherData( time = forecastTime, temperature = forecastTemperature, - relativeHumidity = 20.0, + relativeHumidity = 20, precipitation = forecastPrecipitation, cloudCover = 3.0, sealevelPressure = 1013.25, @@ -142,7 +142,7 @@ abstract class ForecastDataType(private val karooSystem: KarooSystemService, typ current = WeatherData( time = timeAtFullHour, temperature = 20.0, - relativeHumidity = 20.0, + relativeHumidity = 20, precipitation = 0.0, cloudCover = 3.0, sealevelPressure = 1013.25, diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/GraphicalForecast.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/GraphicalForecast.kt index 35b86c6..c2e77e3 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/GraphicalForecast.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/GraphicalForecast.kt @@ -44,7 +44,6 @@ fun GraphicalForecast( provider = ImageProvider(getWeatherIcon(current, isNight)), contentDescription = "Current weather information", contentScale = ContentScale.Fit, - colorFilter = ColorFilter.tint(ColorProvider(Color.Black, Color.White)) ) } diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/PrecipitationDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/PrecipitationDataType.kt index 0a14010..c81b0d2 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/PrecipitationDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/PrecipitationDataType.kt @@ -7,7 +7,7 @@ import io.hammerhead.karooext.KarooSystemService import io.hammerhead.karooext.models.UserProfile class PrecipitationDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "precipitation"){ - override fun getValue(data: WeatherData): Double { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double { return millimetersInUserUnit(data.precipitation, userProfile.preferredUnit.distance == UserProfile.PreferredUnit.UnitType.IMPERIAL) } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/RelativeHumidityDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/RelativeHumidityDataType.kt index a665c67..b3bf0d3 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/RelativeHumidityDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/RelativeHumidityDataType.kt @@ -3,9 +3,10 @@ package de.timklge.karooheadwind.datatypes import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService +import io.hammerhead.karooext.models.UserProfile class RelativeHumidityDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "relativeHumidity"){ - override fun getValue(data: WeatherData): Double? { - return data.relativeHumidity + override fun getValue(data: WeatherData, userProfile: UserProfile): Double? { + return data.relativeHumidity.toDouble() } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SealevelPressureDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SealevelPressureDataType.kt index 26d2ef9..a056017 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SealevelPressureDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SealevelPressureDataType.kt @@ -3,9 +3,10 @@ package de.timklge.karooheadwind.datatypes import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService +import io.hammerhead.karooext.models.UserProfile class SealevelPressureDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "sealevelPressure"){ - override fun getValue(data: WeatherData): Double? { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double? { return data.sealevelPressure } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SurfacePressureDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SurfacePressureDataType.kt index 936f150..81b8ae9 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SurfacePressureDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/SurfacePressureDataType.kt @@ -3,9 +3,10 @@ package de.timklge.karooheadwind.datatypes import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService +import io.hammerhead.karooext.models.UserProfile class SurfacePressureDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "surfacePressure"){ - override fun getValue(data: WeatherData): Double? { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double? { return data.surfacePressure } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TailwindAndRideSpeedDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TailwindAndRideSpeedDataType.kt index c86f383..fa23877 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TailwindAndRideSpeedDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TailwindAndRideSpeedDataType.kt @@ -166,7 +166,8 @@ class TailwindAndRideSpeedDataType( WindDirectionIndicatorSetting.WIND_DIRECTION -> streamData.absoluteWindDirection + 180 } - val text = streamData.rideSpeed?.let { String.format(Locale.current.platformLocale, "%.1f", it) } ?: "" + val rideSpeedInUserUnit = msInUserUnit(streamData.rideSpeed ?: 0.0, streamData.isImperial) + val text = String.format(Locale.current.platformLocale, "%.1f", rideSpeedInUserUnit) val wideMode = config.gridSize.first == 60 diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TemperatureDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TemperatureDataType.kt index 5b8d21e..b174df3 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TemperatureDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/TemperatureDataType.kt @@ -4,9 +4,10 @@ import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService import io.hammerhead.karooext.models.DataType +import io.hammerhead.karooext.models.UserProfile class TemperatureDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "temperature"){ - override fun getValue(data: WeatherData): Double { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double { return data.temperature } diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WeatherDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WeatherDataType.kt index 741c9e6..ed54fbd 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WeatherDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WeatherDataType.kt @@ -88,7 +88,7 @@ class WeatherDataType( emit(StreamData( WeatherData( Instant.now().epochSecond, 0.0, - 20.0, 50.0, 3.0, 0.0, 1013.25, 980.0, 15.0, 30.0, 30.0, + 20, 50.0, 3.0, 0.0, 1013.25, 980.0, 15.0, 30.0, 30.0, WeatherInterpretation.getKnownWeatherCodes().random(), isForecast = false, isNight = listOf(true, false).random() ), HeadwindSettings(), isVisible = true)) diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindDirectionDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindDirectionDataType.kt index e87d872..bceea04 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindDirectionDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindDirectionDataType.kt @@ -26,6 +26,7 @@ import io.hammerhead.karooext.internal.ViewEmitter import io.hammerhead.karooext.models.ShowCustomStreamState import io.hammerhead.karooext.models.StreamState import io.hammerhead.karooext.models.UpdateGraphicConfig +import io.hammerhead.karooext.models.UserProfile import io.hammerhead.karooext.models.ViewConfig import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -51,7 +52,7 @@ class WindDirectionDataType(val karooSystem: KarooSystemService, context: Contex ) } - override fun getValue(data: WeatherData): Double { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double { return data.windDirection } diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindGustsDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindGustsDataType.kt index 48e3043..565ca10 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindGustsDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindGustsDataType.kt @@ -3,9 +3,10 @@ package de.timklge.karooheadwind.datatypes import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService +import io.hammerhead.karooext.models.UserProfile class WindGustsDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "windGusts"){ - override fun getValue(data: WeatherData): Double { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double { return data.windGusts } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindSpeedDataType.kt b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindSpeedDataType.kt index bc2705a..c086cc4 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindSpeedDataType.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/datatypes/WindSpeedDataType.kt @@ -3,9 +3,10 @@ package de.timklge.karooheadwind.datatypes import android.content.Context import de.timklge.karooheadwind.weatherprovider.WeatherData import io.hammerhead.karooext.KarooSystemService +import io.hammerhead.karooext.models.UserProfile class WindSpeedDataType(karooSystemService: KarooSystemService, context: Context) : BaseDataType(karooSystemService, context, "windSpeed"){ - override fun getValue(data: WeatherData): Double { + override fun getValue(data: WeatherData, userProfile: UserProfile): Double { return data.windSpeed } } \ No newline at end of file diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/screens/WeatherWidget.kt b/app/src/main/kotlin/de/timklge/karooheadwind/screens/WeatherWidget.kt index 341f3c6..f7f99c2 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/screens/WeatherWidget.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/screens/WeatherWidget.kt @@ -50,7 +50,7 @@ fun WeatherWidget( isImperial: Boolean, isNight: Boolean ) { - val fontSize = 20.sp + val fontSize = 18.sp Row( modifier = Modifier.fillMaxWidth().padding(5.dp), @@ -106,7 +106,6 @@ fun WeatherWidget( ) Column(horizontalAlignment = Alignment.End) { - // Temperature (larger) Row( verticalAlignment = Alignment.CenterVertically ) { diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapForecastData.kt b/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapForecastData.kt index e09b8d0..6bf45ed 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapForecastData.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapForecastData.kt @@ -33,7 +33,7 @@ data class OpenWeatherMapForecastData( return WeatherData( temperature = temp, - relativeHumidity = humidity.toDouble(), + relativeHumidity = humidity, precipitation = rain?.h1 ?: 0.0, cloudCover = clouds.toDouble(), surfacePressure = pressure.toDouble(), diff --git a/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapWeatherData.kt b/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapWeatherData.kt index 6decf17..6c19fd2 100644 --- a/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapWeatherData.kt +++ b/app/src/main/kotlin/de/timklge/karooheadwind/weatherprovider/openweathermap/OpenWeatherMapWeatherData.kt @@ -23,7 +23,7 @@ data class OpenWeatherMapWeatherData( fun toWeatherData(): WeatherData = WeatherData( temperature = temp, - relativeHumidity = humidity.toDouble(), + relativeHumidity = humidity, precipitation = rain?.h1 ?: 0.0, cloudCover = clouds.toDouble(), surfacePressure = pressure.toDouble(),