mirror of
https://github.com/home-assistant/android
synced 2024-09-19 16:11:37 +00:00
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:
parent
986655c912
commit
c221e85fa4
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue