From c0d4b225ed4e7faa0bc816803b9b739d47bcadd7 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Tue, 8 Sep 2020 06:21:57 -0700 Subject: [PATCH] Breaking Change: Only send updates when a state change has been detected (#891) --- .../companion/android/database/AppDatabase.kt | 10 ++++++++-- .../companion/android/database/sensor/Sensor.kt | 2 ++ .../integration/MobileAppIntegrationFragment.kt | 1 + .../companion/android/sensors/SensorDetailFragment.kt | 2 +- .../companion/android/sensors/SensorManager.kt | 5 ++++- .../companion/android/sensors/SensorReceiver.kt | 2 +- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/homeassistant/companion/android/database/AppDatabase.kt b/app/src/main/java/io/homeassistant/companion/android/database/AppDatabase.kt index 658165f0c..0332f4549 100644 --- a/app/src/main/java/io/homeassistant/companion/android/database/AppDatabase.kt +++ b/app/src/main/java/io/homeassistant/companion/android/database/AppDatabase.kt @@ -30,7 +30,7 @@ import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity StaticWidgetEntity::class, TemplateWidgetEntity::class ], - version = 8 + version = 9 ) abstract class AppDatabase : RoomDatabase() { abstract fun authenticationDao(): AuthenticationDao @@ -63,7 +63,8 @@ abstract class AppDatabase : RoomDatabase() { MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7, - MIGRATION_7_8 + MIGRATION_7_8, + MIGRATION_8_9 ) .build() } @@ -162,5 +163,10 @@ abstract class AppDatabase : RoomDatabase() { 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 ''") + } + } } } diff --git a/app/src/main/java/io/homeassistant/companion/android/database/sensor/Sensor.kt b/app/src/main/java/io/homeassistant/companion/android/database/sensor/Sensor.kt index 035c70b17..7a1be9cbe 100644 --- a/app/src/main/java/io/homeassistant/companion/android/database/sensor/Sensor.kt +++ b/app/src/main/java/io/homeassistant/companion/android/database/sensor/Sensor.kt @@ -13,6 +13,8 @@ data class Sensor( var enabled: Boolean, @ColumnInfo(name = "registered") var registered: Boolean, + @ColumnInfo(name = "state_changed") + var stateChanged: Boolean, @ColumnInfo(name = "state") var state: String, @ColumnInfo(name = "state_type") diff --git a/app/src/main/java/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationFragment.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationFragment.kt index 445c810c7..a6d366b39 100644 --- a/app/src/main/java/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationFragment.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationFragment.kt @@ -251,6 +251,7 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView { uniqueId, isChecked, false, + true, "" ) sensorDao.add(sensor) diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/SensorDetailFragment.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/SensorDetailFragment.kt index 2bbbce6e1..4ade09872 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/SensorDetailFragment.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/SensorDetailFragment.kt @@ -155,7 +155,7 @@ class SensorDetailFragment( sensorEntity.enabled = isEnabled sensorDao.update(sensorEntity) } else { - sensorEntity = Sensor(basicSensor.id, isEnabled, false, "") + sensorEntity = Sensor(basicSensor.id, isEnabled, false, true, "") sensorDao.add(sensorEntity) } refreshSensorData() diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/SensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/SensorManager.kt index c2cea1ad3..27b3ae6ad 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/SensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/SensorManager.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Process.myPid import android.os.Process.myUid +import android.util.Log import io.homeassistant.companion.android.R import io.homeassistant.companion.android.database.AppDatabase 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 (sensor == null) { - sensor = Sensor(sensorId, permission && enabledByDefault, false, "") + sensor = Sensor(sensorId, permission && enabledByDefault, false, true, "") sensorDao.add(sensor) } @@ -67,6 +68,8 @@ interface SensorManager { ) { val sensorDao = AppDatabase.getInstance(context).sensorDao() 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.state = state.toString() sensor.stateType = when (state) { diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/SensorReceiver.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/SensorReceiver.kt index 7ce9e2292..f9fbfadbe 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/SensorReceiver.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/SensorReceiver.kt @@ -124,7 +124,7 @@ class SensorReceiver : BroadcastReceiver() { 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()) } }