From c221e85fa4e5fbf0157bc3ce21394c1723cd3d36 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Thu, 3 Sep 2020 12:13:29 -0700 Subject: [PATCH] Allow sensors to be disabled by default until user enables them (#875) * Allow sensors to be disabled by default until user enables them * Review comments --- .../android/sensors/ActivitySensorManager.kt | 2 ++ .../android/sensors/GeocodeSensorManager.kt | 2 ++ .../android/sensors/LocationSensorManager.kt | 3 +++ .../companion/android/sensors/AudioSensorManager.kt | 3 +++ .../android/sensors/BatterySensorManager.kt | 3 +++ .../android/sensors/BluetoothSensorManager.kt | 2 ++ .../companion/android/sensors/DNDSensorManager.kt | 2 ++ .../android/sensors/LastRebootSensorManager.kt | 2 ++ .../companion/android/sensors/LightSensorManager.kt | 3 +++ .../android/sensors/NetworkSensorManager.kt | 2 ++ .../companion/android/sensors/NextAlarmManager.kt | 2 ++ .../android/sensors/PhoneStateSensorManager.kt | 2 ++ .../android/sensors/PressureSensorManager.kt | 3 +++ .../android/sensors/ProximitySensorManager.kt | 3 +++ .../android/sensors/SensorDetailFragment.kt | 11 ++++++++--- .../companion/android/sensors/SensorManager.kt | 13 +++++++------ .../companion/android/sensors/SensorReceiver.kt | 2 +- .../companion/android/sensors/StepsSensorManager.kt | 3 +++ .../android/sensors/StorageSensorManager.kt | 2 ++ .../android/sensors/ActivitySensorManager.kt | 2 ++ .../android/sensors/GeocodeSensorManager.kt | 2 ++ .../android/sensors/LocationSensorManager.kt | 2 ++ 22 files changed, 61 insertions(+), 10 deletions(-) diff --git a/app/src/full/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt b/app/src/full/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt index defcc7390..fe5c7aa87 100644 --- a/app/src/full/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt +++ b/app/src/full/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt @@ -100,6 +100,8 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager { return "on_foot" } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_activity diff --git a/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt b/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt index fcf86cee5..ff0ea2167 100644 --- a/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt +++ b/app/src/full/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt @@ -22,6 +22,8 @@ class GeocodeSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_geolocation override val availableSensors: List diff --git a/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt b/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt index 92866320e..46b17eb71 100644 --- a/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt +++ b/app/src/full/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt @@ -364,6 +364,9 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager { ) } + override val enabledByDefault: Boolean + get() = true + override val name: Int get() = R.string.sensor_name_location diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/AudioSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/AudioSensorManager.kt index e43c12556..8f9b0bb46 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/AudioSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/AudioSensorManager.kt @@ -18,6 +18,9 @@ class AudioSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false + override val name: Int get() = R.string.sensor_name_audio 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 7a2749800..caa23ef5b 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 @@ -27,6 +27,9 @@ class BatterySensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = true + override val name: Int get() = R.string.sensor_name_battery override val availableSensors: List diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/BluetoothSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/BluetoothSensorManager.kt index b0d719985..cb416dfb7 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/BluetoothSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/BluetoothSensorManager.kt @@ -20,6 +20,8 @@ class BluetoothSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_bluetooth override val availableSensors: List diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/DNDSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/DNDSensorManager.kt index e8533a379..0d2ff81bc 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/DNDSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/DNDSensorManager.kt @@ -17,6 +17,8 @@ class DNDSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_dnd diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/LastRebootSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/LastRebootSensorManager.kt index 4aa33d036..85ba7ff0a 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/LastRebootSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/LastRebootSensorManager.kt @@ -23,6 +23,8 @@ class LastRebootSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_last_reboot diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt index 1f1de3d44..2d97a20c7 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt @@ -25,6 +25,9 @@ class LightSensorManager : SensorManager, SensorEventListener { ) } + override val enabledByDefault: Boolean + get() = false + override val name: Int get() = R.string.sensor_name_light diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/NetworkSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/NetworkSensorManager.kt index 7c11784c0..4c466f51f 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/NetworkSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/NetworkSensorManager.kt @@ -18,6 +18,8 @@ class NetworkSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = true override val name: Int get() = R.string.sensor_name_network override val availableSensors: List diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/NextAlarmManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/NextAlarmManager.kt index 6e33c17ab..4ef1128ba 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/NextAlarmManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/NextAlarmManager.kt @@ -23,6 +23,8 @@ class NextAlarmManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_alarm diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/PhoneStateSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/PhoneStateSensorManager.kt index 233fae8b9..1161e161a 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/PhoneStateSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/PhoneStateSensorManager.kt @@ -34,6 +34,8 @@ class PhoneStateSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_phone diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt index c1cc3b58b..2f5e61185 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt @@ -28,6 +28,9 @@ class PressureSensorManager : SensorManager, SensorEventListener { private lateinit var latestContext: Context private lateinit var mySensorManager: android.hardware.SensorManager + override val enabledByDefault: Boolean + get() = false + override val name: Int get() = R.string.sensor_name_pressure diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt index fd713c00d..164725291 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt @@ -27,6 +27,9 @@ class ProximitySensorManager : SensorManager, SensorEventListener { private lateinit var mySensorManager: android.hardware.SensorManager private var maxRange: Int = 0 + override val enabledByDefault: Boolean + get() = false + override val name: Int get() = R.string.sensor_name_proximity 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 ab5aed22e..2bbbce6e1 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 @@ -12,6 +12,7 @@ import androidx.preference.contains import io.homeassistant.companion.android.R import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor import io.homeassistant.companion.android.database.AppDatabase +import io.homeassistant.companion.android.database.sensor.Sensor import io.homeassistant.companion.android.database.sensor.SensorDao class SensorDetailFragment( @@ -51,9 +52,10 @@ class SensorDetailFragment( findPreference("enabled")?.let { val dao = sensorDao.get(basicSensor.id) val perm = sensorManager.checkPermission(requireContext()) - if (dao == null) { + if (dao == null && sensorManager.enabledByDefault) { it.isChecked = perm - } else { + } + if (dao != null) { it.isChecked = dao.enabled && perm } updateSensorEntity(it.isChecked) @@ -148,10 +150,13 @@ class SensorDetailFragment( private fun updateSensorEntity( isEnabled: Boolean ) { - val sensorEntity = sensorDao.get(basicSensor.id) + var sensorEntity = sensorDao.get(basicSensor.id) if (sensorEntity != null) { sensorEntity.enabled = isEnabled sensorDao.update(sensorEntity) + } else { + sensorEntity = Sensor(basicSensor.id, isEnabled, false, "") + 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 ff367f92e..a66be30aa 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 @@ -13,6 +13,7 @@ interface SensorManager { val name: Int val availableSensors: List + val enabledByDefault: Boolean data class BasicSensor( val id: String, @@ -36,17 +37,17 @@ interface SensorManager { var sensor = sensorDao.get(sensorId) val permission = checkPermission(context) - // If we haven't created the entity yet do so and default to enabled + // If we haven't created the entity yet do so and default to enabled if required if (sensor == null) { - sensor = Sensor(sensorId, permission, false, "") + sensor = Sensor(sensorId, permission && enabledByDefault, false, "") sensorDao.add(sensor) } // If we don't have permission but we are still enabled then we aren't really enabled. - if (sensor.enabled && !permission) { - sensor.enabled = false - sensorDao.update(sensor) - } + if (sensor.enabled && !permission) { + sensor.enabled = false + sensorDao.update(sensor) + } return sensor.enabled } 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 9f9823b3d..8a650ec63 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 @@ -83,7 +83,7 @@ class SensorReceiver : BroadcastReceiver() { try { manager.requestSensorUpdate(context) } catch (e: Exception) { - Log.e(TAG, "Issue requesting updates for ${manager.name}", e) + Log.e(TAG, "Issue requesting updates for ${context.getString(manager.name)}", e) } manager.availableSensors.forEach { basicSensor -> val fullSensor = sensorDao.getFull(basicSensor.id) diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt index 0252891d8..24a86df5d 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt @@ -26,6 +26,9 @@ class StepsSensorManager : SensorManager, SensorEventListener { ) } + override val enabledByDefault: Boolean + get() = false + override val name: Int get() = R.string.sensor_name_steps diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/StorageSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/StorageSensorManager.kt index 84c05674f..e8f3ec414 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/StorageSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/StorageSensorManager.kt @@ -53,6 +53,8 @@ class StorageSensorManager : SensorManager { } } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_storage override val availableSensors: List diff --git a/app/src/minimal/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt b/app/src/minimal/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt index cacfa8890..5940f07e8 100644 --- a/app/src/minimal/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt +++ b/app/src/minimal/java/io/homeassistant/companion/android/sensors/ActivitySensorManager.kt @@ -11,6 +11,8 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager { // Noop } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_activity diff --git a/app/src/minimal/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt b/app/src/minimal/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt index b5fe8f72f..2f21590b7 100644 --- a/app/src/minimal/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt +++ b/app/src/minimal/java/io/homeassistant/companion/android/sensors/GeocodeSensorManager.kt @@ -15,6 +15,8 @@ class GeocodeSensorManager : SensorManager { ) } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_geolocation diff --git a/app/src/minimal/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt b/app/src/minimal/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt index e650a8c75..848fd09f5 100644 --- a/app/src/minimal/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt +++ b/app/src/minimal/java/io/homeassistant/companion/android/sensors/LocationSensorManager.kt @@ -36,6 +36,8 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager { // Noop } + override val enabledByDefault: Boolean + get() = false override val name: Int get() = R.string.sensor_name_location override val availableSensors: List