Merge "Rename NavRecord to NavEntry" into androidx-main
diff --git a/lifecycle/lifecycle-viewmodel-navigation3/api/current.txt b/lifecycle/lifecycle-viewmodel-navigation3/api/current.txt
index cdddc41..927612c 100644
--- a/lifecycle/lifecycle-viewmodel-navigation3/api/current.txt
+++ b/lifecycle/lifecycle-viewmodel-navigation3/api/current.txt
@@ -3,7 +3,7 @@
public final class ViewModelStoreNavLocalProvider implements androidx.navigation3.NavLocalProvider {
method @androidx.compose.runtime.Composable public void ProvideToBackStack(java.util.List<?> backStack);
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
field public static final androidx.lifecycle.viewmodel.navigation3.ViewModelStoreNavLocalProvider INSTANCE;
}
diff --git a/lifecycle/lifecycle-viewmodel-navigation3/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel-navigation3/api/restricted_current.txt
index cdddc41..927612c 100644
--- a/lifecycle/lifecycle-viewmodel-navigation3/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel-navigation3/api/restricted_current.txt
@@ -3,7 +3,7 @@
public final class ViewModelStoreNavLocalProvider implements androidx.navigation3.NavLocalProvider {
method @androidx.compose.runtime.Composable public void ProvideToBackStack(java.util.List<?> backStack);
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
field public static final androidx.lifecycle.viewmodel.navigation3.ViewModelStoreNavLocalProvider INSTANCE;
}
diff --git a/lifecycle/lifecycle-viewmodel-navigation3/src/androidInstrumentedTest/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapperTest.kt b/lifecycle/lifecycle-viewmodel-navigation3/src/androidInstrumentedTest/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapperTest.kt
index 702fd5e..f59f4fa 100644
--- a/lifecycle/lifecycle-viewmodel-navigation3/src/androidInstrumentedTest/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapperTest.kt
+++ b/lifecycle/lifecycle-viewmodel-navigation3/src/androidInstrumentedTest/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapperTest.kt
@@ -26,7 +26,7 @@
import androidx.lifecycle.createSavedStateHandle
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation3.NavDisplay
-import androidx.navigation3.NavRecord
+import androidx.navigation3.NavEntry
import androidx.navigation3.SavedStateNavLocalProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -45,34 +45,34 @@
val viewModelWrapper = ViewModelStoreNavLocalProvider
lateinit var viewModel1: MyViewModel
lateinit var viewModel2: MyViewModel
- val record1Arg = "record1 Arg"
- val record2Arg = "record2 Arg"
- val record1 =
- NavRecord("key1") {
+ val entry1Arg = "entry1 Arg"
+ val entry2Arg = "entry2 Arg"
+ val entry1 =
+ NavEntry("key1") {
viewModel1 = viewModel<MyViewModel>()
- viewModel1.myArg = record1Arg
+ viewModel1.myArg = entry1Arg
}
- val record2 =
- NavRecord("key2") {
+ val entry2 =
+ NavEntry("key2") {
viewModel2 = viewModel<MyViewModel>()
- viewModel2.myArg = record2Arg
+ viewModel2.myArg = entry2Arg
}
composeTestRule.setContent {
- savedStateWrapper.ProvideToRecord(
- NavRecord(record1.key) { viewModelWrapper.ProvideToRecord(record1) }
+ savedStateWrapper.ProvideToEntry(
+ NavEntry(entry1.key) { viewModelWrapper.ProvideToEntry(entry1) }
)
- savedStateWrapper.ProvideToRecord(
- NavRecord(record2.key) { viewModelWrapper.ProvideToRecord(record2) }
+ savedStateWrapper.ProvideToEntry(
+ NavEntry(entry2.key) { viewModelWrapper.ProvideToEntry(entry2) }
)
}
composeTestRule.runOnIdle {
- assertWithMessage("Incorrect arg for record 1")
+ assertWithMessage("Incorrect arg for entry 1")
.that(viewModel1.myArg)
- .isEqualTo(record1Arg)
- assertWithMessage("Incorrect arg for record 2")
+ .isEqualTo(entry1Arg)
+ assertWithMessage("Incorrect arg for entry 2")
.that(viewModel2.myArg)
- .isEqualTo(record2Arg)
+ .isEqualTo(entry2Arg)
}
}
@@ -80,14 +80,14 @@
fun testViewModelNoSavedStateNavLocalProvider() {
val viewModelWrapper = ViewModelStoreNavLocalProvider
lateinit var viewModel1: MyViewModel
- val record1Arg = "record1 Arg"
- val record1 =
- NavRecord("key1") {
+ val entry1Arg = "entry1 Arg"
+ val entry1 =
+ NavEntry("key1") {
viewModel1 = viewModel<MyViewModel>()
- viewModel1.myArg = record1Arg
+ viewModel1.myArg = entry1Arg
}
try {
- composeTestRule.setContent { viewModelWrapper.ProvideToRecord(record1) }
+ composeTestRule.setContent { viewModelWrapper.ProvideToEntry(entry1) }
} catch (e: Exception) {
assertThat(e)
.hasMessageThat()
@@ -112,10 +112,10 @@
) { key ->
when (key) {
"Home" -> {
- NavRecord(key) { viewModel<HomeViewModel>() }
+ NavEntry(key) { viewModel<HomeViewModel>() }
}
"AnotherScreen" -> {
- NavRecord(key) { viewModel<HomeViewModel>() }
+ NavEntry(key) { viewModel<HomeViewModel>() }
}
else -> error("Unknown key: $key")
}
@@ -162,7 +162,7 @@
) { key ->
when (key) {
"Home" -> {
- NavRecord(key) {
+ NavEntry(key) {
viewModel =
viewModel<SavedStateViewModel> {
val handle = createSavedStateHandle()
diff --git a/lifecycle/lifecycle-viewmodel-navigation3/src/androidMain/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapper.android.kt b/lifecycle/lifecycle-viewmodel-navigation3/src/androidMain/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapper.android.kt
index 95d9e3d..37b32ac 100644
--- a/lifecycle/lifecycle-viewmodel-navigation3/src/androidMain/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapper.android.kt
+++ b/lifecycle/lifecycle-viewmodel-navigation3/src/androidMain/kotlin/androidx/lifecycle/viewmodel/navigation3/ViewModelStoreNavContentWrapper.android.kt
@@ -35,44 +35,44 @@
import androidx.lifecycle.viewmodel.MutableCreationExtras
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.viewModel
+import androidx.navigation3.NavEntry
import androidx.navigation3.NavLocalProvider
-import androidx.navigation3.NavRecord
import androidx.savedstate.SavedStateRegistryOwner
import androidx.savedstate.compose.LocalSavedStateRegistryOwner
/**
- * Provides the content of a [NavRecord] with a [ViewModelStoreOwner] and provides that
+ * Provides the content of a [NavEntry] with a [ViewModelStoreOwner] and provides that
* [ViewModelStoreOwner] as a [LocalViewModelStoreOwner] so that it is available within the content.
*
- * This requires that usage of the [SavedStateNavLocalProvider] to ensure that the [NavRecord]
- * scoped [ViewModel]s can properly provide access to [SavedStateHandle]s
+ * This requires that usage of the [SavedStateNavLocalProvider] to ensure that the [NavEntry] scoped
+ * [ViewModel]s can properly provide access to [SavedStateHandle]s
*/
public object ViewModelStoreNavLocalProvider : NavLocalProvider {
@Composable
override fun ProvideToBackStack(backStack: List<Any>) {
- val recordViewModelStoreProvider = viewModel { RecordViewModel() }
- recordViewModelStoreProvider.ownerInBackStack.clear()
- recordViewModelStoreProvider.ownerInBackStack.addAll(backStack)
+ val entryViewModelStoreProvider = viewModel { EntryViewModel() }
+ entryViewModelStoreProvider.ownerInBackStack.clear()
+ entryViewModelStoreProvider.ownerInBackStack.addAll(backStack)
}
@Composable
- override fun <T : Any> ProvideToRecord(record: NavRecord<T>) {
- val key = record.key
- val recordViewModelStoreProvider = viewModel { RecordViewModel() }
- val viewModelStore = recordViewModelStoreProvider.viewModelStoreForKey(key)
+ override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
+ val key = entry.key
+ val entryViewModelStoreProvider = viewModel { EntryViewModel() }
+ val viewModelStore = entryViewModelStoreProvider.viewModelStoreForKey(key)
// This ensures we always keep viewModels on config changes.
val activity = LocalActivity.current
remember(key, viewModelStore) {
object : RememberObserver {
override fun onAbandoned() {
- if (!recordViewModelStoreProvider.ownerInBackStack.contains(key)) {
+ if (!entryViewModelStoreProvider.ownerInBackStack.contains(key)) {
disposeIfNotChangingConfiguration()
}
}
override fun onForgotten() {
- if (!recordViewModelStoreProvider.ownerInBackStack.contains(key)) {
+ if (!entryViewModelStoreProvider.ownerInBackStack.contains(key)) {
disposeIfNotChangingConfiguration()
}
}
@@ -81,7 +81,7 @@
fun disposeIfNotChangingConfiguration() {
if (activity?.isChangingConfigurations != true) {
- recordViewModelStoreProvider.removeViewModelStoreOwnerForKey(key)?.clear()
+ entryViewModelStoreProvider.removeViewModelStoreOwnerForKey(key)?.clear()
}
}
}
@@ -118,12 +118,12 @@
}
}
) {
- record.content.invoke(key)
+ entry.content.invoke(key)
}
}
}
-private class RecordViewModel : ViewModel() {
+private class EntryViewModel : ViewModel() {
private val owners = mutableMapOf<Any, ViewModelStore>()
val ownerInBackStack = mutableListOf<Any>()
diff --git a/navigation3/navigation3/api/current.txt b/navigation3/navigation3/api/current.txt
index 1c23099..d8d07e0 100644
--- a/navigation3/navigation3/api/current.txt
+++ b/navigation3/navigation3/api/current.txt
@@ -1,48 +1,12 @@
// Signature format: 4.0
package androidx.navigation3 {
- public final class NavDisplay {
- method public java.util.Map<java.lang.String,java.lang.Object> isDialog(boolean boolean);
- method public java.util.Map<java.lang.String,java.lang.Object> transition(androidx.compose.animation.EnterTransition? enter, androidx.compose.animation.ExitTransition? exit);
- field public static final androidx.navigation3.NavDisplay INSTANCE;
- }
-
- public final class NavDisplay_androidKt {
- method @androidx.compose.runtime.Composable public static <T> void NavDisplay(java.util.List<? extends T> backstack, optional androidx.compose.ui.Modifier modifier, optional java.util.List<? extends androidx.navigation3.NavLocalProvider> localProviders, optional androidx.compose.ui.Alignment contentAlignment, optional androidx.compose.animation.SizeTransform? sizeTransform, optional androidx.compose.animation.EnterTransition enterTransition, optional androidx.compose.animation.ExitTransition exitTransition, optional kotlin.jvm.functions.Function0<kotlin.Unit> onBack, kotlin.jvm.functions.Function1<? super T,? extends androidx.navigation3.NavRecord<? extends T>> recordProvider);
- }
-
- public interface NavLocalProvider {
- method @androidx.compose.runtime.Composable public default void ProvideToBackStack(java.util.List<?> backStack);
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
- }
-
- public final class NavRecord<T> {
- ctor public NavRecord(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
- method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
- method public T getKey();
- property public final kotlin.jvm.functions.Function1<T,kotlin.Unit> content;
- property public final java.util.Map<java.lang.String,java.lang.Object> featureMap;
- property public final T key;
- }
-
- public final class NavWrapperManager {
- ctor public NavWrapperManager();
- ctor public NavWrapperManager(optional java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
- method @androidx.compose.runtime.Composable public <T> void ContentForRecord(androidx.navigation3.NavRecord<T> record);
- method @androidx.compose.runtime.Composable public void PrepareBackStack(java.util.List<?> backStack);
- }
-
- public final class NavWrapperManagerKt {
- method @androidx.compose.runtime.Composable public static androidx.navigation3.NavWrapperManager rememberNavWrapperManager(java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
- }
-
- public final class RecordClassProvider<T> {
- ctor public RecordClassProvider(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ public final class EntryClassProvider<T> {
+ ctor public EntryClassProvider(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public kotlin.reflect.KClass<T> component1();
method public java.util.Map<java.lang.String,java.lang.Object> component2();
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> component3();
- method public androidx.navigation3.RecordClassProvider<T> copy(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public androidx.navigation3.EntryClassProvider<T> copy(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public kotlin.reflect.KClass<T> getClazz();
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
@@ -51,15 +15,15 @@
property public final java.util.Map<java.lang.String,java.lang.Object> featureMap;
}
- @kotlin.DslMarker public @interface RecordDsl {
+ @kotlin.DslMarker public @interface EntryDsl {
}
- public final class RecordProvider<T> {
- ctor public RecordProvider(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ public final class EntryProvider<T> {
+ ctor public EntryProvider(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public T component1();
method public java.util.Map<java.lang.String,java.lang.Object> component2();
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> component3();
- method public androidx.navigation3.RecordProvider<T> copy(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public androidx.navigation3.EntryProvider<T> copy(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
method public T getKey();
@@ -68,26 +32,62 @@
property public final T key;
}
- @androidx.navigation3.RecordDsl public final class RecordProviderBuilder {
- ctor public RecordProviderBuilder(kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavRecord<? extends java.lang.Object?>> fallback);
- method public <T> void addRecordProvider(kotlin.reflect.KClass<T> clazz, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public <T> void addRecordProvider(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavRecord<? extends java.lang.Object?>> build();
+ @androidx.navigation3.EntryDsl public final class EntryProviderBuilder {
+ ctor public EntryProviderBuilder(kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavEntry<? extends java.lang.Object?>> fallback);
+ method public <T> void addEntryProvider(kotlin.reflect.KClass<T> clazz, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public <T> void addEntryProvider(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavEntry<? extends java.lang.Object?>> build();
}
- public final class RecordProviderKt {
- method public static inline <reified T> void record(androidx.navigation3.RecordProviderBuilder, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public static <T> void record(androidx.navigation3.RecordProviderBuilder, T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public static inline kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavRecord<? extends java.lang.Object?>> recordProvider(optional kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavRecord<? extends java.lang.Object?>> fallback, kotlin.jvm.functions.Function1<? super androidx.navigation3.RecordProviderBuilder,kotlin.Unit> builder);
+ public final class EntryProviderKt {
+ method public static inline <reified T> void entry(androidx.navigation3.EntryProviderBuilder, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public static <T> void entry(androidx.navigation3.EntryProviderBuilder, T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public static inline kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavEntry<? extends java.lang.Object?>> entryProvider(optional kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavEntry<? extends java.lang.Object?>> fallback, kotlin.jvm.functions.Function1<? super androidx.navigation3.EntryProviderBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavDisplay {
+ method public java.util.Map<java.lang.String,java.lang.Object> isDialog(boolean boolean);
+ method public java.util.Map<java.lang.String,java.lang.Object> transition(androidx.compose.animation.EnterTransition? enter, androidx.compose.animation.ExitTransition? exit);
+ field public static final androidx.navigation3.NavDisplay INSTANCE;
+ }
+
+ public final class NavDisplay_androidKt {
+ method @androidx.compose.runtime.Composable public static <T> void NavDisplay(java.util.List<? extends T> backstack, optional androidx.compose.ui.Modifier modifier, optional java.util.List<? extends androidx.navigation3.NavLocalProvider> localProviders, optional androidx.compose.ui.Alignment contentAlignment, optional androidx.compose.animation.SizeTransform? sizeTransform, optional androidx.compose.animation.EnterTransition enterTransition, optional androidx.compose.animation.ExitTransition exitTransition, optional kotlin.jvm.functions.Function0<kotlin.Unit> onBack, kotlin.jvm.functions.Function1<? super T,? extends androidx.navigation3.NavEntry<? extends T>> entryProvider);
+ }
+
+ public final class NavEntry<T> {
+ ctor public NavEntry(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
+ method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
+ method public T getKey();
+ property public final kotlin.jvm.functions.Function1<T,kotlin.Unit> content;
+ property public final java.util.Map<java.lang.String,java.lang.Object> featureMap;
+ property public final T key;
+ }
+
+ public interface NavLocalProvider {
+ method @androidx.compose.runtime.Composable public default void ProvideToBackStack(java.util.List<?> backStack);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
+ }
+
+ public final class NavWrapperManager {
+ ctor public NavWrapperManager();
+ ctor public NavWrapperManager(optional java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
+ method @androidx.compose.runtime.Composable public <T> void ContentForEntry(androidx.navigation3.NavEntry<T> entry);
+ method @androidx.compose.runtime.Composable public void PrepareBackStack(java.util.List<?> backStack);
+ }
+
+ public final class NavWrapperManagerKt {
+ method @androidx.compose.runtime.Composable public static androidx.navigation3.NavWrapperManager rememberNavWrapperManager(java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
}
public final class SaveableStateNavLocalProvider implements androidx.navigation3.NavLocalProvider {
ctor public SaveableStateNavLocalProvider();
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
}
public final class SavedStateNavLocalProvider implements androidx.navigation3.NavLocalProvider {
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
field public static final androidx.navigation3.SavedStateNavLocalProvider INSTANCE;
}
diff --git a/navigation3/navigation3/api/restricted_current.txt b/navigation3/navigation3/api/restricted_current.txt
index 1c23099..d8d07e0 100644
--- a/navigation3/navigation3/api/restricted_current.txt
+++ b/navigation3/navigation3/api/restricted_current.txt
@@ -1,48 +1,12 @@
// Signature format: 4.0
package androidx.navigation3 {
- public final class NavDisplay {
- method public java.util.Map<java.lang.String,java.lang.Object> isDialog(boolean boolean);
- method public java.util.Map<java.lang.String,java.lang.Object> transition(androidx.compose.animation.EnterTransition? enter, androidx.compose.animation.ExitTransition? exit);
- field public static final androidx.navigation3.NavDisplay INSTANCE;
- }
-
- public final class NavDisplay_androidKt {
- method @androidx.compose.runtime.Composable public static <T> void NavDisplay(java.util.List<? extends T> backstack, optional androidx.compose.ui.Modifier modifier, optional java.util.List<? extends androidx.navigation3.NavLocalProvider> localProviders, optional androidx.compose.ui.Alignment contentAlignment, optional androidx.compose.animation.SizeTransform? sizeTransform, optional androidx.compose.animation.EnterTransition enterTransition, optional androidx.compose.animation.ExitTransition exitTransition, optional kotlin.jvm.functions.Function0<kotlin.Unit> onBack, kotlin.jvm.functions.Function1<? super T,? extends androidx.navigation3.NavRecord<? extends T>> recordProvider);
- }
-
- public interface NavLocalProvider {
- method @androidx.compose.runtime.Composable public default void ProvideToBackStack(java.util.List<?> backStack);
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
- }
-
- public final class NavRecord<T> {
- ctor public NavRecord(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
- method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
- method public T getKey();
- property public final kotlin.jvm.functions.Function1<T,kotlin.Unit> content;
- property public final java.util.Map<java.lang.String,java.lang.Object> featureMap;
- property public final T key;
- }
-
- public final class NavWrapperManager {
- ctor public NavWrapperManager();
- ctor public NavWrapperManager(optional java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
- method @androidx.compose.runtime.Composable public <T> void ContentForRecord(androidx.navigation3.NavRecord<T> record);
- method @androidx.compose.runtime.Composable public void PrepareBackStack(java.util.List<?> backStack);
- }
-
- public final class NavWrapperManagerKt {
- method @androidx.compose.runtime.Composable public static androidx.navigation3.NavWrapperManager rememberNavWrapperManager(java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
- }
-
- public final class RecordClassProvider<T> {
- ctor public RecordClassProvider(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ public final class EntryClassProvider<T> {
+ ctor public EntryClassProvider(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public kotlin.reflect.KClass<T> component1();
method public java.util.Map<java.lang.String,java.lang.Object> component2();
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> component3();
- method public androidx.navigation3.RecordClassProvider<T> copy(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public androidx.navigation3.EntryClassProvider<T> copy(kotlin.reflect.KClass<T> clazz, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public kotlin.reflect.KClass<T> getClazz();
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
@@ -51,15 +15,15 @@
property public final java.util.Map<java.lang.String,java.lang.Object> featureMap;
}
- @kotlin.DslMarker public @interface RecordDsl {
+ @kotlin.DslMarker public @interface EntryDsl {
}
- public final class RecordProvider<T> {
- ctor public RecordProvider(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ public final class EntryProvider<T> {
+ ctor public EntryProvider(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public T component1();
method public java.util.Map<java.lang.String,java.lang.Object> component2();
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> component3();
- method public androidx.navigation3.RecordProvider<T> copy(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public androidx.navigation3.EntryProvider<T> copy(T key, java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
method public T getKey();
@@ -68,26 +32,62 @@
property public final T key;
}
- @androidx.navigation3.RecordDsl public final class RecordProviderBuilder {
- ctor public RecordProviderBuilder(kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavRecord<? extends java.lang.Object?>> fallback);
- method public <T> void addRecordProvider(kotlin.reflect.KClass<T> clazz, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public <T> void addRecordProvider(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavRecord<? extends java.lang.Object?>> build();
+ @androidx.navigation3.EntryDsl public final class EntryProviderBuilder {
+ ctor public EntryProviderBuilder(kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavEntry<? extends java.lang.Object?>> fallback);
+ method public <T> void addEntryProvider(kotlin.reflect.KClass<T> clazz, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public <T> void addEntryProvider(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavEntry<? extends java.lang.Object?>> build();
}
- public final class RecordProviderKt {
- method public static inline <reified T> void record(androidx.navigation3.RecordProviderBuilder, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public static <T> void record(androidx.navigation3.RecordProviderBuilder, T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
- method public static inline kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavRecord<? extends java.lang.Object?>> recordProvider(optional kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavRecord<? extends java.lang.Object?>> fallback, kotlin.jvm.functions.Function1<? super androidx.navigation3.RecordProviderBuilder,kotlin.Unit> builder);
+ public final class EntryProviderKt {
+ method public static inline <reified T> void entry(androidx.navigation3.EntryProviderBuilder, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public static <T> void entry(androidx.navigation3.EntryProviderBuilder, T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public static inline kotlin.jvm.functions.Function1<java.lang.Object,androidx.navigation3.NavEntry<? extends java.lang.Object?>> entryProvider(optional kotlin.jvm.functions.Function1<java.lang.Object,? extends androidx.navigation3.NavEntry<? extends java.lang.Object?>> fallback, kotlin.jvm.functions.Function1<? super androidx.navigation3.EntryProviderBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavDisplay {
+ method public java.util.Map<java.lang.String,java.lang.Object> isDialog(boolean boolean);
+ method public java.util.Map<java.lang.String,java.lang.Object> transition(androidx.compose.animation.EnterTransition? enter, androidx.compose.animation.ExitTransition? exit);
+ field public static final androidx.navigation3.NavDisplay INSTANCE;
+ }
+
+ public final class NavDisplay_androidKt {
+ method @androidx.compose.runtime.Composable public static <T> void NavDisplay(java.util.List<? extends T> backstack, optional androidx.compose.ui.Modifier modifier, optional java.util.List<? extends androidx.navigation3.NavLocalProvider> localProviders, optional androidx.compose.ui.Alignment contentAlignment, optional androidx.compose.animation.SizeTransform? sizeTransform, optional androidx.compose.animation.EnterTransition enterTransition, optional androidx.compose.animation.ExitTransition exitTransition, optional kotlin.jvm.functions.Function0<kotlin.Unit> onBack, kotlin.jvm.functions.Function1<? super T,? extends androidx.navigation3.NavEntry<? extends T>> entryProvider);
+ }
+
+ public final class NavEntry<T> {
+ ctor public NavEntry(T key, optional java.util.Map<java.lang.String,?> featureMap, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method public kotlin.jvm.functions.Function1<T,kotlin.Unit> getContent();
+ method public java.util.Map<java.lang.String,java.lang.Object> getFeatureMap();
+ method public T getKey();
+ property public final kotlin.jvm.functions.Function1<T,kotlin.Unit> content;
+ property public final java.util.Map<java.lang.String,java.lang.Object> featureMap;
+ property public final T key;
+ }
+
+ public interface NavLocalProvider {
+ method @androidx.compose.runtime.Composable public default void ProvideToBackStack(java.util.List<?> backStack);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
+ }
+
+ public final class NavWrapperManager {
+ ctor public NavWrapperManager();
+ ctor public NavWrapperManager(optional java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
+ method @androidx.compose.runtime.Composable public <T> void ContentForEntry(androidx.navigation3.NavEntry<T> entry);
+ method @androidx.compose.runtime.Composable public void PrepareBackStack(java.util.List<?> backStack);
+ }
+
+ public final class NavWrapperManagerKt {
+ method @androidx.compose.runtime.Composable public static androidx.navigation3.NavWrapperManager rememberNavWrapperManager(java.util.List<? extends androidx.navigation3.NavLocalProvider> navLocalProviders);
}
public final class SaveableStateNavLocalProvider implements androidx.navigation3.NavLocalProvider {
ctor public SaveableStateNavLocalProvider();
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
}
public final class SavedStateNavLocalProvider implements androidx.navigation3.NavLocalProvider {
- method @androidx.compose.runtime.Composable public <T> void ProvideToRecord(androidx.navigation3.NavRecord<T> record);
+ method @androidx.compose.runtime.Composable public <T> void ProvideToEntry(androidx.navigation3.NavEntry<T> entry);
field public static final androidx.navigation3.SavedStateNavLocalProvider INSTANCE;
}
diff --git a/navigation3/navigation3/samples/src/main/kotlin/androidx/navigation3/samples/NavDisplaySamples.kt b/navigation3/navigation3/samples/src/main/kotlin/androidx/navigation3/samples/NavDisplaySamples.kt
index 3ed2eae..d4728e8 100644
--- a/navigation3/navigation3/samples/src/main/kotlin/androidx/navigation3/samples/NavDisplaySamples.kt
+++ b/navigation3/navigation3/samples/src/main/kotlin/androidx/navigation3/samples/NavDisplaySamples.kt
@@ -25,10 +25,10 @@
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.lifecycle.viewmodel.navigation3.ViewModelStoreNavLocalProvider
import androidx.navigation3.NavDisplay
-import androidx.navigation3.NavRecord
+import androidx.navigation3.NavEntry
import androidx.navigation3.SavedStateNavLocalProvider
-import androidx.navigation3.record
-import androidx.navigation3.recordProvider
+import androidx.navigation3.entry
+import androidx.navigation3.entryProvider
class ProfileViewModel : ViewModel() {
val name = "no user"
@@ -42,23 +42,23 @@
backstack = backStack,
localProviders = listOf(SavedStateNavLocalProvider, ViewModelStoreNavLocalProvider),
onBack = { backStack.removeLast() },
- recordProvider =
- recordProvider({ NavRecord(Unit) { Text(text = "Invalid Key") } }) {
- record<Profile>(
+ entryProvider =
+ entryProvider({ NavEntry(Unit) { Text(text = "Invalid Key") } }) {
+ entry<Profile>(
NavDisplay.transition(slideInHorizontally { it }, slideOutHorizontally { it })
) {
val viewModel = viewModel<ProfileViewModel>()
Profile(viewModel, { backStack.add(it) }) { backStack.removeLast() }
}
- record<Scrollable>(
+ entry<Scrollable>(
NavDisplay.transition(slideInHorizontally { it }, slideOutHorizontally { it })
) {
Scrollable({ backStack.add(it) }) { backStack.removeLast() }
}
- record<Dialog>(featureMap = NavDisplay.isDialog(true)) {
+ entry<Dialog>(featureMap = NavDisplay.isDialog(true)) {
DialogContent { backStack.removeLast() }
}
- record<Dashboard>(
+ entry<Dashboard>(
NavDisplay.transition(slideInHorizontally { it }, slideOutHorizontally { it })
) { dashboardArgs ->
val userId = dashboardArgs.userId
diff --git a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/AnimatedTest.kt b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/AnimatedTest.kt
index d7da926..6fb5955 100644
--- a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/AnimatedTest.kt
+++ b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/AnimatedTest.kt
@@ -49,8 +49,8 @@
backstack = remember { mutableStateListOf(first) }
NavDisplay(backstack) {
when (it) {
- first -> NavRecord(first) { Text(first) }
- second -> NavRecord(second) { Text(second) }
+ first -> NavEntry(first) { Text(first) }
+ second -> NavEntry(second) { Text(second) }
else -> error("Invalid key passed")
}
}
@@ -93,13 +93,13 @@
NavDisplay(backstack) {
when (it) {
first ->
- NavRecord(
+ NavEntry(
first,
) {
Text(first)
}
second ->
- NavRecord(
+ NavEntry(
second,
featureMap =
NavDisplay.transition(
diff --git a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavDisplayTest.kt b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavDisplayTest.kt
index ef2c495..614eb88 100644
--- a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavDisplayTest.kt
+++ b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavDisplayTest.kt
@@ -46,7 +46,7 @@
@Test
fun testContentShown() {
composeTestRule.setContent {
- NavDisplay(backstack = mutableStateListOf(first)) { NavRecord(first) { Text(first) } }
+ NavDisplay(backstack = mutableStateListOf(first)) { NavEntry(first) { Text(first) } }
}
assertThat(composeTestRule.onNodeWithText(first).isDisplayed()).isTrue()
@@ -59,8 +59,8 @@
backstack = remember { mutableStateListOf(first) }
NavDisplay(backstack = backstack) {
when (it) {
- first -> NavRecord(first) { Text(first) }
- second -> NavRecord(second) { Text(second) }
+ first -> NavEntry(first) { Text(first) }
+ second -> NavEntry(second) { Text(second) }
else -> error("Invalid key passed")
}
}
@@ -81,8 +81,8 @@
backstack = remember { mutableStateListOf(first) }
NavDisplay(backstack = backstack) {
when (it) {
- first -> NavRecord(first) { Text(first) }
- second -> NavRecord(second, NavDisplay.isDialog(true)) { Text(second) }
+ first -> NavEntry(first) { Text(first) }
+ second -> NavEntry(second, NavDisplay.isDialog(true)) { Text(second) }
else -> error("Invalid key passed")
}
}
@@ -106,8 +106,8 @@
backstack = remember { mutableStateListOf(first) }
NavDisplay(backstack = backstack) {
when (it) {
- first -> NavRecord(first) { Text(first) }
- second -> NavRecord(second) { Text(second) }
+ first -> NavEntry(first) { Text(first) }
+ second -> NavEntry(second) { Text(second) }
else -> error("Invalid key passed")
}
}
@@ -133,8 +133,8 @@
backstack = remember { mutableStateListOf(first) }
NavDisplay(backstack = backstack) {
when (it) {
- first -> NavRecord(first) { numberOnScreen1 = rememberSaveable { increment++ } }
- second -> NavRecord(second) {}
+ first -> NavEntry(first) { numberOnScreen1 = rememberSaveable { increment++ } }
+ second -> NavEntry(second) {}
else -> error("Invalid key passed")
}
}
@@ -166,11 +166,11 @@
NavDisplay(backstack = backstack, localProviders = listOf(SavedStateNavLocalProvider)) {
when (it) {
first ->
- NavRecord(first) {
+ NavEntry(first) {
registry1 = LocalSavedStateRegistryOwner.current.savedStateRegistry
}
second ->
- NavRecord(second) {
+ NavEntry(second) {
registry2 = LocalSavedStateRegistryOwner.current.savedStateRegistry
}
else -> error("Invalid key passed")
@@ -209,12 +209,12 @@
2 -> backStack2
else -> backStack3
},
- recordProvider =
- recordProvider {
- record(first) { Text(first) }
- record(second) { Text(second) }
- record(third) { Text(third) }
- record(forth) { Text(forth) }
+ entryProvider =
+ entryProvider {
+ entry(first) { Text(first) }
+ entry(second) { Text(second) }
+ entry(third) { Text(third) }
+ entry(forth) { Text(forth) }
}
)
}
@@ -243,7 +243,7 @@
assertFailsWith<IllegalArgumentException> {
composeTestRule.setContent {
backstack = remember { mutableStateListOf() }
- NavDisplay(backstack = backstack) { NavRecord(first) {} }
+ NavDisplay(backstack = backstack) { NavEntry(first) {} }
}
}
assertThat(fail.message).isEqualTo("NavDisplay backstack cannot be empty")
@@ -256,8 +256,8 @@
backstack = remember { mutableStateListOf(first) }
NavDisplay(backstack = backstack) {
when (it) {
- first -> NavRecord(first) { Text(first) }
- second -> NavRecord(second) { Text(second) }
+ first -> NavEntry(first) { Text(first) }
+ second -> NavEntry(second) { Text(second) }
else -> error("Invalid key passed")
}
}
diff --git a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavWrapperManagerTest.kt b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavWrapperManagerTest.kt
index 4481373..646df38 100644
--- a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavWrapperManagerTest.kt
+++ b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavWrapperManagerTest.kt
@@ -42,7 +42,7 @@
}
@Composable
- override fun <T : Any> ProvideToRecord(record: NavRecord<T>) {
+ override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
calledWrapContent = true
}
}
@@ -51,7 +51,7 @@
composeTestRule.setContent {
manager.PrepareBackStack(listOf("something"))
- manager.ContentForRecord(NavRecord("myKey") {})
+ manager.ContentForEntry(NavEntry("myKey") {})
}
assertThat(calledWrapBackStack).isTrue()
@@ -70,7 +70,7 @@
}
@Composable
- override fun <T : Any> ProvideToRecord(record: NavRecord<T>) {
+ override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
calledWrapContentCount++
}
}
@@ -79,7 +79,7 @@
composeTestRule.setContent {
manager.PrepareBackStack(listOf("something"))
- manager.ContentForRecord(NavRecord("myKey") {})
+ manager.ContentForEntry(NavEntry("myKey") {})
}
assertThat(calledWrapBackStackCount).isEqualTo(1)
diff --git a/navigation3/navigation3/src/androidMain/kotlin/androidx/navigation3/NavDisplay.android.kt b/navigation3/navigation3/src/androidMain/kotlin/androidx/navigation3/NavDisplay.android.kt
index eb3c91f..fdc1e24 100644
--- a/navigation3/navigation3/src/androidMain/kotlin/androidx/navigation3/NavDisplay.android.kt
+++ b/navigation3/navigation3/src/androidMain/kotlin/androidx/navigation3/NavDisplay.android.kt
@@ -34,7 +34,7 @@
/** Object that indicates the features that can be handled by the [NavDisplay] */
public object NavDisplay {
/**
- * Function to be called on the [NavRecord.featureMap] to notify the [NavDisplay] that the
+ * Function to be called on the [NavEntry.featureMap] to notify the [NavDisplay] that the
* content should be animated using the provided transitions.
*/
public fun transition(enter: EnterTransition?, exit: ExitTransition?): Map<String, Any> =
@@ -42,7 +42,7 @@
else mapOf(ENTER_TRANSITION_KEY to enter, EXIT_TRANSITION_KEY to exit)
/**
- * Function to be called on the [NavRecord.featureMap] to notify the [NavDisplay] that the
+ * Function to be called on the [NavEntry.featureMap] to notify the [NavDisplay] that the
* content should be displayed inside of a [Dialog]
*/
public fun isDialog(boolean: Boolean): Map<String, Any> =
@@ -60,21 +60,21 @@
*
* The NavDisplay displays the content associated with the last key on the back stack in most
* circumstances. If that content wants to be displayed as a dialog, as communicated by adding
- * [NavDisplay.isDialog] to a [NavRecord.featureMap], then the last key's content is a dialog and
- * the second to last key is a displayed in the background.
+ * [NavDisplay.isDialog] to a [NavEntry.featureMap], then the last key's content is a dialog and the
+ * second to last key is a displayed in the background.
*
* @param backstack the collection of keys that represents the state that needs to be handled
- * @param localProviders list of [NavLocalProvider] to add information to the provided records
+ * @param localProviders list of [NavLocalProvider] to add information to the provided entriess
* @param modifier the modifier to be applied to the layout.
* @param contentAlignment The [Alignment] of the [AnimatedContent]
- * @param enterTransition Default [EnterTransition] for all [NavRecord]s. Can be overridden
- * individually for each [NavRecord] by passing in the record's transitions through
- * [NavRecord.featureMap].
- * @param exitTransition Default [ExitTransition] for all [NavRecord]s. Can be overridden
- * individually for each [NavRecord] by passing in the record's transitions through
- * [NavRecord.featureMap].
+ * @param enterTransition Default [EnterTransition] for all [NavEntry]s. Can be overridden
+ * individually for each [NavEntry] by passing in the entry's transitions through
+ * [NavEntry.featureMap].
+ * @param exitTransition Default [ExitTransition] for all [NavEntry]s. Can be overridden
+ * individually for each [NavEntry] by passing in the entry's transitions through
+ * [NavEntry.featureMap].
* @param onBack a callback for handling system back presses
- * @param recordProvider lambda used to construct each possible [NavRecord]
+ * @param entryProvider lambda used to construct each possible [NavEntry]
* @sample androidx.navigation3.samples.BaseNav
*/
@Composable
@@ -99,7 +99,7 @@
)
),
onBack: () -> Unit = { if (backstack is MutableList) backstack.removeAt(backstack.size - 1) },
- recordProvider: (key: T) -> NavRecord<out T>
+ entryProvider: (key: T) -> NavEntry<out T>
) {
require(backstack.isNotEmpty()) { "NavDisplay backstack cannot be empty" }
@@ -107,28 +107,28 @@
BackHandler(backstack.size > 1, onBack)
wrapperManager.PrepareBackStack(backStack = backstack)
val key = backstack.last()
- val record = recordProvider.invoke(key)
+ val entry = entryProvider.invoke(key)
- // Incoming record defines transitions, otherwise it uses default transitions from NavDisplay
+ // Incoming entry defines transitions, otherwise it uses default transitions from NavDisplay
val finalEnterTransition =
- record.featureMap[NavDisplay.ENTER_TRANSITION_KEY] as? EnterTransition ?: enterTransition
+ entry.featureMap[NavDisplay.ENTER_TRANSITION_KEY] as? EnterTransition ?: enterTransition
val finalExitTransition =
- record.featureMap[NavDisplay.EXIT_TRANSITION_KEY] as? ExitTransition ?: exitTransition
+ entry.featureMap[NavDisplay.EXIT_TRANSITION_KEY] as? ExitTransition ?: exitTransition
- val isDialog = record.featureMap[NavDisplay.DIALOG_KEY] == true
+ val isDialog = entry.featureMap[NavDisplay.DIALOG_KEY] == true
// if there is a dialog, we should create a transition with the next to last entry instead.
val transition =
if (isDialog) {
if (backstack.size > 1) {
val previousKey = backstack[backstack.size - 2]
- val previousRecord = recordProvider.invoke(previousKey)
- updateTransition(targetState = previousRecord, label = previousKey.toString())
+ val previousEntry = entryProvider.invoke(previousKey)
+ updateTransition(targetState = previousEntry, label = previousKey.toString())
} else {
null
}
} else {
- updateTransition(targetState = record, label = key.toString())
+ updateTransition(targetState = entry, label = key.toString())
}
transition?.AnimatedContent(
@@ -142,11 +142,11 @@
},
contentAlignment = contentAlignment,
contentKey = { it.key }
- ) { innerRecord ->
- wrapperManager.ContentForRecord(innerRecord)
+ ) { innerEntry ->
+ wrapperManager.ContentForEntry(innerEntry)
}
if (isDialog) {
- Dialog(onBack) { wrapperManager.ContentForRecord(record) }
+ Dialog(onBack) { wrapperManager.ContentForEntry(entry) }
}
}
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/EntryProvider.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/EntryProvider.kt
new file mode 100644
index 0000000..47471e4
--- /dev/null
+++ b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/EntryProvider.kt
@@ -0,0 +1,107 @@
+/*
+ * 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
+ *
+ * http://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.
+ */
+
+package androidx.navigation3
+
+import androidx.compose.runtime.Composable
+import kotlin.reflect.KClass
+
+@DslMarker public annotation class EntryDsl
+
+/** Creates an [EntryProviderBuilder] with the entry providers provided in the builder. */
+public inline fun entryProvider(
+ noinline fallback: (unknownScreen: Any) -> NavEntry<*> = {
+ throw IllegalStateException("Unknown screen $it")
+ },
+ builder: EntryProviderBuilder.() -> Unit
+): (Any) -> NavEntry<*> = EntryProviderBuilder(fallback).apply(builder).build()
+
+/** DSL for constructing a new [NavEntry] */
+@Suppress("TopLevelBuilder")
+@EntryDsl
+public class EntryProviderBuilder(private val fallback: (unknownScreen: Any) -> NavEntry<*>) {
+ private val clazzProviders = mutableMapOf<KClass<*>, EntryClassProvider<*>>()
+ private val providers = mutableMapOf<Any, EntryProvider<*>>()
+
+ /** Builds a [NavEntry] for the given [key] that displays [content]. */
+ @Suppress("SetterReturnsThis", "MissingGetterMatchingBuilder")
+ public fun <T : Any> addEntryProvider(
+ key: T,
+ featureMap: Map<String, Any> = emptyMap(),
+ content: @Composable (T) -> Unit,
+ ) {
+ require(key !in providers) {
+ "An `entry` with the key `key` has already been added: ${key}."
+ }
+ providers[key] = EntryProvider(key, featureMap, content)
+ }
+
+ /** Builds a [NavEntry] for the given [clazz] that displays [content]. */
+ @Suppress("SetterReturnsThis", "MissingGetterMatchingBuilder")
+ public fun <T : Any> addEntryProvider(
+ clazz: KClass<T>,
+ featureMap: Map<String, Any> = emptyMap(),
+ content: @Composable (T) -> Unit,
+ ) {
+ require(clazz !in clazzProviders) {
+ "An `entry` with the same `clazz` has already been added: ${clazz.simpleName}."
+ }
+ clazzProviders[clazz] = EntryClassProvider(clazz, featureMap, content)
+ }
+
+ /**
+ * Returns an instance of entryProvider created from the entry providers set on this builder.
+ */
+ @Suppress("UNCHECKED_CAST")
+ public fun build(): (Any) -> NavEntry<*> = { key ->
+ val entryClassProvider = clazzProviders[key::class] as? EntryClassProvider<Any>
+ val entryProvider = providers[key] as? EntryProvider<Any>
+ entryClassProvider?.run { NavEntry(key, featureMap, content) }
+ ?: entryProvider?.run { NavEntry(key, featureMap, content) }
+ ?: fallback.invoke(key)
+ }
+}
+
+/** Add an entry provider to the [EntryProviderBuilder] */
+public fun <T : Any> EntryProviderBuilder.entry(
+ key: T,
+ featureMap: Map<String, Any> = emptyMap(),
+ content: @Composable (T) -> Unit,
+) {
+ addEntryProvider(key, featureMap, content)
+}
+
+/** Add an entry provider to the [EntryProviderBuilder] */
+public inline fun <reified T : Any> EntryProviderBuilder.entry(
+ featureMap: Map<String, Any> = emptyMap(),
+ noinline content: @Composable (T) -> Unit,
+) {
+ addEntryProvider(T::class, featureMap, content)
+}
+
+/** Holds a Entry class, featureMap, and content for that class */
+public data class EntryClassProvider<T : Any>(
+ val clazz: KClass<T>,
+ val featureMap: Map<String, Any>,
+ val content: @Composable (T) -> Unit,
+)
+
+/** Holds a Entry class, featureMap, and content for that key */
+public data class EntryProvider<T : Any>(
+ val key: T,
+ val featureMap: Map<String, Any>,
+ val content: @Composable (T) -> Unit,
+)
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavRecord.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavEntry.kt
similarity index 72%
rename from navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavRecord.kt
rename to navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavEntry.kt
index 71cd4e0..e5d19d9 100644
--- a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavRecord.kt
+++ b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavEntry.kt
@@ -19,14 +19,14 @@
import androidx.compose.runtime.Composable
/**
- * Record maintains the store the key and the content represented by that key. Records should be
- * created as part of a [NavDisplay.recordProvider](reference/androidx/navigation/NavDisplay).
+ * Entry maintains and stores the key and the content represented by that key. Entries should be
+ * created as part of a [NavDisplay.entryProvider](reference/androidx/navigation/NavDisplay).
*
- * @param key key for this record
+ * @param key key for this entry
* @param featureMap map of the available features from a display
- * @param content content for this record to be displayed when this record is active
+ * @param content content for this entry to be displayed when this entry is active
*/
-public class NavRecord<T : Any>(
+public class NavEntry<T : Any>(
public val key: T,
public val featureMap: Map<String, Any> = emptyMap(),
public val content: @Composable (T) -> Unit,
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavLocalProvider.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavLocalProvider.kt
index f8456cd..b3fbeb2 100644
--- a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavLocalProvider.kt
+++ b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavLocalProvider.kt
@@ -23,7 +23,7 @@
* integrated with a [NavDisplay](reference/androidx/navigation/NavDisplay).
*
* Information can be provided to the entire back stack via [NavLocalProvider.ProvideToBackStack] or
- * to a single record via [NavLocalProvider.ProvideToRecord].
+ * to a single entry via [NavLocalProvider.ProvideToEntry].
*/
public interface NavLocalProvider {
@@ -35,10 +35,10 @@
@Composable public fun ProvideToBackStack(backStack: List<Any>): Unit = Unit
/**
- * Allows a [NavLocalProvider] to provide information to a single record.
+ * Allows a [NavLocalProvider] to provide information to a single entry.
*
* This function is called by the [NavDisplay](reference/androidx/navigation/NavDisplay) and
* should not be called directly.
*/
- @Composable public fun <T : Any> ProvideToRecord(record: NavRecord<T>)
+ @Composable public fun <T : Any> ProvideToEntry(entry: NavEntry<T>)
}
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavWrapperManager.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavWrapperManager.kt
index 38eb9f8..a994b16 100644
--- a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavWrapperManager.kt
+++ b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/NavWrapperManager.kt
@@ -55,22 +55,18 @@
}
/**
- * Calls the [NavLocalProvider.ProvideToRecord] functions on each wrapper.
+ * Calls the [NavLocalProvider.ProvideToEntry] functions on each wrapper.
*
* This function is called by the [NavDisplay](reference/androidx/navigation/NavDisplay) and
* should not be called directly.
*/
@Composable
- public fun <T : Any> ContentForRecord(record: NavRecord<T>) {
- val key = record.key
+ public fun <T : Any> ContentForEntry(entry: NavEntry<T>) {
+ val key = entry.key
finalWrappers
.distinct()
- .foldRight(record.content) { wrapper, contentLambda ->
- {
- wrapper.ProvideToRecord(
- NavRecord(key, record.featureMap, content = contentLambda)
- )
- }
+ .foldRight(entry.content) { wrapper, contentLambda ->
+ { wrapper.ProvideToEntry(NavEntry(key, entry.featureMap, content = contentLambda)) }
}
.invoke(key)
}
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/RecordProvider.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/RecordProvider.kt
deleted file mode 100644
index 7f6dd14..0000000
--- a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/RecordProvider.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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
- *
- * http://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.
- */
-
-package androidx.navigation3
-
-import androidx.compose.runtime.Composable
-import kotlin.reflect.KClass
-
-@DslMarker public annotation class RecordDsl
-
-/** Creates an [RecordProviderBuilder] with the record providers provided in the builder. */
-public inline fun recordProvider(
- noinline fallback: (unknownScreen: Any) -> NavRecord<*> = {
- throw IllegalStateException("Unknown screen $it")
- },
- builder: RecordProviderBuilder.() -> Unit
-): (Any) -> NavRecord<*> = RecordProviderBuilder(fallback).apply(builder).build()
-
-/** DSL for constructing a new [NavRecord] */
-@Suppress("TopLevelBuilder")
-@RecordDsl
-public class RecordProviderBuilder(private val fallback: (unknownScreen: Any) -> NavRecord<*>) {
- private val clazzProviders = mutableMapOf<KClass<*>, RecordClassProvider<*>>()
- private val providers = mutableMapOf<Any, RecordProvider<*>>()
-
- /** Builds a [NavRecord] for the given [key] that displays [content]. */
- @Suppress("SetterReturnsThis", "MissingGetterMatchingBuilder")
- public fun <T : Any> addRecordProvider(
- key: T,
- featureMap: Map<String, Any> = emptyMap(),
- content: @Composable (T) -> Unit,
- ) {
- require(key !in providers) {
- "A `record` with the key `key` has already been added: ${key}."
- }
- providers[key] = RecordProvider(key, featureMap, content)
- }
-
- /** Builds a [NavRecord] for the given [clazz] that displays [content]. */
- @Suppress("SetterReturnsThis", "MissingGetterMatchingBuilder")
- public fun <T : Any> addRecordProvider(
- clazz: KClass<T>,
- featureMap: Map<String, Any> = emptyMap(),
- content: @Composable (T) -> Unit,
- ) {
- require(clazz !in clazzProviders) {
- "A `record` with the same `clazz` has already been added: ${clazz.simpleName}."
- }
- clazzProviders[clazz] = RecordClassProvider(clazz, featureMap, content)
- }
-
- /**
- * Returns an instance of recordProvider created from the record providers set on this builder.
- */
- @Suppress("UNCHECKED_CAST")
- public fun build(): (Any) -> NavRecord<*> = { key ->
- val recordClassProvider = clazzProviders[key::class] as? RecordClassProvider<Any>
- val recordProvider = providers[key] as? RecordProvider<Any>
- recordClassProvider?.run { NavRecord(key, featureMap, content) }
- ?: recordProvider?.run { NavRecord(key, featureMap, content) }
- ?: fallback.invoke(key)
- }
-}
-
-/** Add an record provider to the [RecordProviderBuilder] */
-public fun <T : Any> RecordProviderBuilder.record(
- key: T,
- featureMap: Map<String, Any> = emptyMap(),
- content: @Composable (T) -> Unit,
-) {
- addRecordProvider(key, featureMap, content)
-}
-
-/** Add an record provider to the [RecordProviderBuilder] */
-public inline fun <reified T : Any> RecordProviderBuilder.record(
- featureMap: Map<String, Any> = emptyMap(),
- noinline content: @Composable (T) -> Unit,
-) {
- addRecordProvider(T::class, featureMap, content)
-}
-
-/** Holds a Record class, featureMap, and content for that class */
-public data class RecordClassProvider<T : Any>(
- val clazz: KClass<T>,
- val featureMap: Map<String, Any>,
- val content: @Composable (T) -> Unit,
-)
-
-/** Holds a Record class, featureMap, and content for that key */
-public data class RecordProvider<T : Any>(
- val key: T,
- val featureMap: Map<String, Any>,
- val content: @Composable (T) -> Unit,
-)
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SaveableStateNavLocalProvider.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SaveableStateNavLocalProvider.kt
index ce143cd..69451da 100644
--- a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SaveableStateNavLocalProvider.kt
+++ b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SaveableStateNavLocalProvider.kt
@@ -24,7 +24,7 @@
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
/**
- * Wraps the content of a [NavRecord] with a [SaveableStateHolder.SaveableStateProvider] to ensure
+ * Wraps the content of a [NavEntry] with a [SaveableStateHolder.SaveableStateProvider] to ensure
* that calls to [rememberSaveable] within the content work properly and that state can be saved.
*
* This [NavLocalProvider] is the only one that is **required** as saving state is considered a
@@ -67,8 +67,8 @@
}
@Composable
- public override fun <T : Any> ProvideToRecord(record: NavRecord<T>) {
- val key = record.key
+ public override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
+ val key = entry.key
DisposableEffect(key1 = key) {
refCount[key] = refCount.getOrDefault(key, 0).plus(1)
onDispose {
@@ -94,6 +94,6 @@
}
val id: Int = rememberSaveable(key) { key.hashCode() + backstackSize }
- savedStateHolder?.SaveableStateProvider(id) { record.content.invoke(key) }
+ savedStateHolder?.SaveableStateProvider(id) { entry.content.invoke(key) }
}
}
diff --git a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SavedStateNavLocalProvider.kt b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SavedStateNavLocalProvider.kt
index 4676d82..56febae 100644
--- a/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SavedStateNavLocalProvider.kt
+++ b/navigation3/navigation3/src/commonMain/kotlin/androidx/navigation3/SavedStateNavLocalProvider.kt
@@ -33,29 +33,29 @@
import androidx.savedstate.savedState
/**
- * Provides the content of a [NavRecord] with a [SavedStateRegistryOwner] and provides that
+ * Provides the content of a [NavEntry] with a [SavedStateRegistryOwner] and provides that
* [SavedStateRegistryOwner] as a [LocalSavedStateRegistryOwner] so that it is available within the
* content.
*/
public object SavedStateNavLocalProvider : NavLocalProvider {
@Composable
- override fun <T : Any> ProvideToRecord(record: NavRecord<T>) {
- val key = record.key
+ override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
+ val key = entry.key
val childRegistry by
rememberSaveable(
key,
stateSaver =
Saver(
save = { it.savedState },
- restore = { RecordSavedStateRegistry().apply { savedState = it } }
+ restore = { EntrySavedStateRegistry().apply { savedState = it } }
)
) {
- mutableStateOf(RecordSavedStateRegistry())
+ mutableStateOf(EntrySavedStateRegistry())
}
CompositionLocalProvider(LocalSavedStateRegistryOwner provides childRegistry) {
- record.content.invoke(key)
+ entry.content.invoke(key)
}
DisposableEffect(key1 = key) {
@@ -70,7 +70,7 @@
}
}
-private class RecordSavedStateRegistry : SavedStateRegistryOwner {
+private class EntrySavedStateRegistry : SavedStateRegistryOwner {
override val lifecycle: LifecycleRegistry = LifecycleRegistry(this)
val savedStateRegistryController = SavedStateRegistryController.create(this)
override val savedStateRegistry: SavedStateRegistry =
diff --git a/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordProviderTest.kt b/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/EntryProviderTest.kt
similarity index 64%
rename from navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordProviderTest.kt
rename to navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/EntryProviderTest.kt
index 67bb3e1..64e716e 100644
--- a/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordProviderTest.kt
+++ b/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/EntryProviderTest.kt
@@ -20,40 +20,40 @@
import kotlin.test.Test
import kotlin.test.fail
-class RecordProviderTest {
+class EntryProviderTest {
@Test
- fun recordProvider_withUniqueInitializers_returnsRecords() {
- val provider = recordProvider {
- record("first") {}
- record("second") {}
+ fun entryProvider_withUniqueInitializers_returnsEntries() {
+ val provider = entryProvider {
+ entry("first") {}
+ entry("second") {}
}
- val record1 = provider.invoke("first")
- val record2 = provider.invoke("second")
+ val entry1 = provider.invoke("first")
+ val entry2 = provider.invoke("second")
- assertThat(record1.key).isEqualTo("first")
- assertThat(record2.key).isEqualTo("second")
+ assertThat(entry1.key).isEqualTo("first")
+ assertThat(entry2.key).isEqualTo("second")
}
@Test
- fun recordProvider_withDuplicatedInitializers_throwsException() {
+ fun entryProvider_withDuplicatedInitializers_throwsException() {
try {
- recordProvider {
- record("first") {}
- record("first") {}
+ entryProvider {
+ entry("first") {}
+ entry("first") {}
}
fail("Expected `IllegalArgumentException` but no exception has been throw.")
} catch (e: IllegalArgumentException) {
assertThat(e)
.hasMessageThat()
- .isEqualTo("A `record` with the key `key` has already been added: first.")
+ .isEqualTo("An `entry` with the key `key` has already been added: first.")
}
}
@Test
- fun recordProvider_noInitializers_getsInvalidRecord() {
- val provider = recordProvider {}
+ fun entryProvider_noInitializers_getsInvalidEntry() {
+ val provider = entryProvider {}
try {
provider.invoke("something")
fail("Expected `IllegalStateException` but no exception has been throw.")
diff --git a/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordTest.kt b/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordTest.kt
index b049d3f..863305e 100644
--- a/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordTest.kt
+++ b/navigation3/navigation3/src/commonTest/kotlin/androidx/navigation3/RecordTest.kt
@@ -19,24 +19,24 @@
import androidx.kruth.assertThat
import kotlin.test.Test
-class RecordTest {
+class EntryTest {
@Test
fun getKey() {
- val record = NavRecord(key = "myKey", content = {})
- assertThat(record.key).isEqualTo("myKey")
+ val entry = NavEntry(key = "myKey", content = {})
+ assertThat(entry.key).isEqualTo("myKey")
}
@Test
fun getFeatureMap() {
- val record =
- NavRecord(
+ val entry =
+ NavEntry(
key = "myKey",
featureMap = mapOf("feature1" to 1, "feature2" to MyObject),
content = {}
)
- assertThat(record.featureMap["feature1"]).isEqualTo(1)
- assertThat(record.featureMap["feature2"]).isEqualTo(MyObject)
+ assertThat(entry.featureMap["feature1"]).isEqualTo(1)
+ assertThat(entry.featureMap["feature2"]).isEqualTo(MyObject)
}
object MyObject