[go: nahoru, domu]

blob: 1a3747c35cd2c7a9ed07e87872d82dd3bca6f0c1 [file] [log] [blame]
Hengrui CAO7a1126e2022-05-30 12:48:52 +01001/*
2 * Copyright (C) 2022 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 */
16package androidx.health.connect.client.records
17
Hengrui CAO8f1f43d2022-10-21 17:07:07 +010018import androidx.annotation.IntDef
Hengrui CAO7a1126e2022-05-30 12:48:52 +010019import androidx.annotation.RestrictTo
Hengrui CAO7a1126e2022-05-30 12:48:52 +010020import androidx.health.connect.client.aggregate.AggregateMetric
21import androidx.health.connect.client.records.metadata.Metadata
22import java.time.Duration
23import java.time.Instant
24import java.time.ZoneOffset
25
26/**
27 * Captures any exercise a user does. This can be common fitness exercise like running or different
28 * sports.
29 *
30 * Each record needs a start time and end time. Records don't need to be back-to-back or directly
31 * after each other, there can be gaps in between.
Hengrui CAO4cee4fc2022-07-18 17:02:31 +010032 *
33 * Example code demonstrate how to read exercise session:
Sameer Jainabe7abc2023-01-26 13:26:07 +000034 *
Hengrui CAO4cee4fc2022-07-18 17:02:31 +010035 * @sample androidx.health.connect.client.samples.ReadExerciseSessions
Hengrui CAO7a1126e2022-05-30 12:48:52 +010036 */
Agostinho Junior6056a212023-06-23 13:46:38 +000037class ExerciseSessionRecord
Nickel Cheng142e2372023-04-27 17:48:25 +010038@RestrictTo(RestrictTo.Scope.LIBRARY)
Agostinho Junior6056a212023-06-23 13:46:38 +000039internal constructor(
Arkadii Ivanova9af8c62022-10-11 16:00:25 +010040 override val startTime: Instant,
41 override val startZoneOffset: ZoneOffset?,
42 override val endTime: Instant,
43 override val endZoneOffset: ZoneOffset?,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +010044 /** Type of exercise (e.g. walking, swimming). Required field. */
Agostinho Junior6056a212023-06-23 13:46:38 +000045 @property:ExerciseTypes val exerciseType: Int,
Hengrui CAO7a1126e2022-05-30 12:48:52 +010046 /** Title of the session. Optional field. */
Agostinho Junior6056a212023-06-23 13:46:38 +000047 val title: String? = null,
Hengrui CAO7a1126e2022-05-30 12:48:52 +010048 /** Additional notes for the session. Optional field. */
Agostinho Junior6056a212023-06-23 13:46:38 +000049 val notes: String? = null,
Hengrui CAO7a1126e2022-05-30 12:48:52 +010050 override val metadata: Metadata = Metadata.EMPTY,
Nickel Cheng142e2372023-04-27 17:48:25 +010051 /**
52 * [ExerciseSegment]s of the session. Optional field. Time in segments should be within the
53 * parent session, and should not overlap with each other.
Nickel Chengded1dac2023-04-27 16:52:35 +010054 */
Agostinho Junior6056a212023-06-23 13:46:38 +000055 val segments: List<ExerciseSegment> = emptyList(),
Nickel Cheng142e2372023-04-27 17:48:25 +010056 /**
57 * [ExerciseLap]s of the session. Optional field. Time in laps should be within the parent
58 * session, and should not overlap with each other.
Nickel Chengded1dac2023-04-27 16:52:35 +010059 */
Agostinho Junior6056a212023-06-23 13:46:38 +000060 val laps: List<ExerciseLap> = emptyList(),
61
62 /** [ExerciseRoute] [ExerciseRoute] of the session. */
63 val exerciseRoute: ExerciseRoute = ExerciseRoute.NoData(),
Hengrui CAO7a1126e2022-05-30 12:48:52 +010064) : IntervalRecord {
Hengrui CAOcdeddda62022-09-27 10:57:45 +010065
Agostinho Junior6056a212023-06-23 13:46:38 +000066 @JvmOverloads
67 constructor(
Nickel Chengded1dac2023-04-27 16:52:35 +010068 startTime: Instant,
69 startZoneOffset: ZoneOffset?,
70 endTime: Instant,
71 endZoneOffset: ZoneOffset?,
72 /** Type of exercise (e.g. walking, swimming). Required field. */
73 exerciseType: Int,
74 /** Title of the session. Optional field. */
75 title: String? = null,
76 /** Additional notes for the session. Optional field. */
77 notes: String? = null,
78 metadata: Metadata = Metadata.EMPTY,
Nickel Cheng142e2372023-04-27 17:48:25 +010079 segments: List<ExerciseSegment> = emptyList(),
80 laps: List<ExerciseLap> = emptyList(),
Agostinho Junior6056a212023-06-23 13:46:38 +000081 exerciseRouteData: ExerciseRoute.Data? = null,
Nickel Chengded1dac2023-04-27 16:52:35 +010082 ) : this(
83 startTime,
84 startZoneOffset,
85 endTime,
86 endZoneOffset,
87 exerciseType,
88 title,
89 notes,
90 metadata,
Nickel Cheng142e2372023-04-27 17:48:25 +010091 segments,
92 laps,
Agostinho Junior6056a212023-06-23 13:46:38 +000093 exerciseRouteData ?: ExerciseRoute.NoData()
Nickel Chengded1dac2023-04-27 16:52:35 +010094 )
95
Hengrui CAOcdeddda62022-09-27 10:57:45 +010096 init {
97 require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
Nickel Chengded1dac2023-04-27 16:52:35 +010098 if (segments.isNotEmpty()) {
99 var sortedSegments = segments.sortedWith { a, b -> a.startTime.compareTo(b.startTime) }
100 for (i in 0 until sortedSegments.lastIndex) {
101 require(!sortedSegments[i].endTime.isAfter(sortedSegments[i + 1].startTime)) {
102 "segments can not overlap."
103 }
104 }
105 // check all segments are within parent session duration
106 require(!sortedSegments.first().startTime.isBefore(startTime)) {
107 "segments can not be out of parent time range."
108 }
109 require(!sortedSegments.last().endTime.isAfter(endTime)) {
110 "segments can not be out of parent time range."
111 }
112 for (segment in sortedSegments) {
113 require(segment.isCompatibleWith(exerciseType)) {
114 "segmentType and sessionType is not compatible."
115 }
116 }
117 }
118 if (laps.isNotEmpty()) {
119 val sortedLaps = laps.sortedWith { a, b -> a.startTime.compareTo(b.startTime) }
120 for (i in 0 until sortedLaps.lastIndex) {
121 require(!sortedLaps[i].endTime.isAfter(sortedLaps[i + 1].startTime)) {
122 "laps can not overlap."
123 }
124 }
125 // check all laps are within parent session duration
126 require(!sortedLaps.first().startTime.isBefore(startTime)) {
127 "laps can not be out of parent time range."
128 }
129 require(!sortedLaps.last().endTime.isAfter(endTime)) {
130 "laps can not be out of parent time range."
131 }
132 }
Agostinho Junior6056a212023-06-23 13:46:38 +0000133 if (exerciseRoute is ExerciseRoute.Data) {
134 require(exerciseRoute.isWithin(startTime, endTime)) {
Nickel Cheng142e2372023-04-27 17:48:25 +0100135 "route can not be out of parent time range."
136 }
Nickel Chengded1dac2023-04-27 16:52:35 +0100137 }
Hengrui CAOcdeddda62022-09-27 10:57:45 +0100138 }
139
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100140 override fun equals(other: Any?): Boolean {
141 if (this === other) return true
142 if (other !is ExerciseSessionRecord) return false
143
144 if (exerciseType != other.exerciseType) return false
145 if (title != other.title) return false
146 if (notes != other.notes) return false
147 if (startTime != other.startTime) return false
148 if (startZoneOffset != other.startZoneOffset) return false
149 if (endTime != other.endTime) return false
150 if (endZoneOffset != other.endZoneOffset) return false
151 if (metadata != other.metadata) return false
Nickel Chengded1dac2023-04-27 16:52:35 +0100152 if (segments != other.segments) return false
153 if (laps != other.laps) return false
Agostinho Junior6056a212023-06-23 13:46:38 +0000154 if (exerciseRoute != other.exerciseRoute) return false
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100155
156 return true
157 }
158
159 override fun hashCode(): Int {
Agostinho Junior6056a212023-06-23 13:46:38 +0000160 var result = exerciseType.hashCode()
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100161 result = 31 * result + title.hashCode()
162 result = 31 * result + notes.hashCode()
163 result = 31 * result + (startZoneOffset?.hashCode() ?: 0)
164 result = 31 * result + endTime.hashCode()
165 result = 31 * result + (endZoneOffset?.hashCode() ?: 0)
166 result = 31 * result + metadata.hashCode()
Agostinho Junior6056a212023-06-23 13:46:38 +0000167 result = 31 * result + exerciseRoute.hashCode()
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100168 return result
169 }
170
171 companion object {
172 /**
Hengrui CAO29baabd2022-10-21 14:43:09 +0100173 * Metric identifier to retrieve the total exercise time from
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100174 * [androidx.health.connect.client.aggregate.AggregationResult].
175 */
176 @JvmField
Hengrui CAO29baabd2022-10-21 14:43:09 +0100177 val EXERCISE_DURATION_TOTAL: AggregateMetric<Duration> =
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100178 AggregateMetric.durationMetric(
179 dataTypeName = "ActiveTime",
180 aggregationType = AggregateMetric.AggregationType.TOTAL,
181 fieldName = "time",
182 )
Hengrui CAO29baabd2022-10-21 14:43:09 +0100183 // Exercise duration time requires computing total time from ExerciseEvent/Session and not
184 // a straightforward Duration aggregation.
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100185
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100186 /**
187 * Can be used to represent any generic workout that does not fall into a specific category.
188 * Any unknown new value definition will also fall automatically into
189 * [EXERCISE_TYPE_OTHER_WORKOUT].
Sameer Jainabe7abc2023-01-26 13:26:07 +0000190 *
191 * Next Id: 84.
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100192 */
193 const val EXERCISE_TYPE_OTHER_WORKOUT = 0
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100194 const val EXERCISE_TYPE_BADMINTON = 2
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100195 const val EXERCISE_TYPE_BASEBALL = 4
196 const val EXERCISE_TYPE_BASKETBALL = 5
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100197 const val EXERCISE_TYPE_BIKING = 8
198 const val EXERCISE_TYPE_BIKING_STATIONARY = 9
199 const val EXERCISE_TYPE_BOOT_CAMP = 10
200 const val EXERCISE_TYPE_BOXING = 11
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100201 const val EXERCISE_TYPE_CALISTHENICS = 13
202 const val EXERCISE_TYPE_CRICKET = 14
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100203 const val EXERCISE_TYPE_DANCING = 16
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100204 const val EXERCISE_TYPE_ELLIPTICAL = 25
205 const val EXERCISE_TYPE_EXERCISE_CLASS = 26
206 const val EXERCISE_TYPE_FENCING = 27
207 const val EXERCISE_TYPE_FOOTBALL_AMERICAN = 28
208 const val EXERCISE_TYPE_FOOTBALL_AUSTRALIAN = 29
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100209 const val EXERCISE_TYPE_FRISBEE_DISC = 31
210 const val EXERCISE_TYPE_GOLF = 32
211 const val EXERCISE_TYPE_GUIDED_BREATHING = 33
212 const val EXERCISE_TYPE_GYMNASTICS = 34
213 const val EXERCISE_TYPE_HANDBALL = 35
214 const val EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING = 36
215 const val EXERCISE_TYPE_HIKING = 37
216 const val EXERCISE_TYPE_ICE_HOCKEY = 38
217 const val EXERCISE_TYPE_ICE_SKATING = 39
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100218 const val EXERCISE_TYPE_MARTIAL_ARTS = 44
219 const val EXERCISE_TYPE_PADDLING = 46
220 const val EXERCISE_TYPE_PARAGLIDING = 47
221 const val EXERCISE_TYPE_PILATES = 48
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100222 const val EXERCISE_TYPE_RACQUETBALL = 50
223 const val EXERCISE_TYPE_ROCK_CLIMBING = 51
224 const val EXERCISE_TYPE_ROLLER_HOCKEY = 52
225 const val EXERCISE_TYPE_ROWING = 53
226 const val EXERCISE_TYPE_ROWING_MACHINE = 54
227 const val EXERCISE_TYPE_RUGBY = 55
228 const val EXERCISE_TYPE_RUNNING = 56
229 const val EXERCISE_TYPE_RUNNING_TREADMILL = 57
230 const val EXERCISE_TYPE_SAILING = 58
231 const val EXERCISE_TYPE_SCUBA_DIVING = 59
232 const val EXERCISE_TYPE_SKATING = 60
233 const val EXERCISE_TYPE_SKIING = 61
234 const val EXERCISE_TYPE_SNOWBOARDING = 62
235 const val EXERCISE_TYPE_SNOWSHOEING = 63
236 const val EXERCISE_TYPE_SOCCER = 64
237 const val EXERCISE_TYPE_SOFTBALL = 65
238 const val EXERCISE_TYPE_SQUASH = 66
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100239 const val EXERCISE_TYPE_STAIR_CLIMBING = 68
240 const val EXERCISE_TYPE_STAIR_CLIMBING_MACHINE = 69
241 const val EXERCISE_TYPE_STRENGTH_TRAINING = 70
242 const val EXERCISE_TYPE_STRETCHING = 71
243 const val EXERCISE_TYPE_SURFING = 72
244 const val EXERCISE_TYPE_SWIMMING_OPEN_WATER = 73
245 const val EXERCISE_TYPE_SWIMMING_POOL = 74
246 const val EXERCISE_TYPE_TABLE_TENNIS = 75
247 const val EXERCISE_TYPE_TENNIS = 76
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100248 const val EXERCISE_TYPE_VOLLEYBALL = 78
249 const val EXERCISE_TYPE_WALKING = 79
250 const val EXERCISE_TYPE_WATER_POLO = 80
251 const val EXERCISE_TYPE_WEIGHTLIFTING = 81
252 const val EXERCISE_TYPE_WHEELCHAIR = 82
253 const val EXERCISE_TYPE_YOGA = 83
254
255 @RestrictTo(RestrictTo.Scope.LIBRARY)
256 @JvmField
257 val EXERCISE_TYPE_STRING_TO_INT_MAP: Map<String, Int> =
258 mapOf(
Sameer Jainabe7abc2023-01-26 13:26:07 +0000259 "back_extension" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100260 "badminton" to EXERCISE_TYPE_BADMINTON,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000261 "barbell_shoulder_press" to EXERCISE_TYPE_STRENGTH_TRAINING,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100262 "baseball" to EXERCISE_TYPE_BASEBALL,
263 "basketball" to EXERCISE_TYPE_BASKETBALL,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000264 "bench_press" to EXERCISE_TYPE_STRENGTH_TRAINING,
265 "bench_sit_up" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100266 "biking" to EXERCISE_TYPE_BIKING,
267 "biking_stationary" to EXERCISE_TYPE_BIKING_STATIONARY,
268 "boot_camp" to EXERCISE_TYPE_BOOT_CAMP,
269 "boxing" to EXERCISE_TYPE_BOXING,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000270 "burpee" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100271 "cricket" to EXERCISE_TYPE_CRICKET,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000272 "crunch" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100273 "dancing" to EXERCISE_TYPE_DANCING,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000274 "deadlift" to EXERCISE_TYPE_STRENGTH_TRAINING,
275 "dumbbell_curl_left_arm" to EXERCISE_TYPE_STRENGTH_TRAINING,
276 "dumbbell_curl_right_arm" to EXERCISE_TYPE_STRENGTH_TRAINING,
277 "dumbbell_front_raise" to EXERCISE_TYPE_STRENGTH_TRAINING,
278 "dumbbell_lateral_raise" to EXERCISE_TYPE_STRENGTH_TRAINING,
279 "dumbbell_triceps_extension_left_arm" to EXERCISE_TYPE_STRENGTH_TRAINING,
280 "dumbbell_triceps_extension_right_arm" to EXERCISE_TYPE_STRENGTH_TRAINING,
281 "dumbbell_triceps_extension_two_arm" to EXERCISE_TYPE_STRENGTH_TRAINING,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100282 "elliptical" to EXERCISE_TYPE_ELLIPTICAL,
283 "exercise_class" to EXERCISE_TYPE_EXERCISE_CLASS,
284 "fencing" to EXERCISE_TYPE_FENCING,
285 "football_american" to EXERCISE_TYPE_FOOTBALL_AMERICAN,
286 "football_australian" to EXERCISE_TYPE_FOOTBALL_AUSTRALIAN,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000287 "forward_twist" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100288 "frisbee_disc" to EXERCISE_TYPE_FRISBEE_DISC,
289 "golf" to EXERCISE_TYPE_GOLF,
290 "guided_breathing" to EXERCISE_TYPE_GUIDED_BREATHING,
291 "gymnastics" to EXERCISE_TYPE_GYMNASTICS,
292 "handball" to EXERCISE_TYPE_HANDBALL,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100293 "hiking" to EXERCISE_TYPE_HIKING,
294 "ice_hockey" to EXERCISE_TYPE_ICE_HOCKEY,
295 "ice_skating" to EXERCISE_TYPE_ICE_SKATING,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000296 "jumping_jack" to EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
297 "jump_rope" to EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
298 "lat_pull_down" to EXERCISE_TYPE_STRENGTH_TRAINING,
299 "lunge" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100300 "martial_arts" to EXERCISE_TYPE_MARTIAL_ARTS,
301 "paddling" to EXERCISE_TYPE_PADDLING,
302 "para_gliding" to
303 EXERCISE_TYPE_PARAGLIDING, // Historic typo in whs with para_gliding
304 "pilates" to EXERCISE_TYPE_PILATES,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000305 "plank" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100306 "racquetball" to EXERCISE_TYPE_RACQUETBALL,
307 "rock_climbing" to EXERCISE_TYPE_ROCK_CLIMBING,
308 "roller_hockey" to EXERCISE_TYPE_ROLLER_HOCKEY,
309 "rowing" to EXERCISE_TYPE_ROWING,
310 "rowing_machine" to EXERCISE_TYPE_ROWING_MACHINE,
311 "rugby" to EXERCISE_TYPE_RUGBY,
312 "running" to EXERCISE_TYPE_RUNNING,
313 "running_treadmill" to EXERCISE_TYPE_RUNNING_TREADMILL,
314 "sailing" to EXERCISE_TYPE_SAILING,
315 "scuba_diving" to EXERCISE_TYPE_SCUBA_DIVING,
316 "skating" to EXERCISE_TYPE_SKATING,
317 "skiing" to EXERCISE_TYPE_SKIING,
318 "snowboarding" to EXERCISE_TYPE_SNOWBOARDING,
319 "snowshoeing" to EXERCISE_TYPE_SNOWSHOEING,
320 "soccer" to EXERCISE_TYPE_SOCCER,
321 "softball" to EXERCISE_TYPE_SOFTBALL,
322 "squash" to EXERCISE_TYPE_SQUASH,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000323 "squat" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100324 "stair_climbing" to EXERCISE_TYPE_STAIR_CLIMBING,
325 "stair_climbing_machine" to EXERCISE_TYPE_STAIR_CLIMBING_MACHINE,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100326 "stretching" to EXERCISE_TYPE_STRETCHING,
327 "surfing" to EXERCISE_TYPE_SURFING,
328 "swimming_open_water" to EXERCISE_TYPE_SWIMMING_OPEN_WATER,
329 "swimming_pool" to EXERCISE_TYPE_SWIMMING_POOL,
330 "table_tennis" to EXERCISE_TYPE_TABLE_TENNIS,
331 "tennis" to EXERCISE_TYPE_TENNIS,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000332 "upper_twist" to EXERCISE_TYPE_CALISTHENICS,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100333 "volleyball" to EXERCISE_TYPE_VOLLEYBALL,
334 "walking" to EXERCISE_TYPE_WALKING,
335 "water_polo" to EXERCISE_TYPE_WATER_POLO,
336 "weightlifting" to EXERCISE_TYPE_WEIGHTLIFTING,
337 "wheelchair" to EXERCISE_TYPE_WHEELCHAIR,
338 "workout" to EXERCISE_TYPE_OTHER_WORKOUT,
339 "yoga" to EXERCISE_TYPE_YOGA,
Sameer Jainabe7abc2023-01-26 13:26:07 +0000340
341 // These should always be at the end so reverse mapping are correct.
342 "calisthenics" to EXERCISE_TYPE_CALISTHENICS,
343 "high_intensity_interval_training" to
344 EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
345 "strength_training" to EXERCISE_TYPE_STRENGTH_TRAINING,
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100346 )
347
348 @RestrictTo(RestrictTo.Scope.LIBRARY)
349 @JvmField
350 val EXERCISE_TYPE_INT_TO_STRING_MAP =
351 EXERCISE_TYPE_STRING_TO_INT_MAP.entries.associateBy({ it.value }, { it.key })
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100352 }
353
354 /**
355 * List of supported activities on Health Platform.
Sameer Jainabe7abc2023-01-26 13:26:07 +0000356 *
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100357 * @suppress
358 */
359 @Retention(AnnotationRetention.SOURCE)
360 @RestrictTo(RestrictTo.Scope.LIBRARY)
Hengrui CAO8f1f43d2022-10-21 17:07:07 +0100361 @IntDef(
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100362 value =
Nickel Cheng142e2372023-04-27 17:48:25 +0100363 [
364 EXERCISE_TYPE_BADMINTON,
365 EXERCISE_TYPE_BASEBALL,
366 EXERCISE_TYPE_BASKETBALL,
367 EXERCISE_TYPE_BIKING,
368 EXERCISE_TYPE_BIKING_STATIONARY,
369 EXERCISE_TYPE_BOOT_CAMP,
370 EXERCISE_TYPE_BOXING,
371 EXERCISE_TYPE_CALISTHENICS,
372 EXERCISE_TYPE_CRICKET,
373 EXERCISE_TYPE_DANCING,
374 EXERCISE_TYPE_ELLIPTICAL,
375 EXERCISE_TYPE_EXERCISE_CLASS,
376 EXERCISE_TYPE_FENCING,
377 EXERCISE_TYPE_FOOTBALL_AMERICAN,
378 EXERCISE_TYPE_FOOTBALL_AUSTRALIAN,
379 EXERCISE_TYPE_FRISBEE_DISC,
380 EXERCISE_TYPE_GOLF,
381 EXERCISE_TYPE_GUIDED_BREATHING,
382 EXERCISE_TYPE_GYMNASTICS,
383 EXERCISE_TYPE_HANDBALL,
384 EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
385 EXERCISE_TYPE_HIKING,
386 EXERCISE_TYPE_ICE_HOCKEY,
387 EXERCISE_TYPE_ICE_SKATING,
388 EXERCISE_TYPE_MARTIAL_ARTS,
389 EXERCISE_TYPE_PADDLING,
390 EXERCISE_TYPE_PARAGLIDING,
391 EXERCISE_TYPE_PILATES,
392 EXERCISE_TYPE_RACQUETBALL,
393 EXERCISE_TYPE_ROCK_CLIMBING,
394 EXERCISE_TYPE_ROLLER_HOCKEY,
395 EXERCISE_TYPE_ROWING,
396 EXERCISE_TYPE_ROWING_MACHINE,
397 EXERCISE_TYPE_RUGBY,
398 EXERCISE_TYPE_RUNNING,
399 EXERCISE_TYPE_RUNNING_TREADMILL,
400 EXERCISE_TYPE_SAILING,
401 EXERCISE_TYPE_SCUBA_DIVING,
402 EXERCISE_TYPE_SKATING,
403 EXERCISE_TYPE_SKIING,
404 EXERCISE_TYPE_SNOWBOARDING,
405 EXERCISE_TYPE_SNOWSHOEING,
406 EXERCISE_TYPE_SOCCER,
407 EXERCISE_TYPE_SOFTBALL,
408 EXERCISE_TYPE_SQUASH,
409 EXERCISE_TYPE_STAIR_CLIMBING,
410 EXERCISE_TYPE_STAIR_CLIMBING_MACHINE,
411 EXERCISE_TYPE_STRENGTH_TRAINING,
412 EXERCISE_TYPE_STRETCHING,
413 EXERCISE_TYPE_SURFING,
414 EXERCISE_TYPE_SWIMMING_OPEN_WATER,
415 EXERCISE_TYPE_SWIMMING_POOL,
416 EXERCISE_TYPE_TABLE_TENNIS,
417 EXERCISE_TYPE_TENNIS,
418 EXERCISE_TYPE_VOLLEYBALL,
419 EXERCISE_TYPE_WALKING,
420 EXERCISE_TYPE_WATER_POLO,
421 EXERCISE_TYPE_WEIGHTLIFTING,
422 EXERCISE_TYPE_WHEELCHAIR,
423 EXERCISE_TYPE_OTHER_WORKOUT,
424 EXERCISE_TYPE_YOGA,
425 ]
Hengrui CAO7a1126e2022-05-30 12:48:52 +0100426 )
427 annotation class ExerciseTypes
428}