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
This commit is contained in:
Daniel Shokouhi 2020-09-08 13:03:14 -07:00 committed by GitHub
parent a71378ed7e
commit 88ce628cec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 85 additions and 4 deletions

View file

@ -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<SensorManager.BasicSensor>
get() = listOf(batteryLevel, batteryState)
get() = listOf(batteryLevel, batteryState, isChargingState, chargerTypeState, batteryHealthState)
override fun requiredPermissions(): Array<String> {
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)

View file

@ -157,6 +157,9 @@ like to connect to:</string>
<string name="sensor_description_interactive">Whether or not the device is in an interactive state</string>
<string name="sensor_description_doze">Whether or not the device is in Doze mode</string>
<string name="sensor_description_power_save">Whether or not the device is in Power Save mode</string>
<string name="sensor_description_charging">Whether or not the device is actively charging</string>
<string name="sensor_description_charger_type">The type of charger plugged into the device currently</string>
<string name="sensor_description_battery_health">The health of the battery</string>
<string name="sensor_name_power">Power Sensors</string>
<string name="basic_sensor_name_power_save">Power Save</string>
<string name="basic_sensor_name_interactive">Interactive</string>
@ -174,6 +177,9 @@ like to connect to:</string>
<string name="basic_sensor_name_phone">Phone State</string>
<string name="basic_sensor_name_sim1">SIM 1</string>
<string name="basic_sensor_name_sim2">SIM 2</string>
<string name="basic_sensor_name_charging">Is Charging</string>
<string name="basic_sensor_name_charger_type">Charger Type</string>
<string name="basic_sensor_name_battery_health">Battery Health</string>
<string name="sensor_name_light">Light Sensor</string>
<string name="sensor_name_activity">Activity Sensors</string>
<string name="sensor_name_geolocation">Geolocation Sensors</string>