mirror of
https://github.com/home-assistant/android
synced 2024-10-04 23:29:31 +00:00
Add and Android Auto sensor! (#3228)
* Add and Android Auto sensor! * Fix build. * Add version check on sensor.
This commit is contained in:
parent
9337f6b471
commit
5cd74c0179
|
@ -0,0 +1,93 @@
|
|||
package io.homeassistant.companion.android.sensors
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import androidx.car.app.connection.CarConnection
|
||||
import androidx.lifecycle.Observer
|
||||
import io.homeassistant.companion.android.common.sensors.SensorManager
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
class AndroidAutoSensorManager : SensorManager, Observer<Int> {
|
||||
|
||||
companion object {
|
||||
|
||||
internal const val TAG = "AndroidAutoSM"
|
||||
|
||||
private val androidAutoConnected = SensorManager.BasicSensor(
|
||||
"android_auto",
|
||||
"binary_sensor",
|
||||
commonR.string.basic_sensor_name_android_auto,
|
||||
commonR.string.sensor_description_android_auto,
|
||||
"mdi:car",
|
||||
updateType = SensorManager.BasicSensor.UpdateType.INTENT
|
||||
)
|
||||
}
|
||||
|
||||
override val enabledByDefault: Boolean
|
||||
get() = false
|
||||
override val name: Int
|
||||
get() = commonR.string.sensor_name_android_auto
|
||||
|
||||
override suspend fun getAvailableSensors(context: Context): List<SensorManager.BasicSensor> {
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||
listOf(androidAutoConnected)
|
||||
else
|
||||
emptyList()
|
||||
}
|
||||
|
||||
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||
return emptyArray()
|
||||
}
|
||||
|
||||
private lateinit var context: Context
|
||||
private var carConnection: CarConnection? = null
|
||||
|
||||
override fun requestSensorUpdate(context: Context) {
|
||||
this.context = context
|
||||
if (!isEnabled(context, androidAutoConnected.id)) {
|
||||
return
|
||||
}
|
||||
CoroutineScope(Dispatchers.Main + Job()).launch {
|
||||
if (carConnection == null) {
|
||||
carConnection = CarConnection(context)
|
||||
}
|
||||
carConnection?.type?.observeForever(this@AndroidAutoSensorManager)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChanged(type: Int?) {
|
||||
if (!isEnabled(context, androidAutoConnected.id)) {
|
||||
CoroutineScope(Dispatchers.Main + Job()).launch {
|
||||
carConnection?.type?.removeObserver(this@AndroidAutoSensorManager)
|
||||
}
|
||||
return
|
||||
}
|
||||
val (connected, typeString) = when (type) {
|
||||
CarConnection.CONNECTION_TYPE_NOT_CONNECTED -> {
|
||||
false to "Disconnected"
|
||||
}
|
||||
CarConnection.CONNECTION_TYPE_PROJECTION -> {
|
||||
true to "Projection"
|
||||
}
|
||||
CarConnection.CONNECTION_TYPE_NATIVE -> {
|
||||
true to "Native"
|
||||
}
|
||||
else -> {
|
||||
false to "Unknown($type)"
|
||||
}
|
||||
}
|
||||
onSensorUpdated(
|
||||
context,
|
||||
androidAutoConnected,
|
||||
connected,
|
||||
androidAutoConnected.statelessIcon,
|
||||
mapOf(
|
||||
"connection_type" to typeString
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
|
@ -170,6 +170,11 @@ open class HomeAssistantApplication : Application() {
|
|||
)
|
||||
}
|
||||
|
||||
registerReceiver(
|
||||
sensorReceiver,
|
||||
IntentFilter("androidx.car.app.connection.action.CAR_CONNECTION_UPDATED")
|
||||
)
|
||||
|
||||
// Add a receiver for the shutdown event to attempt to send 1 final sensor update
|
||||
registerReceiver(
|
||||
sensorReceiver,
|
||||
|
|
|
@ -51,6 +51,7 @@ class SensorReceiver : SensorReceiverBase() {
|
|||
const val TAG = "SensorReceiver"
|
||||
val MANAGERS = listOf(
|
||||
ActivitySensorManager(),
|
||||
AndroidAutoSensorManager(),
|
||||
AppSensorManager(),
|
||||
AudioSensorManager(),
|
||||
BatterySensorManager(),
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package io.homeassistant.companion.android.sensors
|
||||
|
||||
import android.content.Context
|
||||
import io.homeassistant.companion.android.common.sensors.SensorManager
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
class AndroidAutoSensorManager : SensorManager {
|
||||
|
||||
override val enabledByDefault: Boolean
|
||||
get() = false
|
||||
override val name: Int
|
||||
get() = commonR.string.sensor_name_android_auto
|
||||
|
||||
override suspend fun getAvailableSensors(context: Context): List<SensorManager.BasicSensor> {
|
||||
return listOf()
|
||||
}
|
||||
|
||||
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||
return emptyArray()
|
||||
}
|
||||
|
||||
override fun requestSensorUpdate(context: Context) {
|
||||
// Noop
|
||||
}
|
||||
}
|
|
@ -37,6 +37,7 @@
|
|||
<string name="basic_sensor_name_active_notification_count">Active Notification Count</string>
|
||||
<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_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>
|
||||
|
@ -477,6 +478,7 @@
|
|||
<string name="select_instance">Select your Home Assistant server</string>
|
||||
<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_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>
|
||||
|
@ -556,6 +558,7 @@
|
|||
<string name="sensor_description_work_profile">Whether the work profile is currently active on the device</string>
|
||||
<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_app_sensor">App Sensors</string>
|
||||
<string name="sensor_name_audio_mode">Audio Mode</string>
|
||||
<string name="sensor_name_audio">Audio Sensors</string>
|
||||
|
|
Loading…
Reference in a new issue