BackStackRecord.java revision 128bb5c66d0b34c5a658c682deb3a0b9199b20c4
1cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn/*
2cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
3cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *
4cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
5cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * you may not use this file except in compliance with the License.
6cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * You may obtain a copy of the License at
7cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *
8cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
9cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *
10cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
11cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
12cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * See the License for the specific language governing permissions and
14cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * limitations under the License.
15cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn */
16cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
17cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornpackage android.support.v4.app;
18cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
194500be62dea3895a98336122a2944cc4ab024bc5George Mountimport android.os.Build;
20cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.os.Parcel;
21cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.os.Parcelable;
223a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackbornimport android.support.v4.util.LogWriter;
234500be62dea3895a98336122a2944cc4ab024bc5George Mountimport android.support.v4.util.Pair;
24cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.text.TextUtils;
25cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.util.Log;
264500be62dea3895a98336122a2944cc4ab024bc5George Mountimport android.view.View;
274500be62dea3895a98336122a2944cc4ab024bc5George Mountimport android.view.ViewGroup;
28cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
29cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport java.io.FileDescriptor;
30cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport java.io.PrintWriter;
31cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport java.util.ArrayList;
32cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
33cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornfinal class BackStackState implements Parcelable {
34cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final int[] mOps;
35cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final int mTransition;
36cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final int mTransitionStyle;
37cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final String mName;
38cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final int mIndex;
39cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final int mBreadCrumbTitleRes;
40cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final CharSequence mBreadCrumbTitleText;
41cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final int mBreadCrumbShortTitleRes;
42cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final CharSequence mBreadCrumbShortTitleText;
434500be62dea3895a98336122a2944cc4ab024bc5George Mount    final int mCustomTransition;
444500be62dea3895a98336122a2944cc4ab024bc5George Mount    final int mSceneRoot;
454500be62dea3895a98336122a2944cc4ab024bc5George Mount    final ArrayList<String> mSharedElementSourceNames;
464500be62dea3895a98336122a2944cc4ab024bc5George Mount    final ArrayList<String> mSharedElementTargetNames;
47cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
48cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public BackStackState(FragmentManagerImpl fm, BackStackRecord bse) {
49cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        int numRemoved = 0;
50cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        BackStackRecord.Op op = bse.mHead;
51cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        while (op != null) {
52cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (op.removed != null) numRemoved += op.removed.size();
53cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op = op.next;
54cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
55df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        mOps = new int[bse.mNumOp*7 + numRemoved];
56cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
57cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (!bse.mAddToBackStack) {
58cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            throw new IllegalStateException("Not on back stack");
59cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
60cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
61cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op = bse.mHead;
62cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        int pos = 0;
63cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        while (op != null) {
64cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mOps[pos++] = op.cmd;
655506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            mOps[pos++] = op.fragment != null ? op.fragment.mIndex : -1;
66cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mOps[pos++] = op.enterAnim;
67cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mOps[pos++] = op.exitAnim;
68df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn            mOps[pos++] = op.popEnterAnim;
69df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn            mOps[pos++] = op.popExitAnim;
70cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (op.removed != null) {
71cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                final int N = op.removed.size();
72cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                mOps[pos++] = N;
73cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                for (int i=0; i<N; i++) {
74cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    mOps[pos++] = op.removed.get(i).mIndex;
75cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
76cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            } else {
77cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                mOps[pos++] = 0;
78cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
79cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op = op.next;
80cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
81cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mTransition = bse.mTransition;
82cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mTransitionStyle = bse.mTransitionStyle;
83cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mName = bse.mName;
84cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mIndex = bse.mIndex;
85cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleRes = bse.mBreadCrumbTitleRes;
86cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleText = bse.mBreadCrumbTitleText;
87cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleRes = bse.mBreadCrumbShortTitleRes;
88cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleText = bse.mBreadCrumbShortTitleText;
894500be62dea3895a98336122a2944cc4ab024bc5George Mount        mCustomTransition = bse.mCustomTransition;
904500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSceneRoot = bse.mSceneRoot;
914500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSharedElementSourceNames = bse.mSharedElementSourceNames;
924500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSharedElementTargetNames = bse.mSharedElementTargetNames;
93cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
94cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
95cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public BackStackState(Parcel in) {
96cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mOps = in.createIntArray();
97cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mTransition = in.readInt();
98cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mTransitionStyle = in.readInt();
99cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mName = in.readString();
100cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mIndex = in.readInt();
101cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleRes = in.readInt();
102cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
103cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleRes = in.readInt();
104cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
1054500be62dea3895a98336122a2944cc4ab024bc5George Mount        mCustomTransition = in.readInt();
1064500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSceneRoot = in.readInt();
1074500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSharedElementSourceNames = in.createStringArrayList();
1084500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSharedElementTargetNames = in.createStringArrayList();
109cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
110cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
111cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public BackStackRecord instantiate(FragmentManagerImpl fm) {
112cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        BackStackRecord bse = new BackStackRecord(fm);
113cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        int pos = 0;
1143a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        int num = 0;
115cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        while (pos < mOps.length) {
116cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            BackStackRecord.Op op = new BackStackRecord.Op();
117cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op.cmd = mOps[pos++];
118cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG,
1193a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    "Instantiate " + bse + " op #" + num + " base fragment #" + mOps[pos]);
1205506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            int findex = mOps[pos++];
1215506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            if (findex >= 0) {
1225506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                Fragment f = fm.mActive.get(findex);
1235506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                op.fragment = f;
1245506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            } else {
1255506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                op.fragment = null;
1265506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            }
127cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op.enterAnim = mOps[pos++];
128cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op.exitAnim = mOps[pos++];
129df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn            op.popEnterAnim = mOps[pos++];
130df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn            op.popExitAnim = mOps[pos++];
131cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            final int N = mOps[pos++];
132cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (N > 0) {
133cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                op.removed = new ArrayList<Fragment>(N);
134cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                for (int i=0; i<N; i++) {
135cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG,
1363a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                            "Instantiate " + bse + " set remove fragment #" + mOps[pos]);
137cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment r = fm.mActive.get(mOps[pos++]);
138cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    op.removed.add(r);
139cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
140cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
141cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            bse.addOp(op);
1423a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            num++;
143cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
144cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mTransition = mTransition;
145cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mTransitionStyle = mTransitionStyle;
146cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mName = mName;
147cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mIndex = mIndex;
148cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mAddToBackStack = true;
149cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mBreadCrumbTitleRes = mBreadCrumbTitleRes;
150cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mBreadCrumbTitleText = mBreadCrumbTitleText;
151cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mBreadCrumbShortTitleRes = mBreadCrumbShortTitleRes;
152cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.mBreadCrumbShortTitleText = mBreadCrumbShortTitleText;
1534500be62dea3895a98336122a2944cc4ab024bc5George Mount        bse.mCustomTransition = mCustomTransition;
1544500be62dea3895a98336122a2944cc4ab024bc5George Mount        bse.mSceneRoot = mSceneRoot;
1554500be62dea3895a98336122a2944cc4ab024bc5George Mount        bse.mSharedElementSourceNames = mSharedElementSourceNames;
1564500be62dea3895a98336122a2944cc4ab024bc5George Mount        bse.mSharedElementTargetNames = mSharedElementTargetNames;
157cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bse.bumpBackStackNesting(1);
158cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return bse;
159cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
160cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
161cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int describeContents() {
162cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return 0;
163cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
164cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
165cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public void writeToParcel(Parcel dest, int flags) {
166cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeIntArray(mOps);
167cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeInt(mTransition);
168cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeInt(mTransitionStyle);
169cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeString(mName);
170cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeInt(mIndex);
171cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeInt(mBreadCrumbTitleRes);
172cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        TextUtils.writeToParcel(mBreadCrumbTitleText, dest, 0);
173cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        dest.writeInt(mBreadCrumbShortTitleRes);
174cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        TextUtils.writeToParcel(mBreadCrumbShortTitleText, dest, 0);
1754500be62dea3895a98336122a2944cc4ab024bc5George Mount        dest.writeInt(mCustomTransition);
1764500be62dea3895a98336122a2944cc4ab024bc5George Mount        dest.writeInt(mSceneRoot);
1774500be62dea3895a98336122a2944cc4ab024bc5George Mount        dest.writeStringList(mSharedElementSourceNames);
1784500be62dea3895a98336122a2944cc4ab024bc5George Mount        dest.writeStringList(mSharedElementTargetNames);
179cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
180cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
181cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public static final Parcelable.Creator<BackStackState> CREATOR
182cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            = new Parcelable.Creator<BackStackState>() {
183cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        public BackStackState createFromParcel(Parcel in) {
184cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            return new BackStackState(in);
185cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
186cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
187cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        public BackStackState[] newArray(int size) {
188cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            return new BackStackState[size];
189cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
190cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    };
191cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn}
192cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
193cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn/**
194cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * @hide Entry of an operation on the fragment back stack.
195cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn */
196cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornfinal class BackStackRecord extends FragmentTransaction implements
197cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        FragmentManager.BackStackEntry, Runnable {
1983a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    static final String TAG = FragmentManagerImpl.TAG;
199cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
200cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    final FragmentManagerImpl mManager;
201cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
202cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final int OP_NULL = 0;
203cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final int OP_ADD = 1;
204cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final int OP_REPLACE = 2;
205cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final int OP_REMOVE = 3;
206cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final int OP_HIDE = 4;
207cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final int OP_SHOW = 5;
208eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static final int OP_DETACH = 6;
209eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static final int OP_ATTACH = 7;
210cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
211cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    static final class Op {
212cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op next;
213cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op prev;
214cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        int cmd;
215cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Fragment fragment;
216cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        int enterAnim;
217cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        int exitAnim;
218df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        int popEnterAnim;
219df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        int popExitAnim;
220cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        ArrayList<Fragment> removed;
221cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
222cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
223cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    Op mHead;
224cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    Op mTail;
225cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mNumOp;
226cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mEnterAnim;
227cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mExitAnim;
228df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn    int mPopEnterAnim;
229df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn    int mPopExitAnim;
230cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mTransition;
231cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mTransitionStyle;
232cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    boolean mAddToBackStack;
233cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    boolean mAllowAddToBackStack = true;
234cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    String mName;
235cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    boolean mCommitted;
2363a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    int mIndex = -1;
237cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
238cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mBreadCrumbTitleRes;
239cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    CharSequence mBreadCrumbTitleText;
240cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int mBreadCrumbShortTitleRes;
241cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    CharSequence mBreadCrumbShortTitleText;
242cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
2434500be62dea3895a98336122a2944cc4ab024bc5George Mount    int mCustomTransition;
2444500be62dea3895a98336122a2944cc4ab024bc5George Mount    int mSceneRoot;
2454500be62dea3895a98336122a2944cc4ab024bc5George Mount    ArrayList<String> mSharedElementSourceNames;
2464500be62dea3895a98336122a2944cc4ab024bc5George Mount    ArrayList<String> mSharedElementTargetNames;
2474500be62dea3895a98336122a2944cc4ab024bc5George Mount
2483a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    @Override
2493a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    public String toString() {
2503a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        StringBuilder sb = new StringBuilder(128);
2513a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        sb.append("BackStackEntry{");
2523a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        sb.append(Integer.toHexString(System.identityHashCode(this)));
2533a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        if (mIndex >= 0) {
2543a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            sb.append(" #");
2553a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            sb.append(mIndex);
256df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        }
2573a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        if (mName != null) {
2583a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            sb.append(" ");
2593a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            sb.append(mName);
260cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
2613a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        sb.append("}");
2623a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        return sb.toString();
2633a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    }
2643a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn
2653a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
2663a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        dump(prefix, writer, true);
2673a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    }
2683a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn
2693a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn    public void dump(String prefix, PrintWriter writer, boolean full) {
2703a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        if (full) {
2713a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            writer.print(prefix); writer.print("mName="); writer.print(mName);
2723a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    writer.print(" mIndex="); writer.print(mIndex);
2733a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    writer.print(" mCommitted="); writer.println(mCommitted);
2743a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            if (mTransition != FragmentTransaction.TRANSIT_NONE) {
2753a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                writer.print(prefix); writer.print("mTransition=#");
2763a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(Integer.toHexString(mTransition));
2773a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(" mTransitionStyle=#");
2783a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.println(Integer.toHexString(mTransitionStyle));
2793a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            }
2803a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            if (mEnterAnim != 0 || mExitAnim !=0) {
2813a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                writer.print(prefix); writer.print("mEnterAnim=#");
2823a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(Integer.toHexString(mEnterAnim));
2833a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(" mExitAnim=#");
2843a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.println(Integer.toHexString(mExitAnim));
2853a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            }
2863a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            if (mPopEnterAnim != 0 || mPopExitAnim !=0) {
2873a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                writer.print(prefix); writer.print("mPopEnterAnim=#");
2883a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(Integer.toHexString(mPopEnterAnim));
2893a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(" mPopExitAnim=#");
2903a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.println(Integer.toHexString(mPopExitAnim));
2913a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            }
2923a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            if (mBreadCrumbTitleRes != 0 || mBreadCrumbTitleText != null) {
2933a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                writer.print(prefix); writer.print("mBreadCrumbTitleRes=#");
2943a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(Integer.toHexString(mBreadCrumbTitleRes));
2953a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(" mBreadCrumbTitleText=");
2963a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.println(mBreadCrumbTitleText);
2973a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            }
2983a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            if (mBreadCrumbShortTitleRes != 0 || mBreadCrumbShortTitleText != null) {
2993a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                writer.print(prefix); writer.print("mBreadCrumbShortTitleRes=#");
3003a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(Integer.toHexString(mBreadCrumbShortTitleRes));
3013a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(" mBreadCrumbShortTitleText=");
3023a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.println(mBreadCrumbShortTitleText);
3033a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            }
304cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
305cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
306cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mHead != null) {
307cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            writer.print(prefix); writer.println("Operations:");
308cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            String innerPrefix = prefix + "    ";
309cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            Op op = mHead;
310cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            int num = 0;
311cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            while (op != null) {
3123a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                String cmdStr;
3133a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                switch (op.cmd) {
3143a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_NULL: cmdStr="NULL"; break;
3153a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_ADD: cmdStr="ADD"; break;
3163a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_REPLACE: cmdStr="REPLACE"; break;
3173a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_REMOVE: cmdStr="REMOVE"; break;
3183a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_HIDE: cmdStr="HIDE"; break;
3193a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_SHOW: cmdStr="SHOW"; break;
3203a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_DETACH: cmdStr="DETACH"; break;
3213a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    case OP_ATTACH: cmdStr="ATTACH"; break;
3223a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    default: cmdStr="cmd=" + op.cmd; break;
323df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn                }
3243a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                writer.print(prefix); writer.print("  Op #"); writer.print(num);
3253a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(": "); writer.print(cmdStr);
3263a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(" "); writer.println(op.fragment);
3273a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                if (full) {
3283a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    if (op.enterAnim != 0 || op.exitAnim != 0) {
3293a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(prefix); writer.print("enterAnim=#");
3303a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.print(Integer.toHexString(op.enterAnim));
3313a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.print(" exitAnim=#");
3323a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.println(Integer.toHexString(op.exitAnim));
3333a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    }
3343a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    if (op.popEnterAnim != 0 || op.popExitAnim != 0) {
3353a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                        writer.print(prefix); writer.print("popEnterAnim=#");
3363a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.print(Integer.toHexString(op.popEnterAnim));
3373a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.print(" popExitAnim=#");
3383a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.println(Integer.toHexString(op.popExitAnim));
3393a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                    }
340cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
341cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                if (op.removed != null && op.removed.size() > 0) {
342cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    for (int i=0; i<op.removed.size(); i++) {
343cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        writer.print(innerPrefix);
344cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        if (op.removed.size() == 1) {
345cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            writer.print("Removed: ");
346cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        } else {
3473a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                            if (i == 0) {
3483a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                                writer.println("Removed:");
3493a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                            }
3503a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                            writer.print(innerPrefix); writer.print("  #"); writer.print(i);
351cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                                    writer.print(": ");
352cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        }
353cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        writer.println(op.removed.get(i));
354cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    }
355cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
356cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                op = op.next;
3573a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn                num++;
358cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
359cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
360cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
361cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
362cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public BackStackRecord(FragmentManagerImpl manager) {
363cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mManager = manager;
364cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
365cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
366cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int getId() {
367cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mIndex;
368cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
369cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
370cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int getBreadCrumbTitleRes() {
371cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mBreadCrumbTitleRes;
372cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
373cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
374cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int getBreadCrumbShortTitleRes() {
375cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mBreadCrumbShortTitleRes;
376cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
377cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
378cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public CharSequence getBreadCrumbTitle() {
379cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mBreadCrumbTitleRes != 0) {
380cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            return mManager.mActivity.getText(mBreadCrumbTitleRes);
381cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
382cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mBreadCrumbTitleText;
383cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
384cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
385cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public CharSequence getBreadCrumbShortTitle() {
386cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mBreadCrumbShortTitleRes != 0) {
387cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            return mManager.mActivity.getText(mBreadCrumbShortTitleRes);
388cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
389cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mBreadCrumbShortTitleText;
390cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
391cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
392cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    void addOp(Op op) {
393cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mHead == null) {
394cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mHead = mTail = op;
395cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        } else {
396cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op.prev = mTail;
397cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mTail.next = op;
398cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mTail = op;
399cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
400cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.enterAnim = mEnterAnim;
401cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.exitAnim = mExitAnim;
402df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        op.popEnterAnim = mPopEnterAnim;
403df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        op.popExitAnim = mPopExitAnim;
404cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mNumOp++;
405cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
406cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
407cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction add(Fragment fragment, String tag) {
408cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        doAddOp(0, fragment, tag, OP_ADD);
409cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
410cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
411cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
412cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction add(int containerViewId, Fragment fragment) {
413cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        doAddOp(containerViewId, fragment, null, OP_ADD);
414cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
415cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
416cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
417cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction add(int containerViewId, Fragment fragment, String tag) {
418cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        doAddOp(containerViewId, fragment, tag, OP_ADD);
419cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
420cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
421cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
422cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) {
423cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        fragment.mFragmentManager = mManager;
424cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
425cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (tag != null) {
426cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (fragment.mTag != null && !tag.equals(fragment.mTag)) {
427cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                throw new IllegalStateException("Can't change tag of fragment "
428cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        + fragment + ": was " + fragment.mTag
429cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        + " now " + tag);
430cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
431cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            fragment.mTag = tag;
432cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
433cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
434cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (containerViewId != 0) {
435cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) {
436cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                throw new IllegalStateException("Can't change container ID of fragment "
437cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        + fragment + ": was " + fragment.mFragmentId
438cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        + " now " + containerViewId);
439cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
440cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            fragment.mContainerId = fragment.mFragmentId = containerViewId;
441cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
442cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
443cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = new Op();
444cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.cmd = opcmd;
445cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.fragment = fragment;
446cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        addOp(op);
447cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
448cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
449cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction replace(int containerViewId, Fragment fragment) {
450cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return replace(containerViewId, fragment, null);
451cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
452cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
453cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction replace(int containerViewId, Fragment fragment, String tag) {
454cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (containerViewId == 0) {
455cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            throw new IllegalArgumentException("Must use non-zero containerViewId");
456cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
457cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
458cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        doAddOp(containerViewId, fragment, tag, OP_REPLACE);
459cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
460cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
461cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
462cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction remove(Fragment fragment) {
463cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = new Op();
464cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.cmd = OP_REMOVE;
465cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.fragment = fragment;
466cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        addOp(op);
467cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
468cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
469cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
470cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
471cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction hide(Fragment fragment) {
472cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = new Op();
473cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.cmd = OP_HIDE;
474cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.fragment = fragment;
475cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        addOp(op);
476cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
477cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
478cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
479cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
480cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction show(Fragment fragment) {
481cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = new Op();
482cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.cmd = OP_SHOW;
483cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        op.fragment = fragment;
484cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        addOp(op);
485cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
486cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
487cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
488cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
489eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public FragmentTransaction detach(Fragment fragment) {
490eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        Op op = new Op();
491eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        op.cmd = OP_DETACH;
492eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        op.fragment = fragment;
493eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        addOp(op);
494eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
495eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return this;
496eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
497eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
498eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public FragmentTransaction attach(Fragment fragment) {
499eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        Op op = new Op();
500eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        op.cmd = OP_ATTACH;
501eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        op.fragment = fragment;
502eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        addOp(op);
503eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
504eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return this;
505eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
506eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
507cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setCustomAnimations(int enter, int exit) {
508df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        return setCustomAnimations(enter, exit, 0, 0);
509df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn    }
510df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn
511df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn    public FragmentTransaction setCustomAnimations(int enter, int exit,
512df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn            int popEnter, int popExit) {
513cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mEnterAnim = enter;
514cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mExitAnim = exit;
515df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        mPopEnterAnim = popEnter;
516df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn        mPopExitAnim = popExit;
517cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
518cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
519cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
520cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setTransition(int transition) {
521cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mTransition = transition;
522cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
523cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
524cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
5254500be62dea3895a98336122a2944cc4ab024bc5George Mount    @Override
5264500be62dea3895a98336122a2944cc4ab024bc5George Mount    public FragmentTransaction setCustomTransition(int sceneRootId, int transitionId) {
5274500be62dea3895a98336122a2944cc4ab024bc5George Mount        mSceneRoot = sceneRootId;
5284500be62dea3895a98336122a2944cc4ab024bc5George Mount        mCustomTransition = transitionId;
5294500be62dea3895a98336122a2944cc4ab024bc5George Mount        return this;
5304500be62dea3895a98336122a2944cc4ab024bc5George Mount    }
5314500be62dea3895a98336122a2944cc4ab024bc5George Mount
5324500be62dea3895a98336122a2944cc4ab024bc5George Mount    @Override
533128bb5c66d0b34c5a658c682deb3a0b9199b20c4George Mount    public FragmentTransaction addSharedElement(View sharedElement, String name) {
5344500be62dea3895a98336122a2944cc4ab024bc5George Mount        if (Build.VERSION.SDK_INT >= 21 || Build.VERSION.CODENAME.equals("L")) {
5354500be62dea3895a98336122a2944cc4ab024bc5George Mount            String transitionName = FragmentTransitionCompat21.getTransitionName(sharedElement);
5364500be62dea3895a98336122a2944cc4ab024bc5George Mount            if (transitionName == null) {
5374500be62dea3895a98336122a2944cc4ab024bc5George Mount                throw new IllegalArgumentException("Unique transitionNames are required for all" +
5384500be62dea3895a98336122a2944cc4ab024bc5George Mount                        " sharedElements");
5394500be62dea3895a98336122a2944cc4ab024bc5George Mount            }
540128bb5c66d0b34c5a658c682deb3a0b9199b20c4George Mount            if (mSharedElementSourceNames == null) {
541128bb5c66d0b34c5a658c682deb3a0b9199b20c4George Mount                mSharedElementSourceNames = new ArrayList<String>();
542128bb5c66d0b34c5a658c682deb3a0b9199b20c4George Mount                mSharedElementTargetNames = new ArrayList<String>();
543128bb5c66d0b34c5a658c682deb3a0b9199b20c4George Mount            }
5444500be62dea3895a98336122a2944cc4ab024bc5George Mount
545128bb5c66d0b34c5a658c682deb3a0b9199b20c4George Mount            mSharedElementSourceNames.add(transitionName);
5464500be62dea3895a98336122a2944cc4ab024bc5George Mount            mSharedElementTargetNames.add(name);
5474500be62dea3895a98336122a2944cc4ab024bc5George Mount        }
5484500be62dea3895a98336122a2944cc4ab024bc5George Mount        return this;
5494500be62dea3895a98336122a2944cc4ab024bc5George Mount    }
5504500be62dea3895a98336122a2944cc4ab024bc5George Mount
551cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setTransitionStyle(int styleRes) {
552cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mTransitionStyle = styleRes;
553cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
554cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
555cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
556cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction addToBackStack(String name) {
557cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (!mAllowAddToBackStack) {
558cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            throw new IllegalStateException(
559cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    "This FragmentTransaction is not allowed to be added to the back stack.");
560cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
561cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mAddToBackStack = true;
562cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mName = name;
563cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
564cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
565cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
566cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public boolean isAddToBackStackAllowed() {
567cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mAllowAddToBackStack;
568cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
569cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
570cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction disallowAddToBackStack() {
571cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mAddToBackStack) {
572cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            throw new IllegalStateException(
573cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    "This transaction is already being added to the back stack");
574cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
575cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mAllowAddToBackStack = false;
576cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
577cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
578cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
579cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setBreadCrumbTitle(int res) {
580cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleRes = res;
581cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleText = null;
582cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
583cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
584cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
585cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setBreadCrumbTitle(CharSequence text) {
586cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleRes = 0;
587cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbTitleText = text;
588cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
589cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
590cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
591cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setBreadCrumbShortTitle(int res) {
592cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleRes = res;
593cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleText = null;
594cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
595cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
596cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
597cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public FragmentTransaction setBreadCrumbShortTitle(CharSequence text) {
598cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleRes = 0;
599cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mBreadCrumbShortTitleText = text;
600cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return this;
601cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
602cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
603cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    void bumpBackStackNesting(int amt) {
604cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (!mAddToBackStack) {
605cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            return;
606cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
607cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting in " + this
608cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                + " by " + amt);
609cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = mHead;
610cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        while (op != null) {
6115506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            if (op.fragment != null) {
6125506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                op.fragment.mBackStackNesting += amt;
6135506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of "
6145506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                        + op.fragment + " to " + op.fragment.mBackStackNesting);
6155506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn            }
616cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (op.removed != null) {
617cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                for (int i=op.removed.size()-1; i>=0; i--) {
618cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment r = op.removed.get(i);
619cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    r.mBackStackNesting += amt;
620cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of "
621cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            + r + " to " + r.mBackStackNesting);
622cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
623cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
624cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op = op.next;
625cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
626cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
627cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
628cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int commit() {
629cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return commitInternal(false);
630cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
631cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
632cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int commitAllowingStateLoss() {
633cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return commitInternal(true);
634cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
635cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
636cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    int commitInternal(boolean allowStateLoss) {
637cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mCommitted) throw new IllegalStateException("commit already called");
6383a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        if (FragmentManagerImpl.DEBUG) {
6393a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            Log.v(TAG, "Commit: " + this);
6403a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            LogWriter logw = new LogWriter(TAG);
6413a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            PrintWriter pw = new PrintWriter(logw);
6423a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            dump("  ", null, pw, null);
6433a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        }
644cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mCommitted = true;
645cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mAddToBackStack) {
646cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mIndex = mManager.allocBackStackIndex(this);
647cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        } else {
648cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mIndex = -1;
649cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
650cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mManager.enqueueAction(this, allowStateLoss);
651cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mIndex;
652cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
653cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
654cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public void run() {
655cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Run: " + this);
656cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
657cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mAddToBackStack) {
658cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            if (mIndex < 0) {
659cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                throw new IllegalStateException("addToBackStack() called after commit()");
660cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
661cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
662cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
663cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bumpBackStackNesting(1);
664cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
6654500be62dea3895a98336122a2944cc4ab024bc5George Mount        Object state = beginTransition(mSharedElementSourceNames, mSharedElementTargetNames);
6664500be62dea3895a98336122a2944cc4ab024bc5George Mount
6674500be62dea3895a98336122a2944cc4ab024bc5George Mount        int transitionStyle = state != null ? 0 : mTransitionStyle;
6684500be62dea3895a98336122a2944cc4ab024bc5George Mount        int transition = state != null ? 0 : mTransition;
669cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = mHead;
670cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        while (op != null) {
6714500be62dea3895a98336122a2944cc4ab024bc5George Mount            int enterAnim = state != null ? 0 : op.enterAnim;
6724500be62dea3895a98336122a2944cc4ab024bc5George Mount            int exitAnim = state != null ? 0 : op.exitAnim;
673cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            switch (op.cmd) {
674cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_ADD: {
675cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
6764500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = enterAnim;
677cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    mManager.addFragment(f, false);
678cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
679cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_REPLACE: {
680cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
681cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    if (mManager.mAdded != null) {
682cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        for (int i=0; i<mManager.mAdded.size(); i++) {
683cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            Fragment old = mManager.mAdded.get(i);
684cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            if (FragmentManagerImpl.DEBUG) Log.v(TAG,
685cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                                    "OP_REPLACE: adding=" + f + " old=" + old);
6865506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                            if (f == null || old.mContainerId == f.mContainerId) {
6875506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                if (old == f) {
6885506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                    op.fragment = f = null;
6895506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                } else {
6905506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                    if (op.removed == null) {
6915506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                        op.removed = new ArrayList<Fragment>();
6925506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                    }
6935506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                    op.removed.add(old);
6944500be62dea3895a98336122a2944cc4ab024bc5George Mount                                    old.mNextAnim = exitAnim;
6955506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                    if (mAddToBackStack) {
6965506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                        old.mBackStackNesting += 1;
6975506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of "
6985506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                                + old + " to " + old.mBackStackNesting);
6995506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                                    }
7004500be62dea3895a98336122a2944cc4ab024bc5George Mount                                    mManager.removeFragment(old, transition, transitionStyle);
701cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                                }
702cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            }
703cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        }
704cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    }
7055506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                    if (f != null) {
7064500be62dea3895a98336122a2944cc4ab024bc5George Mount                        f.mNextAnim = enterAnim;
7075506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                        mManager.addFragment(f, false);
7085506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                    }
709cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
710cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_REMOVE: {
711cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
7124500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = exitAnim;
7134500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mManager.removeFragment(f, transition, transitionStyle);
714cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
715cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_HIDE: {
716cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
7174500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = exitAnim;
7184500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mManager.hideFragment(f, transition, transitionStyle);
719cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
720cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_SHOW: {
721cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
7224500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = enterAnim;
7234500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mManager.showFragment(f, transition, transitionStyle);
724cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
725eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                case OP_DETACH: {
726eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                    Fragment f = op.fragment;
7274500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = exitAnim;
7284500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mManager.detachFragment(f, transition, transitionStyle);
729eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                } break;
730eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                case OP_ATTACH: {
731eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                    Fragment f = op.fragment;
7324500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = enterAnim;
7334500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mManager.attachFragment(f, transition, transitionStyle);
734eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                } break;
735cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                default: {
736cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    throw new IllegalArgumentException("Unknown cmd: " + op.cmd);
737cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
738cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
739cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
740cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op = op.next;
741cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
742cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
7434500be62dea3895a98336122a2944cc4ab024bc5George Mount        mManager.moveToState(mManager.mCurState, transition, transitionStyle, true);
744cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
745cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mAddToBackStack) {
746cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mManager.addBackStackState(this);
747cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
7484500be62dea3895a98336122a2944cc4ab024bc5George Mount
7494500be62dea3895a98336122a2944cc4ab024bc5George Mount        if (state != null) {
7504500be62dea3895a98336122a2944cc4ab024bc5George Mount            updateTransitionEndState(state, mSharedElementTargetNames);
7514500be62dea3895a98336122a2944cc4ab024bc5George Mount        }
752cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
753cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
7544500be62dea3895a98336122a2944cc4ab024bc5George Mount    private Object beginTransition(ArrayList<String> sourceNames, ArrayList<String> targetNames) {
7554500be62dea3895a98336122a2944cc4ab024bc5George Mount        Object state = null;
7564500be62dea3895a98336122a2944cc4ab024bc5George Mount        if ((Build.VERSION.SDK_INT >= 21 || Build.VERSION.CODENAME.equals("L"))
7574500be62dea3895a98336122a2944cc4ab024bc5George Mount                && mCustomTransition != 0 && mSceneRoot != 0) {
7584500be62dea3895a98336122a2944cc4ab024bc5George Mount            View rootView = mManager.mContainer.findViewById(mSceneRoot);
7594500be62dea3895a98336122a2944cc4ab024bc5George Mount            if (!(rootView instanceof ViewGroup)) {
7604500be62dea3895a98336122a2944cc4ab024bc5George Mount                throw new IllegalArgumentException("SceneRoot is not a ViewGroup");
7614500be62dea3895a98336122a2944cc4ab024bc5George Mount            }
7624500be62dea3895a98336122a2944cc4ab024bc5George Mount            ArrayList<View> hiddenFragmentViews = new ArrayList<View>();
7634500be62dea3895a98336122a2944cc4ab024bc5George Mount            if (mManager.mAdded != null) {
7644500be62dea3895a98336122a2944cc4ab024bc5George Mount                for (int i = mManager.mAdded.size() - 1; i >= 0; i--) {
7654500be62dea3895a98336122a2944cc4ab024bc5George Mount                    Fragment fragment = mManager.mAdded.get(i);
7664500be62dea3895a98336122a2944cc4ab024bc5George Mount                    if (fragment.mView != null) {
7674500be62dea3895a98336122a2944cc4ab024bc5George Mount                        if (fragment.mHidden) {
7684500be62dea3895a98336122a2944cc4ab024bc5George Mount                            hiddenFragmentViews.add(fragment.mView);
7694500be62dea3895a98336122a2944cc4ab024bc5George Mount                        }
7704500be62dea3895a98336122a2944cc4ab024bc5George Mount                    }
7714500be62dea3895a98336122a2944cc4ab024bc5George Mount                }
7724500be62dea3895a98336122a2944cc4ab024bc5George Mount            }
7734500be62dea3895a98336122a2944cc4ab024bc5George Mount            state = FragmentTransitionCompat21.beginTransition(mManager.mActivity,
7744500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mCustomTransition, (ViewGroup) rootView, hiddenFragmentViews,
7754500be62dea3895a98336122a2944cc4ab024bc5George Mount                    sourceNames, targetNames);
7764500be62dea3895a98336122a2944cc4ab024bc5George Mount        }
7774500be62dea3895a98336122a2944cc4ab024bc5George Mount        return state;
7784500be62dea3895a98336122a2944cc4ab024bc5George Mount    }
7794500be62dea3895a98336122a2944cc4ab024bc5George Mount
7804500be62dea3895a98336122a2944cc4ab024bc5George Mount    private void updateTransitionEndState(Object stateObj, ArrayList<String> targetNames) {
7814500be62dea3895a98336122a2944cc4ab024bc5George Mount        if ((Build.VERSION.SDK_INT >= 21 || Build.VERSION.CODENAME.equals("L"))
7824500be62dea3895a98336122a2944cc4ab024bc5George Mount                && stateObj != null) {
7834500be62dea3895a98336122a2944cc4ab024bc5George Mount            ArrayList<View> hiddenFragmentViews = new ArrayList<View>();
7844500be62dea3895a98336122a2944cc4ab024bc5George Mount            ArrayList<View> shownFragmentViews = new ArrayList<View>();
7854500be62dea3895a98336122a2944cc4ab024bc5George Mount            if (mManager.mAdded != null) {
7864500be62dea3895a98336122a2944cc4ab024bc5George Mount                for (int i = mManager.mAdded.size() - 1; i >= 0; i--) {
7874500be62dea3895a98336122a2944cc4ab024bc5George Mount                    Fragment fragment = mManager.mAdded.get(i);
7884500be62dea3895a98336122a2944cc4ab024bc5George Mount                    if (fragment.mView != null) {
7894500be62dea3895a98336122a2944cc4ab024bc5George Mount                        if (fragment.mHidden) {
7904500be62dea3895a98336122a2944cc4ab024bc5George Mount                            hiddenFragmentViews.add(fragment.mView);
7914500be62dea3895a98336122a2944cc4ab024bc5George Mount                        } else {
7924500be62dea3895a98336122a2944cc4ab024bc5George Mount                            shownFragmentViews.add(fragment.mView);
7934500be62dea3895a98336122a2944cc4ab024bc5George Mount                        }
7944500be62dea3895a98336122a2944cc4ab024bc5George Mount                    }
7954500be62dea3895a98336122a2944cc4ab024bc5George Mount                }
7964500be62dea3895a98336122a2944cc4ab024bc5George Mount            }
7974500be62dea3895a98336122a2944cc4ab024bc5George Mount            FragmentTransitionCompat21.updateTransitionEndState(mManager.mActivity,
7984500be62dea3895a98336122a2944cc4ab024bc5George Mount                    shownFragmentViews, hiddenFragmentViews, stateObj, targetNames);
7994500be62dea3895a98336122a2944cc4ab024bc5George Mount        }
8004500be62dea3895a98336122a2944cc4ab024bc5George Mount    }
8014500be62dea3895a98336122a2944cc4ab024bc5George Mount
8024500be62dea3895a98336122a2944cc4ab024bc5George Mount    public Object popFromBackStack(boolean doStateMove, Object state) {
8033a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        if (FragmentManagerImpl.DEBUG) {
8043a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            Log.v(TAG, "popFromBackStack: " + this);
8053a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            LogWriter logw = new LogWriter(TAG);
8063a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            PrintWriter pw = new PrintWriter(logw);
8073a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn            dump("  ", null, pw, null);
8083a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn        }
809cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
8104500be62dea3895a98336122a2944cc4ab024bc5George Mount        if (state == null) {
8114500be62dea3895a98336122a2944cc4ab024bc5George Mount            state = beginTransition(mSharedElementTargetNames, mSharedElementSourceNames);
8124500be62dea3895a98336122a2944cc4ab024bc5George Mount        } else if (Build.VERSION.SDK_INT >= 21 || Build.VERSION.CODENAME.equals("L")) {
8134500be62dea3895a98336122a2944cc4ab024bc5George Mount            FragmentTransitionCompat21.setNameOverrides(state, mSharedElementTargetNames,
8144500be62dea3895a98336122a2944cc4ab024bc5George Mount                    mSharedElementSourceNames);
8154500be62dea3895a98336122a2944cc4ab024bc5George Mount        }
8164500be62dea3895a98336122a2944cc4ab024bc5George Mount
817cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        bumpBackStackNesting(-1);
818cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
8194500be62dea3895a98336122a2944cc4ab024bc5George Mount        int transitionStyle = state != null ? 0 : mTransitionStyle;
8204500be62dea3895a98336122a2944cc4ab024bc5George Mount        int transition = state != null ? 0 : mTransition;
821cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Op op = mTail;
822cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        while (op != null) {
8234500be62dea3895a98336122a2944cc4ab024bc5George Mount            int popEnterAnim = state != null ? 0 : op.popEnterAnim;
8244500be62dea3895a98336122a2944cc4ab024bc5George Mount            int popExitAnim= state != null ? 0 : op.popExitAnim;
825cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            switch (op.cmd) {
826cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_ADD: {
827cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
8284500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = popExitAnim;
829cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    mManager.removeFragment(f,
8304500be62dea3895a98336122a2944cc4ab024bc5George Mount                            FragmentManagerImpl.reverseTransit(transition), transitionStyle);
831cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
832cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_REPLACE: {
833cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
8345506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                    if (f != null) {
8354500be62dea3895a98336122a2944cc4ab024bc5George Mount                        f.mNextAnim = popExitAnim;
8365506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                        mManager.removeFragment(f,
8374500be62dea3895a98336122a2944cc4ab024bc5George Mount                                FragmentManagerImpl.reverseTransit(transition), transitionStyle);
8385506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn                    }
839cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    if (op.removed != null) {
840cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        for (int i=0; i<op.removed.size(); i++) {
841cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            Fragment old = op.removed.get(i);
8424500be62dea3895a98336122a2944cc4ab024bc5George Mount                            old.mNextAnim = popEnterAnim;
843cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                            mManager.addFragment(old, false);
844cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                        }
845cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    }
846cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
847cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_REMOVE: {
848cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
8494500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = popEnterAnim;
850cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    mManager.addFragment(f, false);
851cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
852cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_HIDE: {
853cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
8544500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = popEnterAnim;
855cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    mManager.showFragment(f,
8564500be62dea3895a98336122a2944cc4ab024bc5George Mount                            FragmentManagerImpl.reverseTransit(transition), transitionStyle);
857cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
858cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                case OP_SHOW: {
859cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    Fragment f = op.fragment;
8604500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = popExitAnim;
861cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    mManager.hideFragment(f,
8624500be62dea3895a98336122a2944cc4ab024bc5George Mount                            FragmentManagerImpl.reverseTransit(transition), transitionStyle);
863cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                } break;
864eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                case OP_DETACH: {
865eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                    Fragment f = op.fragment;
8664500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = popEnterAnim;
867eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                    mManager.attachFragment(f,
8684500be62dea3895a98336122a2944cc4ab024bc5George Mount                            FragmentManagerImpl.reverseTransit(transition), transitionStyle);
869eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                } break;
870eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                case OP_ATTACH: {
871eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                    Fragment f = op.fragment;
8724500be62dea3895a98336122a2944cc4ab024bc5George Mount                    f.mNextAnim = popEnterAnim;
873eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                    mManager.detachFragment(f,
8744500be62dea3895a98336122a2944cc4ab024bc5George Mount                            FragmentManagerImpl.reverseTransit(transition), transitionStyle);
875eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                } break;
876cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                default: {
877cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                    throw new IllegalArgumentException("Unknown cmd: " + op.cmd);
878cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn                }
879cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            }
880cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
881cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            op = op.prev;
882cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
883cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
884cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (doStateMove) {
885cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mManager.moveToState(mManager.mCurState,
8864500be62dea3895a98336122a2944cc4ab024bc5George Mount                    FragmentManagerImpl.reverseTransit(transition), transitionStyle, true);
8874500be62dea3895a98336122a2944cc4ab024bc5George Mount            if (state != null) {
8884500be62dea3895a98336122a2944cc4ab024bc5George Mount                updateTransitionEndState(state, mSharedElementSourceNames);
8894500be62dea3895a98336122a2944cc4ab024bc5George Mount                state = null;
8904500be62dea3895a98336122a2944cc4ab024bc5George Mount            }
891cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
892cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
893cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (mIndex >= 0) {
894cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mManager.freeBackStackIndex(mIndex);
895cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mIndex = -1;
896cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
8974500be62dea3895a98336122a2944cc4ab024bc5George Mount        return state;
898cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
899cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
900cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public String getName() {
901cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mName;
902cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
903cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
904cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int getTransition() {
905cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mTransition;
906cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
907cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
908cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public int getTransitionStyle() {
909cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mTransitionStyle;
910cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
911cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
912cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public boolean isEmpty() {
913cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mNumOp == 0;
914cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
915cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn}
916