mirror of
https://github.com/oliexdev/openScale.git
synced 2025-09-01 20:33:31 +02:00
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user