diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java index f87190ce..be6c7cd1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java @@ -50,13 +50,13 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { public static final int TYPE_UNSET = -1; public static final int TYPE_NO_CHANGE = 0; public static final int TYPE_ACTIVITY = 1; + public static final int TYPE_RUNNING = 2; public static final int TYPE_NONWEAR = 3; public static final int TYPE_CHARGING = 6; public static final int TYPE_LIGHT_SLEEP = 9; + public static final int TYPE_IGNORE = 10; public static final int TYPE_DEEP_SLEEP = 11; public static final int TYPE_WAKE_UP = 12; - // appears to be a measurement problem resulting in type = 10 and intensity = 20, at least with fw 1.0.0.39 - public static final int TYPE_IGNORE = 10; public MiBand2SampleProvider(GBDevice device, DaoSession session) { super(device, session); @@ -81,6 +81,11 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { int lastValidKind = determinePreviousValidActivityType(samples.get(0)); for (MiBandActivitySample sample : samples) { int rawKind = sample.getRawKind(); + if (rawKind != TYPE_UNSET) { + rawKind &= 0xf; + sample.setRawKind(rawKind); + } + switch (rawKind) { case TYPE_IGNORE: case TYPE_NO_CHANGE: @@ -100,11 +105,12 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { qb.where(MiBandActivitySampleDao.Properties.DeviceId.eq(sample.getDeviceId()), MiBandActivitySampleDao.Properties.UserId.eq(sample.getUserId()), MiBandActivitySampleDao.Properties.Timestamp.lt(sample.getTimestamp()), - MiBandActivitySampleDao.Properties.RawKind.notIn(TYPE_IGNORE, TYPE_NO_CHANGE)); + MiBandActivitySampleDao.Properties.RawKind.notIn(TYPE_NO_CHANGE, TYPE_IGNORE, TYPE_UNSET, 16, 80, 96, 112)); // all I ever had that are 0 when doing &=0xf + qb.orderDesc(MiBandActivitySampleDao.Properties.Timestamp); qb.limit(1); List result = qb.build().list(); if (result.size() > 0) { - return result.get(0).getRawKind(); + return result.get(0).getRawKind() & 0xf; } return TYPE_UNSET; } @@ -117,12 +123,13 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { case TYPE_LIGHT_SLEEP: return ActivityKind.TYPE_LIGHT_SLEEP; case TYPE_ACTIVITY: + case TYPE_RUNNING: + case TYPE_WAKE_UP: return ActivityKind.TYPE_ACTIVITY; case TYPE_NONWEAR: return ActivityKind.TYPE_NOT_WORN; case TYPE_CHARGING: return ActivityKind.TYPE_NOT_WORN; //I believe it's a safe assumption - case TYPE_IGNORE: default: case TYPE_UNSET: // fall through return ActivityKind.TYPE_UNKNOWN;