1717package com.example.compose.snippets.adaptivelayouts
1818
1919import androidx.compose.foundation.background
20+ import androidx.compose.foundation.layout.Column
21+ import androidx.compose.foundation.layout.padding
2022import androidx.compose.foundation.layout.safeContentPadding
2123import androidx.compose.foundation.layout.wrapContentSize
24+ import androidx.compose.material.icons.Icons
25+ import androidx.compose.material.icons.filled.Close
2226import androidx.compose.material3.Button
27+ import androidx.compose.material3.Icon
28+ import androidx.compose.material3.IconButton
2329import androidx.compose.material3.Text
2430import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
2531import androidx.compose.material3.adaptive.layout.AnimatedPane
@@ -30,13 +36,17 @@ import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldPaneScope
3036import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole
3137import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior
3238import androidx.compose.material3.adaptive.navigation.NavigableSupportingPaneScaffold
39+ import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator
3340import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler
3441import androidx.compose.material3.adaptive.navigation.rememberSupportingPaneScaffoldNavigator
3542import androidx.compose.runtime.Composable
3643import androidx.compose.runtime.rememberCoroutineScope
44+ import androidx.compose.ui.Alignment
3745import androidx.compose.ui.Modifier
3846import androidx.compose.ui.graphics.Color
47+ import androidx.compose.ui.tooling.preview.Devices.TABLET
3948import androidx.compose.ui.tooling.preview.Preview
49+ import androidx.compose.ui.unit.dp
4050import kotlinx.coroutines.launch
4151
4252@OptIn(ExperimentalMaterial3AdaptiveApi ::class )
@@ -57,13 +67,20 @@ fun SampleNavigableSupportingPaneScaffoldParts() {
5767 // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_params]
5868}
5969
70+ @Composable
71+ @Preview(device = TABLET )
72+ fun SampleNavigationSupportingPaneScaffoldFullTabletPreview () {
73+ SampleNavigableSupportingPaneScaffoldFull ()
74+ }
75+
6076@OptIn(ExperimentalMaterial3AdaptiveApi ::class )
6177@Composable
6278@Preview
6379fun SampleNavigableSupportingPaneScaffoldFull () {
6480 // [START android_compose_adaptivelayouts_sample_supporting_pane_scaffold_full]
6581 val scaffoldNavigator = rememberSupportingPaneScaffoldNavigator()
6682 val scope = rememberCoroutineScope()
83+ val backNavigationBehavior = BackNavigationBehavior .PopUntilScaffoldValueChange
6784
6885 NavigableSupportingPaneScaffold (
6986 navigator = scaffoldNavigator,
@@ -92,7 +109,26 @@ fun SampleNavigableSupportingPaneScaffoldFull() {
92109 },
93110 supportingPane = {
94111 AnimatedPane (modifier = Modifier .safeContentPadding()) {
95- Text (" Supporting pane" )
112+ Column {
113+ // Allow users to dismiss the supporting pane. Use back navigation to
114+ // hide an expanded supporting pane.
115+ if (scaffoldNavigator.scaffoldValue[SupportingPaneScaffoldRole .Supporting ] == PaneAdaptedValue .Expanded ) {
116+ // Material design principles promote the usage of a right-aligned
117+ // close (X) button.
118+ IconButton (
119+ modifier = Modifier .align(Alignment .End ).padding(16 .dp),
120+ onClick = {
121+ scope.launch {
122+ scaffoldNavigator.navigateBack(backNavigationBehavior)
123+ }
124+ }
125+ ) {
126+ Icon (Icons .Default .Close , contentDescription = " Close" )
127+ }
128+ }
129+ Text (" Supporting pane" )
130+ }
131+
96132 }
97133 }
98134 )
@@ -124,11 +160,32 @@ fun ThreePaneScaffoldPaneScope.MainPane(
124160@OptIn(ExperimentalMaterial3AdaptiveApi ::class )
125161@Composable
126162fun ThreePaneScaffoldPaneScope.SupportingPane (
163+ scaffoldNavigator : ThreePaneScaffoldNavigator <Any >,
127164 modifier : Modifier = Modifier ,
165+ backNavigationBehavior : BackNavigationBehavior = BackNavigationBehavior .PopUntilScaffoldValueChange ,
128166) {
129- AnimatedPane (modifier = modifier.safeContentPadding()) {
130- // Supporting pane content
131- Text (" This is the supporting pane" )
167+ val scope = rememberCoroutineScope()
168+ AnimatedPane (modifier = Modifier .safeContentPadding()) {
169+ Column {
170+ // Allow users to dismiss the supporting pane. Use back navigation to
171+ // hide an expanded supporting pane.
172+ if (scaffoldNavigator.scaffoldValue[SupportingPaneScaffoldRole .Supporting ] == PaneAdaptedValue .Expanded ) {
173+ // Material design principles promote the usage of a right-aligned
174+ // close (X) button.
175+ IconButton (
176+ modifier = modifier.align(Alignment .End ).padding(16 .dp),
177+ onClick = {
178+ scope.launch {
179+ scaffoldNavigator.navigateBack(backNavigationBehavior)
180+ }
181+ }
182+ ) {
183+ Icon (Icons .Default .Close , contentDescription = " Close" )
184+ }
185+ }
186+ Text (" Supporting pane" )
187+ }
188+
132189 }
133190}
134191// [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_extracted_panes]
@@ -152,7 +209,7 @@ fun SampleNavigableSupportingPaneScaffoldSimplified() {
152209 }
153210 )
154211 },
155- supportingPane = { SupportingPane () },
212+ supportingPane = { SupportingPane (scaffoldNavigator = scaffoldNavigator ) },
156213 )
157214 // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_simplified]
158215}
@@ -182,7 +239,7 @@ fun SampleSupportingPaneScaffoldSimplifiedWithPredictiveBackHandler() {
182239 }
183240 )
184241 },
185- supportingPane = { SupportingPane () },
242+ supportingPane = { SupportingPane (scaffoldNavigator = scaffoldNavigator ) },
186243 )
187244 // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_simplified_with_predictive_back_handler]
188245}
0 commit comments