mirror of
https://github.com/home-assistant/android
synced 2024-10-02 22:34:46 +00:00
Track time between hardware sensor updates to restart the listener as needed (#3026)
* Check if listener got stuck for heart rate sensor and restart if needed * Apply reset listener logic to other hardware sensors * Review comments
This commit is contained in:
parent
affc60178e
commit
57b3b771b4
|
@ -17,6 +17,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
|
|||
|
||||
private const val TAG = "LightSensor"
|
||||
private var isListenerRegistered = false
|
||||
private var listenerLastRegistered = 0
|
||||
private val lightSensor = SensorManager.BasicSensor(
|
||||
"light_sensor",
|
||||
"sensor",
|
||||
|
@ -65,6 +66,12 @@ class LightSensorManager : SensorManager, SensorEventListener {
|
|||
if (!isEnabled(latestContext, lightSensor.id))
|
||||
return
|
||||
|
||||
val now = System.currentTimeMillis()
|
||||
if (listenerLastRegistered + SensorManager.SENSOR_LISTENER_TIMEOUT < now && isListenerRegistered) {
|
||||
Log.d(TAG, "Re-registering listener as it appears to be stuck")
|
||||
mySensorManager.unregisterListener(this)
|
||||
isListenerRegistered = false
|
||||
}
|
||||
mySensorManager = latestContext.getSystemService()!!
|
||||
|
||||
val lightSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
|
||||
|
@ -76,6 +83,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
|
|||
)
|
||||
Log.d(TAG, "Light sensor listener registered")
|
||||
isListenerRegistered = true
|
||||
listenerLastRegistered = now.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
|
|||
|
||||
private const val TAG = "PressureSensor"
|
||||
private var isListenerRegistered = false
|
||||
private var listenerLastRegistered = 0
|
||||
private val pressureSensor = SensorManager.BasicSensor(
|
||||
"pressure_sensor",
|
||||
"sensor",
|
||||
|
@ -63,6 +64,13 @@ class PressureSensorManager : SensorManager, SensorEventListener {
|
|||
if (!isEnabled(latestContext, pressureSensor.id))
|
||||
return
|
||||
|
||||
val now = System.currentTimeMillis()
|
||||
if (listenerLastRegistered + SensorManager.SENSOR_LISTENER_TIMEOUT < now && isListenerRegistered) {
|
||||
Log.d(TAG, "Re-registering listener as it appears to be stuck")
|
||||
mySensorManager.unregisterListener(this)
|
||||
isListenerRegistered = false
|
||||
}
|
||||
|
||||
mySensorManager = latestContext.getSystemService()!!
|
||||
|
||||
val pressureSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
|
||||
|
@ -74,6 +82,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
|
|||
)
|
||||
Log.d(TAG, "Pressure sensor listener registered")
|
||||
isListenerRegistered = true
|
||||
listenerLastRegistered = now.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
|
|||
|
||||
private const val TAG = "ProximitySensor"
|
||||
private var isListenerRegistered = false
|
||||
private var listenerLastRegistered = 0
|
||||
private val proximitySensor = SensorManager.BasicSensor(
|
||||
"proximity_sensor",
|
||||
"sensor",
|
||||
|
@ -62,6 +63,13 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
|
|||
if (!isEnabled(latestContext, proximitySensor.id))
|
||||
return
|
||||
|
||||
val now = System.currentTimeMillis()
|
||||
if (listenerLastRegistered + SensorManager.SENSOR_LISTENER_TIMEOUT < now && isListenerRegistered) {
|
||||
Log.d(TAG, "Re-registering listener as it appears to be stuck")
|
||||
mySensorManager.unregisterListener(this)
|
||||
isListenerRegistered = false
|
||||
}
|
||||
|
||||
mySensorManager = latestContext.getSystemService()!!
|
||||
|
||||
val proximitySensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
|
||||
|
@ -73,6 +81,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
|
|||
)
|
||||
Log.d(TAG, "Proximity sensor listener registered")
|
||||
isListenerRegistered = true
|
||||
listenerLastRegistered = now.toInt()
|
||||
maxRange = proximitySensors.maximumRange.roundToInt()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ interface SensorManager {
|
|||
const val STATE_CLASS_MEASUREMENT = "measurement"
|
||||
const val STATE_CLASS_TOTAL = "total"
|
||||
const val STATE_CLASS_TOTAL_INCREASING = "total_increasing"
|
||||
const val SENSOR_LISTENER_TIMEOUT = 60000
|
||||
}
|
||||
|
||||
val name: Int
|
||||
|
|
|
@ -18,6 +18,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
|
|||
|
||||
private const val TAG = "StepsSensor"
|
||||
private var isListenerRegistered = false
|
||||
private var listenerLastRegistered = 0
|
||||
private val stepsSensor = SensorManager.BasicSensor(
|
||||
"steps_sensor",
|
||||
"sensor",
|
||||
|
@ -71,6 +72,12 @@ class StepsSensorManager : SensorManager, SensorEventListener {
|
|||
return
|
||||
|
||||
if (checkPermission(latestContext, stepsSensor.id)) {
|
||||
val now = System.currentTimeMillis()
|
||||
if (listenerLastRegistered + SensorManager.SENSOR_LISTENER_TIMEOUT < now && isListenerRegistered) {
|
||||
Log.d(TAG, "Re-registering listener as it appears to be stuck")
|
||||
mySensorManager.unregisterListener(this)
|
||||
isListenerRegistered = false
|
||||
}
|
||||
mySensorManager = latestContext.getSystemService()!!
|
||||
|
||||
val stepsSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
|
||||
|
@ -82,6 +89,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
|
|||
)
|
||||
Log.d(TAG, "Steps sensor listener registered")
|
||||
isListenerRegistered = true
|
||||
listenerLastRegistered = now.toInt()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ class HeartRateSensorManager : SensorManager, SensorEventListener {
|
|||
|
||||
private const val TAG = "HRSensor"
|
||||
private var isListenerRegistered = false
|
||||
private var listenerLastRegistered = 0
|
||||
private val skipAccuracy = listOf(
|
||||
SENSOR_STATUS_UNRELIABLE,
|
||||
SENSOR_STATUS_NO_CONTACT
|
||||
|
@ -74,6 +75,12 @@ class HeartRateSensorManager : SensorManager, SensorEventListener {
|
|||
if (!isEnabled(latestContext, heartRate.id))
|
||||
return
|
||||
|
||||
val now = System.currentTimeMillis()
|
||||
if (listenerLastRegistered + 60000 < now && isListenerRegistered) {
|
||||
Log.d(TAG, "Re-registering listener as it appears to be stuck")
|
||||
mySensorManager.unregisterListener(this)
|
||||
isListenerRegistered = false
|
||||
}
|
||||
mySensorManager = latestContext.getSystemService()!!
|
||||
|
||||
val heartRateSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE)
|
||||
|
@ -85,6 +92,7 @@ class HeartRateSensorManager : SensorManager, SensorEventListener {
|
|||
)
|
||||
Log.d(TAG, "Heart Rate sensor listener registered")
|
||||
isListenerRegistered = true
|
||||
listenerLastRegistered = now.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,8 @@ class OnBodySensorManager : SensorManager, SensorEventListener {
|
|||
commonR.string.sensor_name_on_body,
|
||||
commonR.string.sensor_description_on_body,
|
||||
"mdi:account",
|
||||
entityCategory = SensorManager.ENTITY_CATEGORY_DIAGNOSTIC
|
||||
entityCategory = SensorManager.ENTITY_CATEGORY_DIAGNOSTIC,
|
||||
updateType = SensorManager.BasicSensor.UpdateType.INTENT
|
||||
)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue