From 1f2c059e9cf351bc84aebb5d7f8d930c5e08f1f0 Mon Sep 17 00:00:00 2001 From: Chris Kaczor Date: Tue, 7 Sep 2021 21:52:33 -0400 Subject: [PATCH] More Wear OS work --- .../homemonitor/wear/TilePreviewActivity.kt | 1 + WearOS/src/src/main/AndroidManifest.xml | 21 +- .../wear/{ => power}/PowerRepository.kt | 11 +- .../wear/{ => power}/PowerTileService.kt | 13 +- .../wear/weather/WeatherRepository.kt | 24 +++ .../wear/weather/WeatherTileService.kt | 200 ++++++++++++++++++ .../src/src/main/res/drawable/tile_goals.png | Bin 18709 -> 0 bytes .../src/src/main/res/drawable/tile_power.png | Bin 0 -> 12615 bytes .../src/main/res/drawable/tile_weather.png | Bin 0 -> 14558 bytes WearOS/src/src/main/res/values/strings.xml | 1 + 10 files changed, 254 insertions(+), 17 deletions(-) rename WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/{ => power}/PowerRepository.kt (51%) rename WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/{ => power}/PowerTileService.kt (93%) create mode 100644 WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherRepository.kt create mode 100644 WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherTileService.kt delete mode 100644 WearOS/src/src/main/res/drawable/tile_goals.png create mode 100644 WearOS/src/src/main/res/drawable/tile_power.png create mode 100644 WearOS/src/src/main/res/drawable/tile_weather.png diff --git a/WearOS/src/src/debug/java/com/chriskaczor/homemonitor/wear/TilePreviewActivity.kt b/WearOS/src/src/debug/java/com/chriskaczor/homemonitor/wear/TilePreviewActivity.kt index 312a86a..6c0c60c 100644 --- a/WearOS/src/src/debug/java/com/chriskaczor/homemonitor/wear/TilePreviewActivity.kt +++ b/WearOS/src/src/debug/java/com/chriskaczor/homemonitor/wear/TilePreviewActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.widget.FrameLayout import androidx.activity.ComponentActivity import androidx.wear.tiles.manager.TileUiClient +import com.chriskaczor.homemonitor.wear.power.PowerTileService class TilePreviewActivity : ComponentActivity() { lateinit var tileUiClient: TileUiClient diff --git a/WearOS/src/src/main/AndroidManifest.xml b/WearOS/src/src/main/AndroidManifest.xml index 0610587..cd1885e 100644 --- a/WearOS/src/src/main/AndroidManifest.xml +++ b/WearOS/src/src/main/AndroidManifest.xml @@ -18,9 +18,9 @@ android:value="true" /> @@ -29,7 +29,22 @@ + android:resource="@drawable/tile_power" /> + + + + + + + + diff --git a/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/PowerRepository.kt b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/power/PowerRepository.kt similarity index 51% rename from WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/PowerRepository.kt rename to WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/power/PowerRepository.kt index 59ad660..e1b5e3a 100644 --- a/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/PowerRepository.kt +++ b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/power/PowerRepository.kt @@ -1,4 +1,4 @@ -package com.chriskaczor.homemonitor.wear +package com.chriskaczor.homemonitor.wear.power import com.beust.klaxon.Json import com.beust.klaxon.Klaxon @@ -17,16 +17,11 @@ data class PowerStatus( ) object PowerRepository { - suspend fun getPowerStatus(): PowerStatus { + suspend fun getPowerStatus(): PowerStatus? { val json = URL("http://home.kaczorzoo.net/api/power/status/recent").readText(); - val data = Klaxon().parse(json) ?: return powerStatus; - - powerStatus = powerStatus.copy(generation = data.generation, consumption = data.consumption, timestamp = data.timestamp); + val powerStatus = Klaxon().parse(json); return powerStatus; } } - -var powerStatus = - PowerStatus(generation = 0, consumption = 0, timestamp = Timestamp(System.currentTimeMillis()).toString()) diff --git a/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/PowerTileService.kt b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/power/PowerTileService.kt similarity index 93% rename from WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/PowerTileService.kt rename to WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/power/PowerTileService.kt index 3491513..bbefe6a 100644 --- a/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/PowerTileService.kt +++ b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/power/PowerTileService.kt @@ -1,4 +1,4 @@ -package com.chriskaczor.homemonitor.wear +package com.chriskaczor.homemonitor.wear.power import androidx.core.content.ContextCompat import androidx.wear.tiles.ActionBuilders @@ -15,6 +15,7 @@ import androidx.wear.tiles.TileBuilders.Tile import androidx.wear.tiles.TileService import androidx.wear.tiles.TimelineBuilders.Timeline import androidx.wear.tiles.TimelineBuilders.TimelineEntry +import com.chriskaczor.homemonitor.wear.R import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel @@ -95,17 +96,17 @@ class PowerTileService : TileService() { serviceScope.cancel() } - private fun layout(goalProgress: PowerStatus, deviceParameters: DeviceParameters) = + private fun layout(goalProgress: PowerStatus?, deviceParameters: DeviceParameters) = Box.Builder() .setWidth(expand()) .setHeight(expand()) .addContent( Column.Builder() .addContent( - generationLayout(goalProgress.generation, deviceParameters) + generationLayout(goalProgress?.generation ?: -1, deviceParameters) ) .addContent( - consumptionLayout(goalProgress.consumption, deviceParameters) + consumptionLayout(goalProgress?.consumption ?: -1, deviceParameters) ) .addContent(Spacer.Builder().setHeight(VERTICAL_SPACING_HEIGHT).build()) .addContent(refreshButton()) @@ -135,7 +136,7 @@ class PowerTileService : TileService() { ) .addContent( Text.Builder() - .setText(generation.toString()) + .setText(if (generation <= 0) "0" else generation.toString()) .setFontStyle(FontStyles.display3(deviceParameters).build()) .build() ).build() @@ -163,7 +164,7 @@ class PowerTileService : TileService() { ) .addContent( Text.Builder() - .setText(consumption.toString()) + .setText(if (consumption <= 0) "0" else consumption.toString()) .setFontStyle(FontStyles.display3(deviceParameters).build()) .build() ).build() diff --git a/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherRepository.kt b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherRepository.kt new file mode 100644 index 0000000..14467f3 --- /dev/null +++ b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherRepository.kt @@ -0,0 +1,24 @@ +package com.chriskaczor.homemonitor.wear.weather + +import com.beust.klaxon.Json +import com.beust.klaxon.Klaxon +import java.net.URL +import java.sql.Timestamp + +data class WeatherStatus( + @Json(name = "humidity") + val humidity: Double, + + @Json(name = "pressure") + val pressure: Double, +) + +object WeatherRepository { + suspend fun getWeatherStatus(): WeatherStatus? { + var json = URL("http://home.kaczorzoo.net/api/weather/readings/recent").readText(); + + var weatherStatus = Klaxon().parse(json); + + return weatherStatus; + } +} diff --git a/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherTileService.kt b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherTileService.kt new file mode 100644 index 0000000..f8fdd6c --- /dev/null +++ b/WearOS/src/src/main/java/com/chriskaczor/homemonitor/wear/weather/WeatherTileService.kt @@ -0,0 +1,200 @@ +package com.chriskaczor.homemonitor.wear.weather + +import androidx.core.content.ContextCompat +import androidx.wear.tiles.ActionBuilders +import androidx.wear.tiles.ColorBuilders.argb +import androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters +import androidx.wear.tiles.DimensionBuilders.dp +import androidx.wear.tiles.DimensionBuilders.expand +import androidx.wear.tiles.LayoutElementBuilders.* +import androidx.wear.tiles.ModifiersBuilders.* +import androidx.wear.tiles.RequestBuilders.ResourcesRequest +import androidx.wear.tiles.RequestBuilders.TileRequest +import androidx.wear.tiles.ResourceBuilders.* +import androidx.wear.tiles.TileBuilders.Tile +import androidx.wear.tiles.TileService +import androidx.wear.tiles.TimelineBuilders.Timeline +import androidx.wear.tiles.TimelineBuilders.TimelineEntry +import com.chriskaczor.homemonitor.wear.R +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel +import kotlinx.coroutines.guava.future + +private const val RESOURCES_VERSION = "1" + +// dimensions +private val BUTTON_SIZE = dp(48f) +private val BUTTON_RADIUS = dp(24f) +private val BUTTON_PADDING = dp(12f) +private val VERTICAL_SPACING_HEIGHT = dp(8f) + +// identifiers +private const val ID_IMAGE_REFRESH = "image_refresh" +private const val ID_IMAGE_GENERATION = "image_generation" +private const val ID_IMAGE_CONSUMPTION = "image_consumption" +private const val ID_CLICK_REFRESH = "click_refresh" + +class WeatherTileService : TileService() { + private val serviceScope = CoroutineScope(Dispatchers.IO) + + override fun onTileRequest(requestParams: TileRequest) = serviceScope.future { + val powerStatus = WeatherRepository.getWeatherStatus() + + val deviceParams = requestParams.deviceParameters!! + + Tile.Builder() + .setResourcesVersion(RESOURCES_VERSION) + .setTimeline( + Timeline.Builder() + .addTimelineEntry( + TimelineEntry.Builder() + .setLayout( + Layout.Builder() + .setRoot( + layout(powerStatus, deviceParams) + ).build() + ).build() + ).build() + ).build() + } + + override fun onResourcesRequest(requestParams: ResourcesRequest) = serviceScope.future { + Resources.Builder() + .setVersion(RESOURCES_VERSION) + .addIdToImageMapping( + ID_IMAGE_REFRESH, + ImageResource.Builder() + .setAndroidResourceByResId( + AndroidImageResourceByResId.Builder() + .setResourceId(R.drawable.ic_refresh) + .build() + ).build() + ) + .addIdToImageMapping( + ID_IMAGE_GENERATION, + ImageResource.Builder() + .setAndroidResourceByResId( + AndroidImageResourceByResId.Builder() + .setResourceId(R.drawable.ic_sun) + .build() + ).build() + ) + .addIdToImageMapping( + ID_IMAGE_CONSUMPTION, + ImageResource.Builder() + .setAndroidResourceByResId( + AndroidImageResourceByResId.Builder() + .setResourceId(R.drawable.ic_plug) + .build() + ).build() + ).build() + } + + override fun onDestroy() { + super.onDestroy() + serviceScope.cancel() + } + + private fun layout(goalProgress: WeatherStatus?, deviceParameters: DeviceParameters) = + Box.Builder() + .setWidth(expand()) + .setHeight(expand()) + .addContent( + Column.Builder() + .addContent( + generationLayout(goalProgress?.humidity ?: -1.0, deviceParameters) + ) + .addContent( + consumptionLayout(goalProgress?.pressure ?: -1.0, deviceParameters) + ) + .addContent(Spacer.Builder().setHeight(VERTICAL_SPACING_HEIGHT).build()) + .addContent(refreshButton()) + .build() + ).build() + + private fun generationLayout(generation: Double, deviceParameters: DeviceParameters) = + Row.Builder() + .addContent( + Image.Builder() + .setHeight(dp(36f)) + .setWidth(dp(36f)) + .setModifiers( + Modifiers.Builder() + .setPadding( + Padding.Builder() + .setStart(dp(0f)) + .setEnd(dp(10f)) + .setTop(dp(1f)) + .setBottom(dp(0f)) + .build() + ) + .build() + ) + .setResourceId(ID_IMAGE_GENERATION) + .build() + ) + .addContent( + Text.Builder() + .setText(if (generation <= 0) "0" else generation.toString()) + .setFontStyle(FontStyles.display3(deviceParameters).build()) + .build() + ).build() + + private fun consumptionLayout(consumption: Double, deviceParameters: DeviceParameters) = + Row.Builder() + .addContent( + Image.Builder() + .setHeight(dp(36f)) + .setWidth(dp(36f)) + .setModifiers( + Modifiers.Builder() + .setPadding( + Padding.Builder() + .setStart(dp(0f)) + .setEnd(dp(10f)) + .setTop(dp(1f)) + .setBottom(dp(0f)) + .build() + ) + .build() + ) + .setResourceId(ID_IMAGE_CONSUMPTION) + .build() + ) + .addContent( + Text.Builder() + .setText(if (consumption <= 0) "0" else consumption.toString()) + .setFontStyle(FontStyles.display3(deviceParameters).build()) + .build() + ).build() + + private fun refreshButton() = + Image.Builder() + .setWidth(BUTTON_SIZE) + .setHeight(BUTTON_SIZE) + .setResourceId(ID_IMAGE_REFRESH) + .setModifiers( + Modifiers.Builder() + .setPadding( + Padding.Builder() + .setStart(BUTTON_PADDING) + .setEnd(BUTTON_PADDING) + .setTop(BUTTON_PADDING) + .setBottom(BUTTON_PADDING) + .build() + ) + .setBackground( + Background.Builder() + .setCorner(Corner.Builder().setRadius(BUTTON_RADIUS).build()) + .setColor(argb(ContextCompat.getColor(this, R.color.primaryDark))) + .build() + ) + .setClickable( + Clickable.Builder() + .setId(ID_CLICK_REFRESH) + .setOnClick(ActionBuilders.LoadAction.Builder().build()) + .build() + ).build() + ).build() +} diff --git a/WearOS/src/src/main/res/drawable/tile_goals.png b/WearOS/src/src/main/res/drawable/tile_goals.png deleted file mode 100644 index 6e202701ac0d62de7631e415559c91a1fc909d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18709 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 H2LAsCSp?-W literal 0 HcmV?d00001 diff --git a/WearOS/src/src/main/res/values/strings.xml b/WearOS/src/src/main/res/values/strings.xml index af3adc2..9c5f799 100644 --- a/WearOS/src/src/main/res/values/strings.xml +++ b/WearOS/src/src/main/res/values/strings.xml @@ -4,4 +4,5 @@ Home Monitor Power + Weather