From 50e5b70bd509ca10d5ab0fafbaa5a4aeefc8ae9c Mon Sep 17 00:00:00 2001 From: "Ian G. Clifton" Date: Wed, 1 May 2024 16:18:14 -0700 Subject: [PATCH 1/4] Added snippets for SupportingPaneScaffold --- .../SampleSupportingPaneScaffold.kt | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt 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 new file mode 100644 index 000000000..65605c823 --- /dev/null +++ b/compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt @@ -0,0 +1,128 @@ +@file:OptIn(ExperimentalMaterial3AdaptiveApi::class) + +package com.example.compose.snippets.adaptivelayouts + +import androidx.activity.compose.BackHandler +import androidx.compose.foundation.layout.safeContentPadding +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.layout.AnimatedPane +import androidx.compose.material3.adaptive.layout.PaneAdaptedValue +import androidx.compose.material3.adaptive.layout.SupportingPaneScaffold +import androidx.compose.material3.adaptive.layout.SupportingPaneScaffoldRole +import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole +import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldScope +import androidx.compose.material3.adaptive.navigation.rememberSupportingPaneScaffoldNavigator +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +fun SampleSupportingPaneScaffoldParts() { + // [START android_compose_adaptivelayouts_sample_supporting_pane_scaffold_nav_and_back] + val navigator = rememberSupportingPaneScaffoldNavigator() + + BackHandler(navigator.canNavigateBack()) { + navigator.navigateBack() + } + // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_nav_and_back] + + // [START android_compose_adaptivelayouts_sample_supporting_pane_scaffold_params] + SupportingPaneScaffold( + directive = navigator.scaffoldDirective, + value = navigator.scaffoldValue, + mainPane = { /*...*/ }, + supportingPane = { /*...*/ }, + ) + // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_params] +} + +@Composable +fun SampleSupportingPaneScaffoldFull() { + // [START android_compose_adaptivelayouts_sample_supporting_pane_scaffold_full] + val navigator = rememberSupportingPaneScaffoldNavigator() + + BackHandler(navigator.canNavigateBack()) { + navigator.navigateBack() + } + + SupportingPaneScaffold( + directive = navigator.scaffoldDirective, + value = navigator.scaffoldValue, + mainPane = { + AnimatedPane(modifier = Modifier.safeContentPadding()) { + // Main pane content + if (navigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden) { + Button( + modifier = Modifier.wrapContentSize(), + onClick = { + navigator.navigateTo(SupportingPaneScaffoldRole.Supporting) + } + ) { + Text("Show supporting pane") + } + } else { + Text("Supporting pane is shown") + } + } + }, + supportingPane = { + AnimatedPane(modifier = Modifier.safeContentPadding()) { + // Supporting pane content + Text("Supporting pane") + } + }, + ) + // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_full] +} + +// [START android_compose_adaptivelayouts_sample_supporting_pane_scaffold_extracted_panes] +@Composable +fun ThreePaneScaffoldScope.MainPane( + shouldShowSupportingPaneButton: Boolean, + onNavigateToSupportingPane: () -> Unit, +) { + AnimatedPane(modifier = Modifier.safeContentPadding()) { + // Main pane content + if (shouldShowSupportingPaneButton) { + Button(onClick = onNavigateToSupportingPane) { + Text("Show supporting pane") + } + } else { + Text("Supporting pane is shown") + } + } +} + +@Composable +fun ThreePaneScaffoldScope.SupportingPane() { + AnimatedPane(modifier = Modifier.safeContentPadding()) { + // Supporting pane content + Text("This is the supporting pane") + } +} +// [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_extracted_panes] + +@Composable +fun SampleSupportingPaneScaffoldSimplified() { +// [START android_compose_adaptivelayouts_sample_supporting_pane_scaffold_simplified] + val navigator = rememberSupportingPaneScaffoldNavigator() + + BackHandler(navigator.canNavigateBack()) { + navigator.navigateBack() + } + + SupportingPaneScaffold( + directive = navigator.scaffoldDirective, + value = navigator.scaffoldValue, + mainPane = { + MainPane( + shouldShowSupportingPaneButton = navigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden, + onNavigateToSupportingPane = { navigator.navigateTo(ThreePaneScaffoldRole.Secondary) } + ) + }, + supportingPane = { SupportingPane() }, + ) +// [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_simplified] +} \ No newline at end of file From 362e289a106ba092185cfd201d1e878428f101df Mon Sep 17 00:00:00 2001 From: IanGClifton Date: Wed, 1 May 2024 23:20:25 +0000 Subject: [PATCH 2/4] Apply Spotless --- .../SampleSupportingPaneScaffold.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 65605c823..a729efb94 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 @@ -1,3 +1,19 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + @file:OptIn(ExperimentalMaterial3AdaptiveApi::class) package com.example.compose.snippets.adaptivelayouts @@ -125,4 +141,4 @@ fun SampleSupportingPaneScaffoldSimplified() { supportingPane = { SupportingPane() }, ) // [END android_compose_adaptivelayouts_sample_supporting_pane_scaffold_simplified] -} \ No newline at end of file +} From b85a7cc9866680d2840d92887c2e4cb667edce70 Mon Sep 17 00:00:00 2001 From: "Ian G. Clifton" <1033551+IanGClifton@users.noreply.github.com> Date: Wed, 1 May 2024 17:10:59 -0700 Subject: [PATCH 3/4] Update compose/snippets/src/main/java/com/example/compose/snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt Co-authored-by: Alex Vanyo --- .../snippets/adaptivelayouts/SampleSupportingPaneScaffold.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a729efb94..bdabaf093 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 @@ -69,7 +69,7 @@ fun SampleSupportingPaneScaffoldFull() { mainPane = { AnimatedPane(modifier = Modifier.safeContentPadding()) { // Main pane content - if (navigator.scaffoldValue.secondary == PaneAdaptedValue.Hidden) { + if (navigator.scaffoldValue[SupportingPaneScaffoldRole.Supporting] == PaneAdaptedValue.Hidden) { Button( modifier = Modifier.wrapContentSize(), onClick = { From eb5b35ecb454a877d241f093d6c23a0cf7049582 Mon Sep 17 00:00:00 2001 From: "Ian G. Clifton" Date: Wed, 1 May 2024 17:14:00 -0700 Subject: [PATCH 4/4] Update to have default modifiers --- .../adaptivelayouts/SampleSupportingPaneScaffold.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 bdabaf093..ad2e0d30f 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 @@ -98,8 +98,9 @@ fun SampleSupportingPaneScaffoldFull() { fun ThreePaneScaffoldScope.MainPane( shouldShowSupportingPaneButton: Boolean, onNavigateToSupportingPane: () -> Unit, + modifier: Modifier = Modifier, ) { - AnimatedPane(modifier = Modifier.safeContentPadding()) { + AnimatedPane(modifier = modifier.safeContentPadding()) { // Main pane content if (shouldShowSupportingPaneButton) { Button(onClick = onNavigateToSupportingPane) { @@ -112,8 +113,10 @@ fun ThreePaneScaffoldScope.MainPane( } @Composable -fun ThreePaneScaffoldScope.SupportingPane() { - AnimatedPane(modifier = Modifier.safeContentPadding()) { +fun ThreePaneScaffoldScope.SupportingPane( + modifier: Modifier = Modifier, +) { + AnimatedPane(modifier = modifier.safeContentPadding()) { // Supporting pane content Text("This is the supporting pane") }