diff --git a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java index 64a3a8d2..a934cd9c 100644 --- a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java +++ b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java @@ -162,7 +162,7 @@ public class GBDaoGenerator { private static Entity addPebbleMorpheuzActivitySample(Schema schema, Entity user, Entity device) { Entity activitySample = addEntity(schema, "PebbleMorpheuzSample"); - addCommonActivitySampleProperties("AbstractActivitySample", activitySample, user, device); + addCommonActivitySampleProperties("AbstractPebbleMorpheuzActivitySample", activitySample, user, device); activitySample.addIntProperty("rawIntensity").notNull(); addCommonActivitySampleProperties2(activitySample, user, device); return activitySample; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java index 3721e74c..b1425832 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java @@ -1,5 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.devices; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -44,12 +45,20 @@ public abstract class AbstractSampleProvider i @Override public List getActivitySamples(int timestamp_from, int timestamp_to) { - return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_ACTIVITY); + if (getRawKindSampleProperty() != null) { + return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_ACTIVITY); + } else { + return getActivitySamplesByActivityFilter(timestamp_from, timestamp_to, ActivityKind.TYPE_ACTIVITY); + } } @Override public List getSleepSamples(int timestamp_from, int timestamp_to) { - return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_SLEEP); + if (getRawKindSampleProperty() != null) { + return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_SLEEP); + } else { + return getActivitySamplesByActivityFilter(timestamp_from, timestamp_to, ActivityKind.TYPE_SLEEP); + } } @Override @@ -147,6 +156,18 @@ public abstract class AbstractSampleProvider i trailingConditions); } + private List getActivitySamplesByActivityFilter(int timestamp_from, int timestamp_to, int activityFilter) { + List samples = getAllActivitySamples(timestamp_from, timestamp_to); + List filteredSamples = new ArrayList<>(); + + for (T sample : samples) { + if ((sample.getKind() & activityFilter) != 0) { + filteredSamples.add(sample); + } + } + return filteredSamples; + } + public abstract AbstractDao getSampleDao(); protected abstract Property getRawKindSampleProperty(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleMisfitSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleMisfitSampleProvider.java index f543a457..7615e0a5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleMisfitSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleMisfitSampleProvider.java @@ -1,30 +1,20 @@ package nodomain.freeyourgadget.gadgetbridge.devices.pebble; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - import de.greenrobot.dao.AbstractDao; import de.greenrobot.dao.Property; -import de.greenrobot.dao.query.QueryBuilder; -import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; +import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; -import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMisfitSample; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMisfitSampleDao; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; -public class PebbleMisfitSampleProvider implements SampleProvider { - private final DaoSession mSession; - private final GBDevice mDevice; +public class PebbleMisfitSampleProvider extends AbstractSampleProvider { protected final float movementDivisor = 300f; public PebbleMisfitSampleProvider(GBDevice device, DaoSession session) { - mSession = session; - mDevice = device; + super(device, session); } @Override @@ -53,73 +43,13 @@ public class PebbleMisfitSampleProvider implements SampleProvider getAllActivitySamples(int timestamp_from, int timestamp_to) { - return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_ALL); - } - - @Override - public List getActivitySamples(int timestamp_from, int timestamp_to) { - return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_ACTIVITY); - } - - @Override - public List getSleepSamples(int timestamp_from, int timestamp_to) { - return getGBActivitySamples(timestamp_from, timestamp_to, ActivityKind.TYPE_SLEEP); - } - - @Override - public int fetchLatestTimestamp() { - QueryBuilder qb = getSampleDao().queryBuilder(); - qb.orderDesc(getTimestampSampleProperty()); - qb.limit(1); - List list = qb.build().list(); - if (list.size() >= 1) { - return list.get(0).getTimestamp(); - } - return -1; - } - - @Override - public void addGBActivitySample(PebbleMisfitSample activitySample) { - getSampleDao().insertOrReplace(activitySample); - } - - @Override - public void addGBActivitySamples(PebbleMisfitSample[] activitySamples) { - getSampleDao().insertOrReplaceInTx(activitySamples); - } - - public void changeStoredSamplesType(int timestampFrom, int timestampTo, int kind) { - } - - public void changeStoredSamplesType(int timestampFrom, int timestampTo, int fromKind, int toKind) { - } - - protected List getGBActivitySamples(int timestamp_from, int timestamp_to, int activityType) { - QueryBuilder qb = getSampleDao().queryBuilder(); - Property timestampProperty = getTimestampSampleProperty(); - Device dbDevice = DBHelper.findDevice(mDevice, mSession); - if (dbDevice == null) { - // no device, no samples - return Collections.emptyList(); - } - Property deviceProperty = getDeviceIdentifierSampleProperty(); - qb.where(deviceProperty.eq(dbDevice.getId()), timestampProperty.ge(timestamp_from)) - .where(timestampProperty.le(timestamp_to)); - List samples = qb.build().list(); - List filteredSamples = new ArrayList<>(); - for (PebbleMisfitSample sample : samples) { - if ((sample.getRawKind() & activityType) != 0) { - sample.setProvider(this); - filteredSamples.add(sample); - } - } - - return filteredSamples; - } - public AbstractDao getSampleDao() { - return mSession.getPebbleMisfitSampleDao(); + return getSession().getPebbleMisfitSampleDao(); + } + + @Override + protected Property getRawKindSampleProperty() { + return null; } protected Property getTimestampSampleProperty() { @@ -129,5 +59,4 @@ public class PebbleMisfitSampleProvider implements SampleProvider { - // raw types - public static final int TYPE_DEEP_SLEEP = 5; - public static final int TYPE_LIGHT_SLEEP = 4; - public static final int TYPE_ACTIVITY = 1; - public static final int TYPE_UNKNOWN = 0; protected float movementDivisor = 5000f; @@ -51,73 +42,24 @@ public class PebbleMorpheuzSampleProvider extends AbstractSampleProvider getActivitySamples(int timestamp_from, int timestamp_to) { - List samples = getAllActivitySamples(timestamp_from, timestamp_to); - List filteredSamples = new ArrayList<>(); - for (PebbleMorpheuzSample sample : samples) { - if (sample.getRawIntensity() > 1000) { - sample.setRawKind(ActivityKind.TYPE_ACTIVITY); - filteredSamples.add(sample); - } - } - - return filteredSamples; - } - - @Override - public List getSleepSamples(int timestamp_from, int timestamp_to) { - List samples = getAllActivitySamples(timestamp_from, timestamp_to); - List filteredSamples = new ArrayList<>(); - for (PebbleMorpheuzSample sample : samples) { - if (sample.getRawIntensity() < 1000) { - if (sample.getRawIntensity() <= 120) { - sample.setRawKind(ActivityKind.TYPE_DEEP_SLEEP); - } else { - sample.setRawKind(ActivityKind.TYPE_LIGHT_SLEEP); - } - filteredSamples.add(sample); - } - } - - return filteredSamples; - } - @Override public int getID() { return SampleProvider.PROVIDER_PEBBLE_MORPHEUZ; } + + @Override + public int normalizeType(int rawType) { + return rawType; + } + + @Override + public int toRawActivityKind(int activityKind) { + return activityKind; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java index 4ecde61a..53e47c1a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java @@ -41,7 +41,7 @@ public abstract class AbstractPebbleMisfitActivitySample extends AbstractActivit } @Override - public int getRawKind() { + public int getKind() { calculate(); return activityKind; } @@ -51,20 +51,4 @@ public abstract class AbstractPebbleMisfitActivitySample extends AbstractActivit calculate(); return intensity; } - - @Override - public void setRawKind(int kind) { - - } - - @Override - public void setRawIntensity(int intensity) { - - } - - @Override - public void setSteps(int steps) { - - } - } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMorpheuzActivitySample.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMorpheuzActivitySample.java new file mode 100644 index 00000000..4a47d7b1 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMorpheuzActivitySample.java @@ -0,0 +1,17 @@ +package nodomain.freeyourgadget.gadgetbridge.entities; + +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; + +public abstract class AbstractPebbleMorpheuzActivitySample extends AbstractActivitySample { + + @Override + public int getKind() { + int rawIntensity = getRawIntensity(); + if (rawIntensity <= 120) { + return ActivityKind.TYPE_DEEP_SLEEP; + } else if (rawIntensity <= 1000) { + return ActivityKind.TYPE_LIGHT_SLEEP; + } + return ActivityKind.TYPE_ACTIVITY; + } +}