1 package com.android.healthconnect.controller.dataentries.formatters 2 3 import android.content.Context 4 import android.health.connect.datatypes.BodyTemperatureMeasurementLocation.* 5 import android.health.connect.datatypes.units.Temperature 6 import android.icu.text.MessageFormat 7 import androidx.annotation.StringRes 8 import com.android.healthconnect.controller.R 9 import com.android.healthconnect.controller.dataentries.units.TemperatureConverter 10 import com.android.healthconnect.controller.dataentries.units.TemperatureUnit 11 import com.android.healthconnect.controller.dataentries.units.UnitPreferences 12 13 object TemperatureFormatter { formatValuenull14 fun formatValue( 15 context: Context, 16 temperature: Temperature, 17 measurementLocation: Int, 18 unitPreferences: UnitPreferences 19 ): String { 20 val res = 21 when (unitPreferences.getTemperatureUnit()) { 22 TemperatureUnit.CELSIUS -> R.string.temperature_celsius 23 TemperatureUnit.FAHRENHEIT -> R.string.temperature_fahrenheit 24 TemperatureUnit.KELVIN -> R.string.temperature_kelvin 25 } 26 27 val tempString = formatTemperature(context, res, temperature, unitPreferences) 28 return if (measurementLocation != MEASUREMENT_LOCATION_UNKNOWN) { 29 val tempLocation = formatLocation(context, measurementLocation) 30 "$tempString $tempLocation" 31 } else { 32 tempString 33 } 34 } 35 formatA11tValuenull36 fun formatA11tValue( 37 context: Context, 38 temperature: Temperature, 39 measurementLocation: Int, 40 unitPreferences: UnitPreferences 41 ): String { 42 val res = 43 when (unitPreferences.getTemperatureUnit()) { 44 TemperatureUnit.CELSIUS -> R.string.temperature_celsius_long 45 TemperatureUnit.FAHRENHEIT -> R.string.temperature_fahrenheit_long 46 TemperatureUnit.KELVIN -> R.string.temperature_kelvin_long 47 } 48 49 val tempString = formatTemperature(context, res, temperature, unitPreferences) 50 return if (measurementLocation != MEASUREMENT_LOCATION_UNKNOWN) { 51 val tempLocation = formatLocation(context, measurementLocation) 52 "$tempString $tempLocation" 53 } else { 54 tempString 55 } 56 } 57 formatLocationnull58 private fun formatLocation(context: Context, location: Int): String { 59 return when (location) { 60 MEASUREMENT_LOCATION_ARMPIT -> context.getString(R.string.temperature_location_armpit) 61 MEASUREMENT_LOCATION_FINGER -> context.getString(R.string.temperature_location_finger) 62 MEASUREMENT_LOCATION_FOREHEAD -> 63 context.getString(R.string.temperature_location_forehead) 64 MEASUREMENT_LOCATION_MOUTH -> context.getString(R.string.temperature_location_mouth) 65 MEASUREMENT_LOCATION_RECTUM -> context.getString(R.string.temperature_location_rectum) 66 MEASUREMENT_LOCATION_TEMPORAL_ARTERY -> 67 context.getString(R.string.temperature_location_temporal_artery) 68 MEASUREMENT_LOCATION_TOE -> context.getString(R.string.temperature_location_toe) 69 MEASUREMENT_LOCATION_EAR -> context.getString(R.string.temperature_location_ear) 70 MEASUREMENT_LOCATION_WRIST -> context.getString(R.string.temperature_location_wrist) 71 MEASUREMENT_LOCATION_VAGINA -> context.getString(R.string.temperature_location_vagina) 72 else -> { 73 throw IllegalArgumentException( 74 "Unrecognised body temperature measurement location: $location") 75 } 76 } 77 } 78 formatTemperaturenull79 private fun formatTemperature( 80 context: Context, 81 @StringRes res: Int, 82 temperature: Temperature, 83 unitPreferences: UnitPreferences 84 ): String { 85 val temp = 86 TemperatureConverter.convertFromCelsius( 87 temperature.inCelsius, unitPreferences.getTemperatureUnit()) 88 return MessageFormat.format(context.getString(res), mapOf("value" to temp)) 89 } 90 } 91