@@ -37,76 +37,32 @@ import androidx.compose.runtime.remember
3737import androidx.compose.runtime.rememberCoroutineScope
3838import androidx.compose.runtime.setValue
3939import androidx.compose.ui.Alignment
40- import androidx.compose.ui.ExperimentalComposeUiApi
4140import androidx.compose.ui.Modifier
4241import androidx.compose.ui.focus.FocusRequester
4342import androidx.compose.ui.focus.focusRequester
4443import androidx.compose.ui.input.pointer.pointerInteropFilter
4544import androidx.compose.ui.input.rotary.onRotaryScrollEvent
4645import androidx.compose.ui.unit.dp
47- import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
4846import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
4947import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults
5048import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
51- import androidx.wear.compose.foundation.rememberActiveFocusRequester
52- import androidx.wear.compose.material.Chip
53- import androidx.wear.compose.material.ChipDefaults
54- import androidx.wear.compose.material.ListHeader
55- import androidx.wear.compose.material.MaterialTheme
56- import androidx.wear.compose.material.Picker
57- import androidx.wear.compose.material.PositionIndicator
58- import androidx.wear.compose.material.Scaffold
59- import androidx.wear.compose.material .Text
60- import androidx.wear.compose.material .rememberPickerState
49+ import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
50+ import androidx.wear.compose.material3.Button
51+ import androidx.wear.compose.material3.ListHeader
52+ import androidx.wear.compose.material3.MaterialTheme
53+ import androidx.wear.compose.material3.Picker
54+ import androidx.wear.compose.material3.ButtonDefaults
55+ import androidx.wear.compose.material3.ScreenScaffold
56+ import androidx.wear.compose.material3.ScrollIndicator
57+ import androidx.wear.compose.material3 .Text
58+ import androidx.wear.compose.material3 .rememberPickerState
6159import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices
6260import androidx.wear.compose.ui.tooling.preview.WearPreviewFontScales
6361import kotlinx.coroutines.launch
6462
65- @OptIn(ExperimentalWearFoundationApi ::class )
66- @Composable
67- fun ScrollableScreen () {
68- // This sample doesn't add a Time Text at the top of the screen.
69- // If using Time Text, add padding to ensure content does not overlap with Time Text.
70- // [START android_wear_rotary_input]
71- val listState = rememberScalingLazyListState()
72- Scaffold (
73- positionIndicator = {
74- PositionIndicator (scalingLazyListState = listState)
75- }
76- ) {
77-
78- val focusRequester = rememberActiveFocusRequester()
79- val coroutineScope = rememberCoroutineScope()
80-
81- ScalingLazyColumn (
82- modifier = Modifier
83- .onRotaryScrollEvent {
84- coroutineScope.launch {
85- listState.scrollBy(it.verticalScrollPixels)
86- listState.animateScrollBy(0f )
87- }
88- true
89- }
90- .focusRequester(focusRequester)
91- .focusable()
92- .fillMaxSize(),
93- state = listState
94- ) {
95- // Content goes here
96- // [START_EXCLUDE]
97- items(count = 5 ) {
98- Chip (onClick = { }, label = { Text (" Item #$it " ) })
99- }
100- // [END_EXCLUDE]
101- }
102- }
103- // [END android_wear_rotary_input]
104- }
105-
106- @OptIn(ExperimentalComposeUiApi ::class )
10763@Composable
10864fun TimePicker () {
109- val textStyle = MaterialTheme .typography.display1
65+ val textStyle = MaterialTheme .typography.displayMedium
11066
11167 // [START android_wear_rotary_input_picker]
11268 var selectedColumn by remember { mutableIntStateOf(0 ) }
@@ -120,8 +76,8 @@ fun TimePicker() {
12076 fun Option (column : Int , text : String ) = Box (modifier = Modifier .fillMaxSize()) {
12177 Text (
12278 text = text, style = textStyle,
123- color = if (selectedColumn == column) MaterialTheme .colors .secondary
124- else MaterialTheme .colors .onBackground,
79+ color = if (selectedColumn == column) MaterialTheme .colorScheme .secondary
80+ else MaterialTheme .colorScheme .onBackground,
12581 modifier = Modifier
12682 .pointerInteropFilter {
12783 if (it.action == MotionEvent .ACTION_DOWN ) selectedColumn = column
@@ -130,7 +86,7 @@ fun TimePicker() {
13086 )
13187 }
13288 // [END_EXCLUDE]
133- Scaffold (modifier = Modifier .fillMaxSize()) {
89+ ScreenScaffold (modifier = Modifier .fillMaxSize()) {
13490 Row (
13591 // [START_EXCLUDE]
13692 modifier = Modifier .fillMaxSize(),
@@ -142,10 +98,10 @@ fun TimePicker() {
14298 // [START_EXCLUDE]
14399 val hourState = rememberPickerState(
144100 initialNumberOfOptions = 12 ,
145- initiallySelectedOption = 5
101+ initiallySelectedIndex = 5
146102 )
147103 val hourContentDescription by remember {
148- derivedStateOf { " ${hourState.selectedOption + 1 } hours" }
104+ derivedStateOf { " ${hourState.selectedOptionIndex + 1 } hours" }
149105 }
150106 // [END_EXCLUDE]
151107 Picker (
@@ -163,18 +119,18 @@ fun TimePicker() {
163119 // ...
164120 // [START_EXCLUDE]
165121 state = hourState,
166- contentDescription = hourContentDescription,
122+ contentDescription = { hourContentDescription} ,
167123 option = { hour: Int -> Option (0 , " %2d" .format(hour + 1 )) }
168124 // [END_EXCLUDE]
169125 )
170126 // [START_EXCLUDE]
171127 Spacer (Modifier .width(8 .dp))
172- Text (text = " :" , style = textStyle, color = MaterialTheme .colors .onBackground)
128+ Text (text = " :" , style = textStyle, color = MaterialTheme .colorScheme .onBackground)
173129 Spacer (Modifier .width(8 .dp))
174130 val minuteState =
175- rememberPickerState(initialNumberOfOptions = 60 , initiallySelectedOption = 0 )
131+ rememberPickerState(initialNumberOfOptions = 60 , initiallySelectedIndex = 0 )
176132 val minuteContentDescription by remember {
177- derivedStateOf { " ${minuteState.selectedOption } minutes" }
133+ derivedStateOf { " ${minuteState.selectedOptionIndex } minutes" }
178134 }
179135 // [END_EXCLUDE]
180136 Picker (
@@ -192,7 +148,7 @@ fun TimePicker() {
192148 // ...
193149 // [START_EXCLUDE]
194150 state = minuteState,
195- contentDescription = minuteContentDescription,
151+ contentDescription = { minuteContentDescription} ,
196152 option = { minute: Int -> Option (1 , " %02d" .format(minute)) }
197153 // [END_EXCLUDE]
198154 )
@@ -214,9 +170,9 @@ fun SnapScrollableScreen() {
214170 // If using Time Text, add padding to ensure content does not overlap with Time Text.
215171 // [START android_wear_rotary_input_snap_fling]
216172 val listState = rememberScalingLazyListState()
217- Scaffold (
218- positionIndicator = {
219- PositionIndicator (scalingLazyListState = listState)
173+ ScreenScaffold (
174+ scrollIndicator = {
175+ ScrollIndicator (state = listState)
220176 }
221177 ) {
222178
@@ -230,10 +186,10 @@ fun SnapScrollableScreen() {
230186 // [START_EXCLUDE]
231187 item { ListHeader { Text (text = " List Header" ) } }
232188 items(20 ) {
233- Chip (
189+ Button (
234190 onClick = {},
235191 label = { Text (" List item $it " ) },
236- colors = ChipDefaults .secondaryChipColors ()
192+ colors = ButtonDefaults .filledTonalButtonColors ()
237193 )
238194 }
239195 // [END_EXCLUDE]
@@ -245,10 +201,10 @@ fun SnapScrollableScreen() {
245201@Composable
246202fun PositionScrollIndicator () {
247203 // [START android_wear_rotary_position_indicator]
248- val listState = rememberScalingLazyListState ()
249- Scaffold (
250- positionIndicator = {
251- PositionIndicator (scalingLazyListState = listState)
204+ val listState = rememberTransformingLazyColumnState ()
205+ ScreenScaffold (
206+ scrollIndicator = {
207+ ScrollIndicator (state = listState)
252208 }
253209 ) {
254210 // ...
@@ -263,13 +219,6 @@ fun TimePickerPreview() {
263219 TimePicker ()
264220}
265221
266- @WearPreviewDevices
267- @WearPreviewFontScales
268- @Composable
269- fun ScrollableScreenPreview () {
270- ScrollableScreen ()
271- }
272-
273222@WearPreviewDevices
274223@WearPreviewFontScales
275224@Composable
0 commit comments