From 9b2f47d10a48ff7c85d9f0ee58e0728c482183f2 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Fri, 3 Mar 2017 14:21:59 +0100 Subject: [PATCH] Improvements to week sleep chart Time to close #557 --- CHANGELOG.md | 3 +- .../charts/AbstractWeekChartFragment.java | 21 +++++++++----- .../charts/WeekSleepChartFragment.java | 29 ++++++++++++++++++- .../charts/WeekStepsChartFragment.java | 18 +++++++++++- .../gadgetbridge/util/DateTimeUtils.java | 4 +++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 66 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0db2f8b6..8d5e09b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ ###Changelog -###Version 0.18.0 +###Version 0.18.0 (next) * Added Portuguese pt_PT and pt_BR translations * Consistently display device specific icons already during discovery +* Add sleep chart diplaying the last week of sleep ####Version 0.17.5 * Automatically start the service on boot (can be turned off) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java index b33d14cd..0cd9a83a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java @@ -19,6 +19,7 @@ import com.github.mikephil.charting.data.BarEntry; import com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieDataSet; import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.formatter.IValueFormatter; import org.slf4j.Logger; @@ -93,7 +94,7 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { BarDataSet set = new BarDataSet(entries, ""); set.setColors(getColors()); - set.setValueFormatter(getFormatter()); + set.setValueFormatter(getBarValueFormatter()); BarData barData = new BarData(set); barData.setValueTextColor(Color.GRAY); //prevent tearing other graph elements with the black text. Another approach would be to hide the values cmpletely with data.setDrawValues(false); @@ -119,7 +120,7 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { entries.add(new PieEntry(value)); } - set.setValueFormatter(getFormatter()); + set.setValueFormatter(getPieValueFormatter()); set.setColors(getColors()); if (totalValue < mTargetValue) { @@ -134,8 +135,6 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { return new DayData(data, formatPieValue((int) totalValue)); } - protected abstract String formatPieValue(int value); - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -163,7 +162,7 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { private void setupTodayPieChart() { mTodayPieChart.setBackgroundColor(BACKGROUND_COLOR); mTodayPieChart.getDescription().setTextColor(DESCRIPTION_COLOR); - mTodayPieChart.getDescription().setText(getContext().getString(R.string.weeksteps_today_steps_description, String.valueOf(mTargetValue))); + mTodayPieChart.getDescription().setText(getPieDescription(mTargetValue)); // mTodayPieChart.setNoDataTextDescription(""); mTodayPieChart.setNoDataText(""); mTodayPieChart.getLegend().setEnabled(false); @@ -193,7 +192,7 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { y.setDrawZeroLine(true); y.setSpaceBottom(0); y.setAxisMinimum(0); - + y.setValueFormatter(getYAxisFormatter()); y.setEnabled(true); YAxis yAxisRight = mWeekChart.getAxisRight(); @@ -291,7 +290,15 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { abstract float[] getTotalsForActivityAmounts(ActivityAmounts activityAmounts); - abstract IValueFormatter getFormatter(); + abstract String formatPieValue(int value); + + abstract IValueFormatter getPieValueFormatter(); + + abstract IValueFormatter getBarValueFormatter(); + + abstract IAxisValueFormatter getYAxisFormatter(); abstract int[] getColors(); + + abstract String getPieDescription(int targetValue); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java index 30e1c4b5..bf237cb9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java @@ -1,6 +1,8 @@ package nodomain.freeyourgadget.gadgetbridge.activities.charts; +import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.formatter.IValueFormatter; import com.github.mikephil.charting.utils.ViewPortHandler; @@ -18,6 +20,11 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { return getString(R.string.weeksleepchart_sleep_a_week); } + @Override + String getPieDescription(int targetValue) { + return getString(R.string.weeksleepchart_today_sleep_description, DateTimeUtils.minutesToHHMM(targetValue)); + } + @Override int getGoal() { return 8 * 60; // FIXME @@ -43,7 +50,7 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { } @Override - IValueFormatter getFormatter() { + IValueFormatter getPieValueFormatter() { return new IValueFormatter() { @Override public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { @@ -52,6 +59,26 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { }; } + @Override + IValueFormatter getBarValueFormatter() { + return new IValueFormatter() { + @Override + public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { + return DateTimeUtils.minutesToHHMM((int) value); + } + }; + } + + @Override + IAxisValueFormatter getYAxisFormatter() { + return new IAxisValueFormatter() { + @Override + public String getFormattedValue(float value, AxisBase axis) { + return DateTimeUtils.minutesToHHMM((int) value); + } + }; + } + @Override int[] getColors() { return new int[]{akDeepSleep.color, akLightSleep.color}; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java index ee843f7b..ea6019f6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java @@ -1,5 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.activities.charts; +import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.formatter.IValueFormatter; import nodomain.freeyourgadget.gadgetbridge.R; @@ -14,6 +15,11 @@ public class WeekStepsChartFragment extends AbstractWeekChartFragment { return getString(R.string.weekstepschart_steps_a_week); } + @Override + String getPieDescription(int targetValue) { + return getString(R.string.weeksteps_today_steps_description, String.valueOf(targetValue)); + } + @Override int getGoal() { GBDevice device = getChartsHost().getDevice(); @@ -39,7 +45,17 @@ public class WeekStepsChartFragment extends AbstractWeekChartFragment { } @Override - IValueFormatter getFormatter() { + IValueFormatter getPieValueFormatter() { + return null; + } + + @Override + IValueFormatter getBarValueFormatter() { + return null; + } + + @Override + IAxisValueFormatter getYAxisFormatter() { return null; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java index 6781bcb0..6dbdf994 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java @@ -78,4 +78,8 @@ public class DateTimeUtils { public static Calendar getCalendarUTC() { return GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC")); } + + public static String minutesToHHMM(int minutes) { + return String.format(Locale.US, "%d:%02d", minutes / 60, minutes % 60); // no I do not want to use durationformatter :P + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7e3d0d24..ec7d4600 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -278,6 +278,7 @@ Number of charges: %s Your Sleep Sleep a week + Sleep today, target: %1$s Steps a week Your Activity and Sleep Updating Firmware…