forked from penguin86/luna-tracker
		
	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