From 783ba3431088b8d07f8ef792c0c1875e7058f295 Mon Sep 17 00:00:00 2001 From: VaiTon Date: Wed, 25 Aug 2021 15:39:04 +0200 Subject: [PATCH] fix: add exception to per100gInUnit and perServingInUnit in ProductNutriment Closes OPENFOODFACTS-ANDROID-491 Closes https://github.com/openfoodfacts/openfoodfacts-androidapp/issues/4185 --- .../scrachx/openfood/models/ProductNutriments.kt | 14 ++++++++++++-- .../github/scrachx/openfood/utils/UnitUtils.kt | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/ProductNutriments.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/ProductNutriments.kt index 3f135424ce73..5fd496324506 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/ProductNutriments.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/ProductNutriments.kt @@ -106,6 +106,8 @@ class ProductNutriments : Serializable { ) { val unit = unit.getRealUnit() + fun isEnergy() = unit in ENERGY_UNITS + fun getPer100gDisplayString() = buildString { modifier.ifNotDefault { append(it.sym) @@ -118,7 +120,11 @@ class ProductNutriments : Serializable { * Returns the amount of nutriment per 100g * of product in the units stored in [ProductNutriment.unit] */ - val per100gInUnit get() = per100gInG.convertTo(unit) + val per100gInUnit: Measurement + get() { + return if (isEnergy()) per100gInG + else per100gInG.convertTo(unit) + } /** * Returns the amount of nutriment per serving @@ -126,7 +132,11 @@ class ProductNutriments : Serializable { * * Can be null if [perServingInG] is null. */ - val perServingInUnit get() = perServingInG?.convertTo(unit) + val perServingInUnit: Measurement? + get() { + return if (isEnergy()) perServingInG + else perServingInG?.convertTo(unit) + } /** * Calculates the nutriment value for a given amount of this product. For example, diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/UnitUtils.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/UnitUtils.kt index 84a2613921ea..4e180c91d64d 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/UnitUtils.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/UnitUtils.kt @@ -53,6 +53,7 @@ fun Measurement.convertTo(unit: MeasurementUnit): Measurement { when (unit) { ENERGY_KJ, ENERGY_KCAL -> throw IllegalArgumentException("Cannot convert from/to energy. Use convertEnergyTo instead.") + UNIT_DV, UNIT_IU -> throw IllegalArgumentException("Cannot convert to DV or IU")