diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband2/MiBand2Const.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband2/MiBand2Const.java index 1e3585719..a153dda97 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband2/MiBand2Const.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband2/MiBand2Const.java @@ -42,7 +42,7 @@ public class MiBand2Const { case TYPE_CHARGING: return ActivityKind.TYPE_NOT_WORN; //I believe it's a safe assumption case TYPE_RIDE_BIKE: - return ActivityKind.TYPE_BIKING; + return ActivityKind.TYPE_CYCLING; default: case TYPE_UNSET: // fall through return ActivityKind.TYPE_UNKNOWN; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java index b8108bebf..fc610aa29 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityKind.java @@ -35,10 +35,11 @@ public class ActivityKind { public static final int TYPE_RUNNING = 16; public static final int TYPE_WALKING = 32; public static final int TYPE_SWIMMING = 64; + public static final int TYPE_CYCLING = 128; + public static final int TYPE_TREADMILL = 256; public static final int TYPE_SLEEP = TYPE_LIGHT_SLEEP | TYPE_DEEP_SLEEP; public static final int TYPE_ALL = TYPE_ACTIVITY | TYPE_SLEEP | TYPE_NOT_WORN; - public static final int TYPE_BIKING = 128; public static int[] mapToDBActivityTypes(int types, SampleProvider provider) { int[] result = new int[3]; @@ -64,8 +65,8 @@ public class ActivityKind { if ((types & ActivityKind.TYPE_SWIMMING) != 0) { result[i++] = provider.toRawActivityKind(TYPE_SWIMMING); } - if ((types & ActivityKind.TYPE_BIKING) != 0) { - result[i++] = provider.toRawActivityKind(TYPE_BIKING); + if ((types & ActivityKind.TYPE_CYCLING) != 0) { + result[i++] = provider.toRawActivityKind(TYPE_CYCLING); } return Arrays.copyOf(result, i); } @@ -88,7 +89,7 @@ public class ActivityKind { return context.getString(R.string.activity_type_walking); case TYPE_SWIMMING: return context.getString(R.string.activity_type_swimming); - case TYPE_BIKING: + case TYPE_CYCLING: return context.getString(R.string.activity_type_biking); case TYPE_UNKNOWN: default: @@ -109,7 +110,7 @@ public class ActivityKind { return R.drawable.ic_activity_running; case TYPE_WALKING: return R.drawable.ic_activity_walking; - case TYPE_BIKING: + case TYPE_CYCLING: return R.drawable.ic_activity_biking; case TYPE_SWIMMING: // fall through case TYPE_NOT_WORN: // fall through diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/BipActivityType.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/BipActivityType.java new file mode 100644 index 000000000..4122ac832 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/BipActivityType.java @@ -0,0 +1,38 @@ +package nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip; + +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; + +public enum BipActivityType { + Outdoor, + Treadmill, + Cycling, + Walking; + + public int toActivityKind() { + switch (this) { + case Outdoor: + return ActivityKind.TYPE_RUNNING; + case Treadmill: + return ActivityKind.TYPE_TREADMILL; + case Cycling: + return ActivityKind.TYPE_CYCLING; + case Walking: + return ActivityKind.TYPE_WALKING; + } + throw new RuntimeException("Not mapped activity kind for: " + this); + } + + public static BipActivityType fromActivityKind(int kind) { + switch (kind) { + case ActivityKind.TYPE_RUNNING: + return Outdoor; + case ActivityKind.TYPE_TREADMILL: + return Treadmill; + case ActivityKind.TYPE_CYCLING: + return Cycling; + case ActivityKind.TYPE_WALKING: + return Walking; + } + throw new RuntimeException("No matching activity kind: " + kind); + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsSummaryOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsSummaryOperation.java index ebb0d2534..a814d35d1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsSummaryOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchSportsSummaryOperation.java @@ -47,6 +47,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.WaitAction; +import nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip.BipActivityType; import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.MiBand2Support; import nodomain.freeyourgadget.gadgetbridge.util.GB; @@ -175,10 +176,13 @@ public class FetchSportsSummaryOperation extends AbstractFetchOperation { ByteBuffer buffer = ByteBuffer.wrap(stream.toByteArray()).order(ByteOrder.LITTLE_ENDIAN); // summary.setVersion(BLETypeConversions.toUnsigned(buffer.getShort())); buffer.getShort(); // version - int rawKind = BLETypeConversions.toUnsigned(buffer.getShort()); - int activityKind = MiBand2Const.toActivityKind(rawKind); - if (activityKind == ActivityKind.TYPE_UNKNOWN) { - activityKind = rawKind; // hack for later activity kind detection + int activityKind = ActivityKind.TYPE_UNKNOWN; + try { + int rawKind = BLETypeConversions.toUnsigned(buffer.getShort()); + BipActivityType activityType = BipActivityType.values()[rawKind]; + activityKind = activityType.toActivityKind(); + } catch (Exception ex) { + LOG.error("Error mapping acivity kind: " + ex.getMessage(), ex); } summary.setActivityKind(activityKind); // FIXME: should save timezone etc.