From 88ce628cec7d28da96df3ff144df033a7fd2e689 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 8 Sep 2020 13:03:14 -0700 Subject: [PATCH] Split battery attributes, part 1 (#899) * Split up battery attributes into their own sensors, part 1 * Switch from phone to device for description * Add a note to remove the attributes on next release --- .../android/sensors/BatterySensorManager.kt | 83 ++++++++++++++++++- app/src/main/res/values/strings.xml | 6 ++ 2 files changed, 85 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/BatterySensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/BatterySensorManager.kt index caa23ef5b..d8d748cc5 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/BatterySensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/BatterySensorManager.kt @@ -25,6 +25,25 @@ class BatterySensorManager : SensorManager { R.string.sensor_description_battery_state, "battery" ) + private val isChargingState = SensorManager.BasicSensor( + "is_charging", + "binary_sensor", + R.string.basic_sensor_name_charging, + R.string.sensor_description_charging, + "plug" + ) + private val chargerTypeState = SensorManager.BasicSensor( + "charger_type", + "sensor", + R.string.basic_sensor_name_charger_type, + R.string.sensor_description_charger_type + ) + private val batteryHealthState = SensorManager.BasicSensor( + "battery_health", + "sensor", + R.string.basic_sensor_name_battery_health, + R.string.sensor_description_battery_health + ) } override val enabledByDefault: Boolean @@ -33,7 +52,7 @@ class BatterySensorManager : SensorManager { override val name: Int get() = R.string.sensor_name_battery override val availableSensors: List - get() = listOf(batteryLevel, batteryState) + get() = listOf(batteryLevel, batteryState, isChargingState, chargerTypeState, batteryHealthState) override fun requiredPermissions(): Array { return emptyArray() @@ -46,6 +65,9 @@ class BatterySensorManager : SensorManager { if (intent != null) { updateBatteryLevel(context, intent) updateBatteryState(context, intent) + updateIsCharging(context, intent) + updateChargerType(context, intent) + updateBatteryHealth(context, intent) } } @@ -118,13 +140,66 @@ class BatterySensorManager : SensorManager { chargingStatus, getBatteryIcon(percentage, isCharging, chargerType, chargingStatus), mapOf( - "is_charging" to isCharging, - "charger_type" to chargerType, - "battery_health" to batteryHealth + "is_charging" to isCharging, // Remove after next release + "charger_type" to chargerType, // Remove after next release + "battery_health" to batteryHealth // Remove after next release ) ) } + private fun updateIsCharging(context: Context, intent: Intent) { + if (!isEnabled(context, isChargingState.id)) + return + + val isCharging = getIsCharging(intent) + + val icon = if (isCharging) "mdi:power-plug" else "mdi:power-plug-off" + onSensorUpdated( + context, + isChargingState, + isCharging, + icon, + mapOf() + ) + } + + private fun updateChargerType(context: Context, intent: Intent) { + if (!isEnabled(context, chargerTypeState.id)) + return + + val percentage: Int = getBatteryPercentage(intent) + val isCharging = getIsCharging(intent) + val chargerType = getChargerType(intent) + val chargingStatus = getChargingStatus(intent) + + onSensorUpdated( + context, + chargerTypeState, + chargerType, + getBatteryIcon(percentage, isCharging, chargerType, chargingStatus), + mapOf() + ) + } + + private fun updateBatteryHealth(context: Context, intent: Intent) { + if (!isEnabled(context, batteryHealthState.id)) + return + + val percentage: Int = getBatteryPercentage(intent) + val isCharging = getIsCharging(intent) + val chargerType = getChargerType(intent) + val chargingStatus = getChargingStatus(intent) + val batteryHealth = getBatteryHealth(intent) + + onSensorUpdated( + context, + batteryHealthState, + batteryHealth, + getBatteryIcon(percentage, isCharging, chargerType, chargingStatus), + mapOf() + ) + } + private fun getIsCharging(intent: Intent): Boolean { val status: Int = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2dcc5aaa8..44db3bb01 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,6 +157,9 @@ like to connect to: Whether or not the device is in an interactive state Whether or not the device is in Doze mode Whether or not the device is in Power Save mode + Whether or not the device is actively charging + The type of charger plugged into the device currently + The health of the battery Power Sensors Power Save Interactive @@ -174,6 +177,9 @@ like to connect to: Phone State SIM 1 SIM 2 + Is Charging + Charger Type + Battery Health Light Sensor Activity Sensors Geolocation Sensors