1package com.xtremelabs.robolectric.tester.android.util;
2
3import android.support.v4.app.Fragment;
4import android.support.v4.app.FragmentTransaction;
5import android.view.View;
6
7public class TestFragmentTransaction extends FragmentTransaction {
8
9    private TestFragmentManager fragmentManager;
10    private int containerViewId;
11    private String tag;
12    private Fragment fragment;
13    private boolean replacing;
14    private boolean starting;
15    private boolean removing;
16    private boolean addedToBackStack;
17    private boolean hiding;
18    private boolean showing;
19    private String backStackName;
20    private int lastEnterAnimation;
21    private int lastExitAnimation;
22    private Fragment fragmentToRemove;
23    private boolean committedAllowingStateLoss;
24    private Fragment fragmentToAttach;
25
26    public TestFragmentTransaction(TestFragmentManager fragmentManager) {
27        this.fragmentManager = fragmentManager;
28    }
29
30    @Override
31    public FragmentTransaction add(Fragment fragment, String tag) {
32        return add(View.NO_ID, fragment, tag);
33    }
34
35    @Override
36    public FragmentTransaction add(int containerViewId, Fragment fragment) {
37        return add(containerViewId, fragment, null);
38    }
39
40    @Override
41    public FragmentTransaction add(int containerViewId, Fragment fragment, String tag) {
42        this.containerViewId = containerViewId;
43        this.tag = tag;
44        this.fragment = fragment;
45        this.starting = true;
46        return this;
47    }
48
49    @Override
50    public FragmentTransaction replace(int containerViewId, Fragment fragment) {
51        return replace(containerViewId, fragment, null);
52    }
53
54    @Override
55    public FragmentTransaction replace(int containerViewId, Fragment fragment, String tag) {
56        this.containerViewId = containerViewId;
57        this.tag = tag;
58        this.fragment = fragment;
59        this.replacing = true;
60        this.starting = true;
61        return this;
62    }
63
64    @Override
65    public FragmentTransaction remove(Fragment fragment) {
66        this.fragmentToRemove = fragment;
67        this.removing = true;
68        return this;
69    }
70
71    @Override
72    public FragmentTransaction hide(Fragment fragment) {
73        this.fragment = fragment;
74        this.hiding = true;
75        this.showing = false;
76        return this;
77    }
78
79    @Override
80    public FragmentTransaction show(Fragment fragment) {
81        this.fragment = fragment;
82        this.showing = true;
83        this.hiding = false;
84        return this;
85    }
86
87    @Override
88    public FragmentTransaction detach(Fragment fragment) {
89        return null;
90    }
91
92    @Override
93    public FragmentTransaction attach(Fragment fragment) {
94        fragmentToAttach = fragment;
95        return this;
96    }
97
98    @Override
99    public boolean isEmpty() {
100        return false;
101    }
102
103    @Override
104    public FragmentTransaction setCustomAnimations(int enter, int exit) {
105        this.lastEnterAnimation = enter;
106        this.lastExitAnimation = exit;
107        return this;
108    }
109
110    @Override
111    public FragmentTransaction setCustomAnimations(int enter, int exit, int popEnter, int popExit) {
112        return null;
113    }
114
115    @Override
116    public FragmentTransaction setTransition(int transit) {
117        return null;
118    }
119
120    @Override
121    public FragmentTransaction setTransitionStyle(int styleRes) {
122        return null;
123    }
124
125    @Override
126    public FragmentTransaction addToBackStack(String name) {
127        backStackName = name;
128        addedToBackStack = true;
129        return this;
130    }
131
132    @Override
133    public boolean isAddToBackStackAllowed() {
134        return false;
135    }
136
137    @Override
138    public FragmentTransaction disallowAddToBackStack() {
139        return null;
140    }
141
142    @Override
143    public FragmentTransaction setBreadCrumbTitle(int res) {
144        return null;
145    }
146
147    @Override
148    public FragmentTransaction setBreadCrumbTitle(CharSequence text) {
149        return null;
150    }
151
152    @Override
153    public FragmentTransaction setBreadCrumbShortTitle(int res) {
154        return null;
155    }
156
157    @Override
158    public FragmentTransaction setBreadCrumbShortTitle(CharSequence text) {
159        return null;
160    }
161
162    @Override
163    public int commit() {
164        fragmentManager.commitLater(this);
165        return 0;
166    }
167
168    @Override
169    public int commitAllowingStateLoss() {
170        committedAllowingStateLoss = true;
171        return commit();
172    }
173
174    public boolean isAddedToBackStack() {
175        return addedToBackStack;
176    }
177
178    public int getContainerViewId() {
179        return containerViewId;
180    }
181
182    public String getTag() {
183        return tag;
184    }
185
186    public Fragment getFragment() {
187        return fragment;
188    }
189
190    public boolean isReplacing() {
191        return replacing;
192    }
193
194    public boolean isStarting() {
195        return starting;
196    }
197
198    public boolean isRemoving() {
199        return removing;
200    }
201
202    public boolean isHiding() {
203        return hiding;
204    }
205
206    public boolean isShowing() {
207        return showing;
208    }
209
210    public String getBackStackName() {
211        return backStackName;
212    }
213
214    public int getLastEnterAnimation() {
215        return lastEnterAnimation;
216    }
217
218    public int getLastExitAnimation() {
219        return lastExitAnimation;
220    }
221
222    public TestFragmentManager getManager() {
223        return fragmentManager;
224    }
225
226    public Fragment getFragmentToRemove() {
227        return fragmentToRemove;
228    }
229
230    public boolean isCommittedAllowingStateLoss() {
231        return committedAllowingStateLoss;
232    }
233
234    public boolean isAttaching() {
235        return fragmentToAttach != null;
236    }
237
238    public Fragment getFragmentToAttach() {
239        return fragmentToAttach;
240    }
241}
242