From 2e267a4c2be33f23f92bdfb0a9966b686cc4933a Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Mon, 9 Nov 2015 23:52:00 +0100 Subject: [PATCH] Temporary workaround for totally wrong sleep stats The reason being that we filter samples by activity kind and then calculate the total sleep time using a delta between two consecutive sample timestamps. But due to filtering of samples, not all samples are consecutive. Instead of we have "holes" and add those to your sleep time. The data in the db is correct though (it always is), it's just the display in the app that is wrong. --- .../activities/charts/SleepChartFragment.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java index 0e10e82a..f2c2f37f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java @@ -31,6 +31,7 @@ import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmount; import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; @@ -57,17 +58,22 @@ public class SleepChartFragment extends AbstractChartFragment { private void refreshSleepAmounts(GBDevice mGBDevice, PieChart pieChart, List samples) { ActivityAnalysis analysis = new ActivityAnalysis(); ActivityAmounts amounts = analysis.calculateActivityAmounts(samples); - String totalSleep = DateTimeUtils.formatDurationHoursMinutes(amounts.getTotalSeconds(), TimeUnit.SECONDS); - pieChart.setCenterText(totalSleep); PieData data = new PieData(); List entries = new ArrayList<>(); List colors = new ArrayList<>(); int index = 0; + long totalSeconds = 0; for (ActivityAmount amount : amounts.getAmounts()) { - entries.add(new Entry(amount.getTotalSeconds(), index++)); - colors.add(getColorFor(amount.getActivityKind())); - data.addXValue(amount.getName(getActivity())); + if ((amount.getActivityKind() & ActivityKind.TYPE_SLEEP) != 0) { + long value = amount.getTotalSeconds(); + totalSeconds += value; + entries.add(new Entry(value, index++)); + colors.add(getColorFor(amount.getActivityKind())); + data.addXValue(amount.getName(getActivity())); + } } + String totalSleep = DateTimeUtils.formatDurationHoursMinutes(totalSeconds, TimeUnit.SECONDS); + pieChart.setCenterText(totalSleep); PieDataSet set = new PieDataSet(entries, ""); set.setValueFormatter(new ValueFormatter() { @Override @@ -172,7 +178,9 @@ public class SleepChartFragment extends AbstractChartFragment { @Override protected List getSamples(DBHandler db, GBDevice device, int tsFrom, int tsTo) { - return super.getSleepSamples(db, device, tsFrom, tsTo); +// temporary fix for totally wrong sleep amounts +// return super.getSleepSamples(db, device, tsFrom, tsTo); + return super.getAllSamples(db, device, tsFrom, tsTo); } protected void renderCharts() {