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