From f05224163d1d179c5b5e9e23a51ba27e80564835 Mon Sep 17 00:00:00 2001 From: Arman Soudi Date: Wed, 26 Nov 2025 00:38:44 +0100 Subject: [PATCH] Support background fetch permission --- .../cachet/plugins/health/HealthPlugin.kt | 24 +++++++++++++++++++ packages/health/lib/src/health_plugin.dart | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/packages/health/android/src/main/kotlin/cachet/plugins/health/HealthPlugin.kt b/packages/health/android/src/main/kotlin/cachet/plugins/health/HealthPlugin.kt index ee4568036..2e9406dd1 100644 --- a/packages/health/android/src/main/kotlin/cachet/plugins/health/HealthPlugin.kt +++ b/packages/health/android/src/main/kotlin/cachet/plugins/health/HealthPlugin.kt @@ -1510,6 +1510,8 @@ class HealthPlugin(private var channel: MethodChannel? = null) : endTime.toEpochMilli() ) ).build().find() + + healthConnectData.addAll(items.map { mapOf( "value" to @@ -2576,6 +2578,7 @@ class HealthPlugin(private var channel: MethodChannel? = null) : "requestAuthorization" -> requestAuthorization(call, result) "revokePermissions" -> revokePermissions(call, result) "requestBackgroundFetchIfAvailable" -> requestBackgroundFetchIfAvailable(call, result) + "backgroundFetchPermissionGranted" -> backgroundFetchPermissionGranted(call, result) "getData" -> getData(call, result) "getIntervalData" -> getIntervalData(call, result) "writeData" -> writeData(call, result) @@ -2614,6 +2617,27 @@ class HealthPlugin(private var channel: MethodChannel? = null) : result.success(false) } + @OptIn(ExperimentalFeatureAvailabilityApi::class) + private fun backgroundFetchPermissionGranted(call: MethodCall, result: Result) { + if (healthConnectClient + .features + .getFeatureStatus( + HealthConnectFeatures.FEATURE_READ_HEALTH_DATA_IN_BACKGROUND + ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE + ) { + + scope.launch { + val grantedPermissions = + healthConnectClient.permissionController.getGrantedPermissions() + + result.success(PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND in grantedPermissions) + } + return + } + + result.success(false) + } + private fun isForegroundServiceRunning(context: Context, serviceClass: Class<*>): Boolean { val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager diff --git a/packages/health/lib/src/health_plugin.dart b/packages/health/lib/src/health_plugin.dart index 586e1c608..93146b225 100644 --- a/packages/health/lib/src/health_plugin.dart +++ b/packages/health/lib/src/health_plugin.dart @@ -185,6 +185,10 @@ class Health { } } + Future backgroundFetchPermissionGranted() async { + return await _channel.invokeMethod('backgroundFetchPermissionGranted'); + } + /// Disconnect from Google fit. /// /// Not supported on iOS and Google Health Connect, and the method does nothing.