Ensure findFragment works with <fragment> tag
When calling FragmentManager.findFragment() with the view of a fragment
that was added using the <fragment> tag, that fragment was being ignored
(either the parentFragment was found or it was crashing saying the view
did not have a fragment set).
This change sets the proper view tag on <fragment> tag inflated
fragments.
Test: Added test
Bug: 147784323
Change-Id: I4346b694ba2af1fab1f68a879df96beaf129cd0c
(cherry picked from commit 3905584b8c5d63aeb50a4de9a44b48ca029435a8)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTest.kt
index 86d419a..7a709e8c 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewTest.kt
@@ -336,6 +336,17 @@
}
@Test
+ fun findInflatedFragment() {
+ activityRule.setContentView(R.layout.activity_inflated_fragment)
+ val fm = activityRule.activity.supportFragmentManager
+
+ val fragment = fm.findFragmentById(R.id.inflated_fragment)!!
+
+ assertThat(FragmentManager.findFragment<StrictViewFragment>(fragment.requireView()))
+ .isSameInstanceAs(fragment)
+ }
+
+ @Test
fun findFragmentFindByIdChildView() {
activityRule.setContentView(R.layout.simple_container)
val fm = activityRule.activity.supportFragmentManager
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
index c04619a..56e2cab 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
@@ -210,6 +210,7 @@
mFragment.mSavedFragmentState), null, mFragment.mSavedFragmentState);
if (mFragment.mView != null) {
mFragment.mView.setSaveFromParentEnabled(false);
+ mFragment.mView.setTag(R.id.fragment_container_view_tag, mFragment);
if (mFragment.mHidden) mFragment.mView.setVisibility(View.GONE);
mFragment.onViewCreated(mFragment.mView, mFragment.mSavedFragmentState);
mDispatcher.dispatchOnFragmentViewCreated(