diff --git a/compose/recomposehighlighter/src/main/java/com/example/android/compose/recomposehighlighter/RecomposeHighlighter.kt b/compose/recomposehighlighter/src/main/java/com/example/android/compose/recomposehighlighter/RecomposeHighlighter.kt index cc92daed6..8fe1a4ed5 100644 --- a/compose/recomposehighlighter/src/main/java/com/example/android/compose/recomposehighlighter/RecomposeHighlighter.kt +++ b/compose/recomposehighlighter/src/main/java/com/example/android/compose/recomposehighlighter/RecomposeHighlighter.kt @@ -115,7 +115,8 @@ private class RecomposeHighlighterModifier : Modifier.Node(), DrawModifierNode { // Draw actual content. drawContent() - // Below is to draw the highlight, if necessary. A lot of the logic is copied from Modifier.border + // Below is to draw the highlight, if necessary. + // A lot of the logic is copied from Modifier.border val hasValidBorderParams = size.minDimension > 0f if (!hasValidBorderParams || totalCompositions <= 0) { diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/SnippetsActivity.kt b/compose/snippets/src/main/java/com/example/compose/snippets/SnippetsActivity.kt index 48f2a1109..bccedd691 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/SnippetsActivity.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/SnippetsActivity.kt @@ -25,6 +25,8 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.ui.Modifier +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController @@ -79,58 +81,70 @@ class SnippetsActivity : ComponentActivity() { composable("LandingScreen") { LandingScreen { navController.navigate(it.route) } } - Destination.entries.forEach { destination -> - composable(destination.route) { - when (destination) { - Destination.BrushExamples -> BrushExamplesScreen() - Destination.ImageExamples -> ImageExamplesScreen() - Destination.AnimationQuickGuideExamples -> AnimationExamplesScreen() - Destination.ScreenshotExample -> BitmapFromComposableFullSnippet() - Destination.ComponentsExamples -> ComponentsScreen { - navController.navigate( - it.route - ) - } - Destination.ShapesExamples -> ApplyPolygonAsClipImage() - Destination.SharedElementExamples -> PlaceholderSizeAnimated_Demo() - Destination.PagerExamples -> PagerExamples() - } - } - } - TopComponentsDestination.entries.forEach { destination -> - composable(destination.route) { - when (destination) { - TopComponentsDestination.CardExamples -> CardExamples() - TopComponentsDestination.SwitchExamples -> SwitchExamples() - TopComponentsDestination.SliderExamples -> SliderExamples() - TopComponentsDestination.DialogExamples -> DialogExamples() - TopComponentsDestination.ChipExamples -> ChipExamples() - TopComponentsDestination.FloatingActionButtonExamples -> FloatingActionButtonExamples() - TopComponentsDestination.ButtonExamples -> ButtonExamples() - TopComponentsDestination.ProgressIndicatorExamples -> ProgressIndicatorExamples() - TopComponentsDestination.ScaffoldExample -> ScaffoldExample() - TopComponentsDestination.AppBarExamples -> AppBarExamples { - navController.popBackStack() - } - TopComponentsDestination.CheckboxExamples -> CheckboxExamples() - TopComponentsDestination.DividerExamples -> DividerExamples() - TopComponentsDestination.BadgeExamples -> BadgeExamples() - TopComponentsDestination.PartialBottomSheet -> PartialBottomSheet() - TopComponentsDestination.TimePickerExamples -> TimePickerExamples() - TopComponentsDestination.DatePickerExamples -> DatePickerExamples() - TopComponentsDestination.CarouselExamples -> CarouselExamples() - TopComponentsDestination.MenusExample -> MenusExamples() - TopComponentsDestination.TooltipExamples -> TooltipExamples() - TopComponentsDestination.NavigationDrawerExamples -> NavigationDrawerExamples() - TopComponentsDestination.SegmentedButtonExamples -> SegmentedButtonExamples() - TopComponentsDestination.SwipeToDismissBoxExamples -> SwipeToDismissBoxExamples() - TopComponentsDestination.SearchBarExamples -> SearchBarExamples() - } - } - } + destinations(navController) + topComponentsDestinations(navController) } } } } } } + +private fun NavGraphBuilder.destinations(navController: NavHostController) { + Destination.entries.forEach { destination -> + composable(destination.route) { + when (destination) { + Destination.BrushExamples -> BrushExamplesScreen() + Destination.ImageExamples -> ImageExamplesScreen() + Destination.AnimationQuickGuideExamples -> AnimationExamplesScreen() + Destination.ScreenshotExample -> BitmapFromComposableFullSnippet() + Destination.ComponentsExamples -> ComponentsScreen { + navController.navigate( + it.route + ) + } + + Destination.ShapesExamples -> ApplyPolygonAsClipImage() + Destination.SharedElementExamples -> PlaceholderSizeAnimated_Demo() + Destination.PagerExamples -> PagerExamples() + } + } + } +} + +private fun NavGraphBuilder.topComponentsDestinations(navController: NavHostController) { + TopComponentsDestination.entries.forEach { destination -> + composable(destination.route) { + when (destination) { + TopComponentsDestination.CardExamples -> CardExamples() + TopComponentsDestination.SwitchExamples -> SwitchExamples() + TopComponentsDestination.SliderExamples -> SliderExamples() + TopComponentsDestination.DialogExamples -> DialogExamples() + TopComponentsDestination.ChipExamples -> ChipExamples() + TopComponentsDestination.FloatingActionButtonExamples -> + FloatingActionButtonExamples() + + TopComponentsDestination.ButtonExamples -> ButtonExamples() + TopComponentsDestination.ProgressIndicatorExamples -> ProgressIndicatorExamples() + TopComponentsDestination.ScaffoldExample -> ScaffoldExample() + TopComponentsDestination.AppBarExamples -> AppBarExamples { + navController.popBackStack() + } + + TopComponentsDestination.CheckboxExamples -> CheckboxExamples() + TopComponentsDestination.DividerExamples -> DividerExamples() + TopComponentsDestination.BadgeExamples -> BadgeExamples() + TopComponentsDestination.PartialBottomSheet -> PartialBottomSheet() + TopComponentsDestination.TimePickerExamples -> TimePickerExamples() + TopComponentsDestination.DatePickerExamples -> DatePickerExamples() + TopComponentsDestination.CarouselExamples -> CarouselExamples() + TopComponentsDestination.MenusExample -> MenusExamples() + TopComponentsDestination.TooltipExamples -> TooltipExamples() + TopComponentsDestination.NavigationDrawerExamples -> NavigationDrawerExamples() + TopComponentsDestination.SegmentedButtonExamples -> SegmentedButtonExamples() + TopComponentsDestination.SwipeToDismissBoxExamples -> SwipeToDismissBoxExamples() + TopComponentsDestination.SearchBarExamples -> SearchBarExamples() + } + } + } +} diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleListDetailPaneScaffold.kt b/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleListDetailPaneScaffold.kt index a6be83b43..c6316f50b 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleListDetailPaneScaffold.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleListDetailPaneScaffold.kt @@ -190,12 +190,15 @@ fun SampleListDetailPaneScaffoldWithPredictiveBackFull() { ) } -fun customPaneScaffoldDirective(currentWindowAdaptiveInfo: WindowAdaptiveInfo): PaneScaffoldDirective { +fun customPaneScaffoldDirective( + currentWindowAdaptiveInfo: WindowAdaptiveInfo, +): PaneScaffoldDirective { + val windowSizeClass = currentWindowAdaptiveInfo.windowSizeClass val horizontalPartitions = when { - currentWindowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint( + windowSizeClass.isWidthAtLeastBreakpoint( WIDTH_DP_EXPANDED_LOWER_BOUND ) -> 3 - currentWindowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint( + windowSizeClass.isWidthAtLeastBreakpoint( WIDTH_DP_MEDIUM_LOWER_BOUND ) -> 2 else -> 1 diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt b/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt index 7132c5e7f..9dc7fdc2b 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt @@ -73,13 +73,18 @@ fun SampleNavigableSupportingPaneScaffoldFull() { .safeContentPadding() .background(Color.Red) ) { - if (scaffoldNavigator.scaffoldValue[SupportingPaneScaffoldRole.Supporting] == PaneAdaptedValue.Hidden) { + val shouldShowSupportingPane = + scaffoldNavigator.scaffoldValue[SupportingPaneScaffoldRole.Supporting] == + PaneAdaptedValue.Hidden + if (shouldShowSupportingPane) { Button( modifier = Modifier .wrapContentSize(), onClick = { scope.launch { - scaffoldNavigator.navigateTo(SupportingPaneScaffoldRole.Supporting) + scaffoldNavigator.navigateTo( + pane = SupportingPaneScaffoldRole.Supporting, + ) } } ) { @@ -144,7 +149,8 @@ fun SampleNavigableSupportingPaneScaffoldSimplified() { navigator = scaffoldNavigator, mainPane = { MainPane( - shouldShowSupportingPaneButton = scaffoldNavigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden, + shouldShowSupportingPaneButton = + scaffoldNavigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden, onNavigateToSupportingPane = { scope.launch { scaffoldNavigator.navigateTo(ThreePaneScaffoldRole.Secondary) @@ -157,6 +163,7 @@ fun SampleNavigableSupportingPaneScaffoldSimplified() { // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_simplified] } +/* ktlint-disable standard:max-line-length */ @OptIn(ExperimentalMaterial3AdaptiveApi::class) @Composable fun SampleSupportingPaneScaffoldSimplifiedWithPredictiveBackHandler() { @@ -173,8 +180,10 @@ fun SampleSupportingPaneScaffoldSimplifiedWithPredictiveBackHandler() { directive = scaffoldNavigator.scaffoldDirective, scaffoldState = scaffoldNavigator.scaffoldState, mainPane = { + val shouldShowSupportingPaneButton = + scaffoldNavigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden MainPane( - shouldShowSupportingPaneButton = scaffoldNavigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden, + shouldShowSupportingPaneButton = shouldShowSupportingPaneButton, onNavigateToSupportingPane = { scope.launch { scaffoldNavigator.navigateTo(ThreePaneScaffoldRole.Secondary) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationQuickGuide.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationQuickGuide.kt index 7c6493578..b5c71a4fe 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationQuickGuide.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationQuickGuide.kt @@ -132,7 +132,8 @@ fun AnimatedVisibilityCookbook() { var visible by remember { mutableStateOf(true) } - // Animated visibility will eventually remove the item from the composition once the animation has finished. + // Animated visibility will eventually remove the item from the composition once the + // animation has finished. AnimatedVisibility(visible) { // your composable here // [START_EXCLUDE] diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationSnippets.kt index bdb82790d..66ab3f787 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/AnimationSnippets.kt @@ -938,7 +938,10 @@ private fun ContentIcon() { // [START android_compose_animations_char_by_char] @Composable private fun AnimatedText() { - val text = "This text animates as though it is being typed \uD83E\uDDDE\u200D♀\uFE0F \uD83D\uDD10 \uD83D\uDC69\u200D❤\uFE0F\u200D\uD83D\uDC68 \uD83D\uDC74\uD83C\uDFFD" + val text = "This text animates as though it is being typed" + + " \uD83E\uDDDE\u200D♀\uFE0F \uD83D\uDD10" + + " \uD83D\uDC69\u200D❤\uFE0F\u200D\uD83D\uDC68" + + " \uD83D\uDC74\uD83C\uDFFD" // Use BreakIterator as it correctly iterates over characters regardless of how they are // stored, for example, some emojis are made up of multiple characters. diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/AnimatedVisibilitySharedElementSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/AnimatedVisibilitySharedElementSnippets.kt index 5a51b8d56..857839c90 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/AnimatedVisibilitySharedElementSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/AnimatedVisibilitySharedElementSnippets.kt @@ -14,7 +14,10 @@ * limitations under the License. */ -@file:OptIn(ExperimentalSharedTransitionApi::class, ExperimentalSharedTransitionApi::class) +@file:OptIn( + ExperimentalSharedTransitionApi::class, + ExperimentalSharedTransitionApi::class, +) package com.example.compose.snippets.animations.sharedelement @@ -87,7 +90,7 @@ private fun AnimatedVisibilitySharedElementShortenedExample() { .fillMaxSize() .background(Color.LightGray.copy(alpha = 0.5f)) .padding(16.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) + verticalArrangement = Arrangement.spacedBy(8.dp), // [END_EXCLUDE] ) { items(listSnacks) { snack -> @@ -95,18 +98,22 @@ private fun AnimatedVisibilitySharedElementShortenedExample() { visible = snack != selectedSnack, enter = fadeIn() + scaleIn(), exit = fadeOut() + scaleOut(), - modifier = Modifier.animateItem() + modifier = Modifier.animateItem(), ) { Box( modifier = Modifier .sharedBounds( - sharedContentState = rememberSharedContentState(key = "${snack.name}-bounds"), + sharedContentState = rememberSharedContentState( + key = "${snack.name}-bounds" + ), // Using the scope provided by AnimatedVisibility animatedVisibilityScope = this, - clipInOverlayDuringTransition = OverlayClip(shapeForSharedElement) + clipInOverlayDuringTransition = OverlayClip( + clipShape = shapeForSharedElement, + ) ) - .background(Color.White, shapeForSharedElement) - .clip(shapeForSharedElement) + .background(Color.White, shape = shapeForSharedElement) + .clip(shape = shapeForSharedElement), ) { SnackContents( snack = snack, @@ -116,7 +123,7 @@ private fun AnimatedVisibilitySharedElementShortenedExample() { ), onClick = { selectedSnack = snack - } + }, ) } } @@ -127,7 +134,7 @@ private fun AnimatedVisibilitySharedElementShortenedExample() { snack = selectedSnack, onConfirmClick = { selectedSnack = null - } + }, ) } // [END android_compose_shared_elements_animated_visibility] @@ -137,7 +144,7 @@ private fun AnimatedVisibilitySharedElementShortenedExample() { fun SharedTransitionScope.SnackEditDetails( snack: Snack?, modifier: Modifier = Modifier, - onConfirmClick: () -> Unit + onConfirmClick: () -> Unit, ) { AnimatedContent( modifier = modifier, @@ -145,11 +152,11 @@ fun SharedTransitionScope.SnackEditDetails( transitionSpec = { fadeIn() togetherWith fadeOut() }, - label = "SnackEditDetails" + label = "SnackEditDetails", ) { targetSnack -> Box( modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center + contentAlignment = Alignment.Center, ) { if (targetSnack != null) { Box( @@ -158,18 +165,21 @@ fun SharedTransitionScope.SnackEditDetails( .clickable { onConfirmClick() } - .background(Color.Black.copy(alpha = 0.5f)) + .background(Color.Black.copy(alpha = 0.5f)), ) Column( modifier = Modifier .padding(horizontal = 16.dp) .sharedBounds( - sharedContentState = rememberSharedContentState(key = "${targetSnack.name}-bounds"), + sharedContentState = rememberSharedContentState( + key = "${targetSnack.name}-bounds", + ), animatedVisibilityScope = this@AnimatedContent, - clipInOverlayDuringTransition = OverlayClip(shapeForSharedElement) + clipInOverlayDuringTransition = + OverlayClip(shapeForSharedElement), ) .background(Color.White, shapeForSharedElement) - .clip(shapeForSharedElement) + .clip(shapeForSharedElement), ) { SnackContents( @@ -186,7 +196,7 @@ fun SharedTransitionScope.SnackEditDetails( Modifier .fillMaxWidth() .padding(bottom = 8.dp, end = 8.dp), - horizontalArrangement = Arrangement.End + horizontalArrangement = Arrangement.End, ) { TextButton(onClick = { onConfirmClick() }) { Text(text = "Save changes") @@ -202,7 +212,7 @@ fun SharedTransitionScope.SnackEditDetails( fun SnackContents( snack: Snack, modifier: Modifier = Modifier, - onClick: () -> Unit + onClick: () -> Unit, ) { Column( modifier = modifier @@ -211,7 +221,7 @@ fun SnackContents( indication = null ) { onClick() - } + }, ) { Image( painter = painterResource(id = snack.image), @@ -219,14 +229,14 @@ fun SnackContents( .fillMaxWidth() .aspectRatio(20f / 9f), contentScale = ContentScale.Crop, - contentDescription = null + contentDescription = null, ) Text( text = snack.name, modifier = Modifier .wrapContentWidth() .padding(8.dp), - style = MaterialTheme.typography.titleSmall + style = MaterialTheme.typography.titleSmall, ) } } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/BasicSharedElementSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/BasicSharedElementSnippets.kt index c246a8098..7b09c679e 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/BasicSharedElementSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/BasicSharedElementSnippets.kt @@ -136,8 +136,15 @@ private class SharedElementBasicUsage2 { // [START_EXCLUDE] modifier = Modifier .padding(top = 200.dp, start = 16.dp, end = 16.dp) - .border(1.dp, Color.Gray.copy(alpha = 0.5f), RoundedCornerShape(8.dp)) - .background(RoseLight, RoundedCornerShape(8.dp)) + .border( + width = 1.dp, + color = Color.Gray.copy(alpha = 0.5f), + shape = RoundedCornerShape(8.dp), + ) + .background( + color = RoseLight, + shape = RoundedCornerShape(8.dp), + ) .clickable { onBack() } @@ -155,11 +162,15 @@ private class SharedElementBasicUsage2 { // [START_EXCLUDE] Text("Cupcake", fontSize = 28.sp) Text( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet lobortis velit. " + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + + "Curabitur sit amet lobortis velit. " + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + - " Curabitur sagittis, lectus posuere imperdiet facilisis, nibh massa " + - "molestie est, quis dapibus orci ligula non magna. Pellentesque rhoncus " + - "hendrerit massa quis ultricies. Curabitur congue ullamcorper leo, at maximus" + " Curabitur sagittis, lectus posuere imperdiet" + + " facilisis, nibh massa " + + "molestie est, quis dapibus orci ligula non magna." + + " Pellentesque rhoncus " + + "hendrerit massa quis ultricies. Curabitur congue" + + " ullamcorper leo, at maximus" ) // [END_EXCLUDE] } @@ -287,11 +298,15 @@ private class SharedElementBasicUsage3 { ) ) Text( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet lobortis velit. " + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + + " Curabitur sit amet lobortis velit. " + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + - " Curabitur sagittis, lectus posuere imperdiet facilisis, nibh massa " + - "molestie est, quis dapibus orci ligula non magna. Pellentesque rhoncus " + - "hendrerit massa quis ultricies. Curabitur congue ullamcorper leo, at maximus" + " Curabitur sagittis, lectus posuere imperdiet facilisis," + + " nibh massa " + + "molestie est, quis dapibus orci ligula non magna." + + " Pellentesque rhoncus " + + "hendrerit massa quis ultricies. Curabitur congue" + + " ullamcorper leo, at maximus" ) // [END_EXCLUDE] } @@ -450,7 +465,8 @@ val LocalSharedTransitionScope = compositionLocalOf { nu @Composable private fun SharedElementScope_CompositionLocal() { - // An example of how to use composition locals to pass around the shared transition scope, far down your UI tree. + // An example of how to use composition locals to pass + // around the shared transition scope, far down your UI tree. // [START_EXCLUDE] val state = remember { mutableStateOf(false) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/CustomizeSharedElementsSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/CustomizeSharedElementsSnippets.kt index 079c68347..51f88a271 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/CustomizeSharedElementsSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/CustomizeSharedElementsSnippets.kt @@ -157,7 +157,11 @@ private fun MainContent( ), boundsTransform = boundsTransform ) - .border(1.dp, Color.Gray.copy(alpha = 0.5f), RoundedCornerShape(8.dp)) + .border( + width = 1.dp, + color = Color.Gray.copy(alpha = 0.5f), + shape = RoundedCornerShape(8.dp), + ) .background(LavenderLight, RoundedCornerShape(8.dp)) .clickable( interactionSource = remember { MutableInteractionSource() }, @@ -230,7 +234,11 @@ private fun DetailsContent( ), boundsTransform = boundsTransform ) - .border(1.dp, Color.Gray.copy(alpha = 0.5f), RoundedCornerShape(8.dp)) + .border( + width = 1.dp, + color = Color.Gray.copy(alpha = 0.5f), + shape = RoundedCornerShape(8.dp), + ) .background(RoseLight, RoundedCornerShape(8.dp)) .clickable( interactionSource = remember { MutableInteractionSource() }, @@ -271,11 +279,15 @@ private fun DetailsContent( ) // [END android_compose_shared_element_text_bounds_transform] Text( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet lobortis velit. " + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + + "Curabitur sit amet lobortis velit. " + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + - " Curabitur sagittis, lectus posuere imperdiet facilisis, nibh massa " + - "molestie est, quis dapibus orci ligula non magna. Pellentesque rhoncus " + - "hendrerit massa quis ultricies. Curabitur congue ullamcorper leo, at maximus", + " Curabitur sagittis, lectus posuere" + + " imperdiet facilisis, nibh massa " + + "molestie est, quis dapibus orci" + + " ligula non magna. Pellentesque rhoncus " + + "hendrerit massa quis ultricies." + + " Curabitur congue ullamcorper leo, at maximus", modifier = Modifier.skipToLookaheadSize() ) } @@ -369,11 +381,15 @@ private fun SharedElement_Clipping() { ) ) Text( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet lobortis velit. " + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + + " Curabitur sit amet lobortis velit. " + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + - " Curabitur sagittis, lectus posuere imperdiet facilisis, nibh massa " + - "molestie est, quis dapibus orci ligula non magna. Pellentesque rhoncus " + - "hendrerit massa quis ultricies. Curabitur congue ullamcorper leo, at maximus" + " Curabitur sagittis, lectus posuere imperdiet facilisis," + + " nibh massa " + + "molestie est, quis dapibus orci ligula non magna." + + " Pellentesque rhoncus " + + "hendrerit massa quis ultricies. Curabitur congue" + + " ullamcorper leo, at maximus" ) } } @@ -479,8 +495,10 @@ private fun SharedElement_SkipLookaheadSize() { tint = Color.White, modifier = Modifier .sharedBounds( - rememberSharedContentState(key = "icon_background"), - this@AnimatedVisibility + sharedContentState = rememberSharedContentState( + key = "icon_background", + ), + animatedVisibilityScope = this@AnimatedVisibility, ) .background(selectionColor, RoundedCornerShape(50)) .padding( @@ -490,8 +508,8 @@ private fun SharedElement_SkipLookaheadSize() { end = 20.dp ) .sharedElement( - rememberSharedContentState(key = "icon"), - this@AnimatedVisibility + sharedContentState = rememberSharedContentState(key = "icon"), + animatedVisibilityScope = this@AnimatedVisibility, ) ) } @@ -509,13 +527,15 @@ private fun SharedElement_SkipLookaheadSize() { .align(Alignment.BottomEnd) .padding(30.dp) .sharedBounds( - rememberSharedContentState(key = "container"), - this@AnimatedVisibility, + sharedContentState = rememberSharedContentState(key = "container"), + animatedVisibilityScope = this@AnimatedVisibility, enter = EnterTransition.None, ) .sharedBounds( - rememberSharedContentState(key = "icon_background"), - this@AnimatedVisibility, + sharedContentState = rememberSharedContentState( + key = "icon_background", + ), + animatedVisibilityScope = this@AnimatedVisibility, enter = EnterTransition.None, exit = ExitTransition.None ), @@ -530,8 +550,8 @@ private fun SharedElement_SkipLookaheadSize() { .padding(30.dp) .size(40.dp) .sharedElement( - rememberSharedContentState(key = "icon"), - this@AnimatedVisibility + sharedContentState = rememberSharedContentState(key = "icon"), + animatedVisibilityScope = this@AnimatedVisibility, ) ) } @@ -561,7 +581,11 @@ fun PlaceholderSizeAnimated_Demo() { navController = navController, startDestination = "home" ) { - composable("home", enterTransition = { fadeIn() }, exitTransition = { fadeOut() }) { + composable( + route = "home", + enterTransition = { fadeIn() }, + exitTransition = { fadeOut() }, + ) { Column(modifier = Modifier.fillMaxSize()) { Row(modifier = Modifier.horizontalScroll(rememberScrollState())) { (listSnacks).forEachIndexed { index, snack -> @@ -572,9 +596,13 @@ fun PlaceholderSizeAnimated_Demo() { modifier = Modifier .padding(8.dp) .sharedBounds( - rememberSharedContentState(key = "image-${snack.name}"), + sharedContentState = rememberSharedContentState( + key = "image-${snack.name}", + ), animatedVisibilityScope = this@composable, - placeHolderSize = SharedTransitionScope.PlaceHolderSize.animatedSize + placeHolderSize = SharedTransitionScope + .PlaceHolderSize + .animatedSize, ) .clickable { navController.navigate("details/$index") @@ -603,9 +631,9 @@ fun PlaceholderSizeAnimated_Demo() { } } composable( - "details/{id}", + route = "details/{id}", arguments = listOf(navArgument("id") { type = NavType.IntType }), - enterTransition = { fadeIn() }, exitTransition = { fadeOut() } + enterTransition = { fadeIn() }, exitTransition = { fadeOut() }, ) { backStackEntry -> val id = backStackEntry.arguments?.getInt("id") val snack = listSnacks[id!!] @@ -622,9 +650,13 @@ fun PlaceholderSizeAnimated_Demo() { contentScale = ContentScale.Crop, modifier = Modifier .sharedBounds( - rememberSharedContentState(key = "image-${snack.name}"), + sharedContentState = rememberSharedContentState( + key = "image-${snack.name}", + ), animatedVisibilityScope = this@composable, - placeHolderSize = SharedTransitionScope.PlaceHolderSize.animatedSize + placeHolderSize = SharedTransitionScope + .PlaceHolderSize + .animatedSize, ) .clip(RoundedCornerShape(8.dp)) .fillMaxWidth() @@ -651,14 +683,19 @@ fun CustomPredictiveBackHandle() { } val transition = rememberTransition(transitionState = seekableTransitionState) - PredictiveBackHandler(seekableTransitionState.currentState is Screen.Details) { progress -> + PredictiveBackHandler( + enabled = seekableTransitionState.currentState is Screen.Details, + ) { progress -> try { // Whilst a back gesture is in progress, backEvents will be fired for each progress // update. progress.collect { backEvent -> // For each backEvent that comes in, we manually seekTo the reported back progress try { - seekableTransitionState.seekTo(backEvent.progress, targetState = Screen.Home) + seekableTransitionState.seekTo( + fraction = backEvent.progress, + targetState = Screen.Home, + ) } catch (_: CancellationException) { // seekTo may be cancelled as expected, if animateTo or subsequent seekTo calls // before the current seekTo finishes, in this case, we ignore the cancellation. @@ -666,11 +703,11 @@ fun CustomPredictiveBackHandle() { } // Once collection has completed, we are either fully in the target state, or need // to progress towards the end. - seekableTransitionState.animateTo(seekableTransitionState.targetState) + seekableTransitionState.animateTo(targetState = seekableTransitionState.targetState) } catch (e: CancellationException) { // When the predictive back gesture is cancelled, we snap to the end state to ensure // it completes its seeking animation back to the currentState - seekableTransitionState.snapTo(seekableTransitionState.currentState) + seekableTransitionState.snapTo(targetState = seekableTransitionState.currentState) throw e } } @@ -685,10 +722,16 @@ fun CustomPredictiveBackHandle() { onValueChange = { coroutineScope.launch { if (seekableTransitionState.currentState is Screen.Details) { - seekableTransitionState.seekTo(it, Screen.Home) + seekableTransitionState.seekTo( + fraction = it, + targetState = Screen.Home, + ) } else { // seek to the previously navigated index - seekableTransitionState.seekTo(it, Screen.Details(lastNavigatedIndex)) + seekableTransitionState.seekTo( + fraction = it, + targetState = Screen.Details(id = lastNavigatedIndex), + ) } } } @@ -703,7 +746,9 @@ fun CustomPredictiveBackHandle() { onItemClick = { coroutineScope.launch { lastNavigatedIndex = it - seekableTransitionState.animateTo(Screen.Details(it)) + seekableTransitionState.animateTo( + targetState = Screen.Details(it), + ) } } ) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedBoundsSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedBoundsSnippets.kt index 3878fa6ad..31cb24121 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedBoundsSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedBoundsSnippets.kt @@ -187,7 +187,8 @@ private fun DetailsContent( ) ) Text( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet lobortis velit. " + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + + "Curabitur sit amet lobortis velit. " + "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + " Curabitur sagittis, lectus posuere imperdiet facilisis, nibh massa " + "molestie est, quis dapibus orci ligula non magna. Pellentesque rhoncus " + diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedElementsWithNavigationSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedElementsWithNavigationSnippets.kt index cac68a586..93d279fad 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedElementsWithNavigationSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/animations/sharedelement/SharedElementsWithNavigationSnippets.kt @@ -70,18 +70,18 @@ fun SharedElement_PredictiveBack() { val navController = rememberNavController() NavHost( navController = navController, - startDestination = "home" + startDestination = "home", ) { composable("home") { HomeScreen( this@SharedTransitionLayout, this@composable, - { navController.navigate("details/$it") } + { navController.navigate("details/$it") }, ) } composable( "details/{item}", - arguments = listOf(navArgument("item") { type = NavType.IntType }) + arguments = listOf(navArgument("item") { type = NavType.IntType }), ) { backStackEntry -> val id = backStackEntry.arguments?.getInt("item") val snack = listSnacks[id!!] @@ -92,7 +92,7 @@ fun SharedElement_PredictiveBack() { this@composable, { navController.navigate("home") - } + }, ) } } @@ -105,7 +105,7 @@ fun DetailsScreen( snack: Snack, sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope, - onBackPressed: () -> Unit + onBackPressed: () -> Unit, ) { with(sharedTransitionScope) { Column( @@ -116,26 +116,28 @@ fun DetailsScreen( } ) { Image( - painterResource(id = snack.image), + painter = painterResource(id = snack.image), contentDescription = snack.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( - sharedTransitionScope.rememberSharedContentState(key = "image-$id"), + sharedContentState = sharedTransitionScope + .rememberSharedContentState(key = "image-$id"), animatedVisibilityScope = animatedContentScope ) .aspectRatio(1f) - .fillMaxWidth() + .fillMaxWidth(), ) Text( - snack.name, fontSize = 18.sp, - modifier = - Modifier + text = snack.name, + fontSize = 18.sp, + modifier = Modifier .sharedElement( - sharedTransitionScope.rememberSharedContentState(key = "text-$id"), + sharedContentState = sharedTransitionScope + .rememberSharedContentState(key = "text-$id"), animatedVisibilityScope = animatedContentScope ) - .fillMaxWidth() + .fillMaxWidth(), ) } } @@ -151,7 +153,7 @@ fun HomeScreen( modifier = Modifier .fillMaxSize() .padding(8.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) + verticalArrangement = Arrangement.spacedBy(8.dp), ) { itemsIndexed(listSnacks) { index, item -> Row( @@ -167,7 +169,8 @@ fun HomeScreen( contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( - sharedTransitionScope.rememberSharedContentState(key = "image-$index"), + sharedContentState = sharedTransitionScope + .rememberSharedContentState(key = "image-$index"), animatedVisibilityScope = animatedContentScope ) .size(100.dp) @@ -178,7 +181,8 @@ fun HomeScreen( modifier = Modifier .align(Alignment.CenterVertically) .sharedElement( - sharedTransitionScope.rememberSharedContentState(key = "text-$index"), + sharedContentState = sharedTransitionScope + .rememberSharedContentState(key = "text-$index"), animatedVisibilityScope = animatedContentScope, ) ) @@ -191,6 +195,6 @@ fun HomeScreen( data class Snack( val name: String, val description: String, - @DrawableRes val image: Int + @DrawableRes val image: Int, ) // [END android_compose_shared_element_predictive_back] diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/AppBar.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/AppBar.kt index 354efe635..927abb611 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/AppBar.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/AppBar.kt @@ -306,7 +306,9 @@ fun MediumTopAppBarExample() { // [START android_compose_components_largetopappbar] @Composable fun LargeTopAppBarExample() { - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( + state = rememberTopAppBarState(), + ) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), @@ -469,7 +471,11 @@ private fun AppBarMultiSelectionExample( /* click action */ }, onLongClick = { - if (isItemSelected) selectedItems -= index else selectedItems += index + if (isItemSelected) { + selectedItems -= index + } else { + selectedItems += index + } } ) ) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt index 1208f816f..5f0ddf391 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt @@ -42,15 +42,25 @@ fun ButtonExamples() { horizontalAlignment = Alignment.CenterHorizontally, ) { Text("Filled button:") - FilledButtonExample(onClick = { Log.d("Filled button", "Filled button clicked.") }) + FilledButtonExample( + onClick = { Log.d("Filled button", "Filled button clicked.") }, + ) Text("Filled tonal button:") - FilledTonalButtonExample(onClick = { Log.d("Filled tonal button", "Filled tonal button clicked.") }) + FilledTonalButtonExample( + onClick = { Log.d("Filled tonal button", "Filled tonal button clicked.") }, + ) Text("Elevated button:") - ElevatedButtonExample(onClick = { Log.d("Elevated button", "Elevated button clicked.") }) + ElevatedButtonExample( + onClick = { Log.d("Elevated button", "Elevated button clicked.") }, + ) Text("Outlined button:") - OutlinedButtonExample(onClick = { Log.d("Outlined button", "Outlined button clicked.") }) + OutlinedButtonExample( + onClick = { Log.d("Outlined button", "Outlined button clicked.") }, + ) Text("Text button") - TextButtonExample(onClick = { Log.d("Text button", "Text button clicked.") }) + TextButtonExample( + onClick = { Log.d("Text button", "Text button clicked.") }, + ) } } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/DatePickers.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/DatePickers.kt index 692199123..7bdb3ce8d 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/DatePickers.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/DatePickers.kt @@ -105,7 +105,8 @@ fun DatePickerExamples() { // [END_EXCLUDE] if (selectedDate != null) { val date = Date(selectedDate!!) - val formattedDate = SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(date) + val formattedDate = + SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(date) Text("Selected date: $formattedDate") } else { Text("No date selected") @@ -121,8 +122,10 @@ fun DatePickerExamples() { if (selectedDateRange.first != null && selectedDateRange.second != null) { val startDate = Date(selectedDateRange.first!!) val endDate = Date(selectedDateRange.second!!) - val formattedStartDate = SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(startDate) - val formattedEndDate = SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(endDate) + val formattedStartDate = + SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(startDate) + val formattedEndDate = + SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(endDate) Text("Selected date range: $formattedStartDate - $formattedEndDate") } else { Text("No date range selected") @@ -294,9 +297,10 @@ fun DatePickerFieldToModal(modifier: Modifier = Modifier) { .fillMaxWidth() .pointerInput(selectedDate) { awaitEachGesture { - // Modifier.clickable doesn't work for text fields, so we use Modifier.pointerInput - // in the Initial pass to observe events before the text field consumes them - // in the Main pass. + // Modifier.clickable doesn't work for text fields, + // so we use Modifier.pointerInput + // in the Initial pass to observe events before + // the text field consumes them in the Main pass. awaitFirstDown(pass = PointerEventPass.Initial) val upEvent = waitForUpOrCancellation(pass = PointerEventPass.Initial) if (upEvent != null) { diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt index 59727c71b..16da9e5f3 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/IconButton.kt @@ -51,8 +51,16 @@ fun ToggleIconButtonExample() { onClick = { isToggled = !isToggled } ) { Icon( - painter = if (isToggled) painterResource(R.drawable.favorite_filled) else painterResource(R.drawable.favorite), - contentDescription = if (isToggled) "Selected icon button" else "Unselected icon button." + painter = if (isToggled) { + painterResource(R.drawable.favorite_filled) + } else { + painterResource(R.drawable.favorite) + }, + contentDescription = if (isToggled) { + "Selected icon button" + } else { + "Unselected icon button." + }, ) } } @@ -85,7 +93,11 @@ fun MomentaryIconButton( interactionSource = interactionSource ) { Icon( - painter = if (isPressed) painterResource(id = selectedImage) else painterResource(id = unselectedImage), + painter = if (isPressed) { + painterResource(id = selectedImage) + } else { + painterResource(id = unselectedImage) + }, contentDescription = contentDescription, ) } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/Menus.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/Menus.kt index a3468a7c2..978f827f3 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/Menus.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/Menus.kt @@ -197,8 +197,12 @@ fun DropdownMenuWithDetails() { // Second section DropdownMenuItem( text = { Text("Send Feedback") }, - leadingIcon = { Icon(Icons.Outlined.Feedback, contentDescription = null) }, - trailingIcon = { Icon(Icons.AutoMirrored.Outlined.Send, contentDescription = null) }, + leadingIcon = { + Icon(Icons.Outlined.Feedback, contentDescription = null) + }, + trailingIcon = { + Icon(Icons.AutoMirrored.Outlined.Send, contentDescription = null) + }, onClick = { /* Do something... */ } ) @@ -212,8 +216,12 @@ fun DropdownMenuWithDetails() { ) DropdownMenuItem( text = { Text("Help") }, - leadingIcon = { Icon(Icons.AutoMirrored.Outlined.Help, contentDescription = null) }, - trailingIcon = { Icon(Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) }, + leadingIcon = { + Icon(Icons.AutoMirrored.Outlined.Help, contentDescription = null) + }, + trailingIcon = { + Icon(Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) + }, onClick = { /* Do something... */ } ) } @@ -237,9 +245,17 @@ fun DropdownFilter(modifier: Modifier = Modifier) { verticalAlignment = Alignment.CenterVertically ) { Icon(Icons.Default.Tune, "Filters") - FilterChip(selected = false, onClick = { /*TODO*/ }, label = { Text("Time") }) + FilterChip( + selected = false, + onClick = { /*TODO*/ }, + label = { Text("Time") }, + ) DropdownFilterChip() - FilterChip(selected = false, onClick = { /*TODO*/ }, label = { Text("Wheelchair accessible") }) + FilterChip( + selected = false, + onClick = { /*TODO*/ }, + label = { Text("Wheelchair accessible") }, + ) } } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt index 9cad68934..413863465 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt @@ -190,7 +190,10 @@ fun NavigationTabExample(modifier: Modifier = Modifier) { var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> - PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) { + PrimaryTabRow( + selectedTabIndex = selectedDestination, + modifier = Modifier.padding(contentPadding), + ) { Destination.entries.forEachIndexed { index, destination -> Tab( selected = selectedDestination == index, diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/NavigationDrawer.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/NavigationDrawer.kt index 993f1c99a..e74693e19 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/NavigationDrawer.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/NavigationDrawer.kt @@ -77,10 +77,18 @@ fun DetailedDrawerExample( .verticalScroll(rememberScrollState()) ) { Spacer(Modifier.height(12.dp)) - Text("Drawer Title", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleLarge) + Text( + "Drawer Title", + modifier = Modifier.padding(16.dp), + style = MaterialTheme.typography.titleLarge, + ) HorizontalDivider() - Text("Section 1", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleMedium) + Text( + text = "Section 1", + modifier = Modifier.padding(16.dp), + style = MaterialTheme.typography.titleMedium, + ) NavigationDrawerItem( label = { Text("Item 1") }, selected = false, @@ -94,18 +102,32 @@ fun DetailedDrawerExample( HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) - Text("Section 2", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleMedium) + Text( + text = "Section 2", + modifier = Modifier.padding(16.dp), + style = MaterialTheme.typography.titleMedium, + ) NavigationDrawerItem( label = { Text("Settings") }, selected = false, - icon = { Icon(Icons.Outlined.Settings, contentDescription = null) }, + icon = { + Icon( + imageVector = Icons.Outlined.Settings, + contentDescription = null, + ) + }, badge = { Text("20") }, // Placeholder onClick = { /* Handle click */ } ) NavigationDrawerItem( label = { Text("Help and feedback") }, selected = false, - icon = { Icon(Icons.AutoMirrored.Outlined.Help, contentDescription = null) }, + icon = { + Icon( + imageVector = Icons.AutoMirrored.Outlined.Help, + contentDescription = null, + ) + }, onClick = { /* Handle click */ }, ) Spacer(Modifier.height(12.dp)) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/SearchBar.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/SearchBar.kt index f3243e299..d81e72598 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/SearchBar.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/SearchBar.kt @@ -180,7 +180,12 @@ fun CustomizableSearchBar( onResultClick: (String) -> Unit, // Customization options placeholder: @Composable () -> Unit = { Text("Search") }, - leadingIcon: @Composable (() -> Unit)? = { Icon(Icons.Default.Search, contentDescription = "Search") }, + leadingIcon: @Composable (() -> Unit)? = { + Icon( + Icons.Default.Search, + contentDescription = "Search", + ) + }, trailingIcon: @Composable (() -> Unit)? = null, supportingContent: (@Composable (String) -> Unit)? = null, leadingContent: (@Composable () -> Unit)? = null, diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/components/SwipeToDismissBox.kt b/compose/snippets/src/main/java/com/example/compose/snippets/components/SwipeToDismissBox.kt index 22dc99303..d9f5a7c42 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/components/SwipeToDismissBox.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/components/SwipeToDismissBox.kt @@ -70,7 +70,7 @@ fun SwipeToDismissBoxExamples() { // [START android_compose_components_todoitem] data class TodoItem( val itemDescription: String, - var isItemDone: Boolean = false + var isItemDone: Boolean = false, ) // [END android_compose_components_todoitem] @@ -88,7 +88,7 @@ fun TodoListItem( else if (it == EndToStart) onRemove(todoItem) // Reset item when toggling done status it != StartToEnd - } + }, ) SwipeToDismissBox( @@ -98,7 +98,11 @@ fun TodoListItem( when (swipeToDismissBoxState.dismissDirection) { StartToEnd -> { Icon( - if (todoItem.isItemDone) Icons.Default.CheckBox else Icons.Default.CheckBoxOutlineBlank, + imageVector = if (todoItem.isItemDone) { + Icons.Default.CheckBox + } else { + Icons.Default.CheckBoxOutlineBlank + }, contentDescription = if (todoItem.isItemDone) "Done" else "Not done", modifier = Modifier .fillMaxSize() @@ -122,11 +126,11 @@ fun TodoListItem( } Settled -> {} } - } + }, ) { ListItem( headlineContent = { Text(todoItem.itemDescription) }, - supportingContent = { Text("swipe me to update or remove.") } + supportingContent = { Text("swipe me to update or remove.") }, ) } } @@ -139,14 +143,14 @@ private fun SwipeItemExample() { val todoItems = remember { mutableStateListOf( TodoItem("Pay bills"), TodoItem("Buy groceries"), - TodoItem("Go to gym"), TodoItem("Get dinner") + TodoItem("Go to gym"), TodoItem("Get dinner"), ) } LazyColumn { items( items = todoItems, - key = { it.itemDescription } + key = { it.itemDescription }, ) { todoItem -> TodoListItem( todoItem = todoItem, @@ -156,7 +160,7 @@ private fun SwipeItemExample() { onRemove = { todoItem -> todoItems -= todoItem }, - modifier = Modifier.animateItem() + modifier = Modifier.animateItem(), ) } } @@ -177,7 +181,7 @@ fun TodoListItemWithAnimation( else if (it == EndToStart) onRemove(todoItem) // Reset item when toggling done status it != StartToEnd - } + }, ) SwipeToDismissBox( @@ -187,16 +191,26 @@ fun TodoListItemWithAnimation( when (swipeToDismissBoxState.dismissDirection) { StartToEnd -> { Icon( - if (todoItem.isItemDone) Icons.Default.CheckBox else Icons.Default.CheckBoxOutlineBlank, + imageVector = if (todoItem.isItemDone) { + Icons.Default.CheckBox + } else { + Icons.Default.CheckBoxOutlineBlank + }, contentDescription = if (todoItem.isItemDone) "Done" else "Not done", modifier = Modifier .fillMaxSize() .drawBehind { - drawRect(lerp(Color.LightGray, Color.Blue, swipeToDismissBoxState.progress)) + drawRect( + color = lerp( + start = Color.LightGray, + stop = Color.Blue, + fraction = swipeToDismissBoxState.progress + ) + ) } .wrapContentSize(Alignment.CenterStart) .padding(12.dp), - tint = Color.White + tint = Color.White, ) } EndToStart -> { @@ -205,10 +219,16 @@ fun TodoListItemWithAnimation( contentDescription = "Remove item", modifier = Modifier .fillMaxSize() - .background(lerp(Color.LightGray, Color.Red, swipeToDismissBoxState.progress)) + .background( + color = lerp( + start = Color.LightGray, + stop = Color.Red, + fraction = swipeToDismissBoxState.progress + ) + ) .wrapContentSize(Alignment.CenterEnd) .padding(12.dp), - tint = Color.White + tint = Color.White, ) } Settled -> {} @@ -218,7 +238,7 @@ fun TodoListItemWithAnimation( OutlinedCard(shape = RectangleShape) { ListItem( headlineContent = { Text(todoItem.itemDescription) }, - supportingContent = { Text("swipe me to update or remove.") } + supportingContent = { Text("swipe me to update or remove.") }, ) } } @@ -232,14 +252,14 @@ private fun SwipeItemWithAnimationExample() { val todoItems = remember { mutableStateListOf( TodoItem("Pay bills"), TodoItem("Buy groceries"), - TodoItem("Go to gym"), TodoItem("Get dinner") + TodoItem("Go to gym"), TodoItem("Get dinner"), ) } LazyColumn { items( items = todoItems, - key = { it.itemDescription } + key = { it.itemDescription }, ) { todoItem -> TodoListItemWithAnimation( todoItem = todoItem, @@ -249,7 +269,7 @@ private fun SwipeItemWithAnimationExample() { onRemove = { todoItem -> todoItems -= todoItem }, - modifier = Modifier.animateItem() + modifier = Modifier.animateItem(), ) } } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/AdvancedGraphicsSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/AdvancedGraphicsSnippets.kt index bc16c96a5..eb2af0be4 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/AdvancedGraphicsSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/AdvancedGraphicsSnippets.kt @@ -136,7 +136,8 @@ fun BitmapFromComposableFullSnippet() { ) // This logic should live in your ViewModel - trigger a side effect to invoke URI sharing. - // checks permissions granted, and then saves the bitmap from a Picture that is already capturing content + // checks permissions granted, + // and then saves the bitmap from a Picture that is already capturing content // and shares it with the default share sheet. fun shareBitmapFromComposable() { if (writeStorageAccessState.allPermissionsGranted) { @@ -265,5 +266,9 @@ private fun shareBitmap(context: Context, uri: Uri) { putExtra(Intent.EXTRA_STREAM, uri) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) } - startActivity(context, createChooser(intent, "Share your image"), null) + startActivity( + context, + createChooser(intent, "Share your image"), + null, + ) } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/BrushExampleSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/BrushExampleSnippets.kt index 23a6a58ee..c4b72e3b7 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/BrushExampleSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/BrushExampleSnippets.kt @@ -225,16 +225,17 @@ fun GraphicsBrushSizeRecreationExample() { modifier = Modifier .requiredSize(200.dp) .drawBehind { - drawRect(brush = brush) // will allocate a shader to occupy the 200 x 200 dp drawing area + // will allocate a shader to occupy the 200 x 200 dp drawing area + drawRect(brush = brush) inset(10f) { - /* Will allocate a shader to occupy the 180 x 180 dp drawing area as the - inset scope reduces the drawing area by 10 pixels on the left, top, right, - bottom sides */ + /* Will allocate a shader to occupy the 180 x 180 dp drawing area as the + inset scope reduces the drawing area by 10 pixels on the left, top, right, + bottom sides */ drawRect(brush = brush) inset(5f) { - /* will allocate a shader to occupy the 170 x 170 dp drawing area as the - inset scope reduces the drawing area by 5 pixels on the left, top, - right, bottom sides */ + /* will allocate a shader to occupy the 170 x 170 dp drawing area as the + inset scope reduces the drawing area by 5 pixels on the left, top, + right, bottom sides */ drawRect(brush = brush) } } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/CanvasSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/CanvasSnippets.kt index 4b53db6e6..bc0f26f98 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/CanvasSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/CanvasSnippets.kt @@ -239,7 +239,14 @@ fun CanvasDrawPath() { fun CanvasMeasureText() { val pinkColor = Color(0xFFF48FB1) val longTextSample = - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod" + + " tempor incididunt ut labore et dolore magna aliqua." + + " Ut enim ad minim veniam, quis nostrud exercitation" + + " ullamco laboris nisi ut aliquip ex ea commodo consequat." + + " Duis aute irure dolor in reprehenderit in voluptate" + + " velit esse cillum dolore eu fugiat nulla pariatur." + + " Excepteur sint occaecat cupidatat non proident," + + " sunt in culpa qui officia deserunt mollit anim id est laborum." // [START android_compose_graphics_canvas_draw_text_measure] val textMeasurer = rememberTextMeasurer() @@ -249,7 +256,9 @@ fun CanvasMeasureText() { val measuredText = textMeasurer.measure( AnnotatedString(longTextSample), - constraints = Constraints.fixedWidth((size.width * 2f / 3f).toInt()), + constraints = Constraints.fixedWidth( + width = (size.width * 2f / 3f).toInt(), + ), style = TextStyle(fontSize = 18.sp) ) @@ -268,7 +277,14 @@ fun CanvasMeasureText() { fun CanvasMeasureTextOverflow() { val pinkColor = Color(0xFFF48FB1) val longTextSample = - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod" + + " tempor incididunt ut labore et dolore magna aliqua." + + " Ut enim ad minim veniam, quis nostrud exercitation" + + " ullamco laboris nisi ut aliquip ex ea commodo consequat." + + " Duis aute irure dolor in reprehenderit in voluptate" + + " velit esse cillum dolore eu fugiat nulla pariatur." + + " Excepteur sint occaecat cupidatat non proident," + + " sunt in culpa qui officia deserunt mollit anim id est laborum." // [START android_compose_graphics_canvas_draw_text_measure_ellipsis] val textMeasurer = rememberTextMeasurer() @@ -305,7 +321,12 @@ fun CanvasDrawIntoCanvas() { modifier = Modifier .drawWithContent { drawIntoCanvas { canvas -> - drawable.setBounds(0, 0, size.width.toInt(), size.height.toInt()) + drawable.setBounds( + 0, + 0, + size.width.toInt(), + size.height.toInt(), + ) drawable.draw(canvas.nativeCanvas) } } @@ -360,7 +381,14 @@ fun CanvasTransformationScaleAnim() { Animatable(1f) } LaunchedEffect(Unit) { - animatable.animateTo(10f, animationSpec = tween(3000, 3000, easing = LinearEasing)) + animatable.animateTo( + targetValue = 10f, + animationSpec = tween( + durationMillis = 3000, + delayMillis = 3000, + easing = LinearEasing, + ), + ) } Canvas(modifier = Modifier.fillMaxSize()) { scale(scaleX = animatable.value, scaleY = animatable.value * 1.5f) { diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/GraphicsModifiersSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/GraphicsModifiersSnippets.kt index 0493012ed..01bbd28cc 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/GraphicsModifiersSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/GraphicsModifiersSnippets.kt @@ -116,7 +116,8 @@ fun ModifierDrawWithContent() { } .drawWithContent { drawContent() - // draws a fully black area with a small keyhole at pointerOffset that’ll show part of the UI. + // draws a fully black area with a small keyhole at + // pointerOffset that’ll show part of the UI. drawRect( Brush.radialGradient( listOf(Color.Transparent, Color.Black), @@ -399,7 +400,13 @@ fun CompositingStrategyExamples() { .border(2.dp, color = Color.Blue) ) { // ... and drawing a size of 200 dp here outside the bounds - drawRect(color = Color.Magenta, size = Size(200.dp.toPx(), 200.dp.toPx())) + drawRect( + color = Color.Magenta, + size = Size( + width = 200.dp.toPx(), + height = 200.dp.toPx(), + ), + ) } Spacer(modifier = Modifier.size(300.dp)) @@ -413,7 +420,8 @@ fun CompositingStrategyExamples() { .size(100.dp) // Note size of 100 dp here .border(2.dp, color = Color.Blue) ) { - /* ... and drawing a size of 200 dp. However, because of the CompositingStrategy.Offscreen usage above, the + /* ... and drawing a size of 200 dp. However, because of the + CompositingStrategy.Offscreen usage above, the content gets clipped */ drawRect(color = Color.Red, size = Size(200.dp.toPx(), 200.dp.toPx())) } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/ShapesSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/ShapesSnippets.kt index f254da288..62234e288 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/graphics/ShapesSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/graphics/ShapesSnippets.kt @@ -294,8 +294,10 @@ class MorphPolygonShape( layoutDirection: LayoutDirection, density: Density ): Outline { - // Below assumes that you haven't changed the default radius of 1f, nor the centerX and centerY of 0f - // By default this stretches the path to the size of the container, if you don't want stretching, use the same size.width for both x and y. + // Below assumes that you haven't changed the default radius of 1f, + // nor the centerX and centerY of 0f + // By default this stretches the path to the size of the container, + // if you don't want stretching, use the same size.width for both x and y. matrix.scale(size.width / 2f, size.height / 2f) matrix.translate(1f, 1f) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/images/CustomizeImageSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/images/CustomizeImageSnippets.kt index d663aa7af..eaf6fb2ac 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/images/CustomizeImageSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/images/CustomizeImageSnippets.kt @@ -152,7 +152,8 @@ fun CustomClippingShape() { density: Density ): Outline { val path = Path().apply { - // We create an Oval that starts at ¼ of the width, and ends at ¾ of the width of the container. + // We create an Oval that starts at ¼ of the width, + // and ends at ¾ of the width of the container. addOval( Rect( left = size.width / 4f, diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/interop/ComposeWithOtherLibraries.kt b/compose/snippets/src/main/java/com/example/compose/snippets/interop/ComposeWithOtherLibraries.kt index 0b3b7467c..6801d673b 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/interop/ComposeWithOtherLibraries.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/interop/ComposeWithOtherLibraries.kt @@ -79,9 +79,10 @@ import kotlinx.coroutines.flow.Flow @Composable fun GetContentExample() { var imageUri by remember { mutableStateOf(null) } - val launcher = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> - imageUri = uri - } + val launcher = + rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> + imageUri = uri + } Column { Button(onClick = { launcher.launch("image/*") }) { Text(text = "Load Image") diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/interop/MigrationCommonScenariosSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/interop/MigrationCommonScenariosSnippets.kt index 59ac0129d..67fc6f373 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/interop/MigrationCommonScenariosSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/interop/MigrationCommonScenariosSnippets.kt @@ -79,7 +79,8 @@ class RVActivity : ComponentActivity() { // recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { - // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager + // We use a LazyColumn since the layout manager of the + // RecyclerView is a vertical LinearLayoutManager } } // [END android_compose_interop_migration_common_scenarios_recyclerview_step2] @@ -100,7 +101,11 @@ class RVActivity : ComponentActivity() { private fun commonUseCase1() { // [START android_compose_interop_migration_common_scenarios_recyclerview_common_use_case_1] - val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) + val itemDecoration = + DividerItemDecoration( + recyclerView.context, + LinearLayoutManager.VERTICAL, + ) recyclerView.addItemDecoration(itemDecoration) // [END android_compose_interop_migration_common_scenarios_recyclerview_common_use_case_1] } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/AdaptiveLayoutSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/AdaptiveLayoutSnippets.kt index 9447582cf..bc0876733 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/AdaptiveLayoutSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/AdaptiveLayoutSnippets.kt @@ -51,7 +51,9 @@ fun MyApp( windowSizeClass: WindowSizeClass = currentWindowAdaptiveInfo().windowSizeClass ) { // Decide whether to show the top app bar based on window size class. - val showTopAppBar = windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND) + val showTopAppBar = windowSizeClass.isHeightAtLeastBreakpoint( + heightDpBreakpoint = WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND, + ) // MyScreen logic is based on the showTopAppBar boolean flag. MyScreen( diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/PagerSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/PagerSnippets.kt index 899163367..5634344e6 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/PagerSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/PagerSnippets.kt @@ -399,7 +399,11 @@ fun PagerIndicator() { horizontalArrangement = Arrangement.Center ) { repeat(pagerState.pageCount) { iteration -> - val color = if (pagerState.currentPage == iteration) Color.DarkGray else Color.LightGray + val color = if (pagerState.currentPage == iteration) { + Color.DarkGray + } else { + Color.LightGray + } Box( modifier = Modifier .padding(2.dp) @@ -560,7 +564,10 @@ internal fun PagerSampleItem( modifier = Modifier .align(Alignment.BottomEnd) .padding(16.dp) - .background(MaterialTheme.colorScheme.surface, RoundedCornerShape(4.dp)) + .background( + color = MaterialTheme.colorScheme.surface, + shape = RoundedCornerShape(4.dp), + ) .sizeIn(minWidth = 40.dp, minHeight = 40.dp) .padding(8.dp) .wrapContentSize(Alignment.Center) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt index 429e7ffd1..08a35b672 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt @@ -146,18 +146,34 @@ fun MyContent() { class LoremIpsum { private val lorem = "First item of the list." + - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." + - "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." + - "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." + - "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." + - "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo." + - "Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt." + - "Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem." + - "Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" + - "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga." + + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor " + + "incididunt ut labore et dolore magna aliqua." + + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" + + " ex ea commodo consequat." + + "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu " + + "fugiat nulla pariatur." + + "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt" + + " mollit anim id est laborum." + + "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium " + + "doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore " + + "veritatis et quasi architecto beatae vitae dicta sunt explicabo." + + "Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed " + + "quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt." + + "Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, " + + "adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et " + + "dolore magnam aliquam quaerat voluptatem." + + "Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil " + + "molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" + + "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis " + + "praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias " + + "excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui " + + "officia deserunt mollitia animi, id est laborum et dolorum fuga." + "Et harum quidem rerum facilis est et expedita distinctio." + - "Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus." + - "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae." + + "Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo" + + " minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, " + + "omnis dolor repellendus." + + "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe" + + " eveniet ut et voluptates repudiandae sint et molestiae non recusandae." + "Last item of the list." val descriptions = lorem.split(".").map { description -> description.trim() diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/lists/AnimatedOrderedList.kt b/compose/snippets/src/main/java/com/example/compose/snippets/lists/AnimatedOrderedList.kt index 4d60e66b2..b7e202c44 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/lists/AnimatedOrderedList.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/lists/AnimatedOrderedList.kt @@ -47,7 +47,8 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow class AnimatedOrderedListViewModel : ViewModel() { - private val _data = listOf("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten") + private val _data = + listOf("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten") private val _displayedItems: MutableStateFlow> = MutableStateFlow(_data) val displayedItems: StateFlow> = _displayedItems diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/lists/LazyListSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/lists/LazyListSnippets.kt index b41ca5942..004d91ff0 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/lists/LazyListSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/lists/LazyListSnippets.kt @@ -461,11 +461,14 @@ private fun LazyItemAnimationWithSpec() { LazyColumn { items(books, key = { it.id }) { Row( - Modifier.animateItem( + modifier = Modifier.animateItem( fadeInSpec = tween(durationMillis = 250), fadeOutSpec = tween(durationMillis = 100), - placementSpec = spring(stiffness = Spring.StiffnessLow, dampingRatio = Spring.DampingRatioMediumBouncy) - ) + placementSpec = spring( + stiffness = Spring.StiffnessLow, + dampingRatio = Spring.DampingRatioMediumBouncy, + ), + ), ) { // ... } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/modifiers/ModifierSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/modifiers/ModifierSnippets.kt index efd1403f0..42d42e317 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/modifiers/ModifierSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/modifiers/ModifierSnippets.kt @@ -243,7 +243,8 @@ private object AnimationInline { val animatedState = animateFloatAsState(/*...*/) LoadingWheel( - // Creation and allocation of this modifier will happen on every frame of the animation! + // Creation and allocation of this modifier + // will happen on every frame of the animation! modifier = Modifier .padding(12.dp) .background(Color.Gray), @@ -352,7 +353,8 @@ private fun ScopedModifiers2() { Box { Text2( - // Weight won't do anything here since the Text composable is not a direct child of Column + // Weight won't do anything here since the + // Text composable is not a direct child of Column modifier = reusableItemModifier // ... ) @@ -366,8 +368,9 @@ private object ChainingExtractedModifiers { @Composable private fun Snippet() { - // Note: In a real app, you would define the modifier outside of the composable where it is - // needed. For the snippet in the documentation, putting it in one place is clearer. + // Note: In a real app, you would define the modifier + // outside of the composable where it is needed. + // For the snippet in the documentation, putting it in one place is clearer. // [START android_compose_modifiers_chainingextractedmodifiers] val reusableModifier = Modifier .fillMaxWidth() diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/state/CompositionLocalSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/state/CompositionLocalSnippets.kt index a2c2aa6dc..a7c9ef561 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/state/CompositionLocalSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/state/CompositionLocalSnippets.kt @@ -97,10 +97,14 @@ object CompositionLocalSnippets3 { Surface { Column { Text("Uses Surface's provided content color") - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.primary) { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.primary, + ) { Text("Primary color provided by LocalContentColor") Text("This Text also uses primary as textColor") - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.error) { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.error, + ) { DescendantExample() } } diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/state/StateHoistingSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/state/StateHoistingSnippets.kt index 2a4f0c949..f48c366c3 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/state/StateHoistingSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/state/StateHoistingSnippets.kt @@ -58,7 +58,9 @@ private object StateHoistingSnippets1 { fun ChatBubble( message: Message ) { - var showDetails by rememberSaveable { mutableStateOf(false) } // Define the UI element expanded state + var showDetails by rememberSaveable { + mutableStateOf(false) // Define the UI element expanded state + } ClickableText( text = AnnotatedString(message.content), diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/text/HtmlStyling.kt b/compose/snippets/src/main/java/com/example/compose/snippets/text/HtmlStyling.kt index 607fdf462..ff6209040 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/text/HtmlStyling.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/text/HtmlStyling.kt @@ -35,7 +35,8 @@ fun AnnotatedHtmlStringWithLink( htmlText: String = """

Jetpack Compose

- Build better apps faster with Jetpack Compose + Build better apps faster with + Jetpack Compose

""".trimIndent() ) { diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/text/VariableFontsSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/text/VariableFontsSnippets.kt index 80b8361fe..16a374fdf 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/text/VariableFontsSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/text/VariableFontsSnippets.kt @@ -139,9 +139,18 @@ private object VariableFontSnippetsUseTheme { Font( R.font.robotoflex_variable, variationSettings = FontVariation.Settings( - FontVariation.weight(VariableFontSnippetsExtractedSettings.DisplayLargeVFConfig.WEIGHT), - FontVariation.width(VariableFontSnippetsExtractedSettings.DisplayLargeVFConfig.WIDTH), - FontVariation.slant(VariableFontSnippetsExtractedSettings.DisplayLargeVFConfig.SLANT), + FontVariation.weight( + value = VariableFontSnippetsExtractedSettings + .DisplayLargeVFConfig.WEIGHT, + ), + FontVariation.width( + value = VariableFontSnippetsExtractedSettings + .DisplayLargeVFConfig.WIDTH, + ), + FontVariation.slant( + value = VariableFontSnippetsExtractedSettings + .DisplayLargeVFConfig.SLANT, + ), ) ) ) @@ -201,9 +210,18 @@ private object VariableFontsTypographyTheme { Font( R.font.robotoflex_variable, variationSettings = FontVariation.Settings( - FontVariation.weight(VariableFontSnippetsExtractedSettings.DisplayLargeVFConfig.WEIGHT), - FontVariation.width(VariableFontSnippetsExtractedSettings.DisplayLargeVFConfig.WIDTH), - FontVariation.slant(VariableFontSnippetsExtractedSettings.DisplayLargeVFConfig.SLANT), + FontVariation.weight( + value = VariableFontSnippetsExtractedSettings + .DisplayLargeVFConfig.WEIGHT, + ), + FontVariation.width( + value = VariableFontSnippetsExtractedSettings + .DisplayLargeVFConfig.WIDTH, + ), + FontVariation.slant( + value = VariableFontSnippetsExtractedSettings + .DisplayLargeVFConfig.SLANT, + ), ) ) ) @@ -311,7 +329,11 @@ private object VariableFontsTypographyTheme { maxLines = 2 ) Text( - text = "Jetpack Compose is Android’s recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs.", + text = "Jetpack Compose is Android’s recommended modern toolkit" + + " for building native UI. It simplifies and accelerates" + + " UI development on Android. Quickly bring your app to" + + " life with less code, powerful tools, and intuitive" + + " Kotlin APIs.", style = MaterialTheme.typography.bodyLarge, modifier = Modifier.padding(bottom = 8.dp), maxLines = 3 @@ -326,12 +348,16 @@ private object VariableFontsTypographyTheme { private object VariableFontsTypographyCustomAxes { // [START android_compose_variable_font_custom_axes] fun ascenderHeight(ascenderHeight: Float): FontVariation.Setting { - require(ascenderHeight in 649f..854f) { "'Ascender Height' must be in 649f..854f" } + require(ascenderHeight in 649f..854f) { + "'Ascender Height' must be in 649f..854f" + } return FontVariation.Setting("YTAS", ascenderHeight) } fun counterWidth(counterWidth: Int): FontVariation.Setting { - require(counterWidth in 323..603) { "'Counter width' must be in 323..603" } + require(counterWidth in 323..603) { + "'Counter width' must be in 323..603" + } return FontVariation.Setting("XTRA", counterWidth.toFloat()) } // [END android_compose_variable_font_custom_axes] @@ -489,7 +515,11 @@ private object VariableFontsTypographyCustomAxes { maxLines = 2 ) Text( - text = "Jetpack Compose is Android’s recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs.", + text = "Jetpack Compose is Android’s recommended modern toolkit" + + " for building native UI. It simplifies and accelerates" + + " UI development on Android. Quickly bring your app to" + + " life with less code, powerful tools, and intuitive" + + " Kotlin APIs.", style = MaterialTheme.typography.bodyLarge, modifier = Modifier.padding(bottom = 8.dp), maxLines = 3 diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/Interactions.kt b/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/Interactions.kt index 14b012da1..061a1ec25 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/Interactions.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/Interactions.kt @@ -346,7 +346,9 @@ private class ScaleNode(private val interactionSource: InteractionSource) : coroutineScope.launch { interactionSource.interactions.collectLatest { interaction -> when (interaction) { - is PressInteraction.Press -> animateToPressed(interaction.pressPosition) + is PressInteraction.Press -> animateToPressed( + pressPosition = interaction.pressPosition, + ) is PressInteraction.Release -> animateToResting() is PressInteraction.Cancel -> animateToResting() } @@ -473,7 +475,9 @@ private class NeonNode( coroutineScope.launch { interactionSource.interactions.collect { interaction -> when (interaction) { - is PressInteraction.Press -> animateToPressed(interaction.pressPosition) + is PressInteraction.Press -> animateToPressed( + pressPosition = interaction.pressPosition, + ) is PressInteraction.Release -> animateToResting() is PressInteraction.Cancel -> animateToResting() } @@ -629,7 +633,10 @@ private class NeonNode( // [END android_compose_interactions_neon_node] // [START android_compose_interactions_neon_indication] -data class NeonIndication(private val shape: Shape, private val borderWidth: Dp) : IndicationNodeFactory { +data class NeonIndication( + private val shape: Shape, + private val borderWidth: Dp, +) : IndicationNodeFactory { override fun create(interactionSource: InteractionSource): DelegatableNode { return NeonNode( diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/userinteractions/UserInteractions.kt b/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/userinteractions/UserInteractions.kt index 12de9f923..6785fcb29 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/userinteractions/UserInteractions.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/touchinput/userinteractions/UserInteractions.kt @@ -58,14 +58,18 @@ import kotlinx.coroutines.launch // [START android_compose_userinteractions_scale_indication_object] object ScaleIndication : Indication { @Composable - override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance { + override fun rememberUpdatedInstance( + interactionSource: InteractionSource, + ): IndicationInstance { // key the remember against interactionSource, so if it changes we create a new instance val instance = remember(interactionSource) { ScaleIndicationInstance() } LaunchedEffect(interactionSource) { interactionSource.interactions.collectLatest { interaction -> when (interaction) { - is PressInteraction.Press -> instance.animateToPressed(interaction.pressPosition) + is PressInteraction.Press -> instance.animateToPressed( + pressPosition = interaction.pressPosition, + ) is PressInteraction.Release -> instance.animateToResting() is PressInteraction.Cancel -> instance.animateToResting() } @@ -217,7 +221,9 @@ private class ScaleIndicationNode( coroutineScope.launch { interactionSource.interactions.collectLatest { interaction -> when (interaction) { - is PressInteraction.Press -> animateToPressed(interaction.pressPosition) + is PressInteraction.Press -> animateToPressed( + pressPosition = interaction.pressPosition, + ) is PressInteraction.Release -> animateToResting() is PressInteraction.Cancel -> animateToResting() } diff --git a/gradle/init.gradle.kts b/gradle/init.gradle.kts index 8a852469a..1637b8c7b 100644 --- a/gradle/init.gradle.kts +++ b/gradle/init.gradle.kts @@ -41,12 +41,11 @@ rootProject { "spacing-between-declarations-with-annotations," + "spacing-between-declarations-with-comments," + "unary-op-spacing," + - "no-trailing-spaces," + - "max-line-length" + "no-trailing-spaces" ) ) licenseHeaderFile(rootProject.file("spotless/copyright.kt")) } } } -} \ No newline at end of file +} diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialManagerHandler.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialManagerHandler.kt index 381bc8fc3..9ae824081 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialManagerHandler.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialManagerHandler.kt @@ -34,16 +34,23 @@ class CredentialManagerHandler(private val activity: Activity) { /** * Encapsulates the create passkey API for credential manager in a less error-prone manner. * - * @param request a create public key credential request JSON required by [CreatePublicKeyCredentialRequest]. + * @param request a create public key credential request JSON + * required by [CreatePublicKeyCredentialRequest]. * @return [CreatePublicKeyCredentialResponse] containing the result of the credential creation. */ suspend fun createPasskey(request: String): CreatePublicKeyCredentialResponse { val createRequest = CreatePublicKeyCredentialRequest(request) try { - return mCredMan.createCredential(activity, createRequest) as CreatePublicKeyCredentialResponse + return mCredMan.createCredential( + activity, + createRequest, + ) as CreatePublicKeyCredentialResponse } catch (e: CreateCredentialException) { // For error handling use guidance from https://developer.android.com/training/sign-in/passkeys - Log.i(TAG, "Error creating credential: ErrMessage: ${e.errorMessage}, ErrType: ${e.type}") + Log.i( + TAG, + "Error creating credential: ErrMessage: ${e.errorMessage}, ErrType: ${e.type}", + ) throw e } } @@ -55,7 +62,14 @@ class CredentialManagerHandler(private val activity: Activity) { * @return [GetCredentialResponse] containing the result of the credential retrieval. */ suspend fun getPasskey(request: String): GetCredentialResponse { - val getRequest = GetCredentialRequest(listOf(GetPublicKeyCredentialOption(request, null))) + val getRequest = GetCredentialRequest( + credentialOptions = listOf( + GetPublicKeyCredentialOption( + requestJson = request, + clientDataHash = null, + ) + ), + ) try { return mCredMan.getCredential(activity, getRequest) } catch (e: GetCredentialException) { diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialProviderDummyActivity.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialProviderDummyActivity.kt index ed65bd831..daf9b8aab 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialProviderDummyActivity.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/CredentialProviderDummyActivity.kt @@ -271,7 +271,8 @@ class CredentialProviderDummyActivity : FragmentActivity() { ) { // [START android_identity_credential_provider_user_pk_selection] val getRequest = PendingIntentHandler.retrieveProviderGetCredentialRequest(intent) - val publicKeyRequest = getRequest?.credentialOptions?.first() as GetPublicKeyCredentialOption + val publicKeyRequest = + getRequest?.credentialOptions?.first() as GetPublicKeyCredentialOption val requestInfo = intent.getBundleExtra("CREDENTIAL_DATA") val credIdEnc = requestInfo?.getString("credId").orEmpty() @@ -358,7 +359,9 @@ class CredentialProviderDummyActivity : FragmentActivity() { authenticatorAttachment = "", // Add your authenticator attachment ) val result = Intent() - val passkeyCredential = PublicKeyCredential(credential.json()) + val passkeyCredential = PublicKeyCredential( + authenticationResponseJson = credential.json(), + ) PendingIntentHandler.setGetCredentialResponse( result, GetCredentialResponse(passkeyCredential) ) @@ -418,8 +421,14 @@ class CredentialProviderDummyActivity : FragmentActivity() { } // [START android_identity_credential_pending_intent] - fun createSettingsPendingIntent(): PendingIntent { // [END android_identity_credential_pending_intent] - return PendingIntent.getBroadcast(this, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) + fun createSettingsPendingIntent(): PendingIntent { + // [END android_identity_credential_pending_intent] + return PendingIntent.getBroadcast( + this, + 0, + Intent(), + PendingIntent.FLAG_IMMUTABLE, + ) } private fun getPublicKeyFromKeyPair(keyPair: KeyPair): ByteArray { @@ -438,7 +447,12 @@ class CredentialProviderDummyActivity : FragmentActivity() { accountId: String, intent: String ): PendingIntent { - return PendingIntent.getBroadcast(this, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) + return PendingIntent.getBroadcast( + this, + 0, + Intent(), + PendingIntent.FLAG_IMMUTABLE, + ) } private fun b64Decode(encodedString: String): ByteArray { diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/MyCredentialProviderService.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/MyCredentialProviderService.kt index 77db763d3..3875d7811 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/MyCredentialProviderService.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/MyCredentialProviderService.kt @@ -75,7 +75,9 @@ class MyCredentialProviderService : CredentialProviderService() { } } - fun processCreateCredentialRequest(request: BeginCreateCredentialRequest): BeginCreateCredentialResponse? { + fun processCreateCredentialRequest( + request: BeginCreateCredentialRequest, + ): BeginCreateCredentialResponse? { when (request) { is BeginCreatePublicKeyCredentialRequest -> { // Request is passkey type @@ -96,15 +98,21 @@ class MyCredentialProviderService : CredentialProviderService() { val createEntries: MutableList = mutableListOf() createEntries.add( CreateEntry( - PERSONAL_ACCOUNT_ID, - createNewPendingIntent(PERSONAL_ACCOUNT_ID, CREATE_PASSKEY_INTENT) + accountName = PERSONAL_ACCOUNT_ID, + pendingIntent = createNewPendingIntent( + accountId = PERSONAL_ACCOUNT_ID, + action = CREATE_PASSKEY_INTENT, + ) ) ) createEntries.add( CreateEntry( - FAMILY_ACCOUNT_ID, - createNewPendingIntent(FAMILY_ACCOUNT_ID, CREATE_PASSKEY_INTENT) + accountName = FAMILY_ACCOUNT_ID, + pendingIntent = createNewPendingIntent( + accountId = FAMILY_ACCOUNT_ID, + action = CREATE_PASSKEY_INTENT, + ) ) ) diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyAndPasswordFunctions.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyAndPasswordFunctions.kt index 747f72c15..c56a8b3e7 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyAndPasswordFunctions.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyAndPasswordFunctions.kt @@ -61,8 +61,10 @@ class PasskeyAndPasswordFunctions( * Retrieves a passkey from the credential manager. * * @param creationResult The result of the passkey creation operation. - * @param context The activity context from the Composable, to be used in Credential Manager APIs - * @return The [GetCredentialResponse] object containing the passkey, or null if an error occurred. + * @param context The activity context from the Composable, to be used in + * Credential Manager APIs. + * @return The [GetCredentialResponse] object containing the passkey, or + * null if an error occurred. */ @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) fun signInFlow( @@ -164,8 +166,8 @@ class PasskeyAndPasswordFunctions( // [END android_identity_autofill_get_credential_api] } - val usernameEditText: androidx.appcompat.widget.AppCompatEditText = AppCompatEditText(activityContext) - val passwordEditText: androidx.appcompat.widget.AppCompatEditText = AppCompatEditText(activityContext) + val usernameEditText: AppCompatEditText = AppCompatEditText(activityContext) + val passwordEditText: AppCompatEditText = AppCompatEditText(activityContext) // [START android_identity_autofill_enable_edit_text] usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest( diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyWebListener.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyWebListener.kt index f13052b49..61bd5ca1c 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyWebListener.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/PasskeyWebListener.kt @@ -183,7 +183,7 @@ class PasskeyWebListener( * heading. The non minified form is found at credmanweb/javascript/encode.js.*/ const val INJECTED_VAL = """ var __webauthn_interface__,__webauthn_hooks__;!function(e){console.log("In the hook."),__webauthn_interface__.addEventListener("message",function e(n){var r=JSON.parse(n.data),t=r[2];"get"===t?o(r):"create"===t?u(r):console.log("Incorrect response format for reply")});var n=null,r=null,t=null,a=null;function o(e){if(null!==n&&null!==t){if("success"!=e[0]){var r=t;n=null,t=null,r(new DOMException(e[1],"NotAllowedError"));return}var a=i(e[1]),o=n;n=null,t=null,o(a)}}function l(e){var n=e.length%4;return Uint8Array.from(atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(e.length+(0===n?0:4-n),"=")),function(e){return e.charCodeAt(0)}).buffer}function s(e){return btoa(Array.from(new Uint8Array(e),function(e){return String.fromCharCode(e)}).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+${'$'}/,"")}function u(e){if(null===r||null===a){console.log("Here: "+r+" and reject: "+a);return}if(console.log("Output back: "+e),"success"!=e[0]){var n=a;r=null,a=null,n(new DOMException(e[1],"NotAllowedError"));return}var t=i(e[1]),o=r;r=null,a=null,o(t)}function i(e){return console.log("Here is the response from credential manager: "+e),e.rawId=l(e.rawId),e.response.clientDataJSON=l(e.response.clientDataJSON),e.response.hasOwnProperty("attestationObject")&&(e.response.attestationObject=l(e.response.attestationObject)),e.response.hasOwnProperty("authenticatorData")&&(e.response.authenticatorData=l(e.response.authenticatorData)),e.response.hasOwnProperty("signature")&&(e.response.signature=l(e.response.signature)),e.response.hasOwnProperty("userHandle")&&(e.response.userHandle=l(e.response.userHandle)),e.getClientExtensionResults=function e(){return{}},e}e.create=function n(t){if(!("publicKey"in t))return e.originalCreateFunction(t);var o=new Promise(function(e,n){r=e,a=n}),l=t.publicKey;if(l.hasOwnProperty("challenge")){var u=s(l.challenge);l.challenge=u}if(l.hasOwnProperty("user")&&l.user.hasOwnProperty("id")){var i=s(l.user.id);l.user.id=i}var c=JSON.stringify({type:"create",request:l});return __webauthn_interface__.postMessage(c),o},e.get=function r(a){if(!("publicKey"in a))return e.originalGetFunction(a);var o=new Promise(function(e,r){n=e,t=r}),l=a.publicKey;if(l.hasOwnProperty("challenge")){var u=s(l.challenge);l.challenge=u}var i=JSON.stringify({type:"get",request:l});return __webauthn_interface__.postMessage(i),o},e.onReplyGet=o,e.CM_base64url_decode=l,e.CM_base64url_encode=s,e.onReplyCreate=u}(__webauthn_hooks__||(__webauthn_hooks__={})),__webauthn_hooks__.originalGetFunction=navigator.credentials.get,__webauthn_hooks__.originalCreateFunction=navigator.credentials.create,navigator.credentials.get=__webauthn_hooks__.get,navigator.credentials.create=__webauthn_hooks__.create,window.PublicKeyCredential=function(){},window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable=function(){return Promise.resolve(!1)}; - """ + """ // ktlint-disable standard:max-line-length } // [END android_identity_create_listener_passkeys] diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SignInWithGoogleFunctions.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SignInWithGoogleFunctions.kt index 28c58ef25..7f0323972 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SignInWithGoogleFunctions.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SignInWithGoogleFunctions.kt @@ -110,7 +110,7 @@ class SignInWithGoogleFunctions( // purposes, but don't use them to store or control access to user // data. For that you first need to validate the token: // pass googleIdTokenCredential.getIdToken() to the backend server. - // see [validation instructions](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token) + // See [validation instructions](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token) // ktlint-disable standard:max-line-length } catch (e: GoogleIdTokenParsingException) { Log.e(TAG, "Received an invalid google id token response", e) } diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SingleTap.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SingleTap.kt index b61ddbe5c..3a75d95c6 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SingleTap.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/SingleTap.kt @@ -169,7 +169,11 @@ class SingleTap : ComponentActivity() { // Do your own authentication flow, if necessary } else if (biometricPromptResult.isSuccessful) { - Log.i(TAG, "The response from the biometricPromptResult was ${biometricPromptResult.authenticationResult?.authenticationType}") + Log.i( + TAG, + "The response from the biometricPromptResult was " + + "${biometricPromptResult.authenticationResult?.authenticationType}" + ) validatePasskey( publicKeyRequest.requestJson, diff --git a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/WebViewMainActivity.kt b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/WebViewMainActivity.kt index 935da4971..ce9907984 100644 --- a/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/WebViewMainActivity.kt +++ b/identity/credentialmanager/src/main/java/com/example/identity/credentialmanager/WebViewMainActivity.kt @@ -76,12 +76,19 @@ class WebViewMainActivity : ComponentActivity() { credentialManagerHandler: CredentialManagerHandler ) { // [START android_identity_create_webview_object] - val passkeyWebListener = PasskeyWebListener(activity, coroutineScope, credentialManagerHandler) + val passkeyWebListener = PasskeyWebListener( + activity, + coroutineScope, + credentialManagerHandler, + ) val webViewClient = object : WebViewClient() { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) - webView.evaluateJavascript(PasskeyWebListener.INJECTED_VAL, null) + webView.evaluateJavascript( + PasskeyWebListener.INJECTED_VAL, + null, + ) } } diff --git a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt index d00308286..7940d4052 100644 --- a/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt +++ b/misc/src/main/java/com/example/snippets/ActivityEmbeddingKotlinSnippets.kt @@ -63,7 +63,9 @@ class ActivityEmbeddingKotlinSnippets { SplitController.getInstance(this).setSplitAttributesCalculator { params -> val parentConfiguration = params.parentConfiguration val builder = SplitAttributes.Builder() - return@setSplitAttributesCalculator if (parentConfiguration.screenWidthDp >= 840) { + return@setSplitAttributesCalculator if ( + parentConfiguration.screenWidthDp >= 840 + ) { // Side-by-side dual-pane layout for wide displays. builder .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE) @@ -90,7 +92,10 @@ class ActivityEmbeddingKotlinSnippets { val parentWindowMetrics = params.parentWindowMetrics val parentConfiguration = params.parentConfiguration val foldingFeatures = - params.parentWindowLayoutInfo.displayFeatures.filterIsInstance() + params + .parentWindowLayoutInfo + .displayFeatures + .filterIsInstance() val feature = if (foldingFeatures.size == 1) foldingFeatures[0] else null val builder = SplitAttributes.Builder() builder.setSplitType(SPLIT_TYPE_HINGE) @@ -319,7 +324,8 @@ class ActivityEmbeddingKotlinSnippets { val view = layout.findViewById(R.id.infoButton) lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { - splitController.splitInfoList(this@SplitDeviceActivity) // The activity instance. + splitController + .splitInfoList(this@SplitDeviceActivity) // The activity instance. .collect { list -> view.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE } diff --git a/misc/src/main/java/com/example/snippets/MainActivity.kt b/misc/src/main/java/com/example/snippets/MainActivity.kt index a687939e9..8fb17f89f 100644 --- a/misc/src/main/java/com/example/snippets/MainActivity.kt +++ b/misc/src/main/java/com/example/snippets/MainActivity.kt @@ -53,7 +53,8 @@ class MainActivity : ComponentActivity() { Destination.entries.forEach { destination -> composable(destination.route) { when (destination) { - Destination.BroadcastReceiverExamples -> BroadcastReceiverSample() + Destination.BroadcastReceiverExamples -> + BroadcastReceiverSample() // Add your destination here } } diff --git a/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerKotlinSnippets.kt b/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerKotlinSnippets.kt index f3f0ad99c..235cdf311 100644 --- a/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerKotlinSnippets.kt +++ b/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerKotlinSnippets.kt @@ -53,7 +53,8 @@ class ProfilingManagerKotlinSnippets { } else { Log.e( "ProfileTest", - "Profiling failed errorcode=" + profilingResult.errorCode + " errormsg=" + profilingResult.errorMessage + "Profiling failed errorcode=" + profilingResult.errorCode + + " errormsg=" + profilingResult.errorMessage, ) } } @@ -65,7 +66,12 @@ class ProfilingManagerKotlinSnippets { requestBuilder.setDurationMs(60000) requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER) requestBuilder.setBufferSizeKb(20971520) - requestProfiling(applicationContext, requestBuilder.build(), mainExecutor, resultCallback) + requestProfiling( + applicationContext, + requestBuilder.build(), + mainExecutor, + resultCallback, + ) // Wait some time for profiling to start. diff --git a/wear/src/main/java/com/example/wear/snippets/complication/MyTimelineComplicationDataSourceService.kt b/wear/src/main/java/com/example/wear/snippets/complication/MyTimelineComplicationDataSourceService.kt index 00b6daea3..2b716a9c0 100644 --- a/wear/src/main/java/com/example/wear/snippets/complication/MyTimelineComplicationDataSourceService.kt +++ b/wear/src/main/java/com/example/wear/snippets/complication/MyTimelineComplicationDataSourceService.kt @@ -37,7 +37,9 @@ data class CalendarEntry( // [START android_wear_timeline_complication] class MyTimelineComplicationDataSourceService : SuspendingTimelineComplicationDataSourceService() { - override suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationDataTimeline? { + override suspend fun onComplicationRequest( + request: ComplicationRequest, + ): ComplicationDataTimeline? { if (request.complicationType != ComplicationType.SHORT_TEXT) { return ComplicationDataTimeline( defaultComplicationData = NoDataComplicationData(), @@ -73,9 +75,21 @@ class MyTimelineComplicationDataSourceService : SuspendingTimelineComplicationDa private fun getCalendarEvents(): List { val now = Instant.now() return listOf( - CalendarEntry(now, now.plus(1, ChronoUnit.HOURS), "Event 1"), - CalendarEntry(now.plus(2, ChronoUnit.HOURS), now.plus(3, ChronoUnit.HOURS), "Event 2"), - CalendarEntry(now.plus(4, ChronoUnit.HOURS), now.plus(5, ChronoUnit.HOURS), "Event 3"), + CalendarEntry( + start = now, + end = now.plus(1, ChronoUnit.HOURS), + name = "Event 1", + ), + CalendarEntry( + start = now.plus(2, ChronoUnit.HOURS), + end = now.plus(3, ChronoUnit.HOURS), + name = "Event 2", + ), + CalendarEntry( + start = now.plus(4, ChronoUnit.HOURS), + end = now.plus(5, ChronoUnit.HOURS), + name = "Event 3", + ), ) } // [END_EXCLUDE] diff --git a/xr/src/main/java/com/example/xr/arcore/Hands.kt b/xr/src/main/java/com/example/xr/arcore/Hands.kt index 1507bed7c..8948e3f17 100644 --- a/xr/src/main/java/com/example/xr/arcore/Hands.kt +++ b/xr/src/main/java/com/example/xr/arcore/Hands.kt @@ -70,7 +70,8 @@ fun secondaryHandDetection(activity: Activity, session: Session) { fun detectGesture(handState: Flow) {} // [START androidxr_arcore_hand_handedness] val handedness = Hand.getPrimaryHandSide(activity.contentResolver) - val secondaryHand = if (handedness == Hand.HandSide.LEFT) Hand.right(session) else Hand.left(session) + val secondaryHand = + if (handedness == Hand.HandSide.LEFT) Hand.right(session) else Hand.left(session) val handState = secondaryHand?.state ?: return detectGesture(handState) // [END androidxr_arcore_hand_handedness] @@ -121,9 +122,15 @@ fun ComponentActivity.renderPlanetAtFingerTip(rightHandState: Hand.State) { private fun detectPinch(session: Session, handState: Hand.State): Boolean { // [START androidxr_arcore_hand_pinch_gesture] val thumbTip = handState.handJoints[HandJointType.THUMB_TIP] ?: return false - val thumbTipPose = session.scene.perceptionSpace.transformPoseTo(thumbTip, session.scene.activitySpace) + val thumbTipPose = session.scene.perceptionSpace.transformPoseTo( + pose = thumbTip, + destination = session.scene.activitySpace, + ) val indexTip = handState.handJoints[HandJointType.INDEX_TIP] ?: return false - val indexTipPose = session.scene.perceptionSpace.transformPoseTo(indexTip, session.scene.activitySpace) + val indexTipPose = session.scene.perceptionSpace.transformPoseTo( + pose = indexTip, + destination = session.scene.activitySpace, + ) return Vector3.distance(thumbTipPose.translation, indexTipPose.translation) < 0.05 // [END androidxr_arcore_hand_pinch_gesture] } diff --git a/xr/src/main/java/com/example/xr/arcore/Planes.kt b/xr/src/main/java/com/example/xr/arcore/Planes.kt index b5017dcb7..6c4e09edc 100644 --- a/xr/src/main/java/com/example/xr/arcore/Planes.kt +++ b/xr/src/main/java/com/example/xr/arcore/Planes.kt @@ -49,7 +49,10 @@ private suspend fun subscribePlanes(session: Session) { } private fun hitTestTable(session: Session) { - val pose = session.scene.spatialUser.head?.transformPoseTo(Pose(), session.scene.perceptionSpace) ?: return + val pose = session.scene.spatialUser.head?.transformPoseTo( + Pose(), + session.scene.perceptionSpace, + ) ?: return val ray = Ray(pose.translation, pose.forward) // [START androidxr_arcore_hitTest] val results = androidx.xr.arcore.hitTest(session, ray) diff --git a/xr/src/main/java/com/example/xr/scenecore/Environments.kt b/xr/src/main/java/com/example/xr/scenecore/Environments.kt index 5ed80d36f..77d70aa3b 100644 --- a/xr/src/main/java/com/example/xr/scenecore/Environments.kt +++ b/xr/src/main/java/com/example/xr/scenecore/Environments.kt @@ -33,7 +33,10 @@ private class Environments(val session: Session) { suspend fun loadEnvironmentSkybox() { // [START androidxr_scenecore_environment_loadEnvironmentSkybox] - val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip")) + val lightingForSkybox = ExrImage.createFromZip( + session, + Paths.get("BlueSkyboxLighting.zip"), + ) // [END androidxr_scenecore_environment_loadEnvironmentSkybox] } @@ -59,8 +62,9 @@ private class Environments(val session: Session) { // [START androidxr_scenecore_environment_setPassthroughOpacityPreference] session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { - // The passthrough opacity request succeeded and should be visible now, and any listeners - // specified using addOnPassthroughOpacityChangedListener will be notified. + // The passthrough opacity request succeeded and should be visible now, + // and any listeners specified using + // addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied diff --git a/xr/src/main/java/com/example/xr/scenecore/GltfEntity.kt b/xr/src/main/java/com/example/xr/scenecore/GltfEntity.kt index 997436ddf..a68081147 100644 --- a/xr/src/main/java/com/example/xr/scenecore/GltfEntity.kt +++ b/xr/src/main/java/com/example/xr/scenecore/GltfEntity.kt @@ -52,7 +52,8 @@ private fun animateEntity(gltfEntity: GltfModelEntity) { private fun ComponentActivity.startSceneViewer() { // [START androidxr_scenecore_sceneviewer] val url = - "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf" + "https://raw.githubusercontent.com/KhronosGroup/" + + "glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf" val sceneViewerIntent = Intent(Intent.ACTION_VIEW) val intentUri = Uri.parse("https://arvr.google.com/scene-viewer/1.2") diff --git a/xr/src/main/java/com/example/xr/scenecore/InteractableComponent.kt b/xr/src/main/java/com/example/xr/scenecore/InteractableComponent.kt index a712d0dfe..ef4dd3fea 100644 --- a/xr/src/main/java/com/example/xr/scenecore/InteractableComponent.kt +++ b/xr/src/main/java/com/example/xr/scenecore/InteractableComponent.kt @@ -27,7 +27,9 @@ private fun interactableComponentExample(session: Session, entity: Entity) { val executor = Executors.newSingleThreadExecutor() val interactableComponent = InteractableComponent.create(session, executor) { // when the user disengages with the entity with their hands - if (it.source == InputEvent.Source.SOURCE_HANDS && it.action == InputEvent.Action.ACTION_UP) { + if (it.source == InputEvent.Source.SOURCE_HANDS && + it.action == InputEvent.Action.ACTION_UP + ) { // increase size with right hand and decrease with left if (it.pointerType == InputEvent.Pointer.POINTER_TYPE_RIGHT) { entity.setScale(1.5f) diff --git a/xr/src/main/java/com/example/xr/scenecore/ResizableComponent.kt b/xr/src/main/java/com/example/xr/scenecore/ResizableComponent.kt index 28b70027d..1f6563345 100644 --- a/xr/src/main/java/com/example/xr/scenecore/ResizableComponent.kt +++ b/xr/src/main/java/com/example/xr/scenecore/ResizableComponent.kt @@ -32,7 +32,11 @@ private fun resizableComponentExample( val resizableComponent = ResizableComponent.create(session) { event -> if (event.resizeState == ResizeEvent.ResizeState.RESIZE_STATE_END) { // update the Entity to reflect the new size - surfaceEntity.canvasShape = SurfaceEntity.CanvasShape.Quad(event.newSize.width, event.newSize.height) + surfaceEntity.canvasShape = + SurfaceEntity.CanvasShape.Quad( + width = event.newSize.width, + height = event.newSize.height, + ) } } resizableComponent.minimumEntitySize = FloatSize3d(177f, 100f, 1f) diff --git a/xr/src/main/java/com/example/xr/scenecore/SpatialAudio.kt b/xr/src/main/java/com/example/xr/scenecore/SpatialAudio.kt index b68e67713..44fae59cb 100644 --- a/xr/src/main/java/com/example/xr/scenecore/SpatialAudio.kt +++ b/xr/src/main/java/com/example/xr/scenecore/SpatialAudio.kt @@ -85,7 +85,9 @@ private fun playSpatialAudioAtEntity(session: Session, appContext: Context, enti private fun playSpatialAudioAtEntitySurround(session: Session, appContext: Context) { // [START androidxr_scenecore_playSpatialAudioSurround] // Check spatial capabilities before using spatial audio - if (session.scene.spatialCapabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO)) { + if (session.scene.spatialCapabilities + .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO) + ) { // The session has spatial audio capabilities val pointSourceAttributes = PointSourceParams(session.scene.mainPanelEntity) @@ -120,7 +122,9 @@ private fun playSpatialAudioAtEntitySurround(session: Session, appContext: Conte private fun playSpatialAudioAtEntityAmbionics(session: Session, appContext: Context) { // [START androidxr_scenecore_playSpatialAudioAmbionics] // Check spatial capabilities before using spatial audio - if (session.scene.spatialCapabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO)) { + if (session.scene.spatialCapabilities + .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO) + ) { // The session has spatial audio capabilities val soundFieldAttributes = @@ -157,7 +161,11 @@ private fun playSpatialAudioAtEntityAmbionics(session: Session, appContext: Cont @OptIn(UnstableApi::class) private fun detectSupport(context: Context) { // [START androidxr_scenecore_dolby_detect_support] - val audioCapabilities = AudioCapabilities.getCapabilities(context, androidx.media3.common.AudioAttributes.DEFAULT, null) + val audioCapabilities = AudioCapabilities.getCapabilities( + context, + androidx.media3.common.AudioAttributes.DEFAULT, + null, + ) if (audioCapabilities.supportsEncoding(C.ENCODING_AC3)) { // Device supports playback of the Dolby Digital media format. }