diff --git a/navigation/navigation-runtime-ktx/api/api_lint.ignore b/navigation/navigation-runtime-ktx/api/api_lint.ignore deleted file mode 100644 index 5cc9b6eeefdcb..0000000000000 --- a/navigation/navigation-runtime-ktx/api/api_lint.ignore +++ /dev/null @@ -1,3 +0,0 @@ -// Baseline format: 1.0 -MissingNullability: androidx.navigation.ActivityNavArgsLazyKt#navArgs(android.app.Activity): - Missing nullability on method `navArgs` return diff --git a/navigation/navigation-runtime-ktx/api/current.ignore b/navigation/navigation-runtime-ktx/api/current.ignore index d75f7704ff9b6..477da737ad096 100644 --- a/navigation/navigation-runtime-ktx/api/current.ignore +++ b/navigation/navigation-runtime-ktx/api/current.ignore @@ -1,5 +1,3 @@ // Baseline format: 1.0 -RemovedClass: androidx.navigation.NavControllerKt: - Removed class androidx.navigation.NavControllerKt -RemovedClass: androidx.navigation.NavHostKt: - Removed class androidx.navigation.NavHostKt +RemovedPackage: androidx.navigation: + Removed package androidx.navigation diff --git a/navigation/navigation-runtime-ktx/api/current.txt b/navigation/navigation-runtime-ktx/api/current.txt index 47b520c8efc1e..e6f50d0d0fd11 100644 --- a/navigation/navigation-runtime-ktx/api/current.txt +++ b/navigation/navigation-runtime-ktx/api/current.txt @@ -1,45 +1 @@ // Signature format: 4.0 -package androidx.navigation { - - public final class ActivityKt { - method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId); - } - - public final class ActivityNavArgsLazyKt { - method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(android.app.Activity); - } - - @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id); - method public androidx.navigation.ActivityNavigator.Destination build(); - method public String? getAction(); - method public kotlin.reflect.KClass? getActivityClass(); - method public android.net.Uri? getData(); - method public String? getDataPattern(); - method public String? getTargetPackage(); - method public void setAction(String? p); - method public void setActivityClass(kotlin.reflect.KClass? p); - method public void setData(android.net.Uri? p); - method public void setDataPattern(String? p); - method public void setTargetPackage(String? p); - property public final String? action; - property public final kotlin.reflect.KClass? activityClass; - property public final android.net.Uri? data; - property public final String? dataPattern; - property public final String? targetPackage; - } - - public final class ActivityNavigatorDestinationBuilderKt { - method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class ActivityNavigatorExtrasKt { - method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags); - } - - public final class ViewKt { - method public static androidx.navigation.NavController findNavController(android.view.View); - } - -} - diff --git a/navigation/navigation-runtime-ktx/api/public_plus_experimental_current.txt b/navigation/navigation-runtime-ktx/api/public_plus_experimental_current.txt index 47b520c8efc1e..e6f50d0d0fd11 100644 --- a/navigation/navigation-runtime-ktx/api/public_plus_experimental_current.txt +++ b/navigation/navigation-runtime-ktx/api/public_plus_experimental_current.txt @@ -1,45 +1 @@ // Signature format: 4.0 -package androidx.navigation { - - public final class ActivityKt { - method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId); - } - - public final class ActivityNavArgsLazyKt { - method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(android.app.Activity); - } - - @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id); - method public androidx.navigation.ActivityNavigator.Destination build(); - method public String? getAction(); - method public kotlin.reflect.KClass? getActivityClass(); - method public android.net.Uri? getData(); - method public String? getDataPattern(); - method public String? getTargetPackage(); - method public void setAction(String? p); - method public void setActivityClass(kotlin.reflect.KClass? p); - method public void setData(android.net.Uri? p); - method public void setDataPattern(String? p); - method public void setTargetPackage(String? p); - property public final String? action; - property public final kotlin.reflect.KClass? activityClass; - property public final android.net.Uri? data; - property public final String? dataPattern; - property public final String? targetPackage; - } - - public final class ActivityNavigatorDestinationBuilderKt { - method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class ActivityNavigatorExtrasKt { - method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags); - } - - public final class ViewKt { - method public static androidx.navigation.NavController findNavController(android.view.View); - } - -} - diff --git a/navigation/navigation-runtime-ktx/api/restricted_current.ignore b/navigation/navigation-runtime-ktx/api/restricted_current.ignore index d75f7704ff9b6..477da737ad096 100644 --- a/navigation/navigation-runtime-ktx/api/restricted_current.ignore +++ b/navigation/navigation-runtime-ktx/api/restricted_current.ignore @@ -1,5 +1,3 @@ // Baseline format: 1.0 -RemovedClass: androidx.navigation.NavControllerKt: - Removed class androidx.navigation.NavControllerKt -RemovedClass: androidx.navigation.NavHostKt: - Removed class androidx.navigation.NavHostKt +RemovedPackage: androidx.navigation: + Removed package androidx.navigation diff --git a/navigation/navigation-runtime-ktx/api/restricted_current.txt b/navigation/navigation-runtime-ktx/api/restricted_current.txt index 47b520c8efc1e..e6f50d0d0fd11 100644 --- a/navigation/navigation-runtime-ktx/api/restricted_current.txt +++ b/navigation/navigation-runtime-ktx/api/restricted_current.txt @@ -1,45 +1 @@ // Signature format: 4.0 -package androidx.navigation { - - public final class ActivityKt { - method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId); - } - - public final class ActivityNavArgsLazyKt { - method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(android.app.Activity); - } - - @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id); - method public androidx.navigation.ActivityNavigator.Destination build(); - method public String? getAction(); - method public kotlin.reflect.KClass? getActivityClass(); - method public android.net.Uri? getData(); - method public String? getDataPattern(); - method public String? getTargetPackage(); - method public void setAction(String? p); - method public void setActivityClass(kotlin.reflect.KClass? p); - method public void setData(android.net.Uri? p); - method public void setDataPattern(String? p); - method public void setTargetPackage(String? p); - property public final String? action; - property public final kotlin.reflect.KClass? activityClass; - property public final android.net.Uri? data; - property public final String? dataPattern; - property public final String? targetPackage; - } - - public final class ActivityNavigatorDestinationBuilderKt { - method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class ActivityNavigatorExtrasKt { - method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags); - } - - public final class ViewKt { - method public static androidx.navigation.NavController findNavController(android.view.View); - } - -} - diff --git a/navigation/navigation-runtime-ktx/build.gradle b/navigation/navigation-runtime-ktx/build.gradle index 10ce2b854d82a..ddb869e3cee88 100644 --- a/navigation/navigation-runtime-ktx/build.gradle +++ b/navigation/navigation-runtime-ktx/build.gradle @@ -28,24 +28,6 @@ plugins { dependencies { api(project(":navigation:navigation-runtime")) - // Ensure that the -ktx dependency graph mirrors the Java dependency graph - api(project(":navigation:navigation-common-ktx")) - api("androidx.activity:activity-ktx:1.1.0") { - because "Mirror navigation-runtime dependency graph for -ktx artifacts" - } - api("androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0") { - because "Mirror navigation-runtime dependency graph for -ktx artifacts" - } - api(KOTLIN_STDLIB) - androidTestImplementation(project(":internal-testutils-navigation"), { - exclude group: "androidx.navigation", module: "navigation-common-ktx" - }) - androidTestImplementation(TRUTH) - androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT) - androidTestImplementation(ANDROIDX_TEST_CORE) - androidTestImplementation(ANDROIDX_TEST_RUNNER) - androidTestImplementation(ANDROIDX_TEST_RULES) - androidTestImplementation(ESPRESSO_CORE) } androidx { diff --git a/navigation/navigation-runtime-ktx/src/androidTest/AndroidManifest.xml b/navigation/navigation-runtime-ktx/src/androidTest/AndroidManifest.xml index 7d9d7ba7ec687..b9a4f141f937a 100644 --- a/navigation/navigation-runtime-ktx/src/androidTest/AndroidManifest.xml +++ b/navigation/navigation-runtime-ktx/src/androidTest/AndroidManifest.xml @@ -15,9 +15,4 @@ ~ limitations under the License. --> - - - - - + diff --git a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/NavControllerTest.kt b/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/NavControllerTest.kt deleted file mode 100644 index 95529d217d18e..0000000000000 --- a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/NavControllerTest.kt +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2018 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.navigation - -import android.content.Context -import androidx.test.core.app.ApplicationProvider -import androidx.test.filters.SmallTest -import androidx.testutils.TestNavigator -import androidx.testutils.test -import com.google.common.truth.Truth.assertWithMessage -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.flow.take -import kotlinx.coroutines.flow.withIndex -import kotlinx.coroutines.runBlocking -import org.junit.Assert.assertTrue -import org.junit.Test - -@SmallTest -class NavControllerTest { - private val navController = - NavController(ApplicationProvider.getApplicationContext() as Context).apply { - navigatorProvider += TestNavigator() - } - - @Test - fun createGraph() { - val graph = navController.createGraph(startDestination = DESTINATION_ID) { - test(DESTINATION_ID) - } - assertTrue( - "Destination should be added to the graph", - DESTINATION_ID in graph - ) - } - - @Test - @Suppress("EXPERIMENTAL_API_USAGE") - fun currentBackStackEntryFlow() = runBlocking { - navController.graph = navController.createGraph(startDestination = 1) { - test(1) - test(2) - test(3) - } - - navController.currentBackStackEntryFlow - .take(navController.graph.count()) - .withIndex() - .onEach { (index, backStackEntry) -> - val expectedDestination = index + 1 - assertWithMessage("Flow emitted unexpected back stack entry (wrong destination)") - .that(backStackEntry.destination.id) - .isEqualTo(expectedDestination) - - if (expectedDestination < navController.graph.count()) { - navController.navigate(expectedDestination + 1) - } - } - .collect() - } -} - -private const val DESTINATION_ID = 1 diff --git a/navigation/navigation-runtime/api/api_lint.ignore b/navigation/navigation-runtime/api/api_lint.ignore index 71e80b5e9fcad..7fdb8509a971b 100644 --- a/navigation/navigation-runtime/api/api_lint.ignore +++ b/navigation/navigation-runtime/api/api_lint.ignore @@ -13,6 +13,14 @@ MissingBuildMethod: androidx.navigation.NavDeepLinkBuilder: androidx.navigation.NavDeepLinkBuilder does not declare a `build()` method, but builder classes are expected to +MissingJvmstatic: androidx.navigation.ActivityNavigatorExtrasKt#ActivityNavigatorExtras(androidx.core.app.ActivityOptionsCompat, int): + A Kotlin method with default parameter values should be annotated with @JvmOverloads for better Java interoperability; see https://android.github.io/kotlin-guides/interop.html#function-overloads-for-defaults + + +MissingNullability: androidx.navigation.ActivityNavArgsLazyKt#navArgs(android.app.Activity): + Missing nullability on method `navArgs` return + + NullableCollection: androidx.navigation.NavBackStackEntry#getArguments(): Return type of method androidx.navigation.NavBackStackEntry.getArguments() is a nullable collection (`android.os.Bundle`); must be non-null NullableCollection: androidx.navigation.NavController#saveState(): diff --git a/navigation/navigation-runtime/api/current.txt b/navigation/navigation-runtime/api/current.txt index c323100c67b28..843755354fe29 100644 --- a/navigation/navigation-runtime/api/current.txt +++ b/navigation/navigation-runtime/api/current.txt @@ -1,6 +1,14 @@ // Signature format: 4.0 package androidx.navigation { + public final class ActivityKt { + method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId); + } + + public final class ActivityNavArgsLazyKt { + method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(android.app.Activity); + } + @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator { ctor public ActivityNavigator(android.content.Context context); method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity); @@ -51,6 +59,34 @@ package androidx.navigation { method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions); } + @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id); + method public androidx.navigation.ActivityNavigator.Destination build(); + method public String? getAction(); + method public kotlin.reflect.KClass? getActivityClass(); + method public android.net.Uri? getData(); + method public String? getDataPattern(); + method public String? getTargetPackage(); + method public void setAction(String? p); + method public void setActivityClass(kotlin.reflect.KClass? p); + method public void setData(android.net.Uri? p); + method public void setDataPattern(String? p); + method public void setTargetPackage(String? p); + property public final String? action; + property public final kotlin.reflect.KClass? activityClass; + property public final android.net.Uri? data; + property public final String? dataPattern; + property public final String? targetPackage; + } + + public final class ActivityNavigatorDestinationBuilderKt { + method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class ActivityNavigatorExtrasKt { + method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags); + } + public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner { method public android.os.Bundle? getArguments(); method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory(); @@ -173,5 +209,9 @@ package androidx.navigation { field public static final androidx.navigation.Navigation INSTANCE; } + public final class ViewKt { + method public static androidx.navigation.NavController findNavController(android.view.View); + } + } diff --git a/navigation/navigation-runtime/api/public_plus_experimental_current.txt b/navigation/navigation-runtime/api/public_plus_experimental_current.txt index 62f6e430386c0..32f5e38b34066 100644 --- a/navigation/navigation-runtime/api/public_plus_experimental_current.txt +++ b/navigation/navigation-runtime/api/public_plus_experimental_current.txt @@ -1,6 +1,14 @@ // Signature format: 4.0 package androidx.navigation { + public final class ActivityKt { + method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId); + } + + public final class ActivityNavArgsLazyKt { + method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(android.app.Activity); + } + @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator { ctor public ActivityNavigator(android.content.Context context); method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity); @@ -53,6 +61,34 @@ package androidx.navigation { method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions); } + @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id); + method public androidx.navigation.ActivityNavigator.Destination build(); + method public String? getAction(); + method public kotlin.reflect.KClass? getActivityClass(); + method public android.net.Uri? getData(); + method public String? getDataPattern(); + method public String? getTargetPackage(); + method public void setAction(String? p); + method public void setActivityClass(kotlin.reflect.KClass? p); + method public void setData(android.net.Uri? p); + method public void setDataPattern(String? p); + method public void setTargetPackage(String? p); + property public final String? action; + property public final kotlin.reflect.KClass? activityClass; + property public final android.net.Uri? data; + property public final String? dataPattern; + property public final String? targetPackage; + } + + public final class ActivityNavigatorDestinationBuilderKt { + method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class ActivityNavigatorExtrasKt { + method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags); + } + public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner { method public android.os.Bundle? getArguments(); method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory(); @@ -197,5 +233,9 @@ package androidx.navigation { field public static final androidx.navigation.Navigation INSTANCE; } + public final class ViewKt { + method public static androidx.navigation.NavController findNavController(android.view.View); + } + } diff --git a/navigation/navigation-runtime/api/restricted_current.txt b/navigation/navigation-runtime/api/restricted_current.txt index c323100c67b28..843755354fe29 100644 --- a/navigation/navigation-runtime/api/restricted_current.txt +++ b/navigation/navigation-runtime/api/restricted_current.txt @@ -1,6 +1,14 @@ // Signature format: 4.0 package androidx.navigation { + public final class ActivityKt { + method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId); + } + + public final class ActivityNavArgsLazyKt { + method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(android.app.Activity); + } + @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator { ctor public ActivityNavigator(android.content.Context context); method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity); @@ -51,6 +59,34 @@ package androidx.navigation { method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions); } + @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id); + method public androidx.navigation.ActivityNavigator.Destination build(); + method public String? getAction(); + method public kotlin.reflect.KClass? getActivityClass(); + method public android.net.Uri? getData(); + method public String? getDataPattern(); + method public String? getTargetPackage(); + method public void setAction(String? p); + method public void setActivityClass(kotlin.reflect.KClass? p); + method public void setData(android.net.Uri? p); + method public void setDataPattern(String? p); + method public void setTargetPackage(String? p); + property public final String? action; + property public final kotlin.reflect.KClass? activityClass; + property public final android.net.Uri? data; + property public final String? dataPattern; + property public final String? targetPackage; + } + + public final class ActivityNavigatorDestinationBuilderKt { + method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class ActivityNavigatorExtrasKt { + method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags); + } + public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner { method public android.os.Bundle? getArguments(); method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory(); @@ -173,5 +209,9 @@ package androidx.navigation { field public static final androidx.navigation.Navigation INSTANCE; } + public final class ViewKt { + method public static androidx.navigation.NavController findNavController(android.view.View); + } + } diff --git a/navigation/navigation-runtime/src/androidTest/AndroidManifest.xml b/navigation/navigation-runtime/src/androidTest/AndroidManifest.xml index 64e438fd4e525..44a4d968c98ab 100644 --- a/navigation/navigation-runtime/src/androidTest/AndroidManifest.xml +++ b/navigation/navigation-runtime/src/androidTest/AndroidManifest.xml @@ -23,5 +23,6 @@ + diff --git a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityNavigatorDestinationBuilderTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityNavigatorDestinationBuilderTest.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityNavigatorDestinationBuilderTest.kt rename to navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityNavigatorDestinationBuilderTest.kt diff --git a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityNavigatorExtrasTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityNavigatorExtrasTest.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityNavigatorExtrasTest.kt rename to navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityNavigatorExtrasTest.kt diff --git a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityTest.kt similarity index 94% rename from navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityTest.kt rename to navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityTest.kt index 38986cad416dd..08ab5364425c8 100644 --- a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ActivityTest.kt +++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ActivityTest.kt @@ -30,8 +30,8 @@ import org.junit.Test @LargeTest class ActivityTest { @Suppress("DEPRECATION") - @get:Rule val activityRule = androidx.test.rule.ActivityTestRule( - TestActivity::class.java + @get:Rule val activityRule = androidx.test.rule.ActivityTestRule( + TestArgsActivity::class.java ) private val view get() = activityRule.activity.findViewById(VIEW_ID) @@ -74,7 +74,7 @@ class ActivityTest { // Normally, this would be set by using an destination to // start the Activity, but we'll fake it here in the test activityRule.activity.intent = Intent( - activityRule.activity, TestActivity::class.java + activityRule.activity, TestArgsActivity::class.java ).apply { putExtra("test", "test") } @@ -88,7 +88,7 @@ class ActivityTest { // Normally, this would be set by using an destination to // start the Activity, but we'll fake it here in the test activityRule.activity.intent = Intent( - activityRule.activity, TestActivity::class.java + activityRule.activity, TestArgsActivity::class.java ) try { activityRule.activity.args @@ -116,7 +116,7 @@ data class FakeTestArgs(val bundle: Bundle) : NavArgs { fun fromBundle(bundle: Bundle) = FakeTestArgs(bundle) } } -class TestActivity : Activity() { +class TestArgsActivity : Activity() { val args: FakeTestArgs by navArgs() override fun onCreate(savedInstanceState: Bundle?) { diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt index 7b22bdf0e3569..7bb473300630c 100644 --- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt +++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt @@ -51,6 +51,11 @@ import androidx.testutils.TestNavigator import androidx.testutils.test import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.take +import kotlinx.coroutines.flow.withIndex +import kotlinx.coroutines.runBlocking import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.not import org.hamcrest.Matchers @@ -71,8 +76,14 @@ class NavControllerTest { private const val TEST_OVERRIDDEN_VALUE_ARG = "test_overriden_value" private const val TEST_ACTION_OVERRIDDEN_VALUE_ARG = "test_action_overriden_value" private const val TEST_OVERRIDDEN_VALUE_ARG_VALUE = "override" + private const val DESTINATION_ID = 1 } + private val navController = + NavController(ApplicationProvider.getApplicationContext()).apply { + navigatorProvider += TestNavigator() + } + @UiThreadTest @Test fun testGetCurrentBackStackEntry() { @@ -570,7 +581,7 @@ class NavControllerTest { val intent = Intent( Intent.ACTION_VIEW, Uri.parse("android-app://androidx.navigation.test/test/argument1/argument2"), - ApplicationProvider.getApplicationContext() as Context, + ApplicationProvider.getApplicationContext(), TestActivity::class.java ) @@ -1619,6 +1630,41 @@ class NavControllerTest { assertThat(backPressedIntercepted).isTrue() } + @Test + fun createGraph() { + val graph = navController.createGraph(startDestination = DESTINATION_ID) { + test(DESTINATION_ID) + } + assertWithMessage("Destination should be added to the graph") + .that(DESTINATION_ID in graph).isTrue() + } + + @UiThreadTest + @Test + @Suppress("EXPERIMENTAL_API_USAGE") + fun currentBackStackEntryFlow() = runBlocking { + navController.graph = navController.createGraph(startDestination = 1) { + test(1) + test(2) + test(3) + } + + navController.currentBackStackEntryFlow + .take(navController.graph.count()) + .withIndex() + .onEach { (index, backStackEntry) -> + val expectedDestination = index + 1 + assertWithMessage("Flow emitted unexpected back stack entry (wrong destination)") + .that(backStackEntry.destination.id) + .isEqualTo(expectedDestination) + + if (expectedDestination < navController.graph.count()) { + navController.navigate(expectedDestination + 1) + } + } + .collect() + } + private fun createNavController(): NavController { val navController = NavController(ApplicationProvider.getApplicationContext()) val navigator = TestNavigator() diff --git a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/NavHostTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavHostTest.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/NavHostTest.kt rename to navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavHostTest.kt diff --git a/navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ViewTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ViewTest.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/androidTest/java/androidx/navigation/ViewTest.kt rename to navigation/navigation-runtime/src/androidTest/java/androidx/navigation/ViewTest.kt diff --git a/navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/Activity.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/Activity.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/Activity.kt rename to navigation/navigation-runtime/src/main/java/androidx/navigation/Activity.kt diff --git a/navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/ActivityNavArgsLazy.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavArgsLazy.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/ActivityNavArgsLazy.kt rename to navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavArgsLazy.kt diff --git a/navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/ActivityNavigatorDestinationBuilder.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigatorDestinationBuilder.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/ActivityNavigatorDestinationBuilder.kt rename to navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigatorDestinationBuilder.kt diff --git a/navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/ActivityNavigatorExtras.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigatorExtras.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/ActivityNavigatorExtras.kt rename to navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigatorExtras.kt diff --git a/navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/View.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/View.kt similarity index 100% rename from navigation/navigation-runtime-ktx/src/main/java/androidx/navigation/View.kt rename to navigation/navigation-runtime/src/main/java/androidx/navigation/View.kt