mirror of
https://github.com/home-assistant/android
synced 2024-09-19 16:11:37 +00:00
Breaking Change: Allow attributes to send over their proper data format (#889)
* Allow attributes to send over their proper data format * Review comments * Lint
This commit is contained in:
parent
567e60a14f
commit
f9f1f6f0d6
|
@ -71,7 +71,8 @@ class GeocodeSensorManager : SensorManager {
|
|||
"Country" to it.countryName,
|
||||
"ISO Country Code" to it.countryCode,
|
||||
"Locality" to it.locality,
|
||||
"Location" to listOf(it.latitude, it.longitude),
|
||||
"Latitude" to it.latitude,
|
||||
"Longitude" to it.longitude,
|
||||
"Postal Code" to it.postalCode,
|
||||
"Sub Administrative Area" to it.subAdminArea,
|
||||
"Sub Locality" to it.subLocality,
|
||||
|
|
|
@ -308,7 +308,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
|||
Log.d(TAG, "Not requesting accurate location, last accurate location was too recent")
|
||||
return
|
||||
}
|
||||
sensorDao.add(Attribute(backgroundLocation.id, "lastAccurateLocationRequest", now.toString()))
|
||||
sensorDao.add(Attribute(backgroundLocation.id, "lastAccurateLocationRequest", now.toString(), "string"))
|
||||
|
||||
val maxRetries = 5
|
||||
val request = createLocationRequest()
|
||||
|
|
|
@ -30,7 +30,7 @@ import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity
|
|||
StaticWidgetEntity::class,
|
||||
TemplateWidgetEntity::class
|
||||
],
|
||||
version = 7
|
||||
version = 8
|
||||
)
|
||||
abstract class AppDatabase : RoomDatabase() {
|
||||
abstract fun authenticationDao(): AuthenticationDao
|
||||
|
@ -62,7 +62,8 @@ abstract class AppDatabase : RoomDatabase() {
|
|||
MIGRATION_3_4,
|
||||
MIGRATION_4_5,
|
||||
MIGRATION_5_6,
|
||||
MIGRATION_6_7
|
||||
MIGRATION_6_7,
|
||||
MIGRATION_7_8
|
||||
)
|
||||
.build()
|
||||
}
|
||||
|
@ -156,5 +157,10 @@ abstract class AppDatabase : RoomDatabase() {
|
|||
database.execSQL("CREATE TABLE IF NOT EXISTS `sensor_attributes` (`sensor_id` TEXT NOT NULL, `name` TEXT NOT NULL, `value` TEXT NOT NULL, PRIMARY KEY(`sensor_id`, `name`))")
|
||||
}
|
||||
}
|
||||
private val MIGRATION_7_8 = object : Migration(7, 8) {
|
||||
override fun migrate(database: SupportSQLiteDatabase) {
|
||||
database.execSQL("ALTER TABLE `sensor_attributes` ADD `value_type` TEXT NOT NULL DEFAULT 'string'")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,5 +10,7 @@ data class Attribute(
|
|||
@ColumnInfo(name = "name")
|
||||
val name: String,
|
||||
@ColumnInfo(name = "value")
|
||||
val value: String
|
||||
var value: String,
|
||||
@ColumnInfo(name = "value_type")
|
||||
var valueType: String
|
||||
)
|
||||
|
|
|
@ -14,7 +14,16 @@ data class SensorWithAttributes(
|
|||
val attributes: List<Attribute>
|
||||
) {
|
||||
fun toSensorRegistration(): SensorRegistration<Any> {
|
||||
val attributes = attributes.map { it.name to it.value }.toMap()
|
||||
val attributes = attributes.map {
|
||||
val attributeValue = when (it.valueType) {
|
||||
"boolean" -> it.value.toBoolean()
|
||||
"float" -> it.value.toFloat()
|
||||
"int" -> it.value.toInt()
|
||||
"string" -> it.value
|
||||
else -> throw IllegalArgumentException("Attribute: ${it.name} is of unknown type: ${it.valueType}")
|
||||
}
|
||||
it.name to attributeValue
|
||||
}.toMap()
|
||||
val state = when (sensor.stateType) {
|
||||
"" -> ""
|
||||
"boolean" -> sensor.state.toBoolean()
|
||||
|
|
|
@ -67,7 +67,6 @@ interface SensorManager {
|
|||
) {
|
||||
val sensorDao = AppDatabase.getInstance(context).sensorDao()
|
||||
val sensor = sensorDao.get(basicSensor.id) ?: return
|
||||
|
||||
sensor.id = basicSensor.id
|
||||
sensor.state = state.toString()
|
||||
sensor.stateType = when (state) {
|
||||
|
@ -84,10 +83,24 @@ interface SensorManager {
|
|||
sensor.unitOfMeasurement = basicSensor.unitOfMeasurement
|
||||
|
||||
sensorDao.update(sensor)
|
||||
|
||||
sensorDao.clearAttributes(basicSensor.id)
|
||||
attributes.entries.forEach { entry ->
|
||||
sensorDao.add(Attribute(basicSensor.id, entry.key, entry.value.toString()))
|
||||
|
||||
for (item in attributes) {
|
||||
val valueType = when (item.value) {
|
||||
is Boolean -> "boolean"
|
||||
is Int -> "int"
|
||||
is Number -> "float"
|
||||
else -> "string" // Always default to String for attributes
|
||||
}
|
||||
|
||||
sensorDao.add(
|
||||
Attribute(
|
||||
basicSensor.id,
|
||||
item.key,
|
||||
item.value.toString(),
|
||||
valueType
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue