From 5b82c2001cba4eee96adf044023e67594d2c0584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joris=20Pelgr=C3=B6m?= Date: Fri, 6 Sep 2024 05:08:57 +0200 Subject: [PATCH] Breaking Change: Update heart rate sensor for Wear OS 4+ target (#4552) * Remove heart rate sensor for Wear OS 4+ * Rework: request background permission separately - Requesting the background permission separately seems to work and allows the user to keep using this sensor after changing the target SDK version --- wear/src/main/AndroidManifest.xml | 1 + .../companion/android/home/views/SensorUi.kt | 23 +++++++++++++++---- .../android/sensors/HeartRateSensorManager.kt | 7 +++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml index b16e17708d8..5713ace2bbc 100644 --- a/wear/src/main/AndroidManifest.xml +++ b/wear/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ + = Build.VERSION_CODES.R && manager.requiredPermissions(basicSensor.id).contains(Manifest.permission.ACCESS_FINE_LOCATION) && - manager.requiredPermissions(basicSensor.id).contains(Manifest.permission.ACCESS_BACKGROUND_LOCATION) && - it.key == Manifest.permission.ACCESS_FINE_LOCATION && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R + manager.requiredPermissions(basicSensor.id).contains(Manifest.permission.ACCESS_BACKGROUND_LOCATION) ) { backgroundRequest.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION) return@forEach } + if ( + it.key == Manifest.permission.BODY_SENSORS && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && + manager.requiredPermissions(basicSensor.id).contains(Manifest.permission.BODY_SENSORS) && + manager.requiredPermissions(basicSensor.id).contains(Manifest.permission.BODY_SENSORS_BACKGROUND) + ) { + backgroundRequest.launch(Manifest.permission.BODY_SENSORS_BACKGROUND) + return@forEach + } if (!it.value) { allGranted = false } @@ -68,10 +76,17 @@ fun SensorUi( onSensorClicked(basicSensor.id, enabled) } else { permissionLaunch.launch( - if (permissions.size == 1 && permissions[0] == Manifest.permission.ACCESS_BACKGROUND_LOCATION) { + if (permissions.size == 1 && + ( + permissions[0] == Manifest.permission.ACCESS_BACKGROUND_LOCATION || + permissions[0] == Manifest.permission.BODY_SENSORS_BACKGROUND + ) + ) { permissions } else { - permissions.toSet().minus(Manifest.permission.ACCESS_BACKGROUND_LOCATION) + permissions.toSet() + .minus(Manifest.permission.ACCESS_BACKGROUND_LOCATION) + .minus(Manifest.permission.BODY_SENSORS_BACKGROUND) .toTypedArray() } ) diff --git a/wear/src/main/java/io/homeassistant/companion/android/sensors/HeartRateSensorManager.kt b/wear/src/main/java/io/homeassistant/companion/android/sensors/HeartRateSensorManager.kt index d8ec4993add..069d70362f3 100755 --- a/wear/src/main/java/io/homeassistant/companion/android/sensors/HeartRateSensorManager.kt +++ b/wear/src/main/java/io/homeassistant/companion/android/sensors/HeartRateSensorManager.kt @@ -12,6 +12,7 @@ import android.hardware.SensorManager.SENSOR_STATUS_ACCURACY_LOW import android.hardware.SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM import android.hardware.SensorManager.SENSOR_STATUS_NO_CONTACT import android.hardware.SensorManager.SENSOR_STATUS_UNRELIABLE +import android.os.Build import android.util.Log import androidx.core.content.getSystemService import io.homeassistant.companion.android.common.R as commonR @@ -53,7 +54,11 @@ class HeartRateSensorManager : SensorManager, SensorEventListener { } override fun requiredPermissions(sensorId: String): Array { - return arrayOf(Manifest.permission.BODY_SENSORS) + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf(Manifest.permission.BODY_SENSORS, Manifest.permission.BODY_SENSORS_BACKGROUND) + } else { + arrayOf(Manifest.permission.BODY_SENSORS) + } } override fun hasSensor(context: Context): Boolean {