• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 package com.android.healthconnect.controller.dataaccess
2 
3 import android.health.connect.HealthConnectManager
4 import android.health.connect.RecordTypeInfoResponse
5 import android.health.connect.datatypes.Record
6 import androidx.core.os.asOutcomeReceiver
7 import com.android.healthconnect.controller.permissions.data.HealthPermissionType
8 import com.android.healthconnect.controller.permissions.data.fromHealthPermissionCategory
9 import com.android.healthconnect.controller.service.IoDispatcher
10 import com.android.healthconnect.controller.shared.app.AppInfoReader
11 import com.android.healthconnect.controller.shared.app.AppMetadata
12 import javax.inject.Inject
13 import javax.inject.Singleton
14 import kotlinx.coroutines.CoroutineDispatcher
15 import kotlinx.coroutines.suspendCancellableCoroutine
16 import kotlinx.coroutines.withContext
17 
18 @Singleton
19 class LoadPermissionTypeContributorAppsUseCase
20 @Inject
21 constructor(
22     private val appInfoReader: AppInfoReader,
23     private val healthConnectManager: HealthConnectManager,
24     @IoDispatcher private val dispatcher: CoroutineDispatcher
25 ) {
26     suspend operator fun invoke(permissionType: HealthPermissionType): List<AppMetadata> =
27         withContext(dispatcher) {
28             try {
29                 val recordTypeInfoMap: Map<Class<out Record>, RecordTypeInfoResponse> =
30                     suspendCancellableCoroutine { continuation ->
31                         healthConnectManager.queryAllRecordTypesInfo(
32                             Runnable::run, continuation.asOutcomeReceiver())
33                     }
34                 val packages =
35                     recordTypeInfoMap.values
36                         .filter {
37                             fromHealthPermissionCategory(it.permissionCategory) == permissionType &&
38                                 it.contributingPackages.isNotEmpty()
39                         }
40                         .map { it.contributingPackages }
41                         .flatten()
42                 packages
43                     .map { appInfoReader.getAppMetadata(it.packageName) }
44                     .sortedBy { it.appName }
45             } catch (e: Exception) {
46                 emptyList()
47             }
48         }
49 }
50