diff --git a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java index 96c1849f..f36de6a9 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java +++ b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java @@ -47,10 +47,6 @@ import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.CsvHelper; import com.health.openscale.gui.fragments.FragmentUpdateListener; -import com.health.openscale.gui.views.FatMeasurementView; -import com.health.openscale.gui.views.LBWMeasurementView; -import com.health.openscale.gui.views.MeasurementViewSettings; -import com.health.openscale.gui.views.WaterMeasurementView; import java.io.BufferedReader; import java.io.IOException; @@ -258,24 +254,21 @@ public class OpenScale { } } - MeasurementViewSettings settings = new MeasurementViewSettings(prefs, WaterMeasurementView.KEY); - if (settings.isEnabled() && settings.isEstimationEnabled()) { - EstimatedWaterMetric waterMetric = EstimatedWaterMetric.getEstimatedMetric( - EstimatedWaterMetric.FORMULA.valueOf(settings.getEstimationFormula())); + if (prefs.getBoolean("estimateWaterEnable", false)) { + EstimatedWaterMetric waterMetric = EstimatedWaterMetric.getEstimatedMetric(EstimatedWaterMetric.FORMULA.valueOf(prefs.getString("estimateWaterFormula", "TBW_LEESONGKIM"))); + scaleMeasurement.setWater(waterMetric.getWater(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement)); } - settings = new MeasurementViewSettings(prefs, LBWMeasurementView.KEY); - if (settings.isEnabled() && settings.isEstimationEnabled()) { - EstimatedLBWMetric lbwMetric = EstimatedLBWMetric.getEstimatedMetric( - EstimatedLBWMetric.FORMULA.valueOf(settings.getEstimationFormula())); + if (prefs.getBoolean("estimateLBWEnable", false)) { + EstimatedLBWMetric lbwMetric = EstimatedLBWMetric.getEstimatedMetric(EstimatedLBWMetric.FORMULA.valueOf(prefs.getString("estimateLBWFormula", "LBW_HUME"))); + scaleMeasurement.setLbw(lbwMetric.getLBW(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement)); } - settings = new MeasurementViewSettings(prefs, FatMeasurementView.KEY); - if (settings.isEnabled() && settings.isEstimationEnabled()) { - EstimatedFatMetric fatMetric = EstimatedFatMetric.getEstimatedMetric( - EstimatedFatMetric.FORMULA.valueOf(settings.getEstimationFormula())); + if (prefs.getBoolean("estimateFatEnable", false)) { + EstimatedFatMetric fatMetric = EstimatedFatMetric.getEstimatedMetric(EstimatedFatMetric.FORMULA.valueOf(prefs.getString("estimateFatFormula", "BF_GALLAGHER"))); + scaleMeasurement.setFat(fatMetric.getFat(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement)); } diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothIhealthHS3.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothIhealthHS3.java index 7335c53b..b71417b3 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothIhealthHS3.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothIhealthHS3.java @@ -27,9 +27,12 @@ import com.health.openscale.core.datatypes.ScaleMeasurement; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Set; import java.util.UUID; import java.util.Date; +import java.util.Calendar; import java.util.Arrays; public class BluetoothIhealthHS3 extends BluetoothCommunication { 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 5fa221e7..ddc775d1 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 @@ -302,15 +302,6 @@ public class DataEntryActivity extends AppCompatActivity { } isDirty = true; - - // Measurements that aren't visible should not store any value. Since we use values from - // the previous measurement there might be values for entries not shown. The loop below - // clears these values. - for (MeasurementView measurement : dataEntryMeasurements) { - if (!measurement.isVisible()) { - measurement.clearIn(scaleMeasurement); - } - } } for (MeasurementView measurement : dataEntryMeasurements) { 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 65ca0527..3377e21d 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 @@ -43,10 +43,8 @@ import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.utils.PolynomialFitter; import com.health.openscale.gui.activities.DataEntryActivity; -import com.health.openscale.gui.views.BMRMeasurementView; import com.health.openscale.gui.views.FloatMeasurementView; import com.health.openscale.gui.views.MeasurementView; -import com.health.openscale.gui.views.MeasurementViewSettings; import com.health.openscale.gui.views.WeightMeasurementView; import java.text.SimpleDateFormat; @@ -251,7 +249,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { private void addFloatingActionButton(FloatMeasurementView measurementView) { FloatingActionButton actionButton = new FloatingActionButton(getContext()); - actionButton.setTag(measurementView.getKey()); + actionButton.setTag("actionButton" + measurementView.getName()); actionButton.setColorFilter(Color.parseColor("#000000")); actionButton.setImageDrawable(measurementView.getIcon()); actionButton.setClickable(true); @@ -261,9 +259,11 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { actionButton.setLayoutParams(lay); actionButton.setOnClickListener(new onClickListenerDiagramLines()); - int color = measurementView.getSettings().isInGraph() - ? measurementView.getColor() : Color.parseColor("#d3d3d3"); - actionButton.setBackgroundTintList(ColorStateList.valueOf(color)); + if (prefs.getBoolean(String.valueOf("actionButton" + measurementView.getName()), true)) { + actionButton.setBackgroundTintList(ColorStateList.valueOf(measurementView.getColor())); + } else { + actionButton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#d3d3d3"))); + } floatingActionBar.addView(actionButton); } @@ -326,7 +326,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { if (view instanceof FloatMeasurementView) { FloatMeasurementView measurementView = (FloatMeasurementView) view; - if (measurementView instanceof BMRMeasurementView) { + if (measurementView.getName().equals(getString(R.string.label_bmr))) { continue; } @@ -385,7 +385,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { if (measurementView.isVisible()) { addFloatingActionButton(measurementView); - if (measurementView.getSettings().isInGraph()) { + if (prefs.getBoolean(String.valueOf("actionButton" + measurementView.getName()), true)) { diagramLineList.add(diagramLine); } } @@ -587,9 +587,11 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - String key = String.valueOf(actionButton.getTag()); - MeasurementViewSettings settings = new MeasurementViewSettings(prefs, key); - prefs.edit().putBoolean(settings.getInGraphKey(), !settings.isInGraph()).apply(); + if (prefs.getBoolean(String.valueOf(actionButton.getTag()), true)) { + prefs.edit().putBoolean(String.valueOf(actionButton.getTag()), false).commit(); + } else { + prefs.edit().putBoolean(String.valueOf(actionButton.getTag()), true).commit(); + } generateGraphs(); } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java index 0c2dbd34..0264753f 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java @@ -38,7 +38,6 @@ import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.DateTimeHelpers; -import com.health.openscale.gui.views.BMRMeasurementView; import com.health.openscale.gui.views.FloatMeasurementView; import com.health.openscale.gui.views.MeasurementView; @@ -228,7 +227,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener for (MeasurementView view : measurementViews) { if (!view.isVisible() - || !view.getSettings().isInOverviewGraph() + || !prefs.getBoolean(String.valueOf("actionButton" + view.getName()), true) + || view.getName().equals(getString(R.string.label_bmr)) || !(view instanceof FloatMeasurementView)) { continue; } @@ -277,7 +277,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener if (view instanceof FloatMeasurementView) { FloatMeasurementView measurementView = (FloatMeasurementView) view; - if (measurementView instanceof BMRMeasurementView) { + if (measurementView.getName().equals(getString(R.string.label_bmr))) { continue; } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java index 92e794e1..165a42f9 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java @@ -16,7 +16,9 @@ package com.health.openscale.gui.fragments; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.text.Html; import android.view.LayoutInflater; @@ -65,6 +67,7 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen private TableLayout tableMonthAveragesLayoutColumnA; private TableLayout tableMonthAveragesLayoutColumnB; + private SharedPreferences prefs; private ScaleUser currentScaleUser; private ScaleMeasurement lastScaleMeasurement; @@ -75,6 +78,8 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { statisticsView = inflater.inflate(R.layout.fragment_statistics, container, false); + prefs = PreferenceManager.getDefaultSharedPreferences(statisticsView.getContext()); + txtGoalWeight = (TextView) statisticsView.findViewById(R.id.txtGoalWeight); txtGoalDiff = (TextView) statisticsView.findViewById(R.id.txtGoalDiff); txtGoalDayLeft = (TextView) statisticsView.findViewById(R.id.txtGoalDayLeft); @@ -105,9 +110,9 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen for (MeasurementView measurement : viewMeasurementsListWeek) { measurement.setEditMode(STATISTIC); + measurement.updatePreferences(prefs); - if (measurement.getSettings().isEnabled()) { - measurement.setVisible(true); + if (measurement.isVisible()) { measurement.setPadding(-1, -1, -1, paddingBottom); if ((i % 2) == 0) { tableWeekAveragesLayoutColumnA.addView(measurement); @@ -133,9 +138,9 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen for (MeasurementView measurement : viewMeasurementsListMonth) { measurement.setEditMode(STATISTIC); + measurement.updatePreferences(prefs); - if (measurement.getSettings().isEnabled()) { - measurement.setVisible(true); + if (measurement.isVisible()) { measurement.setPadding(-1, -1, -1, paddingBottom); if ((i % 2) == 0) { tableMonthAveragesLayoutColumnA.addView(measurement); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java index 309401da..1875f4a3 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/GeneralPreferences.java @@ -23,6 +23,7 @@ import android.preference.MultiSelectListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; +import android.widget.Toast; import com.health.openscale.R; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java index 8c7fb76e..572127e6 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/MeasurementPreferences.java @@ -1,5 +1,4 @@ /* Copyright (C) 2014 olie.xdev -* Copyright (C) 2018 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 @@ -17,46 +16,77 @@ package com.health.openscale.gui.preferences; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; -import android.database.DataSetObserver; +import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.preference.CheckBoxPreference; +import android.preference.EditTextPreference; +import android.preference.ListPreference; +import android.preference.MultiSelectListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; -import android.util.TypedValue; +import android.preference.SwitchPreference; import android.view.DragEvent; -import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; -import android.widget.CompoundButton; -import android.widget.ListAdapter; -import android.widget.Switch; import android.widget.Toast; import com.health.openscale.R; import com.health.openscale.core.OpenScale; +import com.health.openscale.core.bodymetric.EstimatedFatMetric; +import com.health.openscale.core.bodymetric.EstimatedLBWMetric; +import com.health.openscale.core.bodymetric.EstimatedWaterMetric; import com.health.openscale.gui.views.MeasurementView; -import com.health.openscale.gui.views.WeightMeasurementView; import java.util.ArrayList; import java.util.List; +import java.util.Set; -public class MeasurementPreferences extends PreferenceFragment { +public class MeasurementPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { public static final String PREFERENCE_KEY_DELETE_ALL = "deleteAll"; + public static final String PREFERENCE_KEY_FAT = "fatEnable"; + public static final String PREFERENCE_KEY_FAT_PERCENTAGE = "fatPercentageEnable"; + public static final String PREFERENCE_KEY_WATER = "waterEnable"; + public static final String PREFERENCE_KEY_WATER_PERCENTAGE = "waterPercentageEnable"; + public static final String PREFERENCE_KEY_MUSCLE = "muscleEnable"; + public static final String PREFERENCE_KEY_MUSCLE_PERCENTAGE = "musclePercentageEnable"; + public static final String PREFERENCE_KEY_ESTIMATE_WATER = "estimateWaterEnable"; + public static final String PREFERENCE_KEY_ESTIMATE_WATER_FORMULA = "estimateWaterFormula"; + public static final String PREFERENCE_KEY_ESTIMATE_LBW = "estimateLBWEnable"; + public static final String PREFERENCE_KEY_ESTIMATE_LBW_FORMULA = "estimateLBWFormula"; + public static final String PREFERENCE_KEY_ESTIMATE_FAT = "estimateFatEnable"; + public static final String PREFERENCE_KEY_ESTIMATE_FAT_FORMULA = "estimateFatFormula"; + public static final String PREFERENCE_KEY_RESET_ORDER = "resetOrder"; - public static final String PREFERENCE_KEY_MEASUREMENTS = "measurements"; + public static final String PREFERENCE_KEY_ORDER_CATEGORY = "orderCategory"; private Preference deleteAll; - private PreferenceCategory measurementCategory; + + private PreferenceScreen measurementOrderScreen; + private PreferenceCategory measurementOrderCategory; + + private CheckBoxPreference fatEnable; + private SwitchPreference fatPercentageEnable; + private CheckBoxPreference waterEnable; + private SwitchPreference waterPercentageEnable; + private CheckBoxPreference muscleEnable; + private SwitchPreference musclePercentageEnable; + + private CheckBoxPreference estimateWaterEnable; + private ListPreference estimateWaterFormula; + private CheckBoxPreference estimateLBWEnable; + private ListPreference estimateLBWFormula; + private CheckBoxPreference estimateFatEnable; + private ListPreference estimateFatFormula; @Override public void onCreate(Bundle savedInstanceState) { @@ -64,46 +94,204 @@ public class MeasurementPreferences extends PreferenceFragment { addPreferencesFromResource(R.xml.measurement_preferences); - deleteAll = findPreference(PREFERENCE_KEY_DELETE_ALL); + deleteAll = (Preference) findPreference(PREFERENCE_KEY_DELETE_ALL); deleteAll.setOnPreferenceClickListener(new onClickListenerDeleteAll()); - measurementCategory = (PreferenceCategory) findPreference(PREFERENCE_KEY_MEASUREMENTS); + final Context context = getActivity().getBaseContext(); + measurementOrderScreen = (PreferenceScreen) findPreference(MeasurementView.PREF_MEASUREMENT_ORDER); + + measurementOrderCategory = (PreferenceCategory) findPreference(PREFERENCE_KEY_ORDER_CATEGORY); + measurementOrderCategory.setOrderingAsAdded(true); Preference resetOrder = findPreference(PREFERENCE_KEY_RESET_ORDER); resetOrder.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - PreferenceManager.getDefaultSharedPreferences(getActivity()).edit() - .remove(MeasurementView.PREF_MEASUREMENT_ORDER).apply(); - updateMeasurementPreferences(); + PreferenceManager.getDefaultSharedPreferences(context).edit() + .remove(MeasurementView.PREF_MEASUREMENT_ORDER).commit(); + measurementOrderCategory.removeAll(); + updateMeasurementOrderScreen(context, measurementOrderCategory); return true; } }); - updateMeasurementPreferences(); + updateMeasurementOrderScreen(context, measurementOrderCategory); + + estimateWaterEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_WATER); + estimateWaterFormula = (ListPreference) findPreference(PREFERENCE_KEY_ESTIMATE_WATER_FORMULA); + estimateLBWEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_LBW); + estimateLBWFormula = (ListPreference) findPreference(PREFERENCE_KEY_ESTIMATE_LBW_FORMULA); + estimateFatEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_FAT); + estimateFatFormula = (ListPreference) findPreference(PREFERENCE_KEY_ESTIMATE_FAT_FORMULA); + + fatEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_FAT); + fatPercentageEnable = (SwitchPreference) findPreference(PREFERENCE_KEY_FAT_PERCENTAGE); + waterEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_WATER); + waterPercentageEnable = (SwitchPreference) findPreference(PREFERENCE_KEY_WATER_PERCENTAGE); + muscleEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_MUSCLE); + musclePercentageEnable = (SwitchPreference) findPreference(PREFERENCE_KEY_MUSCLE_PERCENTAGE); + + updateWaterListPreferences(); + updateLBWListPreferences(); + updateFatListPreferences(); + + initSummary(getPreferenceScreen()); } - private void updateMeasurementPreferences() { - measurementCategory.removeAll(); - + private void updateMeasurementOrderScreen(Context context, PreferenceCategory category) { List measurementViews = MeasurementView.getMeasurementList( - getActivity(), MeasurementView.DateTimeOrder.NONE); - + context, MeasurementView.DateTimeOrder.NONE); for (MeasurementView measurement : measurementViews) { - Preference preference = new MeasurementOrderPreference( - getActivity(), measurementCategory, measurement); - preference.setKey(measurement.getSettings().getEnabledKey()); - preference.setDefaultValue(measurement.getSettings().isEnabledIgnoringDependencies()); - preference.setPersistent(true); - preference.setEnabled(measurement.getSettings().areDependenciesEnabled()); + Preference preference = new MeasurementOrderPreference(context, category, measurement); + preference.setShouldDisableView(true); + preference.setEnabled(measurement.isVisible()); + category.addPreference(preference); + } + } - Drawable icon = measurement.getIcon(); - icon.setColorFilter(measurement.getForegroundColor(), PorterDuff.Mode.SRC_IN); - preference.setIcon(icon); + public void updateWaterListPreferences() { + ArrayList listEntries = new ArrayList(); + ArrayList listEntryValues = new ArrayList(); - preference.setTitle(measurement.getName()); + for (EstimatedWaterMetric.FORMULA formulaWater : EstimatedWaterMetric.FORMULA.values()) { + EstimatedWaterMetric waterMetric = EstimatedWaterMetric.getEstimatedMetric(formulaWater); - measurementCategory.addPreference(preference); + listEntries.add(waterMetric.getName()); + listEntryValues.add(formulaWater.toString()); + } + + estimateWaterFormula.setEntries(listEntries.toArray(new CharSequence[listEntries.size()])); + estimateWaterFormula.setEntryValues(listEntryValues.toArray(new CharSequence[listEntryValues.size()])); + } + + public void updateLBWListPreferences() { + ArrayList listEntries = new ArrayList(); + ArrayList listEntryValues = new ArrayList(); + + for (EstimatedLBWMetric.FORMULA formulaLBW : EstimatedLBWMetric.FORMULA.values()) { + EstimatedLBWMetric muscleMetric = EstimatedLBWMetric.getEstimatedMetric(formulaLBW); + + listEntries.add(muscleMetric.getName()); + listEntryValues.add(formulaLBW.toString()); + } + + estimateLBWFormula.setEntries(listEntries.toArray(new CharSequence[listEntries.size()])); + estimateLBWFormula.setEntryValues(listEntryValues.toArray(new CharSequence[listEntryValues.size()])); + } + + + public void updateFatListPreferences() { + ArrayList listEntries = new ArrayList(); + ArrayList listEntryValues = new ArrayList(); + + for (EstimatedFatMetric.FORMULA formulaFat : EstimatedFatMetric.FORMULA.values()) { + EstimatedFatMetric fatMetric = EstimatedFatMetric.getEstimatedMetric(formulaFat); + + listEntries.add(fatMetric.getName()); + listEntryValues.add(formulaFat.toString()); + } + + estimateFatFormula.setEntries(listEntries.toArray(new CharSequence[listEntries.size()])); + estimateFatFormula.setEntryValues(listEntryValues.toArray(new CharSequence[listEntryValues.size()])); + } + + + private void initSummary(Preference p) { + if (p instanceof PreferenceGroup) { + PreferenceGroup pGrp = (PreferenceGroup) p; + for (int i = 0; i < pGrp.getPreferenceCount(); i++) { + initSummary(pGrp.getPreference(i)); + } + } else { + updatePrefSummary(p); + } + } + + @Override + public void onResume() { + super.onResume(); + getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + } + + @Override + public void onPause() { + getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); + super.onPause(); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + updatePrefSummary(findPreference(key)); + if (!key.equals(MeasurementView.PREF_MEASUREMENT_ORDER)) { + measurementOrderCategory.removeAll(); + updateMeasurementOrderScreen(getActivity().getApplicationContext(), measurementOrderCategory); + } + } + + private void updatePrefSummary(Preference p) { + if (estimateWaterEnable.isChecked()) { + estimateWaterFormula.setEnabled(true); + } else { + estimateWaterFormula.setEnabled(false); + } + + if (estimateLBWEnable.isChecked()) { + estimateLBWFormula.setEnabled(true); + } else { + estimateLBWFormula.setEnabled(false); + } + + if (estimateFatEnable.isChecked()) { + estimateFatFormula.setEnabled(true); + } else { + estimateFatFormula.setEnabled(false); + } + + if (fatEnable.isChecked()) { + fatPercentageEnable.setEnabled(true); + } else { + fatPercentageEnable.setEnabled(false); + } + + if (waterEnable.isChecked()) { + waterPercentageEnable.setEnabled(true); + } else { + waterPercentageEnable.setEnabled(false); + } + + if (muscleEnable.isChecked()) { + musclePercentageEnable.setEnabled(true); + } else { + musclePercentageEnable.setEnabled(false); + } + + estimateWaterFormula.setSummary(EstimatedWaterMetric.getEstimatedMetric(EstimatedWaterMetric.FORMULA.valueOf(estimateWaterFormula.getValue())).getName()); + estimateLBWFormula.setSummary(EstimatedLBWMetric.getEstimatedMetric(EstimatedLBWMetric.FORMULA.valueOf(estimateLBWFormula.getValue())).getName()); + estimateFatFormula.setSummary(EstimatedFatMetric.getEstimatedMetric(EstimatedFatMetric.FORMULA.valueOf(estimateFatFormula.getValue())).getName()); + + if (p instanceof EditTextPreference) { + EditTextPreference editTextPref = (EditTextPreference) p; + if (p.getTitle().toString().contains("assword")) + { + p.setSummary("******"); + } else { + p.setSummary(editTextPref.getText()); + } + } + + if (p instanceof MultiSelectListPreference) { + MultiSelectListPreference editMultiListPref = (MultiSelectListPreference) p; + + CharSequence[] entries = editMultiListPref.getEntries(); + CharSequence[] entryValues = editMultiListPref.getEntryValues(); + List currentEntries = new ArrayList<>(); + Set currentEntryValues = editMultiListPref.getValues(); + + for (int i = 0; i < entries.length; i++) + if (currentEntryValues.contains(entryValues[i])) + currentEntries.add(entries[i].toString()); + + p.setSummary(currentEntries.toString()); } } @@ -138,25 +326,19 @@ public class MeasurementPreferences extends PreferenceFragment { } } - private class MeasurementOrderPreference extends Preference - implements GestureDetector.OnGestureListener { + private class MeasurementOrderPreference extends Preference { PreferenceGroup parentGroup; MeasurementView measurement; - - GestureDetector gestureDetector; - View boundView; - Switch measurementSwitch; MeasurementOrderPreference(Context context, PreferenceGroup parent, MeasurementView measurementView) { super(context); parentGroup = parent; measurement = measurementView; - - gestureDetector = new GestureDetector(getContext(), this); - gestureDetector.setIsLongpressEnabled(true); - - setWidgetLayoutResource(R.layout.measurement_preferences_widget_layout); + Drawable icon = measurement.getIcon(); + icon.setColorFilter(measurementView.getForegroundColor(), PorterDuff.Mode.SRC_IN); + setIcon(icon); + setTitle(measurement.getName()); } public PreferenceGroup getParent() { @@ -168,137 +350,46 @@ public class MeasurementPreferences extends PreferenceFragment { super.onBindView(view); boundView = view; - measurementSwitch = view.findViewById(R.id.measurement_switch); - if (measurement instanceof WeightMeasurementView) { - measurementSwitch.setVisibility(View.INVISIBLE); - } - else { - measurementSwitch.setChecked(measurement.getSettings().isEnabledIgnoringDependencies()); - measurementSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - persistBoolean(isChecked); - for (int i = 0; i < getParent().getPreferenceCount(); ++i) { - MeasurementOrderPreference preference = - (MeasurementOrderPreference) getParent().getPreference(i); - preference.setEnabled(preference.measurement.getSettings().areDependenciesEnabled()); - } - } - }); - } - - if (!measurement.hasExtraPreferences()) { - view.findViewById(R.id.measurement_switch_separator).setVisibility(View.GONE); - } - - TypedValue outValue = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true); - boundView.setBackgroundResource(outValue.resourceId); - - view.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - return gestureDetector.onTouchEvent(event); - } - }); + onTouchClickListener touchClickListener = new onTouchClickListener(this); + view.setOnTouchListener(touchClickListener); + view.setOnLongClickListener(touchClickListener); view.setOnDragListener(new onDragListener()); } - @Override - public boolean onDown(MotionEvent e) { - return isEnabled(); - } + private class onTouchClickListener implements View.OnTouchListener, View.OnLongClickListener { + MeasurementOrderPreference preference; + int x = 0; + int y = 0; - @Override - public void onShowPress(MotionEvent e) { - boundView.setPressed(true); - } - - @Override - public boolean onSingleTapUp(MotionEvent e) { - boundView.setPressed(false); - - if (!measurement.hasExtraPreferences()) { - if (measurementSwitch.getVisibility() == View.VISIBLE) { - measurementSwitch.toggle(); - } - return true; - } - - // Must be enabled to show extra preferences screen - if (!getPersistedBoolean(true)) { - return true; - } - - final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity()); - - // Register as an observer so that the loop to getItem() below will find the new - // preference screen added at the end. The add is done on another thread so we must - // wait for it to complete. - final ListAdapter adapter = getPreferenceScreen().getRootAdapter(); - adapter.registerDataSetObserver(new DataSetObserver() { - @Override - public void onChanged() { - adapter.unregisterDataSetObserver(this); - - // Simulate a click to have the preference screen open - for (int i = adapter.getCount() - 1; i >= 0; --i) { - if (adapter.getItem(i) == screen) { - getPreferenceScreen().onItemClick(null, null, i, 0); - break; - } - } - - // Remove the preference when the dialog is dismissed - Dialog dialog = screen.getDialog(); - dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - screen.onDismiss(dialog); - getPreferenceScreen().removePreference(screen); - } - }); - } - }); - - getPreferenceScreen().addPreference(screen); - measurement.prepareExtraPreferencesScreen(screen); - - return true; - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - return false; - } - - @Override - public void onLongPress(MotionEvent event) { - int x = Math.round(event.getX()); - int y = Math.round(event.getY()); - - boundView.startDrag(null, new dragShadowBuilder(boundView, x, y), this, 0); - } - - private class dragShadowBuilder extends View.DragShadowBuilder { - private int x; - private int y; - public dragShadowBuilder(View view, int x, int y) { - super(view); - this.x = x; - this.y = y; + onTouchClickListener(MeasurementOrderPreference pref) { + preference = pref; } @Override - public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) { - super.onProvideShadowMetrics(outShadowSize, outShadowTouchPoint); - outShadowTouchPoint.set(x, y); + public boolean onTouch(View view, MotionEvent event) { + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + x = Math.round(event.getX()); + y = Math.round(event.getY()); + } + return false; } - } - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - return false; + @Override + public boolean onLongClick(View view) { + return view.startDrag(null, new dragShadowBuilder(view), preference, 0); + } + + private class dragShadowBuilder extends View.DragShadowBuilder { + public dragShadowBuilder(View view) { + super(view); + } + + @Override + public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) { + super.onProvideShadowMetrics(outShadowSize, outShadowTouchPoint); + outShadowTouchPoint.set(x, y); + } + } } private class onDragListener implements View.OnDragListener { @@ -334,6 +425,9 @@ public class MeasurementPreferences extends PreferenceFragment { public boolean onDrag(View view, DragEvent event) { switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: + if (isDraggedView(view, event)) { + setTemporaryBackgroundColor(view, Color.GRAY); + } break; case DragEvent.ACTION_DRAG_ENTERED: if (!isDraggedView(view, event)) { @@ -381,5 +475,6 @@ public class MeasurementPreferences extends PreferenceFragment { return true; } } + } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java index 0083bfca..b37de99c 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,6 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class BMIMeasurementView extends FloatMeasurementView { - public static final String KEY = "bmi"; public BMIMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_bmi), ContextCompat.getDrawable(context, R.drawable.ic_bmi)); @@ -33,7 +33,12 @@ public class BMIMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "bmi"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("weightEnable", true)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java index 2528c6f3..8845c832 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/BMRMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -27,7 +28,6 @@ import com.health.openscale.core.evaluation.EvaluationSheet; import java.util.Locale; public class BMRMeasurementView extends FloatMeasurementView { - public static final String KEY = "bmr"; public BMRMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_bmr), ContextCompat.getDrawable(context, R.drawable.ic_bmr)); @@ -35,7 +35,12 @@ public class BMRMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "bmr"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("weightEnable", true)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java index b9f52d9b..24d52744 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/BoneMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,6 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class BoneMeasurementView extends FloatMeasurementView { - public static final String KEY = "bone"; public BoneMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_bone), ContextCompat.getDrawable(context, R.drawable.ic_bone)); @@ -33,7 +33,12 @@ public class BoneMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "bone"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("boneEnable", false)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java index 9bfa08f9..c02ffd76 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.text.InputType; @@ -26,8 +27,6 @@ import com.health.openscale.R; import com.health.openscale.core.datatypes.ScaleMeasurement; public class CommentMeasurementView extends MeasurementView { - public static final String KEY = "comment"; - private String comment; public CommentMeasurementView(Context context) { @@ -36,7 +35,7 @@ public class CommentMeasurementView extends MeasurementView { @Override public String getKey() { - return KEY; + return "comment"; } private void setValue(String newComment, boolean callListener) { @@ -56,11 +55,6 @@ public class CommentMeasurementView extends MeasurementView { measurement.setComment(comment); } - @Override - public void clearIn(ScaleMeasurement measurement) { - measurement.setComment(""); - } - @Override public void restoreState(Bundle state) { setValue(state.getString(getKey()), true); @@ -71,6 +65,11 @@ public class CommentMeasurementView extends MeasurementView { state.putString(getKey(), comment); } + @Override + public void updatePreferences(SharedPreferences preferences) { + // Empty + } + @Override public String getValueAsString() { return comment; 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 06279188..1a32226a 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 @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.view.View; @@ -29,8 +30,6 @@ import java.util.Calendar; import java.util.Date; public class DateMeasurementView extends MeasurementView { - public static final String KEY = "date"; - private static DateFormat dateFormat = DateFormat.getDateInstance(); private Date date; @@ -40,9 +39,10 @@ public class DateMeasurementView extends MeasurementView { @Override public String getKey() { - return KEY; + return "date"; } + private void setValue(Date newDate, boolean callListener) { if (!newDate.equals(date)) { date = newDate; @@ -71,11 +71,6 @@ public class DateMeasurementView extends MeasurementView { measurement.setDateTime(target.getTime()); } - @Override - public void clearIn(ScaleMeasurement measurement) { - // Ignore - } - @Override public void restoreState(Bundle state) { setValue(new Date(state.getLong(getKey())), true); @@ -86,6 +81,11 @@ public class DateMeasurementView extends MeasurementView { state.putLong(getKey(), date.getTime()); } + @Override + public void updatePreferences(SharedPreferences preferences) { + // Empty + } + @Override public String getValueAsString() { return dateFormat.format(date); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java index 6c1a479d..3e1d933b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java @@ -16,18 +16,19 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; -import android.preference.ListPreference; import android.support.v4.content.ContextCompat; import com.health.openscale.R; -import com.health.openscale.core.bodymetric.EstimatedFatMetric; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class FatMeasurementView extends FloatMeasurementView { - public static final String KEY = "fat"; + + private boolean estimateFatEnable; + private boolean percentageEnable; public FatMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_fat), ContextCompat.getDrawable(context, R.drawable.ic_fat)); @@ -35,12 +36,19 @@ public class FatMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "fat"; } @Override - protected boolean canConvertPercentageToAbsoluteWeight() { - return true; + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("fatEnable", true)); + estimateFatEnable = preferences.getBoolean("estimateFatEnable", false); + percentageEnable = preferences.getBoolean("fatPercentageEnable", true); + } + + @Override + protected boolean shouldConvertPercentageToAbsoluteWeight() { + return !percentageEnable; } @Override @@ -55,11 +63,11 @@ public class FatMeasurementView extends FloatMeasurementView { @Override public String getUnit() { - if (shouldConvertPercentageToAbsoluteWeight()) { - return getScaleUser().getScaleUnit().toString(); + if (percentageEnable) { + return "%"; } - return "%"; + return getScaleUser().getScaleUnit().toString(); } @Override @@ -73,22 +81,8 @@ public class FatMeasurementView extends FloatMeasurementView { } @Override - protected boolean isEstimationSupported() { return true; } - - @Override - protected void prepareEstimationFormulaPreference(ListPreference preference) { - String[] entries = new String[EstimatedFatMetric.FORMULA.values().length]; - String[] values = new String[entries.length]; - - int idx = 0; - for (EstimatedFatMetric.FORMULA formula : EstimatedFatMetric.FORMULA.values()) { - entries[idx] = EstimatedFatMetric.getEstimatedMetric(formula).getName(); - values[idx] = formula.name(); - ++idx; - } - - preference.setEntries(entries); - preference.setEntryValues(values); + protected boolean isEstimationEnabled() { + return estimateFatEnable; } @Override 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 2a7b8a32..81866ac0 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 @@ -17,16 +17,10 @@ package com.health.openscale.gui.views; import android.content.Context; -import android.database.DataSetObserver; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; -import android.preference.CheckBoxPreference; -import android.preference.ListPreference; -import android.preference.Preference; -import android.preference.PreferenceScreen; -import android.preference.SwitchPreference; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ForegroundColorSpan; @@ -37,7 +31,6 @@ import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; -import android.widget.ListAdapter; import android.widget.TableRow; import android.widget.TextView; @@ -234,21 +227,18 @@ public abstract class FloatMeasurementView extends MeasurementView { public abstract int getColor(); - protected boolean isEstimationSupported() { return false; } - protected void prepareEstimationFormulaPreference(ListPreference preference) {} + protected boolean isEstimationEnabled() { + return false; + } protected abstract EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value); private boolean useAutoValue() { - return isEstimationSupported() - && getSettings().isEstimationEnabled() - && getMeasurementMode() == MeasurementViewMode.ADD; + return isEstimationEnabled() && getMeasurementMode() == MeasurementViewMode.ADD; } - protected boolean canConvertPercentageToAbsoluteWeight() { return false; } protected boolean shouldConvertPercentageToAbsoluteWeight() { - return canConvertPercentageToAbsoluteWeight() - && !getSettings().isPercentageEnabled(); + return false; } private float makeAbsoluteWeight(float percentage) { @@ -322,11 +312,6 @@ public abstract class FloatMeasurementView extends MeasurementView { } } - @Override - public void clearIn(ScaleMeasurement measurement) { - setMeasurementValue(0.0f, measurement); - } - @Override public void restoreState(Bundle state) { setValue(state.getFloat(getKey()), previousValue, true); @@ -419,70 +404,6 @@ public abstract class FloatMeasurementView extends MeasurementView { showEvaluatorRow(show); } - @Override - public boolean hasExtraPreferences() { return true; } - - @Override - public void prepareExtraPreferencesScreen(PreferenceScreen screen) { - MeasurementViewSettings settings = getSettings(); - - CheckBoxPreference overview = new CheckBoxPreference(screen.getContext()); - overview.setKey(settings.getInOverviewGraphKey()); - overview.setTitle(R.string.label_include_in_overview_graph); - overview.setPersistent(true); - overview.setDefaultValue(settings.isInOverviewGraph()); - screen.addPreference(overview); - - if (canConvertPercentageToAbsoluteWeight()) { - SwitchPreference percentage = new SwitchPreference(screen.getContext()); - percentage.setKey(settings.getPercentageEnabledKey()); - percentage.setTitle(R.string.label_measurement_in_percent); - percentage.setPersistent(true); - percentage.setDefaultValue(settings.isPercentageEnabled()); - screen.addPreference(percentage); - } - - if (isEstimationSupported()) { - final CheckBoxPreference estimate = new CheckBoxPreference(screen.getContext()); - estimate.setKey(settings.getEstimationEnabledKey()); - estimate.setTitle(R.string.label_estimate_measurement); - estimate.setPersistent(true); - estimate.setDefaultValue(settings.isEstimationEnabled()); - screen.addPreference(estimate); - - final ListPreference formula = new ListPreference(screen.getContext()); - formula.setKey(settings.getEstimationFormulaKey()); - formula.setTitle(R.string.label_estimation_formula); - formula.setPersistent(true); - formula.setDefaultValue(settings.getEstimationFormula()); - prepareEstimationFormulaPreference(formula); - formula.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - ListPreference list = (ListPreference) preference; - int idx = list.findIndexOfValue((String) newValue); - if (idx == -1) { - return false; - } - preference.setSummary(list.getEntries()[idx]); - return true; - } - }); - - final ListAdapter adapter = screen.getRootAdapter(); - adapter.registerDataSetObserver(new DataSetObserver() { - @Override - public void onChanged() { - adapter.unregisterDataSetObserver(this); - - formula.setDependency(estimate.getKey()); - formula.setSummary(formula.getEntry()); - } - }); - screen.addPreference(formula); - } - } - private float validateAndGetInput(View view) { EditText editText = view.findViewById(R.id.float_input); String text = editText.getText().toString(); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java index 09f78e42..b2bf2263 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,6 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class HipMeasurementView extends FloatMeasurementView { - public static final String KEY = "hip"; public HipMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_hip), ContextCompat.getDrawable(context, R.drawable.ic_hip)); @@ -33,7 +33,12 @@ public class HipMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "hip"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("hipEnable", false)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/LBWMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/LBWMeasurementView.java index 6addf07c..25eeda0e 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/LBWMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/LBWMeasurementView.java @@ -16,18 +16,18 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; -import android.preference.ListPreference; import android.support.v4.content.ContextCompat; import com.health.openscale.R; -import com.health.openscale.core.bodymetric.EstimatedLBWMetric; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class LBWMeasurementView extends FloatMeasurementView { - public static final String KEY = "lbw"; + + private boolean estimateLBWEnable; public LBWMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_lbw), ContextCompat.getDrawable(context, R.drawable.ic_lbw)); @@ -35,7 +35,13 @@ public class LBWMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "lbw"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("lbwEnable", false)); + estimateLBWEnable = preferences.getBoolean("estimateLBWEnable", false); } @Override @@ -64,22 +70,8 @@ public class LBWMeasurementView extends FloatMeasurementView { } @Override - protected boolean isEstimationSupported() { return true; } - - @Override - protected void prepareEstimationFormulaPreference(ListPreference preference) { - String[] entries = new String[EstimatedLBWMetric.FORMULA.values().length]; - String[] values = new String[entries.length]; - - int idx = 0; - for (EstimatedLBWMetric.FORMULA formula : EstimatedLBWMetric.FORMULA.values()) { - entries[idx] = EstimatedLBWMetric.getEstimatedMetric(formula).getName(); - values[idx] = formula.name(); - ++idx; - } - - preference.setEntries(entries); - preference.setEntryValues(values); + protected boolean isEstimationEnabled() { + return estimateLBWEnable; } @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 2f01024f..eaf2b306 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 @@ -23,7 +23,6 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.PreferenceManager; -import android.preference.PreferenceScreen; import android.support.v4.content.ContextCompat; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -31,6 +30,7 @@ import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; @@ -61,8 +61,6 @@ public abstract class MeasurementView extends TableLayout { public static String PREF_MEASUREMENT_ORDER = "measurementOrder"; - private MeasurementViewSettings settings; - private TableRow measurementRow; private ImageView iconView; private TextView nameView; @@ -77,11 +75,13 @@ public abstract class MeasurementView extends TableLayout { private MeasurementViewUpdateListener updateListener = null; private MeasurementViewMode measurementMode = VIEW; + private static SharedPreferences prefs; + private boolean updateViews = true; public MeasurementView(Context context, String text, Drawable icon) { super(context); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + prefs = PreferenceManager.getDefaultSharedPreferences(context); String app_theme = prefs.getString("app_theme", "Light"); if (app_theme.equals("Dark")) { @@ -96,10 +96,7 @@ public abstract class MeasurementView extends TableLayout { public enum DateTimeOrder { FIRST, LAST, NONE } - public static final List getMeasurementList( - Context context, DateTimeOrder dateTimeOrder) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - + public static final List getMeasurementList(Context context, DateTimeOrder dateTimeOrder) { final List sorted = new ArrayList<>(); if (dateTimeOrder == DateTimeOrder.FIRST) { sorted.add(new DateMeasurementView(context)); @@ -148,7 +145,7 @@ public abstract class MeasurementView extends TableLayout { } for (MeasurementView measurement : sorted) { - measurement.setVisible(measurement.getSettings().isEnabled()); + measurement.updatePreferences(prefs); } return sorted; @@ -246,21 +243,14 @@ public abstract class MeasurementView extends TableLayout { public abstract String getKey(); - public MeasurementViewSettings getSettings() { - if (settings == null) { - settings = new MeasurementViewSettings( - PreferenceManager.getDefaultSharedPreferences(getContext()), getKey()); - } - return settings; - } - public abstract void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement); public abstract void saveTo(ScaleMeasurement measurement); - public abstract void clearIn(ScaleMeasurement measurement); public abstract void restoreState(Bundle state); public abstract void saveState(Bundle state); + public abstract void updatePreferences(SharedPreferences preferences); + public CharSequence getName() { return nameView.getText(); } public abstract String getValueAsString(); public void appendDiffValue(SpannableStringBuilder builder) { } @@ -339,7 +329,7 @@ public abstract class MeasurementView extends TableLayout { showEvaluatorRow(false); } - public void setVisible(boolean isVisible) { + protected void setVisible(boolean isVisible) { if (isVisible) { measurementRow.setVisibility(View.VISIBLE); } else { @@ -391,9 +381,6 @@ public abstract class MeasurementView extends TableLayout { return openScale.getSelectedScaleUser(); } - public boolean hasExtraPreferences() { return false; } - public void prepareExtraPreferencesScreen(PreferenceScreen screen) { }; - protected abstract View getInputView(); protected abstract boolean validateAndSetInput(View view); @@ -493,3 +480,4 @@ public abstract class MeasurementView extends TableLayout { } } } + diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewSettings.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewSettings.java deleted file mode 100644 index 22c2af43..00000000 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementViewSettings.java +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 2018 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; - -import android.content.SharedPreferences; - -import com.health.openscale.core.bodymetric.EstimatedFatMetric; -import com.health.openscale.core.bodymetric.EstimatedLBWMetric; -import com.health.openscale.core.bodymetric.EstimatedWaterMetric; - -public class MeasurementViewSettings { - private SharedPreferences preferences; - private String key; - - private static final String PREFERENCE_SUFFIX_ENABLE = "Enable"; - private static final String PREFERENCE_SUFFIX_IN_OVERVIEW_GRAPH = "InOverviewGraph"; - private static final String PREFERENCE_SUFFIX_IN_GRAPH = "InGraph"; - private static final String PREFERENCE_SUFFIX_PERCENTAGE_ENABLE = "PercentageEnable"; - private static final String PREFERENCE_SUFFIX_ESTIMATE_ENABLE = "EstimateEnable"; - private static final String PREFERENCE_SUFFIX_ESTIMATE_FORMULA = "EstimateFormula"; - - public MeasurementViewSettings(SharedPreferences prefs, String key) { - preferences = prefs; - this.key = key; - } - - private String getPreferenceKey(String suffix) { - return key + suffix; - } - - public String getEnabledKey() { - return getPreferenceKey(PREFERENCE_SUFFIX_ENABLE); - } - - public boolean isEnabledIgnoringDependencies() { - boolean defaultValue; - switch (key) { - case WeightMeasurementView.KEY: - // Weight can't be disabled - return true; - case LBWMeasurementView.KEY: - case BoneMeasurementView.KEY: - case WaistMeasurementView.KEY: - case HipMeasurementView.KEY: - defaultValue = false; - break; - default: - defaultValue = true; - break; - } - return preferences.getBoolean(getEnabledKey(), defaultValue); - } - - private boolean isDependencyEnabled(String dependencyKey) { - // Weight can't be disabled - if (dependencyKey.equals(WeightMeasurementView.KEY)) { - return true; - } - - return (new MeasurementViewSettings(preferences, dependencyKey)).isEnabled(); - } - - public boolean areDependenciesEnabled() { - switch (key) { - case BMIMeasurementView.KEY: - case BMRMeasurementView.KEY: - return isDependencyEnabled(WeightMeasurementView.KEY); - - // Requires weight as they are stored as percentage of it - case FatMeasurementView.KEY: - case MuscleMeasurementView.KEY: - case WaterMeasurementView.KEY: - return isDependencyEnabled(WeightMeasurementView.KEY); - - case WHRMeasurementView.KEY: - return isDependencyEnabled(HipMeasurementView.KEY) - && isDependencyEnabled(WaistMeasurementView.KEY); - - case WHtRMeasurementView.KEY: - return isDependencyEnabled(WaistMeasurementView.KEY); - } - return true; - } - - public boolean isEnabled() { - return isEnabledIgnoringDependencies() && areDependenciesEnabled(); - } - - public String getInOverviewGraphKey() { - return getPreferenceKey(PREFERENCE_SUFFIX_IN_OVERVIEW_GRAPH); - } - - public boolean isInOverviewGraph() { - boolean defaultValue; - switch (key) { - case BMRMeasurementView.KEY: - defaultValue = false; - break; - default: - defaultValue = true; - break; - } - return preferences.getBoolean(getInOverviewGraphKey(), defaultValue); - } - - public String getInGraphKey() { - return getPreferenceKey(PREFERENCE_SUFFIX_IN_GRAPH); - } - - public boolean isInGraph() { - return preferences.getBoolean(getInGraphKey(), true); - } - - public String getPercentageEnabledKey() { - return getPreferenceKey(PREFERENCE_SUFFIX_PERCENTAGE_ENABLE); - } - - public boolean isPercentageEnabled() { - return preferences.getBoolean(getPercentageEnabledKey(), true); - } - - public String getEstimationEnabledKey() { - switch (key) { - case FatMeasurementView.KEY: - return "estimateFatEnable"; - case LBWMeasurementView.KEY: - return "estimateLBWEnable"; - case WaterMeasurementView.KEY: - return "estimateWaterEnable"; - } - return getPreferenceKey(PREFERENCE_SUFFIX_ESTIMATE_ENABLE); - } - - public boolean isEstimationEnabled() { - return preferences.getBoolean(getEstimationEnabledKey(), false); - } - - public String getEstimationFormulaKey() { - switch (key) { - case FatMeasurementView.KEY: - return "estimateFatFormula"; - case LBWMeasurementView.KEY: - return "estimateLBWFormula"; - case WaterMeasurementView.KEY: - return "estimateWaterFormula"; - } - return getPreferenceKey(PREFERENCE_SUFFIX_ESTIMATE_FORMULA); - } - - public String getEstimationFormula() { - String defaultValue; - switch (key) { - case FatMeasurementView.KEY: - defaultValue = EstimatedFatMetric.FORMULA.BF_GALLAGHER.name(); - break; - case LBWMeasurementView.KEY: - defaultValue = EstimatedLBWMetric.FORMULA.LBW_HUME.name(); - break; - case WaterMeasurementView.KEY: - defaultValue = EstimatedWaterMetric.FORMULA.TBW_LEESONGKIM.name(); - break; - default: - defaultValue = ""; - break; - } - - return preferences.getString(getEstimationFormulaKey(), defaultValue); - } -} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java index 4b2d7cd7..b18f47fa 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,8 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class MuscleMeasurementView extends FloatMeasurementView { - public static final String KEY = "muscle"; + + private boolean percentageEnable; public MuscleMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.ic_muscle)); @@ -33,12 +35,18 @@ public class MuscleMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "muscle"; } @Override - protected boolean canConvertPercentageToAbsoluteWeight() { - return true; + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("muscleEnable", true)); + percentageEnable = preferences.getBoolean("musclePercentageEnable", true); + } + + @Override + protected boolean shouldConvertPercentageToAbsoluteWeight() { + return !percentageEnable; } @Override @@ -53,11 +61,11 @@ public class MuscleMeasurementView extends FloatMeasurementView { @Override public String getUnit() { - if (shouldConvertPercentageToAbsoluteWeight()) { - return getScaleUser().getScaleUnit().toString(); + if (percentageEnable) { + return "%"; } - return "%"; + return getScaleUser().getScaleUnit().toString(); } @Override 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 15331547..bc59c518 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 @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.view.View; @@ -29,8 +30,6 @@ import java.util.Calendar; import java.util.Date; public class TimeMeasurementView extends MeasurementView { - public static final String KEY = "time"; - private DateFormat timeFormat; private Date time; @@ -41,7 +40,7 @@ public class TimeMeasurementView extends MeasurementView { @Override public String getKey() { - return KEY; + return "time"; } private void setValue(Date newTime, boolean callListener) { @@ -74,11 +73,6 @@ public class TimeMeasurementView extends MeasurementView { measurement.setDateTime(target.getTime()); } - @Override - public void clearIn(ScaleMeasurement measurement) { - // Ignore - } - @Override public void restoreState(Bundle state) { setValue(new Date(state.getLong(getKey())), true); @@ -89,6 +83,11 @@ public class TimeMeasurementView extends MeasurementView { state.putLong(getKey(), time.getTime()); } + @Override + public void updatePreferences(SharedPreferences preferences) { + // Empty + } + @Override public String getValueAsString() { return timeFormat.format(time); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java index 2c9c5919..5cdcb904 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,6 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class WHRMeasurementView extends FloatMeasurementView { - public static final String KEY = "whr"; public WHRMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_whr), ContextCompat.getDrawable(context, R.drawable.ic_whr)); @@ -33,7 +33,13 @@ public class WHRMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "whr"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("hipEnable", false) + && preferences.getBoolean("waistEnable", false)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java index f9e118e6..b60c05ac 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,6 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class WHtRMeasurementView extends FloatMeasurementView { - public static final String KEY = "whtr"; public WHtRMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_whtr), ContextCompat.getDrawable(context, R.drawable.ic_whtr)); @@ -33,7 +33,12 @@ public class WHtRMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "whtr"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("waistEnable", false)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java index aaf827f2..9a776fb0 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -25,7 +26,6 @@ import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class WaistMeasurementView extends FloatMeasurementView { - public static final String KEY = "waist"; public WaistMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_waist), ContextCompat.getDrawable(context, R.drawable.ic_waist)); @@ -33,7 +33,12 @@ public class WaistMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "waist"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("waistEnable", false)); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java index 6f091f1b..53f419f7 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java @@ -16,18 +16,19 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; -import android.preference.ListPreference; import android.support.v4.content.ContextCompat; import com.health.openscale.R; -import com.health.openscale.core.bodymetric.EstimatedWaterMetric; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class WaterMeasurementView extends FloatMeasurementView { - public static final String KEY = "water"; + + private boolean estimateWaterEnable; + private boolean percentageEnable; public WaterMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_water), ContextCompat.getDrawable(context, R.drawable.ic_water)); @@ -35,12 +36,19 @@ public class WaterMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "water"; } @Override - protected boolean canConvertPercentageToAbsoluteWeight() { - return true; + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("waterEnable", true)); + estimateWaterEnable = preferences.getBoolean("estimateWaterEnable", false); + percentageEnable = preferences.getBoolean("waterPercentageEnable", true); + } + + @Override + protected boolean shouldConvertPercentageToAbsoluteWeight() { + return !percentageEnable; } @Override @@ -55,11 +63,11 @@ public class WaterMeasurementView extends FloatMeasurementView { @Override public String getUnit() { - if (shouldConvertPercentageToAbsoluteWeight()) { - return getScaleUser().getScaleUnit().toString(); + if (percentageEnable) { + return "%"; } - return "%"; + return getScaleUser().getScaleUnit().toString(); } @Override @@ -73,22 +81,8 @@ public class WaterMeasurementView extends FloatMeasurementView { } @Override - protected boolean isEstimationSupported() { return true; } - - @Override - protected void prepareEstimationFormulaPreference(ListPreference preference) { - String[] entries = new String[EstimatedWaterMetric.FORMULA.values().length]; - String[] values = new String[entries.length]; - - int idx = 0; - for (EstimatedWaterMetric.FORMULA formula : EstimatedWaterMetric.FORMULA.values()) { - entries[idx] = EstimatedWaterMetric.getEstimatedMetric(formula).getName(); - values[idx] = formula.name(); - ++idx; - } - - preference.setEntries(entries); - preference.setEntryValues(values); + protected boolean isEstimationEnabled() { + return estimateWaterEnable; } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java index f99d8312..b70febcb 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java @@ -16,6 +16,7 @@ package com.health.openscale.gui.views; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.content.ContextCompat; @@ -26,7 +27,6 @@ import com.health.openscale.core.evaluation.EvaluationSheet; import com.health.openscale.core.utils.Converters; public class WeightMeasurementView extends FloatMeasurementView { - public static final String KEY = "weight"; public WeightMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_weight), ContextCompat.getDrawable(context, R.drawable.ic_weight)); @@ -34,7 +34,12 @@ public class WeightMeasurementView extends FloatMeasurementView { @Override public String getKey() { - return KEY; + return "weight"; + } + + @Override + public void updatePreferences(SharedPreferences preferences) { + setVisible(preferences.getBoolean("weightEnable", true)); } @Override diff --git a/android_app/app/src/main/res/layout/measurement_preferences_widget_layout.xml b/android_app/app/src/main/res/layout/measurement_preferences_widget_layout.xml deleted file mode 100644 index 3bef399a..00000000 --- a/android_app/app/src/main/res/layout/measurement_preferences_widget_layout.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file 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 54ea422a..14864e3a 100644 --- a/android_app/app/src/main/res/values-ca/strings.xml +++ b/android_app/app/src/main/res/values-ca/strings.xml @@ -113,12 +113,21 @@ Confirmació d\'eliminació + Estimació d\'aigua corporal + Estimació de massa corporal magra + Estimació de greix corporal + + Mostreu + Estimació de mètriques corporals Base de dades de mesures Responsable Pàgina Web Llicència + Fórmula d\'aigua corporal + Fórmula de massa corporal magra + Fórmula de greix corporal automàtic Recordatori 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 1fae820d..c46fdee5 100644 --- a/android_app/app/src/main/res/values-cs/strings.xml +++ b/android_app/app/src/main/res/values-cs/strings.xml @@ -29,6 +29,10 @@ Komentář Chytré přiřazení uživatele + Tělesný tuk v % + Tělesná voda v % + Svalová hmota v % + %d den %d dny @@ -96,6 +100,10 @@ Potvrzení smazání + Odhadnout vodu v těle + Odhadnout tělesný tuk + + Zobrazit Správce Webové stránky Licence 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 08e71600..3e5d99f3 100644 --- a/android_app/app/src/main/res/values-de/strings.xml +++ b/android_app/app/src/main/res/values-de/strings.xml @@ -122,7 +122,15 @@ Maximale Anzahl gleichzeitiger Benutzer erreicht Bitte steigen Sie barfuß auf die Waage zur Referenzmessung auto + Körpermetriken abschätzen + Anzeige Messwertedatenbank + Körperfettschätzung + Körperfettformel + Körperwasserschätzung + Körperwasserformel + Fettfreie Körpermassenschätzung + Fettfreie Körpermassenformel Fettfreie Körpermasse Lizenz Hauptentwickler @@ -132,6 +140,9 @@ schließen Kein Bluetooth Gerät ausgewählt Messung mit gleichen Datum und Uhrzeit exisitiert bereits + Körperfett in % + Wasseranteil in % + Muskelanteil in % Gefällt Dir openScale? Wie wäre es dann mit einer Bewertung bei GooglePlay oder bei GitHub? Ja! @@ -163,6 +174,7 @@ openScale benötigt die Erlaubnis, auf den ungefähren Standort zuzugreifen, um nach Bluetooth-Geräten suchen zu können. Information Weiter + Messwert Reihenfolge Halten Sie die Taste gedrückt, um die Reihenfolge zu ändern Default Reihenfolge wiederherstellen openScale CSV Datenexport (%s) 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 b9677d86..f9f6b672 100644 --- a/android_app/app/src/main/res/values-es/strings.xml +++ b/android_app/app/src/main/res/values-es/strings.xml @@ -113,12 +113,21 @@ Confirmación de borrado + Estimación de agua corporal + Estimación de masa corporal magra + Estimación de grasa coporal + + Mostrar + Estimación de métricas corporales Base de datos de mediciones Responsable Página Web Licencia + Fórmula de agua corporal + Fórmula de masa corporal magra + Fórmula de grasa corporal automático Recordatorio @@ -160,6 +169,10 @@ Compartir + Grasa corporal en % + Porcentaje de agua en % + Porcentaje muscular en % + Error: el nombre de usuario tiene que tener al menos 3 carácteres "No hay dispositivo Bluetooth seleccionado " Medición con al misma fecha y hora ya existe 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 78fa1300..8950dd40 100644 --- a/android_app/app/src/main/res/values-nl/strings.xml +++ b/android_app/app/src/main/res/values-nl/strings.xml @@ -115,12 +115,21 @@ Bevestiging verwijderen + Geschat vochtmassa + Geschat vetvrije massa + Geschat vetmassa + + Scherm + Schatting Lichaamssamenstelling Metingen database Beheerder Website Licentie + Formule vochtmassa + Formule vetvrije massa + Formule vetmassa auto Herinnering @@ -160,6 +169,10 @@ Delen openScale CSV data exporteren (%s) + Lichaamsvet in % + Lichaamsvocht in % + Spiermassa in % + Fout: Gebruikersnaam dient minimaal 3 karakters lang te zijn Geen Bluetooth apparaat geselecteerd Meting met een zelfde datum en tijd bestaat al @@ -201,6 +214,7 @@ openScale heeft toestemming nodig tot uw locatie om te kunnen zoeken naar Bluetooth apparaten Informatie Volgende + Meting volgorde Indrukken en vasthouden om opnieuw in te delen Stel standaard volgorde in Vorige export \"%s\" overschrijven? 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 6b9db77c..d7e468ff 100644 --- a/android_app/app/src/main/res/values-pl/strings.xml +++ b/android_app/app/src/main/res/values-pl/strings.xml @@ -38,7 +38,11 @@ Stosunek obwodu talii do obwodu bioder Masa kostna Inteligente przypisywanie użytkowników - + + Tkanka tłusczowa w % + Woda w organizmie w % + Masa mięśniowa w % + %d dni @@ -122,12 +126,21 @@ Potwierdzenie usnięcia + Wznaczaj procent wody w organizmie + Wyznaczaj beztłuszczową masę ciała + Wyznaczaj procent tkanki tłuszczowej + + Wyświetl + Wyznaczanie wskaźników dla ciała Baza pomiarów Opiekun Strona internetowa Licencja - + + Formuła wyznaczania wody w organizmie + Formuła wyznaczania beztłuszczowej masy ciała + Formuła wyznaczania tkanki tłuszczowej auto Motyw @@ -192,6 +205,7 @@ openScale requires permission to access the coarse location to search for Bluetooth devices Informacje Następny + Kolejność pomiarów Naciśnij i przytrzymaj by zmienić kolejność Ustaw domyślną kolejność Nadpisać poprzedni eksport \"%s\"? 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 331f25a4..7ec932fc 100644 --- a/android_app/app/src/main/res/values-sk/strings.xml +++ b/android_app/app/src/main/res/values-sk/strings.xml @@ -129,13 +129,20 @@ Zdieľať openScale CSV export údajov (%s) + Telesný tuk v % + Voda v tele v % + Svalstvo v % + Chyba: používateľské meno musí obsahovať minimálne 3 znaky Nevybrali ste žiadne bluetooth zariadenie meranie s rovnakým dátumom a časom už existuje Zlúčiť s posledným meraním Hľadanie bluetooth váh sa dokončilo + Odhadnúť vodu v tele + Odhadnúť telesný tuk + Zobraziť Databáza meraní Správca @@ -178,6 +185,7 @@ openScale vyžaduje povolenie prístupu k približnej polohe na vyhľadávanie bluetooth zariadení Informácie Ďalej + Radenie meraní Stlačte a podržte pre zmenu radenia Nastaviť predvolené radenie Prepísať predchádzajúci export \"%s\"? 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 f5dd1a18..2a9a913f 100644 --- a/android_app/app/src/main/res/values-sv/strings.xml +++ b/android_app/app/src/main/res/values-sv/strings.xml @@ -109,8 +109,16 @@ Etikett på datapunkt Punkt på datapunkt Borttagningsbekräftelse + Estimera kroppsvatten + Estimera fettfri kroppsvikt + Estimera kroppsfett + Visa + Uppskatta mätvärden Mätningsdatabas Utvecklare + Formel för kroppsvatten + Formel för fettfri kroppsvikt + Formel för kroppsfett auto Påminnelse Meddelandetext @@ -130,6 +138,9 @@ Mäter vikt: %.2f öppna stäng + Kroppsfett i % + Muskler i % + Kroppsvatten i % Ingen Bluetooth-enhet vald mätning med samma datum och tid existerar redan Allmänt @@ -169,6 +180,7 @@ openScale CSV dataexport (%s) Nästa + Mätordning Tryck och håll för att ändra ordning Ställ in standardordning 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 b037cacc..a488c717 100644 --- a/android_app/app/src/main/res/values-tr/strings.xml +++ b/android_app/app/src/main/res/values-tr/strings.xml @@ -111,12 +111,21 @@ Delete confirmation + Tahmini Vücüt suyu oraný + Tahmini Yaðsýz vücüt oraný + Tahmini Vücüt yað oraný + + Display + Vücüt ölçütleri tahmini Ölçüm veritabaný Maintainer Websitesi Lisan + Vücüt oraný hesaplama formulü + Yað oraný hesaplama formulü + Vücut yaðý formülü otomatik Hatýrlatma diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 9160ad12..ac8ab77c 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -40,6 +40,10 @@ Bone mass Smart User assignment + Body fat in % + Body water in % + Muscle in % + %d day %d days @@ -123,12 +127,21 @@ Delete confirmation + Estimate body water + Estimate lean body weight + Estimate body fat + + Display + Body metrics estimation Measurement database Maintainer Website License + Body water formula + Lean body weight formula + Body fat formula auto Theme @@ -193,11 +206,10 @@ openScale requires permission to access the coarse location to search for Bluetooth devices Information Next + Measurement order Press and hold to reorder Set default order Overwrite previous export \"%s\"? - Include in overview graph - Measurement in % - Estimate measurement - Estimation formula + + diff --git a/android_app/app/src/main/res/xml/measurement_preferences.xml b/android_app/app/src/main/res/xml/measurement_preferences.xml index 09e510a3..d2ad7288 100644 --- a/android_app/app/src/main/res/xml/measurement_preferences.xml +++ b/android_app/app/src/main/res/xml/measurement_preferences.xml @@ -1,7 +1,29 @@ - - + + + + + + + + + + + + + + + + + + + + + + + +