From e9cb5fd3740ede7b535544bd81e89c736afee1e7 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Tue, 21 Feb 2017 16:20:42 +0100 Subject: [PATCH] WIP sleep in a week chart Displays minutes which is confusing Only displays deeps sleep (no idea why) Is green (which is also confusing) --- .../charts/AbstractWeekChartFragment.java | 263 ++++++++++++++++++ .../activities/charts/ActivityAnalysis.java | 6 +- .../activities/charts/ChartsActivity.java | 16 +- .../charts/WeekSleepChartFragment.java | 34 +++ .../charts/WeekStepsChartFragment.java | 259 +---------------- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 322 insertions(+), 258 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java 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 new file mode 100644 index 000000000..478437bd5 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java @@ -0,0 +1,263 @@ +package nodomain.freeyourgadget.gadgetbridge.activities.charts; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +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; +import com.github.mikephil.charting.components.YAxis; +import com.github.mikephil.charting.data.BarData; +import com.github.mikephil.charting.data.BarDataSet; +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 org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Locale; + +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; + + +public abstract class AbstractWeekChartFragment extends AbstractChartFragment { + protected static final Logger LOG = LoggerFactory.getLogger(AbstractWeekChartFragment.class); + + private Locale mLocale; + private int mTargetValue = 0; + + private PieChart mTodayPieChart; + private BarChart mWeekChart; + + @Override + protected ChartsData refreshInBackground(ChartsHost chartsHost, DBHandler db, GBDevice device) { + Calendar day = Calendar.getInstance(); + day.setTime(chartsHost.getEndDate()); + //NB: we could have omitted the day, but this way we can move things to the past easily + DayData dayData = refreshDayPie(db, day, device); + DefaultChartsData weekBeforeData = refreshWeekBeforeData(db, mWeekChart, day, device); + + return new MyChartsData(dayData, weekBeforeData); + } + + @Override + protected void updateChartsnUIThread(ChartsData chartsData) { + MyChartsData mcd = (MyChartsData) chartsData; + +// setupLegend(mWeekChart); + mTodayPieChart.setCenterText(NumberFormat.getNumberInstance(mLocale).format(mcd.getDayData().totalValue)); + 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()); + } + + @Override + protected void renderCharts() { + mWeekChart.invalidate(); + mTodayPieChart.invalidate(); + } + + private DefaultChartsData refreshWeekBeforeData(DBHandler db, BarChart barChart, Calendar day, GBDevice device) { + + ActivityAnalysis analysis = new ActivityAnalysis(); + + day = (Calendar) day.clone(); // do not modify the caller's argument + day.add(Calendar.DATE, -7); + List entries = new ArrayList<>(); + ArrayList labels = new ArrayList(); + + for (int counter = 0; counter < 7; counter++) { + entries.add(new BarEntry(counter, getTotalForSamples(getSamplesOfDay(db, day, device)))); + labels.add(day.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, mLocale)); + day.add(Calendar.DATE, 1); + } + + BarDataSet set = new BarDataSet(entries, ""); + set.setColor(akActivity.color); + + 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); + + LimitLine target = new LimitLine(mTargetValue); + barChart.getAxisLeft().removeAllLimitLines(); + barChart.getAxisLeft().addLimitLine(target); + + return new DefaultChartsData(barData, new PreformattedXIndexLabelFormatter(labels)); + } + + + private DayData refreshDayPie(DBHandler db, Calendar day, GBDevice device) { + + int totalValue = getTotalForSamples(getSamplesOfDay(db, day, device)); + + PieData data = new PieData(); + List entries = new ArrayList<>(); + List colors = new ArrayList<>(); + + entries.add(new PieEntry(totalValue, "")); //we don't want labels on the pie chart + colors.add(akActivity.color); + + if (totalValue < mTargetValue) { + entries.add(new PieEntry((mTargetValue - totalValue))); //we don't want labels on the pie chart + colors.add(Color.GRAY); + } + + PieDataSet set = new PieDataSet(entries, ""); + set.setColors(colors); + 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); + + return new DayData(data, totalValue); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mLocale = getResources().getConfiguration().locale; + + View rootView = inflater.inflate(R.layout.fragment_weeksteps_chart, container, false); + + int goal = getGoal(); + if (goal >= 0) { + mTargetValue = goal; + } + + mTodayPieChart = (PieChart) rootView.findViewById(R.id.todaystepschart); + mWeekChart = (BarChart) rootView.findViewById(R.id.weekstepschart); + + setupWeekChart(); + setupTodayPieChart(); + + // refresh immediately instead of use refreshIfVisible(), for perceived performance + refresh(); + + return rootView; + } + + 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.setNoDataTextDescription(""); + mTodayPieChart.setNoDataText(""); + mTodayPieChart.getLegend().setEnabled(false); +// setupLegend(mTodayPieChart); + } + + private void setupWeekChart() { + mWeekChart.setBackgroundColor(BACKGROUND_COLOR); + mWeekChart.getDescription().setTextColor(DESCRIPTION_COLOR); + mWeekChart.getDescription().setText(""); + mWeekChart.setFitBars(true); + + configureBarLineChartDefaults(mWeekChart); + + XAxis x = mWeekChart.getXAxis(); + x.setDrawLabels(true); + x.setDrawGridLines(false); + x.setEnabled(true); + x.setTextColor(CHART_TEXT_COLOR); + x.setDrawLimitLinesBehindData(true); + x.setPosition(XAxis.XAxisPosition.BOTTOM); + + YAxis y = mWeekChart.getAxisLeft(); + y.setDrawGridLines(false); + y.setDrawTopYLabelEntry(false); + y.setTextColor(CHART_TEXT_COLOR); + y.setDrawZeroLine(true); + y.setSpaceBottom(0); + y.setAxisMinimum(0); + + y.setEnabled(true); + + YAxis yAxisRight = mWeekChart.getAxisRight(); + yAxisRight.setDrawGridLines(false); + yAxisRight.setEnabled(false); + yAxisRight.setDrawLabels(false); + yAxisRight.setDrawTopYLabelEntry(false); + 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, GBDevice device) { + int startTs; + int endTs; + + day = (Calendar) day.clone(); // do not modify the caller's argument + day.set(Calendar.HOUR_OF_DAY, 0); + day.set(Calendar.MINUTE, 0); + day.set(Calendar.SECOND, 0); + startTs = (int) (day.getTimeInMillis() / 1000); + + day.set(Calendar.HOUR_OF_DAY, 23); + day.set(Calendar.MINUTE, 59); + day.set(Calendar.SECOND, 59); + endTs = (int) (day.getTimeInMillis() / 1000); + + return getSamples(db, device, startTs, endTs); + } + + @Override + protected List getSamples(DBHandler db, GBDevice device, int tsFrom, int tsTo) { + return super.getAllSamples(db, device, tsFrom, tsTo); + } + + private static class DayData { + private final PieData data; + private final int totalValue; + + DayData(PieData data, int totalValue) { + this.data = data; + this.totalValue = totalValue; + } + } + + private static class MyChartsData extends ChartsData { + private final DefaultChartsData weekBeforeData; + private final DayData dayData; + + MyChartsData(DayData dayData, DefaultChartsData weekBeforeData) { + this.dayData = dayData; + this.weekBeforeData = weekBeforeData; + } + + DayData getDayData() { + return dayData; + } + + DefaultChartsData getWeekBeforeData() { + return weekBeforeData; + } + } + + abstract int getGoal(); + + abstract int getTotalForSamples(List activitySamples); +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java index 8d0719f23..1d3d3669e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java @@ -7,8 +7,8 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts; import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; -public class ActivityAnalysis { - public ActivityAmounts calculateActivityAmounts(List samples) { +class ActivityAnalysis { + ActivityAmounts calculateActivityAmounts(List samples) { ActivityAmount deepSleep = new ActivityAmount(ActivityKind.TYPE_DEEP_SLEEP); ActivityAmount lightSleep = new ActivityAmount(ActivityKind.TYPE_LIGHT_SLEEP); ActivityAmount notWorn = new ActivityAmount(ActivityKind.TYPE_NOT_WORN); @@ -64,7 +64,7 @@ public class ActivityAnalysis { return result; } - public int calculateTotalSteps(List samples) { + int calculateTotalSteps(List samples) { int totalSteps = 0; for (ActivitySample sample : samples) { int steps = sample.getSteps(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java index 292202cca..2b897d516 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java @@ -56,7 +56,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts private final String mDuration; private TextView durationLabel; - public ShowDurationDialog(String duration, Context context) { + ShowDurationDialog(String duration, Context context) { super(context); mDuration = duration; } @@ -298,7 +298,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts */ public class SectionsPagerAdapter extends AbstractFragmentPagerAdapter { - public SectionsPagerAdapter(FragmentManager fm) { + SectionsPagerAdapter(FragmentManager fm) { super(fm); } @@ -311,8 +311,10 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts case 1: return new SleepChartFragment(); case 2: - return new WeekStepsChartFragment(); + return new WeekSleepChartFragment(); case 3: + return new WeekStepsChartFragment(); + case 4: return new LiveActivityFragment(); } @@ -321,8 +323,8 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts @Override public int getCount() { - // Show 3 total pages. - return 4; + // Show 5 total pages. + return 5; } @Override @@ -333,8 +335,10 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts case 1: return getString(R.string.sleepchart_your_sleep); case 2: - return getString(R.string.weekstepschart_steps_a_week); + return getString(R.string.weeksleepchart_sleep_a_week); case 3: + return getString(R.string.weekstepschart_steps_a_week); + case 4: return getString(R.string.liveactivity_live_activity); } return super.getPageTitle(position); 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 new file mode 100644 index 000000000..4582d2b0f --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java @@ -0,0 +1,34 @@ +package nodomain.freeyourgadget.gadgetbridge.activities.charts; + +import java.util.List; + +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmount; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; +import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; + +public class WeekSleepChartFragment extends AbstractWeekChartFragment { + @Override + public String getTitle() { + return getString(R.string.weeksleepchart_sleep_a_week); + } + + @Override + int getGoal() { + return 8 * 60; // FIXME + } + + @Override + int getTotalForSamples(List activitySamples) { + ActivityAnalysis analysis = new ActivityAnalysis(); + ActivityAmounts amounts = analysis.calculateActivityAmounts(activitySamples); + long totalSeconds = 0; + for (ActivityAmount amount : amounts.getAmounts()) { + if ((amount.getActivityKind() & ActivityKind.TYPE_SLEEP) != 0) { + totalSeconds += amount.getTotalSeconds(); + } + } + return (int) (totalSeconds / 60); + } +} 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 3d08ed5e6..d4dd6ce8d 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,267 +1,30 @@ package nodomain.freeyourgadget.gadgetbridge.activities.charts; -import android.graphics.Color; -import android.os.Bundle; -import android.view.LayoutInflater; -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; -import com.github.mikephil.charting.components.YAxis; -import com.github.mikephil.charting.data.BarData; -import com.github.mikephil.charting.data.BarDataSet; -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 org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Calendar; import java.util.List; -import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandCoordinator; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; - -public class WeekStepsChartFragment extends AbstractChartFragment { - protected static final Logger LOG = LoggerFactory.getLogger(WeekStepsChartFragment.class); - - private Locale mLocale; - private int mTargetSteps = 10000; - - private PieChart mTodayStepsChart; - private BarChart mWeekStepsChart; - - @Override - protected ChartsData refreshInBackground(ChartsHost chartsHost, DBHandler db, GBDevice device) { - Calendar day = Calendar.getInstance(); - day.setTime(chartsHost.getEndDate()); - //NB: we could have omitted the day, but this way we can move things to the past easily - DaySteps daySteps = refreshDaySteps(db, day, device); - DefaultChartsData weekBeforeStepsData = refreshWeekBeforeSteps(db, mWeekStepsChart, day, device); - - return new MyChartsData(daySteps, weekBeforeStepsData); - } - - @Override - protected void updateChartsnUIThread(ChartsData chartsData) { - MyChartsData mcd = (MyChartsData) chartsData; - -// setupLegend(mWeekStepsChart); - mTodayStepsChart.setCenterText(NumberFormat.getNumberInstance(mLocale).format(mcd.getDaySteps().totalSteps)); - mTodayStepsChart.setData(mcd.getDaySteps().data); - - mWeekStepsChart.setData(null); // workaround for https://github.com/PhilJay/MPAndroidChart/issues/2317 - mWeekStepsChart.setData(mcd.getWeekBeforeStepsData().getData()); - mWeekStepsChart.getLegend().setEnabled(false); - mWeekStepsChart.getXAxis().setValueFormatter(mcd.getWeekBeforeStepsData().getXValueFormatter()); - } - - @Override - protected void renderCharts() { - mWeekStepsChart.invalidate(); - mTodayStepsChart.invalidate(); - } - - private DefaultChartsData refreshWeekBeforeSteps(DBHandler db, BarChart barChart, Calendar day, GBDevice device) { - - ActivityAnalysis analysis = new ActivityAnalysis(); - - day = (Calendar) day.clone(); // do not modify the caller's argument - day.add(Calendar.DATE, -7); - List entries = new ArrayList<>(); - ArrayList labels = new ArrayList(); - - for (int counter = 0; counter < 7; counter++) { - entries.add(new BarEntry(counter, analysis.calculateTotalSteps(getSamplesOfDay(db, day, device)))); - labels.add(day.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, mLocale)); - day.add(Calendar.DATE, 1); - } - - BarDataSet set = new BarDataSet(entries, ""); - set.setColor(akActivity.color); - - 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); - - LimitLine target = new LimitLine(mTargetSteps); - barChart.getAxisLeft().removeAllLimitLines(); - barChart.getAxisLeft().addLimitLine(target); - - return new DefaultChartsData(barData, new PreformattedXIndexLabelFormatter(labels)); - } - - - private DaySteps refreshDaySteps(DBHandler db, Calendar day, GBDevice device) { - ActivityAnalysis analysis = new ActivityAnalysis(); - - int totalSteps = analysis.calculateTotalSteps(getSamplesOfDay(db, day, device)); - - PieData data = new PieData(); - List entries = new ArrayList<>(); - List colors = new ArrayList<>(); - - entries.add(new PieEntry(totalSteps, "")); //we don't want labels on the pie chart - colors.add(akActivity.color); - - if (totalSteps < mTargetSteps) { - entries.add(new PieEntry((mTargetSteps - totalSteps))); //we don't want labels on the pie chart - colors.add(Color.GRAY); - } - - PieDataSet set = new PieDataSet(entries, ""); - set.setColors(colors); - 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); - - return new DaySteps(data, totalSteps); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - mLocale = getResources().getConfiguration().locale; - - View rootView = inflater.inflate(R.layout.fragment_weeksteps_chart, container, false); - - GBDevice device = getChartsHost().getDevice(); - if (device != null) { - // TODO: eek, this is device specific! - mTargetSteps = MiBandCoordinator.getFitnessGoal(device.getAddress()); - } - - mTodayStepsChart = (PieChart) rootView.findViewById(R.id.todaystepschart); - mWeekStepsChart = (BarChart) rootView.findViewById(R.id.weekstepschart); - - setupWeekStepsChart(); - setupTodayStepsChart(); - - // refresh immediately instead of use refreshIfVisible(), for perceived performance - refresh(); - - return rootView; - } - +public class WeekStepsChartFragment extends AbstractWeekChartFragment { @Override public String getTitle() { return getString(R.string.weekstepschart_steps_a_week); } - private void setupTodayStepsChart() { - mTodayStepsChart.setBackgroundColor(BACKGROUND_COLOR); - mTodayStepsChart.getDescription().setTextColor(DESCRIPTION_COLOR); - mTodayStepsChart.getDescription().setText(getContext().getString(R.string.weeksteps_today_steps_description, String.valueOf(mTargetSteps))); -// mTodayStepsChart.setNoDataTextDescription(""); - mTodayStepsChart.setNoDataText(""); - mTodayStepsChart.getLegend().setEnabled(false); -// setupLegend(mTodayStepsChart); - } - - private void setupWeekStepsChart() { - mWeekStepsChart.setBackgroundColor(BACKGROUND_COLOR); - mWeekStepsChart.getDescription().setTextColor(DESCRIPTION_COLOR); - mWeekStepsChart.getDescription().setText(""); - mWeekStepsChart.setFitBars(true); - - configureBarLineChartDefaults(mWeekStepsChart); - - XAxis x = mWeekStepsChart.getXAxis(); - x.setDrawLabels(true); - x.setDrawGridLines(false); - x.setEnabled(true); - x.setTextColor(CHART_TEXT_COLOR); - x.setDrawLimitLinesBehindData(true); - x.setPosition(XAxis.XAxisPosition.BOTTOM); - - YAxis y = mWeekStepsChart.getAxisLeft(); - y.setDrawGridLines(false); - y.setDrawTopYLabelEntry(false); - y.setTextColor(CHART_TEXT_COLOR); - y.setDrawZeroLine(true); - y.setSpaceBottom(0); - y.setAxisMinimum(0); - - y.setEnabled(true); - - YAxis yAxisRight = mWeekStepsChart.getAxisRight(); - yAxisRight.setDrawGridLines(false); - yAxisRight.setEnabled(false); - yAxisRight.setDrawLabels(false); - yAxisRight.setDrawTopYLabelEntry(false); - yAxisRight.setTextColor(CHART_TEXT_COLOR); + @Override + int getGoal() { + GBDevice device = getChartsHost().getDevice(); + if (device != null) { + return MiBandCoordinator.getFitnessGoal(device.getAddress()); + } + return -1; } @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, GBDevice device) { - int startTs; - int endTs; - - day = (Calendar) day.clone(); // do not modify the caller's argument - day.set(Calendar.HOUR_OF_DAY, 0); - day.set(Calendar.MINUTE, 0); - day.set(Calendar.SECOND, 0); - startTs = (int) (day.getTimeInMillis() / 1000); - - day.set(Calendar.HOUR_OF_DAY, 23); - day.set(Calendar.MINUTE, 59); - day.set(Calendar.SECOND, 59); - endTs = (int) (day.getTimeInMillis() / 1000); - - return getSamples(db, device, startTs, endTs); - } - - @Override - protected List getSamples(DBHandler db, GBDevice device, int tsFrom, int tsTo) { - return super.getAllSamples(db, device, tsFrom, tsTo); - } - - private static class DaySteps { - private final PieData data; - private final int totalSteps; - - public DaySteps(PieData data, int totalSteps) { - this.data = data; - this.totalSteps = totalSteps; - } - } - - private static class MyChartsData extends ChartsData { - private final DefaultChartsData weekBeforeStepsData; - private final DaySteps daySteps; - - public MyChartsData(DaySteps daySteps, DefaultChartsData weekBeforeStepsData) { - this.daySteps = daySteps; - this.weekBeforeStepsData = weekBeforeStepsData; - } - - public DaySteps getDaySteps() { - return daySteps; - } - - public DefaultChartsData getWeekBeforeStepsData() { - return weekBeforeStepsData; - } + int getTotalForSamples(List activitySamples) { + ActivityAnalysis analysis = new ActivityAnalysis(); + return analysis.calculateTotalSteps(activitySamples); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a36191753..efc254dbf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -277,6 +277,7 @@ Last charge: %s \n Number of charges: %s Your Sleep + Sleep a week Steps a week Your Activity and Sleep Updating Firmware… @@ -409,5 +410,4 @@ 24H AM/PM Alarm Clock -