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.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.util.Log
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -13,6 +14,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
companion object { companion object {
private const val TAG = "LightSensor" private const val TAG = "LightSensor"
private var isListenerRegistered = false
private val lightSensor = SensorManager.BasicSensor( private val lightSensor = SensorManager.BasicSensor(
"light_sensor", "light_sensor",
"sensor", "sensor",
@ -50,11 +52,13 @@ class LightSensorManager : SensorManager, SensorEventListener {
mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val lightSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT) val lightSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
if (lightSensors != null) { if (lightSensors != null && !isListenerRegistered) {
mySensorManager.registerListener( mySensorManager.registerListener(
this, this,
lightSensors, lightSensors,
SENSOR_DELAY_NORMAL) SENSOR_DELAY_NORMAL)
Log.d(TAG, "Light sensor listener registered")
isListenerRegistered = true
} }
} }
@ -75,5 +79,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
} }
} }
mySensorManager.unregisterListener(this) 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.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.util.Log
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import java.math.RoundingMode import java.math.RoundingMode
@ -13,6 +14,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
companion object { companion object {
private const val TAG = "PressureSensor" private const val TAG = "PressureSensor"
private var isListenerRegistered = false
private val pressureSensor = SensorManager.BasicSensor( private val pressureSensor = SensorManager.BasicSensor(
"pressure_sensor", "pressure_sensor",
"sensor", "sensor",
@ -38,21 +40,23 @@ class PressureSensorManager : SensorManager, SensorEventListener {
override fun requestSensorUpdate(context: Context) { override fun requestSensorUpdate(context: Context) {
latestContext = context latestContext = context
updatePressureSensor(context) updatePressureSensor()
} }
private fun updatePressureSensor(context: Context) { private fun updatePressureSensor() {
if (!isEnabled(latestContext, pressureSensor.id)) if (!isEnabled(latestContext, pressureSensor.id))
return return
mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val pressureSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) val pressureSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
if (pressureSensors != null) { if (pressureSensors != null && !isListenerRegistered) {
mySensorManager.registerListener( mySensorManager.registerListener(
this, this,
pressureSensors, pressureSensors,
SENSOR_DELAY_NORMAL) SENSOR_DELAY_NORMAL)
Log.d(TAG, "Pressure sensor listener registered")
isListenerRegistered = true
} }
} }
@ -73,5 +77,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
} }
} }
mySensorManager.unregisterListener(this) 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.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.util.Log
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -13,6 +14,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
companion object { companion object {
private const val TAG = "ProximitySensor" private const val TAG = "ProximitySensor"
private var isListenerRegistered = false
private val proximitySensor = SensorManager.BasicSensor( private val proximitySensor = SensorManager.BasicSensor(
"proximity_sensor", "proximity_sensor",
"sensor", "sensor",
@ -37,22 +39,24 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
override fun requestSensorUpdate(context: Context) { override fun requestSensorUpdate(context: Context) {
latestContext = context latestContext = context
updateProximitySensor(context) updateProximitySensor()
} }
private fun updateProximitySensor(context: Context) { private fun updateProximitySensor() {
if (!isEnabled(latestContext, proximitySensor.id)) if (!isEnabled(latestContext, proximitySensor.id))
return return
mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager mySensorManager = latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val proximitySensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) val proximitySensors = mySensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
if (proximitySensors != null) { if (proximitySensors != null && !isListenerRegistered) {
mySensorManager.registerListener( mySensorManager.registerListener(
this, this,
proximitySensors, proximitySensors,
SENSOR_DELAY_NORMAL SENSOR_DELAY_NORMAL
) )
Log.d(TAG, "Proximity sensor listener registered")
isListenerRegistered = true
maxRange = proximitySensors.maximumRange.roundToInt() maxRange = proximitySensors.maximumRange.roundToInt()
} }
} }
@ -82,5 +86,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
} }
} }
mySensorManager.unregisterListener(this) 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.SensorEventListener
import android.hardware.SensorManager.SENSOR_DELAY_NORMAL import android.hardware.SensorManager.SENSOR_DELAY_NORMAL
import android.os.Build import android.os.Build
import android.util.Log
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -15,6 +16,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
companion object { companion object {
private const val TAG = "StepsSensor" private const val TAG = "StepsSensor"
private var isListenerRegistered = false
private val stepsSensor = SensorManager.BasicSensor( private val stepsSensor = SensorManager.BasicSensor(
"steps_sensor", "steps_sensor",
"sensor", "sensor",
@ -59,12 +61,14 @@ class StepsSensorManager : SensorManager, SensorEventListener {
latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
val stepsSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER) val stepsSensors = mySensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
if (stepsSensors != null) { if (stepsSensors != null && !isListenerRegistered) {
mySensorManager.registerListener( mySensorManager.registerListener(
this, this,
stepsSensors, stepsSensors,
SENSOR_DELAY_NORMAL SENSOR_DELAY_NORMAL
) )
Log.d(TAG, "Steps sensor listener registered")
isListenerRegistered = true
} }
} }
} }
@ -86,5 +90,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
} }
} }
mySensorManager.unregisterListener(this) mySensorManager.unregisterListener(this)
Log.d(TAG, "Steps sensor listener unregistered")
isListenerRegistered = false
} }
} }