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