From 2884daea717a59402fbaa827a70c312cbef42616 Mon Sep 17 00:00:00 2001 From: Jeremy Woods Date: Thu, 1 Apr 2021 19:10:52 -0700 Subject: [PATCH] Merge nav-fragment-ktx into nav-fragment RelNote: "Navigation extention functions are now part of the main navigaiton library" Bug: 184292145 Test: ./gradlew checkApi Change-Id: Ib8e326fef9ba0fbd8763fe9b483054eb3bbe83fd --- .../api/current.ignore | 5 ++ .../navigation-fragment-ktx/api/current.txt | 44 ----------------- .../api/public_plus_experimental_current.txt | 44 ----------------- .../api/restricted_current.ignore | 5 ++ .../api/restricted_current.txt | 44 ----------------- .../navigation-fragment-ktx/build.gradle | 18 ------- .../src/androidTest/AndroidManifest.xml | 8 +--- .../fragment/FragmentNavigatorExtrasTest.kt | 47 ------------------- .../api/api_lint.ignore | 0 .../navigation-fragment/api/current.txt | 40 ++++++++++++++++ .../api/public_plus_experimental_current.txt | 40 ++++++++++++++++ .../api/restricted_current.txt | 40 ++++++++++++++++ navigation/navigation-fragment/build.gradle | 2 +- .../src/androidTest/AndroidManifest.xml | 2 + .../fragment/BaseNavControllerTest.kt | 8 +++- ...FragmentNavigatorDestinationBuilderTest.kt | 0 ...FragmentNavigatorDestinationBuilderTest.kt | 0 .../fragment/FragmentNavigatorExtrasTest.kt | 16 +++++++ .../navigation/fragment/FragmentTest.kt | 2 +- .../fragment/ImmediateNavigationTest.kt | 10 ++-- .../fragment/MultiNavHostFragmentTest.kt | 29 +++++++----- .../fragment/NavGraphViewModelLazyTest.kt | 2 +- .../res/layout/activity_nav_graph.xml | 0 .../androidTest/res/navigation/test_graph.xml | 0 .../androidTest/res/navigation/vm_graph.xml | 0 .../navigation/NavGraphViewModelLazy.kt | 0 ...alogFragmentNavigatorDestinationBuilder.kt | 0 .../androidx/navigation/fragment/Fragment.kt | 0 .../fragment/FragmentNavArgsLazy.kt | 0 .../FragmentNavigatorDestinationBuilder.kt | 0 .../fragment/FragmentNavigatorExtras.kt | 0 31 files changed, 183 insertions(+), 223 deletions(-) create mode 100644 navigation/navigation-fragment-ktx/api/current.ignore create mode 100644 navigation/navigation-fragment-ktx/api/restricted_current.ignore delete mode 100644 navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt rename navigation/{navigation-fragment-ktx => navigation-fragment}/api/api_lint.ignore (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilderTest.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt (98%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt (99%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/res/layout/activity_nav_graph.xml (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/res/navigation/test_graph.xml (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/androidTest/res/navigation/vm_graph.xml (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/main/java/androidx/navigation/NavGraphViewModelLazy.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/main/java/androidx/navigation/fragment/Fragment.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/main/java/androidx/navigation/fragment/FragmentNavArgsLazy.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/main/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilder.kt (100%) rename navigation/{navigation-fragment-ktx => navigation-fragment}/src/main/java/androidx/navigation/fragment/FragmentNavigatorExtras.kt (100%) diff --git a/navigation/navigation-fragment-ktx/api/current.ignore b/navigation/navigation-fragment-ktx/api/current.ignore new file mode 100644 index 0000000000000..f4d72106b66e5 --- /dev/null +++ b/navigation/navigation-fragment-ktx/api/current.ignore @@ -0,0 +1,5 @@ +// Baseline format: 1.0 +RemovedPackage: androidx.navigation: + Removed package androidx.navigation +RemovedPackage: androidx.navigation.fragment: + Removed package androidx.navigation.fragment diff --git a/navigation/navigation-fragment-ktx/api/current.txt b/navigation/navigation-fragment-ktx/api/current.txt index 53930dbfd97bc..e6f50d0d0fd11 100644 --- a/navigation/navigation-fragment-ktx/api/current.txt +++ b/navigation/navigation-fragment-ktx/api/current.txt @@ -1,45 +1 @@ // Signature format: 4.0 -package androidx.navigation { - - public final class NavGraphViewModelLazyKt { - method @MainThread public static inline kotlin.Lazy! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0? factoryProducer); - } - -} - -package androidx.navigation.fragment { - - @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); - method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build(); - } - - public final class DialogFragmentNavigatorDestinationBuilderKt { - method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id); - method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class FragmentKt { - method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment); - } - - public final class FragmentNavArgsLazyKt { - method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(androidx.fragment.app.Fragment); - } - - @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); - method public androidx.navigation.fragment.FragmentNavigator.Destination build(); - } - - public final class FragmentNavigatorDestinationBuilderKt { - method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id); - method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class FragmentNavigatorExtrasKt { - method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair... sharedElements); - } - -} - diff --git a/navigation/navigation-fragment-ktx/api/public_plus_experimental_current.txt b/navigation/navigation-fragment-ktx/api/public_plus_experimental_current.txt index 53930dbfd97bc..e6f50d0d0fd11 100644 --- a/navigation/navigation-fragment-ktx/api/public_plus_experimental_current.txt +++ b/navigation/navigation-fragment-ktx/api/public_plus_experimental_current.txt @@ -1,45 +1 @@ // Signature format: 4.0 -package androidx.navigation { - - public final class NavGraphViewModelLazyKt { - method @MainThread public static inline kotlin.Lazy! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0? factoryProducer); - } - -} - -package androidx.navigation.fragment { - - @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); - method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build(); - } - - public final class DialogFragmentNavigatorDestinationBuilderKt { - method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id); - method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class FragmentKt { - method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment); - } - - public final class FragmentNavArgsLazyKt { - method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(androidx.fragment.app.Fragment); - } - - @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); - method public androidx.navigation.fragment.FragmentNavigator.Destination build(); - } - - public final class FragmentNavigatorDestinationBuilderKt { - method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id); - method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class FragmentNavigatorExtrasKt { - method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair... sharedElements); - } - -} - diff --git a/navigation/navigation-fragment-ktx/api/restricted_current.ignore b/navigation/navigation-fragment-ktx/api/restricted_current.ignore new file mode 100644 index 0000000000000..f4d72106b66e5 --- /dev/null +++ b/navigation/navigation-fragment-ktx/api/restricted_current.ignore @@ -0,0 +1,5 @@ +// Baseline format: 1.0 +RemovedPackage: androidx.navigation: + Removed package androidx.navigation +RemovedPackage: androidx.navigation.fragment: + Removed package androidx.navigation.fragment diff --git a/navigation/navigation-fragment-ktx/api/restricted_current.txt b/navigation/navigation-fragment-ktx/api/restricted_current.txt index 53930dbfd97bc..e6f50d0d0fd11 100644 --- a/navigation/navigation-fragment-ktx/api/restricted_current.txt +++ b/navigation/navigation-fragment-ktx/api/restricted_current.txt @@ -1,45 +1 @@ // Signature format: 4.0 -package androidx.navigation { - - public final class NavGraphViewModelLazyKt { - method @MainThread public static inline kotlin.Lazy! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0? factoryProducer); - } - -} - -package androidx.navigation.fragment { - - @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); - method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build(); - } - - public final class DialogFragmentNavigatorDestinationBuilderKt { - method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id); - method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class FragmentKt { - method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment); - } - - public final class FragmentNavArgsLazyKt { - method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(androidx.fragment.app.Fragment); - } - - @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { - ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); - method public androidx.navigation.fragment.FragmentNavigator.Destination build(); - } - - public final class FragmentNavigatorDestinationBuilderKt { - method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id); - method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); - } - - public final class FragmentNavigatorExtrasKt { - method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair... sharedElements); - } - -} - diff --git a/navigation/navigation-fragment-ktx/build.gradle b/navigation/navigation-fragment-ktx/build.gradle index 3a543a0a17023..b73a493ab1d81 100644 --- a/navigation/navigation-fragment-ktx/build.gradle +++ b/navigation/navigation-fragment-ktx/build.gradle @@ -28,24 +28,6 @@ plugins { dependencies { api(project(":navigation:navigation-fragment")) - // Ensure that the -ktx dependency graph mirrors the Java dependency graph - api(project(":navigation:navigation-runtime-ktx")) - api("androidx.fragment:fragment-ktx:1.2.4") - api("androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0") - api(KOTLIN_STDLIB) - androidTestImplementation("androidx.fragment:fragment-testing:1.3.0") - androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT) - androidTestImplementation(ANDROIDX_TEST_CORE) - androidTestImplementation(ANDROIDX_TEST_RUNNER) - androidTestImplementation(ANDROIDX_TEST_RULES) - androidTestImplementation(ESPRESSO_CORE) - androidTestImplementation(TRUTH) - androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) - androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) - androidTestImplementation(project(":internal-testutils-runtime")) - androidTestImplementation(project(":internal-testutils-navigation"), { - exclude group: "androidx.navigation", module: "navigation-common-ktx" - }) } androidx { diff --git a/navigation/navigation-fragment-ktx/src/androidTest/AndroidManifest.xml b/navigation/navigation-fragment-ktx/src/androidTest/AndroidManifest.xml index 151e7a83e46af..4b6ae01274572 100644 --- a/navigation/navigation-fragment-ktx/src/androidTest/AndroidManifest.xml +++ b/navigation/navigation-fragment-ktx/src/androidTest/AndroidManifest.xml @@ -15,10 +15,4 @@ ~ limitations under the License. --> - - - - - - + diff --git a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt b/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt deleted file mode 100644 index baa4910ee05c1..0000000000000 --- a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt +++ /dev/null @@ -1,47 +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.fragment - -import android.view.View -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.LargeTest -import org.junit.Assert.assertEquals -import org.junit.Assert.assertNotNull -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mockito.mock - -@LargeTest -@RunWith(AndroidJUnit4::class) -class FragmentNavigatorExtrasTest { - - @Test - fun testFragmentNavigatorExtras() { - val view1 = mock(View::class.java) - val view2 = mock(View::class.java) - val extras = FragmentNavigatorExtras(view1 to "test1", view2 to "test2") - val sharedElements = extras.sharedElements - - assertEquals("Should be 2 shared elements", 2, sharedElements.size) - val name1 = sharedElements[view1] - assertNotNull("Shared element should exist in the map", name1) - assertEquals("Shared element's name should match", "test1", name1) - val name2 = sharedElements[view2] - assertNotNull("Shared element should exist in the map", name2) - assertEquals("Shared element's name should match", "test2", name2) - } -} diff --git a/navigation/navigation-fragment-ktx/api/api_lint.ignore b/navigation/navigation-fragment/api/api_lint.ignore similarity index 100% rename from navigation/navigation-fragment-ktx/api/api_lint.ignore rename to navigation/navigation-fragment/api/api_lint.ignore diff --git a/navigation/navigation-fragment/api/current.txt b/navigation/navigation-fragment/api/current.txt index bebfd468e55f3..633200edd5479 100644 --- a/navigation/navigation-fragment/api/current.txt +++ b/navigation/navigation-fragment/api/current.txt @@ -1,4 +1,12 @@ // Signature format: 4.0 +package androidx.navigation { + + public final class NavGraphViewModelLazyKt { + method @MainThread public static inline kotlin.Lazy! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0? factoryProducer); + } + +} + package androidx.navigation.fragment { @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator { @@ -16,6 +24,24 @@ package androidx.navigation.fragment { property public final String className; } + @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); + method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build(); + } + + public final class DialogFragmentNavigatorDestinationBuilderKt { + method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id); + method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class FragmentKt { + method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment); + } + + public final class FragmentNavArgsLazyKt { + method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(androidx.fragment.app.Fragment); + } + @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator { ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId); method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination(); @@ -44,6 +70,20 @@ package androidx.navigation.fragment { method public androidx.navigation.fragment.FragmentNavigator.Extras build(); } + @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); + method public androidx.navigation.fragment.FragmentNavigator.Destination build(); + } + + public final class FragmentNavigatorDestinationBuilderKt { + method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id); + method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class FragmentNavigatorExtrasKt { + method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair... sharedElements); + } + public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost { ctor public NavHostFragment(); method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs); diff --git a/navigation/navigation-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-fragment/api/public_plus_experimental_current.txt index 68b29bd5c0132..6e6d0cff45902 100644 --- a/navigation/navigation-fragment/api/public_plus_experimental_current.txt +++ b/navigation/navigation-fragment/api/public_plus_experimental_current.txt @@ -1,4 +1,12 @@ // Signature format: 4.0 +package androidx.navigation { + + public final class NavGraphViewModelLazyKt { + method @MainThread public static inline kotlin.Lazy! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0? factoryProducer); + } + +} + package androidx.navigation.fragment { @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator { @@ -17,6 +25,24 @@ package androidx.navigation.fragment { property public final String className; } + @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); + method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build(); + } + + public final class DialogFragmentNavigatorDestinationBuilderKt { + method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id); + method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class FragmentKt { + method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment); + } + + public final class FragmentNavArgsLazyKt { + method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(androidx.fragment.app.Fragment); + } + @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator { ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId); method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination(); @@ -45,6 +71,20 @@ package androidx.navigation.fragment { method public androidx.navigation.fragment.FragmentNavigator.Extras build(); } + @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); + method public androidx.navigation.fragment.FragmentNavigator.Destination build(); + } + + public final class FragmentNavigatorDestinationBuilderKt { + method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id); + method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class FragmentNavigatorExtrasKt { + method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair... sharedElements); + } + public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost { ctor public NavHostFragment(); method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs); diff --git a/navigation/navigation-fragment/api/restricted_current.txt b/navigation/navigation-fragment/api/restricted_current.txt index bebfd468e55f3..633200edd5479 100644 --- a/navigation/navigation-fragment/api/restricted_current.txt +++ b/navigation/navigation-fragment/api/restricted_current.txt @@ -1,4 +1,12 @@ // Signature format: 4.0 +package androidx.navigation { + + public final class NavGraphViewModelLazyKt { + method @MainThread public static inline kotlin.Lazy! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0? factoryProducer); + } + +} + package androidx.navigation.fragment { @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator { @@ -16,6 +24,24 @@ package androidx.navigation.fragment { property public final String className; } + @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); + method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build(); + } + + public final class DialogFragmentNavigatorDestinationBuilderKt { + method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id); + method public static inline void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class FragmentKt { + method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment); + } + + public final class FragmentNavArgsLazyKt { + method @MainThread public static inline androidx.navigation.NavArgsLazy! navArgs(androidx.fragment.app.Fragment); + } + @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator { ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId); method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination(); @@ -44,6 +70,20 @@ package androidx.navigation.fragment { method public androidx.navigation.fragment.FragmentNavigator.Extras build(); } + @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder { + ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass fragmentClass); + method public androidx.navigation.fragment.FragmentNavigator.Destination build(); + } + + public final class FragmentNavigatorDestinationBuilderKt { + method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id); + method public static inline void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1 builder); + } + + public final class FragmentNavigatorExtrasKt { + method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair... sharedElements); + } + public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost { ctor public NavHostFragment(); method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs); diff --git a/navigation/navigation-fragment/build.gradle b/navigation/navigation-fragment/build.gradle index 03abccd583753..d90c892637381 100644 --- a/navigation/navigation-fragment/build.gradle +++ b/navigation/navigation-fragment/build.gradle @@ -31,12 +31,12 @@ dependencies { api(project(":navigation:navigation-runtime-ktx")) api(KOTLIN_STDLIB) + androidTestImplementation("androidx.fragment:fragment-testing:1.3.2") androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT) androidTestImplementation(ANDROIDX_TEST_CORE) androidTestImplementation(ANDROIDX_TEST_RUNNER) androidTestImplementation(ANDROIDX_TEST_RULES) androidTestImplementation(TRUTH) - androidTestImplementation(KOTLIN_STDLIB) androidTestImplementation(project(":internal-testutils-runtime"), { exclude group: "androidx.fragment", module: "fragment" }) diff --git a/navigation/navigation-fragment/src/androidTest/AndroidManifest.xml b/navigation/navigation-fragment/src/androidTest/AndroidManifest.xml index c51701bf1f963..1efa139b903b7 100644 --- a/navigation/navigation-fragment/src/androidTest/AndroidManifest.xml +++ b/navigation/navigation-fragment/src/androidTest/AndroidManifest.xml @@ -28,5 +28,7 @@ + + diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/BaseNavControllerTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/BaseNavControllerTest.kt index 8f9ffe91f96fb..c0877376aeb14 100644 --- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/BaseNavControllerTest.kt +++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/BaseNavControllerTest.kt @@ -231,7 +231,9 @@ abstract class BaseNavControllerTest( .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) val activity = launchActivity(intent) val navController = activity.navController - navController.setGraph(R.navigation.nav_deep_link) + activityRule.runOnUiThread { + navController.setGraph(R.navigation.nav_deep_link) + } assertEquals(destId, navController.currentDestination?.id ?: 0) val navigator = navController.navigatorProvider[TestNavigator::class] @@ -271,7 +273,9 @@ abstract class BaseNavControllerTest( // Now launch the deeplink Intent val deeplinkActivity = launchActivity(intent) val navController = deeplinkActivity.navController - navController.setGraph(graphId) + activityRule.runOnUiThread { + navController.setGraph(graphId) + } return deeplinkActivity } diff --git a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt rename to navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt diff --git a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilderTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilderTest.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilderTest.kt rename to navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilderTest.kt diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt index 115858e9b1278..2a8badbb40442 100644 --- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt +++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorExtrasTest.kt @@ -59,4 +59,20 @@ class FragmentNavigatorExtrasTest { assertEquals("Shared element's name should match", expected, name) } } + + @Test + fun testFragmentNavigatorExtras() { + val view1 = View(InstrumentationRegistry.getInstrumentation().targetContext) + val view2 = View(InstrumentationRegistry.getInstrumentation().targetContext) + val extras = FragmentNavigatorExtras(view1 to "test1", view2 to "test2") + val sharedElements = extras.sharedElements + + assertEquals("Should be 2 shared elements", 2, sharedElements.size) + val name1 = sharedElements[view1] + assertNotNull("Shared element should exist in the map", name1) + assertEquals("Shared element's name should match", "test1", name1) + val name2 = sharedElements[view2] + assertNotNull("Shared element should exist in the map", name2) + assertEquals("Shared element's name should match", "test2", name2) + } } diff --git a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt similarity index 98% rename from navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt rename to navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt index 4f93a8a68a84b..99b446b4ea39d 100644 --- a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt +++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentTest.kt @@ -20,7 +20,7 @@ import android.os.Bundle import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.navigation.NavArgs -import androidx.navigation.fragment.ktx.test.R +import androidx.navigation.fragment.test.R import androidx.test.annotation.UiThreadTest import androidx.test.filters.LargeTest import com.google.common.truth.Truth.assertThat diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt index 6b103f832a6b9..8d3b01b104421 100644 --- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt +++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt @@ -23,8 +23,10 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.fragment.app.Fragment import androidx.navigation.fragment.test.R +import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.MediumTest +import androidx.testutils.withActivity import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -37,13 +39,13 @@ class ImmediateNavigationTest { @Suppress("DEPRECATION") @get:Rule - var activityRule = androidx.test.rule.ActivityTestRule( + var activityRule = ActivityScenarioRule( ImmediateNavigationActivity::class.java ) @Test fun testNavigateInOnResume() { - val activity = activityRule.activity + val activity = activityRule.withActivity { this } val navController = activity.navController val countDownLatch = CountDownLatch(3) navController.addOnDestinationChangedListener { _, destination, _ -> @@ -61,7 +63,9 @@ class ImmediateNavigationTest { } } } - navController.navigate(R.id.immediate_test) + activityRule.withActivity { + navController.navigate(R.id.immediate_test) + } countDownLatch.await(1, TimeUnit.SECONDS) } } diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt index cbe07236407f3..1a72855becead 100644 --- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt +++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt @@ -42,8 +42,10 @@ class MultiNavHostFragmentTest { findNavController(R.id.nav_host_fragment) } - navController.setGraph(R.navigation.nav_nav_host) - navController.navigate(R.id.nav_host_1) + withActivity { + navController.setGraph(R.navigation.nav_nav_host) + navController.navigate(R.id.nav_host_1) + } val rootNavController = withActivity { val navHostFragment = supportFragmentManager @@ -63,17 +65,19 @@ class MultiNavHostFragmentTest { findNavController(R.id.nav_host_fragment) } - navController.setGraph(R.navigation.nav_nav_host) - navController.navigate(R.id.nav_host_1) - + withActivity { + navController.setGraph(R.navigation.nav_nav_host) + navController.navigate(R.id.nav_host_1) + } val childFragment = withActivity { supportFragmentManager.findFragmentById(R.id.nav_host_fragment) ?.childFragmentManager?.findFragmentById(R.id.nav_host_fragment) as BasicNavHostFragment } - navController.popBackStack() - + withActivity { + navController.popBackStack() + } val returnNavController = withActivity { val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment)!! @@ -96,8 +100,10 @@ class MultiNavHostFragmentTest { findNavController(R.id.nav_host_fragment) } - navController.setGraph(R.navigation.nav_nav_host) - navController.navigate(R.id.nav_host_1) + withActivity { + navController.setGraph(R.navigation.nav_nav_host) + navController.navigate(R.id.nav_host_1) + } val firstChildNavController = withActivity { val navHostFragment = @@ -108,8 +114,9 @@ class MultiNavHostFragmentTest { .that(firstChildNavController) .isNotEqualTo(navController) - navController.navigate(R.id.nav_host_2) - + withActivity { + navController.navigate(R.id.nav_host_2) + } val secondChildNavController = withActivity { val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment)!! diff --git a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt similarity index 99% rename from navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt rename to navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt index 805a0da242ac4..f3c50e75ece8f 100644 --- a/navigation/navigation-fragment-ktx/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt +++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt @@ -31,7 +31,7 @@ import androidx.lifecycle.ViewModelStore import androidx.navigation.NavHostController import androidx.navigation.Navigation import androidx.navigation.findNavController -import androidx.navigation.fragment.ktx.test.R +import androidx.navigation.fragment.test.R import androidx.navigation.navGraphViewModels import androidx.navigation.navigation import androidx.navigation.plusAssign diff --git a/navigation/navigation-fragment-ktx/src/androidTest/res/layout/activity_nav_graph.xml b/navigation/navigation-fragment/src/androidTest/res/layout/activity_nav_graph.xml similarity index 100% rename from navigation/navigation-fragment-ktx/src/androidTest/res/layout/activity_nav_graph.xml rename to navigation/navigation-fragment/src/androidTest/res/layout/activity_nav_graph.xml diff --git a/navigation/navigation-fragment-ktx/src/androidTest/res/navigation/test_graph.xml b/navigation/navigation-fragment/src/androidTest/res/navigation/test_graph.xml similarity index 100% rename from navigation/navigation-fragment-ktx/src/androidTest/res/navigation/test_graph.xml rename to navigation/navigation-fragment/src/androidTest/res/navigation/test_graph.xml diff --git a/navigation/navigation-fragment-ktx/src/androidTest/res/navigation/vm_graph.xml b/navigation/navigation-fragment/src/androidTest/res/navigation/vm_graph.xml similarity index 100% rename from navigation/navigation-fragment-ktx/src/androidTest/res/navigation/vm_graph.xml rename to navigation/navigation-fragment/src/androidTest/res/navigation/vm_graph.xml diff --git a/navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/NavGraphViewModelLazy.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/NavGraphViewModelLazy.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/NavGraphViewModelLazy.kt rename to navigation/navigation-fragment/src/main/java/androidx/navigation/NavGraphViewModelLazy.kt diff --git a/navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt rename to navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt diff --git a/navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/Fragment.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/Fragment.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/Fragment.kt rename to navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/Fragment.kt diff --git a/navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/FragmentNavArgsLazy.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavArgsLazy.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/FragmentNavArgsLazy.kt rename to navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavArgsLazy.kt diff --git a/navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilder.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilder.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilder.kt rename to navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigatorDestinationBuilder.kt diff --git a/navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/FragmentNavigatorExtras.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigatorExtras.kt similarity index 100% rename from navigation/navigation-fragment-ktx/src/main/java/androidx/navigation/fragment/FragmentNavigatorExtras.kt rename to navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigatorExtras.kt