1a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount/*
2a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * Copyright (C) 2015 The Android Open Source Project
3a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount *
4a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * you may not use this file except in compliance with the License.
6a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * You may obtain a copy of the License at
7a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount *
8a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount *
10a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * Unless required by applicable law or agreed to in writing, software
11a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * See the License for the specific language governing permissions and
14a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount * limitations under the License.
15a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount */
16a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountpackage android.support.v4.app;
17a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
18a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mountimport android.os.Build.VERSION;
19a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mountimport android.os.Build.VERSION_CODES;
20a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountimport android.support.v4.app.test.FragmentTestActivity;
21a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountimport android.support.v4.app.test.FragmentTestActivity.TestFragment;
22a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountimport android.support.v4.test.R;
23a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountimport android.support.v4.view.ViewCompat;
24a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountimport android.test.ActivityInstrumentationTestCase2;
25daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banesimport android.test.suitebuilder.annotation.MediumTest;
26a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountimport android.view.View;
27a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
28daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banes@MediumTest
29a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mountpublic class FragmentTransitionTest extends
30a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        ActivityInstrumentationTestCase2<FragmentTestActivity> {
31a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private TestFragment mStartFragment;
32a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private TestFragment mMidFragment;
33a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private TestFragment mEndFragment;
34a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private FragmentTestActivity mActivity;
35a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
36a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public FragmentTransitionTest() {
37a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        super(FragmentTestActivity.class);
38a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
39a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
40a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    @Override
41a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    protected void setUp() throws Exception {
42a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        super.setUp();
43a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mStartFragment = null;
44a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mMidFragment = null;
45a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mEndFragment = null;
46a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mActivity = getActivity();
47a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
48a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
49a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public void testFragmentTransition() throws Throwable {
50a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
51a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount            return;
52a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        }
53a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        launchStartFragment();
54a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
55a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
56a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
57a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                final View sharedElement = mActivity.findViewById(R.id.hello);
58a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                assertEquals("source", ViewCompat.getTransitionName(sharedElement));
59a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
60a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment = TestFragment.create(R.layout.fragment_end);
61a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
62a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
63a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addSharedElement(sharedElement, "destination")
64a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
65a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
66a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
67a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
68a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
69a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mEndFragment, TestFragment.ENTER);
70a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.ENTER));
71a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mStartFragment.wasEndCalled(TestFragment.EXIT));
72a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.SHARED_ELEMENT_ENTER));
73a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
74a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
75a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
76a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                final View textView = mActivity.findViewById(R.id.hello);
77a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                assertEquals("destination", ViewCompat.getTransitionName(textView));
78a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().popBackStack();
79a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
80a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
81a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
82a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mStartFragment, TestFragment.REENTER);
83a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mStartFragment.wasEndCalled(TestFragment.REENTER));
84a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.RETURN));
85a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
86a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
87a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public void testFirstOutLastInTransition() throws Throwable {
88a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
89a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount            return;
90a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        }
91a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        launchStartFragment();
92a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
93a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
94a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
95a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mMidFragment = TestFragment.create(R.layout.fragment_middle);
96a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment = TestFragment.create(R.layout.fragment_end);
97a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
98a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mMidFragment)
99a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
100a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
101a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
102a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
103a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
104a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
105a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mEndFragment, TestFragment.ENTER);
106a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.ENTER));
107a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.EXIT));
108a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.RETURN));
109a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.REENTER));
110a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
111a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mStartFragment.wasEndCalled(TestFragment.EXIT));
112a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.ENTER));
113a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.RETURN));
114a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.REENTER));
115a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
116a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.ENTER));
117a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.EXIT));
118a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.REENTER));
119a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.RETURN));
120a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
121a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mStartFragment.clearNotifications();
122a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mEndFragment.clearNotifications();
123a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
124a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
125a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
126a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
127a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().popBackStack();
128a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
129a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
130a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
131a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mEndFragment, TestFragment.RETURN);
132a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.RETURN));
133a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.ENTER));
134a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.EXIT));
135a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.REENTER));
136a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.RETURN));
137a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
138a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mStartFragment.wasStartCalled(TestFragment.REENTER));
139a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.ENTER));
140a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.EXIT));
141a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.RETURN));
142a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
143a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
144a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public void testPopTwo() throws Throwable {
145a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
146a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount            return;
147a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        }
148a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        launchStartFragment();
149a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
150a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
151a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
152a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mMidFragment = TestFragment.create(R.layout.fragment_middle);
153a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
154a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mMidFragment)
155a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
156a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
157a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
158a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
159a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
160a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mMidFragment, TestFragment.ENTER);
161a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
162a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
163a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
164a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment = TestFragment.create(R.layout.fragment_end);
165a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
166a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
167a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
168a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
169a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
170a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
171a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
172a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mEndFragment, TestFragment.ENTER);
173a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.ENTER));
174a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.EXIT));
175a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.RETURN));
176a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.REENTER));
177a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
178a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mStartFragment.wasEndCalled(TestFragment.EXIT));
179a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.ENTER));
180a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.RETURN));
181a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.REENTER));
182a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
183a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mMidFragment.wasStartCalled(TestFragment.ENTER));
184a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mMidFragment.wasStartCalled(TestFragment.EXIT));
185a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.REENTER));
186a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.RETURN));
187a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
188a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mStartFragment.clearNotifications();
189a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mMidFragment.clearNotifications();
190a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mEndFragment.clearNotifications();
191a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
192a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
193a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
194a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
195a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                FragmentManager fm = mActivity.getSupportFragmentManager();
196a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                int id = fm.getBackStackEntryAt(0).getId();
197a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                fm.popBackStack(id, FragmentManager.POP_BACK_STACK_INCLUSIVE);
198a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                fm.executePendingTransactions();
199a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
200a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
201a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForEnd(mEndFragment, TestFragment.RETURN);
202a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mEndFragment.wasEndCalled(TestFragment.RETURN));
203a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
204a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.ENTER));
205a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.EXIT));
206a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.REENTER));
207a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.RETURN));
208a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
209a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertTrue(mStartFragment.wasStartCalled(TestFragment.REENTER));
210a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.ENTER));
211a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.EXIT));
212a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.RETURN));
213a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
214a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
215a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public void testNullTransition() throws Throwable {
216a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
217a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount            return;
218a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        }
219a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        getInstrumentation().waitForIdleSync();
220a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
221a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
222a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
223a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mStartFragment = TestFragment.create(R.layout.fragment_start);
224a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mStartFragment.clearTransitions();
225a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
226a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mStartFragment)
227a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
228a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
229a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
230a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
231a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForStart(mStartFragment, TestFragment.ENTER);
232a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        // No transitions
233a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.ENTER));
234a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
235a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
236a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
237a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
238a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mMidFragment = TestFragment.create(R.layout.fragment_middle);
239a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment = TestFragment.create(R.layout.fragment_end);
240a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment.clearTransitions();
241a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
242a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mMidFragment)
243a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
244a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
245a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
246a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
247a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
248a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
249a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForStart(mEndFragment, TestFragment.ENTER);
250a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.ENTER));
251a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.EXIT));
252a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.RETURN));
253a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.REENTER));
254a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
255a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.EXIT));
256a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.ENTER));
257a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.RETURN));
258a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasEndCalled(TestFragment.REENTER));
259a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
260a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.ENTER));
261a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.EXIT));
262a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.REENTER));
263a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.RETURN));
264a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
265a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
266a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
267a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
268a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().popBackStack();
269a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
270a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
271a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
272a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForStart(mEndFragment, TestFragment.RETURN);
273a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasEndCalled(TestFragment.RETURN));
274a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.ENTER));
275a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.EXIT));
276a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.REENTER));
277a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mMidFragment.wasStartCalled(TestFragment.RETURN));
278a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
279a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.REENTER));
280a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.ENTER));
281a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.EXIT));
282a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.RETURN));
283a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
284a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
285a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public void testRemoveAdded() throws Throwable {
286a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
287a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount            return;
288a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        }
289a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        launchStartFragment();
290a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
291a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
292a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
293a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment = TestFragment.create(R.layout.fragment_end);
294a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
295a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
296a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mStartFragment)
297a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
298a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
299a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
300a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
301a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
302a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
303a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        assertTrue(waitForEnd(mEndFragment, TestFragment.ENTER));
304a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
305a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
306a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
307a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().popBackStack();
308a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
309a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
310a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
311a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        assertTrue(waitForEnd(mStartFragment, TestFragment.REENTER));
312a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
313a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
314a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    public void testAddRemoved() throws Throwable {
315a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
316a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount            return;
317a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        }
318a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        launchStartFragment();
319a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
320a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
321a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
322a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mEndFragment = TestFragment.create(R.layout.fragment_end);
323a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
324a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mEndFragment)
325a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mStartFragment)
326a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .addToBackStack(null)
327a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
328a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
329a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
330a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
331a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForStart(mStartFragment, TestFragment.ENTER);
332a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.ENTER));
333a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.EXIT));
334a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasStartCalled(TestFragment.ENTER));
335a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasStartCalled(TestFragment.EXIT));
336a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
337a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
338a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
339a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().popBackStack();
340a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
341a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
342a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
343a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        waitForStart(mStartFragment, TestFragment.REENTER);
344a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.REENTER));
345a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mStartFragment.wasStartCalled(TestFragment.RETURN));
346a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasStartCalled(TestFragment.REENTER));
347a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        assertFalse(mEndFragment.wasStartCalled(TestFragment.RETURN));
348a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
349a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
350a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private void launchStartFragment() throws Throwable {
351a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        getInstrumentation().waitForIdleSync();
352a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        runTestOnUiThread(new Runnable() {
353a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            @Override
354a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            public void run() {
355a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mStartFragment = TestFragment.create(R.layout.fragment_start);
356a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().beginTransaction()
357a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .replace(R.id.content, mStartFragment)
358a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                        .commit();
359a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount                mActivity.getSupportFragmentManager().executePendingTransactions();
360a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            }
361a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        });
362a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        assertTrue(waitForEnd(mStartFragment, TestFragment.ENTER));
363a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        mStartFragment.clearNotifications();
364a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
365a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
366a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private boolean waitForStart(TestFragment fragment, int key) throws InterruptedException {
367a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        boolean started = fragment.waitForStart(key);
368a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        getInstrumentation().waitForIdleSync();
369a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        return started;
370a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
371a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount
372a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    private boolean waitForEnd(TestFragment fragment, int key) throws InterruptedException {
373a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        if (!waitForStart(fragment, key)) {
374a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount            return false;
375a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        }
376a0926f64b419cfd95b7d092f7bd6bee818ccc7e1George Mount        final boolean ended = fragment.waitForEnd(key);
377a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        getInstrumentation().waitForIdleSync();
378a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount        return ended;
379a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount    }
380a1f95ec10cc7e88dcc1c57c92ac5d0c37c2d9553George Mount}
381