NumericUtils: provide fallback for LocaleData.getMeasurementSystem
LocaleData.getMeasurementSystem is available at API level 28 but the app supports API level 21.
This commit is contained in:
@@ -3,6 +3,7 @@ package utils
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.icu.util.LocaleData
|
import android.icu.util.LocaleData
|
||||||
import android.icu.util.ULocale
|
import android.icu.util.ULocale
|
||||||
|
import android.os.Build
|
||||||
import it.danieleverducci.lunatracker.R
|
import it.danieleverducci.lunatracker.R
|
||||||
import it.danieleverducci.lunatracker.entities.LunaEvent
|
import it.danieleverducci.lunatracker.entities.LunaEvent
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
@@ -14,29 +15,45 @@ class NumericUtils (val context: Context) {
|
|||||||
val measurement_unit_weight_tiny: String
|
val measurement_unit_weight_tiny: String
|
||||||
val measurement_unit_temperature_base: 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 {
|
init {
|
||||||
this.numberFormat = NumberFormat.getInstance()
|
this.numberFormat = NumberFormat.getInstance()
|
||||||
val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
|
|
||||||
this.measurement_unit_liquid_base = context.getString(
|
this.measurement_unit_liquid_base = context.getString(
|
||||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
if (isMetricSystem())
|
||||||
R.string.measurement_unit_liquid_base_metric
|
R.string.measurement_unit_liquid_base_metric
|
||||||
else
|
else
|
||||||
R.string.measurement_unit_liquid_base_imperial
|
R.string.measurement_unit_liquid_base_imperial
|
||||||
)
|
)
|
||||||
this.measurement_unit_weight_base = context.getString(
|
this.measurement_unit_weight_base = context.getString(
|
||||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
if (isMetricSystem())
|
||||||
R.string.measurement_unit_weight_base_metric
|
R.string.measurement_unit_weight_base_metric
|
||||||
else
|
else
|
||||||
R.string.measurement_unit_weight_base_imperial
|
R.string.measurement_unit_weight_base_imperial
|
||||||
)
|
)
|
||||||
this.measurement_unit_weight_tiny = context.getString(
|
this.measurement_unit_weight_tiny = context.getString(
|
||||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
if (isMetricSystem())
|
||||||
R.string.measurement_unit_weight_tiny_metric
|
R.string.measurement_unit_weight_tiny_metric
|
||||||
else
|
else
|
||||||
R.string.measurement_unit_weight_tiny_imperial
|
R.string.measurement_unit_weight_tiny_imperial
|
||||||
)
|
)
|
||||||
this.measurement_unit_temperature_base = context.getString(
|
this.measurement_unit_temperature_base = context.getString(
|
||||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
if (isMetricSystem())
|
||||||
R.string.measurement_unit_temperature_base_metric
|
R.string.measurement_unit_temperature_base_metric
|
||||||
else
|
else
|
||||||
R.string.measurement_unit_temperature_base_imperial
|
R.string.measurement_unit_temperature_base_imperial
|
||||||
@@ -70,10 +87,9 @@ class NumericUtils (val context: Context) {
|
|||||||
* @return min, max, normal
|
* @return min, max, normal
|
||||||
*/
|
*/
|
||||||
fun getValidEventQuantityRange(lunaEventType: String): Triple<Int, Int, Int>? {
|
fun getValidEventQuantityRange(lunaEventType: String): Triple<Int, Int, Int>? {
|
||||||
val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
|
|
||||||
return when (lunaEventType) {
|
return when (lunaEventType) {
|
||||||
LunaEvent.TYPE_TEMPERATURE -> {
|
LunaEvent.TYPE_TEMPERATURE -> {
|
||||||
if (measurementSystem == LocaleData. MeasurementSystem.SI)
|
if (isMetricSystem())
|
||||||
Triple(
|
Triple(
|
||||||
context.resources.getInteger(R.integer.human_body_temp_min_metric),
|
context.resources.getInteger(R.integer.human_body_temp_min_metric),
|
||||||
context.resources.getInteger(R.integer.human_body_temp_max_metric),
|
context.resources.getInteger(R.integer.human_body_temp_max_metric),
|
||||||
|
Reference in New Issue
Block a user