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 6be71b08..64aff159 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 @@ -27,6 +27,7 @@ import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; import android.preference.PreferenceManager; +import android.preference.SwitchPreference; import android.widget.Toast; import com.health.openscale.R; @@ -41,6 +42,12 @@ import java.util.Set; 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"; @@ -49,6 +56,14 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared public static final String PREFERENCE_KEY_ESTIMATE_FAT_FORMULA = "estimateFatFormula"; private Preference deleteAll; + + 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; @@ -72,6 +87,13 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared 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(); @@ -167,6 +189,24 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared 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()); 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 a7d6b242..89f8e130 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 @@ -21,12 +21,14 @@ import android.support.v4.content.ContextCompat; import com.health.openscale.R; import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class FatMeasurementView extends FloatMeasurementView { 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)); @@ -36,26 +38,43 @@ public class FatMeasurementView extends FloatMeasurementView { public void updatePreferences(SharedPreferences preferences) { setVisible(preferences.getBoolean("fatEnable", true)); estimateFatEnable = preferences.getBoolean("estimateFatEnable", false); + percentageEnable = preferences.getBoolean("fatPercentageEnable", true); } @Override protected float getMeasurementValue(ScaleMeasurement measurement) { - return measurement.getFat(); + if (percentageEnable) { + return measurement.getFat(); + } + + return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getFat(); } @Override protected void setMeasurementValue(float value, ScaleMeasurement measurement) { - measurement.setFat(value); + if (percentageEnable) { + measurement.setFat(value); + } else { + measurement.setFat(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value); + } } @Override protected String getUnit() { - return "%"; + if (percentageEnable) { + return "%"; + } + + return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; } @Override protected float getMaxValue() { - return 80; + if (percentageEnable) { + return 80; + } + + return 300; } @Override 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 8751ffc9..594e3f29 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 @@ -21,11 +21,14 @@ import android.support.v4.content.ContextCompat; import com.health.openscale.R; import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class MuscleMeasurementView extends FloatMeasurementView { + private boolean percentageEnable; + public MuscleMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.ic_muscle)); } @@ -33,26 +36,43 @@ public class MuscleMeasurementView extends FloatMeasurementView { @Override public void updatePreferences(SharedPreferences preferences) { setVisible(preferences.getBoolean("muscleEnable", true)); + percentageEnable = preferences.getBoolean("musclePercentageEnable", true); } @Override protected float getMeasurementValue(ScaleMeasurement measurement) { - return measurement.getMuscle(); + if (percentageEnable) { + return measurement.getMuscle(); + } + + return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getMuscle(); } @Override protected void setMeasurementValue(float value, ScaleMeasurement measurement) { - measurement.setMuscle(value); + if (percentageEnable) { + measurement.setMuscle(value); + } else { + measurement.setMuscle(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value); + } } @Override protected String getUnit() { - return "%"; + if (percentageEnable) { + return "%"; + } + + return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; } @Override protected float getMaxValue() { - return 80; + if (percentageEnable) { + return 80; + } + + return 300; } @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 b901f5db..1c15e6f5 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 @@ -21,12 +21,14 @@ import android.support.v4.content.ContextCompat; import com.health.openscale.R; import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.health.openscale.core.datatypes.ScaleUser; import com.health.openscale.core.evaluation.EvaluationResult; import com.health.openscale.core.evaluation.EvaluationSheet; public class WaterMeasurementView extends FloatMeasurementView { 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)); @@ -36,26 +38,43 @@ public class WaterMeasurementView extends FloatMeasurementView { public void updatePreferences(SharedPreferences preferences) { setVisible(preferences.getBoolean("waterEnable", true)); estimateWaterEnable = preferences.getBoolean("estimateWaterEnable", false); + percentageEnable = preferences.getBoolean("waterPercentageEnable", true); } @Override protected float getMeasurementValue(ScaleMeasurement measurement) { - return measurement.getWater(); + if (percentageEnable) { + return measurement.getWater(); + } + + return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getWater(); } @Override protected void setMeasurementValue(float value, ScaleMeasurement measurement) { - measurement.setWater(value); + if (percentageEnable) { + measurement.setWater(value); + } else { + measurement.setWater(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value); + } } @Override protected String getUnit() { - return "%"; + if (percentageEnable) { + return "%"; + } + + return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; } @Override protected float getMaxValue() { - return 80; + if (percentageEnable) { + return 80; + } + + return 300; } @Override 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 b6d6b07e..a37f6dc4 100644 --- a/android_app/app/src/main/res/values-de/strings.xml +++ b/android_app/app/src/main/res/values-de/strings.xml @@ -160,4 +160,7 @@ schließen Kein Bluetooth Gerät ausgewählt Messung mit gleichen Datum und Uhrzeit exisitiert bereits + Körperfett in % + Wasseranteil in % + Muskelanteil in % \ No newline at end of file diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 718796a4..38d7aa8c 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 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 21609e90..aa23c650 100644 --- a/android_app/app/src/main/res/xml/measurement_preferences.xml +++ b/android_app/app/src/main/res/xml/measurement_preferences.xml @@ -2,8 +2,11 @@ + + +