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"
}
override val enabledByDefault: Boolean
get() = false
override val name: Int
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
get() = R.string.sensor_name_geolocation
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
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
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
get() = R.string.sensor_name_battery
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
get() = R.string.sensor_name_bluetooth
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
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
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
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
get() = R.string.sensor_name_network
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
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
get() = R.string.sensor_name_phone

View file

@ -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

View file

@ -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

View file

@ -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<SwitchPreference>("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()
}

View file

@ -13,6 +13,7 @@ interface SensorManager {
val name: Int
val availableSensors: List<BasicSensor>
val enabledByDefault: Boolean
data class BasicSensor(
val id: String,
@ -36,9 +37,9 @@ 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)
}

View file

@ -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)

View file

@ -26,6 +26,9 @@ class StepsSensorManager : SensorManager, SensorEventListener {
)
}
override val enabledByDefault: Boolean
get() = false
override val name: Int
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
get() = R.string.sensor_name_storage
override val availableSensors: List<SensorManager.BasicSensor>

View file

@ -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

View file

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

View file

@ -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<SensorManager.BasicSensor>