forked from penguin86/luna-tracker
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
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
 | 
						|
 | 
						|
class NumericUtils (val context: Context) {
 | 
						|
    val numberFormat: NumberFormat
 | 
						|
    val measurement_unit_liquid_base: String
 | 
						|
    val measurement_unit_weight_base: String
 | 
						|
    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 // METRIC
 | 
						|
            }
 | 
						|
       }
 | 
						|
    }
 | 
						|
 | 
						|
    init {
 | 
						|
        this.numberFormat = NumberFormat.getInstance()
 | 
						|
        this.measurement_unit_liquid_base = context.getString(
 | 
						|
            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 (isMetricSystem())
 | 
						|
                R.string.measurement_unit_weight_base_metric
 | 
						|
            else
 | 
						|
                R.string.measurement_unit_weight_base_imperial
 | 
						|
        )
 | 
						|
        this.measurement_unit_weight_tiny = context.getString(
 | 
						|
            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 (isMetricSystem())
 | 
						|
                R.string.measurement_unit_temperature_base_metric
 | 
						|
            else
 | 
						|
                R.string.measurement_unit_temperature_base_imperial
 | 
						|
        )
 | 
						|
    }
 | 
						|
 | 
						|
    fun formatEventQuantity(item: LunaEvent): String {
 | 
						|
        val formatted = StringBuilder()
 | 
						|
        if (item.quantity > 0) {
 | 
						|
            formatted.append(when (item.type) {
 | 
						|
                LunaEvent.TYPE_TEMPERATURE ->
 | 
						|
                    (item.quantity / 10.0f).toString()
 | 
						|
                else ->
 | 
						|
                    item.quantity
 | 
						|
            })
 | 
						|
 | 
						|
            formatted.append(" ")
 | 
						|
            formatted.append(
 | 
						|
                when (item.type) {
 | 
						|
                    LunaEvent.TYPE_BABY_BOTTLE -> measurement_unit_liquid_base
 | 
						|
                    LunaEvent.TYPE_WEIGHT -> measurement_unit_weight_base
 | 
						|
                    LunaEvent.TYPE_MEDICINE -> measurement_unit_weight_tiny
 | 
						|
                    LunaEvent.TYPE_TEMPERATURE -> measurement_unit_temperature_base
 | 
						|
                    else -> ""
 | 
						|
                }
 | 
						|
            )
 | 
						|
        }
 | 
						|
        return formatted.toString()
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns a valid quantity range for the event type.
 | 
						|
     * @return min, max, normal
 | 
						|
     */
 | 
						|
    fun getValidEventQuantityRange(lunaEventType: String): Triple<Int, Int, Int>? {
 | 
						|
        return when (lunaEventType) {
 | 
						|
            LunaEvent.TYPE_TEMPERATURE -> {
 | 
						|
                if (isMetricSystem())
 | 
						|
                    Triple(
 | 
						|
                        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_normal_metric)
 | 
						|
                    )
 | 
						|
                else
 | 
						|
                    Triple(
 | 
						|
                        context.resources.getInteger(R.integer.human_body_temp_min_imperial),
 | 
						|
                        context.resources.getInteger(R.integer.human_body_temp_max_imperial),
 | 
						|
                        context.resources.getInteger(R.integer.human_body_temp_normal_imperial)
 | 
						|
                    )
 | 
						|
            }
 | 
						|
            else -> null
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |