diff --git a/common/src/main/java/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/java/io/homeassistant/companion/android/common/data/integration/Entity.kt index 9d42529f6..dfb18e707 100644 --- a/common/src/main/java/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -3,6 +3,7 @@ package io.homeassistant.companion.android.common.data.integration import android.graphics.Color import android.util.Log import java.util.Calendar +import kotlin.math.round data class Entity( val entityId: String, @@ -80,7 +81,25 @@ fun Entity.getFanSpeed(): EntityPosition? { max = maxValue ) } catch (e: Exception) { - Log.e(EntityExt.TAG, "Unable to get getLightBrightness", e) + Log.e(EntityExt.TAG, "Unable to get getFanSpeed", e) + null + } +} + +fun Entity.getFanSteps(): Int? { + return try { + if (!supportsFanSetSpeed()) return null + + fun calculateNumStep(percentageStep: Double): Int { + val numSteps = round(100 / percentageStep).toInt() + if (numSteps <= 10) return numSteps + if (numSteps % 10 == 0) return 10 + return calculateNumStep(percentageStep * 2) + } + + return calculateNumStep(((attributes as Map<*, *>)["percentage_step"] as? Double)?.toDouble() ?: 1.0) - 1 + } catch (e: Exception) { + Log.e(EntityExt.TAG, "Unable to get getFanSteps") null } } diff --git a/wear/src/main/java/io/homeassistant/companion/android/home/views/DetailsPanelView.kt b/wear/src/main/java/io/homeassistant/companion/android/home/views/DetailsPanelView.kt index c11a8d8b4..221c08855 100644 --- a/wear/src/main/java/io/homeassistant/companion/android/home/views/DetailsPanelView.kt +++ b/wear/src/main/java/io/homeassistant/companion/android/home/views/DetailsPanelView.kt @@ -30,6 +30,7 @@ import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.integration.EntityExt import io.homeassistant.companion.android.common.data.integration.domain import io.homeassistant.companion.android.common.data.integration.getFanSpeed +import io.homeassistant.companion.android.common.data.integration.getFanSteps import io.homeassistant.companion.android.common.data.integration.getLightBrightness import io.homeassistant.companion.android.common.data.integration.supportsFanSetSpeed import io.homeassistant.companion.android.common.data.integration.supportsLightBrightness @@ -169,6 +170,7 @@ fun FanSpeedSlider( val haptic = LocalHapticFeedback.current val context = LocalContext.current val position = entity.getFanSpeed() ?: return + val steps = entity.getFanSteps() ?: return Column { Text( @@ -190,7 +192,7 @@ fun FanSpeedSlider( haptic ) }, - steps = 9, + steps = steps, valueRange = position.min..position.max, decreaseIcon = { Image(