diff --git a/ai/sample/wear-gemini/src/main/java/com/google/android/horologist/ai/sample/wear/gemini/activity/DeviceStatusScreen.kt b/ai/sample/wear-gemini/src/main/java/com/google/android/horologist/ai/sample/wear/gemini/activity/DeviceStatusScreen.kt index 770b3ad164..0e1b24221b 100644 --- a/ai/sample/wear-gemini/src/main/java/com/google/android/horologist/ai/sample/wear/gemini/activity/DeviceStatusScreen.kt +++ b/ai/sample/wear-gemini/src/main/java/com/google/android/horologist/ai/sample/wear/gemini/activity/DeviceStatusScreen.kt @@ -17,20 +17,29 @@ package com.google.android.horologist.ai.sample.wear.gemini.activity import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.wear.compose.foundation.lazy.TransformingLazyColumn +import androidx.wear.compose.foundation.lazy.items +import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState +import androidx.wear.compose.material3.ListHeader import androidx.wear.compose.material3.MaterialTheme import androidx.wear.compose.material3.ScreenScaffold import androidx.wear.compose.material3.Text +import androidx.wear.compose.material3.lazy.rememberTransformationSpec import coil.compose.AsyncImage +import com.google.android.horologist.compose.layout.ColumnItemType +import com.google.android.horologist.compose.layout.rememberResponsiveColumnPadding @Composable fun DeviceStatusScreen( @@ -38,23 +47,61 @@ fun DeviceStatusScreen( viewModel: DeviceStatusViewModel = hiltViewModel(), ) { val uiState = viewModel.uiState.collectAsStateWithLifecycle() - ScreenScaffold(modifier = modifier) { - Column( + val columnState = rememberTransformingLazyColumnState() + val transformationSpec = rememberTransformationSpec() + + val data = uiState.value + val paragraphs = remember((data as? Loaded)?.description) { + (data as? Loaded)?.description?.split("[\n,]+".toRegex()).orEmpty() + } + + ScreenScaffold( + modifier = modifier, + contentPadding = rememberResponsiveColumnPadding( + first = ColumnItemType.IconButton, + last = ColumnItemType.BodyText, + ), + scrollState = columnState, + ) { contentPadding -> + TransformingLazyColumn( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, + contentPadding = contentPadding, + state = columnState, ) { - val uiState = uiState.value - if (uiState is Loaded) { - AsyncImage( - model = uiState.image, - contentDescription = null, - modifier = Modifier.width(100.dp), - contentScale = ContentScale.FillWidth, - ) - Text(uiState.description ?: "None", style = MaterialTheme.typography.bodyExtraSmall) + item { + ListHeader(modifier = Modifier.fillMaxWidth()) { + Text("Gemini") + } + } + if (data is Loaded) { + items(paragraphs.take(3)) { + Text( + it, + style = MaterialTheme.typography.bodyExtraSmall, + modifier = Modifier.padding(bottom = 6.dp), + ) + } + item { + AsyncImage( + model = data.image, + contentDescription = null, + modifier = Modifier.width(100.dp), + contentScale = ContentScale.FillWidth, + ) + } + items(paragraphs.drop(3)) { + Text( + it, + style = MaterialTheme.typography.bodyExtraSmall, + modifier = Modifier.padding(bottom = 6.dp), + ) + } } else { - Text("Loading...") + item { + Text("Loading...") + } } } }