Breaking Change: Only send updates when a state change has been detected (#891)

This commit is contained in:
Daniel Shokouhi 2020-09-08 06:21:57 -07:00 committed by GitHub
parent e84abafa78
commit c0d4b225ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 17 additions and 5 deletions

View file

@ -30,7 +30,7 @@ import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity
StaticWidgetEntity::class, StaticWidgetEntity::class,
TemplateWidgetEntity::class TemplateWidgetEntity::class
], ],
version = 8 version = 9
) )
abstract class AppDatabase : RoomDatabase() { abstract class AppDatabase : RoomDatabase() {
abstract fun authenticationDao(): AuthenticationDao abstract fun authenticationDao(): AuthenticationDao
@ -63,7 +63,8 @@ abstract class AppDatabase : RoomDatabase() {
MIGRATION_4_5, MIGRATION_4_5,
MIGRATION_5_6, MIGRATION_5_6,
MIGRATION_6_7, MIGRATION_6_7,
MIGRATION_7_8 MIGRATION_7_8,
MIGRATION_8_9
) )
.build() .build()
} }
@ -162,5 +163,10 @@ abstract class AppDatabase : RoomDatabase() {
database.execSQL("ALTER TABLE `sensor_attributes` ADD `value_type` TEXT NOT NULL DEFAULT 'string'") database.execSQL("ALTER TABLE `sensor_attributes` ADD `value_type` TEXT NOT NULL DEFAULT 'string'")
} }
} }
private val MIGRATION_8_9 = object : Migration(8, 9) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE `sensors` ADD `state_changed` INTEGER NOT NULL DEFAULT ''")
}
}
} }
} }

View file

@ -13,6 +13,8 @@ data class Sensor(
var enabled: Boolean, var enabled: Boolean,
@ColumnInfo(name = "registered") @ColumnInfo(name = "registered")
var registered: Boolean, var registered: Boolean,
@ColumnInfo(name = "state_changed")
var stateChanged: Boolean,
@ColumnInfo(name = "state") @ColumnInfo(name = "state")
var state: String, var state: String,
@ColumnInfo(name = "state_type") @ColumnInfo(name = "state_type")

View file

@ -251,6 +251,7 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView {
uniqueId, uniqueId,
isChecked, isChecked,
false, false,
true,
"" ""
) )
sensorDao.add(sensor) sensorDao.add(sensor)

View file

@ -155,7 +155,7 @@ class SensorDetailFragment(
sensorEntity.enabled = isEnabled sensorEntity.enabled = isEnabled
sensorDao.update(sensorEntity) sensorDao.update(sensorEntity)
} else { } else {
sensorEntity = Sensor(basicSensor.id, isEnabled, false, "") sensorEntity = Sensor(basicSensor.id, isEnabled, false, true, "")
sensorDao.add(sensorEntity) sensorDao.add(sensorEntity)
} }
refreshSensorData() refreshSensorData()

View file

@ -4,6 +4,7 @@ import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Process.myPid import android.os.Process.myPid
import android.os.Process.myUid import android.os.Process.myUid
import android.util.Log
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.database.AppDatabase import io.homeassistant.companion.android.database.AppDatabase
import io.homeassistant.companion.android.database.sensor.Attribute import io.homeassistant.companion.android.database.sensor.Attribute
@ -39,7 +40,7 @@ interface SensorManager {
// If we haven't created the entity yet do so and default to enabled if required // If we haven't created the entity yet do so and default to enabled if required
if (sensor == null) { if (sensor == null) {
sensor = Sensor(sensorId, permission && enabledByDefault, false, "") sensor = Sensor(sensorId, permission && enabledByDefault, false, true, "")
sensorDao.add(sensor) sensorDao.add(sensor)
} }
@ -67,6 +68,8 @@ interface SensorManager {
) { ) {
val sensorDao = AppDatabase.getInstance(context).sensorDao() val sensorDao = AppDatabase.getInstance(context).sensorDao()
val sensor = sensorDao.get(basicSensor.id) ?: return val sensor = sensorDao.get(basicSensor.id) ?: return
Log.d("SensorManager", "Old sensor state ${sensor.state} compared to new state $state for ${sensor.name}")
sensor.stateChanged = (sensor.state != state.toString())
sensor.id = basicSensor.id sensor.id = basicSensor.id
sensor.state = state.toString() sensor.state = state.toString()
sensor.stateType = when (state) { sensor.stateType = when (state) {

View file

@ -124,7 +124,7 @@ class SensorReceiver : BroadcastReceiver() {
Log.e(TAG, "Issue registering sensor: ${reg.uniqueId}", e) Log.e(TAG, "Issue registering sensor: ${reg.uniqueId}", e)
} }
} }
if (sensor?.enabled == true && fullSensor != null && sensor?.registered) { if (sensor?.enabled == true && fullSensor != null && sensor?.registered && sensor?.stateChanged) {
enabledRegistrations.add(fullSensor.toSensorRegistration()) enabledRegistrations.add(fullSensor.toSensorRegistration())
} }
} }