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
This commit is contained in:
Daniel Shokouhi 2020-09-03 12:13:29 -07:00 committed by GitHub
parent 986655c912
commit c221e85fa4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 61 additions and 10 deletions

View file

@ -100,6 +100,8 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
return "on_foot" return "on_foot"
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_activity get() = R.string.sensor_name_activity

View file

@ -22,6 +22,8 @@ class GeocodeSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_geolocation get() = R.string.sensor_name_geolocation
override val availableSensors: List<SensorManager.BasicSensor> override val availableSensors: List<SensorManager.BasicSensor>

View file

@ -364,6 +364,9 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = true
override val name: Int override val name: Int
get() = R.string.sensor_name_location get() = R.string.sensor_name_location

View file

@ -18,6 +18,9 @@ class AudioSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_audio get() = R.string.sensor_name_audio

View file

@ -27,6 +27,9 @@ class BatterySensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = true
override val name: Int override val name: Int
get() = R.string.sensor_name_battery get() = R.string.sensor_name_battery
override val availableSensors: List<SensorManager.BasicSensor> override val availableSensors: List<SensorManager.BasicSensor>

View file

@ -20,6 +20,8 @@ class BluetoothSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_bluetooth get() = R.string.sensor_name_bluetooth
override val availableSensors: List<SensorManager.BasicSensor> override val availableSensors: List<SensorManager.BasicSensor>

View file

@ -17,6 +17,8 @@ class DNDSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_dnd get() = R.string.sensor_name_dnd

View file

@ -23,6 +23,8 @@ class LastRebootSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_last_reboot get() = R.string.sensor_name_last_reboot

View file

@ -25,6 +25,9 @@ class LightSensorManager : SensorManager, SensorEventListener {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_light get() = R.string.sensor_name_light

View file

@ -18,6 +18,8 @@ class NetworkSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = true
override val name: Int override val name: Int
get() = R.string.sensor_name_network get() = R.string.sensor_name_network
override val availableSensors: List<SensorManager.BasicSensor> override val availableSensors: List<SensorManager.BasicSensor>

View file

@ -23,6 +23,8 @@ class NextAlarmManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_alarm get() = R.string.sensor_name_alarm

View file

@ -34,6 +34,8 @@ class PhoneStateSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_phone get() = R.string.sensor_name_phone

View file

@ -28,6 +28,9 @@ class PressureSensorManager : SensorManager, SensorEventListener {
private lateinit var latestContext: Context private lateinit var latestContext: Context
private lateinit var mySensorManager: android.hardware.SensorManager private lateinit var mySensorManager: android.hardware.SensorManager
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_pressure get() = R.string.sensor_name_pressure

View file

@ -27,6 +27,9 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
private lateinit var mySensorManager: android.hardware.SensorManager private lateinit var mySensorManager: android.hardware.SensorManager
private var maxRange: Int = 0 private var maxRange: Int = 0
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_proximity get() = R.string.sensor_name_proximity

View file

@ -12,6 +12,7 @@ import androidx.preference.contains
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
import io.homeassistant.companion.android.database.AppDatabase import io.homeassistant.companion.android.database.AppDatabase
import io.homeassistant.companion.android.database.sensor.Sensor
import io.homeassistant.companion.android.database.sensor.SensorDao import io.homeassistant.companion.android.database.sensor.SensorDao
class SensorDetailFragment( class SensorDetailFragment(
@ -51,9 +52,10 @@ class SensorDetailFragment(
findPreference<SwitchPreference>("enabled")?.let { findPreference<SwitchPreference>("enabled")?.let {
val dao = sensorDao.get(basicSensor.id) val dao = sensorDao.get(basicSensor.id)
val perm = sensorManager.checkPermission(requireContext()) val perm = sensorManager.checkPermission(requireContext())
if (dao == null) { if (dao == null && sensorManager.enabledByDefault) {
it.isChecked = perm it.isChecked = perm
} else { }
if (dao != null) {
it.isChecked = dao.enabled && perm it.isChecked = dao.enabled && perm
} }
updateSensorEntity(it.isChecked) updateSensorEntity(it.isChecked)
@ -148,10 +150,13 @@ class SensorDetailFragment(
private fun updateSensorEntity( private fun updateSensorEntity(
isEnabled: Boolean isEnabled: Boolean
) { ) {
val sensorEntity = sensorDao.get(basicSensor.id) var sensorEntity = sensorDao.get(basicSensor.id)
if (sensorEntity != null) { if (sensorEntity != null) {
sensorEntity.enabled = isEnabled sensorEntity.enabled = isEnabled
sensorDao.update(sensorEntity) sensorDao.update(sensorEntity)
} else {
sensorEntity = Sensor(basicSensor.id, isEnabled, false, "")
sensorDao.add(sensorEntity)
} }
refreshSensorData() refreshSensorData()
} }

View file

@ -13,6 +13,7 @@ interface SensorManager {
val name: Int val name: Int
val availableSensors: List<BasicSensor> val availableSensors: List<BasicSensor>
val enabledByDefault: Boolean
data class BasicSensor( data class BasicSensor(
val id: String, val id: String,
@ -36,9 +37,9 @@ interface SensorManager {
var sensor = sensorDao.get(sensorId) var sensor = sensorDao.get(sensorId)
val permission = checkPermission(context) 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) { if (sensor == null) {
sensor = Sensor(sensorId, permission, false, "") sensor = Sensor(sensorId, permission && enabledByDefault, false, "")
sensorDao.add(sensor) sensorDao.add(sensor)
} }

View file

@ -83,7 +83,7 @@ class SensorReceiver : BroadcastReceiver() {
try { try {
manager.requestSensorUpdate(context) manager.requestSensorUpdate(context)
} catch (e: Exception) { } 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 -> manager.availableSensors.forEach { basicSensor ->
val fullSensor = sensorDao.getFull(basicSensor.id) val fullSensor = sensorDao.getFull(basicSensor.id)

View file

@ -26,6 +26,9 @@ class StepsSensorManager : SensorManager, SensorEventListener {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_steps get() = R.string.sensor_name_steps

View file

@ -53,6 +53,8 @@ class StorageSensorManager : SensorManager {
} }
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_storage get() = R.string.sensor_name_storage
override val availableSensors: List<SensorManager.BasicSensor> override val availableSensors: List<SensorManager.BasicSensor>

View file

@ -11,6 +11,8 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
// Noop // Noop
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_activity get() = R.string.sensor_name_activity

View file

@ -15,6 +15,8 @@ class GeocodeSensorManager : SensorManager {
) )
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_geolocation get() = R.string.sensor_name_geolocation

View file

@ -36,6 +36,8 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
// Noop // Noop
} }
override val enabledByDefault: Boolean
get() = false
override val name: Int override val name: Int
get() = R.string.sensor_name_location get() = R.string.sensor_name_location
override val availableSensors: List<SensorManager.BasicSensor> override val availableSensors: List<SensorManager.BasicSensor>