diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/data/HealthConnectManager.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/data/HealthConnectManager.kt index d40f0bac..b4d30df8 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/data/HealthConnectManager.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/data/HealthConnectManager.kt @@ -27,7 +27,6 @@ import androidx.health.connect.client.HealthConnectClient.Companion.SDK_UNAVAILA import androidx.health.connect.client.HealthConnectFeatures import androidx.health.connect.client.PermissionController import androidx.health.connect.client.changes.Change -import androidx.health.connect.client.feature.ExperimentalFeatureAvailabilityApi import androidx.health.connect.client.records.DistanceRecord import androidx.health.connect.client.records.ExerciseSessionRecord import androidx.health.connect.client.records.HeartRateRecord @@ -37,6 +36,7 @@ import androidx.health.connect.client.records.SpeedRecord import androidx.health.connect.client.records.StepsRecord import androidx.health.connect.client.records.TotalCaloriesBurnedRecord import androidx.health.connect.client.records.WeightRecord +import androidx.health.connect.client.records.metadata.Metadata import androidx.health.connect.client.request.AggregateRequest import androidx.health.connect.client.request.ChangesTokenRequest import androidx.health.connect.client.request.ReadRecordsRequest @@ -151,6 +151,7 @@ class HealthConnectManager(private val context: Context) { return healthConnectClient.insertRecords( listOf( ExerciseSessionRecord( + metadata = Metadata.manualEntry(), startTime = start.toInstant(), startZoneOffset = start.offset, endTime = end.toInstant(), @@ -159,6 +160,7 @@ class HealthConnectManager(private val context: Context) { title = "My Run #${Random.nextInt(0, 60)}" ), StepsRecord( + metadata = Metadata.manualEntry(), startTime = start.toInstant(), startZoneOffset = start.offset, endTime = end.toInstant(), @@ -166,6 +168,7 @@ class HealthConnectManager(private val context: Context) { count = (1000 + 1000 * Random.nextInt(3)).toLong() ), DistanceRecord( + metadata = Metadata.manualEntry(), startTime = start.toInstant(), startZoneOffset = start.offset, endTime = end.toInstant(), @@ -173,6 +176,7 @@ class HealthConnectManager(private val context: Context) { distance = Length.meters((1000 + 100 * Random.nextInt(20)).toDouble()) ), TotalCaloriesBurnedRecord( + metadata = Metadata.manualEntry(), startTime = start.toInstant(), startZoneOffset = start.offset, endTime = end.toInstant(), @@ -279,6 +283,7 @@ class HealthConnectManager(private val context: Context) { .withHour(Random.nextInt(19, 22)) .withMinute(Random.nextInt(0, 60)) val sleepSession = SleepSessionRecord( + metadata = Metadata.manualEntry(), notes = notes[Random.nextInt(0, notes.size)], startTime = bedtime.toInstant(), startZoneOffset = bedtime.offset, @@ -479,6 +484,7 @@ class HealthConnectManager(private val context: Context) { time = time.plusSeconds(30) } return HeartRateRecord( + metadata = Metadata.manualEntry(), startTime = sessionStartTime.toInstant(), startZoneOffset = sessionStartTime.offset, endTime = sessionEndTime.toInstant(), @@ -486,7 +492,6 @@ class HealthConnectManager(private val context: Context) { samples = samples) } - @OptIn(ExperimentalFeatureAvailabilityApi::class) fun isFeatureAvailable(feature: Int): Boolean{ return healthConnectClient .features diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/component/Series.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/component/Series.kt index 3e587b37..1611e309 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/component/Series.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/component/Series.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.health.connect.client.records.HeartRateRecord import androidx.health.connect.client.records.SpeedRecord +import androidx.health.connect.client.records.metadata.Metadata import com.example.healthconnectsample.R import com.example.healthconnectsample.data.dateTimeWithOffsetOrDefault import com.example.healthconnectsample.presentation.theme.HealthConnectTheme @@ -142,6 +143,7 @@ fun HeartRateSeriesPreview() { labelId = R.string.hr_series, series = listOf( HeartRateRecord( + metadata = Metadata.manualEntry(), startTime = time2, startZoneOffset = ZoneId.systemDefault().rules.getOffset(time2), endTime = time1, diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/navigation/HealthConnectNavigation.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/navigation/HealthConnectNavigation.kt index 7fa15320..9043f809 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/navigation/HealthConnectNavigation.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/navigation/HealthConnectNavigation.kt @@ -146,8 +146,8 @@ fun HealthConnectNavigation( permissionsGranted = permissionsGranted, sessionMetrics = sessionMetrics, uiState = viewModel.uiState, - onDetailsClick = { recordType, uid, seriesRecordsType -> - navController.navigate(Screen.RecordListScreen.route + "/" + recordType + "/"+ uid + "/" + seriesRecordsType) + onDetailsClick = { recordType, recordId, seriesRecordsType -> + navController.navigate(Screen.RecordListScreen.route + "/" + recordType + "/"+ recordId + "/" + seriesRecordsType) }, onError = { exception -> showExceptionSnackbar(scaffoldState, scope, exception) diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/WelcomeScreen.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/WelcomeScreen.kt index 947834ce..f77d07f6 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/WelcomeScreen.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/WelcomeScreen.kt @@ -31,7 +31,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -42,6 +41,7 @@ import androidx.health.connect.client.HealthConnectClient.Companion.SDK_UNAVAILA import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.compose.LocalLifecycleOwner import com.example.healthconnectsample.R import com.example.healthconnectsample.presentation.component.InstalledMessage import com.example.healthconnectsample.presentation.component.NotInstalledMessage diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/exercisesession/ExerciseSessionViewModel.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/exercisesession/ExerciseSessionViewModel.kt index 6e3b7a52..2a3954cd 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/exercisesession/ExerciseSessionViewModel.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/exercisesession/ExerciseSessionViewModel.kt @@ -21,7 +21,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.health.connect.client.HealthConnectFeatures -import androidx.health.connect.client.feature.ExperimentalFeatureAvailabilityApi import androidx.health.connect.client.permission.HealthPermission import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND import androidx.health.connect.client.records.DistanceRecord @@ -140,7 +139,6 @@ class ExerciseSessionViewModel(private val healthConnectManager: HealthConnectMa * Where an error is caught, of the type Health Connect is known to throw, [uiState] is set to * [UiState.Error], which results in the snackbar being used to show the error message. */ - @OptIn(ExperimentalFeatureAvailabilityApi::class) private suspend fun tryWithPermissionsCheck(block: suspend () -> Unit) { permissionsGranted.value = healthConnectManager.hasAllPermissions(permissions) backgroundReadAvailable.value = healthConnectManager.isFeatureAvailable( diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/inputreadings/InputReadingsViewModel.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/inputreadings/InputReadingsViewModel.kt index 65681e47..2f4fafc7 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/inputreadings/InputReadingsViewModel.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/inputreadings/InputReadingsViewModel.kt @@ -22,6 +22,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.health.connect.client.permission.HealthPermission import androidx.health.connect.client.records.WeightRecord +import androidx.health.connect.client.records.metadata.Metadata import androidx.health.connect.client.units.Mass import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider @@ -71,6 +72,7 @@ class InputReadingsViewModel(private val healthConnectManager: HealthConnectMana tryWithPermissionsCheck { val time = ZonedDateTime.now().withNano(0) val weight = WeightRecord( + metadata = Metadata.manualEntry(), weight = Mass.kilograms(inputValue), time = time.toInstant(), zoneOffset = time.offset diff --git a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/recordlist/RecordListScreen.kt b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/recordlist/RecordListScreen.kt index adad9699..b856792f 100644 --- a/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/recordlist/RecordListScreen.kt +++ b/health-connect/HealthConnectSample/app/src/main/java/com/example/healthconnectsample/presentation/screen/recordlist/RecordListScreen.kt @@ -160,12 +160,13 @@ fun RecordListScreen( private fun buildStepsSeries(sessionStartTime: ZonedDateTime, sessionEndTime: ZonedDateTime) = StepsRecord( + metadata = Metadata.manualEntry(), startTime = sessionStartTime.toInstant(), startZoneOffset = sessionStartTime.offset, endTime = sessionEndTime.toInstant(), endZoneOffset = sessionEndTime.offset, count = Random.nextInt(9000).toLong() + 1000, - metadata = Metadata(id = UUID.randomUUID().toString())) + ) fun LazyListScope.renderData( record: Record, diff --git a/health-connect/HealthConnectSample/build.gradle b/health-connect/HealthConnectSample/build.gradle index 0008f596..7a2d2159 100644 --- a/health-connect/HealthConnectSample/build.gradle +++ b/health-connect/HealthConnectSample/build.gradle @@ -22,7 +22,7 @@ buildscript { navigation_compose_version = '2.8.2' concurrent_futures_version = '1.2.0' - health_connect_version = '1.1.0-alpha11' + health_connect_version = '1.1.0-alpha12' lifecycle_version = '2.8.6' } repositories { @@ -30,7 +30,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.7.1' + classpath 'com.android.tools.build:gradle:8.7.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong