1 /**
2 * 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.permissions.data
17
18 import android.content.Context
19 import android.graphics.drawable.Drawable
20 import android.health.connect.HealthPermissionCategory
21 import com.android.healthconnect.controller.shared.HealthDataCategoryExtensions.fromFitnessPermissionType
22 import com.android.healthconnect.controller.shared.HealthDataCategoryExtensions.icon
23
24 // TODO (b/299880830) possibly rename "category" to something else
25 enum class FitnessPermissionType(val category: Int) : HealthPermissionType {
26 // ACTIVITY
27 ACTIVE_CALORIES_BURNED(HealthPermissionCategory.ACTIVE_CALORIES_BURNED),
28 ACTIVITY_INTENSITY(HealthPermissionCategory.ACTIVITY_INTENSITY),
29 DISTANCE(HealthPermissionCategory.DISTANCE),
30 ELEVATION_GAINED(HealthPermissionCategory.ELEVATION_GAINED),
31 EXERCISE(HealthPermissionCategory.EXERCISE),
32 PLANNED_EXERCISE(HealthPermissionCategory.PLANNED_EXERCISE),
33 FLOORS_CLIMBED(HealthPermissionCategory.FLOORS_CLIMBED),
34 STEPS(HealthPermissionCategory.STEPS),
35 TOTAL_CALORIES_BURNED(HealthPermissionCategory.TOTAL_CALORIES_BURNED),
36 VO2_MAX(HealthPermissionCategory.VO2_MAX),
37 WHEELCHAIR_PUSHES(HealthPermissionCategory.WHEELCHAIR_PUSHES),
38 POWER(HealthPermissionCategory.POWER),
39 SPEED(HealthPermissionCategory.SPEED),
40 EXERCISE_ROUTE(HealthPermissionCategory.EXERCISE),
41
42 // BODY_MEASUREMENTS
43 BASAL_METABOLIC_RATE(HealthPermissionCategory.BASAL_METABOLIC_RATE),
44 BODY_FAT(HealthPermissionCategory.BODY_FAT),
45 BODY_WATER_MASS(HealthPermissionCategory.BODY_WATER_MASS),
46 BONE_MASS(HealthPermissionCategory.BONE_MASS),
47 HEIGHT(HealthPermissionCategory.HEIGHT),
48 LEAN_BODY_MASS(HealthPermissionCategory.LEAN_BODY_MASS),
49 WEIGHT(HealthPermissionCategory.WEIGHT),
50
51 // CYCLE_TRACKING
52 CERVICAL_MUCUS(HealthPermissionCategory.CERVICAL_MUCUS),
53 MENSTRUATION(HealthPermissionCategory.MENSTRUATION),
54 OVULATION_TEST(HealthPermissionCategory.OVULATION_TEST),
55 SEXUAL_ACTIVITY(HealthPermissionCategory.SEXUAL_ACTIVITY),
56 INTERMENSTRUAL_BLEEDING(HealthPermissionCategory.INTERMENSTRUAL_BLEEDING),
57
58 // NUTRITION
59 HYDRATION(HealthPermissionCategory.HYDRATION),
60 NUTRITION(HealthPermissionCategory.NUTRITION),
61
62 // SLEEP
63 SLEEP(HealthPermissionCategory.SLEEP),
64
65 // VITALS
66 BASAL_BODY_TEMPERATURE(HealthPermissionCategory.BASAL_BODY_TEMPERATURE),
67 BLOOD_GLUCOSE(HealthPermissionCategory.BLOOD_GLUCOSE),
68 BLOOD_PRESSURE(HealthPermissionCategory.BLOOD_PRESSURE),
69 BODY_TEMPERATURE(HealthPermissionCategory.BODY_TEMPERATURE),
70 HEART_RATE(HealthPermissionCategory.HEART_RATE),
71 HEART_RATE_VARIABILITY(HealthPermissionCategory.HEART_RATE_VARIABILITY),
72 OXYGEN_SATURATION(HealthPermissionCategory.OXYGEN_SATURATION),
73 RESPIRATORY_RATE(HealthPermissionCategory.RESPIRATORY_RATE),
74 RESTING_HEART_RATE(HealthPermissionCategory.RESTING_HEART_RATE),
75 SKIN_TEMPERATURE(HealthPermissionCategory.SKIN_TEMPERATURE),
76
77 // WELLNESS
78 MINDFULNESS(HealthPermissionCategory.MINDFULNESS);
79
lowerCaseLabelnull80 override fun lowerCaseLabel(): Int =
81 FitnessPermissionStrings.fromPermissionType(this).lowercaseLabel
82
83 override fun upperCaseLabel(): Int =
84 FitnessPermissionStrings.fromPermissionType(this).uppercaseLabel
85
86 override fun icon(context: Context): Drawable? = fromFitnessPermissionType(this).icon(context)
87 }
88
89 fun isValidFitnessPermissionType(permissionTypeString: String): Boolean {
90 try {
91 FitnessPermissionType.valueOf(permissionTypeString)
92 } catch (e: IllegalArgumentException) {
93 return false
94 }
95 return true
96 }
97
fromHealthPermissionCategorynull98 fun fromHealthPermissionCategory(healthPermissionCategory: Int): HealthPermissionType {
99 return when (healthPermissionCategory) {
100 HealthPermissionCategory.UNKNOWN ->
101 throw IllegalArgumentException("PermissionType is UNKNOWN.")
102 // ACTIVITY
103 HealthPermissionCategory.ACTIVE_CALORIES_BURNED ->
104 FitnessPermissionType.ACTIVE_CALORIES_BURNED
105 HealthPermissionCategory.ACTIVITY_INTENSITY -> FitnessPermissionType.ACTIVITY_INTENSITY
106 HealthPermissionCategory.DISTANCE -> FitnessPermissionType.DISTANCE
107 HealthPermissionCategory.ELEVATION_GAINED -> FitnessPermissionType.ELEVATION_GAINED
108 HealthPermissionCategory.EXERCISE -> FitnessPermissionType.EXERCISE
109 HealthPermissionCategory.PLANNED_EXERCISE -> FitnessPermissionType.PLANNED_EXERCISE
110 HealthPermissionCategory.FLOORS_CLIMBED -> FitnessPermissionType.FLOORS_CLIMBED
111 HealthPermissionCategory.STEPS -> FitnessPermissionType.STEPS
112 HealthPermissionCategory.TOTAL_CALORIES_BURNED ->
113 FitnessPermissionType.TOTAL_CALORIES_BURNED
114 HealthPermissionCategory.VO2_MAX -> FitnessPermissionType.VO2_MAX
115 HealthPermissionCategory.WHEELCHAIR_PUSHES -> FitnessPermissionType.WHEELCHAIR_PUSHES
116 HealthPermissionCategory.POWER -> FitnessPermissionType.POWER
117 HealthPermissionCategory.SPEED -> FitnessPermissionType.SPEED
118 // BODY_MEASUREMENTS
119 HealthPermissionCategory.BASAL_METABOLIC_RATE -> FitnessPermissionType.BASAL_METABOLIC_RATE
120 HealthPermissionCategory.BODY_FAT -> FitnessPermissionType.BODY_FAT
121 HealthPermissionCategory.BODY_WATER_MASS -> FitnessPermissionType.BODY_WATER_MASS
122 HealthPermissionCategory.BONE_MASS -> FitnessPermissionType.BONE_MASS
123 HealthPermissionCategory.HEIGHT -> FitnessPermissionType.HEIGHT
124 HealthPermissionCategory.LEAN_BODY_MASS -> FitnessPermissionType.LEAN_BODY_MASS
125 HealthPermissionCategory.WEIGHT -> FitnessPermissionType.WEIGHT
126 // CYCLE_TRACKING
127 HealthPermissionCategory.CERVICAL_MUCUS -> FitnessPermissionType.CERVICAL_MUCUS
128 HealthPermissionCategory.MENSTRUATION -> FitnessPermissionType.MENSTRUATION
129 HealthPermissionCategory.OVULATION_TEST -> FitnessPermissionType.OVULATION_TEST
130 HealthPermissionCategory.SEXUAL_ACTIVITY -> FitnessPermissionType.SEXUAL_ACTIVITY
131 HealthPermissionCategory.INTERMENSTRUAL_BLEEDING ->
132 FitnessPermissionType.INTERMENSTRUAL_BLEEDING
133 // NUTRITION
134 HealthPermissionCategory.HYDRATION -> FitnessPermissionType.HYDRATION
135 HealthPermissionCategory.NUTRITION -> FitnessPermissionType.NUTRITION
136 // SLEEP
137 HealthPermissionCategory.SLEEP -> FitnessPermissionType.SLEEP
138 // VITALS
139 HealthPermissionCategory.BASAL_BODY_TEMPERATURE ->
140 FitnessPermissionType.BASAL_BODY_TEMPERATURE
141 HealthPermissionCategory.BLOOD_GLUCOSE -> FitnessPermissionType.BLOOD_GLUCOSE
142 HealthPermissionCategory.BLOOD_PRESSURE -> FitnessPermissionType.BLOOD_PRESSURE
143 HealthPermissionCategory.BODY_TEMPERATURE -> FitnessPermissionType.BODY_TEMPERATURE
144 HealthPermissionCategory.HEART_RATE -> FitnessPermissionType.HEART_RATE
145 HealthPermissionCategory.HEART_RATE_VARIABILITY ->
146 FitnessPermissionType.HEART_RATE_VARIABILITY
147 HealthPermissionCategory.OXYGEN_SATURATION -> FitnessPermissionType.OXYGEN_SATURATION
148 HealthPermissionCategory.RESPIRATORY_RATE -> FitnessPermissionType.RESPIRATORY_RATE
149 HealthPermissionCategory.RESTING_HEART_RATE -> FitnessPermissionType.RESTING_HEART_RATE
150 HealthPermissionCategory.SKIN_TEMPERATURE -> FitnessPermissionType.SKIN_TEMPERATURE
151 HealthPermissionCategory.MINDFULNESS -> FitnessPermissionType.MINDFULNESS
152 else -> throw IllegalArgumentException("PermissionType is not supported.")
153 }
154 }
155