Skip to content

Commit

Permalink
Use device class for binary sensor friendly state to match frontend a…
Browse files Browse the repository at this point in the history
…nd core (#4395)

* Use device class for binary sensor friendly state to match frontend and core

* Update common/src/main/java/io/homeassistant/companion/android/common/data/integration/Entity.kt

Co-authored-by: Joris Pelgröm <jpelgrom@users.noreply.github.com>

---------

Co-authored-by: Joris Pelgröm <jpelgrom@users.noreply.github.com>
  • Loading branch information
dshokouhi and jpelgrom committed May 14, 2024
1 parent d640b9d commit 6e496c9
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -700,70 +700,100 @@ val <T> Entity<T>.friendlyName: String
get() = (attributes as? Map<*, *>)?.get("friendly_name")?.toString() ?: entityId

fun <T> Entity<T>.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<String, Any?>

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 {
Expand Down
25 changes: 25 additions & 0 deletions common/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1236,4 +1236,29 @@
<string name="feedback">Feedback</string>
<string name="basic_sensor_name_remaining_charge_time">Remaining charge time</string>
<string name="sensor_description_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.</string>
<string name="state_low">Low</string>
<string name="state_normal">Normal</string>
<string name="state_charging">Charging</string>
<string name="state_not_charging">Not charging</string>
<string name="state_cold">Cold</string>
<string name="state_connected">Connected</string>
<string name="state_disconnected">Disconnected</string>
<string name="state_detected">Detected</string>
<string name="state_clear">Clear</string>
<string name="state_hot">Hot</string>
<string name="state_light_detected">Light detected</string>
<string name="state_no_light">No light</string>
<string name="state_wet">Wet</string>
<string name="state_moving">Moving</string>
<string name="state_not_moving">Not moving</string>
<string name="state_plugged_in">Plugged in</string>
<string name="state_unplugged">Unplugged</string>
<string name="state_ok">OK</string>
<string name="state_running">Running</string>
<string name="state_not_running">Not running</string>
<string name="state_unsafe">Unsafe</string>
<string name="state_safe">Safe</string>
<string name="state_tampering_detected">Tampering detected</string>
<string name="state_update_available">Update available</string>
<string name="state_up_to_date">Up-to-date</string>
</resources>

0 comments on commit 6e496c9

Please sign in to comment.