diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0db2f8b66..8d5e09b98 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 b33d14cdb..0cd9a83af 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 30e1c4b55..bf237cb94 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 ee843f7bb..ea6019f6f 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 6781bcb07..6dbdf994c 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 7e3d0d247..ec7d46008 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…