From 298254366956aa5e87976371b0dab288573793ab Mon Sep 17 00:00:00 2001 From: OliE Date: Sun, 25 Feb 2018 15:58:59 +0100 Subject: [PATCH] fixed average calculation in graph fragment. --- .../gui/fragments/GraphFragment.java | 108 ++++++++---------- .../app/src/main/res/values-ca/strings.xml | 1 - .../app/src/main/res/values-cs/strings.xml | 1 - .../app/src/main/res/values-de/strings.xml | 1 - .../app/src/main/res/values-es/strings.xml | 1 - .../app/src/main/res/values-nl/strings.xml | 1 - .../app/src/main/res/values-pl/strings.xml | 1 - .../app/src/main/res/values-pt/strings.xml | 1 - .../app/src/main/res/values-sk/strings.xml | 3 +- .../app/src/main/res/values-sv/strings.xml | 1 - .../app/src/main/res/values-tr/strings.xml | 1 - .../app/src/main/res/values/strings.xml | 1 - .../src/main/res/xml/graph_preferences.xml | 1 - 13 files changed, 51 insertions(+), 71 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java index e2fcb493..e024d719 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java @@ -45,6 +45,7 @@ import com.health.openscale.core.utils.PolynomialFitter; import com.health.openscale.gui.activities.DataEntryActivity; import com.health.openscale.gui.views.FloatMeasurementView; import com.health.openscale.gui.views.MeasurementView; +import com.health.openscale.gui.views.WeightMeasurementView; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -261,34 +262,6 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { floatingActionBar.addView(actionButton); } - /** - * Add a point to a point value stack. - * - * Average y value of point if x value is already on the stack and option "averageData" is enabled. - * - * @param pointValues stack of point values - * @param value_x x value of the point - * @param value_y y value of the point - * @return true if a new point was added otherwise false if point was average added to an existing point - */ - private boolean addPointValue(Stack pointValues, float value_x, float value_y) { - if (prefs.getBoolean("averageData", true) && !pointValues.isEmpty() && pointValues.peek().getX() == value_x) { - PointValue prevValue = pointValues.pop(); - PointValue newValue = new PointValue(value_x, (prevValue.getY() + value_y) / 2.0f); - newValue.setLabel(String.format("Ø %.2f", newValue.getY())); - - pointValues.push(newValue); - return true; - } else { - if (value_y != 0.0f) { // don't show zero values - pointValues.push(new PointValue(value_x, value_y)); - return true; - } - } - - return false; - } - private void generateLineData(int field, List scaleMeasurementList) { SimpleDateFormat day_date = new SimpleDateFormat("D", Locale.getDefault()); @@ -317,14 +290,14 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { Calendar calDays = (Calendar)calLastSelected.clone(); calDays.set(field, calDays.getActualMinimum(field)); - int maxDays = calDays.getActualMaximum(field); + int maxDays = calDays.getMaximum(field); - List axisValues = new ArrayList(); + List axisValues = new ArrayList<>(); - for (int i=0; i valuesStack = new Stack(); + Stack valuesStack = new Stack<>(); + ArrayList[] avgBins = new ArrayList[maxDays+1]; + ScaleMeasurement[] indexScaleMeasurement = new ScaleMeasurement[maxDays+1]; for (ScaleMeasurement measurement : scaleMeasurementList) { measurementView.loadFrom(measurement, null); calDB.setTime(measurement.getDateTime()); - if (addPointValue(valuesStack, calDB.get(field), measurementView.getValue())) { - pointIndexScaleMeasurementList.add(measurement); // if new point was added, add this point to pointIndexScaleDataList to get the correct point index after selecting an point + if (avgBins[calDB.get(field)] == null) { + avgBins[calDB.get(field)] = new ArrayList<>(); } + + if (measurementView.getValue() != 0.0f){ + avgBins[calDB.get(field)].add(measurementView.getValue()); + indexScaleMeasurement[calDB.get(field)] = measurement; + } + } + + for (int i=0; i 1) { + avgValue.setLabel(String.format("Ø %.2f", avgValue.getY())); + } + valuesStack.push(avgValue); + pointIndexScaleMeasurementList.add(indexScaleMeasurement[i]); } Line diagramLine = new Line(valuesStack). @@ -387,7 +395,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { chartBottom.setLineChartData(lineData); - defaultTopViewport = new Viewport(calDays.getActualMinimum(field), chartBottom.getCurrentViewport().top, maxDays+1, chartBottom.getCurrentViewport().bottom); + defaultTopViewport = new Viewport(calDays.getMinimum(field), chartBottom.getCurrentViewport().top, maxDays+1, chartBottom.getCurrentViewport().bottom); if (prefs.getBoolean("goalLine", true)) { Stack valuesGoalLine = new Stack(); @@ -406,36 +414,21 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } if (prefs.getBoolean("regressionLine", false)) { - PolynomialFitter polyFitter = new PolynomialFitter(Integer.parseInt(prefs.getString("regressionLineOrder", "1"))); - - Stack valuesWeight = new Stack(); - - for (ScaleMeasurement measurement : scaleMeasurementList) { - calDB.setTime(measurement.getDateTime()); - - addPointValue(valuesWeight, calDB.get(field), measurement.getConvertedWeight(openScale.getSelectedScaleUser().getScaleUnit())); - } - - for (PointValue value : valuesWeight) { - polyFitter.addPoint(value.getX(), value.getY()); - } - PolynomialFitter.Polynomial polynom = polyFitter.getBestFit(); - Stack valuesLinearRegression = new Stack(); + Stack valuesLinearRegression = new Stack<>(); - if (!valuesWeight.isEmpty()) { - for (int i = 0; i < maxDays+1; i++) { + for (int i = 0; i < maxDays; i++) { double y_value = polynom.getY(i); valuesLinearRegression.push(new PointValue((float) i, (float) y_value)); - } } + Line linearRegressionLine = new Line(valuesLinearRegression) .setColor(ChartUtils.COLOR_VIOLET) .setHasPoints(false) .setCubic(true); - linearRegressionLine.setPathEffect(new DashPathEffect(new float[] {10,30}, 0)); + linearRegressionLine.setPathEffect(new DashPathEffect(new float[]{10, 30}, 0)); diagramLineList.add(linearRegressionLine); } @@ -518,7 +511,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { // show only yearly diagram and hide monthly diagram } else { chartTop.setVisibility(View.GONE); - chartBottom.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + chartBottom.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.9f)); scaleMeasurementList = openScale.getScaleDataOfYear(selectedYear); @@ -535,8 +528,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { calLastSelected = cal; - List scaleMeasurementList = - openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH)); + List scaleMeasurementList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH)); generateLineData(Calendar.DAY_OF_MONTH, scaleMeasurementList); } diff --git a/android_app/app/src/main/res/values-ca/strings.xml b/android_app/app/src/main/res/values-ca/strings.xml index 7f430f84..89ad2202 100644 --- a/android_app/app/src/main/res/values-ca/strings.xml +++ b/android_app/app/src/main/res/values-ca/strings.xml @@ -170,7 +170,6 @@ no trobat Ignorar dades fora rang Pes inicial - Calcular mitjana per dia/mes Polinomi de regressió del pes Grau del polinomi de regressió Línia de l\'objectiu diff --git a/android_app/app/src/main/res/values-cs/strings.xml b/android_app/app/src/main/res/values-cs/strings.xml index 10f612cf..34521ce6 100644 --- a/android_app/app/src/main/res/values-cs/strings.xml +++ b/android_app/app/src/main/res/values-cs/strings.xml @@ -141,7 +141,6 @@ nenalezeno Ignorovat data která jsou mimo rozsah Počáteční hmotnost - Spočítat průměr za den/měsíc Nápověda Líbí se vám openScale? diff --git a/android_app/app/src/main/res/values-de/strings.xml b/android_app/app/src/main/res/values-de/strings.xml index 3b11933e..6baac6c4 100644 --- a/android_app/app/src/main/res/values-de/strings.xml +++ b/android_app/app/src/main/res/values-de/strings.xml @@ -127,7 +127,6 @@ Gebe dein Gewicht in deiner Einheit an Gebe dein Gewicht in deiner Einheit an Fehler Anfangsgewicht ist erforderlich - Berechne Durchschnitt pro Tag/Monat Gerät wird nicht unterstützt Ziellinie Gewichtsregressionsgerade diff --git a/android_app/app/src/main/res/values-es/strings.xml b/android_app/app/src/main/res/values-es/strings.xml index a9726fdc..96771b8c 100644 --- a/android_app/app/src/main/res/values-es/strings.xml +++ b/android_app/app/src/main/res/values-es/strings.xml @@ -170,7 +170,6 @@ no encontrado Ignorar los datos fuera de rango Peso inicial - Calcular media por día/mes Línea de peso de regresión Línea de grado de polinomio de regresión Línea del objetivo diff --git a/android_app/app/src/main/res/values-nl/strings.xml b/android_app/app/src/main/res/values-nl/strings.xml index 2cb976b7..22d66c65 100644 --- a/android_app/app/src/main/res/values-nl/strings.xml +++ b/android_app/app/src/main/res/values-nl/strings.xml @@ -172,7 +172,6 @@ niet gevonden Negeer gegevens die buiten bereik zijn Begingewicht - Bereken het gemiddelde per dag/maand Regressie gewichtslijn Regressie polynoomlijn Doel lijn diff --git a/android_app/app/src/main/res/values-pl/strings.xml b/android_app/app/src/main/res/values-pl/strings.xml index 0400b093..260cb392 100644 --- a/android_app/app/src/main/res/values-pl/strings.xml +++ b/android_app/app/src/main/res/values-pl/strings.xml @@ -150,7 +150,6 @@ nie znaleziono Ignoruj dane spoza zakresu Waga początkowa - Oblicz średnią na dzień/miesiąc Regression weight line Regression polynom degree Linia celu diff --git a/android_app/app/src/main/res/values-pt/strings.xml b/android_app/app/src/main/res/values-pt/strings.xml index 5d5382d3..784757cb 100644 --- a/android_app/app/src/main/res/values-pt/strings.xml +++ b/android_app/app/src/main/res/values-pt/strings.xml @@ -58,7 +58,6 @@ Seu peso foi Adicionar Adicionar usuário - Calcular média Backup Data de nascimento Procurar por balança ao iniciar diff --git a/android_app/app/src/main/res/values-sk/strings.xml b/android_app/app/src/main/res/values-sk/strings.xml index decb853b..4a115076 100644 --- a/android_app/app/src/main/res/values-sk/strings.xml +++ b/android_app/app/src/main/res/values-sk/strings.xml @@ -131,8 +131,7 @@ nenájdený Ignorovať údaje, ktoré sú mimo rozsah Počiatočná hmotnosť - Vypočítať priemer za deň/mesiac - Vývoj úbytku hmotnosti + Vývoj úbytku hmotnosti Stupeň polynomiálnej regresie Cieľová línia Dosiahli ste maximálny počet viacerých používateľov diff --git a/android_app/app/src/main/res/values-sv/strings.xml b/android_app/app/src/main/res/values-sv/strings.xml index 6a5f924b..b096a9ea 100644 --- a/android_app/app/src/main/res/values-sv/strings.xml +++ b/android_app/app/src/main/res/values-sv/strings.xml @@ -147,7 +147,6 @@ hittades inte Ignorera data som är utanför intervallet Startvikt - Beräkna medelvärde per dag/månad Vikt regressionslinje Regressions-polynom-gradtal Mållinje diff --git a/android_app/app/src/main/res/values-tr/strings.xml b/android_app/app/src/main/res/values-tr/strings.xml index 4d4853aa..73c8c5a5 100644 --- a/android_app/app/src/main/res/values-tr/strings.xml +++ b/android_app/app/src/main/res/values-tr/strings.xml @@ -168,7 +168,6 @@ Bulunamadý Mesafenin dýþýndaki verileri yoksay Baþlangýç ??aðýrlýðý - Ortalama hesap Günlük/Aylýk Regresyon aðýrlýk çizgisi Regresyon polinom derecesi Hedef çizgisi diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 5ba19ab9..e8013e71 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -185,7 +185,6 @@ not found Ignore data that are out of range Initial weight - Calculate average per day/month Regression weight line Regression polynom degree Goal line diff --git a/android_app/app/src/main/res/xml/graph_preferences.xml b/android_app/app/src/main/res/xml/graph_preferences.xml index df9ee09d..4e2356b4 100644 --- a/android_app/app/src/main/res/xml/graph_preferences.xml +++ b/android_app/app/src/main/res/xml/graph_preferences.xml @@ -1,6 +1,5 @@ -