1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-27 20:36:51 +01:00

create extra table for Morpheuz, remove more unused stuff

Pebble activity tracker now do not share a common base anymore.

TODO: consider creating a custom way of querying activity types like in Misfit. The activity kind stored in the database now is solely based on the intensity, so it is redundant.

(#206)
This commit is contained in:
Andreas Shimokawa 2016-07-31 00:06:26 +02:00
parent eabe625c47
commit 8ba1ae3f3e
6 changed files with 79 additions and 59 deletions

View File

@ -34,7 +34,7 @@ public class GBDaoGenerator {
private static final String VALID_BY_DATE = MODEL_PACKAGE + ".ValidByDate"; private static final String VALID_BY_DATE = MODEL_PACKAGE + ".ValidByDate";
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Schema schema = new Schema(9, MAIN_PACKAGE + ".entities"); Schema schema = new Schema(10, MAIN_PACKAGE + ".entities");
addActivityDescription(schema); addActivityDescription(schema);
@ -47,6 +47,7 @@ public class GBDaoGenerator {
addMiBandActivitySample(schema, user, device); addMiBandActivitySample(schema, user, device);
addPebbleHealthActivitySample(schema, user, device); addPebbleHealthActivitySample(schema, user, device);
addPebbleMisfitActivitySample(schema, user, device); addPebbleMisfitActivitySample(schema, user, device);
addPebbleMorpheuzActivitySample(schema, user, device);
new DaoGenerator().generateAll(schema, "app/src/main/java"); new DaoGenerator().generateAll(schema, "app/src/main/java");
} }
@ -159,6 +160,15 @@ public class GBDaoGenerator {
return activitySample; return activitySample;
} }
private static Entity addPebbleMorpheuzActivitySample(Schema schema, Entity user, Entity device) {
Entity activitySample = addEntity(schema, "PebbleMorpheuzSample");
addCommonActivitySampleProperties("AbstractActivitySample", activitySample, user, device);
activitySample.addIntProperty("rawIntensity").notNull();
activitySample.addIntProperty("rawKind").notNull();
addCommonActivitySampleProperties2(activitySample, user, device);
return activitySample;
}
private static void addCommonActivitySampleProperties(String superClass, Entity activitySample, Entity user, Entity device) { private static void addCommonActivitySampleProperties(String superClass, Entity activitySample, Entity user, Entity device) {
activitySample.setSuperclass(superClass); activitySample.setSuperclass(superClass);
activitySample.addImport(MAIN_PACKAGE + ".devices.SampleProvider"); activitySample.addImport(MAIN_PACKAGE + ".devices.SampleProvider");

View File

@ -1,40 +0,0 @@
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.PebbleHealthActivitySample;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public abstract class AbstractPebbleSampleProvider extends AbstractSampleProvider<PebbleHealthActivitySample> {
protected AbstractPebbleSampleProvider(GBDevice device, DaoSession session) {
super(device, session);
}
@Override
public AbstractDao<PebbleHealthActivitySample, ?> getSampleDao() {
return getSession().getPebbleHealthActivitySampleDao();
}
@Override
protected Property getTimestampSampleProperty() {
return PebbleHealthActivitySampleDao.Properties.Timestamp;
}
@Override
protected Property getRawKindSampleProperty() {
return PebbleHealthActivitySampleDao.Properties.RawKind;
}
@Override
protected Property getDeviceIdentifierSampleProperty() {
return PebbleHealthActivitySampleDao.Properties.DeviceId;
}
@Override
public PebbleHealthActivitySample createActivitySample() {
return new PebbleHealthActivitySample();
}
}

View File

@ -1,11 +1,16 @@
package nodomain.freeyourgadget.gadgetbridge.devices.pebble; 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.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySample;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
public class PebbleHealthSampleProvider extends AbstractPebbleSampleProvider { public class PebbleHealthSampleProvider extends AbstractSampleProvider<PebbleHealthActivitySample> {
public static final int TYPE_DEEP_SLEEP = 5; public static final int TYPE_DEEP_SLEEP = 5;
public static final int TYPE_LIGHT_SLEEP = 4; public static final int TYPE_LIGHT_SLEEP = 4;
public static final int TYPE_ACTIVITY = -1; public static final int TYPE_ACTIVITY = -1;
@ -16,6 +21,31 @@ public class PebbleHealthSampleProvider extends AbstractPebbleSampleProvider {
super(device, session); super(device, session);
} }
@Override
public AbstractDao<PebbleHealthActivitySample, ?> getSampleDao() {
return getSession().getPebbleHealthActivitySampleDao();
}
@Override
protected Property getTimestampSampleProperty() {
return PebbleHealthActivitySampleDao.Properties.Timestamp;
}
@Override
protected Property getRawKindSampleProperty() {
return PebbleHealthActivitySampleDao.Properties.RawKind;
}
@Override
protected Property getDeviceIdentifierSampleProperty() {
return PebbleHealthActivitySampleDao.Properties.DeviceId;
}
@Override
public PebbleHealthActivitySample createActivitySample() {
return new PebbleHealthActivitySample();
}
@Override @Override
public int normalizeType(int rawType) { public int normalizeType(int rawType) {
switch (rawType) { switch (rawType) {

View File

@ -1,15 +1,20 @@
package nodomain.freeyourgadget.gadgetbridge.devices.pebble; 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.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSample;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
public class PebbleMorpheuzSampleProvider extends AbstractPebbleSampleProvider { public class PebbleMorpheuzSampleProvider extends AbstractSampleProvider<PebbleMorpheuzSample> {
// raw types // raw types
public static final int TYPE_DEEP_SLEEP = 5; public static final int TYPE_DEEP_SLEEP = 5;
public static final int TYPE_LIGHT_SLEEP = 4; public static final int TYPE_LIGHT_SLEEP = 4;
public static final int TYPE_ACTIVITY = -1; public static final int TYPE_ACTIVITY = 1;
public static final int TYPE_UNKNOWN = -1; public static final int TYPE_UNKNOWN = -1;
protected float movementDivisor = 5000f; protected float movementDivisor = 5000f;
@ -18,6 +23,31 @@ public class PebbleMorpheuzSampleProvider extends AbstractPebbleSampleProvider {
super(device, session); super(device, session);
} }
@Override
public AbstractDao<PebbleMorpheuzSample, ?> getSampleDao() {
return getSession().getPebbleMorpheuzSampleDao();
}
@Override
protected Property getTimestampSampleProperty() {
return PebbleMorpheuzSampleDao.Properties.Timestamp;
}
@Override
protected Property getRawKindSampleProperty() {
return PebbleMorpheuzSampleDao.Properties.RawKind;
}
@Override
protected Property getDeviceIdentifierSampleProperty() {
return PebbleMorpheuzSampleDao.Properties.DeviceId;
}
@Override
public PebbleMorpheuzSample createActivitySample() {
return new PebbleMorpheuzSample();
}
@Override @Override
public int normalizeType(int rawType) { public int normalizeType(int rawType) {
switch (rawType) { switch (rawType) {
@ -28,7 +58,6 @@ public class PebbleMorpheuzSampleProvider extends AbstractPebbleSampleProvider {
case TYPE_ACTIVITY: case TYPE_ACTIVITY:
return ActivityKind.TYPE_ACTIVITY; return ActivityKind.TYPE_ACTIVITY;
default: default:
// case TYPE_UNKNOWN: // fall through
return ActivityKind.TYPE_UNKNOWN; return ActivityKind.TYPE_UNKNOWN;
} }
} }

View File

@ -7,9 +7,6 @@ import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
import nodomain.freeyourgadget.gadgetbridge.entities.Device;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySample;
import nodomain.freeyourgadget.gadgetbridge.entities.User;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class AppMessageHandler { public class AppMessageHandler {
@ -37,10 +34,6 @@ public class AppMessageHandler {
return null; return null;
} }
protected PebbleHealthActivitySample createSample(int timestamp, int intensity, int steps, int type, User user, Device device) {
return new PebbleHealthActivitySample(null, timestamp, intensity, steps, type, user.getId(), device.getId());
}
protected GBDevice getDevice() { protected GBDevice getDevice() {
return mPebbleProtocol.getDevice(); return mPebbleProtocol.getDevice();
} }

View File

@ -17,9 +17,7 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSleepMonitorResult; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSleepMonitorResult;
import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMorpheuzSampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMorpheuzSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSample;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySample;
import nodomain.freeyourgadget.gadgetbridge.entities.User;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs; import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class AppMessageHandlerMorpheuz extends AppMessageHandler { public class AppMessageHandlerMorpheuz extends AppMessageHandler {
@ -92,7 +90,7 @@ public class AppMessageHandlerMorpheuz extends AppMessageHandler {
int index = ((int) pair.second >> 16); int index = ((int) pair.second >> 16);
int intensity = ((int) pair.second & 0xffff); int intensity = ((int) pair.second & 0xffff);
LOG.info("got point:" + index + " " + intensity); LOG.info("got point:" + index + " " + intensity);
int type = PebbleMorpheuzSampleProvider.TYPE_UNKNOWN; int type = PebbleMorpheuzSampleProvider.TYPE_ACTIVITY;
if (intensity <= 120) { if (intensity <= 120) {
type = PebbleMorpheuzSampleProvider.TYPE_DEEP_SLEEP; type = PebbleMorpheuzSampleProvider.TYPE_DEEP_SLEEP;
} else if (intensity <= 1000) { } else if (intensity <= 1000) {
@ -100,10 +98,10 @@ public class AppMessageHandlerMorpheuz extends AppMessageHandler {
} }
if (index >= 0) { if (index >= 0) {
try (DBHandler db = GBApplication.acquireDB()) { try (DBHandler db = GBApplication.acquireDB()) {
User user = DBHelper.getUser(db.getDaoSession()); Long userId = DBHelper.getUser(db.getDaoSession()).getId();
Device device = DBHelper.getDevice(getDevice(), db.getDaoSession()); Long deviceId = DBHelper.getDevice(getDevice(), db.getDaoSession()).getId();
PebbleMorpheuzSampleProvider sampleProvider = new PebbleMorpheuzSampleProvider(getDevice(), db.getDaoSession()); PebbleMorpheuzSampleProvider sampleProvider = new PebbleMorpheuzSampleProvider(getDevice(), db.getDaoSession());
PebbleHealthActivitySample sample = createSample(recording_base_timestamp + index * 600, intensity, 0, type, user, device); PebbleMorpheuzSample sample = new PebbleMorpheuzSample(null, recording_base_timestamp + index * 600, intensity, type, userId, deviceId);
sample.setProvider(sampleProvider); sample.setProvider(sampleProvider);
sampleProvider.addGBActivitySample(sample); sampleProvider.addGBActivitySample(sample);
} catch (Exception e) { } catch (Exception e) {