Include UNKNOWN MealType and OTHER MeasurementMethod.

Those enums have their counterparts in the APK and so have to be mapped properly. Otherwise, the value is missing when reading from the APK, which causes inconsistency in some tests with what was actually written.

Test: ./gradlew :health:connect:connect-client:test
Change-Id: Ie63ad1e94aba4009fe45a519c1f6c7de7ce545ce
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
index 3a6a40f..6849832 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
@@ -49,6 +49,7 @@
     @JvmField
     val MEAL_TYPE_STRING_TO_INT_MAP: Map<String, Int> =
         mapOf(
+            UNKNOWN to MEAL_TYPE_UNKNOWN,
             BREAKFAST to MEAL_TYPE_BREAKFAST,
             LUNCH to MEAL_TYPE_LUNCH,
             DINNER to MEAL_TYPE_DINNER,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
index 0a6f4df..87a60cf 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
@@ -81,6 +81,7 @@
         @JvmField
         val MEASUREMENT_METHOD_STRING_TO_INT_MAP: Map<String, Int> =
             mapOf(
+                MeasurementMethod.OTHER to MEASUREMENT_METHOD_OTHER,
                 MeasurementMethod.METABOLIC_CART to MEASUREMENT_METHOD_METABOLIC_CART,
                 MeasurementMethod.HEART_RATE_RATIO to MEASUREMENT_METHOD_HEART_RATE_RATIO,
                 MeasurementMethod.COOPER_TEST to MEASUREMENT_METHOD_COOPER_TEST,
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
index 48a531a..991beb3e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
@@ -28,6 +28,7 @@
 import androidx.health.connect.client.permission.HealthPermission.Companion.getWritePermission
 import androidx.health.connect.client.records.ActiveCaloriesBurnedRecord
 import androidx.health.connect.client.records.HeartRateRecord
+import androidx.health.connect.client.records.MealType
 import androidx.health.connect.client.records.NutritionRecord
 import androidx.health.connect.client.records.StepsRecord
 import androidx.health.connect.client.records.StepsRecord.Companion.COUNT_TOTAL
@@ -296,6 +297,10 @@
                     .setEndTimeMillis(5678L)
                     .putValues("vitaminC", DataProto.Value.newBuilder().setDoubleVal(20.0).build())
                     .putValues("vitaminE", DataProto.Value.newBuilder().setDoubleVal(10.0).build())
+                    .putValues(
+                        "mealType",
+                        DataProto.Value.newBuilder().setEnumVal(MealType.UNKNOWN).build()
+                    )
                     .setDataType(DataProto.DataType.newBuilder().setName("Nutrition"))
                     .build()
             )
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt
index 590b879..3e9cb7e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt
@@ -27,7 +27,7 @@
     @Test
     fun relationToMealEnums_existInMapping() {
         val allEnums =
-            BloodGlucoseRecord.Companion::class.allIntDefEnumsWithPrefix("RELATION_TO_MEAL")
+            getAllIntDefEnums<BloodGlucoseRecord>("""RELATION_TO_MEAL.*(?<!UNKNOWN)$""")
 
         assertThat(BloodGlucoseRecord.RELATION_TO_MEAL_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
@@ -37,8 +37,7 @@
 
     @Test
     fun specimenSourceEnums_existInMapping() {
-        val allEnums =
-            BloodGlucoseRecord.Companion::class.allIntDefEnumsWithPrefix("SPECIMEN_SOURCE")
+        val allEnums = getAllIntDefEnums<BloodGlucoseRecord>("""SPECIMEN_SOURCE.*(?<!UNKNOWN)$""")
 
         assertThat(BloodGlucoseRecord.SPECIMEN_SOURCE_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt
index 63539bd1..c4a846f 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt
@@ -25,8 +25,7 @@
 class BloodPressureRecordTest {
     @Test
     fun bodyPositionEnums_existInMapping() {
-        val allEnums =
-            BloodPressureRecord.Companion::class.allIntDefEnumsWithPrefix("BODY_POSITION")
+        val allEnums = getAllIntDefEnums<BloodPressureRecord>("""BODY_POSITION.*(?<!UNKNOWN)$""")
 
         assertThat(BloodPressureRecord.BODY_POSITION_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
@@ -37,7 +36,9 @@
     @Test
     fun measurementLocationEnums_existInMapping() {
         val allEnums =
-            BloodPressureRecord.Companion::class.allIntDefEnumsWithPrefix("MEASUREMENT_LOCATION")
+            getAllIntDefEnums<BloodPressureRecord>(
+                """MEASUREMENT_LOCATION.*(?<!UNKNOWN)$"""
+            )
 
         assertThat(BloodPressureRecord.MEASUREMENT_LOCATION_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt
index 0a805f4..b70bd0e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt
@@ -27,8 +27,8 @@
     @Test
     fun enums_existInMapping() {
         val allEnums =
-            BodyTemperatureMeasurementLocation::class.allObjectIntDefEnumsWithPrefix(
-                "MEASUREMENT_LOCATION"
+            getAllIntDefEnums<BodyTemperatureMeasurementLocation>(
+                """MEASUREMENT_LOCATION.*(?<!UNKNOWN)$"""
             )
 
         assertThat(BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_STRING_TO_INT_MAP.values)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt
index ad92237..a9620fbd 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt
@@ -26,7 +26,7 @@
 
     @Test
     fun appearanceEnums_existInMapping() {
-        val allEnums = CervicalMucusRecord.Companion::class.allIntDefEnumsWithPrefix("APPEARANCE")
+        val allEnums = getAllIntDefEnums<CervicalMucusRecord>("""APPEARANCE.*(?<!UNKNOWN)$""")
 
         assertThat(CervicalMucusRecord.APPEARANCE_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
@@ -36,7 +36,7 @@
 
     @Test
     fun sensationEnums_existInMapping() {
-        val allEnums = CervicalMucusRecord.Companion::class.allIntDefEnumsWithPrefix("SENSATION")
+        val allEnums = getAllIntDefEnums<CervicalMucusRecord>("""SENSATION.*(?<!UNKNOWN)$""")
 
         assertThat(CervicalMucusRecord.SENSATION_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt
index ddaf765..ab5218e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt
@@ -16,25 +16,14 @@
 
 package androidx.health.connect.client.records
 
-import kotlin.reflect.KClass
-import kotlin.reflect.typeOf
+internal inline fun <reified T> getAllIntDefEnums(pattern: String): Collection<Int> {
+    val regex = pattern.toRegex()
 
-internal fun KClass<*>.allIntDefEnumsWithPrefix(prefix: String): Collection<Int> {
-    return members
+    return T::class.java.fields
         .asSequence()
-        .filter { it.name.startsWith(prefix) && !it.name.endsWith("UNKNOWN") }
-        .filter { it.returnType == typeOf<Int>() }
-        .map { it.call(null) }
-        .filterIsInstance<Int>()
-        .toHashSet()
-}
-
-internal fun KClass<*>.allObjectIntDefEnumsWithPrefix(prefix: String): Collection<Int> {
-    return members
-        .asSequence()
-        .filter { it.name.startsWith(prefix) && !it.name.endsWith("UNKNOWN") }
-        .filter { it.returnType == typeOf<Int>() }
-        .map { it.call() }
+        .filter { it.name.matches(regex) }
+        .filter { it.type == Int::class.javaPrimitiveType }
+        .map { it.get(null) }
         .filterIsInstance<Int>()
         .toHashSet()
 }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt
index de588ab..3a9554c 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt
@@ -26,7 +26,7 @@
 
     @Test
     fun enums_existInMapping() {
-        val allEnums = MealType::class.allObjectIntDefEnumsWithPrefix("MEAL_TYPE")
+        val allEnums = getAllIntDefEnums<MealType>("""MEAL_TYPE.*""")
 
         assertThat(MealType.MEAL_TYPE_STRING_TO_INT_MAP.values).containsExactlyElementsIn(allEnums)
         assertThat(MealType.MEAL_TYPE_INT_TO_STRING_MAP.keys).containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt
index d3f74d9..7e64ee6 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt
@@ -26,7 +26,7 @@
 
     @Test
     fun resultEnums_existInMapping() {
-        val allEnums = OvulationTestRecord.Companion::class.allIntDefEnumsWithPrefix("RESULT")
+        val allEnums = getAllIntDefEnums<OvulationTestRecord>("""RESULT.*(?<!UNKNOWN)$""")
 
         assertThat(OvulationTestRecord.RESULT_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt
index e829d17..78f9bd6 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt
@@ -26,8 +26,7 @@
 
     @Test
     fun protectionEnums_existInMapping() {
-        val allEnums =
-            SexualActivityRecord.Companion::class.allIntDefEnumsWithPrefix("PROTECTION_USED")
+        val allEnums = getAllIntDefEnums<SexualActivityRecord>("""PROTECTION_USED.*(?<!UNKNOWN)$""")
 
         Truth.assertThat(SexualActivityRecord.PROTECTION_USED_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt
index a414d8c..3f531bd 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt
@@ -25,10 +25,7 @@
 class Vo2MaxRecordTest {
     @Test
     fun measurementMethodEnums_existMapping() {
-        val allEnums =
-            Vo2MaxRecord.Companion::class.allIntDefEnumsWithPrefix("MEASUREMENT_METHOD").filter {
-                it != Vo2MaxRecord.MEASUREMENT_METHOD_OTHER
-            }
+        val allEnums = getAllIntDefEnums<Vo2MaxRecord>("""MEASUREMENT_METHOD.*""")
 
         Truth.assertThat(Vo2MaxRecord.MEASUREMENT_METHOD_STRING_TO_INT_MAP.values)
             .containsExactlyElementsIn(allEnums)