Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java
2024-08-18 11:06:43 +02:00

353 lines
20 KiB
Java

/* Copyright (C) 2015-2024 Andreas Shimokawa, Carsten Pfeiffer, Daniele
Gobbetti, José Rebelo, Petr Vaněk, Sebastian Krey, Your Name
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.model;
import android.content.Context;
import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes;
import nodomain.freeyourgadget.gadgetbridge.R;
public enum ActivityKind {
NOT_MEASURED(-1, R.string.activity_type_not_measured, R.drawable.ic_activity_not_measured),
UNKNOWN(0x00000000, R.string.activity_type_unknown),
ACTIVITY(0x00000001, R.string.activity_type_activity),
LIGHT_SLEEP(0x00000002, R.string.activity_type_light_sleep, R.drawable.ic_activity_sleep),
DEEP_SLEEP(0x00000004, R.string.activity_type_deep_sleep, R.drawable.ic_activity_sleep),
NOT_WORN(0x00000008, R.string.activity_type_not_worn),
RUNNING(0x00000010, R.string.activity_type_running, R.drawable.ic_activity_running),
WALKING(0x00000020, R.string.activity_type_walking, R.drawable.ic_activity_walking),
SWIMMING(0x00000040, R.string.activity_type_swimming, R.drawable.ic_activity_swimming),
CYCLING(0x00000080, R.string.activity_type_biking, R.drawable.ic_activity_biking),
TREADMILL(0x00000100, R.string.activity_type_treadmill, R.drawable.ic_activity_threadmill),
EXERCISE(0x00000200, R.string.activity_type_exercise, R.drawable.ic_activity_exercise),
SWIMMING_OPENWATER(0x00000400, R.string.activity_type_swimming_openwater, R.drawable.ic_activity_swimming),
INDOOR_CYCLING(0x00000800, R.string.activity_type_indoor_cycling, R.drawable.ic_activity_bike_trainer),
ELLIPTICAL_TRAINER(0x00001000, R.string.activity_type_elliptical_trainer, R.drawable.ic_activity_eliptical),
JUMP_ROPING(0x00002000, R.string.activity_type_jump_roping, R.drawable.ic_activity_rope_jump),
YOGA(0x00004000, R.string.activity_type_yoga, R.drawable.ic_activity_yoga),
SOCCER(0x00008000, R.string.activity_type_soccer, R.drawable.ic_activity_soccer),
ROWING_MACHINE(0x00010000, R.string.activity_type_rowing_machine, R.drawable.ic_activity_rowing),
CRICKET(0x00020000, R.string.activity_type_cricket, R.drawable.ic_activity_cricket),
BASKETBALL(0x00040000, R.string.activity_type_basketball, R.drawable.ic_activity_basketball),
PINGPONG(0x00080000, R.string.activity_type_pingpong, R.drawable.ic_activity_pingpong),
BADMINTON(0x00100000, R.string.activity_type_badminton, R.drawable.ic_activity_badmington),
STRENGTH_TRAINING(0x00200000, R.string.activity_type_strength_training),
HIKING(0x00400000, R.string.activity_type_hiking, R.drawable.ic_activity_hiking),
CLIMBING(0x00800000, R.string.activity_type_climbing, R.drawable.ic_activity_climbing),
REM_SLEEP(0x01000000, R.string.abstract_chart_fragment_kind_rem_sleep, R.drawable.ic_activity_sleep),
SLEEP_ANY(0x00000002 | 0x00000004 | 0x01000000 | 0x02000000, R.string.menuitem_sleep, R.drawable.ic_activity_sleep),
AWAKE_SLEEP(0x02000000, R.string.abstract_chart_fragment_kind_awake_sleep, R.drawable.ic_activity_sleep),
// FIXME: Deprecate these - they're just kept around while we do not support reading from the old db
VIVOMOVE_HR_TRANSITION(0x00000001 | 0x00000010 | 0x00000020 | 0x00000200 | 0x00000040, R.string.transition),
// Non-legacy activity kinds after 0x04000000
NAVIGATE(0x04000000, R.string.activity_type_navigate),
INDOOR_TRACK(0x04000001, R.string.activity_type_indoor_track),
HANDCYCLING(0x04000002, R.string.activity_type_handcycling),
E_BIKE(0x04000003, R.string.activity_type_e_bike),
BIKE_COMMUTE(0x04000004, R.string.activity_type_bike_commute),
HANDCYCLING_INDOOR(0x04000005, R.string.activity_type_handcycling_indoor),
TRANSITION(0x04000006, R.string.activity_type_transition),
FITNESS_EQUIPMENT(0x04000007, R.string.activity_type_fitness_equipment),
STAIR_STEPPER(0x04000008, R.string.activity_type_stair_stepper),
PILATES(0x04000009, R.string.activity_type_pilates),
POOL_SWIM(0x0400000a, R.string.activity_type_pool_swimming),
TENNIS(0x0400000b, R.string.activity_type_tennis),
PLATFORM_TENNIS(0x0400000c, R.string.activity_type_platform_tennis),
TABLE_TENNIS(0x0400000d, R.string.activity_type_table_tennis),
AMERICAN_FOOTBALL(0x0400000e, R.string.activity_type_american_football),
TRAINING(0x0400000f, R.string.activity_type_training),
CARDIO(0x04000010, R.string.activity_type_cardio),
BREATHWORK(0x04000011, R.string.activity_type_breathwork),
INDOOR_WALKING(0x04000012, R.string.activity_type_indoor_walking),
XC_CLASSIC_SKI(0x04000013, R.string.activity_type_xc_classic_ski),
SKIING(0x04000014, R.string.activity_type_skiing),
SNOWBOARDING(0x04000015, R.string.activity_type_snowboarding),
ROWING(0x04000016, R.string.activity_type_rowing),
MOUNTAINEERING(0x04000017, R.string.activity_type_mountaineering),
MULTISPORT(0x04000019, R.string.activity_type_multisport),
PADDLING(0x0400001a, R.string.activity_type_paddling),
FLYING(0x0400001b, R.string.activity_type_flying),
MOTORCYCLING(0x0400001d, R.string.activity_type_motorcycling),
BOATING(0x0400001e, R.string.activity_type_boating),
DRIVING(0x0400001f, R.string.activity_type_driving),
GOLF(0x04000020, R.string.activity_type_golf),
HANG_GLIDING(0x04000021, R.string.activity_type_hang_gliding),
HUNTING(0x04000023, R.string.activity_type_hunting),
FISHING(0x04000024, R.string.activity_type_fishing),
INLINE_SKATING(0x04000025, R.string.activity_type_inline_skating),
ROCK_CLIMBING(0x04000026, R.string.activity_type_rock_climbing),
CLIMB_INDOOR(0x04000027, R.string.activity_type_climb_indoor),
BOULDERING(0x04000028, R.string.activity_type_bouldering),
SAIL_RACE(0x0400002a, R.string.activity_type_sail_race),
SAIL_EXPEDITION(0x0400002b, R.string.activity_type_sail_expedition),
ICE_SKATING(0x0400002c, R.string.activity_type_ice_skating),
SKY_DIVING(0x0400002d, R.string.activity_type_sky_diving),
SNOWSHOE(0x0400002e, R.string.activity_type_snowshoe),
SNOWMOBILING(0x0400002f, R.string.activity_type_snowmobiling),
STAND_UP_PADDLEBOARDING(0x04000030, R.string.activity_type_stand_up_paddleboarding),
SURFING(0x04000031, R.string.activity_type_surfing),
WAKEBOARDING(0x04000032, R.string.activity_type_wakeboarding),
WATER_SKIING(0x04000033, R.string.activity_type_water_skiing),
KAYAKING(0x04000034, R.string.activity_type_kayaking),
RAFTING(0x04000035, R.string.activity_type_rafting),
WINDSURFING(0x04000036, R.string.activity_type_windsurfing),
KITESURFING(0x04000037, R.string.activity_type_kitesurfing),
TACTICAL(0x04000038, R.string.activity_type_tactical),
JUMPMASTER(0x04000039, R.string.activity_type_jumpmaster),
BOXING(0x0400003a, R.string.activity_type_boxing),
FLOOR_CLIMBING(0x0400003b, R.string.activity_type_floor_climbing),
BASEBALL(0x0400003c, R.string.activity_type_baseball),
SOFTBALL(0x0400003d, R.string.activity_type_softball),
SOFTBALL_SLOW_PITCH(0x0400003e, R.string.activity_type_softball_slow_pitch),
SHOOTING(0x0400003f, R.string.activity_type_shooting),
AUTO_RACING(0x04000040, R.string.activity_type_auto_racing),
WINTER_SPORT(0x04000041, R.string.activity_type_winter_sport),
GRINDING(0x04000042, R.string.activity_type_grinding),
HEALTH_SNAPSHOT(0x04000043, R.string.activity_type_health_snapshot),
MARINE(0x04000044, R.string.activity_type_marine),
HIIT(0x04000045, R.string.activity_type_hiit),
VIDEO_GAMING(0x04000046, R.string.activity_type_video_gaming),
RACKET(0x04000047, R.string.activity_type_racket),
PICKLEBALL(0x04000048, R.string.activity_type_pickleball),
PADEL(0x04000049, R.string.activity_type_padel),
SQUASH(0x0400004a, R.string.activity_type_squash),
RACQUETBALL(0x0400004b, R.string.activity_type_racquetball),
PUSH_WALK_SPEED(0x0400004c, R.string.activity_type_push_walk_speed),
INDOOR_PUSH_WALK_SPEED(0x0400004d, R.string.activity_type_indoor_push_walk_speed),
PUSH_RUN_SPEED(0x0400004e, R.string.activity_type_push_run_speed),
INDOOR_PUSH_RUN_SPEED(0x0400004f, R.string.activity_type_indoor_push_run_speed),
MEDITATION(0x04000050, R.string.activity_type_meditation),
PARA_SPORT(0x04000051, R.string.activity_type_para_sport),
DISC_GOLF(0x04000052, R.string.activity_type_disc_golf),
ULTIMATE_DISC(0x04000053, R.string.activity_type_ultimate_disc),
TEAM_SPORT(0x04000054, R.string.activity_type_team_sport),
RUGBY(0x04000055, R.string.activity_type_rugby),
HOCKEY(0x04000056, R.string.activity_type_hockey),
LACROSSE(0x04000057, R.string.activity_type_lacrosse),
VOLLEYBALL(0x04000058, R.string.activity_type_volleyball),
WATER_TUBING(0x04000059, R.string.activity_type_water_tubing),
WAKESURFING(0x0400005a, R.string.activity_type_wakesurfing),
MIXED_MARTIAL_ARTS(0x0400005b, R.string.activity_type_mixed_martial_arts), // aka MMA
DANCE(0x0400005c, R.string.activity_type_dance),
MOUNTAIN_HIKE(0x040000e2, R.string.activity_type_mountain_hike),
CROSS_TRAINER(0x0400005d, R.string.activity_type_cross_trainer),
FREE_TRAINING(0x0400005e, R.string.activity_type_free_training),
DYNAMIC_CYCLE(0x0400005f, R.string.activity_type_dynamic_cycle),
KICKBOXING(0x04000060, R.string.activity_type_kickboxing),
FITNESS_EXERCISES(0x04000061, R.string.activity_type_fitness_exercises),
CROSSFIT(0x04000062, R.string.activity_type_crossfit),
FUNCTIONAL_TRAINING(0x04000063, R.string.activity_type_functional_training),
PHYSICAL_TRAINING(0x04000064, R.string.activity_type_physical_training),
TAEKWONDO(0x04000065, R.string.activity_type_taekwondo),
TAE_BO(0x04000066, R.string.activity_type_tae_bo),
CROSS_COUNTRY_RUNNING(0x04000067, R.string.activity_type_cross_country_running),
KARATE(0x04000068, R.string.activity_type_karate),
FENCING(0x04000069, R.string.activity_type_fencing),
CORE_TRAINING(0x0400006a, R.string.activity_type_core_training),
KENDO(0x0400006b, R.string.activity_type_kendo),
HORIZONTAL_BAR(0x0400006c, R.string.activity_type_horizontal_bar),
PARALLEL_BAR(0x0400006d, R.string.activity_type_parallel_bar),
COOLDOWN(0x0400006e, R.string.activity_type_cooldown),
CROSS_TRAINING(0x0400006f, R.string.activity_type_cross_training),
SIT_UPS(0x04000070, R.string.activity_type_sit_ups),
FITNESS_GAMING(0x04000071, R.string.activity_type_fitness_gaming),
AEROBIC_EXERCISE(0x04000072, R.string.activity_type_aerobic_exercise),
ROLLING(0x04000073, R.string.activity_type_rolling),
FLEXIBILITY(0x04000074, R.string.activity_type_flexibility),
GYMNASTICS(0x04000075, R.string.activity_type_gymnastics),
TRACK_AND_FIELD(0x04000076, R.string.activity_type_track_and_field),
PUSH_UPS(0x04000077, R.string.activity_type_push_ups),
BATTLE_ROPE(0x04000078, R.string.activity_type_battle_rope),
SMITH_MACHINE(0x04000079, R.string.activity_type_smith_machine),
PULL_UPS(0x0400007a, R.string.activity_type_pull_ups),
PLANK(0x0400007b, R.string.activity_type_plank),
JAVELIN(0x0400007c, R.string.activity_type_javelin),
LONG_JUMP(0x0400007d, R.string.activity_type_long_jump),
HIGH_JUMP(0x0400007e, R.string.activity_type_high_jump),
TRAMPOLINE(0x0400007f, R.string.activity_type_trampoline),
DUMBBELL(0x04000080, R.string.activity_type_dumbbell),
BELLY_DANCE(0x04000081, R.string.activity_type_belly_dance),
JAZZ_DANCE(0x04000082, R.string.activity_type_jazz_dance),
LATIN_DANCE(0x04000083, R.string.activity_type_latin_dance),
BALLET(0x04000084, R.string.activity_type_ballet),
STREET_DANCE(0x04000085, R.string.activity_type_street_dance),
ZUMBA(0x04000086, R.string.activity_type_zumba),
ROLLER_SKATING(0x04000087, R.string.activity_type_roller_skating),
MARTIAL_ARTS(0x04000088, R.string.activity_type_martial_arts),
TAI_CHI(0x04000089, R.string.activity_type_tai_chi),
HULA_HOOPING(0x0400008a, R.string.activity_type_hula_hooping),
DISC_SPORTS(0x0400008b, R.string.activity_type_disc_sports),
DARTS(0x0400008c, R.string.activity_type_darts),
ARCHERY(0x0400008d, R.string.activity_type_archery),
HORSE_RIDING(0x0400008e, R.string.activity_type_horse_riding),
KITE_FLYING(0x0400008f, R.string.activity_type_kite_flying),
SWING(0x04000090, R.string.activity_type_swing),
STAIRS(0x04000091, R.string.activity_type_stairs),
MIND_AND_BODY(0x04000092, R.string.activity_type_mind_and_body),
WRESTLING(0x04000093, R.string.activity_type_wrestling),
KABADDI(0x04000094, R.string.activity_type_kabaddi),
KARTING(0x04000095, R.string.activity_type_karting),
BILLIARDS(0x04000096, R.string.activity_type_billiards),
BOWLING(0x04000097, R.string.activity_type_bowling),
SHUTTLECOCK(0x04000098, R.string.activity_type_shuttlecock),
HANDBALL(0x04000099, R.string.activity_type_handball),
DODGEBALL(0x0400009a, R.string.activity_type_dodgeball),
AUSTRALIAN_FOOTBALL(0x0400009b, R.string.activity_type_australian_football),
LACROSS(0x0400009c, R.string.activity_type_lacross),
SHOT(0x0400009d, R.string.activity_type_shot),
BEACH_SOCCER(0x0400009e, R.string.activity_type_beach_soccer),
BEACH_VOLLEYBALL(0x0400009f, R.string.activity_type_beach_volleyball),
GATEBALL(0x040000a0, R.string.activity_type_gateball),
SEPAK_TAKRAW(0x040000a1, R.string.activity_type_sepak_takraw),
SAILING(0x040000a2, R.string.activity_type_sailing),
JET_SKIING(0x040000a3, R.string.activity_type_jet_skiing),
SKATING(0x040000a4, R.string.activity_type_skating),
ICE_HOCKEY(0x040000a5, R.string.activity_type_ice_hockey),
CURLING(0x040000a6, R.string.activity_type_curling),
CROSS_COUNTRY_SKIING(0x040000a8, R.string.activity_type_cross_country_skiing),
SNOW_SPORTS(0x040000a9, R.string.activity_type_snow_sports),
LUGE(0x040000ab, R.string.activity_type_luge),
SKATEBOARDING(0x040000ac, R.string.activity_type_skateboarding),
PARACHUTING(0x040000ae, R.string.activity_type_parachuting),
PARKOUR(0x040000af, R.string.activity_type_parkour),
INDOOR_RUNNING(0x040000b0, R.string.activity_type_indoor_running),
OUTDOOR_RUNNING(0x040000b1, R.string.activity_type_outdoor_running),
OUTDOOR_WALKING(0x040000b2, R.string.activity_type_outdoor_walking),
OUTDOOR_CYCLING(0x040000b3, R.string.activity_type_outdoor_cycling),
AEROBIC_COMBO(0x040000b4, R.string.activity_type_aerobic_combo),
AEROBICS(0x040000b5, R.string.activity_type_aerobics),
AIR_WALKER(0x040000b6, R.string.activity_type_air_walker),
ARTISTIC_SWIMMING(0x040000b7, R.string.activity_type_artistic_swimming),
BALLROOM_DANCE(0x040000b8, R.string.activity_type_ballroom_dance),
BMX(0x040000b9, R.string.activity_type_bmx),
BOARD_GAME(0x040000ba, R.string.activity_type_board_game),
BOCCE(0x040000bb, R.string.activity_type_bocce),
BREAKING(0x040000bc, R.string.activity_type_breaking),
BRIDGE(0x040000bd, R.string.activity_type_bridge),
CARDIO_COMBAT(0x040000be, R.string.activity_type_cardio_combat),
CHECKERS(0x040000bf, R.string.activity_type_checkers),
CHESS(0x040000c0, R.string.activity_type_chess),
DRAGON_BOAT(0x040000c1, R.string.activity_type_dragon_boat),
ESPORTS(0x040000c2, R.string.activity_type_esports),
FINSWIMMING(0x040000c3, R.string.activity_type_finswimming),
FLOWRIDING(0x040000c4, R.string.activity_type_flowriding),
FOLK_DANCE(0x040000c5, R.string.activity_type_folk_dance),
FRISBEE(0x040000c6, R.string.activity_type_frisbee),
FUTSAL(0x040000c7, R.string.activity_type_futsal),
HACKY_SACK(0x040000c8, R.string.activity_type_hacky_sack),
HIP_HOP(0x040000c9, R.string.activity_type_hip_hop),
HULA_HOOP(0x040000ca, R.string.activity_type_hula_hoop),
INDOOR_FITNESS(0x040000cb, R.string.activity_type_indoor_fitness),
INDOOR_ICE_SKATING(0x040000cc, R.string.activity_type_indoor_ice_skating),
JAI_ALAI(0x040000cd, R.string.activity_type_jai_alai),
JUDO(0x040000ce, R.string.activity_type_judo),
JUJITSU(0x040000cf, R.string.activity_type_jujitsu),
MASS_GYMNASTICS(0x040000d0, R.string.activity_type_mass_gymnastics),
MODERN_DANCE(0x040000d1, R.string.activity_type_modern_dance),
MUAY_THAI(0x040000d2, R.string.activity_type_muay_thai),
PARALLEL_BARS(0x040000d3, R.string.activity_type_parallel_bars),
POLE_DANCE(0x040000d4, R.string.activity_type_pole_dance),
RACE_WALKING(0x040000d5, R.string.activity_type_race_walking),
SHUFFLEBOARD(0x040000d6, R.string.activity_type_shuffleboard),
SNORKELING(0x040000d7, R.string.activity_type_snorkeling),
SOMATOSENSORY_GAME(0x040000d8, R.string.activity_type_somatosensory_game),
SPINNING(0x040000d9, R.string.activity_type_spinning),
SQUARE_DANCE(0x040000da, R.string.activity_type_square_dance),
STAIR_CLIMBER(0x040000db, R.string.activity_type_stair_climber),
STEPPER(0x040000dc, R.string.activity_type_stepper),
STRETCHING(0x040000dd, R.string.activity_type_stretching),
TABLE_FOOTBALL(0x040000de, R.string.activity_type_table_football),
TUG_OF_WAR(0x040000df, R.string.activity_type_tug_of_war),
WALL_BALL(0x040000e0, R.string.activity_type_wall_ball),
WATER_POLO(0x040000e1, R.string.activity_type_water_polo),
WEIQI(0x040000e3, R.string.activity_type_weiqi),
FREE_SPARRING(0x040000e4, R.string.activity_type_free_sparring),
BODY_COMBAT(0x040000e5, R.string.activity_type_body_combat),
PLAZA_DANCING(0x040000e6, R.string.activity_type_plaza_dancing),
LASER_TAG(0x040000e7, R.string.activity_type_laser_tag),
OBSTACLE_RACE(0x040000e8, R.string.activity_type_obstacle_race),
BILLIARD_POOL(0x040000e9, R.string.activity_type_billiard_pool),
CANOEING(0x040000ea, R.string.activity_type_canoeing),
WATER_SCOOTER(0x040000eb, R.string.activity_type_water_scooter),
BOBSLEIGH(0x040000ec, R.string.activity_type_bobsleigh),
SLEDDING(0x040000ed, R.string.activity_type_sledding),
BIATHLON(0x040000ee, R.string.activity_type_biathlon),
BUNGEE_JUMPING(0x040000ef, R.string.activity_type_bungee_jumping),
ORIENTEERING(0x040000f0, R.string.activity_type_orienteering),
;
private final int code;
private final int label;
private final int icon;
ActivityKind(final int code) {
this(code, R.string.activity_type_unknown);
}
ActivityKind(final int code, @StringRes final int label) {
this(code, label, R.drawable.ic_activity_unknown_small);
}
ActivityKind(final int code, @StringRes final int label, @DrawableRes final int icon) {
this.code = code;
this.label = label;
this.icon = icon;
}
public int getCode() {
return code;
}
@StringRes
public int getLabel() {
return label;
}
public String getLabel(final Context context) {
return context.getString(label);
}
@DrawableRes
public int getIcon() {
return icon;
}
public static ActivityKind fromCode(final int code) {
for (final ActivityKind kind : ActivityKind.values()) {
if (kind.code == code) {
return kind;
}
}
//throw new IllegalArgumentException("Unknown ActivityKind code " + code);
return UNKNOWN;
}
public static boolean isSleep(final ActivityKind activityKind) {
return activityKind == ActivityKind.SLEEP_ANY
|| activityKind == ActivityKind.LIGHT_SLEEP
|| activityKind == ActivityKind.DEEP_SLEEP
|| activityKind == ActivityKind.REM_SLEEP
|| activityKind == ActivityKind.AWAKE_SLEEP;
}
}