Skip to content

Commit 8a28727

Browse files
authored
feat: adds close button to supporting pane sample. (#660)
1 parent 3d8d466 commit 8a28727

File tree

1 file changed

+63
-6
lines changed

1 file changed

+63
-6
lines changed

compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt

Lines changed: 63 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@
1717
package com.example.compose.snippets.adaptivelayouts
1818

1919
import androidx.compose.foundation.background
20+
import androidx.compose.foundation.layout.Column
21+
import androidx.compose.foundation.layout.padding
2022
import androidx.compose.foundation.layout.safeContentPadding
2123
import androidx.compose.foundation.layout.wrapContentSize
24+
import androidx.compose.material.icons.Icons
25+
import androidx.compose.material.icons.filled.Close
2226
import androidx.compose.material3.Button
27+
import androidx.compose.material3.Icon
28+
import androidx.compose.material3.IconButton
2329
import androidx.compose.material3.Text
2430
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
2531
import androidx.compose.material3.adaptive.layout.AnimatedPane
@@ -30,13 +36,17 @@ import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldPaneScope
3036
import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole
3137
import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior
3238
import androidx.compose.material3.adaptive.navigation.NavigableSupportingPaneScaffold
39+
import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator
3340
import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler
3441
import androidx.compose.material3.adaptive.navigation.rememberSupportingPaneScaffoldNavigator
3542
import androidx.compose.runtime.Composable
3643
import androidx.compose.runtime.rememberCoroutineScope
44+
import androidx.compose.ui.Alignment
3745
import androidx.compose.ui.Modifier
3846
import androidx.compose.ui.graphics.Color
47+
import androidx.compose.ui.tooling.preview.Devices.TABLET
3948
import androidx.compose.ui.tooling.preview.Preview
49+
import androidx.compose.ui.unit.dp
4050
import 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
6379
fun 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
126162
fun 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

Comments
 (0)