Only register once for hardware sensors (#873)

* Only register the listener if it is not registered already

* Add more logging, move variable to companion object
This commit is contained in:
Daniel Shokouhi 2020-09-03 11:13:51 -07:00 committed by GitHub
parent 833534f920
commit bd2cfb5aa4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 8 deletions

View file

@ -6,6 +6,7 @@ import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.util.Log
import io.homeassistant.companion.android.R
import kotlin.math.roundToInt
@ -13,6 +14,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
companion object {
private const val TAG = "LightSensor"
private var isListenerRegistered = false
private val lightSensor = SensorManager.BasicSensor(
"light_sensor",
"sensor",
@ -50,11 +52,13 @@ class LightSensorManager : SensorManager, SensorEventListener {
mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val lightSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
if (lightSensors != null) {
if (lightSensors != null && !isListenerRegistered) {
mySensorManager.registerListener(
this,
lightSensors,
SENSOR_DELAY_NORMAL)
Log.d(TAG, "Light sensor listener registered")
isListenerRegistered = true
}
}
@ -75,5 +79,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
}
}
mySensorManager.unregisterListener(this)
Log.d(TAG, "Light sensor listener unregistered")
isListenerRegistered = false
}
}

View file

@ -6,6 +6,7 @@ import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.util.Log
import io.homeassistant.companion.android.R
import java.math.RoundingMode
@ -13,6 +14,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
companion object {
private const val TAG = "PressureSensor"
private var isListenerRegistered = false
private val pressureSensor = SensorManager.BasicSensor(
"pressure_sensor",
"sensor",
@ -38,21 +40,23 @@ class PressureSensorManager : SensorManager, SensorEventListener {
override fun requestSensorUpdate(context: Context) {
latestContext = context
updatePressureSensor(context)
updatePressureSensor()
}
private fun updatePressureSensor(context: Context) {
private fun updatePressureSensor() {
if (!isEnabled(latestContext, pressureSensor.id))
return
mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val pressureSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
if (pressureSensors != null) {
if (pressureSensors != null && !isListenerRegistered) {
mySensorManager.registerListener(
this,
pressureSensors,
SENSOR_DELAY_NORMAL)
Log.d(TAG, "Pressure sensor listener registered")
isListenerRegistered = true
}
}
@ -73,5 +77,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
}
}
mySensorManager.unregisterListener(this)
Log.d(TAG, "Pressure sensor listener unregistered")
isListenerRegistered = false
}
}

View file

@ -6,6 +6,7 @@ import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.util.Log
import io.homeassistant.companion.android.R
import kotlin.math.roundToInt
@ -13,6 +14,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
companion object {
private const val TAG = "ProximitySensor"
private var isListenerRegistered = false
private val proximitySensor = SensorManager.BasicSensor(
"proximity_sensor",
"sensor",
@ -37,22 +39,24 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
override fun requestSensorUpdate(context: Context) {
latestContext = context
updateProximitySensor(context)
updateProximitySensor()
}
private fun updateProximitySensor(context: Context) {
private fun updateProximitySensor() {
if (!isEnabled(latestContext, proximitySensor.id))
return
mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val proximitySensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
if (proximitySensors != null) {
if (proximitySensors != null && !isListenerRegistered) {
mySensorManager.registerListener(
this,
proximitySensors,
SENSOR_DELAY_NORMAL
)
Log.d(TAG, "Proximity sensor listener registered")
isListenerRegistered = true
maxRange = proximitySensors.maximumRange.roundToInt()
}
}
@ -82,5 +86,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
}
}
mySensorManager.unregisterListener(this)
Log.d(TAG, "Proximity sensor listener unregistered")
isListenerRegistered = false
}
}

View file

@ -8,6 +8,7 @@ import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.os.Build
import android.util.Log
import io.homeassistant.companion.android.R
import kotlin.math.roundToInt
@ -15,6 +16,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
companion object {
private const val TAG = "StepsSensor"
private var isListenerRegistered = false
private val stepsSensor = SensorManager.BasicSensor(
"steps_sensor",
"sensor",
@ -59,12 +61,14 @@ class StepsSensorManager : SensorManager, SensorEventListener {
latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val stepsSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
if (stepsSensors != null) {
if (stepsSensors != null && !isListenerRegistered) {
mySensorManager.registerListener(
this,
stepsSensors,
SENSOR_DELAY_NORMAL
)
Log.d(TAG, "Steps sensor listener registered")
isListenerRegistered = true
}
}
}
@ -86,5 +90,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
}
}
mySensorManager.unregisterListener(this)
Log.d(TAG, "Steps sensor listener unregistered")
isListenerRegistered = false
}
}