From 84e644fa1a20010fb741860882b0b74531a57714 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Wed, 31 Aug 2016 14:05:02 +0200 Subject: [PATCH] Add preference for save raw pebble health data. --- TODO.md | 2 ++ .../devices/pebble/DatalogSessionHealthOverlayData.java | 9 ++++++++- .../devices/pebble/DatalogSessionHealthSleep.java | 9 ++++++++- .../devices/pebble/DatalogSessionHealthSteps.java | 9 ++++++++- .../devices/pebble/DatalogSessionPebbleHealth.java | 5 +++++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 6 ++++++ 7 files changed, 39 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 338c96e2..fc78aed4 100644 --- a/TODO.md +++ b/TODO.md @@ -3,11 +3,13 @@ TODO before 0.12.0 release: * ~~Support importing Pebble Health data from old database~~ DONE, needs check. * ~~Add onboarding activity on first startup (to merge old data)~~ DONE, needs check. * export db/delete db improvements +* ~~optional raw health record storing (settings)~~ * ~~onboarding hint about import-db in Debug activity~~ DONE, needs check. * TESTING! * tx pull Non blocking issues: +* don't store raw health data if the record is completely decoded (e.g. sleep/deep sleep overlay as of fw 3.14) * Add back UUID_CHARACTERISTIC_PAIR support, at least optionally * CSV Export diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthOverlayData.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthOverlayData.java index 2e4e1273..98e13261 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthOverlayData.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthOverlayData.java @@ -68,7 +68,7 @@ class DatalogSessionHealthOverlayData extends DatalogSessionPebbleHealth { List overlayList = new ArrayList<>(); for (OverlayRecord overlayRecord : overlayRecords) { - overlayList.add(new PebbleHealthActivityOverlay(overlayRecord.timestampStart, overlayRecord.timestampStart + overlayRecord.durationSeconds, overlayRecord.type, deviceId, userId, overlayRecord.rawData)); + overlayList.add(new PebbleHealthActivityOverlay(overlayRecord.timestampStart, overlayRecord.timestampStart + overlayRecord.durationSeconds, overlayRecord.type, deviceId, userId, overlayRecord.getRawData())); } overlayDao.insertOrReplaceInTx(overlayList); } catch (Exception ex) { @@ -98,5 +98,12 @@ class DatalogSessionHealthOverlayData extends DatalogSessionPebbleHealth { this.timestampStart = record.getInt(); this.durationSeconds = record.getInt(); } + + public byte[] getRawData() { + if (storePebbleHealthRawRecord()) { + return rawData; + } + return null; + } } } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSleep.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSleep.java index 7fca543e..fef497f2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSleep.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSleep.java @@ -69,7 +69,7 @@ class DatalogSessionHealthSleep extends DatalogSessionPebbleHealth { List overlayList = new ArrayList<>(); for (SleepRecord sleepRecord : sleepRecords) { //TODO: check the firmware version and don't use the sleep record if overlay is available? - overlayList.add(new PebbleHealthActivityOverlay(sleepRecord.bedTimeStart, sleepRecord.bedTimeEnd, sleepRecord.type, deviceId, userId, sleepRecord.rawData)); + overlayList.add(new PebbleHealthActivityOverlay(sleepRecord.bedTimeStart, sleepRecord.bedTimeEnd, sleepRecord.type, deviceId, userId, sleepRecord.getRawData())); } overlayDao.insertOrReplaceInTx(overlayList); } catch (Exception ex) { @@ -100,6 +100,13 @@ class DatalogSessionHealthSleep extends DatalogSessionPebbleHealth { this.bedTimeEnd = record.getInt(); this.deepSleepSeconds = record.getInt(); } + + public byte[] getRawData() { + if (storePebbleHealthRawRecord()) { + return rawData; + } + return null; + } } } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java index ef85faba..8ab72d17 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionHealthSteps.java @@ -87,7 +87,7 @@ public class DatalogSessionHealthSteps extends DatalogSessionPebbleHealth { samples[j] = new PebbleHealthActivitySample( stepsRecord.timestamp, userId, deviceId, - stepsRecord.rawData, + stepsRecord.getRawData(), stepsRecord.intensity, stepsRecord.steps ); @@ -124,6 +124,13 @@ public class DatalogSessionHealthSteps extends DatalogSessionPebbleHealth { this.intensity = record.getShort() & 0xffff; this.light_intensity = record.get() & 0xff; } + + public byte[] getRawData() { + if (storePebbleHealthRawRecord()) { + return rawData; + } + return null; + } } } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java index 0e984553..3d26bf68 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java @@ -23,4 +23,9 @@ abstract class DatalogSessionPebbleHealth extends DatalogSession { Prefs prefs = GBApplication.getPrefs(); return prefs.getBoolean("pebble_sync_health", true); } + + protected boolean storePebbleHealthRawRecord() { + Prefs prefs = GBApplication.getPrefs(); + return prefs.getBoolean("pebble_health_store_raw", true); + } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e67a667b..c0dfb0d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -295,4 +295,6 @@ \n Please note that you can import data from Mi Band, Pebble Health and Morpheuz but NOT from Pebble Misfit. + Store raw record in the database + If checked the data is stored \"as is\" and is available for later interpretation. NB: the database will be bigger in this case! diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 980d1c6c..663ca61f 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -174,6 +174,12 @@ android:defaultValue="true" android:key="pebble_sync_health" android:title="@string/pref_title_pebble_sync_health" /> +