mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-20 23:41:45 +02:00
@@ -43,6 +43,7 @@ import com.health.openscale.gui.views.DateMeasurementView;
|
|||||||
import com.health.openscale.gui.views.MeasurementView;
|
import com.health.openscale.gui.views.MeasurementView;
|
||||||
import com.health.openscale.gui.views.MeasurementViewUpdateListener;
|
import com.health.openscale.gui.views.MeasurementViewUpdateListener;
|
||||||
import com.health.openscale.gui.views.TimeMeasurementView;
|
import com.health.openscale.gui.views.TimeMeasurementView;
|
||||||
|
import com.health.openscale.gui.views.WeightMeasurementView;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -446,6 +447,17 @@ public class DataEntryActivity extends AppCompatActivity {
|
|||||||
view.saveTo(scaleMeasurement);
|
view.saveTo(scaleMeasurement);
|
||||||
isDirty = true;
|
isDirty = true;
|
||||||
|
|
||||||
|
// When weight is updated we may need to re-save some values that are stored
|
||||||
|
// as percentages, but that the user may have set up to be shown as absolute.
|
||||||
|
// Otherwise that measurement (e.g. fat) may change when weight is updated.
|
||||||
|
if (view instanceof WeightMeasurementView) {
|
||||||
|
for (MeasurementView measurement : dataEntryMeasurements) {
|
||||||
|
if (measurement != view) {
|
||||||
|
measurement.saveTo(scaleMeasurement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
txtDataNr.setText(DateFormat.getDateTimeInstance(
|
txtDataNr.setText(DateFormat.getDateTimeInstance(
|
||||||
DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime()));
|
DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime()));
|
||||||
|
|
||||||
|
@@ -47,21 +47,18 @@ public class FatMeasurementView extends FloatMeasurementView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||||
if (percentageEnable) {
|
return !percentageEnable;
|
||||||
return measurement.getFat();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getFat();
|
@Override
|
||||||
|
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||||
|
return measurement.getFat();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||||
if (percentageEnable) {
|
measurement.setFat(value);
|
||||||
measurement.setFat(value);
|
|
||||||
} else {
|
|
||||||
measurement.setFat(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -75,11 +72,7 @@ public class FatMeasurementView extends FloatMeasurementView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMaxValue() {
|
protected float getMaxValue() {
|
||||||
if (percentageEnable) {
|
return maybeConvertPercentageToAbsolute(80);
|
||||||
return 80;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 300;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -54,6 +54,7 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
|||||||
private Date dateTime;
|
private Date dateTime;
|
||||||
private float value = NO_VALUE;
|
private float value = NO_VALUE;
|
||||||
private float previousValue = NO_VALUE;
|
private float previousValue = NO_VALUE;
|
||||||
|
private float userConvertedWeight;
|
||||||
private EvaluationResult evaluationResult;
|
private EvaluationResult evaluationResult;
|
||||||
|
|
||||||
private String nameText;
|
private String nameText;
|
||||||
@@ -134,7 +135,16 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
|||||||
|
|
||||||
if (getMeasurementMode() != MeasurementViewMode.ADD) {
|
if (getMeasurementMode() != MeasurementViewMode.ADD) {
|
||||||
EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser(), dateTime);
|
EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser(), dateTime);
|
||||||
evaluationResult = evaluateSheet(evalSheet, value);
|
float evalValue = value;
|
||||||
|
if (shouldConvertPercentageToAbsoluteWeight()) {
|
||||||
|
evalValue = makeRelativeWeight(value);
|
||||||
|
}
|
||||||
|
evaluationResult = evaluateSheet(evalSheet, evalValue);
|
||||||
|
if (shouldConvertPercentageToAbsoluteWeight()) {
|
||||||
|
evaluationResult.value = value;
|
||||||
|
evaluationResult.lowLimit = makeAbsoluteWeight(evaluationResult.lowLimit);
|
||||||
|
evaluationResult.highLimit = makeAbsoluteWeight(evaluationResult.highLimit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setEvaluationView(evaluationResult);
|
setEvaluationView(evaluationResult);
|
||||||
@@ -227,6 +237,38 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
|||||||
return isEstimationEnabled() && getMeasurementMode() == MeasurementViewMode.ADD;
|
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
|
@Override
|
||||||
public void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement) {
|
public void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement) {
|
||||||
dateTime = measurement.getDateTime();
|
dateTime = measurement.getDateTime();
|
||||||
@@ -235,9 +277,21 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
|||||||
float newPreviousValue = NO_VALUE;
|
float newPreviousValue = NO_VALUE;
|
||||||
|
|
||||||
if (!useAutoValue()) {
|
if (!useAutoValue()) {
|
||||||
newValue = clampValue(getMeasurementValue(measurement));
|
updateUserConvertedWeight(measurement);
|
||||||
|
|
||||||
|
newValue = getMeasurementValue(measurement);
|
||||||
|
newValue = maybeConvertPercentageToAbsolute(newValue);
|
||||||
|
newValue = clampValue(newValue);
|
||||||
|
|
||||||
if (previousMeasurement != null) {
|
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 +301,14 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
|||||||
@Override
|
@Override
|
||||||
public void saveTo(ScaleMeasurement measurement) {
|
public void saveTo(ScaleMeasurement measurement) {
|
||||||
if (!useAutoValue()) {
|
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
|
@Override
|
||||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||||
if (percentageEnable) {
|
return !percentageEnable;
|
||||||
return measurement.getMuscle();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getMuscle();
|
@Override
|
||||||
|
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||||
|
return measurement.getMuscle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||||
if (percentageEnable) {
|
measurement.setMuscle(value);
|
||||||
measurement.setMuscle(value);
|
|
||||||
} else {
|
|
||||||
measurement.setMuscle(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -73,11 +70,7 @@ public class MuscleMeasurementView extends FloatMeasurementView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMaxValue() {
|
protected float getMaxValue() {
|
||||||
if (percentageEnable) {
|
return maybeConvertPercentageToAbsolute(80);
|
||||||
return 80;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 300;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -47,21 +47,18 @@ public class WaterMeasurementView extends FloatMeasurementView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
protected boolean shouldConvertPercentageToAbsoluteWeight() {
|
||||||
if (percentageEnable) {
|
return !percentageEnable;
|
||||||
return measurement.getWater();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getWater();
|
@Override
|
||||||
|
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||||
|
return measurement.getWater();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||||
if (percentageEnable) {
|
measurement.setWater(value);
|
||||||
measurement.setWater(value);
|
|
||||||
} else {
|
|
||||||
measurement.setWater(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -75,11 +72,7 @@ public class WaterMeasurementView extends FloatMeasurementView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMaxValue() {
|
protected float getMaxValue() {
|
||||||
if (percentageEnable) {
|
return maybeConvertPercentageToAbsolute(80);
|
||||||
return 80;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 300;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user