From 147550262b6563909401bb4c87de703bb1e477f0 Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Fri, 2 Feb 2018 19:26:54 +0100 Subject: [PATCH] Add method to control if measurment views should update internal views The table view doesn't actually display the measurement views, it only uses them for formatting the value that is later displayed. So to speed up that view, avoid doing calculations that aren't used. --- .../gui/fragments/TableFragment.java | 4 + .../gui/views/DateMeasurementView.java | 4 +- .../gui/views/FloatMeasurementView.java | 114 ++++++++++-------- .../openscale/gui/views/MeasurementView.java | 21 +++- .../gui/views/TimeMeasurementView.java | 4 +- 5 files changed, 95 insertions(+), 52 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index e1877a9d..baf52bc1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -124,6 +124,10 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { measurementsList.add(new BMRMeasurementView(tableView.getContext())); measurementsList.add(new CommentMeasurementView(tableView.getContext())); + for (MeasurementView measurement : measurementsList) { + measurement.setUpdateViews(false); + } + prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); if (savedInstanceState == null) { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java index 311153b8..b5e3dbb1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java @@ -43,7 +43,9 @@ public class DateMeasurementView extends MeasurementView { private void setValue(Date newDate, boolean callListener) { if (!newDate.equals(date)) { date = newDate; - setValueView(dateFormat.format(date), callListener); + if (getUpdateViews()) { + setValueView(dateFormat.format(date), callListener); + } } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java index e5004da3..2c14cccb 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java @@ -116,6 +116,70 @@ public abstract class FloatMeasurementView extends MeasurementView { return Math.max(0.0f, Math.min(getMaxValue(), value)); } + private void setValueInner(float newValue, String suffix, boolean callListener) { + value = newValue; + evaluationResult = null; + + if (!getUpdateViews()) { + return; + } + + if (value == AUTO_VALUE) { + setValueView(getContext().getString(R.string.label_automatic), false); + } + else { + setValueView(formatValue(value) + suffix, callListener); + + if (getMeasurementMode() != MeasurementViewMode.ADD) { + EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser(), dateTime); + evaluationResult = evaluateSheet(evalSheet, value); + } + } + setEvaluationView(evaluationResult); + } + + private void setPreviousValueInner(float newPreviousValue, String suffix) { + previousValue = newPreviousValue; + + if (!getUpdateViews()) { + return; + } + + if (previousValue >= 0.0f) { + final float diff = value - previousValue; + + char symbol; + + if (diff > 0.0) { + symbol = SYMBOL_UP; + } else if (diff < 0.0) { + symbol = SYMBOL_DOWN; + } else { + symbol = SYMBOL_NEUTRAL; + } + + SpannableStringBuilder text = new SpannableStringBuilder(nameText); + text.append("\n"); + + int start = text.length(); + text.append(symbol); + text.setSpan(new ForegroundColorSpan(Color.GRAY), start, text.length(), + Spanned.SPAN_EXCLUSIVE_INCLUSIVE); + + start = text.length(); + text.append(' '); + text.append(formatValue(diff)); + text.append(suffix); + text.setSpan(new RelativeSizeSpan(0.8f), start, text.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + setNameView(text); + } + else { + setNameView(nameText); + } + } + private void setValue(float newValue, float newPreviousValue, boolean callListener) { final String unit = getUnit(); final String suffix = unit.isEmpty() ? "" : " " + unit; @@ -124,57 +188,11 @@ public abstract class FloatMeasurementView extends MeasurementView { final boolean previousValueChanged = newPreviousValue != previousValue; if (valueChanged) { - value = newValue; - evaluationResult = null; - - if (value == AUTO_VALUE) { - setValueView(getContext().getString(R.string.label_automatic), false); - } - else { - setValueView(formatValue(value) + suffix, callListener); - - if (getMeasurementMode() != MeasurementViewMode.ADD) { - EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser(), dateTime); - evaluationResult = evaluateSheet(evalSheet, value); - } - } - setEvaluationView(evaluationResult); + setValueInner(newValue, suffix, callListener); } if (valueChanged || previousValueChanged) { - previousValue = newPreviousValue; - if (previousValue >= 0.0f) { - final float diff = value - previousValue; - - char symbol; - - if (diff > 0.0) { - symbol = SYMBOL_UP; - } else if (diff < 0.0) { - symbol = SYMBOL_DOWN; - } else { - symbol = SYMBOL_NEUTRAL; - } - - SpannableStringBuilder text = new SpannableStringBuilder(nameText); - text.append("\n"); - - int start = text.length(); - text.append(symbol); - text.setSpan(new ForegroundColorSpan(Color.GRAY), start, text.length(), - Spanned.SPAN_EXCLUSIVE_INCLUSIVE); - - start = text.length(); - text.append(' '); - text.append(formatValue(diff)); - text.append(suffix); - text.setSpan(new RelativeSizeSpan(0.8f), start, text.length(), - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - - setNameView(text); - } else { - setNameView(nameText); - } + setPreviousValueInner(newPreviousValue, suffix); } } 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 7ea9d921..b2ba716e 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 @@ -67,6 +67,8 @@ public abstract class MeasurementView extends TableLayout { private MeasurementViewUpdateListener updateListener = null; private MeasurementViewMode measurementMode = VIEW; + private boolean updateViews = true; + public MeasurementView(Context context, String text, Drawable icon) { super(context); initView(context); @@ -150,6 +152,13 @@ public abstract class MeasurementView extends TableLayout { updateListener = listener; } + public void setUpdateViews(boolean update) { + updateViews = update; + } + protected boolean getUpdateViews() { + return updateViews; + } + public abstract void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement); public abstract void saveTo(ScaleMeasurement measurement); @@ -206,14 +215,18 @@ public abstract class MeasurementView extends TableLayout { } protected void setValueView(String text, boolean callListener) { - valueView.setText(text); + if (updateViews) { + valueView.setText(text); + } if (callListener && updateListener != null) { updateListener.onMeasurementViewUpdate(this); } } protected void setNameView(CharSequence text) { - nameView.setText(text); + if (updateViews) { + nameView.setText(text); + } } protected void showEvaluatorRow(boolean show) { @@ -246,6 +259,10 @@ public abstract class MeasurementView extends TableLayout { } protected void setEvaluationView(EvaluationResult evalResult) { + if (!updateViews) { + return; + } + if (evalResult == null) { evaluatorView.setLimits(-1.0f, -1.0f); indicatorView.setBackgroundColor(Color.GRAY); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java index 44cd1763..649bc45c 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java @@ -44,7 +44,9 @@ public class TimeMeasurementView extends MeasurementView { private void setValue(Date newTime, boolean callListener) { if (!newTime.equals(time)) { time = newTime; - setValueView(timeFormat.format(time), callListener); + if (getUpdateViews()) { + setValueView(timeFormat.format(time), callListener); + } } }