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