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 f9a6d86ee..25ab11b84 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 @@ -700,70 +700,100 @@ val Entity.friendlyName: String get() = (attributes as? Map<*, *>)?.get("friendly_name")?.toString() ?: entityId fun Entity.friendlyState(context: Context, options: EntityRegistryOptions? = null, appendUnitOfMeasurement: Boolean = false): String { - // https://github.com/mikey0000/frontend/blob/c14d801380f04ac63c4cf9ac2479e3b39ef4db32/src/common/entity/get_states.ts#L5 - var friendlyState = when (state) { - "above_horizon" -> context.getString(commonR.string.state_above_horizon) - "active" -> context.getString(commonR.string.state_active) - "armed_away" -> context.getString(commonR.string.state_armed_away) - "armed_custom_bypass" -> context.getString(commonR.string.state_armed_custom_bypass) - "armed_home" -> context.getString(commonR.string.state_armed_home) - "armed_night" -> context.getString(commonR.string.state_armed_night) - "armed_vacation" -> context.getString(commonR.string.state_armed_vacation) - "arming" -> context.getString(commonR.string.state_arming) - "auto" -> context.getString(commonR.string.state_auto) - "below_horizon" -> context.getString(commonR.string.state_below_horizon) - "buffering" -> context.getString(commonR.string.state_buffering) - "cleaning" -> context.getString(commonR.string.state_cleaning) - "clear-night" -> context.getString(commonR.string.state_clear_night) - "cloudy" -> context.getString(commonR.string.state_cloudy) - "closed" -> context.getString(commonR.string.state_closed) - "closing" -> context.getString(commonR.string.state_closing) - "cool" -> context.getString(commonR.string.state_cool) - "disarmed" -> context.getString(commonR.string.state_disarmed) - "disarming" -> context.getString(commonR.string.state_disarming) - "docked" -> context.getString(commonR.string.state_docked) - "dry" -> context.getString(commonR.string.state_dry) - "error" -> context.getString(commonR.string.state_error) - "exceptional" -> context.getString(commonR.string.state_exceptional) - "fan_only" -> context.getString(commonR.string.state_fan_only) - "fog" -> context.getString(commonR.string.state_fog) - "hail" -> context.getString(commonR.string.state_hail) - "heat" -> context.getString(commonR.string.state_heat) - "heat_cool" -> context.getString(commonR.string.state_heat_cool) - "home" -> context.getString(commonR.string.state_home) - "idle" -> context.getString(commonR.string.state_idle) - "jammed" -> context.getString(commonR.string.state_jammed) - "lightning-raining" -> context.getString(commonR.string.state_lightning_raining) - "lightning" -> context.getString(commonR.string.state_lightning) - "locked" -> context.getString(commonR.string.state_locked) - "locking" -> context.getString(commonR.string.state_locking) - "mowing" -> context.getString(commonR.string.state_mowing) - "not_home" -> context.getString(commonR.string.state_not_home) - "off" -> context.getString(commonR.string.state_off) - "on" -> context.getString(commonR.string.state_on) - "open" -> context.getString(commonR.string.state_open) - "opening" -> context.getString(commonR.string.state_opening) - "partlycloudy" -> context.getString(commonR.string.state_partlycloudy) - "paused" -> context.getString(commonR.string.state_paused) - "pending" -> context.getString(commonR.string.state_pending) - "playing" -> context.getString(commonR.string.state_playing) - "problem" -> context.getString(commonR.string.state_problem) - "pouring" -> context.getString(commonR.string.state_pouring) - "rainy" -> context.getString(commonR.string.state_rainy) - "recording" -> context.getString(commonR.string.state_recording) - "returning" -> context.getString(commonR.string.state_returning) - "snowy-rainy" -> context.getString(commonR.string.state_snowy_rainy) - "snowy" -> context.getString(commonR.string.state_snowy) - "standby" -> context.getString(commonR.string.state_standby) - "streaming" -> context.getString(commonR.string.state_streaming) - "sunny" -> context.getString(commonR.string.state_sunny) - "triggered" -> context.getString(commonR.string.state_triggered) - "unavailable" -> context.getString(commonR.string.state_unavailable) - "unlocked" -> context.getString(commonR.string.state_unlocked) - "unlocking" -> context.getString(commonR.string.state_unlocking) - "unknown" -> context.getString(commonR.string.state_unknown) - "windy", "windy-variant" -> context.getString(commonR.string.state_windy) - else -> state + val attributes = this.attributes as Map + + var friendlyState = when (domain) { + "binary_sensor" -> { + // https://github.com/home-assistant/core/blob/dev/homeassistant/components/binary_sensor/strings.json#L113 + when (attributes["device_class"]) { + "battery" -> if (state == "on") context.getString(commonR.string.state_low) else context.getString(commonR.string.state_normal) + "battery_charging" -> if (state == "on") context.getString(commonR.string.state_charging) else context.getString(commonR.string.state_not_charging) + "cold" -> if (state == "on") context.getString(commonR.string.state_cold) else context.getString(commonR.string.state_off) + "connectivity" -> if (state == "on") context.getString(commonR.string.state_connected) else context.getString(commonR.string.state_disconnected) + "door", "window", "garage_door", "opening" -> if (state == "on") context.getString(commonR.string.state_open) else context.getString(commonR.string.state_closed) + "gas" -> if (state == "on") context.getString(commonR.string.state_detected) else context.getString(commonR.string.state_clear) + "heat" -> if (state == "on") context.getString(commonR.string.state_hot) else context.getString(commonR.string.state_off) + "light" -> if (state == "on") context.getString(commonR.string.state_light_detected) else context.getString(commonR.string.state_no_light) + "lock" -> if (state == "on") context.getString(commonR.string.state_unlocked) else context.getString(commonR.string.state_locked) + "moisture" -> if (state == "on") context.getString(commonR.string.state_wet) else context.getString(commonR.string.state_dry) + "moving" -> if (state == "on") context.getString(commonR.string.state_moving) else context.getString(commonR.string.state_not_moving) + "plug" -> if (state == "on") context.getString(commonR.string.state_plugged_in) else context.getString(commonR.string.state_unplugged) + "presence" -> if (state == "on") context.getString(commonR.string.state_home) else context.getString(commonR.string.state_not_home) + "problem" -> if (state == "on") context.getString(commonR.string.state_problem) else context.getString(commonR.string.state_ok) + "running" -> if (state == "on") context.getString(commonR.string.state_running) else context.getString(commonR.string.state_not_running) + "safety" -> if (state == "on") context.getString(commonR.string.state_unsafe) else context.getString(commonR.string.state_safe) + "tamper" -> if (state == "on") context.getString(commonR.string.state_tampering_detected) else context.getString(commonR.string.state_off) + "update" -> if (state == "on") context.getString(commonR.string.state_update_available) else context.getString(commonR.string.state_up_to_date) + else -> if (state == "on") context.getString(commonR.string.state_on) else context.getString(commonR.string.state_off) + } + } + else -> { + // https://github.com/home-assistant/frontend/blob/dev/src/common/entity/get_states.ts#L5 + when (state) { + "above_horizon" -> context.getString(commonR.string.state_above_horizon) + "active" -> context.getString(commonR.string.state_active) + "armed_away" -> context.getString(commonR.string.state_armed_away) + "armed_custom_bypass" -> context.getString(commonR.string.state_armed_custom_bypass) + "armed_home" -> context.getString(commonR.string.state_armed_home) + "armed_night" -> context.getString(commonR.string.state_armed_night) + "armed_vacation" -> context.getString(commonR.string.state_armed_vacation) + "arming" -> context.getString(commonR.string.state_arming) + "auto" -> context.getString(commonR.string.state_auto) + "below_horizon" -> context.getString(commonR.string.state_below_horizon) + "buffering" -> context.getString(commonR.string.state_buffering) + "cleaning" -> context.getString(commonR.string.state_cleaning) + "clear-night" -> context.getString(commonR.string.state_clear_night) + "cloudy" -> context.getString(commonR.string.state_cloudy) + "closed" -> context.getString(commonR.string.state_closed) + "closing" -> context.getString(commonR.string.state_closing) + "cool" -> context.getString(commonR.string.state_cool) + "disarmed" -> context.getString(commonR.string.state_disarmed) + "disarming" -> context.getString(commonR.string.state_disarming) + "docked" -> context.getString(commonR.string.state_docked) + "dry" -> context.getString(commonR.string.state_dry) + "error" -> context.getString(commonR.string.state_error) + "exceptional" -> context.getString(commonR.string.state_exceptional) + "fan_only" -> context.getString(commonR.string.state_fan_only) + "fog" -> context.getString(commonR.string.state_fog) + "hail" -> context.getString(commonR.string.state_hail) + "heat" -> context.getString(commonR.string.state_heat) + "heat_cool" -> context.getString(commonR.string.state_heat_cool) + "home" -> context.getString(commonR.string.state_home) + "idle" -> context.getString(commonR.string.state_idle) + "jammed" -> context.getString(commonR.string.state_jammed) + "lightning-raining" -> context.getString(commonR.string.state_lightning_raining) + "lightning" -> context.getString(commonR.string.state_lightning) + "locked" -> context.getString(commonR.string.state_locked) + "locking" -> context.getString(commonR.string.state_locking) + "mowing" -> context.getString(commonR.string.state_mowing) + "not_home" -> context.getString(commonR.string.state_not_home) + "off" -> context.getString(commonR.string.state_off) + "on" -> context.getString(commonR.string.state_on) + "open" -> context.getString(commonR.string.state_open) + "opening" -> context.getString(commonR.string.state_opening) + "partlycloudy" -> context.getString(commonR.string.state_partlycloudy) + "paused" -> context.getString(commonR.string.state_paused) + "pending" -> context.getString(commonR.string.state_pending) + "playing" -> context.getString(commonR.string.state_playing) + "problem" -> context.getString(commonR.string.state_problem) + "pouring" -> context.getString(commonR.string.state_pouring) + "rainy" -> context.getString(commonR.string.state_rainy) + "recording" -> context.getString(commonR.string.state_recording) + "returning" -> context.getString(commonR.string.state_returning) + "snowy-rainy" -> context.getString(commonR.string.state_snowy_rainy) + "snowy" -> context.getString(commonR.string.state_snowy) + "standby" -> context.getString(commonR.string.state_standby) + "streaming" -> context.getString(commonR.string.state_streaming) + "sunny" -> context.getString(commonR.string.state_sunny) + "triggered" -> context.getString(commonR.string.state_triggered) + "unavailable" -> context.getString(commonR.string.state_unavailable) + "unlocked" -> context.getString(commonR.string.state_unlocked) + "unlocking" -> context.getString(commonR.string.state_unlocking) + "unknown" -> context.getString(commonR.string.state_unknown) + "windy", "windy-variant" -> context.getString(commonR.string.state_windy) + else -> state + } + } } if (friendlyState == state && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { try { diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 02fd9d53f..0f14ce276 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1236,4 +1236,29 @@ Feedback Remaining charge time Compute an approximation for how much time (in minutes) remains until the battery is fully charged. Returns unavailable if no time can be computed: either there is not enough current data to make a decision or the battery is currently discharging. Returns 0 if calculation is not complete but device is currently charging. + Low + Normal + Charging + Not charging + Cold + Connected + Disconnected + Detected + Clear + Hot + Light detected + No light + Wet + Moving + Not moving + Plugged in + Unplugged + OK + Running + Not running + Unsafe + Safe + Tampering detected + Update available + Up-to-date