mirror of
https://github.com/home-assistant/android
synced 2024-10-07 00:29:32 +00:00
Send state based on reported status, apply car prefix to car sensors, add some logging around new car sensors (#3668)
* Apply car prefix to car sensors, add some logging around new car sensors * Update state based on reported status, minor clean up * Make code more concise per review comment * Use unavailable when status is not given
This commit is contained in:
parent
c4da52bdab
commit
d421b88db2
|
@ -17,6 +17,7 @@ import io.homeassistant.companion.android.common.R
|
|||
import io.homeassistant.companion.android.common.sensors.SensorManager
|
||||
import io.homeassistant.companion.android.vehicle.HaCarAppService
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
class CarSensorManager :
|
||||
SensorManager,
|
||||
DefaultLifecycleObserver {
|
||||
|
@ -132,7 +133,6 @@ class CarSensorManager :
|
|||
|
||||
private fun allDisabled(): Boolean = sensorsList.none { isEnabled(context, it) }
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
private fun connected(): Boolean = HaCarAppService.carInfo != null
|
||||
|
||||
override fun requestSensorUpdate(context: Context) {
|
||||
|
@ -160,7 +160,6 @@ class CarSensorManager :
|
|||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
@androidx.annotation.OptIn(androidx.car.app.annotations.ExperimentalCarApi::class)
|
||||
private fun setListener(l: Listener, enable: Boolean) {
|
||||
if (enable) {
|
||||
|
@ -206,38 +205,39 @@ class CarSensorManager :
|
|||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
private fun updateCarInfo() {
|
||||
for (l in listenerSensors) {
|
||||
if (l.value.any { isEnabled(context, it) }) {
|
||||
if (listenerLastRegistered[l.key] != -1L && listenerLastRegistered[l.key]!! + SensorManager.SENSOR_LISTENER_TIMEOUT < System.currentTimeMillis()) {
|
||||
Log.d(TAG, "Re-registering CarInfo ${l.key} listener as it appears to be stuck")
|
||||
setListener(l.key, false)
|
||||
listenerSensors.forEach { (listener, sensors) ->
|
||||
if (sensors.any { isEnabled(context, it) }) {
|
||||
if (listenerLastRegistered[listener] != -1L && listenerLastRegistered[listener]!! + SensorManager.SENSOR_LISTENER_TIMEOUT < System.currentTimeMillis()) {
|
||||
Log.d(TAG, "Re-registering CarInfo $listener listener as it appears to be stuck")
|
||||
setListener(listener, false)
|
||||
}
|
||||
|
||||
if (listenerLastRegistered[l.key] == -1L) {
|
||||
setListener(l.key, true)
|
||||
if (listenerLastRegistered[listener] == -1L) {
|
||||
setListener(listener, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
fun onEnergyAvailable(data: EnergyLevel) {
|
||||
if (data.fuelPercent.status == CarValue.STATUS_SUCCESS && isEnabled(context, fuelLevel)) {
|
||||
private fun onEnergyAvailable(data: EnergyLevel) {
|
||||
val fuelStatus = carValueStatus(data.fuelPercent.status)
|
||||
Log.d(TAG, "Received Energy level: $data")
|
||||
if (isEnabled(context, fuelLevel)) {
|
||||
onSensorUpdated(
|
||||
context,
|
||||
fuelLevel,
|
||||
data.fuelPercent.value!!,
|
||||
fuelStatus ?: data.fuelPercent.value!!,
|
||||
fuelLevel.statelessIcon,
|
||||
mapOf()
|
||||
)
|
||||
}
|
||||
if (data.batteryPercent.status == CarValue.STATUS_SUCCESS && isEnabled(context, batteryLevel)) {
|
||||
val batteryStatus = carValueStatus(data.batteryPercent.status)
|
||||
if (isEnabled(context, batteryLevel)) {
|
||||
onSensorUpdated(
|
||||
context,
|
||||
batteryLevel,
|
||||
data.batteryPercent.value!!,
|
||||
batteryStatus ?: data.batteryPercent.value!!,
|
||||
batteryLevel.statelessIcon,
|
||||
mapOf()
|
||||
)
|
||||
|
@ -245,13 +245,14 @@ class CarSensorManager :
|
|||
setListener(Listener.ENERGY, false)
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
fun onModelAvailable(data: Model) {
|
||||
if (data.name.status == CarValue.STATUS_SUCCESS && isEnabled(context, carName)) {
|
||||
private fun onModelAvailable(data: Model) {
|
||||
val status = carValueStatus(data.name.status)
|
||||
Log.d(TAG, "Received model information: $data")
|
||||
if (isEnabled(context, carName)) {
|
||||
onSensorUpdated(
|
||||
context,
|
||||
carName,
|
||||
data.name.value!!,
|
||||
status ?: data.name.value!!,
|
||||
carName.statelessIcon,
|
||||
mapOf(
|
||||
"car_manufacturer" to data.manufacturer.value,
|
||||
|
@ -262,14 +263,15 @@ class CarSensorManager :
|
|||
setListener(Listener.MODEL, false)
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
@androidx.annotation.OptIn(androidx.car.app.annotations.ExperimentalCarApi::class)
|
||||
fun onStatusAvailable(data: EvStatus) {
|
||||
if (data.evChargePortConnected.status == CarValue.STATUS_SUCCESS && isEnabled(context, carStatus)) {
|
||||
val status = carValueStatus(data.evChargePortConnected.status)
|
||||
Log.d(TAG, "Received status available: $data")
|
||||
if (isEnabled(context, carStatus)) {
|
||||
onSensorUpdated(
|
||||
context,
|
||||
carStatus,
|
||||
data.evChargePortConnected.value == true,
|
||||
status ?: (data.evChargePortConnected.value == true),
|
||||
carStatus.statelessIcon,
|
||||
mapOf(
|
||||
"car_charge_port_open" to (data.evChargePortOpen.value == true)
|
||||
|
@ -279,18 +281,29 @@ class CarSensorManager :
|
|||
setListener(Listener.STATUS, false)
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
@androidx.annotation.OptIn(androidx.car.app.annotations.ExperimentalCarApi::class)
|
||||
fun onMileageAvailable(data: Mileage) {
|
||||
if (data.odometerMeters.status == CarValue.STATUS_SUCCESS && isEnabled(context, odometerValue)) {
|
||||
val status = carValueStatus(data.odometerMeters.status)
|
||||
Log.d(TAG, "Received mileage: $data")
|
||||
if (isEnabled(context, odometerValue)) {
|
||||
onSensorUpdated(
|
||||
context,
|
||||
odometerValue,
|
||||
data.odometerMeters.value!!,
|
||||
status ?: data.odometerMeters.value!!,
|
||||
odometerValue.statelessIcon,
|
||||
mapOf()
|
||||
)
|
||||
}
|
||||
setListener(Listener.MILEAGE, false)
|
||||
}
|
||||
|
||||
private fun carValueStatus(value: Int): String? {
|
||||
return when (value) {
|
||||
CarValue.STATUS_SUCCESS -> null
|
||||
CarValue.STATUS_UNAVAILABLE -> "unavailable"
|
||||
CarValue.STATUS_UNKNOWN -> "unknown"
|
||||
CarValue.STATUS_UNIMPLEMENTED -> "unimplemented"
|
||||
else -> "unavailable"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,9 +63,9 @@
|
|||
<string name="basic_sensor_name_bluetooth">Bluetooth Connection</string>
|
||||
<string name="basic_sensor_name_car_battery">Car Battery</string>
|
||||
<string name="basic_sensor_name_car_name">Car Name</string>
|
||||
<string name="basic_sensor_name_car_charging_status">Charging Status</string>
|
||||
<string name="basic_sensor_name_car_fuel">Fuel</string>
|
||||
<string name="basic_sensor_name_car_odometer">Odometer</string>
|
||||
<string name="basic_sensor_name_car_charging_status">Car Charging Status</string>
|
||||
<string name="basic_sensor_name_car_fuel">Car Fuel</string>
|
||||
<string name="basic_sensor_name_car_odometer">Car Odometer</string>
|
||||
<string name="basic_sensor_name_charger_type">Charger Type</string>
|
||||
<string name="basic_sensor_name_charging">Is Charging</string>
|
||||
<string name="basic_sensor_name_current_time_zone">Current Time Zone</string>
|
||||
|
|
Loading…
Reference in a new issue