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.CyclingPedalingCadenceRecord
22 import android.health.connect.datatypes.ExerciseSessionRecord
23 import android.health.connect.datatypes.HeartRateRecord
24 import android.health.connect.datatypes.PlannedExerciseSessionRecord
25 import android.health.connect.datatypes.PowerRecord
26 import android.health.connect.datatypes.Record
27 import android.health.connect.datatypes.SkinTemperatureRecord
28 import android.health.connect.datatypes.SleepSessionRecord
29 import android.health.connect.datatypes.SpeedRecord
30 import android.health.connect.datatypes.StepsCadenceRecord
31 import com.android.healthconnect.controller.data.entries.FormattedEntry
32 import com.android.healthconnect.controller.dataentries.formatters.CyclingPedalingCadenceFormatter
33 import com.android.healthconnect.controller.dataentries.formatters.ExerciseSessionFormatter
34 import com.android.healthconnect.controller.dataentries.formatters.HeartRateFormatter
35 import com.android.healthconnect.controller.dataentries.formatters.PlannedExerciseSessionRecordFormatter
36 import com.android.healthconnect.controller.dataentries.formatters.PowerFormatter
37 import com.android.healthconnect.controller.dataentries.formatters.SkinTemperatureFormatter
38 import com.android.healthconnect.controller.dataentries.formatters.SleepSessionFormatter
39 import com.android.healthconnect.controller.dataentries.formatters.SpeedFormatter
40 import com.android.healthconnect.controller.dataentries.formatters.StepsCadenceFormatter
41 import javax.inject.Inject
42 import javax.inject.Singleton
43 
44 @Singleton
45 class HealthDataEntryDetailsFormatter
46 @Inject
47 constructor(
48     private val sleepSessionFormatter: SleepSessionFormatter,
49     private val exerciseSessionFormatter: ExerciseSessionFormatter,
50     private val heartRateFormatter: HeartRateFormatter,
51     private val speedRecordFormatter: SpeedFormatter,
52     private val stepsCadenceFormatter: StepsCadenceFormatter,
53     private val powerFormatter: PowerFormatter,
54     private val cyclingPedalingCadenceFormatter: CyclingPedalingCadenceFormatter,
55     private val skinTemperatureFormatter: SkinTemperatureFormatter,
56     private val plannedExerciseSessionRecordFormatter: PlannedExerciseSessionRecordFormatter
57 ) {
formatDetailsnull58     suspend fun formatDetails(record: Record): List<FormattedEntry> {
59         return when (record) {
60             is SleepSessionRecord -> sleepSessionFormatter.formatRecordDetails(record)
61             is ExerciseSessionRecord -> exerciseSessionFormatter.formatRecordDetails(record)
62             is HeartRateRecord -> heartRateFormatter.formatRecordDetails(record)
63             is SpeedRecord -> speedRecordFormatter.formatRecordDetails(record)
64             is StepsCadenceRecord -> stepsCadenceFormatter.formatRecordDetails(record)
65             is PowerRecord -> powerFormatter.formatRecordDetails(record)
66             is CyclingPedalingCadenceRecord ->
67                 cyclingPedalingCadenceFormatter.formatRecordDetails(record)
68             is SkinTemperatureRecord -> skinTemperatureFormatter.formatRecordDetails(record)
69             is PlannedExerciseSessionRecord ->
70                 plannedExerciseSessionRecordFormatter.formatRecordDetails(record)
71             else -> throw IllegalArgumentException("${record::class.java} Not supported!")
72         }
73     }
74 }
75