Xiaomi-protobuf: Display unknown activity codes in UI

This commit is contained in:
José Rebelo 2025-01-20 20:57:21 +00:00
parent ff6b8e56b1
commit b220c94c6b
2 changed files with 91 additions and 127 deletions

View File

@ -26,6 +26,7 @@ import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiPreferences;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
@ -46,25 +47,99 @@ public class XiaomiWorkoutType {
return name;
}
@StringRes
public static int mapWorkoutName(final int code) {
public static ActivityKind fromCode(final int code) {
switch (code) {
case 1:
return R.string.activity_type_outdoor_running;
return ActivityKind.OUTDOOR_RUNNING;
case 2:
return R.string.activity_type_walking;
return ActivityKind.WALKING;
case 3:
return R.string.activity_type_hiking;
return ActivityKind.HIKING;
case 4:
return R.string.activity_type_trekking;
return ActivityKind.TREKKING;
case 5:
return R.string.activity_type_trail_run;
return ActivityKind.TRAIL_RUN;
case 6:
return R.string.activity_type_outdoor_cycling;
case 501:
return R.string.activity_type_wrestling;
return ActivityKind.OUTDOOR_CYCLING;
case 7: // indoor cycling 0x0007
return ActivityKind.INDOOR_CYCLING;
case 8: // freestyle 0x0008
return ActivityKind.FREE_TRAINING;
case 12: // yoga 0x000c
return ActivityKind.YOGA;
case 15:
return ActivityKind.OUTDOOR_WALKING;
case 16: // HIIT 0x0010
return ActivityKind.HIIT;
case 201: // skateboard 0x00c9
return ActivityKind.SKATEBOARDING;
case 202: // roller skating 0x00ca
return ActivityKind.ROLLER_SKATING;
case 301: // stair climbing 0x012d
return ActivityKind.STAIRS;
case 303: // core training 0x012f
return ActivityKind.CORE_TRAINING;
case 304: // flexibility 0x0130
return ActivityKind.FLEXIBILITY;
case 305: // pilates 0x0131
return ActivityKind.PILATES;
case 307: // stretching 0x0133
return ActivityKind.STRETCHING;
case 308: // strength 0x0134
return ActivityKind.STRENGTH_TRAINING;
case 310: // aerobics 0x0136
return ActivityKind.AEROBICS;
case 311: // physical training
return ActivityKind.PHYSICAL_TRAINING;
case 313: // dumbbell
return ActivityKind.DUMBBELL;
case 314: // barbell
return ActivityKind.BARBELL;
case 318: // sit-ups
return ActivityKind.SIT_UPS;
case 320: // upper body 0x0140
return ActivityKind.UPPER_BODY;
case 321: // lower body 0x0141
return ActivityKind.LOWER_BODY;
case 399: // indoor-Fitness 0x018f
return ActivityKind.INDOOR_FITNESS;
case 499: // dancing 0x01f3
return ActivityKind.DANCE;
case 501: // Wrestling
return ActivityKind.WRESTLING;
case 600: // Soccer 0x0258
return ActivityKind.SOCCER;
case 601: // basketball 0x0259
return ActivityKind.BASKETBALL;
case 607: // table tennis 0x025f
return ActivityKind.TABLE_TENNIS;
case 608: // badminton 0x0260
return ActivityKind.BADMINTON;
case 609: // tennis 0x0261
return ActivityKind.TENNIS;
case 614: // billiard 0x0266
return ActivityKind.BILLIARDS;
case 619: // golf 0x026b
return ActivityKind.GOLF;
case 700: // ice skating 0x02bc
return ActivityKind.ICE_SKATING;
case 708: // snowboard 0x02c4
return ActivityKind.SNOWBOARDING;
case 709: // skiing 0x02c5
return ActivityKind.SKIING;
case 808: // shuttlecock 0x0328
return ActivityKind.SHUTTLECOCK;
}
return ActivityKind.UNKNOWN;
}
@StringRes
public static int mapWorkoutName(final int code) {
final ActivityKind activityKind = fromCode(code);
if (activityKind != ActivityKind.UNKNOWN) {
return activityKind.getLabel();
}
return -1;
}

View File

@ -19,6 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.activity.imp
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.SWIM_STYLE;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.TIME_END;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.TIME_START;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_NONE;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_SECONDS;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.UNIT_UNIX_EPOCH_SECONDS;
@ -35,6 +36,7 @@ import java.util.Objects;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryProgressEntry;
import nodomain.freeyourgadget.gadgetbridge.devices.xiaomi.XiaomiWorkoutType;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryData;
@ -108,123 +110,10 @@ public class XiaomiSimpleActivityParser {
summaryData.add(dataEntry.getKey(), swimStyleName);
} else if (dataEntry.getKey().equals(XIAOMI_WORKOUT_TYPE)) {
switch (value.intValue()) {
case 1:
summary.setActivityKind(ActivityKind.OUTDOOR_RUNNING.getCode());
break;
case 2:
summary.setActivityKind(ActivityKind.WALKING.getCode());
break;
case 4:
summary.setActivityKind(ActivityKind.TREKKING.getCode());
break;
case 5:
summary.setActivityKind(ActivityKind.TRAIL_RUN.getCode());
break;
case 6:
summary.setActivityKind(ActivityKind.OUTDOOR_CYCLING.getCode());
break;
case 7: // indoor cycling 0x0007
summary.setActivityKind(ActivityKind.INDOOR_CYCLING.getCode());
break;
case 8: // freestyle 0x0008
summary.setActivityKind(ActivityKind.FREE_TRAINING.getCode());
break;
case 12: // yoga 0x000c
summary.setActivityKind(ActivityKind.YOGA.getCode());
break;
case 15:
summary.setActivityKind(ActivityKind.OUTDOOR_WALKING.getCode());
break;
case 16: // HIIT 0x0010
summary.setActivityKind(ActivityKind.HIIT.getCode());
break;
case 201: // skateboard 0x00c9
summary.setActivityKind(ActivityKind.SKATEBOARDING.getCode());
break;
case 202: // roller skating 0x00ca
summary.setActivityKind(ActivityKind.ROLLER_SKATING.getCode());
break;
case 301: // stair climbing 0x012d
summary.setActivityKind(ActivityKind.STAIRS.getCode());
break;
case 303: // core training 0x012f
summary.setActivityKind(ActivityKind.CORE_TRAINING.getCode());
break;
case 304: // flexibility 0x0130
summary.setActivityKind(ActivityKind.FLEXIBILITY.getCode());
break;
case 305: // pilates 0x0131
summary.setActivityKind(ActivityKind.PILATES.getCode());
break;
case 307: // stretching 0x0133
summary.setActivityKind(ActivityKind.STRETCHING.getCode());
break;
case 308: // strength 0x0134
summary.setActivityKind(ActivityKind.STRENGTH_TRAINING.getCode());
break;
case 310: // aerobics 0x0136
summary.setActivityKind(ActivityKind.AEROBICS.getCode());
break;
case 311: // physical training
summary.setActivityKind(ActivityKind.PHYSICAL_TRAINING.getCode());
break;
case 313: // dumbbell
summary.setActivityKind(ActivityKind.DUMBBELL.getCode());
break;
case 314: // barbell
summary.setActivityKind(ActivityKind.BARBELL.getCode());
break;
case 318: // sit-ups
summary.setActivityKind(ActivityKind.SIT_UPS.getCode());
break;
case 320: // upper body 0x0140
summary.setActivityKind(ActivityKind.UPPER_BODY.getCode());
break;
case 321: // lower body 0x0141
summary.setActivityKind(ActivityKind.LOWER_BODY.getCode());
break;
case 399: // indoor-Fitness 0x018f
summary.setActivityKind(ActivityKind.INDOOR_FITNESS.getCode());
break;
case 499: // dancing 0x01f3
summary.setActivityKind(ActivityKind.DANCE.getCode());
break;
case 600: // Soccer 0x0258
summary.setActivityKind(ActivityKind.SOCCER.getCode());
break;
case 601: // basketball 0x0259
summary.setActivityKind(ActivityKind.BASKETBALL.getCode());
break;
case 607: // table tennis 0x025f
summary.setActivityKind(ActivityKind.TABLE_TENNIS.getCode());
break;
case 608: // badminton 0x0260
summary.setActivityKind(ActivityKind.BADMINTON.getCode());
break;
case 609: // tennis 0x0261
summary.setActivityKind(ActivityKind.TENNIS.getCode());
break;
case 614: // billiard 0x0266
summary.setActivityKind(ActivityKind.BILLIARDS.getCode());
break;
case 619: // golf 0x026b
summary.setActivityKind(ActivityKind.GOLF.getCode());
break;
case 700: // ice skating 0x02bc
summary.setActivityKind(ActivityKind.ICE_SKATING.getCode());
break;
case 708: // snowboard 0x02c4
summary.setActivityKind(ActivityKind.SNOWBOARDING.getCode());
break;
case 709: // skiing 0x02c5
summary.setActivityKind(ActivityKind.SKIING.getCode());
break;
case 808: // shuttlecock 0x0328
summary.setActivityKind(ActivityKind.SHUTTLECOCK.getCode());
break;
default:
summary.setActivityKind(ActivityKind.UNKNOWN.getCode());
final ActivityKind activityKind = XiaomiWorkoutType.fromCode(value.intValue());
summary.setActivityKind(activityKind.getCode());
if (activityKind == ActivityKind.UNKNOWN) {
summaryData.add(dataEntry.getKey(), value, UNIT_NONE);
}
} else if (ActivitySummaryEntries.HR_ZONES.containsKey(dataEntry.getKey())) {
// Save the HR zones so we can add them later in order