From bd2cfb5aa43a78aea38db9c7d95cc2880a15e459 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Thu, 3 Sep 2020 11:13:51 -0700 Subject: [PATCH] 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 --- .../companion/android/sensors/LightSensorManager.kt | 8 +++++++- .../android/sensors/PressureSensorManager.kt | 12 +++++++++--- .../android/sensors/ProximitySensorManager.kt | 12 +++++++++--- .../companion/android/sensors/StepsSensorManager.kt | 8 +++++++- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt index 86ecd6534..1f1de3d44 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/LightSensorManager.kt @@ -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 } } diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt index 21c9bce70..c1cc3b58b 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/PressureSensorManager.kt @@ -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 } } diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt index 55def6033..fd713c00d 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/ProximitySensorManager.kt @@ -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 } } diff --git a/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt b/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt index 0ba1509ed..0252891d8 100644 --- a/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/sensors/StepsSensorManager.kt @@ -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 } }