1990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project 3990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 4990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * you may not use this file except in compliance with the License. 6990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * You may obtain a copy of the License at 7990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 8990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 9990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 10990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Unless required by applicable law or agreed to in writing, software 11990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 12990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * See the License for the specific language governing permissions and 14990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * limitations under the License. 15990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount */ 16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.fragment.app; 17990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 18990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.junit.Assert.assertEquals; 19fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertFalse; 20fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertNotNull; 21fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertNull; 22fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertSame; 23990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.junit.Assert.assertTrue; 24990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport static org.junit.Assert.fail; 25990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 26990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.app.Instrumentation; 27aa3a5538c003c6098185d1c948e22054e2f27488George Mountimport android.os.Bundle; 28990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.support.test.InstrumentationRegistry; 29990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.support.test.filters.MediumTest; 30990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.support.test.rule.ActivityTestRule; 31990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.support.test.runner.AndroidJUnit4; 321780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mountimport android.view.LayoutInflater; 33990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.View; 34990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.ViewGroup; 35990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 36320113721c2e14bbc2403809046fa2959a665c11Aurimas Liutikasimport androidx.annotation.Nullable; 37320113721c2e14bbc2403809046fa2959a665c11Aurimas Liutikasimport androidx.fragment.app.test.FragmentTestActivity; 38320113721c2e14bbc2403809046fa2959a665c11Aurimas Liutikasimport androidx.fragment.test.R; 39320113721c2e14bbc2403809046fa2959a665c11Aurimas Liutikas 40990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport org.junit.Before; 41990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport org.junit.Rule; 42990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport org.junit.Test; 43990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport org.junit.runner.RunWith; 44990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 45990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount@MediumTest 46990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount@RunWith(AndroidJUnit4.class) 47990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountpublic class FragmentViewTests { 48990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Rule 49990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public ActivityTestRule<FragmentTestActivity> mActivityRule = 50990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount new ActivityTestRule<FragmentTestActivity>(FragmentTestActivity.class); 51990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 52990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount private Instrumentation mInstrumentation; 53990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 54990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Before 55990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void setupInstrumentation() { 56990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mInstrumentation = InstrumentationRegistry.getInstrumentation(); 57990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 58990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 59990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Test that adding a fragment adds the Views in the proper order. Popping the back stack 60990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // should remove the correct Views. 61990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 62990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void addFragments() throws Throwable { 63990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 64990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 65990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 66990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 67990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 68990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // One fragment with a view 69990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 70990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment1).addToBackStack(null).commit(); 71990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 72990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 73990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 74990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Add another on top 75990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 76990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment2).addToBackStack(null).commit(); 77990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 78990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2); 79990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 80990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Now add two in one transaction: 81990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment3 = new StrictViewFragment(); 82990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment4 = new StrictViewFragment(); 83990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 84990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment3) 85990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment4) 86990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 87990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 88990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 89990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2, fragment3, fragment4); 90990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 91990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 92990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 93990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2); 94990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 95990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 96990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 97990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(1, container.getChildCount()); 98990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 99990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 100990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 101990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 102990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 103990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 104990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 105990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Add fragments to multiple containers in the same transaction. Make sure that 106990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // they pop correctly, too. 107990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 108990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void addTwoContainers() throws Throwable { 109990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.double_container); 110990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container1 = (ViewGroup) 111990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer1); 112990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container2 = (ViewGroup) 113990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer2); 114990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 115990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 116990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 117990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer1, fragment1).addToBackStack(null).commit(); 118990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 119990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container1, fragment1); 120990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 121990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 122990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer2, fragment2).addToBackStack(null).commit(); 123990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 124990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container2, fragment2); 125990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 126990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment3 = new StrictViewFragment(); 127990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment4 = new StrictViewFragment(); 128990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 129990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer1, fragment3) 130990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer2, fragment4) 131990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 132990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 133990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 134990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 135990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container1, fragment1, fragment3); 136990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container2, fragment2, fragment4); 137990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 138990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 139990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 140990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container1, fragment1); 141990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container2, fragment2); 142990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 143990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 144990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 145990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container1, fragment1); 146990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container2); 147990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 148990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 149990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 150990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(0, container1.getChildCount()); 151990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 152990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 153990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // When you add a fragment that's has already been added, it should throw. 154990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 155990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void doubleAdd() throws Throwable { 156990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 157990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 158990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 159990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment1).commit(); 160990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 161990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 162990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mInstrumentation.runOnMainSync(new Runnable() { 163990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 164990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void run() { 165990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount try { 166990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 167990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment1) 168990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 169990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 170990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.executePendingTransactions(); 171990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fail("Adding a fragment that is already added should be an error"); 172990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } catch (IllegalStateException e) { 173990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // expected 174990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 175990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 176990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount }); 177990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 178990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 179990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Make sure that removed fragments remove the right Views. Popping the back stack should 180990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // add the Views back properly 181990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 182990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void removeFragments() throws Throwable { 183990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 184990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 185990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 186990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 187990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 188990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 189990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment3 = new StrictViewFragment(); 190990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment4 = new StrictViewFragment(); 191990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 192990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment1, "1") 193990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment2, "2") 194990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment3, "3") 195990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment4, "4") 196990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 197990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 198990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2, fragment3, fragment4); 199990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 200990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Remove a view 201990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().remove(fragment4).addToBackStack(null).commit(); 202990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 203990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 204990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(3, container.getChildCount()); 205990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2, fragment3); 206990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 207990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // remove another one 208990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().remove(fragment2).addToBackStack(null).commit(); 209990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 210990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment3); 211990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 212990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Now remove the remaining: 213990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 214990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .remove(fragment3) 215990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .remove(fragment1) 216990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 217990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 218990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 219990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 220990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 221990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 222990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 223990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement1 = fm.findFragmentByTag("1"); 224990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement3 = fm.findFragmentByTag("3"); 225990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1, replacement3); 226990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 227990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 228990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 229990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement2 = fm.findFragmentByTag("2"); 230990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1, replacement3, replacement2); 231990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 232990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 233990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 234990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement4 = fm.findFragmentByTag("4"); 235990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1, replacement3, replacement2, 236990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount replacement4); 237990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 238990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 239990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Removing a hidden fragment should remove the View and popping should bring it back hidden 240990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 241990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void removeHiddenView() throws Throwable { 242990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 243990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 244990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 245990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 246990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 247990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment1, "1").hide(fragment1).commit(); 248990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 249990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 250990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment1.isHidden()); 251990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 252990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().remove(fragment1).addToBackStack(null).commit(); 253990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 254990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 255990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 256990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 257990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 258990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement1 = fm.findFragmentByTag("1"); 259990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1); 260990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(replacement1.isHidden()); 261990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, replacement1.getView().getVisibility()); 262990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 263990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 264990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Removing a detached fragment should do nothing to the View and popping should bring 265990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // the Fragment back detached 266990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 267990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void removeDetatchedView() throws Throwable { 268990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 269990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 270990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 271990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 272990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 273990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 274990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment1, "1") 275990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .detach(fragment1) 276990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 277990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 278990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 279990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment1.isDetached()); 280990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 281990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().remove(fragment1).addToBackStack(null).commit(); 282990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 283990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 284990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 285990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 286990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 287990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement1 = fm.findFragmentByTag("1"); 288990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 289990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(replacement1.isDetached()); 290990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 291990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 292990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Unlike adding the same fragment twice, you should be able to add and then remove and then 293990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // add the same fragment in one transaction. 294990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 295990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void addRemoveAdd() throws Throwable { 296990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 297990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 298990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 299990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 300990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 301990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 302990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 303990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .remove(fragment) 304990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 305990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 306990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 307990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 308990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 309990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 310990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 311990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 312990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 313990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 314990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 315d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Removing a fragment that isn't in should not throw 316990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 317990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void removeNothThere() throws Throwable { 318990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 319990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 320990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 321990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().remove(fragment).commit(); 322d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 323990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 324990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 325990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Hide a fragment and its View should be GONE. Then pop it and the View should be VISIBLE 326990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 327990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void hideFragment() throws Throwable { 328990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 329990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 330990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 331990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 332990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 333990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit(); 334990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 335990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 336990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 337990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 338990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 339990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().hide(fragment).addToBackStack(null).commit(); 340990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 341990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 342990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 343990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 344990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, fragment.getView().getVisibility()); 345990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 346990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 347990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 348990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 349990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 350990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isHidden()); 351990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 352990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 353990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 354d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Hiding a hidden fragment should not throw 355990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 356990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void doubleHide() throws Throwable { 357990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 358990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 359990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 360990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 361990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 362990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .hide(fragment) 363990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .hide(fragment) 364990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 365d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 366990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 367990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 368d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Hiding a non-existing fragment should not throw 369990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 370990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void hideUnAdded() throws Throwable { 371990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 372990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 373990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 374990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 375990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .hide(fragment) 376990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 377d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 378990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 379990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 380990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Show a hidden fragment and its View should be VISIBLE. Then pop it and the View should be 381990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // GONE. 382990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 383990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void showFragment() throws Throwable { 384990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 385990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 386990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 387990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 388990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 389990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment).hide(fragment).commit(); 390990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 391990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 392990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 393990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 394990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, fragment.getView().getVisibility()); 395990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 396990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().show(fragment).addToBackStack(null).commit(); 397990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 398990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 399990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 400990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isHidden()); 401990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 402990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 403990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 404990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 405990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 406990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 407990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 408990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, fragment.getView().getVisibility()); 409990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 410990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 411d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Showing a shown fragment should not throw 412990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 413990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void showShown() throws Throwable { 414990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 415990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 416990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 417990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 418990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 419990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .show(fragment) 420990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 421d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 422990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 423990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 424d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Showing a non-existing fragment should not throw 425990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 426990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void showUnAdded() throws Throwable { 427990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 428990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 429990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 430990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 431990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .show(fragment) 432990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 433d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 434990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 435990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 436990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Detaching a fragment should remove the View from the hierarchy. Then popping it should 437990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // bring it back VISIBLE 438990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 439990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void detachFragment() throws Throwable { 440990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 441990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 442990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 443990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 444990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 445990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit(); 446990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 447990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 448990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 449990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isDetached()); 450990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 451990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 452990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().detach(fragment).addToBackStack(null).commit(); 453990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 454990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 455990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 456990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isDetached()); 457990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 458990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 459990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 460990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 461990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 462990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isDetached()); 463990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 464990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 465990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 466990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Detaching a hidden fragment should remove the View from the hierarchy. Then popping it should 467990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // bring it back hidden 468990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 469990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void detachHiddenFragment() throws Throwable { 470990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 471990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 472990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 473990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 474990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 475990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment).hide(fragment).commit(); 476990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 477990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 478990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 479990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isDetached()); 480990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 481990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, fragment.getView().getVisibility()); 482990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 483990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().detach(fragment).addToBackStack(null).commit(); 484990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 485990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 486990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 487990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 488990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isDetached()); 489990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 490990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 491990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 492990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 493990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 494990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 495990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isDetached()); 496990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, fragment.getView().getVisibility()); 497990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 498990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 499d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Detaching a detached fragment should not throw 500990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 501990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void detachDetatched() throws Throwable { 502990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 503990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 504990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 505990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 506990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 507990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .detach(fragment) 508990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .detach(fragment) 509990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 510d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 511990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 512990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 513d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Detaching a non-existing fragment should not throw 514990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 515990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void detachUnAdded() throws Throwable { 516990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 517990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 518990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 519990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 520990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .detach(fragment) 521990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 522d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 523990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 524990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 525990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Attaching a fragment should add the View back into the hierarchy. Then popping it should 526990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // remove it again 527990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 528990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void attachFragment() throws Throwable { 529990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 530990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 531990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 532990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 533990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 534990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment).detach(fragment).commit(); 535990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 536990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 537990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 538990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isDetached()); 539990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 540990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().attach(fragment).addToBackStack(null).commit(); 541990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 542990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 543990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 544990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isDetached()); 545990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 546990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 547990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 548990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 549990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 550990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 551990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isDetached()); 552990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 553990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 554990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Attaching a hidden fragment should add the View as GONE the hierarchy. Then popping it should 555990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // remove it again. 556990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 557990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void attachHiddenFragment() throws Throwable { 558990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 559990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 560990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 561990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 562990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 563990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 564990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 565990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .hide(fragment) 566990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .detach(fragment) 567990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 568990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 569990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 570990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 571990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isDetached()); 572990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 573990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 574990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().attach(fragment).addToBackStack(null).commit(); 575990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 576990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 577990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 578990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 579990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(fragment.isDetached()); 580990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, fragment.getView().getVisibility()); 581990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 582990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 583990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 584990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 585990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 586990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isDetached()); 587990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(fragment.isHidden()); 588990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 589990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 590d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Attaching an attached fragment should not throw 591990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 592990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void attachAttached() throws Throwable { 593990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 594990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 595990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 596990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 597990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment) 598990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .attach(fragment) 599990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 600d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 601990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 602990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 603d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount // Attaching a non-existing fragment should not throw 604990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 605990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void attachUnAdded() throws Throwable { 606990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 607990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 608990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 609990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 610990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .attach(fragment) 611990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 612d50cf1504e5a5c80aec83c9a45923cd5c6bbef56George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 613990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 614990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 615990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Simple replace of one fragment in a container. Popping should replace it back again 616990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 617990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void replaceOne() throws Throwable { 618990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 619990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 620990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 621990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 622990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 623990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment1, "1").commit(); 624990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 625990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 626990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 627990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 628990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 629990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 630990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer, fragment2) 631990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 632990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 633990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 634990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 635990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment2); 636990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment2.getView().getVisibility()); 637990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 638990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 639990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 640990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 641990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount Fragment replacement1 = fm.findFragmentByTag("1"); 642990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(replacement1); 643990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1); 644990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(replacement1.isHidden()); 645990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(replacement1.isAdded()); 646990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(replacement1.isDetached()); 647990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, replacement1.getView().getVisibility()); 648990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 649990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 650990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Replace of multiple fragments in a container. Popping should replace it back again 651990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 652990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void replaceTwo() throws Throwable { 653990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 654990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 655990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 656990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 657990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 658990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 659990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 660990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment1, "1") 661990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment2, "2") 662990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .hide(fragment2) 663990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 664990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 665990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 666990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2); 667990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 668990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment3 = new StrictViewFragment(); 669990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 670990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer, fragment3) 671990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 672990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 673990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 674990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 675990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment3); 676990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment3.getView().getVisibility()); 677990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 678990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 679990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 680990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 681990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount Fragment replacement1 = fm.findFragmentByTag("1"); 682990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount Fragment replacement2 = fm.findFragmentByTag("2"); 683990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(replacement1); 684990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(replacement2); 685990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1, replacement2); 686990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(replacement1.isHidden()); 687990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(replacement1.isAdded()); 688990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(replacement1.isDetached()); 689990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, replacement1.getView().getVisibility()); 690990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 691990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // fragment2 was hidden, so it should be returned hidden 692990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(replacement2.isHidden()); 693990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertTrue(replacement2.isAdded()); 694990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertFalse(replacement2.isDetached()); 695990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.GONE, replacement2.getView().getVisibility()); 696990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 697990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 698990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Replace of empty container. Should act as add and popping should just remove the fragment 699990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 700990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void replaceZero() throws Throwable { 701990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 702990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 703990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 704990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 705990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 706990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment = new StrictViewFragment(); 707990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 708990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer, fragment) 709990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 710990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 711990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 712990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 713990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment); 714990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals(View.VISIBLE, fragment.getView().getVisibility()); 715990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 716990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 717990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 718990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 719990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container); 720990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 721990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 722990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Replace a fragment that exists with itself 723990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 724990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void replaceExisting() throws Throwable { 725990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 726990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container = (ViewGroup) 727990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 728990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 729990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 730990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 731990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 732990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment1, "1") 733990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragment2, "2") 734990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 735990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 736990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 737990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1, fragment2); 738990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 739990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 740990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer, fragment1) 741990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 742990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 743990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 744990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 745990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 746990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 747990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 748990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 749990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 750990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement1 = fm.findFragmentByTag("1"); 751990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final Fragment replacement2 = fm.findFragmentByTag("2"); 752990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 753990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertSame(fragment1, replacement1); 754990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.assertChildren(container, replacement1, replacement2); 755990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 756990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 757990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Have two replace operations in the same transaction to ensure that they 758990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // don't interfere with each other 759990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 760990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void replaceReplace() throws Throwable { 761990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.double_container); 762990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container1 = (ViewGroup) 763990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer1); 764990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount ViewGroup container2 = (ViewGroup) 765990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer2); 766990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 767990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 768990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 769990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 770990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment3 = new StrictViewFragment(); 771990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment4 = new StrictViewFragment(); 772990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final StrictViewFragment fragment5 = new StrictViewFragment(); 773990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 774990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer1, fragment1) 775990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer2, fragment2) 776990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer1, fragment3) 777990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer2, fragment4) 778990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer1, fragment5) 779990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 780990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 781990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 782990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 783990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertChildren(container1, fragment5); 784990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertChildren(container2, fragment4); 785990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 786990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.popBackStack(); 787990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 788990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 789990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertChildren(container1); 790990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertChildren(container2); 791990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 792990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 793990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount // Test to prevent regressions in FragmentManager fragment replace method. See b/24693644 794990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Test 795990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void testReplaceFragment() throws Throwable { 796990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 797990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 798990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount StrictViewFragment fragmentA = new StrictViewFragment(); 799990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fragmentA.setLayoutId(R.layout.text_a); 800990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 801990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 802990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragmentA) 803990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 804990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 805990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 806990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 807990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(findViewById(R.id.textA)); 808990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNull(findViewById(R.id.textB)); 809990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNull(findViewById(R.id.textC)); 810990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 811990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount StrictViewFragment fragmentB = new StrictViewFragment(); 812990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fragmentB.setLayoutId(R.layout.text_b); 813990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 814990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .add(R.id.fragmentContainer, fragmentB) 815990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 816990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 817990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 818990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(findViewById(R.id.textA)); 819990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(findViewById(R.id.textB)); 820990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNull(findViewById(R.id.textC)); 821990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 822990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount StrictViewFragment fragmentC = new StrictViewFragment(); 823990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fragmentC.setLayoutId(R.layout.text_c); 824990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fm.beginTransaction() 825990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .replace(R.id.fragmentContainer, fragmentC) 826990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .addToBackStack(null) 827990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount .commit(); 828990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 829990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNull(findViewById(R.id.textA)); 830990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNull(findViewById(R.id.textB)); 831990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertNotNull(findViewById(R.id.textC)); 832990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 833990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 834aa3a5538c003c6098185d1c948e22054e2f27488George Mount // Test that adding a fragment with invisible or gone views does not end up with the view 835aa3a5538c003c6098185d1c948e22054e2f27488George Mount // being visible 836aa3a5538c003c6098185d1c948e22054e2f27488George Mount @Test 837aa3a5538c003c6098185d1c948e22054e2f27488George Mount public void addInvisibleAndGoneFragments() throws Throwable { 838aa3a5538c003c6098185d1c948e22054e2f27488George Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 839aa3a5538c003c6098185d1c948e22054e2f27488George Mount ViewGroup container = (ViewGroup) 840aa3a5538c003c6098185d1c948e22054e2f27488George Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 841aa3a5538c003c6098185d1c948e22054e2f27488George Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 842aa3a5538c003c6098185d1c948e22054e2f27488George Mount 843aa3a5538c003c6098185d1c948e22054e2f27488George Mount final StrictViewFragment fragment1 = new InvisibleFragment(); 844aa3a5538c003c6098185d1c948e22054e2f27488George Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment1).addToBackStack(null).commit(); 845aa3a5538c003c6098185d1c948e22054e2f27488George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 846aa3a5538c003c6098185d1c948e22054e2f27488George Mount FragmentTestUtil.assertChildren(container, fragment1); 847aa3a5538c003c6098185d1c948e22054e2f27488George Mount 848aa3a5538c003c6098185d1c948e22054e2f27488George Mount assertEquals(View.INVISIBLE, fragment1.getView().getVisibility()); 849aa3a5538c003c6098185d1c948e22054e2f27488George Mount 850aa3a5538c003c6098185d1c948e22054e2f27488George Mount final InvisibleFragment fragment2 = new InvisibleFragment(); 851aa3a5538c003c6098185d1c948e22054e2f27488George Mount fragment2.visibility = View.GONE; 852aa3a5538c003c6098185d1c948e22054e2f27488George Mount fm.beginTransaction() 853aa3a5538c003c6098185d1c948e22054e2f27488George Mount .replace(R.id.fragmentContainer, fragment2) 854aa3a5538c003c6098185d1c948e22054e2f27488George Mount .addToBackStack(null) 855aa3a5538c003c6098185d1c948e22054e2f27488George Mount .commit(); 856aa3a5538c003c6098185d1c948e22054e2f27488George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 857aa3a5538c003c6098185d1c948e22054e2f27488George Mount FragmentTestUtil.assertChildren(container, fragment2); 858aa3a5538c003c6098185d1c948e22054e2f27488George Mount 859aa3a5538c003c6098185d1c948e22054e2f27488George Mount assertEquals(View.GONE, fragment2.getView().getVisibility()); 860aa3a5538c003c6098185d1c948e22054e2f27488George Mount } 861aa3a5538c003c6098185d1c948e22054e2f27488George Mount 862e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount // Test to ensure that popping and adding a fragment properly track the fragments added 863e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount // and removed. 864e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount @Test 865e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount public void popAdd() throws Throwable { 866e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 867e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount ViewGroup container = (ViewGroup) 868e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 869e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 870e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount 871e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount // One fragment with a view 872e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 873e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.beginTransaction().add(R.id.fragmentContainer, fragment1).addToBackStack(null).commit(); 874e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 875e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 876e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount 877e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 878e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount final StrictViewFragment fragment3 = new StrictViewFragment(); 879e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount mInstrumentation.runOnMainSync(new Runnable() { 880e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount @Override 881e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount public void run() { 882e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.popBackStack(); 883e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.beginTransaction() 884e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount .replace(R.id.fragmentContainer, fragment2) 885e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount .addToBackStack(null) 886e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount .commit(); 887e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.executePendingTransactions(); 888e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.popBackStack(); 889e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.beginTransaction() 890e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount .replace(R.id.fragmentContainer, fragment3) 891e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount .addToBackStack(null) 892e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount .commit(); 893e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount fm.executePendingTransactions(); 894e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount } 895e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount }); 896e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount FragmentTestUtil.assertChildren(container, fragment3); 897e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount } 898e7e8d3d3a5211abc960351923b8b2bac85f6adecGeorge Mount 899fda5be2466024a656152015c45a7681361d399bbGeorge Mount // Ensure that ordered transactions are executed individually rather than together. 900f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount // This forces references from one fragment to another that should be executed earlier 901f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount // to work. 9021780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount @Test 903fda5be2466024a656152015c45a7681361d399bbGeorge Mount public void orderedOperationsTogether() throws Throwable { 904f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 905f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount ViewGroup container = (ViewGroup) 906f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 907f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 908f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount 909f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount final StrictViewFragment fragment1 = new StrictViewFragment(); 910f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount fragment1.setLayoutId(R.layout.scene1); 911f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 912f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount fragment2.setLayoutId(R.layout.fragment_a); 913f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount 914f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount mActivityRule.runOnUiThread(new Runnable() { 915f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount @Override 916f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount public void run() { 917f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount fm.beginTransaction() 918f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount .add(R.id.fragmentContainer, fragment1) 919fda5be2466024a656152015c45a7681361d399bbGeorge Mount .setReorderingAllowed(false) 920f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount .addToBackStack(null) 921f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount .commit(); 922f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount fm.beginTransaction() 923f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount .add(R.id.squareContainer, fragment2) 924fda5be2466024a656152015c45a7681361d399bbGeorge Mount .setReorderingAllowed(false) 925f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount .addToBackStack(null) 926f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount .commit(); 927f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount fm.executePendingTransactions(); 928f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount } 929f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount }); 930f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 931f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount assertNotNull(findViewById(R.id.textA)); 932f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount } 933f284a0dc76d73ef7132dd1187a43d9a7ad0258deGeorge Mount 9341780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount // Ensure that there is no problem if the child fragment manager is used before 9351780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount // the View has been added. 9361780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount @Test 9371780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount public void childFragmentManager() throws Throwable { 9381780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 9391780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount ViewGroup container = (ViewGroup) 9401780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 9411780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 9421780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 9431780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount final StrictViewFragment fragment1 = new ParentFragment(); 9441780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount fragment1.setLayoutId(R.layout.double_container); 9451780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 9461780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount fm.beginTransaction() 9471780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount .add(R.id.fragmentContainer, fragment1) 9481780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount .addToBackStack(null) 9491780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount .commit(); 9501780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 9511780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 9521780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 9531780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount FragmentTestUtil.assertChildren(container, fragment1); 9541780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount ViewGroup innerContainer = (ViewGroup) 9551780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount fragment1.getView().findViewById(R.id.fragmentContainer1); 9561780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 9571780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount Fragment fragment2 = fragment1.getChildFragmentManager().findFragmentByTag("inner"); 9581780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount FragmentTestUtil.assertChildren(innerContainer, fragment2); 9591780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount } 9601780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 961fda5be2466024a656152015c45a7681361d399bbGeorge Mount // Popping the backstack with ordered fragments should execute the operations together. 96237e785570b316db48ae8843d101f383899ea4d61George Mount // When a non-backstack fragment will be raised, it should not be destroyed. 96337e785570b316db48ae8843d101f383899ea4d61George Mount @Test 96437e785570b316db48ae8843d101f383899ea4d61George Mount public void popToNonBackStackFragment() throws Throwable { 96537e785570b316db48ae8843d101f383899ea4d61George Mount FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); 96637e785570b316db48ae8843d101f383899ea4d61George Mount final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager(); 96737e785570b316db48ae8843d101f383899ea4d61George Mount 96837e785570b316db48ae8843d101f383899ea4d61George Mount final SimpleViewFragment fragment1 = new SimpleViewFragment(); 96937e785570b316db48ae8843d101f383899ea4d61George Mount 97037e785570b316db48ae8843d101f383899ea4d61George Mount fm.beginTransaction() 97137e785570b316db48ae8843d101f383899ea4d61George Mount .add(R.id.fragmentContainer, fragment1) 97237e785570b316db48ae8843d101f383899ea4d61George Mount .commit(); 97337e785570b316db48ae8843d101f383899ea4d61George Mount 97437e785570b316db48ae8843d101f383899ea4d61George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 97537e785570b316db48ae8843d101f383899ea4d61George Mount 97637e785570b316db48ae8843d101f383899ea4d61George Mount final SimpleViewFragment fragment2 = new SimpleViewFragment(); 97737e785570b316db48ae8843d101f383899ea4d61George Mount 97837e785570b316db48ae8843d101f383899ea4d61George Mount fm.beginTransaction() 97937e785570b316db48ae8843d101f383899ea4d61George Mount .replace(R.id.fragmentContainer, fragment2) 98037e785570b316db48ae8843d101f383899ea4d61George Mount .addToBackStack("two") 98137e785570b316db48ae8843d101f383899ea4d61George Mount .commit(); 98237e785570b316db48ae8843d101f383899ea4d61George Mount 98337e785570b316db48ae8843d101f383899ea4d61George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 98437e785570b316db48ae8843d101f383899ea4d61George Mount 98537e785570b316db48ae8843d101f383899ea4d61George Mount final SimpleViewFragment fragment3 = new SimpleViewFragment(); 98637e785570b316db48ae8843d101f383899ea4d61George Mount 98737e785570b316db48ae8843d101f383899ea4d61George Mount fm.beginTransaction() 98837e785570b316db48ae8843d101f383899ea4d61George Mount .replace(R.id.fragmentContainer, fragment3) 98937e785570b316db48ae8843d101f383899ea4d61George Mount .addToBackStack("three") 99037e785570b316db48ae8843d101f383899ea4d61George Mount .commit(); 99137e785570b316db48ae8843d101f383899ea4d61George Mount 99237e785570b316db48ae8843d101f383899ea4d61George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 99337e785570b316db48ae8843d101f383899ea4d61George Mount 9940846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount assertEquals(1, fragment1.onCreateViewCount); 9950846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount assertEquals(1, fragment2.onCreateViewCount); 9960846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount assertEquals(1, fragment3.onCreateViewCount); 9970846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount 99837e785570b316db48ae8843d101f383899ea4d61George Mount FragmentTestUtil.popBackStackImmediate(mActivityRule, "two", 99937e785570b316db48ae8843d101f383899ea4d61George Mount FragmentManager.POP_BACK_STACK_INCLUSIVE); 100037e785570b316db48ae8843d101f383899ea4d61George Mount 100137e785570b316db48ae8843d101f383899ea4d61George Mount ViewGroup container = (ViewGroup) 100237e785570b316db48ae8843d101f383899ea4d61George Mount mActivityRule.getActivity().findViewById(R.id.fragmentContainer); 100337e785570b316db48ae8843d101f383899ea4d61George Mount 100437e785570b316db48ae8843d101f383899ea4d61George Mount FragmentTestUtil.assertChildren(container, fragment1); 10050846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount 10060846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount assertEquals(2, fragment1.onCreateViewCount); 10070846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount assertEquals(1, fragment2.onCreateViewCount); 10080846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount assertEquals(1, fragment3.onCreateViewCount); 100937e785570b316db48ae8843d101f383899ea4d61George Mount } 101037e785570b316db48ae8843d101f383899ea4d61George Mount 1011990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount private View findViewById(int viewId) { 1012990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount return mActivityRule.getActivity().findViewById(viewId); 1013990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 1014990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 1015990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount private void assertChildren(ViewGroup container, Fragment... fragments) { 1016990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount final int numFragments = fragments == null ? 0 : fragments.length; 1017990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals("There aren't the correct number of fragment Views in its container", 1018990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount numFragments, container.getChildCount()); 1019990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount for (int i = 0; i < numFragments; i++) { 1020990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount assertEquals("Wrong Fragment View order for [" + i + "]", container.getChildAt(i), 1021990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount fragments[i].getView()); 1022990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 1023990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 1024aa3a5538c003c6098185d1c948e22054e2f27488George Mount 1025aa3a5538c003c6098185d1c948e22054e2f27488George Mount public static class InvisibleFragment extends StrictViewFragment { 1026aa3a5538c003c6098185d1c948e22054e2f27488George Mount public int visibility = View.INVISIBLE; 1027aa3a5538c003c6098185d1c948e22054e2f27488George Mount 1028aa3a5538c003c6098185d1c948e22054e2f27488George Mount @Override 1029aa3a5538c003c6098185d1c948e22054e2f27488George Mount public void onViewCreated(View view, Bundle savedInstanceState) { 1030aa3a5538c003c6098185d1c948e22054e2f27488George Mount view.setVisibility(visibility); 1031aa3a5538c003c6098185d1c948e22054e2f27488George Mount super.onViewCreated(view, savedInstanceState); 1032aa3a5538c003c6098185d1c948e22054e2f27488George Mount } 1033aa3a5538c003c6098185d1c948e22054e2f27488George Mount } 10341780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 10351780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount public static class ParentFragment extends StrictViewFragment { 10361780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount public ParentFragment() { 10371780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount setLayoutId(R.layout.double_container); 10381780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount } 10391780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 10401780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount @Override 10411780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount public View onCreateView(LayoutInflater inflater, ViewGroup container, 10421780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount Bundle savedInstanceState) { 10431780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount View view = super.onCreateView(inflater, container, savedInstanceState); 10441780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount final StrictViewFragment fragment2 = new StrictViewFragment(); 10451780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount fragment2.setLayoutId(R.layout.fragment_a); 10461780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount 10471780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount getChildFragmentManager().beginTransaction() 10481780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount .add(R.id.fragmentContainer1, fragment2, "inner") 10491780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount .addToBackStack(null) 10501780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount .commit(); 10511780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount getChildFragmentManager().executePendingTransactions(); 10521780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount return view; 10531780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount } 10541780bc94be2d26adc4a9c2daa2aed87cb535fbcfGeorge Mount } 105537e785570b316db48ae8843d101f383899ea4d61George Mount 105637e785570b316db48ae8843d101f383899ea4d61George Mount public static class SimpleViewFragment extends Fragment { 10570846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount public int onCreateViewCount; 10580846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount 105937e785570b316db48ae8843d101f383899ea4d61George Mount @Nullable 106037e785570b316db48ae8843d101f383899ea4d61George Mount @Override 106137e785570b316db48ae8843d101f383899ea4d61George Mount public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 106237e785570b316db48ae8843d101f383899ea4d61George Mount @Nullable Bundle savedInstanceState) { 10630846eb5fb991505a85c8288b52d7fa58ebade9b2George Mount onCreateViewCount++; 106437e785570b316db48ae8843d101f383899ea4d61George Mount return inflater.inflate(R.layout.fragment_a, container, false); 106537e785570b316db48ae8843d101f383899ea4d61George Mount } 106637e785570b316db48ae8843d101f383899ea4d61George Mount } 1067990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount} 1068