mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-20 07:21:40 +02:00
Move conversion to/from absolute/relative weight to base class
This commit is contained in:
@@ -47,21 +47,18 @@ public class FatMeasurementView extends FloatMeasurementView {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||
if (percentageEnable) {
|
||||
return measurement.getFat();
|
||||
}
|
||||
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||
return !percentageEnable;
|
||||
}
|
||||
|
||||
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getFat();
|
||||
@Override
|
||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||
return measurement.getFat();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||
if (percentageEnable) {
|
||||
measurement.setFat(value);
|
||||
} else {
|
||||
measurement.setFat(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
||||
}
|
||||
measurement.setFat(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,11 +72,7 @@ public class FatMeasurementView extends FloatMeasurementView {
|
||||
|
||||
@Override
|
||||
protected float getMaxValue() {
|
||||
if (percentageEnable) {
|
||||
return 80;
|
||||
}
|
||||
|
||||
return 300;
|
||||
return maybeConvertPercentageToAbsolute(80);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -54,6 +54,7 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
||||
private Date dateTime;
|
||||
private float value = NO_VALUE;
|
||||
private float previousValue = NO_VALUE;
|
||||
private float userConvertedWeight;
|
||||
private EvaluationResult evaluationResult;
|
||||
|
||||
private String nameText;
|
||||
@@ -227,6 +228,38 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
||||
return isEstimationEnabled() && getMeasurementMode() == MeasurementViewMode.ADD;
|
||||
}
|
||||
|
||||
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private float makeAbsoluteWeight(float percentage) {
|
||||
return userConvertedWeight / 100.0f * percentage;
|
||||
}
|
||||
|
||||
private float makeRelativeWeight(float absolute) {
|
||||
return 100.0f / userConvertedWeight * absolute;
|
||||
}
|
||||
|
||||
protected float maybeConvertPercentageToAbsolute(float value) {
|
||||
if (shouldConvertPercentageToAbsoluteWeight()) {
|
||||
return makeAbsoluteWeight(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private void updateUserConvertedWeight(ScaleMeasurement measurement) {
|
||||
if (shouldConvertPercentageToAbsoluteWeight()) {
|
||||
// Make sure weight is never 0 to avoid division by 0
|
||||
userConvertedWeight = Math.max(1.0f,
|
||||
measurement.getConvertedWeight(getScaleUser().getScaleUnit()));
|
||||
}
|
||||
else {
|
||||
// Only valid when shouldConvertPercentageToAbsoluteWeight() returns true
|
||||
userConvertedWeight = -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement) {
|
||||
dateTime = measurement.getDateTime();
|
||||
@@ -235,9 +268,21 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
||||
float newPreviousValue = NO_VALUE;
|
||||
|
||||
if (!useAutoValue()) {
|
||||
newValue = clampValue(getMeasurementValue(measurement));
|
||||
updateUserConvertedWeight(measurement);
|
||||
|
||||
newValue = getMeasurementValue(measurement);
|
||||
newValue = maybeConvertPercentageToAbsolute(newValue);
|
||||
newValue = clampValue(newValue);
|
||||
|
||||
if (previousMeasurement != null) {
|
||||
newPreviousValue = clampValue(getMeasurementValue(previousMeasurement));
|
||||
float saveUserConvertedWeight = userConvertedWeight;
|
||||
updateUserConvertedWeight(previousMeasurement);
|
||||
|
||||
newPreviousValue = getMeasurementValue(previousMeasurement);
|
||||
newPreviousValue = maybeConvertPercentageToAbsolute(newPreviousValue);
|
||||
newPreviousValue = clampValue(newPreviousValue);
|
||||
|
||||
userConvertedWeight = saveUserConvertedWeight;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,7 +292,14 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
||||
@Override
|
||||
public void saveTo(ScaleMeasurement measurement) {
|
||||
if (!useAutoValue()) {
|
||||
setMeasurementValue(value, measurement);
|
||||
if (shouldConvertPercentageToAbsoluteWeight()) {
|
||||
// Make sure to use the current weight to get a correct percentage
|
||||
updateUserConvertedWeight(measurement);
|
||||
setMeasurementValue(makeRelativeWeight(value), measurement);
|
||||
}
|
||||
else {
|
||||
setMeasurementValue(value, measurement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -45,21 +45,18 @@ public class MuscleMeasurementView extends FloatMeasurementView {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||
if (percentageEnable) {
|
||||
return measurement.getMuscle();
|
||||
}
|
||||
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||
return !percentageEnable;
|
||||
}
|
||||
|
||||
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getMuscle();
|
||||
@Override
|
||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||
return measurement.getMuscle();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||
if (percentageEnable) {
|
||||
measurement.setMuscle(value);
|
||||
} else {
|
||||
measurement.setMuscle(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
||||
}
|
||||
measurement.setMuscle(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -73,11 +70,7 @@ public class MuscleMeasurementView extends FloatMeasurementView {
|
||||
|
||||
@Override
|
||||
protected float getMaxValue() {
|
||||
if (percentageEnable) {
|
||||
return 80;
|
||||
}
|
||||
|
||||
return 300;
|
||||
return maybeConvertPercentageToAbsolute(80);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -47,21 +47,18 @@ public class WaterMeasurementView extends FloatMeasurementView {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||
if (percentageEnable) {
|
||||
return measurement.getWater();
|
||||
}
|
||||
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||
return !percentageEnable;
|
||||
}
|
||||
|
||||
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getWater();
|
||||
@Override
|
||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||
return measurement.getWater();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||
if (percentageEnable) {
|
||||
measurement.setWater(value);
|
||||
} else {
|
||||
measurement.setWater(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
||||
}
|
||||
measurement.setWater(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,11 +72,7 @@ public class WaterMeasurementView extends FloatMeasurementView {
|
||||
|
||||
@Override
|
||||
protected float getMaxValue() {
|
||||
if (percentageEnable) {
|
||||
return 80;
|
||||
}
|
||||
|
||||
return 300;
|
||||
return maybeConvertPercentageToAbsolute(80);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user