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..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,30 +216,30 @@ 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); // 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); } } + + onMeasurementViewUpdateListener updateListener = new onMeasurementViewUpdateListener(); + for (MeasurementView measurement : dataEntryMeasurements) { + measurement.setOnUpdateListener(updateListener); + } } private void setViewMode(MeasurementView.MeasurementViewMode viewMode) @@ -351,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 a83bf268..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 @@ -77,8 +77,10 @@ public abstract class MeasurementView extends TableLayout { private Date dateTime; private String value; + private float previousValue; private String diffValue; + private MeasurementViewUpdateListener updateListener = null; private MeasurementViewMode measurementMode; public MeasurementView(Context context, String text, Drawable icon) { @@ -197,7 +199,13 @@ 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 void setOnUpdateListener(MeasurementViewUpdateListener listener) { + updateListener = listener; } public abstract void updateValue(ScaleData updateData); @@ -292,12 +300,20 @@ 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); } + if (updateListener != null) { + updateListener.onMeasurementViewUpdate(this); + } } protected void setDiffOnView(float value, float prevValue) { + previousValue = prevValue; float diff = value - prevValue; String symbol; @@ -475,11 +491,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); } } 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); +}