@@ -4,8 +4,6 @@ import androidx.compose.animation.AnimatedContent
44import androidx.compose.animation.ExperimentalSharedTransitionApi
55import androidx.compose.animation.SharedTransitionLayout
66import androidx.compose.animation.animateContentSize
7- import androidx.compose.animation.fadeIn
8- import androidx.compose.animation.fadeOut
97import androidx.compose.animation.slideInVertically
108import androidx.compose.animation.slideOutVertically
119import androidx.compose.foundation.ExperimentalFoundationApi
@@ -23,24 +21,25 @@ import androidx.compose.foundation.layout.fillMaxHeight
2321import androidx.compose.foundation.layout.fillMaxWidth
2422import androidx.compose.foundation.layout.only
2523import androidx.compose.foundation.layout.padding
24+ import androidx.compose.foundation.layout.size
2625import androidx.compose.foundation.layout.systemBars
2726import androidx.compose.foundation.layout.windowInsetsPadding
2827import androidx.compose.foundation.rememberScrollState
28+ import androidx.compose.foundation.shape.CircleShape
2929import androidx.compose.foundation.shape.RoundedCornerShape
3030import androidx.compose.foundation.verticalScroll
3131import androidx.compose.material3.BadgedBox
3232import androidx.compose.material3.ExperimentalMaterial3Api
3333import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
34- import androidx.compose.material3.FloatingActionButton
3534import androidx.compose.material3.FloatingToolbarDefaults.floatingToolbarVerticalNestedScroll
3635import androidx.compose.material3.HorizontalDivider
36+ import androidx.compose.material3.Icon
3737import androidx.compose.material3.MaterialTheme
3838import androidx.compose.material3.ModalWideNavigationRail
3939import androidx.compose.material3.NavigationBarItem
4040import androidx.compose.material3.NavigationDrawerItem
4141import androidx.compose.material3.NavigationRailItem
4242import androidx.compose.material3.ShortNavigationBarItem
43- import androidx.compose.material3.SmallFloatingActionButton
4443import androidx.compose.material3.Surface
4544import androidx.compose.material3.WideNavigationRailState
4645import androidx.compose.material3.WideNavigationRailValue
@@ -75,6 +74,10 @@ import androidx.compose.ui.unit.dp
7574import compose.icons.FontAwesomeIcons
7675import compose.icons.fontawesomeicons.Solid
7776import compose.icons.fontawesomeicons.solid.Pen
77+ import dev.chrisbanes.haze.hazeSource
78+ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
79+ import dev.chrisbanes.haze.materials.HazeMaterials
80+ import dev.chrisbanes.haze.rememberHazeState
7881import dev.dimension.flare.R
7982
8083val LocalBottomBarHeight = androidx.compose.runtime.staticCompositionLocalOf<Dp > { 0 .dp }
@@ -85,6 +88,7 @@ val LocalBottomBarShowing = androidx.compose.runtime.staticCompositionLocalOf<Bo
8588 ExperimentalMaterial3ExpressiveApi ::class ,
8689 ExperimentalMaterial3Api ::class ,
8790 ExperimentalSharedTransitionApi ::class ,
91+ ExperimentalHazeMaterialsApi ::class ,
8892)
8993@ExperimentalMaterial3AdaptiveNavigationSuiteApi
9094@Composable
@@ -105,6 +109,7 @@ fun NavigationSuiteScaffold2(
105109 footerItems : NavigationSuiteScope2 .() -> Unit = {},
106110 content : @Composable () -> Unit = {},
107111) {
112+ val hazeState = rememberHazeState()
108113 var isPodcastShowing by remember { mutableStateOf(false ) }
109114 var isBottomBarExpanded by remember { mutableStateOf(true ) }
110115 Surface (
@@ -132,7 +137,11 @@ fun NavigationSuiteScaffold2(
132137 ModalWideNavigationRail (
133138 hideOnCollapse = layoutType == NavigationSuiteType .NavigationBar ,
134139 state = wideNavigationRailState,
135- colors = navigationSuiteColors.wideNavigationRailColors,
140+ colors =
141+ navigationSuiteColors.wideNavigationRailColors
142+ .copy(
143+ containerColor = Color .Transparent ,
144+ ),
136145 ) {
137146 val actualLayoutType =
138147 if (layoutType == NavigationSuiteType .NavigationBar ) {
@@ -224,8 +233,15 @@ fun NavigationSuiteScaffold2(
224233 0 .dp
225234 },
226235 LocalBottomBarShowing provides (layoutType == NavigationSuiteType .NavigationBar ),
236+ LocalHazeState provides hazeState,
227237 ) {
228- content.invoke()
238+ Box (
239+ modifier =
240+ Modifier
241+ .hazeSource(state = hazeState),
242+ ) {
243+ content.invoke()
244+ }
229245 }
230246 Column (
231247 modifier =
@@ -279,15 +295,12 @@ fun NavigationSuiteScaffold2(
279295 AnimatedContent (
280296 isBottomBarExpanded,
281297 ) { isExpanded ->
282- Surface (
283- shape =
284- if (isExpanded) {
285- RoundedCornerShape (25 )
286- } else {
287- RoundedCornerShape (50 )
288- },
298+ Glassify (
299+ shape = RoundedCornerShape (50 ),
289300 shadowElevation = 8 .dp,
290301 tonalElevation = 8 .dp,
302+ hazeState = hazeState,
303+ hazeStyle = HazeMaterials .thick(),
291304 modifier =
292305 Modifier
293306 .sharedElement(
@@ -309,11 +322,9 @@ fun NavigationSuiteScaffold2(
309322 ShortNavigationBarItem (
310323 modifier =
311324 it.modifier
312- .sharedBounds (
325+ .sharedElement (
313326 rememberSharedContentState(" item_$index " ),
314327 animatedVisibilityScope = this @AnimatedContent,
315- enter = fadeIn(),
316- exit = fadeOut(),
317328 ),
318329 selected = it.selected,
319330 onClick = it.onClick,
@@ -322,7 +333,9 @@ fun NavigationSuiteScaffold2(
322333 modifier =
323334 Modifier
324335 .sharedElement(
325- rememberSharedContentState(" item_icon_$index " ),
336+ rememberSharedContentState(
337+ " item_icon_$index " ,
338+ ),
326339 animatedVisibilityScope = this @AnimatedContent,
327340 ),
328341 ) {
@@ -347,36 +360,31 @@ fun NavigationSuiteScaffold2(
347360 AnimatedContent (
348361 isBottomBarExpanded,
349362 ) { isExpanded ->
350- if (isExpanded) {
351- FloatingActionButton (
352- modifier =
353- Modifier
354- .sharedElement(
355- rememberSharedContentState(" compose_fab" ),
356- animatedVisibilityScope = this @AnimatedContent,
357- ),
358- onClick = onFabClicked,
359- ) {
360- FAIcon (
361- imageVector = FontAwesomeIcons .Solid .Pen ,
362- contentDescription = stringResource(id = R .string.compose_title),
363- )
364- }
365- } else {
366- SmallFloatingActionButton (
367- onClick = onFabClicked,
368- modifier =
369- Modifier
370- .sharedElement(
371- rememberSharedContentState(" compose_fab" ),
372- animatedVisibilityScope = this @AnimatedContent,
373- ),
374- ) {
375- FAIcon (
376- imageVector = FontAwesomeIcons .Solid .Pen ,
377- contentDescription = stringResource(id = R .string.compose_title),
378- )
379- }
363+ Glassify (
364+ onClick = onFabClicked,
365+ shape = CircleShape ,
366+ shadowElevation = 8 .dp,
367+ tonalElevation = 8 .dp,
368+ color = MaterialTheme .colorScheme.primaryContainer,
369+ hazeState = hazeState,
370+ modifier =
371+ Modifier
372+ .sharedElement(
373+ rememberSharedContentState(" compose_fab" ),
374+ animatedVisibilityScope = this @AnimatedContent,
375+ ).size(
376+ if (isExpanded) {
377+ 56 .dp
378+ } else {
379+ 40 .dp
380+ },
381+ ),
382+ ) {
383+ Icon (
384+ imageVector = FontAwesomeIcons .Solid .Pen ,
385+ contentDescription = stringResource(id = R .string.compose_title),
386+ modifier = Modifier .size(20 .dp),
387+ )
380388 }
381389 }
382390 }
0 commit comments