From 92ab34ceef656b80450830308fab27d98a3b792c Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Sun, 26 Nov 2017 18:30:29 +0100 Subject: [PATCH 1/5] Don't show evaluator row when there's no value to evaluate The row wasn't shown when clicking the button to show all evaluator rows, but it was shown when clicking on a measurement row. --- .../com/health/openscale/gui/views/MeasurementView.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index a83bf268..a733e749 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -475,11 +475,7 @@ public abstract class MeasurementView extends TableLayout { return; } - if (evaluatorRow.getVisibility() == View.VISIBLE) { - evaluatorRow.setVisibility(View.GONE); - } else { - evaluatorRow.setVisibility(View.VISIBLE); - } + setExpand(evaluatorRow.getVisibility() != View.VISIBLE); } } From 42f8be0c7d2076202545aee9fae8948f7a0d2f23 Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Sun, 26 Nov 2017 18:33:29 +0100 Subject: [PATCH 2/5] Hide evaluator row when clicking on it and not just when clicking on the measurement row. --- .../java/com/health/openscale/gui/views/MeasurementView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index a733e749..654b2749 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -197,7 +197,9 @@ public abstract class MeasurementView extends TableLayout { evaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.99f)); spaceAfterEvaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.01f)); - measurementRow.setOnClickListener(new onClickListenerEvaluation()); + onClickListenerEvaluation onClickListener = new onClickListenerEvaluation(); + measurementRow.setOnClickListener(onClickListener); + evaluatorRow.setOnClickListener(onClickListener); } public abstract void updateValue(ScaleData updateData); From 1db027c598d0f9dd7a5ac93c28cb9374acd7f542 Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Sun, 26 Nov 2017 19:11:57 +0100 Subject: [PATCH 3/5] Update scale data outside of the loop --- .../health/openscale/gui/activities/DataEntryActivity.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java index 7943085b..108760f5 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java @@ -226,16 +226,17 @@ public class DataEntryActivity extends Activity { ScaleData lastScaleData = OpenScale.getInstance(getApplicationContext()).getScaleDataList().get(0); // show as default last scale data + lastScaleData.setDateTime(new Date()); + lastScaleData.setComment(""); for (MeasurementView measurement : dataEntryMeasurements) { - lastScaleData.setDateTime(new Date()); - lastScaleData.setComment(""); measurement.updateValue(lastScaleData); } } else { setViewMode(MeasurementView.MeasurementViewMode.ADD); // show default values + ScaleData newScaleData = new ScaleData(); for (MeasurementView measurement : dataEntryMeasurements) { - measurement.updateValue(new ScaleData()); + measurement.updateValue(newScaleData); } } } From 60471ab41ebce78892f244a0df5602e9904ce9ad Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Sun, 26 Nov 2017 19:12:43 +0100 Subject: [PATCH 4/5] Update diff value when value is updated --- .../com/health/openscale/gui/views/MeasurementView.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index 654b2749..a5a59ab8 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -77,6 +77,7 @@ public abstract class MeasurementView extends TableLayout { private Date dateTime; private String value; + private float previousValue; private String diffValue; private MeasurementViewMode measurementMode; @@ -294,12 +295,17 @@ public abstract class MeasurementView extends TableLayout { } valueView.setText(String.format("%.2f ", floatValue) + getUnit()); value = String.valueOf(Math.round(floatValue*100.0f)/100.0f); + // Only update diff value if setDiffOnView has been called previously + if (!diffValue.isEmpty()) { + setDiffOnView(floatValue, previousValue); + } } catch (NumberFormatException e) { valueView.setText(value); } } protected void setDiffOnView(float value, float prevValue) { + previousValue = prevValue; float diff = value - prevValue; String symbol; From 11980bdb90c238a989142a943d36ce84910d3a8b Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Sun, 26 Nov 2017 19:18:56 +0100 Subject: [PATCH 5/5] Update dependent values when a measurement is changed I.e. when the weight is updated, update BMI as well. --- .../gui/activities/DataEntryActivity.java | 39 +++++++++++++++---- .../openscale/gui/views/MeasurementView.java | 8 ++++ .../views/MeasurementViewUpdateListener.java | 20 ++++++++++ 3 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java index 108760f5..d4a1bb47 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java @@ -44,6 +44,7 @@ import com.health.openscale.gui.views.FatMeasurementView; import com.health.openscale.gui.views.HipMeasurementView; import com.health.openscale.gui.views.LBWMeasurementView; import com.health.openscale.gui.views.MeasurementView; +import com.health.openscale.gui.views.MeasurementViewUpdateListener; import com.health.openscale.gui.views.MuscleMeasurementView; import com.health.openscale.gui.views.TimeMeasurementView; import com.health.openscale.gui.views.WHRMeasurementView; @@ -172,6 +173,7 @@ public class DataEntryActivity extends Activity { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); for (MeasurementView measurement : dataEntryMeasurements) { + measurement.setOnUpdateListener(null); measurement.updatePreferences(prefs); } @@ -214,13 +216,7 @@ public class DataEntryActivity extends Activity { measurement.updateDiff(selectedScaleData, prevScaleData); measurement.setExpand(doExpand); } - - return; - } - - - if (!OpenScale.getInstance(getApplicationContext()).getScaleDataList().isEmpty()) - { + } else if (!OpenScale.getInstance(getApplicationContext()).getScaleDataList().isEmpty()) { setViewMode(MeasurementView.MeasurementViewMode.ADD); txtDataNr.setText(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(new Date())); ScaleData lastScaleData = OpenScale.getInstance(getApplicationContext()).getScaleDataList().get(0); @@ -239,6 +235,11 @@ public class DataEntryActivity extends Activity { measurement.updateValue(newScaleData); } } + + onMeasurementViewUpdateListener updateListener = new onMeasurementViewUpdateListener(); + for (MeasurementView measurement : dataEntryMeasurements) { + measurement.setOnUpdateListener(updateListener); + } } private void setViewMode(MeasurementView.MeasurementViewMode viewMode) @@ -352,6 +353,30 @@ public class DataEntryActivity extends Activity { return false; } + private class onMeasurementViewUpdateListener implements MeasurementViewUpdateListener { + @Override + public void onMeasurementViewUpdate(MeasurementView view) { + ArrayList viewsToUpdate = new ArrayList<>(); + if (view == weightMeasurement) { + viewsToUpdate.add(bmiMeasurementView); + viewsToUpdate.add(bmrMeasurementView); + } else if (view == waistMeasurement) { + viewsToUpdate.add(wHtRMeasurementView); + viewsToUpdate.add(whrMeasurementView); + } else if (view == hipMeasurement) { + viewsToUpdate.add(whrMeasurementView); + } else if (view == dateMeasurement) { + viewsToUpdate.add(bmrMeasurementView); + } + + if (!viewsToUpdate.isEmpty()) { + ScaleData scaleData = createScaleDataFromMeasurement(); + for (MeasurementView measurement : viewsToUpdate) { + measurement.updateValue(scaleData); + } + } + } + } private class onClickListenerAdd implements View.OnClickListener { @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index a5a59ab8..36816200 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -80,6 +80,7 @@ public abstract class MeasurementView extends TableLayout { private float previousValue; private String diffValue; + private MeasurementViewUpdateListener updateListener = null; private MeasurementViewMode measurementMode; public MeasurementView(Context context, String text, Drawable icon) { @@ -203,6 +204,10 @@ public abstract class MeasurementView extends TableLayout { evaluatorRow.setOnClickListener(onClickListener); } + public void setOnUpdateListener(MeasurementViewUpdateListener listener) { + updateListener = listener; + } + public abstract void updateValue(ScaleData updateData); public abstract void updateDiff(ScaleData updateData, ScaleData lastData); public abstract void updatePreferences(SharedPreferences preferences); @@ -302,6 +307,9 @@ public abstract class MeasurementView extends TableLayout { } catch (NumberFormatException e) { valueView.setText(value); } + if (updateListener != null) { + updateListener.onMeasurementViewUpdate(this); + } } protected void setDiffOnView(float value, float prevValue) { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java new file mode 100644 index 00000000..0dec3d1e --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewUpdateListener.java @@ -0,0 +1,20 @@ +/* Copyright (C) 2017 Erik Johansson +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +*/ +package com.health.openscale.gui.views; + +public interface MeasurementViewUpdateListener { + public void onMeasurementViewUpdate(MeasurementView view); +}