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 26f14a41..c2ce1d58 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java @@ -3,17 +3,17 @@ package nodomain.freeyourgadget.gadgetbridge.devices; import java.util.List; import de.greenrobot.dao.AbstractDao; +import de.greenrobot.dao.Property; import de.greenrobot.dao.query.QueryBuilder; import de.greenrobot.dao.query.WhereCondition; import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; -import nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySampleDao; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; /** * Base class for all sample providers. A Sample provider is device specific and provides * access to the device specific samples. There are both read and write operations. - * @param + * @param the sample type */ public abstract class AbstractSampleProvider implements SampleProvider { private static final WhereCondition[] NO_CONDITIONS = new WhereCondition[0]; @@ -45,7 +45,7 @@ public abstract class AbstractSampleProvider i @Override public int fetchLatestTimestamp() { QueryBuilder qb = getSampleDao().queryBuilder(); - qb.orderDesc(MiBandActivitySampleDao.Properties.Timestamp); + qb.orderDesc(getTimestampSampleProperty()); qb.limit(1); List list = qb.build().list(); if (list.size() >= 1) { @@ -64,44 +64,6 @@ public abstract class AbstractSampleProvider i getSampleDao().insertOrReplaceInTx(activitySamples); } -// @Override -// public void close() { -// // TESTING: NOOP -// } -// -// @Override -// public SQLiteOpenHelper getHelper() { -// // TESTING: NOOP -// return null; -// } -// -// @Override -// public void release() { -// // TESTING: NOOP -// } -// -// @Override -// public List getAllActivitySamples(int tsFrom, int tsTo, SampleProvider provider) { -// return (List) getGBActivitySamples(tsFrom, tsTo, ActivityKind.TYPE_ALL); -// } -// -// @Override -// public List getActivitySamples(int tsFrom, int tsTo, SampleProvider provider) { -// return (List) getGBActivitySamples(tsFrom, tsTo, ActivityKind.TYPE_ACTIVITY); -// } -// -// @Override -// public List getSleepSamples(int tsFrom, int tsTo, SampleProvider provider) { -// return (List) getGBActivitySamples(tsFrom, tsTo, ActivityKind.TYPE_SLEEP); -// } -// -// @Override -// public SQLiteDatabase getWritableDatabase() { -// // TESTING: NOOP -// return null; -// } -// - public void changeStoredSamplesType(int timestampFrom, int timestampTo, int kind) { List samples = getAllActivitySamples(timestampFrom, timestampTo); for (T sample : samples) { @@ -120,8 +82,9 @@ public abstract class AbstractSampleProvider i protected List getGBActivitySamples(int timestamp_from, int timestamp_to, int activityType) { QueryBuilder qb = getSampleDao().queryBuilder(); - qb.where(MiBandActivitySampleDao.Properties.Timestamp.ge(timestamp_from)) - .where(MiBandActivitySampleDao.Properties.Timestamp.le(timestamp_to), getClauseForActivityType(qb, activityType)); + Property timestampProperty = getTimestampSampleProperty(); + qb.where(timestampProperty.ge(timestamp_from)) + .where(timestampProperty.le(timestamp_to), getClauseForActivityType(qb, activityType)); List samples = qb.build().list(); for (T sample : samples) { sample.setProvider(this); @@ -145,23 +108,27 @@ public abstract class AbstractSampleProvider i if (dbActivityTypes.length == 0) { return null; } + Property rawKindProperty = getRawKindSampleProperty(); if (dbActivityTypes.length == 1) { - return MiBandActivitySampleDao.Properties.RawKind.eq(dbActivityTypes[0]); + return rawKindProperty.eq(dbActivityTypes[0]); } if (dbActivityTypes.length == 2) { - return qb.or(MiBandActivitySampleDao.Properties.RawKind.eq(dbActivityTypes[0]), - MiBandActivitySampleDao.Properties.RawKind.eq(dbActivityTypes[1])); + return qb.or(rawKindProperty.eq(dbActivityTypes[0]), + rawKindProperty.eq(dbActivityTypes[1])); } final int offset = 2; int len = dbActivityTypes.length - offset; WhereCondition[] trailingConditions = new WhereCondition[len]; for (int i = 0; i < len; i++) { - trailingConditions[i] = MiBandActivitySampleDao.Properties.RawKind.eq(dbActivityTypes[i + offset]); + trailingConditions[i] = rawKindProperty.eq(dbActivityTypes[i + offset]); } - return qb.or(MiBandActivitySampleDao.Properties.RawKind.eq(dbActivityTypes[0]), - MiBandActivitySampleDao.Properties.RawKind.eq(dbActivityTypes[1]), + return qb.or(rawKindProperty.eq(dbActivityTypes[0]), + rawKindProperty.eq(dbActivityTypes[1]), trailingConditions); } protected abstract AbstractDao getSampleDao(); + + protected abstract Property getRawKindSampleProperty(); + protected abstract Property getTimestampSampleProperty(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandSampleProvider.java index c77e9bdb..fc8fcc92 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandSampleProvider.java @@ -1,10 +1,12 @@ package nodomain.freeyourgadget.gadgetbridge.devices.miband; import de.greenrobot.dao.AbstractDao; +import de.greenrobot.dao.Property; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample; +import nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySampleDao; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; public class MiBandSampleProvider extends AbstractSampleProvider { @@ -80,4 +82,14 @@ public class MiBandSampleProvider extends AbstractSampleProvider getSampleDao() { return getSession().getMiBandActivitySampleDao(); } + + @Override + protected Property getTimestampSampleProperty() { + return MiBandActivitySampleDao.Properties.Timestamp; + } + + @Override + protected Property getRawKindSampleProperty() { + return MiBandActivitySampleDao.Properties.RawKind; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/AbstractPebbleSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/AbstractPebbleSampleProvider.java new file mode 100644 index 00000000..b6cb5369 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/AbstractPebbleSampleProvider.java @@ -0,0 +1,29 @@ +package nodomain.freeyourgadget.gadgetbridge.devices.pebble; + +import de.greenrobot.dao.AbstractDao; +import de.greenrobot.dao.Property; +import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; +import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; +import nodomain.freeyourgadget.gadgetbridge.entities.PebbleActivitySample; +import nodomain.freeyourgadget.gadgetbridge.entities.PebbleActivitySampleDao; + +public abstract class AbstractPebbleSampleProvider extends AbstractSampleProvider { + protected AbstractPebbleSampleProvider(DaoSession session) { + super(session); + } + + @Override + protected AbstractDao getSampleDao() { + return getSession().getPebbleActivitySampleDao(); + } + + @Override + protected Property getTimestampSampleProperty() { + return PebbleActivitySampleDao.Properties.Timestamp; + } + + @Override + protected Property getRawKindSampleProperty() { + return PebbleActivitySampleDao.Properties.RawKind; + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/HealthSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/HealthSampleProvider.java index d46ad72b..aa65dffc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/HealthSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/HealthSampleProvider.java @@ -1,13 +1,10 @@ package nodomain.freeyourgadget.gadgetbridge.devices.pebble; -import de.greenrobot.dao.AbstractDao; -import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; -import nodomain.freeyourgadget.gadgetbridge.entities.PebbleActivitySample; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; -public class HealthSampleProvider extends AbstractSampleProvider { +public class HealthSampleProvider extends AbstractPebbleSampleProvider { public static final int TYPE_DEEP_SLEEP = 5; public static final int TYPE_LIGHT_SLEEP = 4; public static final int TYPE_ACTIVITY = -1; @@ -57,9 +54,4 @@ public class HealthSampleProvider extends AbstractSampleProvider getSampleDao() { - return getSession().getPebbleActivitySampleDao(); - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MisfitSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MisfitSampleProvider.java index 4f0fdbcb..082f42a2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MisfitSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MisfitSampleProvider.java @@ -1,12 +1,9 @@ package nodomain.freeyourgadget.gadgetbridge.devices.pebble; -import de.greenrobot.dao.AbstractDao; -import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; -import nodomain.freeyourgadget.gadgetbridge.entities.PebbleActivitySample; -public class MisfitSampleProvider extends AbstractSampleProvider { +public class MisfitSampleProvider extends AbstractPebbleSampleProvider { protected final float movementDivisor = 300f; @@ -16,7 +13,7 @@ public class MisfitSampleProvider extends AbstractSampleProvider getSampleDao() { - return getSession().getPebbleActivitySampleDao(); - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MorpheuzSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MorpheuzSampleProvider.java index ce3c12ba..8350751d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MorpheuzSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/MorpheuzSampleProvider.java @@ -1,13 +1,10 @@ package nodomain.freeyourgadget.gadgetbridge.devices.pebble; -import de.greenrobot.dao.AbstractDao; -import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; -import nodomain.freeyourgadget.gadgetbridge.entities.PebbleActivitySample; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; -public class MorpheuzSampleProvider extends AbstractSampleProvider { +public class MorpheuzSampleProvider extends AbstractPebbleSampleProvider { // raw types public static final int TYPE_DEEP_SLEEP = 5; public static final int TYPE_LIGHT_SLEEP = 4; @@ -59,9 +56,4 @@ public class MorpheuzSampleProvider extends AbstractSampleProvider getSampleDao() { - return getSession().getPebbleActivitySampleDao(); - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample.java index 1c68821d..dfaaadeb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample.java @@ -4,6 +4,9 @@ import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; +/** + * Can be removed entirely together with ActivityDatabaseHandler + */ public class GBActivitySample implements ActivitySample { private final int timestamp; private final SampleProvider provider; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample2.java deleted file mode 100644 index fd0bd2ce..00000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBActivitySample2.java +++ /dev/null @@ -1,88 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.impl; - -import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; -import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; -import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; - -public class GBActivitySample2 implements ActivitySample { - private final int timestamp; - private final SampleProvider provider; - private final int intensity; - private final int steps; - private final int type; - private final int customValue; - - public GBActivitySample2(SampleProvider provider, int timestamp, int intensity, int steps, int type) { - this(provider, timestamp, intensity, steps, type, 0); - } - - public GBActivitySample2(SampleProvider provider, int timestamp, int intensity, int steps, int type, int customValue) { - this.timestamp = timestamp; - this.provider = provider; - this.intensity = intensity; - this.steps = steps; - this.customValue = customValue; - this.type = type; - validate(); - } - - private void validate() { - if (steps < 0) { - throw new IllegalArgumentException("steps must be >= 0"); - } - if (intensity < 0) { - throw new IllegalArgumentException("intensity must be >= 0"); - } - if (timestamp < 0) { - throw new IllegalArgumentException("timestamp must be >= 0"); - } - if (customValue < 0) { - throw new IllegalArgumentException("customValue must be >= 0"); - } - } - - @Override - public int getTimestamp() { - return timestamp; - } - - @Override - public SampleProvider getProvider() { - return provider; - } - - @Override - public int getRawIntensity() { - return intensity; - } - - @Override - public float getIntensity() { - return getProvider().normalizeIntensity(getRawIntensity()); - } - - @Override - public int getSteps() { - return steps; - } - - @Override - public int getRawKind() { - return type; - } - - @Override - public int getKind() { - return getProvider().normalizeType(getRawKind()); - } - - @Override - public String toString() { - return "GBActivitySample{" + - "timestamp=" + DateTimeUtils.formatDateTime(DateTimeUtils.parseTimeStamp(timestamp)) + - ", intensity=" + getIntensity() + - ", steps=" + getSteps() + - ", type=" + getKind() + - '}'; - } -}