Add Android OS sensors (#3449)

* Add Android OS sensors

* Rework review findings
This commit is contained in:
Markus Friedli 2023-04-08 01:08:14 +02:00 committed by GitHub
parent 94881a23d2
commit b4f877aa2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 89 additions and 0 deletions

View file

@ -11,6 +11,7 @@ import android.net.wifi.WifiManager
import android.os.PowerManager
import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.common.sensors.AndroidOsSensorManager
import io.homeassistant.companion.android.common.sensors.AudioSensorManager
import io.homeassistant.companion.android.common.sensors.BatterySensorManager
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
@ -52,6 +53,7 @@ class SensorReceiver : SensorReceiverBase() {
val MANAGERS = listOf(
ActivitySensorManager(),
AndroidAutoSensorManager(),
AndroidOsSensorManager(),
AppSensorManager(),
AudioSensorManager(),
BatterySensorManager(),

View file

@ -0,0 +1,80 @@
package io.homeassistant.companion.android.common.sensors
import android.content.Context
import android.os.Build
import io.homeassistant.companion.android.common.R as commonR
class AndroidOsSensorManager : SensorManager {
companion object {
val osVersion = SensorManager.BasicSensor(
"android_os_version",
"sensor",
commonR.string.basic_sensor_name_android_os_version,
commonR.string.sensor_description_android_os_version,
"mdi:android",
entityCategory = SensorManager.ENTITY_CATEGORY_DIAGNOSTIC
)
val osSecurityPatch = SensorManager.BasicSensor(
"android_os_security_patch",
"sensor",
commonR.string.basic_sensor_name_android_os_security_patch,
commonR.string.sensor_description_android_os_security_patch,
"mdi:security",
entityCategory = SensorManager.ENTITY_CATEGORY_DIAGNOSTIC
)
}
override fun docsLink(): String {
return "https://companion.home-assistant.io/docs/core/sensors#android-os-sensors"
}
override val name: Int
get() = commonR.string.sensor_name_android_os
override suspend fun getAvailableSensors(context: Context): List<SensorManager.BasicSensor> {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
listOf(osVersion, osSecurityPatch)
} else {
listOf(osVersion)
}
}
override fun requiredPermissions(sensorId: String): Array<String> {
return arrayOf()
}
override fun requestSensorUpdate(
context: Context
) {
checkState(context, osVersion)
checkState(context, osSecurityPatch)
}
private fun checkState(
context: Context,
sensor: SensorManager.BasicSensor
) {
if (!isEnabled(context, sensor)) {
return
}
onSensorUpdated(
context,
sensor,
when (sensor.id) {
osVersion.id -> Build.VERSION.RELEASE
osSecurityPatch.id -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Build.VERSION.SECURITY_PATCH
} else {
"unknown"
}
else -> {
"unknown"
}
},
sensor.statelessIcon,
mapOf()
)
}
}

View file

@ -42,6 +42,8 @@
<string name="basic_sensor_name_activity">Detected Activity</string>
<string name="basic_sensor_name_alarm">Next Alarm</string>
<string name="basic_sensor_name_android_auto">Android Auto</string>
<string name="basic_sensor_name_android_os_version">OS Version</string>
<string name="basic_sensor_name_android_os_security_patch">Security Patch</string>
<string name="basic_sensor_name_app_importance">App Importance</string>
<string name="basic_sensor_name_app_inactive">App Inactive</string>
<string name="basic_sensor_name_app_memory">App Memory</string>
@ -497,6 +499,8 @@
<string name="sensor_description_active_notification_count">Total count of active notifications that are visible to the user including silent, persistent and the Sensor Worker notifications.</string>
<string name="sensor_description_app_importance">If the app is in the foreground, background or any other state it can be.</string>
<string name="sensor_description_android_auto">If the phone is currently connected to an Android Auto head unit.</string>
<string name="sensor_description_android_os_version">Android OS version.</string>
<string name="sensor_description_android_os_security_patch">Android OS security patch.</string>
<string name="sensor_description_app_inactive">Whether the app is currently considered inactive by the system</string>
<string name="sensor_description_app_memory">Total used and available memory for the app</string>
<string name="sensor_description_app_rx_gb">App Rx GB since last device reboot</string>
@ -577,6 +581,7 @@
<string name="sensor_name_activity">Activity Sensors</string>
<string name="sensor_name_alarm">Alarm Sensor</string>
<string name="sensor_name_android_auto">Android Auto Sensors</string>
<string name="sensor_name_android_os">Android OS Sensors</string>
<string name="sensor_name_app_sensor">App Sensors</string>
<string name="sensor_name_audio_mode">Audio Mode</string>
<string name="sensor_name_audio">Audio Sensors</string>

View file

@ -14,6 +14,7 @@ import androidx.core.app.TaskStackBuilder
import androidx.core.net.toUri
import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.common.sensors.AndroidOsSensorManager
import io.homeassistant.companion.android.common.sensors.AudioSensorManager
import io.homeassistant.companion.android.common.sensors.BatterySensorManager
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
@ -54,6 +55,7 @@ class SensorReceiver : SensorReceiverBase() {
companion object {
const val TAG = "SensorReceiver"
private val allManager = listOf(
AndroidOsSensorManager(),
AppSensorManager(),
AudioSensorManager(),
BatterySensorManager(),