• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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