Roll forward of commit 730211449498422bf616030a11ba226b1e756a46: "Add skin temperature proto converters."
This reverts commit e08945a57f7b607568967b89817eefb490989c0b.
Reason for revert: Original breakage fixed in commit I88918f61258c264e16b854f176e178523c3095b0.
Bug: 344825499
Bug: 379293180
Change-Id: I8ac19c15583843fb20c8e7651eaef0ff4727e8cd
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/RecordsTypeNameMap.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/RecordsTypeNameMap.kt
index cf92c55..e7a4dd8 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/RecordsTypeNameMap.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/RecordsTypeNameMap.kt
@@ -49,6 +49,7 @@
import androidx.health.connect.client.records.RespiratoryRateRecord
import androidx.health.connect.client.records.RestingHeartRateRecord
import androidx.health.connect.client.records.SexualActivityRecord
+import androidx.health.connect.client.records.SkinTemperatureRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.SpeedRecord
import androidx.health.connect.client.records.StepsCadenceRecord
@@ -91,6 +92,7 @@
"RespiratoryRate" to RespiratoryRateRecord::class,
"RestingHeartRate" to RestingHeartRateRecord::class,
"SexualActivity" to SexualActivityRecord::class,
+ "SkinTemperature" to SkinTemperatureRecord::class,
"SleepSession" to SleepSessionRecord::class,
"SpeedSeries" to SpeedRecord::class, // Keep legacy Series suffix
"IntermenstrualBleeding" to IntermenstrualBleedingRecord::class,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt
index 5b61ecc..25d642fa8 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt
@@ -55,6 +55,7 @@
import androidx.health.connect.client.records.RespiratoryRateRecord
import androidx.health.connect.client.records.RestingHeartRateRecord
import androidx.health.connect.client.records.SexualActivityRecord
+import androidx.health.connect.client.records.SkinTemperatureRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.SpeedRecord
import androidx.health.connect.client.records.StepsCadenceRecord
@@ -523,6 +524,22 @@
endZoneOffset = endZoneOffset,
metadata = metadata
)
+ "SkinTemperature" ->
+ SkinTemperatureRecord(
+ baseline = valuesMap["baseline"]?.doubleVal?.celsius,
+ measurementLocation =
+ mapEnum(
+ "measurementLocation",
+ SkinTemperatureRecord.MEASUREMENT_LOCATION_STRING_TO_INT_MAP,
+ SkinTemperatureRecord.MEASUREMENT_LOCATION_UNKNOWN,
+ ),
+ startTime = startTime,
+ startZoneOffset = startZoneOffset,
+ endTime = endTime,
+ endZoneOffset = endZoneOffset,
+ deltas = subTypeDataListsMap["deltas"]?.toDeltasList() ?: emptyList(),
+ metadata = metadata
+ )
"SleepSession" ->
SleepSessionRecord(
title = getString("title"),
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
index e460b00..566a61b 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
@@ -22,11 +22,13 @@
import androidx.health.connect.client.records.ExerciseRoute
import androidx.health.connect.client.records.ExerciseSegment
import androidx.health.connect.client.records.ExerciseSegment.Companion.EXERCISE_SEGMENT_TYPE_UNKNOWN
+import androidx.health.connect.client.records.SkinTemperatureRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.SleepSessionRecord.Companion.STAGE_TYPE_STRING_TO_INT_MAP
import androidx.health.connect.client.records.metadata.DataOrigin
import androidx.health.connect.client.records.metadata.Device
import androidx.health.connect.client.records.metadata.Metadata
+import androidx.health.connect.client.units.TemperatureDelta
import androidx.health.connect.client.units.meters
import androidx.health.platform.client.proto.DataProto
import androidx.health.platform.client.proto.DataProto.DataPointOrBuilder
@@ -113,6 +115,15 @@
)
}
+internal fun DataProto.DataPoint.SubTypeDataList.toDeltasList(): List<SkinTemperatureRecord.Delta> {
+ return valuesList.map {
+ SkinTemperatureRecord.Delta(
+ time = Instant.ofEpochMilli(it.startTimeMillis),
+ delta = TemperatureDelta.celsius(it.valuesMap["delta"]?.doubleVal ?: 0.0),
+ )
+ }
+}
+
internal fun DataProto.DataPoint.SubTypeDataList.toStageList(): List<SleepSessionRecord.Stage> {
return valuesList.map {
SleepSessionRecord.Stage(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt
index 8438aa2..1f75aa8 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt
@@ -55,6 +55,7 @@
import androidx.health.connect.client.records.RestingHeartRateRecord
import androidx.health.connect.client.records.SeriesRecord
import androidx.health.connect.client.records.SexualActivityRecord
+import androidx.health.connect.client.records.SkinTemperatureRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.SpeedRecord
import androidx.health.connect.client.records.StepsCadenceRecord
@@ -481,6 +482,28 @@
name?.let { putValues("name", stringVal(it)) }
}
.build()
+ is SkinTemperatureRecord ->
+ intervalProto()
+ .setDataType(protoDataType("SkinTemperature"))
+ .apply {
+ if (baseline != null) {
+ putValues("baseline", doubleVal(baseline.inCelsius))
+ }
+ if (deltas.isNotEmpty()) {
+ putSubTypeDataLists(
+ "deltas",
+ DataProto.DataPoint.SubTypeDataList.newBuilder()
+ .addAllValues(deltas.map { it.toProto() })
+ .build(),
+ )
+ }
+ enumValFromInt(
+ measurementLocation,
+ SkinTemperatureRecord.MEASUREMENT_LOCATION_INT_TO_STRING_MAP,
+ )
+ ?.let { putValues("measurementLocation", it) }
+ }
+ .build()
is SleepSessionRecord ->
intervalProto()
.setDataType(protoDataType("SleepSession"))
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt
index 3e5fa01..8ce8f01 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt
@@ -23,6 +23,7 @@
import androidx.health.connect.client.records.ExerciseSegment
import androidx.health.connect.client.records.InstantaneousRecord
import androidx.health.connect.client.records.IntervalRecord
+import androidx.health.connect.client.records.SkinTemperatureRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.metadata.Device
import androidx.health.connect.client.records.metadata.DeviceTypes
@@ -92,6 +93,14 @@
.build()
}
+internal fun SkinTemperatureRecord.Delta.toProto(): DataProto.SubTypeDataValue {
+ return DataProto.SubTypeDataValue.newBuilder()
+ .setStartTimeMillis(time.toEpochMilli())
+ .setEndTimeMillis(time.toEpochMilli())
+ .putValues("delta", doubleVal(delta.inCelsius))
+ .build()
+}
+
internal fun SleepSessionRecord.Stage.toProto(): DataProto.SubTypeDataValue {
return DataProto.SubTypeDataValue.newBuilder()
.setStartTimeMillis(startTime.toEpochMilli())
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/converters/records/AllRecordsConverterTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/converters/records/AllRecordsConverterTest.kt
index 24dac4c..d9fb1f2 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/converters/records/AllRecordsConverterTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/converters/records/AllRecordsConverterTest.kt
@@ -54,6 +54,7 @@
import androidx.health.connect.client.records.RespiratoryRateRecord
import androidx.health.connect.client.records.RestingHeartRateRecord
import androidx.health.connect.client.records.SexualActivityRecord
+import androidx.health.connect.client.records.SkinTemperatureRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.SpeedRecord
import androidx.health.connect.client.records.StepsCadenceRecord
@@ -67,6 +68,7 @@
import androidx.health.connect.client.records.metadata.Metadata
import androidx.health.connect.client.units.BloodGlucose
import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.TemperatureDelta
import androidx.health.connect.client.units.celsius
import androidx.health.connect.client.units.grams
import androidx.health.connect.client.units.kilocalories
@@ -805,6 +807,46 @@
}
@Test
+ fun testSkinTemperature() {
+ val data =
+ SkinTemperatureRecord(
+ baseline = 34.3.celsius,
+ measurementLocation = SkinTemperatureRecord.MEASUREMENT_LOCATION_WRIST,
+ startTime = START_TIME,
+ startZoneOffset = START_ZONE_OFFSET,
+ endTime = END_TIME,
+ endZoneOffset = END_ZONE_OFFSET,
+ metadata = TEST_METADATA,
+ deltas =
+ listOf(
+ SkinTemperatureRecord.Delta(
+ time = Instant.ofEpochMilli(1234L),
+ delta = TemperatureDelta.celsius(1.2),
+ )
+ )
+ )
+
+ checkProtoAndRecordTypeNameMatch(data)
+ assertThat(toRecord(data.toProto())).isEqualTo(data)
+ }
+
+ @Test
+ fun testSkinTemperatureWithEmptyDeltasList() {
+ val data =
+ SkinTemperatureRecord(
+ startTime = START_TIME,
+ startZoneOffset = START_ZONE_OFFSET,
+ endTime = END_TIME,
+ endZoneOffset = END_ZONE_OFFSET,
+ metadata = TEST_METADATA,
+ deltas = emptyList()
+ )
+
+ checkProtoAndRecordTypeNameMatch(data)
+ assertThat(toRecord(data.toProto())).isEqualTo(data)
+ }
+
+ @Test
fun testSleepSession() {
val data =
SleepSessionRecord(