1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-09-01 20:33:31 +02:00

Make it possible to show/input bone in %

Fixes #246.
This commit is contained in:
Erik Johansson
2018-04-19 22:34:31 +02:00
parent af79227891
commit 36adc936bb
6 changed files with 89 additions and 27 deletions

View File

@@ -38,6 +38,11 @@ public class BoneMeasurementView extends FloatMeasurementView {
return KEY; return KEY;
} }
@Override
protected boolean supportsAbsoluteWeightToPercentageConversion() {
return true;
}
@Override @Override
protected float getMeasurementValue(ScaleMeasurement measurement) { protected float getMeasurementValue(ScaleMeasurement measurement) {
return Converters.fromKilogram(measurement.getBone(), getScaleUser().getScaleUnit()); return Converters.fromKilogram(measurement.getBone(), getScaleUser().getScaleUnit());
@@ -50,12 +55,17 @@ public class BoneMeasurementView extends FloatMeasurementView {
@Override @Override
public String getUnit() { public String getUnit() {
if (shouldConvertAbsoluteWeightToPercentage()) {
return "%";
}
return getScaleUser().getScaleUnit().toString(); return getScaleUser().getScaleUnit().toString();
} }
@Override @Override
protected float getMaxValue() { protected float getMaxValue() {
return Converters.fromKilogram(50, getScaleUser().getScaleUnit()); return maybeConvertAbsoluteWeightToPercentage(
Converters.fromKilogram(50, getScaleUser().getScaleUnit()));
} }
@Override @Override

View File

@@ -40,7 +40,7 @@ public class FatMeasurementView extends FloatMeasurementView {
} }
@Override @Override
protected boolean canConvertPercentageToAbsoluteWeight() { protected boolean supportsPercentageToAbsoluteWeightConversion() {
return true; return true;
} }
@@ -65,7 +65,7 @@ public class FatMeasurementView extends FloatMeasurementView {
@Override @Override
protected float getMaxValue() { protected float getMaxValue() {
return maybeConvertPercentageToAbsolute(80); return maybeConvertPercentageToAbsoluteWeight(80);
} }
@Override @Override

View File

@@ -142,16 +142,15 @@ public abstract class FloatMeasurementView extends MeasurementView {
setValueView(formatValue(value) + suffix, callListener); setValueView(formatValue(value) + suffix, callListener);
if (getMeasurementMode() != MeasurementViewMode.ADD) { if (getMeasurementMode() != MeasurementViewMode.ADD) {
final float evalValue = maybeConvertValue(value);
EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser(), dateTime); EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser(), dateTime);
float evalValue = value;
if (shouldConvertPercentageToAbsoluteWeight()) {
evalValue = makeRelativeWeight(value);
}
evaluationResult = evaluateSheet(evalSheet, evalValue); evaluationResult = evaluateSheet(evalSheet, evalValue);
if (shouldConvertPercentageToAbsoluteWeight()) {
if (evaluationResult != null) {
evaluationResult.value = value; evaluationResult.value = value;
evaluationResult.lowLimit = makeAbsoluteWeight(evaluationResult.lowLimit); evaluationResult.lowLimit = maybeConvertValue(evaluationResult.lowLimit);
evaluationResult.highLimit = makeAbsoluteWeight(evaluationResult.highLimit); evaluationResult.highLimit = maybeConvertValue(evaluationResult.highLimit);
} }
} }
} }
@@ -246,12 +245,30 @@ public abstract class FloatMeasurementView extends MeasurementView {
&& getMeasurementMode() == MeasurementViewMode.ADD; && getMeasurementMode() == MeasurementViewMode.ADD;
} }
protected boolean canConvertPercentageToAbsoluteWeight() { return false; } // Only one of these can return true
protected boolean supportsAbsoluteWeightToPercentageConversion() { return false; }
protected boolean supportsPercentageToAbsoluteWeightConversion() { return false; }
private boolean supportsConversion() {
return supportsAbsoluteWeightToPercentageConversion()
|| supportsPercentageToAbsoluteWeightConversion();
}
protected boolean shouldConvertAbsoluteWeightToPercentage() {
return supportsAbsoluteWeightToPercentageConversion()
&& getSettings().isPercentageEnabled();
}
protected boolean shouldConvertPercentageToAbsoluteWeight() { protected boolean shouldConvertPercentageToAbsoluteWeight() {
return canConvertPercentageToAbsoluteWeight() return supportsPercentageToAbsoluteWeightConversion()
&& !getSettings().isPercentageEnabled(); && !getSettings().isPercentageEnabled();
} }
private boolean shouldConvert() {
return shouldConvertAbsoluteWeightToPercentage()
|| shouldConvertPercentageToAbsoluteWeight();
}
private float makeAbsoluteWeight(float percentage) { private float makeAbsoluteWeight(float percentage) {
return userConvertedWeight / 100.0f * percentage; return userConvertedWeight / 100.0f * percentage;
} }
@@ -260,7 +277,26 @@ public abstract class FloatMeasurementView extends MeasurementView {
return 100.0f / userConvertedWeight * absolute; return 100.0f / userConvertedWeight * absolute;
} }
protected float maybeConvertPercentageToAbsolute(float value) { protected float maybeConvertAbsoluteWeightToPercentage(float value) {
if (shouldConvertAbsoluteWeightToPercentage()) {
return makeRelativeWeight(value);
}
return value;
}
protected float maybeConvertPercentageToAbsoluteWeight(float value) {
if (shouldConvertPercentageToAbsoluteWeight()) {
return makeAbsoluteWeight(value);
}
return value;
}
private float maybeConvertValue(float value) {
if (shouldConvertAbsoluteWeightToPercentage()) {
return makeRelativeWeight(value);
}
if (shouldConvertPercentageToAbsoluteWeight()) { if (shouldConvertPercentageToAbsoluteWeight()) {
return makeAbsoluteWeight(value); return makeAbsoluteWeight(value);
} }
@@ -269,13 +305,13 @@ public abstract class FloatMeasurementView extends MeasurementView {
} }
private void updateUserConvertedWeight(ScaleMeasurement measurement) { private void updateUserConvertedWeight(ScaleMeasurement measurement) {
if (shouldConvertPercentageToAbsoluteWeight()) { if (shouldConvert()) {
// Make sure weight is never 0 to avoid division by 0 // Make sure weight is never 0 to avoid division by 0
userConvertedWeight = Math.max(1.0f, userConvertedWeight = Math.max(1.0f,
measurement.getConvertedWeight(getScaleUser().getScaleUnit())); measurement.getConvertedWeight(getScaleUser().getScaleUnit()));
} }
else { else {
// Only valid when shouldConvertPercentageToAbsoluteWeight() returns true // Only valid when a conversion is enabled
userConvertedWeight = -1.0f; userConvertedWeight = -1.0f;
} }
} }
@@ -291,7 +327,7 @@ public abstract class FloatMeasurementView extends MeasurementView {
updateUserConvertedWeight(measurement); updateUserConvertedWeight(measurement);
newValue = getMeasurementValue(measurement); newValue = getMeasurementValue(measurement);
newValue = maybeConvertPercentageToAbsolute(newValue); newValue = maybeConvertValue(newValue);
newValue = clampValue(newValue); newValue = clampValue(newValue);
if (previousMeasurement != null) { if (previousMeasurement != null) {
@@ -299,7 +335,7 @@ public abstract class FloatMeasurementView extends MeasurementView {
updateUserConvertedWeight(previousMeasurement); updateUserConvertedWeight(previousMeasurement);
newPreviousValue = getMeasurementValue(previousMeasurement); newPreviousValue = getMeasurementValue(previousMeasurement);
newPreviousValue = maybeConvertPercentageToAbsolute(newPreviousValue); newPreviousValue = maybeConvertValue(newPreviousValue);
newPreviousValue = clampValue(newPreviousValue); newPreviousValue = clampValue(newPreviousValue);
userConvertedWeight = saveUserConvertedWeight; userConvertedWeight = saveUserConvertedWeight;
@@ -312,10 +348,17 @@ public abstract class FloatMeasurementView extends MeasurementView {
@Override @Override
public void saveTo(ScaleMeasurement measurement) { public void saveTo(ScaleMeasurement measurement) {
if (!useAutoValue()) { if (!useAutoValue()) {
if (shouldConvertPercentageToAbsoluteWeight()) { if (shouldConvert()) {
// Make sure to use the current weight to get a correct percentage // Make sure to use the current weight to get a correct value
updateUserConvertedWeight(measurement); updateUserConvertedWeight(measurement);
setMeasurementValue(makeRelativeWeight(value), measurement);
// Need to convert back to original value before setting
if (shouldConvertPercentageToAbsoluteWeight()) {
setMeasurementValue(makeRelativeWeight(value), measurement);
}
else if (shouldConvertAbsoluteWeightToPercentage()){
setMeasurementValue(makeAbsoluteWeight(value), measurement);
}
} }
else { else {
setMeasurementValue(value, measurement); setMeasurementValue(value, measurement);
@@ -430,7 +473,7 @@ public abstract class FloatMeasurementView extends MeasurementView {
if (settings.isInOverviewGraph()) { if (settings.isInOverviewGraph()) {
summary += res.getString(R.string.label_overview_graph) + separator; summary += res.getString(R.string.label_overview_graph) + separator;
} }
if (canConvertPercentageToAbsoluteWeight() && settings.isPercentageEnabled()) { if (supportsConversion() && settings.isPercentageEnabled()) {
summary += res.getString(R.string.label_percent) + separator; summary += res.getString(R.string.label_percent) + separator;
} }
if (isEstimationSupported() && settings.isEstimationEnabled()) { if (isEstimationSupported() && settings.isEstimationEnabled()) {
@@ -458,7 +501,7 @@ public abstract class FloatMeasurementView extends MeasurementView {
overview.setDefaultValue(settings.isInOverviewGraph()); overview.setDefaultValue(settings.isInOverviewGraph());
screen.addPreference(overview); screen.addPreference(overview);
if (canConvertPercentageToAbsoluteWeight()) { if (supportsConversion()) {
SwitchPreference percentage = new SwitchPreference(screen.getContext()); SwitchPreference percentage = new SwitchPreference(screen.getContext());
percentage.setKey(settings.getPercentageEnabledKey()); percentage.setKey(settings.getPercentageEnabledKey());
percentage.setTitle(R.string.label_measurement_in_percent); percentage.setTitle(R.string.label_measurement_in_percent);

View File

@@ -130,7 +130,16 @@ public class MeasurementViewSettings {
} }
public boolean isPercentageEnabled() { public boolean isPercentageEnabled() {
return preferences.getBoolean(getPercentageEnabledKey(), true); boolean defaultValue;
switch (key) {
case BoneMeasurementView.KEY:
defaultValue = false;
break;
default:
defaultValue = true;
break;
}
return preferences.getBoolean(getPercentageEnabledKey(), defaultValue);
} }
public String getEstimationEnabledKey() { public String getEstimationEnabledKey() {

View File

@@ -38,7 +38,7 @@ public class MuscleMeasurementView extends FloatMeasurementView {
} }
@Override @Override
protected boolean canConvertPercentageToAbsoluteWeight() { protected boolean supportsPercentageToAbsoluteWeightConversion() {
return true; return true;
} }
@@ -63,7 +63,7 @@ public class MuscleMeasurementView extends FloatMeasurementView {
@Override @Override
protected float getMaxValue() { protected float getMaxValue() {
return maybeConvertPercentageToAbsolute(80); return maybeConvertPercentageToAbsoluteWeight(80);
} }
@Override @Override

View File

@@ -40,7 +40,7 @@ public class WaterMeasurementView extends FloatMeasurementView {
} }
@Override @Override
protected boolean canConvertPercentageToAbsoluteWeight() { protected boolean supportsPercentageToAbsoluteWeightConversion() {
return true; return true;
} }
@@ -65,7 +65,7 @@ public class WaterMeasurementView extends FloatMeasurementView {
@Override @Override
protected float getMaxValue() { protected float getMaxValue() {
return maybeConvertPercentageToAbsolute(80); return maybeConvertPercentageToAbsoluteWeight(80);
} }
@Override @Override