diff --git a/app/src/main/java/utils/NumericUtils.kt b/app/src/main/java/utils/NumericUtils.kt index 49b8552..f847ef9 100644 --- a/app/src/main/java/utils/NumericUtils.kt +++ b/app/src/main/java/utils/NumericUtils.kt @@ -3,6 +3,7 @@ package utils import android.content.Context import android.icu.util.LocaleData import android.icu.util.ULocale +import android.os.Build import it.danieleverducci.lunatracker.R import it.danieleverducci.lunatracker.entities.LunaEvent import java.text.NumberFormat @@ -14,29 +15,45 @@ class NumericUtils (val context: Context) { val measurement_unit_weight_tiny: String val measurement_unit_temperature_base: String + private fun isMetricSystem(): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault()) + return (measurementSystem == LocaleData. MeasurementSystem.SI) + } else { + val locale = context.resources.configuration.locale + return when (locale.country) { + // https://en.wikipedia.org/wiki/United_States_customary_units + // https://en.wikipedia.org/wiki/Imperial_units + "US" -> false // US IMPERIAL + // UK, Myanmar, Liberia, + "GB", "MM", "LR" -> false // IMPERIAL + else -> true // UnitSystem.METRIC + } + } + } + init { this.numberFormat = NumberFormat.getInstance() - val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault()) this.measurement_unit_liquid_base = context.getString( - if (measurementSystem == LocaleData. MeasurementSystem.SI) + if (isMetricSystem()) R.string.measurement_unit_liquid_base_metric else R.string.measurement_unit_liquid_base_imperial ) this.measurement_unit_weight_base = context.getString( - if (measurementSystem == LocaleData. MeasurementSystem.SI) + if (isMetricSystem()) R.string.measurement_unit_weight_base_metric else R.string.measurement_unit_weight_base_imperial ) this.measurement_unit_weight_tiny = context.getString( - if (measurementSystem == LocaleData. MeasurementSystem.SI) + if (isMetricSystem()) R.string.measurement_unit_weight_tiny_metric else R.string.measurement_unit_weight_tiny_imperial ) this.measurement_unit_temperature_base = context.getString( - if (measurementSystem == LocaleData. MeasurementSystem.SI) + if (isMetricSystem()) R.string.measurement_unit_temperature_base_metric else R.string.measurement_unit_temperature_base_imperial @@ -70,10 +87,9 @@ class NumericUtils (val context: Context) { * @return min, max, normal */ fun getValidEventQuantityRange(lunaEventType: String): Triple? { - val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault()) return when (lunaEventType) { LunaEvent.TYPE_TEMPERATURE -> { - if (measurementSystem == LocaleData. MeasurementSystem.SI) + if (isMetricSystem()) Triple( context.resources.getInteger(R.integer.human_body_temp_min_metric), context.resources.getInteger(R.integer.human_body_temp_max_metric),