Change specific scaffold roles to aliases of ThreePaneScaffoldRole
It gives us cleaner implementation and more flexibile APIs.
Relnote: change scaffold roles to aliases of ThreePaneScaffoldRole
Test: unit test
Change-Id: I65bd1795bf03c17f229d983f87c4ce20ee9ca93a
diff --git a/compose/material3/material3-adaptive/api/current.txt b/compose/material3/material3-adaptive/api/current.txt
index d8b8f18..9183d40 100644
--- a/compose/material3/material3-adaptive/api/current.txt
+++ b/compose/material3/material3-adaptive/api/current.txt
@@ -44,22 +44,19 @@
field public static final androidx.compose.material3.adaptive.ListDetailPaneScaffoldDefaults INSTANCE;
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ListDetailPaneScaffoldRole extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole {
- field public static final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole.Companion Companion;
- }
-
- public static final class ListDetailPaneScaffoldRole.Companion {
- method public androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole getDetail();
- method public androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole getExtra();
- method public androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole getList();
- property public final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole Detail;
- property public final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole Extra;
- property public final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole List;
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ListDetailPaneScaffoldRole {
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getDetail();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getExtra();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getList();
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Detail;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Extra;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole List;
+ field public static final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole INSTANCE;
}
public final class ListDetailPaneScaffold_androidKt {
method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static void ListDetailPaneScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> listPane, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.adaptive.ThreePaneScaffoldState scaffoldState, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit>? extraPane, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> detailPane);
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateListDetailPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole currentPaneDestination);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateListDetailPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.ThreePaneScaffoldRole currentPaneDestination);
}
@SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @kotlin.jvm.JvmInline public final value class PaneAdaptedValue {
@@ -121,22 +118,19 @@
field public static final androidx.compose.material3.adaptive.SupportingPaneScaffoldDefaults INSTANCE;
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class SupportingPaneScaffoldRole extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole {
- field public static final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole.Companion Companion;
- }
-
- public static final class SupportingPaneScaffoldRole.Companion {
- method public androidx.compose.material3.adaptive.SupportingPaneScaffoldRole getExtra();
- method public androidx.compose.material3.adaptive.SupportingPaneScaffoldRole getMain();
- method public androidx.compose.material3.adaptive.SupportingPaneScaffoldRole getSupporting();
- property public final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole Extra;
- property public final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole Main;
- property public final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole Supporting;
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class SupportingPaneScaffoldRole {
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getExtra();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getMain();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getSupporting();
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Extra;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Main;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Supporting;
+ field public static final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole INSTANCE;
}
public final class SupportingPaneScaffold_androidKt {
method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static void SupportingPaneScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> supportingPane, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.adaptive.ThreePaneScaffoldState scaffoldState, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit>? extraPane, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> mainPane);
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateSupportingPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.SupportingPaneScaffoldRole currentPaneDestination);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateSupportingPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.ThreePaneScaffoldRole currentPaneDestination);
}
@SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldAdaptStrategies {
@@ -148,20 +142,25 @@
method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static void AnimatedPane(androidx.compose.material3.adaptive.ThreePaneScaffoldScope, androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> content);
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public interface ThreePaneScaffoldNavigator<T extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole> {
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public interface ThreePaneScaffoldNavigator {
method public boolean canNavigateBack(optional boolean scaffoldValueMustChange);
method public androidx.compose.material3.adaptive.ThreePaneScaffoldState getScaffoldState();
method public boolean navigateBack(optional boolean popUntilScaffoldValueChange);
- method public void navigateTo(T pane);
+ method public void navigateTo(androidx.compose.material3.adaptive.ThreePaneScaffoldRole pane);
property public abstract androidx.compose.material3.adaptive.ThreePaneScaffoldState scaffoldState;
}
public final class ThreePaneScaffoldNavigator_androidKt {
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator<androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole> rememberListDetailPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole> initialDestinationHistory);
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator<androidx.compose.material3.adaptive.SupportingPaneScaffoldRole> rememberSupportingPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<androidx.compose.material3.adaptive.SupportingPaneScaffoldRole> initialDestinationHistory);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator rememberListDetailPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<? extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole> initialDestinationHistory);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator rememberSupportingPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<? extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole> initialDestinationHistory);
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public abstract class ThreePaneScaffoldRole {
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public enum ThreePaneScaffoldRole {
+ method public static androidx.compose.material3.adaptive.ThreePaneScaffoldRole valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.compose.material3.adaptive.ThreePaneScaffoldRole[] values();
+ enum_constant public static final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Primary;
+ enum_constant public static final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Secondary;
+ enum_constant public static final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Tertiary;
}
public interface ThreePaneScaffoldScope extends androidx.compose.material3.adaptive.PaneScaffoldScope {
diff --git a/compose/material3/material3-adaptive/api/restricted_current.txt b/compose/material3/material3-adaptive/api/restricted_current.txt
index d8b8f18..9183d40 100644
--- a/compose/material3/material3-adaptive/api/restricted_current.txt
+++ b/compose/material3/material3-adaptive/api/restricted_current.txt
@@ -44,22 +44,19 @@
field public static final androidx.compose.material3.adaptive.ListDetailPaneScaffoldDefaults INSTANCE;
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ListDetailPaneScaffoldRole extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole {
- field public static final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole.Companion Companion;
- }
-
- public static final class ListDetailPaneScaffoldRole.Companion {
- method public androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole getDetail();
- method public androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole getExtra();
- method public androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole getList();
- property public final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole Detail;
- property public final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole Extra;
- property public final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole List;
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ListDetailPaneScaffoldRole {
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getDetail();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getExtra();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getList();
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Detail;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Extra;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole List;
+ field public static final androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole INSTANCE;
}
public final class ListDetailPaneScaffold_androidKt {
method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static void ListDetailPaneScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> listPane, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.adaptive.ThreePaneScaffoldState scaffoldState, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit>? extraPane, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> detailPane);
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateListDetailPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole currentPaneDestination);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateListDetailPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.ThreePaneScaffoldRole currentPaneDestination);
}
@SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @kotlin.jvm.JvmInline public final value class PaneAdaptedValue {
@@ -121,22 +118,19 @@
field public static final androidx.compose.material3.adaptive.SupportingPaneScaffoldDefaults INSTANCE;
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class SupportingPaneScaffoldRole extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole {
- field public static final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole.Companion Companion;
- }
-
- public static final class SupportingPaneScaffoldRole.Companion {
- method public androidx.compose.material3.adaptive.SupportingPaneScaffoldRole getExtra();
- method public androidx.compose.material3.adaptive.SupportingPaneScaffoldRole getMain();
- method public androidx.compose.material3.adaptive.SupportingPaneScaffoldRole getSupporting();
- property public final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole Extra;
- property public final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole Main;
- property public final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole Supporting;
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class SupportingPaneScaffoldRole {
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getExtra();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getMain();
+ method public androidx.compose.material3.adaptive.ThreePaneScaffoldRole getSupporting();
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Extra;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Main;
+ property public final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Supporting;
+ field public static final androidx.compose.material3.adaptive.SupportingPaneScaffoldRole INSTANCE;
}
public final class SupportingPaneScaffold_androidKt {
method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static void SupportingPaneScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> supportingPane, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.adaptive.ThreePaneScaffoldState scaffoldState, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit>? extraPane, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> mainPane);
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateSupportingPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.SupportingPaneScaffoldRole currentPaneDestination);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldState calculateSupportingPaneScaffoldState(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional androidx.compose.material3.adaptive.ThreePaneScaffoldRole currentPaneDestination);
}
@SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldAdaptStrategies {
@@ -148,20 +142,25 @@
method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static void AnimatedPane(androidx.compose.material3.adaptive.ThreePaneScaffoldScope, androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.ThreePaneScaffoldScope,kotlin.Unit> content);
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public interface ThreePaneScaffoldNavigator<T extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole> {
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public interface ThreePaneScaffoldNavigator {
method public boolean canNavigateBack(optional boolean scaffoldValueMustChange);
method public androidx.compose.material3.adaptive.ThreePaneScaffoldState getScaffoldState();
method public boolean navigateBack(optional boolean popUntilScaffoldValueChange);
- method public void navigateTo(T pane);
+ method public void navigateTo(androidx.compose.material3.adaptive.ThreePaneScaffoldRole pane);
property public abstract androidx.compose.material3.adaptive.ThreePaneScaffoldState scaffoldState;
}
public final class ThreePaneScaffoldNavigator_androidKt {
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator<androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole> rememberListDetailPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole> initialDestinationHistory);
- method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator<androidx.compose.material3.adaptive.SupportingPaneScaffoldRole> rememberSupportingPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<androidx.compose.material3.adaptive.SupportingPaneScaffoldRole> initialDestinationHistory);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator rememberListDetailPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<? extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole> initialDestinationHistory);
+ method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator rememberSupportingPaneScaffoldNavigator(optional androidx.compose.material3.adaptive.PaneScaffoldDirective scaffoldDirective, optional androidx.compose.material3.adaptive.ThreePaneScaffoldAdaptStrategies adaptStrategies, optional java.util.List<? extends androidx.compose.material3.adaptive.ThreePaneScaffoldRole> initialDestinationHistory);
}
- @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public abstract class ThreePaneScaffoldRole {
+ @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public enum ThreePaneScaffoldRole {
+ method public static androidx.compose.material3.adaptive.ThreePaneScaffoldRole valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.compose.material3.adaptive.ThreePaneScaffoldRole[] values();
+ enum_constant public static final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Primary;
+ enum_constant public static final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Secondary;
+ enum_constant public static final androidx.compose.material3.adaptive.ThreePaneScaffoldRole Tertiary;
}
public interface ThreePaneScaffoldScope extends androidx.compose.material3.adaptive.PaneScaffoldScope {
diff --git a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldNavigatorTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldNavigatorTest.kt
index 452f698..83c85bd 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldNavigatorTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffoldNavigatorTest.kt
@@ -37,7 +37,7 @@
@Test
fun singlePaneLayout_navigateTo_makeFocusPaneExpanded() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
var canNavigateBack by Delegates.notNull<Boolean>()
composeRule.setContent {
@@ -64,7 +64,7 @@
@Test
fun dualPaneLayout_navigateTo_keepFocusPaneExpanded() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
var canNavigateBack by Delegates.notNull<Boolean>()
composeRule.setContent {
@@ -91,7 +91,7 @@
@Test
fun singlePaneLayout_navigateBack_makeFocusPaneHidden() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
var canNavigateBack by Delegates.notNull<Boolean>()
composeRule.setContent {
@@ -123,7 +123,7 @@
@Test
fun dualPaneLayout_enforceScaffoldValueChange_cannotNavigateBack() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
composeRule.setContent {
scaffoldNavigator = rememberListDetailPaneScaffoldNavigator(
@@ -142,7 +142,7 @@
@Test
fun dualPaneLayout_notEnforceScaffoldValueChange_canNavigateBack() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
composeRule.setContent {
scaffoldNavigator = rememberListDetailPaneScaffoldNavigator(
@@ -171,7 +171,7 @@
@Test
fun singlePaneToDualPaneLayout_enforceScaffoldValueChange_cannotNavigateBack() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
val mockCurrentScaffoldDirective = mutableStateOf(MockSinglePaneScaffoldDirective)
composeRule.setContent {
diff --git a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffoldNavigatorTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffoldNavigatorTest.kt
index a3ad7b67..34d2315 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffoldNavigatorTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffoldNavigatorTest.kt
@@ -37,7 +37,7 @@
@Test
fun singlePaneLayout_navigateTo_makeFocusPaneExpanded() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
var canNavigateBack by Delegates.notNull<Boolean>()
composeRule.setContent {
@@ -64,7 +64,7 @@
@Test
fun dualPaneLayout_navigateTo_keepFocusPaneExpanded() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
var canNavigateBack by Delegates.notNull<Boolean>()
composeRule.setContent {
@@ -91,7 +91,7 @@
@Test
fun singlePaneLayout_navigateBack_makeFocusPaneHidden() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
var canNavigateBack by Delegates.notNull<Boolean>()
composeRule.setContent {
@@ -123,7 +123,7 @@
@Test
fun dualPaneLayout_enforceScaffoldChange_cannotNavigateBack() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
composeRule.setContent {
scaffoldNavigator = rememberSupportingPaneScaffoldNavigator(
@@ -142,7 +142,7 @@
@Test
fun dualPaneLayout_notEnforceScaffoldValueChange_canNavigateBack() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
composeRule.setContent {
scaffoldNavigator = rememberSupportingPaneScaffoldNavigator(
@@ -171,7 +171,7 @@
@Test
fun singlePaneToDualPaneLayout_enforceScaffoldValueChange_cannotNavigateBack() {
- lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole>
+ lateinit var scaffoldNavigator: ThreePaneScaffoldNavigator
val mockCurrentScaffoldDirective = mutableStateOf(MockSinglePaneScaffoldDirective)
composeRule.setContent {
diff --git a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffold.android.kt b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffold.android.kt
index 30ef758..ef08697 100644
--- a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffold.android.kt
+++ b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ListDetailPaneScaffold.android.kt
@@ -71,7 +71,7 @@
calculateStandardPaneScaffoldDirective(currentWindowAdaptiveInfo()),
adaptStrategies: ThreePaneScaffoldAdaptStrategies =
ListDetailPaneScaffoldDefaults.adaptStrategies(),
- currentPaneDestination: ListDetailPaneScaffoldRole = ListDetailPaneScaffoldRole.List
+ currentPaneDestination: ThreePaneScaffoldRole = ListDetailPaneScaffoldRole.List
): ThreePaneScaffoldState = ThreePaneScaffoldStateImpl(
scaffoldDirective,
calculateThreePaneScaffoldValue(
@@ -106,37 +106,28 @@
}
/**
- * The set of the available pane roles of [ListDetailPaneScaffold].
+ * The set of the available pane roles of [ListDetailPaneScaffold]. Basically those values are
+ * aliases of [ThreePaneScaffoldRole]. We suggest you to use the values defined here instead of
+ * the raw [ThreePaneScaffoldRole] under the context of [ListDetailPaneScaffold] for better
+ * code clarity.
*/
@ExperimentalMaterial3AdaptiveApi
-class ListDetailPaneScaffoldRole private constructor(
- internalRole: ThreePaneScaffoldRoleInternal
-) : ThreePaneScaffoldRole(internalRole) {
- companion object {
- /**
- * The list pane of [ListDetailPaneScaffold]. It is mapped to
- * [ThreePaneScaffoldRoleInternal.Secondary].
- */
- val List = ListDetailPaneScaffoldRole(ThreePaneScaffoldRoleInternal.Secondary)
+object ListDetailPaneScaffoldRole {
+ /**
+ * The list pane of [ListDetailPaneScaffold]. It is an alias of
+ * [ThreePaneScaffoldRole.Secondary].
+ */
+ val List = ThreePaneScaffoldRole.Secondary
- /**
- * The detail pane of [ListDetailPaneScaffold]. It is mapped to
- * [ThreePaneScaffoldRoleInternal.Primary].
- */
- val Detail = ListDetailPaneScaffoldRole(ThreePaneScaffoldRoleInternal.Primary)
+ /**
+ * The detail pane of [ListDetailPaneScaffold]. It is an alias of
+ * [ThreePaneScaffoldRole.Primary].
+ */
+ val Detail = ThreePaneScaffoldRole.Primary
- /**
- * The extra pane of [ListDetailPaneScaffold]. It is mapped to
- * [ThreePaneScaffoldRoleInternal.Tertiary].
- */
- val Extra = ListDetailPaneScaffoldRole(ThreePaneScaffoldRoleInternal.Tertiary)
- }
+ /**
+ * The extra pane of [ListDetailPaneScaffold]. It is an alias of
+ * [ThreePaneScaffoldRole.Tertiary].
+ */
+ val Extra = ThreePaneScaffoldRole.Tertiary
}
-
-@OptIn(ExperimentalMaterial3AdaptiveApi::class)
-internal fun ThreePaneScaffoldRoleInternal.toListDetailPaneScaffoldRole():
- ListDetailPaneScaffoldRole = when (this) {
- ThreePaneScaffoldRoleInternal.Primary -> ListDetailPaneScaffoldRole.Detail
- ThreePaneScaffoldRoleInternal.Secondary -> ListDetailPaneScaffoldRole.List
- ThreePaneScaffoldRoleInternal.Tertiary -> ListDetailPaneScaffoldRole.Extra
- }
diff --git a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffold.android.kt b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffold.android.kt
index 6405c57..b6020ce 100644
--- a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffold.android.kt
+++ b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/SupportingPaneScaffold.android.kt
@@ -56,7 +56,7 @@
calculateStandardPaneScaffoldDirective(currentWindowAdaptiveInfo()),
adaptStrategies: ThreePaneScaffoldAdaptStrategies =
SupportingPaneScaffoldDefaults.adaptStrategies(),
- currentPaneDestination: SupportingPaneScaffoldRole = SupportingPaneScaffoldRole.Main
+ currentPaneDestination: ThreePaneScaffoldRole = SupportingPaneScaffoldRole.Main
): ThreePaneScaffoldState = ThreePaneScaffoldStateImpl(
scaffoldDirective,
calculateThreePaneScaffoldValue(
@@ -91,37 +91,28 @@
}
/**
- * The set of the available pane roles of [SupportingPaneScaffold].
+ * The set of the available pane roles of [SupportingPaneScaffold]. Basically those values are
+ * aliases of [ThreePaneScaffoldRole]. We suggest you to use the values defined here instead of
+ * the raw [ThreePaneScaffoldRole] under the context of [SupportingPaneScaffold] for better
+ * code clarity.
*/
@ExperimentalMaterial3AdaptiveApi
-class SupportingPaneScaffoldRole private constructor(
- internalRole: ThreePaneScaffoldRoleInternal
-) : ThreePaneScaffoldRole(internalRole) {
- companion object {
- /**
- * The main pane of [SupportingPaneScaffold]. It is mapped to
- * [ThreePaneScaffoldRoleInternal.Primary].
- */
- val Main = SupportingPaneScaffoldRole(ThreePaneScaffoldRoleInternal.Primary)
+object SupportingPaneScaffoldRole {
+ /**
+ * The main pane of [SupportingPaneScaffold]. It is an alias of
+ * [ThreePaneScaffoldRole.Primary].
+ */
+ val Main = ThreePaneScaffoldRole.Primary
- /**
- * The supporting pane of [SupportingPaneScaffold]. It is mapped to
- * [ThreePaneScaffoldRoleInternal.Secondary].
- */
- val Supporting = SupportingPaneScaffoldRole(ThreePaneScaffoldRoleInternal.Secondary)
+ /**
+ * The supporting pane of [SupportingPaneScaffold]. It is an alias of
+ * [ThreePaneScaffoldRole.Secondary].
+ */
+ val Supporting = ThreePaneScaffoldRole.Secondary
- /**
- * The extra pane of [SupportingPaneScaffold]. It is mapped to
- * [ThreePaneScaffoldRoleInternal.Tertiary].
- */
- val Extra = SupportingPaneScaffoldRole(ThreePaneScaffoldRoleInternal.Tertiary)
- }
+ /**
+ * The extra pane of [SupportingPaneScaffold]. It is an alias of
+ * [ThreePaneScaffoldRole.Tertiary].
+ */
+ val Extra = ThreePaneScaffoldRole.Tertiary
}
-
-@OptIn(ExperimentalMaterial3AdaptiveApi::class)
-internal fun ThreePaneScaffoldRoleInternal.toSupportingPaneScaffoldRole():
- SupportingPaneScaffoldRole = when (this) {
- ThreePaneScaffoldRoleInternal.Primary -> SupportingPaneScaffoldRole.Main
- ThreePaneScaffoldRoleInternal.Secondary -> SupportingPaneScaffoldRole.Supporting
- ThreePaneScaffoldRoleInternal.Tertiary -> SupportingPaneScaffoldRole.Extra
- }
diff --git a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldNavigator.android.kt b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldNavigator.android.kt
index f6469a9..5759fb7 100644
--- a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldNavigator.android.kt
+++ b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldNavigator.android.kt
@@ -26,7 +26,6 @@
import androidx.compose.runtime.saveable.listSaver
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
-import androidx.compose.ui.util.fastMap
/**
* The navigation integration entry point of [ThreePaneScaffold] implementations.
@@ -39,7 +38,7 @@
*/
@ExperimentalMaterial3AdaptiveApi
@Stable
-interface ThreePaneScaffoldNavigator<T : ThreePaneScaffoldRole> {
+interface ThreePaneScaffoldNavigator {
/**
* The current scaffold state provided by the navigator. It's supposed to be auto-updated
* whenever a navigation operation is performed.
@@ -49,7 +48,7 @@
/**
* Navigates to a new pane destination.
*/
- fun navigateTo(pane: T)
+ fun navigateTo(pane: ThreePaneScaffoldRole)
/**
* Returns `true` if there is a previous destination to navigate back to.
@@ -88,26 +87,13 @@
calculateStandardPaneScaffoldDirective(currentWindowAdaptiveInfo()),
adaptStrategies: ThreePaneScaffoldAdaptStrategies =
ListDetailPaneScaffoldDefaults.adaptStrategies(),
- initialDestinationHistory: List<ListDetailPaneScaffoldRole> =
- listOf(ListDetailPaneScaffoldRole.List)
-): ThreePaneScaffoldNavigator<ListDetailPaneScaffoldRole> =
- rememberSaveable(
- saver = DefaultThreePaneScaffoldNavigator.saver(
- scaffoldDirective,
- adaptStrategies,
- ) {
- toListDetailPaneScaffoldRole()
- }
- ) {
- DefaultThreePaneScaffoldNavigator(
- initialDestinationHistory = initialDestinationHistory,
- initialScaffoldDirective = scaffoldDirective,
- initialAdaptStrategies = adaptStrategies
- )
- }.apply {
- this.scaffoldDirective = scaffoldDirective
- this.adaptStrategies = adaptStrategies
- }
+ initialDestinationHistory: List<ThreePaneScaffoldRole> = listOf(ListDetailPaneScaffoldRole.List)
+): ThreePaneScaffoldNavigator =
+ rememberThreePaneScaffoldNavigator(
+ scaffoldDirective,
+ adaptStrategies,
+ initialDestinationHistory
+ )
/**
* Returns a remembered default implementation of [ThreePaneScaffoldNavigator] for
@@ -129,16 +115,24 @@
calculateStandardPaneScaffoldDirective(currentWindowAdaptiveInfo()),
adaptStrategies: ThreePaneScaffoldAdaptStrategies =
SupportingPaneScaffoldDefaults.adaptStrategies(),
- initialDestinationHistory: List<SupportingPaneScaffoldRole> =
+ initialDestinationHistory: List<ThreePaneScaffoldRole> =
listOf(SupportingPaneScaffoldRole.Main)
-): ThreePaneScaffoldNavigator<SupportingPaneScaffoldRole> =
+): ThreePaneScaffoldNavigator =
+ rememberThreePaneScaffoldNavigator(
+ scaffoldDirective,
+ adaptStrategies,
+ initialDestinationHistory
+ )
+
+@ExperimentalMaterial3AdaptiveApi
+@Composable
+internal fun rememberThreePaneScaffoldNavigator(
+ scaffoldDirective: PaneScaffoldDirective,
+ adaptStrategies: ThreePaneScaffoldAdaptStrategies,
+ initialDestinationHistory: List<ThreePaneScaffoldRole>
+): ThreePaneScaffoldNavigator =
rememberSaveable(
- saver = DefaultThreePaneScaffoldNavigator.saver(
- scaffoldDirective,
- adaptStrategies,
- ) {
- toSupportingPaneScaffoldRole()
- }
+ saver = DefaultThreePaneScaffoldNavigator.saver(scaffoldDirective, adaptStrategies)
) {
DefaultThreePaneScaffoldNavigator(
initialDestinationHistory = initialDestinationHistory,
@@ -151,13 +145,13 @@
}
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
-internal class DefaultThreePaneScaffoldNavigator<T : ThreePaneScaffoldRole>(
- initialDestinationHistory: List<T>,
+internal class DefaultThreePaneScaffoldNavigator(
+ initialDestinationHistory: List<ThreePaneScaffoldRole>,
initialScaffoldDirective: PaneScaffoldDirective,
initialAdaptStrategies: ThreePaneScaffoldAdaptStrategies,
-) : ThreePaneScaffoldNavigator<T>, ThreePaneScaffoldState {
+) : ThreePaneScaffoldNavigator, ThreePaneScaffoldState {
- private val destinationHistory = mutableStateListOf<T>().apply {
+ private val destinationHistory = mutableStateListOf<ThreePaneScaffoldRole>().apply {
addAll(initialDestinationHistory)
}
@@ -167,13 +161,13 @@
var adaptStrategies by mutableStateOf(initialAdaptStrategies)
- val currentDestination: T? get() = destinationHistory.lastOrNull()
+ val currentDestination: ThreePaneScaffoldRole? get() = destinationHistory.lastOrNull()
override val scaffoldValue by derivedStateOf {
calculateScaffoldValue(currentDestination)
}
- override fun navigateTo(pane: T) {
+ override fun navigateTo(pane: ThreePaneScaffoldRole) {
destinationHistory.add(pane)
}
@@ -211,7 +205,7 @@
}
private fun calculateScaffoldValue(
- destination: T?
+ destination: ThreePaneScaffoldRole?
): ThreePaneScaffoldValue =
calculateThreePaneScaffoldValue(
scaffoldDirective.maxHorizontalPartitions,
@@ -223,17 +217,16 @@
/**
* To keep destination history saved
*/
- fun <T : ThreePaneScaffoldRole> saver(
+ fun saver(
initialScaffoldDirective: PaneScaffoldDirective,
- initialAdaptStrategies: ThreePaneScaffoldAdaptStrategies,
- roleConverter: ThreePaneScaffoldRoleInternal.() -> T
- ): Saver<DefaultThreePaneScaffoldNavigator<T>, *> = listSaver(
+ initialAdaptStrategies: ThreePaneScaffoldAdaptStrategies
+ ): Saver<DefaultThreePaneScaffoldNavigator, *> = listSaver(
save = {
- it.destinationHistory.fastMap { destination -> destination.internalRole }
+ it.destinationHistory
},
restore = {
DefaultThreePaneScaffoldNavigator(
- initialDestinationHistory = it.fastMap(roleConverter),
+ initialDestinationHistory = it,
initialScaffoldDirective = initialScaffoldDirective,
initialAdaptStrategies = initialAdaptStrategies
)
diff --git a/compose/material3/material3-adaptive/src/androidUnitTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValueTest.kt b/compose/material3/material3-adaptive/src/androidUnitTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValueTest.kt
index 5cc2720..32cfb93 100644
--- a/compose/material3/material3-adaptive/src/androidUnitTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValueTest.kt
+++ b/compose/material3/material3-adaptive/src/androidUnitTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValueTest.kt
@@ -26,61 +26,61 @@
class ThreePaneScaffoldValueTest {
@Test
fun test_onePaneLayoutNoFocus() {
- val scaffoldState = calculateThreePaneScaffoldValueInternal(
+ val scaffoldState = calculateThreePaneScaffoldValue(
maxHorizontalPartitions = 1,
adaptStrategies = MockAdaptStrategies
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Primary, PaneAdaptedValue.Expanded)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Primary, PaneAdaptedValue.Expanded)
scaffoldState.assertState(
- ThreePaneScaffoldRoleInternal.Secondary,
+ ThreePaneScaffoldRole.Secondary,
SecondaryPaneAdaptedState
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Tertiary, TertiaryPaneAdaptedState)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Tertiary, TertiaryPaneAdaptedState)
}
@Test
fun test_onePaneLayoutWithFocus() {
- val scaffoldState = calculateThreePaneScaffoldValueInternal(
+ val scaffoldState = calculateThreePaneScaffoldValue(
maxHorizontalPartitions = 1,
adaptStrategies = MockAdaptStrategies,
- currentDestination = ThreePaneScaffoldRoleInternal.Secondary
+ currentDestination = ThreePaneScaffoldRole.Secondary
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Primary, PrimaryPaneAdaptedState)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Primary, PrimaryPaneAdaptedState)
scaffoldState.assertState(
- ThreePaneScaffoldRoleInternal.Secondary,
+ ThreePaneScaffoldRole.Secondary,
PaneAdaptedValue.Expanded)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Tertiary, TertiaryPaneAdaptedState)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Tertiary, TertiaryPaneAdaptedState)
}
@Test
fun test_twoPaneLayoutNoFocus() {
- val scaffoldState = calculateThreePaneScaffoldValueInternal(
+ val scaffoldState = calculateThreePaneScaffoldValue(
maxHorizontalPartitions = 2,
adaptStrategies = MockAdaptStrategies
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Primary, PaneAdaptedValue.Expanded)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Primary, PaneAdaptedValue.Expanded)
scaffoldState.assertState(
- ThreePaneScaffoldRoleInternal.Secondary, PaneAdaptedValue.Expanded
+ ThreePaneScaffoldRole.Secondary, PaneAdaptedValue.Expanded
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Tertiary, TertiaryPaneAdaptedState)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Tertiary, TertiaryPaneAdaptedState)
}
@Test
fun test_twoPaneLayoutWithFocus() {
- val scaffoldState = calculateThreePaneScaffoldValueInternal(
+ val scaffoldState = calculateThreePaneScaffoldValue(
maxHorizontalPartitions = 2,
adaptStrategies = MockAdaptStrategies,
- currentDestination = ThreePaneScaffoldRoleInternal.Tertiary
+ currentDestination = ThreePaneScaffoldRole.Tertiary
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Primary, PaneAdaptedValue.Expanded)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Primary, PaneAdaptedValue.Expanded)
scaffoldState.assertState(
- ThreePaneScaffoldRoleInternal.Secondary, SecondaryPaneAdaptedState
+ ThreePaneScaffoldRole.Secondary, SecondaryPaneAdaptedState
)
- scaffoldState.assertState(ThreePaneScaffoldRoleInternal.Tertiary, PaneAdaptedValue.Expanded)
+ scaffoldState.assertState(ThreePaneScaffoldRole.Tertiary, PaneAdaptedValue.Expanded)
}
private fun ThreePaneScaffoldValue.assertState(
- role: ThreePaneScaffoldRoleInternal,
+ role: ThreePaneScaffoldRole,
state: PaneAdaptedValue
) {
assertThat(this[role]).isEqualTo(state)
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
index 6380d7f..134cfcf 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
@@ -105,14 +105,14 @@
val contents = listOf<@Composable () -> Unit>(
{
remember { ThreePaneScaffoldScopeImpl() }.apply {
- paneAdaptedValue = scaffoldValue[ThreePaneScaffoldRoleInternal.Primary]
+ paneAdaptedValue = scaffoldValue[ThreePaneScaffoldRole.Primary]
positionAnimationSpec = paneMotion.animationSpec
enterTransition = paneMotion.enterTransition(
- ThreePaneScaffoldRoleInternal.Primary,
+ ThreePaneScaffoldRole.Primary,
ltrPaneOrder
)
exitTransition = paneMotion.exitTransition(
- ThreePaneScaffoldRoleInternal.Primary,
+ ThreePaneScaffoldRole.Primary,
ltrPaneOrder
)
animationToolingLabel = "Primary"
@@ -120,14 +120,14 @@
},
{
remember { ThreePaneScaffoldScopeImpl() }.apply {
- paneAdaptedValue = scaffoldValue[ThreePaneScaffoldRoleInternal.Secondary]
+ paneAdaptedValue = scaffoldValue[ThreePaneScaffoldRole.Secondary]
positionAnimationSpec = paneMotion.animationSpec
enterTransition = paneMotion.enterTransition(
- ThreePaneScaffoldRoleInternal.Secondary,
+ ThreePaneScaffoldRole.Secondary,
ltrPaneOrder
)
exitTransition = paneMotion.exitTransition(
- ThreePaneScaffoldRoleInternal.Secondary,
+ ThreePaneScaffoldRole.Secondary,
ltrPaneOrder
)
animationToolingLabel = "Secondary"
@@ -136,14 +136,14 @@
{
if (tertiaryPane != null) {
remember { ThreePaneScaffoldScopeImpl() }.apply {
- paneAdaptedValue = scaffoldValue[ThreePaneScaffoldRoleInternal.Tertiary]
+ paneAdaptedValue = scaffoldValue[ThreePaneScaffoldRole.Tertiary]
positionAnimationSpec = paneMotion.animationSpec
enterTransition = paneMotion.enterTransition(
- ThreePaneScaffoldRoleInternal.Tertiary,
+ ThreePaneScaffoldRole.Tertiary,
ltrPaneOrder
)
exitTransition = paneMotion.exitTransition(
- ThreePaneScaffoldRoleInternal.Tertiary,
+ ThreePaneScaffoldRole.Tertiary,
ltrPaneOrder
)
animationToolingLabel = "Tertiary"
@@ -185,11 +185,11 @@
) {
/**
- * Resolves and returns the [EnterTransition] for the given [ThreePaneScaffoldRoleInternal]
+ * Resolves and returns the [EnterTransition] for the given [ThreePaneScaffoldRole]
* at the given [ThreePaneScaffoldHorizontalOrder].
*/
fun enterTransition(
- role: ThreePaneScaffoldRoleInternal,
+ role: ThreePaneScaffoldRole,
paneOrder: ThreePaneScaffoldHorizontalOrder
): EnterTransition {
// Quick return in case this instance is the NoMotion one.
@@ -203,11 +203,11 @@
}
/**
- * Resolves and returns the [ExitTransition] for the given [ThreePaneScaffoldRoleInternal]
+ * Resolves and returns the [ExitTransition] for the given [ThreePaneScaffoldRole]
* at the given [ThreePaneScaffoldHorizontalOrder].
*/
fun exitTransition(
- role: ThreePaneScaffoldRoleInternal,
+ role: ThreePaneScaffoldRole,
paneOrder: ThreePaneScaffoldHorizontalOrder
): ExitTransition {
// Quick return in case this instance is the NoMotion one.
@@ -348,9 +348,9 @@
private data class PanePlacement(var positionX: Int = 0, var measuredWidth: Int = 0)
private val placementsCache = mapOf(
- ThreePaneScaffoldRoleInternal.Primary to PanePlacement(),
- ThreePaneScaffoldRoleInternal.Secondary to PanePlacement(),
- ThreePaneScaffoldRoleInternal.Tertiary to PanePlacement()
+ ThreePaneScaffoldRole.Primary to PanePlacement(),
+ ThreePaneScaffoldRole.Secondary to PanePlacement(),
+ ThreePaneScaffoldRole.Tertiary to PanePlacement()
)
override fun MeasureScope.measure(
@@ -519,7 +519,7 @@
paneOrder.forEach { role ->
if (predicate(scaffoldValue[role])) {
when (role) {
- ThreePaneScaffoldRoleInternal.Primary -> {
+ ThreePaneScaffoldRole.Primary -> {
createPaneMeasurableIfNeeded(
primaryMeasurables,
ThreePaneScaffoldDefaults.PrimaryPanePriority,
@@ -529,7 +529,7 @@
)
}
- ThreePaneScaffoldRoleInternal.Secondary -> {
+ ThreePaneScaffoldRole.Secondary -> {
createPaneMeasurableIfNeeded(
secondaryMeasurables,
ThreePaneScaffoldDefaults.SecondaryPanePriority,
@@ -539,7 +539,7 @@
)
}
- ThreePaneScaffoldRoleInternal.Tertiary -> {
+ ThreePaneScaffoldRole.Tertiary -> {
createPaneMeasurableIfNeeded(
tertiaryMeasurables,
ThreePaneScaffoldDefaults.TertiaryPanePriority,
@@ -558,7 +558,7 @@
private fun MutableList<PaneMeasurable>.createPaneMeasurableIfNeeded(
measurables: List<Measurable>,
priority: Int,
- role: ThreePaneScaffoldRoleInternal,
+ role: ThreePaneScaffoldRole,
defaultPreferredWidth: Int
) {
if (measurables.isNotEmpty()) {
@@ -725,7 +725,7 @@
private class PaneMeasurable(
val measurable: Measurable,
val priority: Int,
- val role: ThreePaneScaffoldRoleInternal,
+ val role: ThreePaneScaffoldRole,
defaultPreferredWidth: Int
) : Measurable by measurable {
private val data = ((parentData as? PaneScaffoldParentData) ?: PaneScaffoldParentData())
@@ -796,9 +796,9 @@
*/
// TODO(conradchen/sgibly): Consider moving this to the ListDetailPaneScaffoldDefaults
val ListDetailLayoutPaneOrder = ThreePaneScaffoldHorizontalOrder(
- ThreePaneScaffoldRoleInternal.Secondary,
- ThreePaneScaffoldRoleInternal.Primary,
- ThreePaneScaffoldRoleInternal.Tertiary
+ ThreePaneScaffoldRole.Secondary,
+ ThreePaneScaffoldRole.Primary,
+ ThreePaneScaffoldRole.Tertiary
)
/**
@@ -808,19 +808,19 @@
*/
// TODO(conradchen/sgibly): Consider moving this to the SupportingPaneScaffoldDefaults
val SupportingPaneLayoutPaneOrder = ThreePaneScaffoldHorizontalOrder(
- ThreePaneScaffoldRoleInternal.Primary,
- ThreePaneScaffoldRoleInternal.Secondary,
- ThreePaneScaffoldRoleInternal.Tertiary
+ ThreePaneScaffoldRole.Primary,
+ ThreePaneScaffoldRole.Secondary,
+ ThreePaneScaffoldRole.Tertiary
)
/**
- * The default preferred width of [ThreePaneScaffoldRoleInternal.Secondary]. See more details in
+ * The default preferred width of [ThreePaneScaffoldRole.Secondary]. See more details in
* [ThreePaneScaffoldScope.preferredWidth].
*/
val SecondaryPanePreferredWidth = 412.dp
/**
- * The default preferred width of [ThreePaneScaffoldRoleInternal.Tertiary]. See more details in
+ * The default preferred width of [ThreePaneScaffoldRole.Tertiary]. See more details in
* [ThreePaneScaffoldScope.preferredWidth].
*/
val TertiaryPanePreferredWidth = 412.dp
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldAdaptStrategies.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldAdaptStrategies.kt
index 21f1001..b0f43b1 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldAdaptStrategies.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldAdaptStrategies.kt
@@ -32,13 +32,11 @@
private val secondaryPaneAdaptStrategy: AdaptStrategy,
private val tertiaryPaneAdaptStrategy: AdaptStrategy
) {
- operator fun get(role: ThreePaneScaffoldRole): AdaptStrategy = get(role.internalRole)
-
- internal operator fun get(role: ThreePaneScaffoldRoleInternal): AdaptStrategy {
+ operator fun get(role: ThreePaneScaffoldRole): AdaptStrategy {
return when (role) {
- ThreePaneScaffoldRoleInternal.Primary -> primaryPaneAdaptStrategy
- ThreePaneScaffoldRoleInternal.Secondary -> secondaryPaneAdaptStrategy
- ThreePaneScaffoldRoleInternal.Tertiary -> tertiaryPaneAdaptStrategy
+ ThreePaneScaffoldRole.Primary -> primaryPaneAdaptStrategy
+ ThreePaneScaffoldRole.Secondary -> secondaryPaneAdaptStrategy
+ ThreePaneScaffoldRole.Tertiary -> tertiaryPaneAdaptStrategy
}
}
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldHorizontalOrder.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldHorizontalOrder.kt
index 6e46410..131e717 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldHorizontalOrder.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldHorizontalOrder.kt
@@ -32,9 +32,9 @@
@ExperimentalMaterial3AdaptiveApi
@Immutable
internal class ThreePaneScaffoldHorizontalOrder(
- val firstPane: ThreePaneScaffoldRoleInternal,
- val secondPane: ThreePaneScaffoldRoleInternal,
- val thirdPane: ThreePaneScaffoldRoleInternal
+ val firstPane: ThreePaneScaffoldRole,
+ val secondPane: ThreePaneScaffoldRole,
+ val thirdPane: ThreePaneScaffoldRole
) {
init {
require(firstPane != secondPane && secondPane != thirdPane && firstPane != thirdPane) {
@@ -80,7 +80,7 @@
@ExperimentalMaterial3AdaptiveApi
internal inline fun ThreePaneScaffoldHorizontalOrder.forEach(
- action: (ThreePaneScaffoldRoleInternal) -> Unit
+ action: (ThreePaneScaffoldRole) -> Unit
) {
action(firstPane)
action(secondPane)
@@ -89,7 +89,7 @@
@ExperimentalMaterial3AdaptiveApi
internal inline fun ThreePaneScaffoldHorizontalOrder.forEachIndexed(
- action: (Int, ThreePaneScaffoldRoleInternal) -> Unit
+ action: (Int, ThreePaneScaffoldRole) -> Unit
) {
action(0, firstPane)
action(1, secondPane)
@@ -97,7 +97,7 @@
}
@ExperimentalMaterial3AdaptiveApi
-internal fun ThreePaneScaffoldHorizontalOrder.indexOf(role: ThreePaneScaffoldRoleInternal): Int {
+internal fun ThreePaneScaffoldHorizontalOrder.indexOf(role: ThreePaneScaffoldRole): Int {
forEachIndexed { i, r ->
if (r == role) {
return i
@@ -111,7 +111,7 @@
* The set of the available pane roles of [ThreePaneScaffold].
*/
@ExperimentalMaterial3AdaptiveApi
-internal enum class ThreePaneScaffoldRoleInternal {
+enum class ThreePaneScaffoldRole {
/**
* The primary pane of [ThreePaneScaffold]. It is supposed to have the highest priority during
* layout adaptation and usually contains the most important content of the screen, like content
@@ -133,15 +133,3 @@
*/
Tertiary
}
-
-/**
- * The base class to represent the set of the available pane roles of a specific three pane scaffold
- * implementation.
- *
- * @see [ListDetailPaneScaffoldRole]
- * @see [SupportingPaneScaffoldRole]
- */
-@ExperimentalMaterial3AdaptiveApi
-abstract class ThreePaneScaffoldRole internal constructor(
- internal val internalRole: ThreePaneScaffoldRoleInternal
-)
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
index 44bbfd2..30f18cb 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldValue.kt
@@ -16,18 +16,16 @@
package androidx.compose.material3.adaptive
-import androidx.annotation.VisibleForTesting
import androidx.compose.runtime.Immutable
-import org.jetbrains.annotations.TestOnly
@ExperimentalMaterial3AdaptiveApi
private inline fun buildThreePaneScaffoldValue(
- buildAction: (ThreePaneScaffoldRoleInternal) -> PaneAdaptedValue
+ buildAction: (ThreePaneScaffoldRole) -> PaneAdaptedValue
): ThreePaneScaffoldValue {
return ThreePaneScaffoldValue(
- buildAction(ThreePaneScaffoldRoleInternal.Primary),
- buildAction(ThreePaneScaffoldRoleInternal.Secondary),
- buildAction(ThreePaneScaffoldRoleInternal.Tertiary)
+ buildAction(ThreePaneScaffoldRole.Primary),
+ buildAction(ThreePaneScaffoldRole.Secondary),
+ buildAction(ThreePaneScaffoldRole.Tertiary)
)
}
@@ -37,8 +35,8 @@
* used as a unique representation of the current layout structure.
*
* The function will treat the current destination as the highest priority and then adapt the rest
- * panes according to the order of [ThreePaneScaffoldRoleInternal.Primary],
- * [ThreePaneScaffoldRoleInternal.Secondary] and [ThreePaneScaffoldRoleInternal.Tertiary]. If there
+ * panes according to the order of [ThreePaneScaffoldRole.Primary],
+ * [ThreePaneScaffoldRole.Secondary] and [ThreePaneScaffoldRole.Tertiary]. If there
* are still remaining partitions to put the pane, the pane will be set as
* [PaneAdaptedValue.Expanded], otherwise it will be adapted according to its associated
* [AdaptStrategy].
@@ -55,12 +53,20 @@
maxHorizontalPartitions: Int,
adaptStrategies: ThreePaneScaffoldAdaptStrategies = ThreePaneScaffoldDefaults.adaptStrategies(),
currentDestination: ThreePaneScaffoldRole? = null,
-): ThreePaneScaffoldValue =
- calculateThreePaneScaffoldValueInternal(
- maxHorizontalPartitions,
- adaptStrategies,
- currentDestination?.internalRole
- )
+): ThreePaneScaffoldValue {
+ var expandedCount = if (currentDestination != null) 1 else 0
+ return buildThreePaneScaffoldValue { role ->
+ when {
+ role == currentDestination -> PaneAdaptedValue.Expanded
+ expandedCount < maxHorizontalPartitions -> {
+ expandedCount++
+ PaneAdaptedValue.Expanded
+ }
+
+ else -> adaptStrategies[role].adapt()
+ }
+ }
+}
/**
* The adapted value of [ThreePaneScaffold]. It contains each pane's adapted value.
@@ -101,34 +107,10 @@
return result
}
- operator fun get(role: ThreePaneScaffoldRole): PaneAdaptedValue = get(role.internalRole)
-
- internal operator fun get(role: ThreePaneScaffoldRoleInternal): PaneAdaptedValue =
+ operator fun get(role: ThreePaneScaffoldRole): PaneAdaptedValue =
when (role) {
- ThreePaneScaffoldRoleInternal.Primary -> primary
- ThreePaneScaffoldRoleInternal.Secondary -> secondary
- ThreePaneScaffoldRoleInternal.Tertiary -> tertiary
+ ThreePaneScaffoldRole.Primary -> primary
+ ThreePaneScaffoldRole.Secondary -> secondary
+ ThreePaneScaffoldRole.Tertiary -> tertiary
}
}
-
-@OptIn(ExperimentalMaterial3AdaptiveApi::class)
-@TestOnly
-@VisibleForTesting
-internal fun calculateThreePaneScaffoldValueInternal(
- maxHorizontalPartitions: Int,
- adaptStrategies: ThreePaneScaffoldAdaptStrategies = ThreePaneScaffoldDefaults.adaptStrategies(),
- currentDestination: ThreePaneScaffoldRoleInternal? = null,
-): ThreePaneScaffoldValue {
- var expandedCount = if (currentDestination != null) 1 else 0
- return buildThreePaneScaffoldValue { role ->
- when {
- role == currentDestination -> PaneAdaptedValue.Expanded
- expandedCount < maxHorizontalPartitions -> {
- expandedCount++
- PaneAdaptedValue.Expanded
- }
-
- else -> adaptStrategies[role].adapt()
- }
- }
-}