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 b4381637..ea55e740 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 @@ -25,7 +25,6 @@ import android.view.View; import android.view.ViewGroup; import com.github.mikephil.charting.charts.BarChart; -import com.github.mikephil.charting.charts.Chart; import com.github.mikephil.charting.charts.PieChart; import com.github.mikephil.charting.components.LimitLine; import com.github.mikephil.charting.components.XAxis; @@ -81,13 +80,12 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { protected void updateChartsnUIThread(ChartsData chartsData) { MyChartsData mcd = (MyChartsData) chartsData; -// setupLegend(mWeekChart); + setupLegend(mWeekChart); mTodayPieChart.setCenterText(mcd.getDayData().centerText); mTodayPieChart.setData(mcd.getDayData().data); mWeekChart.setData(null); // workaround for https://github.com/PhilJay/MPAndroidChart/issues/2317 mWeekChart.setData(mcd.getWeekBeforeData().getData()); - mWeekChart.getLegend().setEnabled(false); mWeekChart.getXAxis().setValueFormatter(mcd.getWeekBeforeData().getXValueFormatter()); } @@ -133,23 +131,30 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { ActivityAmounts amounts = getActivityAmountsForDay(db, day, device); float totalValues[] = getTotalsForActivityAmounts(amounts); + String[] pieLabels = getPieLabels(); float totalValue = 0; - for (float value : totalValues) { + for (int i = 0; i < totalValues.length; i++) { + float value = totalValues[i]; totalValue += value; - entries.add(new PieEntry(value)); + entries.add(new PieEntry(value, pieLabels[i])); } set.setValueFormatter(getPieValueFormatter()); set.setColors(getColors()); - if (totalValue < mTargetValue) { - entries.add(new PieEntry((mTargetValue - totalValue))); - set.addColor(Color.GRAY); + //this hides the values (numeric) added to the set. These would be shown aside the strings set with addXValue above + if (totalValues.length < 2) { + if (totalValue < mTargetValue) { + entries.add(new PieEntry((mTargetValue - totalValue))); + set.addColor(Color.GRAY); + } } data.setDataSet(set); - //this hides the values (numeric) added to the set. These would be shown aside the strings set with addXValue above - data.setDrawValues(false); + + if (totalValues.length < 2) { + data.setDrawValues(false); + } return new DayData(data, formatPieValue((int) totalValue)); } @@ -185,7 +190,6 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { // mTodayPieChart.setNoDataTextDescription(""); mTodayPieChart.setNoDataText(""); mTodayPieChart.getLegend().setEnabled(false); -// setupLegend(mTodayPieChart); } private void setupWeekChart() { @@ -222,16 +226,6 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { yAxisRight.setTextColor(CHART_TEXT_COLOR); } - @Override - protected void setupLegend(Chart chart) { -// List legendColors = new ArrayList<>(1); -// List legendLabels = new ArrayList<>(1); -// legendColors.add(akActivity.color); -// legendLabels.add(getContext().getString(R.string.chart_steps)); -// chart.getLegend().setCustom(legendColors, legendLabels); -// chart.getLegend().setTextColor(LEGEND_TEXT_COLOR); - } - private List getSamplesOfDay(DBHandler db, Calendar day, int offsetHours, GBDevice device) { int startTs; int endTs; @@ -312,6 +306,8 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { abstract String formatPieValue(int value); + abstract String[] getPieLabels(); + abstract IValueFormatter getPieValueFormatter(); abstract IValueFormatter getBarValueFormatter(); 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 8e6e5623..29ef5a96 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 @@ -16,12 +16,16 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.activities.charts; +import com.github.mikephil.charting.charts.Chart; import com.github.mikephil.charting.components.AxisBase; +import com.github.mikephil.charting.components.LegendEntry; 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; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.TimeUnit; import nodomain.freeyourgadget.gadgetbridge.GBApplication; @@ -72,6 +76,11 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { return DateTimeUtils.formatDurationHoursMinutes((long) value, TimeUnit.MINUTES); } + @Override + String[] getPieLabels() { + return new String[]{getString(R.string.abstract_chart_fragment_kind_deep_sleep), getString(R.string.abstract_chart_fragment_kind_light_sleep)}; + } + @Override IValueFormatter getPieValueFormatter() { return new IValueFormatter() { @@ -106,4 +115,22 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { int[] getColors() { return new int[]{akDeepSleep.color, akLightSleep.color}; } + + @Override + protected void setupLegend(Chart chart) { + List legendEntries = new ArrayList<>(2); + + LegendEntry lightSleepEntry = new LegendEntry(); + lightSleepEntry.label = akLightSleep.label; + lightSleepEntry.formColor = akLightSleep.color; + legendEntries.add(lightSleepEntry); + + LegendEntry deepSleepEntry = new LegendEntry(); + deepSleepEntry.label = akDeepSleep.label; + deepSleepEntry.formColor = akDeepSleep.color; + legendEntries.add(deepSleepEntry); + + chart.getLegend().setCustom(legendEntries); + chart.getLegend().setTextColor(LEGEND_TEXT_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 143ad9cf..86cc382c 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 @@ -17,6 +17,7 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.activities.charts; +import com.github.mikephil.charting.charts.Chart; import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.formatter.IValueFormatter; @@ -62,6 +63,11 @@ public class WeekStepsChartFragment extends AbstractWeekChartFragment { return String.valueOf(value); } + @Override + String[] getPieLabels() { + return new String[]{""}; + } + @Override IValueFormatter getPieValueFormatter() { return null; @@ -81,4 +87,10 @@ public class WeekStepsChartFragment extends AbstractWeekChartFragment { int[] getColors() { return new int[]{akActivity.color}; } + + @Override + protected void setupLegend(Chart chart) { + // no legend here, it is all about the steps here + chart.getLegend().setEnabled(false); + } }