• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  *
17  */
18 
19 package com.android.healthconnect.controller.dataentries.formatters.shared
20 
21 import android.health.connect.datatypes.ActiveCaloriesBurnedRecord
22 import android.health.connect.datatypes.ActivityIntensityRecord
23 import android.health.connect.datatypes.BasalBodyTemperatureRecord
24 import android.health.connect.datatypes.BasalMetabolicRateRecord
25 import android.health.connect.datatypes.BloodGlucoseRecord
26 import android.health.connect.datatypes.BloodPressureRecord
27 import android.health.connect.datatypes.BodyFatRecord
28 import android.health.connect.datatypes.BodyTemperatureRecord
29 import android.health.connect.datatypes.BodyWaterMassRecord
30 import android.health.connect.datatypes.BoneMassRecord
31 import android.health.connect.datatypes.CervicalMucusRecord
32 import android.health.connect.datatypes.CyclingPedalingCadenceRecord
33 import android.health.connect.datatypes.DistanceRecord
34 import android.health.connect.datatypes.ElevationGainedRecord
35 import android.health.connect.datatypes.ExerciseSessionRecord
36 import android.health.connect.datatypes.FloorsClimbedRecord
37 import android.health.connect.datatypes.HeartRateRecord
38 import android.health.connect.datatypes.HeartRateVariabilityRmssdRecord
39 import android.health.connect.datatypes.HeightRecord
40 import android.health.connect.datatypes.HydrationRecord
41 import android.health.connect.datatypes.IntermenstrualBleedingRecord
42 import android.health.connect.datatypes.LeanBodyMassRecord
43 import android.health.connect.datatypes.MenstruationFlowRecord
44 import android.health.connect.datatypes.MindfulnessSessionRecord
45 import android.health.connect.datatypes.NutritionRecord
46 import android.health.connect.datatypes.OvulationTestRecord
47 import android.health.connect.datatypes.OxygenSaturationRecord
48 import android.health.connect.datatypes.PlannedExerciseSessionRecord
49 import android.health.connect.datatypes.PowerRecord
50 import android.health.connect.datatypes.Record
51 import android.health.connect.datatypes.RespiratoryRateRecord
52 import android.health.connect.datatypes.RestingHeartRateRecord
53 import android.health.connect.datatypes.SexualActivityRecord
54 import android.health.connect.datatypes.SkinTemperatureRecord
55 import android.health.connect.datatypes.SleepSessionRecord
56 import android.health.connect.datatypes.SpeedRecord
57 import android.health.connect.datatypes.StepsCadenceRecord
58 import android.health.connect.datatypes.StepsRecord
59 import android.health.connect.datatypes.TotalCaloriesBurnedRecord
60 import android.health.connect.datatypes.Vo2MaxRecord
61 import android.health.connect.datatypes.WeightRecord
62 import android.health.connect.datatypes.WheelchairPushesRecord
63 import com.android.healthconnect.controller.data.entries.FormattedEntry
64 import com.android.healthconnect.controller.dataentries.formatters.ActiveCaloriesBurnedFormatter
65 import com.android.healthconnect.controller.dataentries.formatters.ActivityIntensityFormatter
66 import com.android.healthconnect.controller.dataentries.formatters.BasalBodyTemperatureFormatter
67 import com.android.healthconnect.controller.dataentries.formatters.BasalMetabolicRateFormatter
68 import com.android.healthconnect.controller.dataentries.formatters.BloodGlucoseFormatter
69 import com.android.healthconnect.controller.dataentries.formatters.BloodPressureFormatter
70 import com.android.healthconnect.controller.dataentries.formatters.BodyFatFormatter
71 import com.android.healthconnect.controller.dataentries.formatters.BodyTemperatureFormatter
72 import com.android.healthconnect.controller.dataentries.formatters.BodyWaterMassFormatter
73 import com.android.healthconnect.controller.dataentries.formatters.BoneMassFormatter
74 import com.android.healthconnect.controller.dataentries.formatters.CervicalMucusFormatter
75 import com.android.healthconnect.controller.dataentries.formatters.CyclingPedalingCadenceFormatter
76 import com.android.healthconnect.controller.dataentries.formatters.DistanceFormatter
77 import com.android.healthconnect.controller.dataentries.formatters.ElevationGainedFormatter
78 import com.android.healthconnect.controller.dataentries.formatters.ExerciseSessionFormatter
79 import com.android.healthconnect.controller.dataentries.formatters.FloorsFormatter
80 import com.android.healthconnect.controller.dataentries.formatters.HeartRateFormatter
81 import com.android.healthconnect.controller.dataentries.formatters.HeartRateVariabilityRmssdFormatter
82 import com.android.healthconnect.controller.dataentries.formatters.HeightFormatter
83 import com.android.healthconnect.controller.dataentries.formatters.HydrationFormatter
84 import com.android.healthconnect.controller.dataentries.formatters.IntermenstrualBleedingFormatter
85 import com.android.healthconnect.controller.dataentries.formatters.LeanBodyMassFormatter
86 import com.android.healthconnect.controller.dataentries.formatters.MenstruationFlowFormatter
87 import com.android.healthconnect.controller.dataentries.formatters.MindfulnessSessionFormatter
88 import com.android.healthconnect.controller.dataentries.formatters.NutritionFormatter
89 import com.android.healthconnect.controller.dataentries.formatters.OvulationTestFormatter
90 import com.android.healthconnect.controller.dataentries.formatters.OxygenSaturationFormatter
91 import com.android.healthconnect.controller.dataentries.formatters.PlannedExerciseSessionRecordFormatter
92 import com.android.healthconnect.controller.dataentries.formatters.PowerFormatter
93 import com.android.healthconnect.controller.dataentries.formatters.RespiratoryRateFormatter
94 import com.android.healthconnect.controller.dataentries.formatters.RestingHeartRateFormatter
95 import com.android.healthconnect.controller.dataentries.formatters.SexualActivityFormatter
96 import com.android.healthconnect.controller.dataentries.formatters.SkinTemperatureFormatter
97 import com.android.healthconnect.controller.dataentries.formatters.SleepSessionFormatter
98 import com.android.healthconnect.controller.dataentries.formatters.SpeedFormatter
99 import com.android.healthconnect.controller.dataentries.formatters.StepsCadenceFormatter
100 import com.android.healthconnect.controller.dataentries.formatters.StepsFormatter
101 import com.android.healthconnect.controller.dataentries.formatters.TotalCaloriesBurnedFormatter
102 import com.android.healthconnect.controller.dataentries.formatters.Vo2MaxFormatter
103 import com.android.healthconnect.controller.dataentries.formatters.WeightFormatter
104 import com.android.healthconnect.controller.dataentries.formatters.WheelchairPushesFormatter
105 import com.android.healthconnect.controller.shared.app.AppInfoReader
106 import javax.inject.Inject
107 import javax.inject.Singleton
108 
109 @Singleton
110 class HealthDataEntryFormatter
111 @Inject
112 constructor(
113     private val appInfoReader: AppInfoReader,
114     private val heartRateFormatter: HeartRateFormatter,
115     private val stepsFormatter: StepsFormatter,
116     private val stepsCadenceFormatter: StepsCadenceFormatter,
117     private val basalMetabolicRateFormatter: BasalMetabolicRateFormatter,
118     private val speedFormatter: SpeedFormatter,
119     private val distanceFormatter: DistanceFormatter,
120     private val powerFormatter: PowerFormatter,
121     private val activeCaloriesBurnedFormatter: ActiveCaloriesBurnedFormatter,
122     private val totalCaloriesBurnedFormatter: TotalCaloriesBurnedFormatter,
123     private val heightFormatter: HeightFormatter,
124     private val bodyFatFormatter: BodyFatFormatter,
125     private val oxygenSaturationFormatter: OxygenSaturationFormatter,
126     private val basalBodyTemperatureFormatter: BasalBodyTemperatureFormatter,
127     private val bodyTemperatureFormatter: BodyTemperatureFormatter,
128     private val wheelchairPushesFormatter: WheelchairPushesFormatter,
129     private val restingHeartRateFormatter: RestingHeartRateFormatter,
130     private val respiratoryRateFormatter: RespiratoryRateFormatter,
131     private val hydrationFormatter: HydrationFormatter,
132     private val floorsFormatter: FloorsFormatter,
133     private val elevationGainedFormatter: ElevationGainedFormatter,
134     private val weightFormatter: WeightFormatter,
135     private val leanBodyMassFormatter: LeanBodyMassFormatter,
136     private val boneMassFormatter: BoneMassFormatter,
137     private val bloodGlucoseFormatter: BloodGlucoseFormatter,
138     private val nutritionFormatter: NutritionFormatter,
139     private val bloodPressureFormatter: BloodPressureFormatter,
140     private val cyclingPedalingCadenceFormatter: CyclingPedalingCadenceFormatter,
141     private val vo2MaxFormatter: Vo2MaxFormatter,
142     private val cervicalMucusFormatter: CervicalMucusFormatter,
143     private val menstruationFlowFormatter: MenstruationFlowFormatter,
144     private val ovulationTestFormatter: OvulationTestFormatter,
145     private val sexualActivityFormatter: SexualActivityFormatter,
146     private val sleepSessionFormatter: SleepSessionFormatter,
147     private val exerciseSessionFormatter: ExerciseSessionFormatter,
148     private val bodyWaterMassFormatter: BodyWaterMassFormatter,
149     private val intermenstrualBleedingFormatter: IntermenstrualBleedingFormatter,
150     private val heartRateVariabilityRmssdFormatter: HeartRateVariabilityRmssdFormatter,
151     private val skinTemperatureFormatter: SkinTemperatureFormatter,
152     private val plannedExerciseSessionRecordFormatter: PlannedExerciseSessionRecordFormatter,
153     private val mindfulnessSessionFormatter: MindfulnessSessionFormatter,
154     private val activityIntensityFormatter: ActivityIntensityFormatter,
155 ) {
156 
formatnull157     suspend fun format(record: Record, showDataOrigin: Boolean = true): FormattedEntry {
158         val appName: String = if (showDataOrigin) getAppName(record) else ""
159         return when (record) {
160             is HeartRateRecord -> heartRateFormatter.format(record, appName)
161             is StepsRecord -> stepsFormatter.format(record, appName)
162             is StepsCadenceRecord -> stepsCadenceFormatter.format(record, appName)
163             is BasalMetabolicRateRecord -> basalMetabolicRateFormatter.format(record, appName)
164             is SpeedRecord -> speedFormatter.format(record, appName)
165             is DistanceRecord -> distanceFormatter.format(record, appName)
166             is PowerRecord -> powerFormatter.format(record, appName)
167             is ActiveCaloriesBurnedRecord -> activeCaloriesBurnedFormatter.format(record, appName)
168             is TotalCaloriesBurnedRecord -> totalCaloriesBurnedFormatter.format(record, appName)
169             is HeightRecord -> heightFormatter.format(record, appName)
170             is BodyFatRecord -> bodyFatFormatter.format(record, appName)
171             is OxygenSaturationRecord -> oxygenSaturationFormatter.format(record, appName)
172             is BodyTemperatureRecord -> bodyTemperatureFormatter.format(record, appName)
173             is BasalBodyTemperatureRecord -> basalBodyTemperatureFormatter.format(record, appName)
174             is WheelchairPushesRecord -> wheelchairPushesFormatter.format(record, appName)
175             is RestingHeartRateRecord -> restingHeartRateFormatter.format(record, appName)
176             is RespiratoryRateRecord -> respiratoryRateFormatter.format(record, appName)
177             is HydrationRecord -> hydrationFormatter.format(record, appName)
178             is FloorsClimbedRecord -> floorsFormatter.format(record, appName)
179             is ElevationGainedRecord -> elevationGainedFormatter.format(record, appName)
180             is WeightRecord -> weightFormatter.format(record, appName)
181             is LeanBodyMassRecord -> leanBodyMassFormatter.format(record, appName)
182             is BoneMassRecord -> boneMassFormatter.format(record, appName)
183             is BloodGlucoseRecord -> bloodGlucoseFormatter.format(record, appName)
184             is NutritionRecord -> nutritionFormatter.format(record, appName)
185             is BloodPressureRecord -> bloodPressureFormatter.format(record, appName)
186             is CyclingPedalingCadenceRecord ->
187                 cyclingPedalingCadenceFormatter.format(record, appName)
188             is Vo2MaxRecord -> vo2MaxFormatter.format(record, appName)
189             is CervicalMucusRecord -> cervicalMucusFormatter.format(record, appName)
190             is SexualActivityRecord -> sexualActivityFormatter.format(record, appName)
191             is OvulationTestRecord -> ovulationTestFormatter.format(record, appName)
192             is MenstruationFlowRecord -> menstruationFlowFormatter.format(record, appName)
193             is SleepSessionRecord -> sleepSessionFormatter.format(record, appName)
194             is ExerciseSessionRecord -> exerciseSessionFormatter.format(record, appName)
195             is BodyWaterMassRecord -> bodyWaterMassFormatter.format(record, appName)
196             is IntermenstrualBleedingRecord ->
197                 intermenstrualBleedingFormatter.format(record, appName)
198             is HeartRateVariabilityRmssdRecord ->
199                 heartRateVariabilityRmssdFormatter.format(record, appName)
200             is SkinTemperatureRecord -> skinTemperatureFormatter.format(record, appName)
201             is PlannedExerciseSessionRecord ->
202                 plannedExerciseSessionRecordFormatter.format(record, appName)
203             is MindfulnessSessionRecord -> mindfulnessSessionFormatter.format(record, appName)
204             is ActivityIntensityRecord -> activityIntensityFormatter.format(record, appName)
205             else -> throw IllegalArgumentException("${record::class.java} Not supported!")
206         }
207     }
208 
getAppNamenull209     private suspend fun getAppName(record: Record): String {
210         return appInfoReader.getAppMetadata(record.metadata.dataOrigin.packageName).appName
211     }
212 }
213