Skip to content

Commit

Permalink
Breaking Change: Update heart rate sensor for Wear OS 4+ target (#4552)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
jpelgrom authored Sep 6, 2024
1 parent 7a9efaa commit 5b82c20
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 5 deletions.
1 change: 1 addition & 0 deletions wear/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.google.android.clockwork.settings.WATCH_TOUCH" />
<uses-permission android:name="android.permission.BLUETOOTH"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,21 @@ fun SensorUi(
var allGranted = true
isGranted.forEach {
if (
it.key == Manifest.permission.ACCESS_FINE_LOCATION && Build.VERSION.SDK_INT >= 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
}
Expand All @@ -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()
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -53,7 +54,11 @@ class HeartRateSensorManager : SensorManager, SensorEventListener {
}

override fun requiredPermissions(sensorId: String): Array<String> {
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 {
Expand Down

0 comments on commit 5b82c20

Please sign in to comment.