• 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 package android.health.connect.datatypes;
18 
19 import static com.android.healthfitness.flags.Flags.FLAG_DEPRECATE_EXERCISE_SESSION_TYPE_BREATHING;
20 
21 import android.annotation.FlaggedApi;
22 import android.annotation.IntDef;
23 
24 import java.lang.annotation.Retention;
25 import java.lang.annotation.RetentionPolicy;
26 import java.util.Set;
27 
28 /**
29  * Identifier for exercise types, as returned by {@link ExerciseSessionRecord#getExerciseType()}.
30  */
31 public final class ExerciseSessionType {
32 
33     /** Use this type if the type of the exercise session is not known. */
34     public static final int EXERCISE_SESSION_TYPE_UNKNOWN = 0;
35 
36     /** Use this type for the badminton playing session. */
37     public static final int EXERCISE_SESSION_TYPE_BADMINTON = 1;
38 
39     /** Use this type for the baseball playing session. */
40     public static final int EXERCISE_SESSION_TYPE_BASEBALL = 2;
41 
42     /** Use this type for the basketball playing session. */
43     public static final int EXERCISE_SESSION_TYPE_BASKETBALL = 3;
44 
45     /** Use this type for riding a bicycle session. */
46     public static final int EXERCISE_SESSION_TYPE_BIKING = 4;
47 
48     /** Use this type for riding a stationary bicycle session. */
49     public static final int EXERCISE_SESSION_TYPE_BIKING_STATIONARY = 5;
50 
51     /** Use this type for the boot camp session. */
52     public static final int EXERCISE_SESSION_TYPE_BOOT_CAMP = 6;
53 
54     /** Use this type for boxing session. */
55     public static final int EXERCISE_SESSION_TYPE_BOXING = 7;
56 
57     /** Use this type for calisthenics session. */
58     public static final int EXERCISE_SESSION_TYPE_CALISTHENICS = 8;
59 
60     /** Use this type for the cricket playing session. */
61     public static final int EXERCISE_SESSION_TYPE_CRICKET = 9;
62 
63     /** Use this type for the dancing session. */
64     public static final int EXERCISE_SESSION_TYPE_DANCING = 10;
65 
66     /** Use this type for the exercise class session. */
67     public static final int EXERCISE_SESSION_TYPE_EXERCISE_CLASS = 11;
68 
69     /** Use this type for the fencing session. */
70     public static final int EXERCISE_SESSION_TYPE_FENCING = 12;
71 
72     /** Use this type for the American football playing session. */
73     public static final int EXERCISE_SESSION_TYPE_FOOTBALL_AMERICAN = 13;
74 
75     /** Use this type for the Australian football playing session. */
76     public static final int EXERCISE_SESSION_TYPE_FOOTBALL_AUSTRALIAN = 14;
77 
78     /** Use this type for the frisbee disc playing session. */
79     public static final int EXERCISE_SESSION_TYPE_FRISBEE_DISC = 15;
80 
81     /** Use this type for the golf playing session. */
82     public static final int EXERCISE_SESSION_TYPE_GOLF = 16;
83 
84     /**
85      * Use this type for the guided breathing session.
86      *
87      * @deprecated Use {@link MindfulnessSessionRecord} of the corresponding type {@link
88      *     MindfulnessSessionRecord#MINDFULNESS_SESSION_TYPE_BREATHING}.
89      */
90     @FlaggedApi(FLAG_DEPRECATE_EXERCISE_SESSION_TYPE_BREATHING)
91     @Deprecated
92     public static final int EXERCISE_SESSION_TYPE_GUIDED_BREATHING = 17;
93 
94     /** Use this type for the gymnastics session. */
95     public static final int EXERCISE_SESSION_TYPE_GYMNASTICS = 18;
96 
97     /** Use this type for the handball playing session. */
98     public static final int EXERCISE_SESSION_TYPE_HANDBALL = 19;
99 
100     /** Use this type for the high intensity interval training session. */
101     public static final int EXERCISE_SESSION_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING = 20;
102 
103     /** Use this type for the hiking session. */
104     public static final int EXERCISE_SESSION_TYPE_HIKING = 21;
105 
106     /** Use this type for the ice hockey playing session. */
107     public static final int EXERCISE_SESSION_TYPE_ICE_HOCKEY = 22;
108 
109     /** Use this type for the ice skating session. */
110     public static final int EXERCISE_SESSION_TYPE_ICE_SKATING = 23;
111 
112     /** Use this type for the martial arts training session. */
113     public static final int EXERCISE_SESSION_TYPE_MARTIAL_ARTS = 24;
114 
115     /** Use this type for the paddling session. */
116     public static final int EXERCISE_SESSION_TYPE_PADDLING = 25;
117 
118     /** Use this type for the paragliding session. */
119     public static final int EXERCISE_SESSION_TYPE_PARAGLIDING = 26;
120 
121     /** Use this type for the pilates session. */
122     public static final int EXERCISE_SESSION_TYPE_PILATES = 27;
123 
124     /** Use this type for the racquetball playing session. */
125     public static final int EXERCISE_SESSION_TYPE_RACQUETBALL = 28;
126 
127     /** Use this type for the rock climbing session. */
128     public static final int EXERCISE_SESSION_TYPE_ROCK_CLIMBING = 29;
129 
130     /** Use this type for the roller hockey playing session. */
131     public static final int EXERCISE_SESSION_TYPE_ROLLER_HOCKEY = 30;
132 
133     /** Use this type for the rowing session. */
134     public static final int EXERCISE_SESSION_TYPE_ROWING = 31;
135 
136     /** Use this type for the rugby playing session. */
137     public static final int EXERCISE_SESSION_TYPE_RUGBY = 32;
138 
139     /** Use this type for the running session. */
140     public static final int EXERCISE_SESSION_TYPE_RUNNING = 33;
141 
142     /** Use this type for the treadmill running session. */
143     public static final int EXERCISE_SESSION_TYPE_RUNNING_TREADMILL = 34;
144 
145     /** Use this type for the sailing session. */
146     public static final int EXERCISE_SESSION_TYPE_SAILING = 35;
147 
148     /** Use this type for the scuba diving session. */
149     public static final int EXERCISE_SESSION_TYPE_SCUBA_DIVING = 36;
150 
151     /** Use this type for the skating session. */
152     public static final int EXERCISE_SESSION_TYPE_SKATING = 37;
153 
154     /** Use this type for the skiing session. */
155     public static final int EXERCISE_SESSION_TYPE_SKIING = 38;
156 
157     /** Use this type for the snowboarding session. */
158     public static final int EXERCISE_SESSION_TYPE_SNOWBOARDING = 39;
159 
160     /** Use this type for the snowshoeing session. */
161     public static final int EXERCISE_SESSION_TYPE_SNOWSHOEING = 40;
162 
163     /** Use this type for the soccer playing session. */
164     public static final int EXERCISE_SESSION_TYPE_SOCCER = 41;
165 
166     /** Use this type for the softball playing session. */
167     public static final int EXERCISE_SESSION_TYPE_SOFTBALL = 42;
168 
169     /** Use this type for the squash playing session. */
170     public static final int EXERCISE_SESSION_TYPE_SQUASH = 43;
171 
172     /** Use this type for the stair climbing session. */
173     public static final int EXERCISE_SESSION_TYPE_STAIR_CLIMBING = 44;
174 
175     /** Use this type for the strength training session. */
176     public static final int EXERCISE_SESSION_TYPE_STRENGTH_TRAINING = 45;
177 
178     /** Use this type for the stretching session. */
179     public static final int EXERCISE_SESSION_TYPE_STRETCHING = 46;
180 
181     /** Use this type for the surfing session. */
182     public static final int EXERCISE_SESSION_TYPE_SURFING = 47;
183 
184     /** Use this type for the swimming in the open water session. */
185     public static final int EXERCISE_SESSION_TYPE_SWIMMING_OPEN_WATER = 48;
186 
187     /** Use this type for the swimming in the pool session. */
188     public static final int EXERCISE_SESSION_TYPE_SWIMMING_POOL = 49;
189 
190     /** Use this type for the table tennis playing session. */
191     public static final int EXERCISE_SESSION_TYPE_TABLE_TENNIS = 50;
192 
193     /** Use this type for the tennis playing session. */
194     public static final int EXERCISE_SESSION_TYPE_TENNIS = 51;
195 
196     /** Use this type for the volleyball playing session. */
197     public static final int EXERCISE_SESSION_TYPE_VOLLEYBALL = 52;
198 
199     /** Use this type for the walking session. */
200     public static final int EXERCISE_SESSION_TYPE_WALKING = 53;
201 
202     /** Use this type for the water polo playing session. */
203     public static final int EXERCISE_SESSION_TYPE_WATER_POLO = 54;
204 
205     /** Use this type for the weightlifting session. */
206     public static final int EXERCISE_SESSION_TYPE_WEIGHTLIFTING = 55;
207 
208     /** Use this type for the wheelchair session. */
209     public static final int EXERCISE_SESSION_TYPE_WHEELCHAIR = 56;
210 
211     /** Use this type for the yoga session. */
212     public static final int EXERCISE_SESSION_TYPE_YOGA = 57;
213 
214     /** Use this type for the other workout session. */
215     public static final int EXERCISE_SESSION_TYPE_OTHER_WORKOUT = 58;
216 
217     /** Use this type for the stair climbing machine session. */
218     public static final int EXERCISE_SESSION_TYPE_STAIR_CLIMBING_MACHINE = 59;
219 
220     /** Use this type for elliptical workout. */
221     public static final int EXERCISE_SESSION_TYPE_ELLIPTICAL = 60;
222 
223     /** Use this type for rowing machine. */
224     public static final int EXERCISE_SESSION_TYPE_ROWING_MACHINE = 61;
225 
ExerciseSessionType()226     private ExerciseSessionType() {}
227 
228     /** @hide */
229     @IntDef({
230         EXERCISE_SESSION_TYPE_UNKNOWN,
231         EXERCISE_SESSION_TYPE_BADMINTON,
232         EXERCISE_SESSION_TYPE_BASEBALL,
233         EXERCISE_SESSION_TYPE_BASKETBALL,
234         EXERCISE_SESSION_TYPE_BIKING,
235         EXERCISE_SESSION_TYPE_BIKING_STATIONARY,
236         EXERCISE_SESSION_TYPE_BOOT_CAMP,
237         EXERCISE_SESSION_TYPE_BOXING,
238         EXERCISE_SESSION_TYPE_CALISTHENICS,
239         EXERCISE_SESSION_TYPE_CRICKET,
240         EXERCISE_SESSION_TYPE_DANCING,
241         EXERCISE_SESSION_TYPE_ELLIPTICAL,
242         EXERCISE_SESSION_TYPE_EXERCISE_CLASS,
243         EXERCISE_SESSION_TYPE_FENCING,
244         EXERCISE_SESSION_TYPE_FOOTBALL_AMERICAN,
245         EXERCISE_SESSION_TYPE_FOOTBALL_AUSTRALIAN,
246         EXERCISE_SESSION_TYPE_FRISBEE_DISC,
247         EXERCISE_SESSION_TYPE_GOLF,
248         EXERCISE_SESSION_TYPE_GUIDED_BREATHING,
249         EXERCISE_SESSION_TYPE_GYMNASTICS,
250         EXERCISE_SESSION_TYPE_HANDBALL,
251         EXERCISE_SESSION_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
252         EXERCISE_SESSION_TYPE_HIKING,
253         EXERCISE_SESSION_TYPE_ICE_HOCKEY,
254         EXERCISE_SESSION_TYPE_ICE_SKATING,
255         EXERCISE_SESSION_TYPE_MARTIAL_ARTS,
256         EXERCISE_SESSION_TYPE_PADDLING,
257         EXERCISE_SESSION_TYPE_PARAGLIDING,
258         EXERCISE_SESSION_TYPE_PILATES,
259         EXERCISE_SESSION_TYPE_RACQUETBALL,
260         EXERCISE_SESSION_TYPE_ROCK_CLIMBING,
261         EXERCISE_SESSION_TYPE_ROLLER_HOCKEY,
262         EXERCISE_SESSION_TYPE_ROWING,
263         EXERCISE_SESSION_TYPE_ROWING_MACHINE,
264         EXERCISE_SESSION_TYPE_RUGBY,
265         EXERCISE_SESSION_TYPE_RUNNING,
266         EXERCISE_SESSION_TYPE_RUNNING_TREADMILL,
267         EXERCISE_SESSION_TYPE_SAILING,
268         EXERCISE_SESSION_TYPE_SCUBA_DIVING,
269         EXERCISE_SESSION_TYPE_SKATING,
270         EXERCISE_SESSION_TYPE_SKIING,
271         EXERCISE_SESSION_TYPE_SNOWBOARDING,
272         EXERCISE_SESSION_TYPE_SNOWSHOEING,
273         EXERCISE_SESSION_TYPE_SOCCER,
274         EXERCISE_SESSION_TYPE_SOFTBALL,
275         EXERCISE_SESSION_TYPE_SQUASH,
276         EXERCISE_SESSION_TYPE_STAIR_CLIMBING,
277         EXERCISE_SESSION_TYPE_STAIR_CLIMBING_MACHINE,
278         EXERCISE_SESSION_TYPE_STRENGTH_TRAINING,
279         EXERCISE_SESSION_TYPE_STRETCHING,
280         EXERCISE_SESSION_TYPE_SURFING,
281         EXERCISE_SESSION_TYPE_SWIMMING_OPEN_WATER,
282         EXERCISE_SESSION_TYPE_SWIMMING_POOL,
283         EXERCISE_SESSION_TYPE_TABLE_TENNIS,
284         EXERCISE_SESSION_TYPE_TENNIS,
285         EXERCISE_SESSION_TYPE_VOLLEYBALL,
286         EXERCISE_SESSION_TYPE_WALKING,
287         EXERCISE_SESSION_TYPE_WATER_POLO,
288         EXERCISE_SESSION_TYPE_WEIGHTLIFTING,
289         EXERCISE_SESSION_TYPE_WHEELCHAIR,
290         EXERCISE_SESSION_TYPE_OTHER_WORKOUT,
291         EXERCISE_SESSION_TYPE_YOGA,
292     })
293     @Retention(RetentionPolicy.SOURCE)
294     public @interface ExerciseSessionTypes {}
295 
296     // Update this set when add new type or deprecate existing type.
297     private static final Set<Integer> VALID_TYPES =
298             Set.of(
299                     EXERCISE_SESSION_TYPE_UNKNOWN,
300                     EXERCISE_SESSION_TYPE_BADMINTON,
301                     EXERCISE_SESSION_TYPE_BASEBALL,
302                     EXERCISE_SESSION_TYPE_BASKETBALL,
303                     EXERCISE_SESSION_TYPE_BIKING,
304                     EXERCISE_SESSION_TYPE_BIKING_STATIONARY,
305                     EXERCISE_SESSION_TYPE_BOOT_CAMP,
306                     EXERCISE_SESSION_TYPE_BOXING,
307                     EXERCISE_SESSION_TYPE_CALISTHENICS,
308                     EXERCISE_SESSION_TYPE_CRICKET,
309                     EXERCISE_SESSION_TYPE_DANCING,
310                     EXERCISE_SESSION_TYPE_ELLIPTICAL,
311                     EXERCISE_SESSION_TYPE_EXERCISE_CLASS,
312                     EXERCISE_SESSION_TYPE_FENCING,
313                     EXERCISE_SESSION_TYPE_FOOTBALL_AMERICAN,
314                     EXERCISE_SESSION_TYPE_FOOTBALL_AUSTRALIAN,
315                     EXERCISE_SESSION_TYPE_FRISBEE_DISC,
316                     EXERCISE_SESSION_TYPE_GOLF,
317                     EXERCISE_SESSION_TYPE_GUIDED_BREATHING,
318                     EXERCISE_SESSION_TYPE_GYMNASTICS,
319                     EXERCISE_SESSION_TYPE_HANDBALL,
320                     EXERCISE_SESSION_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
321                     EXERCISE_SESSION_TYPE_HIKING,
322                     EXERCISE_SESSION_TYPE_ICE_HOCKEY,
323                     EXERCISE_SESSION_TYPE_ICE_SKATING,
324                     EXERCISE_SESSION_TYPE_MARTIAL_ARTS,
325                     EXERCISE_SESSION_TYPE_PADDLING,
326                     EXERCISE_SESSION_TYPE_PARAGLIDING,
327                     EXERCISE_SESSION_TYPE_PILATES,
328                     EXERCISE_SESSION_TYPE_RACQUETBALL,
329                     EXERCISE_SESSION_TYPE_ROCK_CLIMBING,
330                     EXERCISE_SESSION_TYPE_ROLLER_HOCKEY,
331                     EXERCISE_SESSION_TYPE_ROWING,
332                     EXERCISE_SESSION_TYPE_ROWING_MACHINE,
333                     EXERCISE_SESSION_TYPE_RUGBY,
334                     EXERCISE_SESSION_TYPE_RUNNING,
335                     EXERCISE_SESSION_TYPE_RUNNING_TREADMILL,
336                     EXERCISE_SESSION_TYPE_SAILING,
337                     EXERCISE_SESSION_TYPE_SCUBA_DIVING,
338                     EXERCISE_SESSION_TYPE_SKATING,
339                     EXERCISE_SESSION_TYPE_SKIING,
340                     EXERCISE_SESSION_TYPE_SNOWBOARDING,
341                     EXERCISE_SESSION_TYPE_SNOWSHOEING,
342                     EXERCISE_SESSION_TYPE_SOCCER,
343                     EXERCISE_SESSION_TYPE_SOFTBALL,
344                     EXERCISE_SESSION_TYPE_SQUASH,
345                     EXERCISE_SESSION_TYPE_STAIR_CLIMBING,
346                     EXERCISE_SESSION_TYPE_STAIR_CLIMBING_MACHINE,
347                     EXERCISE_SESSION_TYPE_STRENGTH_TRAINING,
348                     EXERCISE_SESSION_TYPE_STRETCHING,
349                     EXERCISE_SESSION_TYPE_SURFING,
350                     EXERCISE_SESSION_TYPE_SWIMMING_OPEN_WATER,
351                     EXERCISE_SESSION_TYPE_SWIMMING_POOL,
352                     EXERCISE_SESSION_TYPE_TABLE_TENNIS,
353                     EXERCISE_SESSION_TYPE_TENNIS,
354                     EXERCISE_SESSION_TYPE_VOLLEYBALL,
355                     EXERCISE_SESSION_TYPE_WALKING,
356                     EXERCISE_SESSION_TYPE_WATER_POLO,
357                     EXERCISE_SESSION_TYPE_WEIGHTLIFTING,
358                     EXERCISE_SESSION_TYPE_WHEELCHAIR,
359                     EXERCISE_SESSION_TYPE_OTHER_WORKOUT,
360                     EXERCISE_SESSION_TYPE_YOGA);
361 
362     /**
363      * Returns whether given session type is known by current module version, throws exception if
364      * the type is negative.
365      *
366      * @hide
367      */
isKnownSessionType(int sessionType)368     public static boolean isKnownSessionType(int sessionType) {
369         if (sessionType < 0) {
370             throw new IllegalArgumentException("Exercise session type must be non negative.");
371         }
372 
373         return VALID_TYPES.contains(sessionType);
374     }
375 }
376