Only show sensors that are available for the device (#877)

* Only show sensors that are available for the device

* Review comments

* Filter before forEach to remove unneeded condition
This commit is contained in:
Daniel Shokouhi 2020-09-03 17:45:25 -07:00 committed by GitHub
parent c221e85fa4
commit 8f017f3b90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 30 additions and 1 deletions

View file

@ -2,6 +2,7 @@ package io.homeassistant.companion.android.sensors
import android.content.Context import android.content.Context
import android.content.Context.SENSOR_SERVICE import android.content.Context.SENSOR_SERVICE
import android.content.pm.PackageManager
import android.hardware.Sensor import android.hardware.Sensor
import android.hardware.SensorEvent import android.hardware.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
@ -38,6 +39,11 @@ class LightSensorManager : SensorManager, SensorEventListener {
return emptyArray() return emptyArray()
} }
override fun hasSensor(context: Context): Boolean {
val packageManager: PackageManager = context.packageManager
return packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_LIGHT)
}
private lateinit var latestContext: Context private lateinit var latestContext: Context
private lateinit var mySensorManager: android.hardware.SensorManager private lateinit var mySensorManager: android.hardware.SensorManager

View file

@ -2,6 +2,7 @@ package io.homeassistant.companion.android.sensors
import android.content.Context import android.content.Context
import android.content.Context.SENSOR_SERVICE import android.content.Context.SENSOR_SERVICE
import android.content.pm.PackageManager
import android.hardware.Sensor import android.hardware.Sensor
import android.hardware.SensorEvent import android.hardware.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
@ -46,6 +47,11 @@ class PressureSensorManager : SensorManager, SensorEventListener {
updatePressureSensor() updatePressureSensor()
} }
override fun hasSensor(context: Context): Boolean {
val packageManager: PackageManager = context.packageManager
return packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER)
}
private fun updatePressureSensor() { private fun updatePressureSensor() {
if (!isEnabled(latestContext, pressureSensor.id)) if (!isEnabled(latestContext, pressureSensor.id))
return return

View file

@ -2,6 +2,7 @@ package io.homeassistant.companion.android.sensors
import android.content.Context import android.content.Context
import android.content.Context.SENSOR_SERVICE import android.content.Context.SENSOR_SERVICE
import android.content.pm.PackageManager
import android.hardware.Sensor import android.hardware.Sensor
import android.hardware.SensorEvent import android.hardware.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
@ -40,6 +41,11 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
return emptyArray() return emptyArray()
} }
override fun hasSensor(context: Context): Boolean {
val packageManager: PackageManager = context.packageManager
return packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_PROXIMITY)
}
override fun requestSensorUpdate(context: Context) { override fun requestSensorUpdate(context: Context) {
latestContext = context latestContext = context
updateProximitySensor() updateProximitySensor()

View file

@ -54,6 +54,10 @@ interface SensorManager {
fun requestSensorUpdate(context: Context) fun requestSensorUpdate(context: Context)
fun hasSensor(context: Context): Boolean {
return true
}
fun onSensorUpdated( fun onSensorUpdated(
context: Context, context: Context,
basicSensor: BasicSensor, basicSensor: BasicSensor,

View file

@ -56,9 +56,10 @@ class SensorsSettingsFragment : PreferenceFragmentCompat() {
setPreferencesFromResource(R.xml.sensors, rootKey) setPreferencesFromResource(R.xml.sensors, rootKey)
SensorReceiver.MANAGERS.sortedBy { it.name }.forEach { manager -> SensorReceiver.MANAGERS.sortedBy { it.name }.filter { it.hasSensor(requireContext()) }.forEach { manager ->
val prefCategory = PreferenceCategory(preferenceScreen.context) val prefCategory = PreferenceCategory(preferenceScreen.context)
prefCategory.title = getString(manager.name) prefCategory.title = getString(manager.name)
preferenceScreen.addPreference(prefCategory) preferenceScreen.addPreference(prefCategory)
manager.availableSensors.sortedBy { it.name }.forEach { basicSensor -> manager.availableSensors.sortedBy { it.name }.forEach { basicSensor ->

View file

@ -3,6 +3,7 @@ package io.homeassistant.companion.android.sensors
import android.Manifest import android.Manifest
import android.content.Context import android.content.Context
import android.content.Context.SENSOR_SERVICE import android.content.Context.SENSOR_SERVICE
import android.content.pm.PackageManager
import android.hardware.Sensor import android.hardware.Sensor
import android.hardware.SensorEvent import android.hardware.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
@ -48,6 +49,11 @@ class StepsSensorManager : SensorManager, SensorEventListener {
} }
} }
override fun hasSensor(context: Context): Boolean {
val packageManager: PackageManager = context.packageManager
return packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_STEP_COUNTER)
}
override fun requestSensorUpdate( override fun requestSensorUpdate(
context: Context context: Context
) { ) {