• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
<lambda>null2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * ```
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * ```
10  *
11  * Unless required by applicable law or agreed to in writing, software distributed under the License
12  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13  * or implied. See the License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.android.healthconnect.controller.shared
17 
18 import android.health.connect.datatypes.ActiveCaloriesBurnedRecord
19 import android.health.connect.datatypes.BasalBodyTemperatureRecord
20 import android.health.connect.datatypes.BasalMetabolicRateRecord
21 import android.health.connect.datatypes.BloodGlucoseRecord
22 import android.health.connect.datatypes.BloodPressureRecord
23 import android.health.connect.datatypes.BodyFatRecord
24 import android.health.connect.datatypes.BodyTemperatureRecord
25 import android.health.connect.datatypes.BodyWaterMassRecord
26 import android.health.connect.datatypes.BoneMassRecord
27 import android.health.connect.datatypes.CervicalMucusRecord
28 import android.health.connect.datatypes.CyclingPedalingCadenceRecord
29 import android.health.connect.datatypes.DistanceRecord
30 import android.health.connect.datatypes.ElevationGainedRecord
31 import android.health.connect.datatypes.ExerciseSessionRecord
32 import android.health.connect.datatypes.FloorsClimbedRecord
33 import android.health.connect.datatypes.HeartRateRecord
34 import android.health.connect.datatypes.HeartRateVariabilityRmssdRecord
35 import android.health.connect.datatypes.HeightRecord
36 import android.health.connect.datatypes.HydrationRecord
37 import android.health.connect.datatypes.IntermenstrualBleedingRecord
38 import android.health.connect.datatypes.LeanBodyMassRecord
39 import android.health.connect.datatypes.MenstruationFlowRecord
40 import android.health.connect.datatypes.MenstruationPeriodRecord
41 import android.health.connect.datatypes.MindfulnessSessionRecord
42 import android.health.connect.datatypes.NutritionRecord
43 import android.health.connect.datatypes.OvulationTestRecord
44 import android.health.connect.datatypes.OxygenSaturationRecord
45 import android.health.connect.datatypes.PlannedExerciseSessionRecord
46 import android.health.connect.datatypes.PowerRecord
47 import android.health.connect.datatypes.Record
48 import android.health.connect.datatypes.RespiratoryRateRecord
49 import android.health.connect.datatypes.RestingHeartRateRecord
50 import android.health.connect.datatypes.SexualActivityRecord
51 import android.health.connect.datatypes.SkinTemperatureRecord
52 import android.health.connect.datatypes.SleepSessionRecord
53 import android.health.connect.datatypes.SpeedRecord
54 import android.health.connect.datatypes.StepsCadenceRecord
55 import android.health.connect.datatypes.StepsRecord
56 import android.health.connect.datatypes.TotalCaloriesBurnedRecord
57 import android.health.connect.datatypes.Vo2MaxRecord
58 import android.health.connect.datatypes.WeightRecord
59 import android.health.connect.datatypes.WheelchairPushesRecord
60 import android.health.connect.internal.datatypes.utils.HealthConnectMappings
61 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType
62 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.ACTIVE_CALORIES_BURNED
63 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BASAL_BODY_TEMPERATURE
64 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BASAL_METABOLIC_RATE
65 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BLOOD_GLUCOSE
66 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BLOOD_PRESSURE
67 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BODY_FAT
68 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BODY_TEMPERATURE
69 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BODY_WATER_MASS
70 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.BONE_MASS
71 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.CERVICAL_MUCUS
72 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.DISTANCE
73 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.ELEVATION_GAINED
74 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.EXERCISE
75 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.FLOORS_CLIMBED
76 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.HEART_RATE
77 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.HEART_RATE_VARIABILITY
78 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.HEIGHT
79 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.HYDRATION
80 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.INTERMENSTRUAL_BLEEDING
81 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.LEAN_BODY_MASS
82 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.MENSTRUATION
83 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.MINDFULNESS
84 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.NUTRITION
85 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.OVULATION_TEST
86 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.OXYGEN_SATURATION
87 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.PLANNED_EXERCISE
88 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.POWER
89 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.RESPIRATORY_RATE
90 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.RESTING_HEART_RATE
91 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.SEXUAL_ACTIVITY
92 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.SKIN_TEMPERATURE
93 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.SLEEP
94 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.SPEED
95 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.STEPS
96 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.TOTAL_CALORIES_BURNED
97 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.VO2_MAX
98 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.WEIGHT
99 import com.android.healthconnect.controller.permissions.data.FitnessPermissionType.WHEELCHAIR_PUSHES
100 import com.android.healthconnect.controller.permissions.data.fromHealthPermissionCategory
101 import com.android.healthfitness.flags.Flags
102 
103 object HealthPermissionToDatatypeMapper {
104     private val map =
105         if (Flags.healthConnectMappings()) createMap()
106         else
107             mapOf(
108                 STEPS to listOf(StepsRecord::class.java, StepsCadenceRecord::class.java),
109                 HEART_RATE to listOf(HeartRateRecord::class.java),
110                 BASAL_METABOLIC_RATE to listOf(BasalMetabolicRateRecord::class.java),
111                 SPEED to listOf(SpeedRecord::class.java),
112                 DISTANCE to listOf(DistanceRecord::class.java),
113                 POWER to listOf(PowerRecord::class.java),
114                 ACTIVE_CALORIES_BURNED to listOf(ActiveCaloriesBurnedRecord::class.java),
115                 TOTAL_CALORIES_BURNED to listOf(TotalCaloriesBurnedRecord::class.java),
116                 HEIGHT to listOf(HeightRecord::class.java),
117                 BODY_FAT to listOf(BodyFatRecord::class.java),
118                 OXYGEN_SATURATION to listOf(OxygenSaturationRecord::class.java),
119                 BODY_TEMPERATURE to listOf(BodyTemperatureRecord::class.java),
120                 BASAL_BODY_TEMPERATURE to listOf(BasalBodyTemperatureRecord::class.java),
121                 WHEELCHAIR_PUSHES to listOf(WheelchairPushesRecord::class.java),
122                 RESTING_HEART_RATE to listOf(RestingHeartRateRecord::class.java),
123                 RESPIRATORY_RATE to listOf(RespiratoryRateRecord::class.java),
124                 HYDRATION to listOf(HydrationRecord::class.java),
125                 FLOORS_CLIMBED to listOf(FloorsClimbedRecord::class.java),
126                 ELEVATION_GAINED to listOf(ElevationGainedRecord::class.java),
127                 BONE_MASS to listOf(BoneMassRecord::class.java),
128                 LEAN_BODY_MASS to listOf(LeanBodyMassRecord::class.java),
129                 WEIGHT to listOf(WeightRecord::class.java),
130                 BLOOD_GLUCOSE to listOf(BloodGlucoseRecord::class.java),
131                 NUTRITION to listOf(NutritionRecord::class.java),
132                 BLOOD_PRESSURE to listOf(BloodPressureRecord::class.java),
133                 VO2_MAX to listOf(Vo2MaxRecord::class.java),
134                 EXERCISE to
135                         listOf(
136                             ExerciseSessionRecord::class.java,
137                             CyclingPedalingCadenceRecord::class.java,
138                         ),
139                 CERVICAL_MUCUS to listOf(CervicalMucusRecord::class.java),
140                 SEXUAL_ACTIVITY to listOf(SexualActivityRecord::class.java),
141                 OVULATION_TEST to listOf(OvulationTestRecord::class.java),
142                 MENSTRUATION to
143                         listOf(
144                             MenstruationFlowRecord::class.java,
145                             MenstruationPeriodRecord::class.java,
146                         ),
147                 SLEEP to listOf(SleepSessionRecord::class.java),
148                 BODY_WATER_MASS to listOf(BodyWaterMassRecord::class.java),
149                 INTERMENSTRUAL_BLEEDING to listOf(IntermenstrualBleedingRecord::class.java),
150                 HEART_RATE_VARIABILITY to listOf(HeartRateVariabilityRmssdRecord::class.java),
151                 SKIN_TEMPERATURE to listOf(SkinTemperatureRecord::class.java),
152                 PLANNED_EXERCISE to listOf(PlannedExerciseSessionRecord::class.java),
153                 MINDFULNESS to listOf(MindfulnessSessionRecord::class.java),
154             )
155 
156     fun getDataTypes(permissionType: FitnessPermissionType): List<Class<out Record>> {
157         return map[permissionType].orEmpty()
158     }
159 
160     fun getAllDataTypes(): Map<FitnessPermissionType, List<Class<out Record>>> {
161         return map
162     }
163 
164     private fun createMap(): Map<FitnessPermissionType, List<Class<out Record>>> {
165         val healthConnectMappings = HealthConnectMappings.getInstance()
166 
167         return healthConnectMappings.allRecordTypeIdentifiers
168             .map { recordTypeId ->
169                 fromHealthPermissionCategory(
170                     healthConnectMappings.getHealthPermissionCategoryForRecordType(recordTypeId)
171                 ) to healthConnectMappings.recordIdToExternalRecordClassMap[recordTypeId]!!
172             }
173             .groupBy({ it.first as FitnessPermissionType }, { it.second })
174     }
175 }
176