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 19cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.os.Parcel; 20cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.os.Parcelable; 213a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackbornimport android.support.v4.util.LogWriter; 22cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.text.TextUtils; 23cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.util.Log; 24cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 25cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport java.io.FileDescriptor; 26cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport java.io.PrintWriter; 27cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport java.util.ArrayList; 28cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 29cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornfinal class BackStackState implements Parcelable { 30cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int[] mOps; 31cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int mTransition; 32cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int mTransitionStyle; 33cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final String mName; 34cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int mIndex; 35cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int mBreadCrumbTitleRes; 36cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final CharSequence mBreadCrumbTitleText; 37cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int mBreadCrumbShortTitleRes; 38cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final CharSequence mBreadCrumbShortTitleText; 39cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 40cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public BackStackState(FragmentManagerImpl fm, BackStackRecord bse) { 41cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int numRemoved = 0; 42cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn BackStackRecord.Op op = bse.mHead; 43cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (op != null) { 44cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (op.removed != null) numRemoved += op.removed.size(); 45cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = op.next; 46cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 47df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn mOps = new int[bse.mNumOp*7 + numRemoved]; 48cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 49cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (!bse.mAddToBackStack) { 50cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalStateException("Not on back stack"); 51cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 52cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 53cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = bse.mHead; 54cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int pos = 0; 55cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (op != null) { 56cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps[pos++] = op.cmd; 575506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn mOps[pos++] = op.fragment != null ? op.fragment.mIndex : -1; 58cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps[pos++] = op.enterAnim; 59cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps[pos++] = op.exitAnim; 60df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn mOps[pos++] = op.popEnterAnim; 61df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn mOps[pos++] = op.popExitAnim; 62cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (op.removed != null) { 63cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int N = op.removed.size(); 64cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps[pos++] = N; 65cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn for (int i=0; i<N; i++) { 66cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps[pos++] = op.removed.get(i).mIndex; 67cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 68cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } else { 69cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps[pos++] = 0; 70cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 71cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = op.next; 72cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 73cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransition = bse.mTransition; 74cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransitionStyle = bse.mTransitionStyle; 75cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mName = bse.mName; 76cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mIndex = bse.mIndex; 77cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleRes = bse.mBreadCrumbTitleRes; 78cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleText = bse.mBreadCrumbTitleText; 79cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleRes = bse.mBreadCrumbShortTitleRes; 80cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleText = bse.mBreadCrumbShortTitleText; 81cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 82cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 83cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public BackStackState(Parcel in) { 84cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mOps = in.createIntArray(); 85cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransition = in.readInt(); 86cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransitionStyle = in.readInt(); 87cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mName = in.readString(); 88cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mIndex = in.readInt(); 89cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleRes = in.readInt(); 90cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 91cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleRes = in.readInt(); 92cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 93cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 94cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 95cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public BackStackRecord instantiate(FragmentManagerImpl fm) { 96cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn BackStackRecord bse = new BackStackRecord(fm); 97cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int pos = 0; 983a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn int num = 0; 99cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (pos < mOps.length) { 100cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn BackStackRecord.Op op = new BackStackRecord.Op(); 101cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.cmd = mOps[pos++]; 102cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG, 1033a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn "Instantiate " + bse + " op #" + num + " base fragment #" + mOps[pos]); 1045506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn int findex = mOps[pos++]; 1055506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (findex >= 0) { 1065506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn Fragment f = fm.mActive.get(findex); 1075506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn op.fragment = f; 1085506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } else { 1095506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn op.fragment = null; 1105506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } 111cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.enterAnim = mOps[pos++]; 112cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.exitAnim = mOps[pos++]; 113df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn op.popEnterAnim = mOps[pos++]; 114df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn op.popExitAnim = mOps[pos++]; 115cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final int N = mOps[pos++]; 116cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (N > 0) { 117cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.removed = new ArrayList<Fragment>(N); 118cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn for (int i=0; i<N; i++) { 119cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG, 1203a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn "Instantiate " + bse + " set remove fragment #" + mOps[pos]); 121cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment r = fm.mActive.get(mOps[pos++]); 122cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.removed.add(r); 123cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 124cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 125cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.addOp(op); 1263a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn num++; 127cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 128cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mTransition = mTransition; 129cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mTransitionStyle = mTransitionStyle; 130cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mName = mName; 131cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mIndex = mIndex; 132cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mAddToBackStack = true; 133cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mBreadCrumbTitleRes = mBreadCrumbTitleRes; 134cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mBreadCrumbTitleText = mBreadCrumbTitleText; 135cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mBreadCrumbShortTitleRes = mBreadCrumbShortTitleRes; 136cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.mBreadCrumbShortTitleText = mBreadCrumbShortTitleText; 137cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bse.bumpBackStackNesting(1); 138cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return bse; 139cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 140cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 141cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int describeContents() { 142cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return 0; 143cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 144cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 145cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 146cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeIntArray(mOps); 147cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeInt(mTransition); 148cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeInt(mTransitionStyle); 149cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeString(mName); 150cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeInt(mIndex); 151cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeInt(mBreadCrumbTitleRes); 152cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn TextUtils.writeToParcel(mBreadCrumbTitleText, dest, 0); 153cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn dest.writeInt(mBreadCrumbShortTitleRes); 154cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn TextUtils.writeToParcel(mBreadCrumbShortTitleText, dest, 0); 155cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 156cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 157cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public static final Parcelable.Creator<BackStackState> CREATOR 158cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn = new Parcelable.Creator<BackStackState>() { 159cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public BackStackState createFromParcel(Parcel in) { 160cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return new BackStackState(in); 161cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 162cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 163cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public BackStackState[] newArray(int size) { 164cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return new BackStackState[size]; 165cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 166cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn }; 167cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn} 168cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 169cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn/** 170cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * @hide Entry of an operation on the fragment back stack. 171cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn */ 172cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornfinal class BackStackRecord extends FragmentTransaction implements 173cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn FragmentManager.BackStackEntry, Runnable { 1743a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn static final String TAG = FragmentManagerImpl.TAG; 175cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 176cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn final FragmentManagerImpl mManager; 177cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 178cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final int OP_NULL = 0; 179cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final int OP_ADD = 1; 180cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final int OP_REPLACE = 2; 181cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final int OP_REMOVE = 3; 182cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final int OP_HIDE = 4; 183cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final int OP_SHOW = 5; 184eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn static final int OP_DETACH = 6; 185eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn static final int OP_ATTACH = 7; 186cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 187cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn static final class Op { 188cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op next; 189cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op prev; 190cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int cmd; 191cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment fragment; 192cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int enterAnim; 193cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int exitAnim; 194df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn int popEnterAnim; 195df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn int popExitAnim; 196cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn ArrayList<Fragment> removed; 197cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 198cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 199cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op mHead; 200cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op mTail; 201cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mNumOp; 202cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mEnterAnim; 203cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mExitAnim; 204df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn int mPopEnterAnim; 205df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn int mPopExitAnim; 206cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mTransition; 207cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mTransitionStyle; 208cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn boolean mAddToBackStack; 209cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn boolean mAllowAddToBackStack = true; 210cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn String mName; 211cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn boolean mCommitted; 2123a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn int mIndex = -1; 213cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 214cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mBreadCrumbTitleRes; 215cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn CharSequence mBreadCrumbTitleText; 216cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int mBreadCrumbShortTitleRes; 217cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn CharSequence mBreadCrumbShortTitleText; 218cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 2193a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn @Override 2203a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn public String toString() { 2213a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn StringBuilder sb = new StringBuilder(128); 2223a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append("BackStackEntry{"); 2233a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 2243a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mIndex >= 0) { 2253a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append(" #"); 2263a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append(mIndex); 227df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn } 2283a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mName != null) { 2293a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append(" "); 2303a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append(mName); 231cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 2323a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn sb.append("}"); 2333a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn return sb.toString(); 2343a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 2353a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn 2363a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 2373a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn dump(prefix, writer, true); 2383a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 2393a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn 2403a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn public void dump(String prefix, PrintWriter writer, boolean full) { 2413a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (full) { 2423a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("mName="); writer.print(mName); 2433a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mIndex="); writer.print(mIndex); 2443a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mCommitted="); writer.println(mCommitted); 2453a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mTransition != FragmentTransaction.TRANSIT_NONE) { 2463a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("mTransition=#"); 2473a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(mTransition)); 2483a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mTransitionStyle=#"); 2493a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(Integer.toHexString(mTransitionStyle)); 2503a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 2513a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mEnterAnim != 0 || mExitAnim !=0) { 2523a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("mEnterAnim=#"); 2533a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(mEnterAnim)); 2543a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mExitAnim=#"); 2553a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(Integer.toHexString(mExitAnim)); 2563a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 2573a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mPopEnterAnim != 0 || mPopExitAnim !=0) { 2583a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("mPopEnterAnim=#"); 2593a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(mPopEnterAnim)); 2603a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mPopExitAnim=#"); 2613a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(Integer.toHexString(mPopExitAnim)); 2623a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 2633a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mBreadCrumbTitleRes != 0 || mBreadCrumbTitleText != null) { 2643a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("mBreadCrumbTitleRes=#"); 2653a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(mBreadCrumbTitleRes)); 2663a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mBreadCrumbTitleText="); 2673a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(mBreadCrumbTitleText); 2683a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 2693a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (mBreadCrumbShortTitleRes != 0 || mBreadCrumbShortTitleText != null) { 2703a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("mBreadCrumbShortTitleRes=#"); 2713a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(mBreadCrumbShortTitleRes)); 2723a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" mBreadCrumbShortTitleText="); 2733a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(mBreadCrumbShortTitleText); 2743a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 275cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 276cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 277cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mHead != null) { 278cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn writer.print(prefix); writer.println("Operations:"); 279cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn String innerPrefix = prefix + " "; 280cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = mHead; 281cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int num = 0; 282cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (op != null) { 2833a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn String cmdStr; 2843a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn switch (op.cmd) { 2853a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_NULL: cmdStr="NULL"; break; 2863a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_ADD: cmdStr="ADD"; break; 2873a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_REPLACE: cmdStr="REPLACE"; break; 2883a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_REMOVE: cmdStr="REMOVE"; break; 2893a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_HIDE: cmdStr="HIDE"; break; 2903a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_SHOW: cmdStr="SHOW"; break; 2913a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_DETACH: cmdStr="DETACH"; break; 2923a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn case OP_ATTACH: cmdStr="ATTACH"; break; 2933a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn default: cmdStr="cmd=" + op.cmd; break; 294df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn } 2953a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print(" Op #"); writer.print(num); 2963a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(": "); writer.print(cmdStr); 2973a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" "); writer.println(op.fragment); 2983a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (full) { 2993a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (op.enterAnim != 0 || op.exitAnim != 0) { 3003a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("enterAnim=#"); 3013a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(op.enterAnim)); 3023a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" exitAnim=#"); 3033a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(Integer.toHexString(op.exitAnim)); 3043a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 3053a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (op.popEnterAnim != 0 || op.popExitAnim != 0) { 3063a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(prefix); writer.print("popEnterAnim=#"); 3073a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(Integer.toHexString(op.popEnterAnim)); 3083a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(" popExitAnim=#"); 3093a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println(Integer.toHexString(op.popExitAnim)); 3103a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 311cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 312cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (op.removed != null && op.removed.size() > 0) { 313cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn for (int i=0; i<op.removed.size(); i++) { 314cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn writer.print(innerPrefix); 315cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (op.removed.size() == 1) { 316cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn writer.print("Removed: "); 317cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } else { 3183a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (i == 0) { 3193a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.println("Removed:"); 3203a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 3213a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn writer.print(innerPrefix); writer.print(" #"); writer.print(i); 322cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn writer.print(": "); 323cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 324cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn writer.println(op.removed.get(i)); 325cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 326cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 327cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = op.next; 3283a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn num++; 329cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 330cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 331cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 332cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 333cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public BackStackRecord(FragmentManagerImpl manager) { 334cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager = manager; 335cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 336cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 337cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int getId() { 338cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mIndex; 339cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 340cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 341cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int getBreadCrumbTitleRes() { 342cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mBreadCrumbTitleRes; 343cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 344cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 345cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int getBreadCrumbShortTitleRes() { 346cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mBreadCrumbShortTitleRes; 347cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 348cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 349cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public CharSequence getBreadCrumbTitle() { 350cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mBreadCrumbTitleRes != 0) { 351cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mManager.mActivity.getText(mBreadCrumbTitleRes); 352cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 353cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mBreadCrumbTitleText; 354cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 355cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 356cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public CharSequence getBreadCrumbShortTitle() { 357cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mBreadCrumbShortTitleRes != 0) { 358cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mManager.mActivity.getText(mBreadCrumbShortTitleRes); 359cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 360cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mBreadCrumbShortTitleText; 361cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 362cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 363cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn void addOp(Op op) { 364cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mHead == null) { 365cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mHead = mTail = op; 366cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } else { 367cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.prev = mTail; 368cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTail.next = op; 369cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTail = op; 370cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 371cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.enterAnim = mEnterAnim; 372cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.exitAnim = mExitAnim; 373df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn op.popEnterAnim = mPopEnterAnim; 374df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn op.popExitAnim = mPopExitAnim; 375cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mNumOp++; 376cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 377cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 378cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction add(Fragment fragment, String tag) { 379cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn doAddOp(0, fragment, tag, OP_ADD); 380cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 381cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 382cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 383cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction add(int containerViewId, Fragment fragment) { 384cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn doAddOp(containerViewId, fragment, null, OP_ADD); 385cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 386cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 387cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 388cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction add(int containerViewId, Fragment fragment, String tag) { 389cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn doAddOp(containerViewId, fragment, tag, OP_ADD); 390cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 391cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 392cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 393cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) { 394cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn fragment.mFragmentManager = mManager; 395cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 396cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (tag != null) { 397cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (fragment.mTag != null && !tag.equals(fragment.mTag)) { 398cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalStateException("Can't change tag of fragment " 399cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn + fragment + ": was " + fragment.mTag 400cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn + " now " + tag); 401cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 402cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn fragment.mTag = tag; 403cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 404cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 405cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (containerViewId != 0) { 406cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) { 407cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalStateException("Can't change container ID of fragment " 408cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn + fragment + ": was " + fragment.mFragmentId 409cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn + " now " + containerViewId); 410cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 411cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn fragment.mContainerId = fragment.mFragmentId = containerViewId; 412cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 413cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 414cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = new Op(); 415cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.cmd = opcmd; 416cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.fragment = fragment; 417cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn addOp(op); 418cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 419cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 420cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction replace(int containerViewId, Fragment fragment) { 421cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return replace(containerViewId, fragment, null); 422cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 423cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 424cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction replace(int containerViewId, Fragment fragment, String tag) { 425cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (containerViewId == 0) { 426cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalArgumentException("Must use non-zero containerViewId"); 427cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 428cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 429cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn doAddOp(containerViewId, fragment, tag, OP_REPLACE); 430cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 431cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 432cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 433cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction remove(Fragment fragment) { 434cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = new Op(); 435cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.cmd = OP_REMOVE; 436cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.fragment = fragment; 437cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn addOp(op); 438cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 439cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 440cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 441cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 442cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction hide(Fragment fragment) { 443cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = new Op(); 444cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.cmd = OP_HIDE; 445cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.fragment = fragment; 446cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn addOp(op); 447cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 448cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 449cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 450cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 451cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction show(Fragment fragment) { 452cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = new Op(); 453cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.cmd = OP_SHOW; 454cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op.fragment = fragment; 455cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn addOp(op); 456cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 457cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 458cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 459cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 460eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public FragmentTransaction detach(Fragment fragment) { 461eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn Op op = new Op(); 462eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn op.cmd = OP_DETACH; 463eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn op.fragment = fragment; 464eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn addOp(op); 465eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 466eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return this; 467eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 468eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 469eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public FragmentTransaction attach(Fragment fragment) { 470eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn Op op = new Op(); 471eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn op.cmd = OP_ATTACH; 472eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn op.fragment = fragment; 473eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn addOp(op); 474eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 475eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return this; 476eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 477eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 478cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setCustomAnimations(int enter, int exit) { 479df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn return setCustomAnimations(enter, exit, 0, 0); 480df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn } 481df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn 482df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn public FragmentTransaction setCustomAnimations(int enter, int exit, 483df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn int popEnter, int popExit) { 484cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mEnterAnim = enter; 485cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mExitAnim = exit; 486df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn mPopEnterAnim = popEnter; 487df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn mPopExitAnim = popExit; 488cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 489cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 490cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 491cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setTransition(int transition) { 492cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransition = transition; 493cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 494cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 495cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 496cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setTransitionStyle(int styleRes) { 497cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransitionStyle = styleRes; 498cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 499cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 500cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 501cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction addToBackStack(String name) { 502cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (!mAllowAddToBackStack) { 503cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalStateException( 504cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn "This FragmentTransaction is not allowed to be added to the back stack."); 505cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 506cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mAddToBackStack = true; 507cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mName = name; 508cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 509cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 510cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 511cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public boolean isAddToBackStackAllowed() { 512cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mAllowAddToBackStack; 513cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 514cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 515cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction disallowAddToBackStack() { 516cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mAddToBackStack) { 517cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalStateException( 518cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn "This transaction is already being added to the back stack"); 519cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 520cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mAllowAddToBackStack = false; 521cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 522cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 523cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 524cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setBreadCrumbTitle(int res) { 525cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleRes = res; 526cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleText = null; 527cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 528cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 529cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 530cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setBreadCrumbTitle(CharSequence text) { 531cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleRes = 0; 532cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbTitleText = text; 533cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 534cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 535cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 536cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setBreadCrumbShortTitle(int res) { 537cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleRes = res; 538cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleText = null; 539cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 540cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 541cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 542cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public FragmentTransaction setBreadCrumbShortTitle(CharSequence text) { 543cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleRes = 0; 544cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mBreadCrumbShortTitleText = text; 545cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return this; 546cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 547cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 548cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn void bumpBackStackNesting(int amt) { 549cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (!mAddToBackStack) { 550cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return; 551cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 552cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting in " + this 553cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn + " by " + amt); 554cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = mHead; 555cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (op != null) { 5565506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (op.fragment != null) { 5575506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn op.fragment.mBackStackNesting += amt; 5585506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of " 5595506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn + op.fragment + " to " + op.fragment.mBackStackNesting); 5605506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } 561cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (op.removed != null) { 562cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn for (int i=op.removed.size()-1; i>=0; i--) { 563cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment r = op.removed.get(i); 564cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn r.mBackStackNesting += amt; 565cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of " 566cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn + r + " to " + r.mBackStackNesting); 567cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 568cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 569cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = op.next; 570cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 571cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 572cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 573cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int commit() { 574cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return commitInternal(false); 575cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 576cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 577cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int commitAllowingStateLoss() { 578cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return commitInternal(true); 579cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 580cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 581cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn int commitInternal(boolean allowStateLoss) { 582cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mCommitted) throw new IllegalStateException("commit already called"); 5833a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (FragmentManagerImpl.DEBUG) { 5843a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn Log.v(TAG, "Commit: " + this); 5853a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn LogWriter logw = new LogWriter(TAG); 5863a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn PrintWriter pw = new PrintWriter(logw); 5873a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn dump(" ", null, pw, null); 5883a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 589cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mCommitted = true; 590cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mAddToBackStack) { 591cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mIndex = mManager.allocBackStackIndex(this); 592cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } else { 593cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mIndex = -1; 594cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 595cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.enqueueAction(this, allowStateLoss); 596cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mIndex; 597cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 598cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 599cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public void run() { 600cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Run: " + this); 601cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 602cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mAddToBackStack) { 603cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mIndex < 0) { 604cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalStateException("addToBackStack() called after commit()"); 605cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 606cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 607cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 608cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bumpBackStackNesting(1); 609cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 610cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = mHead; 611cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (op != null) { 612cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn switch (op.cmd) { 613cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_ADD: { 614cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 615cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn f.mNextAnim = op.enterAnim; 616cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.addFragment(f, false); 617cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 618cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_REPLACE: { 619cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 620cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mManager.mAdded != null) { 621cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn for (int i=0; i<mManager.mAdded.size(); i++) { 622cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment old = mManager.mAdded.get(i); 623cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, 624cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn "OP_REPLACE: adding=" + f + " old=" + old); 6255506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (f == null || old.mContainerId == f.mContainerId) { 6265506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (old == f) { 6275506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn op.fragment = f = null; 6285506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } else { 6295506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (op.removed == null) { 6305506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn op.removed = new ArrayList<Fragment>(); 6315506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } 6325506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn op.removed.add(old); 6335506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn old.mNextAnim = op.exitAnim; 6345506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (mAddToBackStack) { 6355506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn old.mBackStackNesting += 1; 6365506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of " 6375506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn + old + " to " + old.mBackStackNesting); 6385506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } 6395506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn mManager.removeFragment(old, mTransition, mTransitionStyle); 640cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 641cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 642cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 643cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 6445506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (f != null) { 6455506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn f.mNextAnim = op.enterAnim; 6465506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn mManager.addFragment(f, false); 6475506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } 648cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 649cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_REMOVE: { 650cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 651cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn f.mNextAnim = op.exitAnim; 652cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.removeFragment(f, mTransition, mTransitionStyle); 653cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 654cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_HIDE: { 655cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 656cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn f.mNextAnim = op.exitAnim; 657cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.hideFragment(f, mTransition, mTransitionStyle); 658cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 659cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_SHOW: { 660cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 661cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn f.mNextAnim = op.enterAnim; 662cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.showFragment(f, mTransition, mTransitionStyle); 663cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 664eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn case OP_DETACH: { 665eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn Fragment f = op.fragment; 666eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn f.mNextAnim = op.exitAnim; 667eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn mManager.detachFragment(f, mTransition, mTransitionStyle); 668eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } break; 669eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn case OP_ATTACH: { 670eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn Fragment f = op.fragment; 671eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn f.mNextAnim = op.enterAnim; 672eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn mManager.attachFragment(f, mTransition, mTransitionStyle); 673eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } break; 674cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn default: { 675cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalArgumentException("Unknown cmd: " + op.cmd); 676cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 677cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 678cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 679cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = op.next; 680cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 681cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 682cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.moveToState(mManager.mCurState, mTransition, 683cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransitionStyle, true); 684cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 685cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mAddToBackStack) { 686cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.addBackStackState(this); 687cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 688cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 689cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 690cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public void popFromBackStack(boolean doStateMove) { 6913a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn if (FragmentManagerImpl.DEBUG) { 6923a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn Log.v(TAG, "popFromBackStack: " + this); 6933a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn LogWriter logw = new LogWriter(TAG); 6943a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn PrintWriter pw = new PrintWriter(logw); 6953a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn dump(" ", null, pw, null); 6963a7571011a8f2c2e2685c4e3e7a6fa46673ee7eaDianne Hackborn } 697cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 698cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn bumpBackStackNesting(-1); 699cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 700cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Op op = mTail; 701cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn while (op != null) { 702cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn switch (op.cmd) { 703cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_ADD: { 704cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 705df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn f.mNextAnim = op.popExitAnim; 706cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.removeFragment(f, 707cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), 708cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mTransitionStyle); 709cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 710cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_REPLACE: { 711cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 7125506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn if (f != null) { 7135506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn f.mNextAnim = op.popExitAnim; 7145506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn mManager.removeFragment(f, 7155506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), 7165506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn mTransitionStyle); 7175506618c80a292ac275d8b0c1046b446c7f58836Dianne Hackborn } 718cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (op.removed != null) { 719cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn for (int i=0; i<op.removed.size(); i++) { 720cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment old = op.removed.get(i); 721df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn old.mNextAnim = op.popEnterAnim; 722cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.addFragment(old, false); 723cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 724cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 725cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 726cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_REMOVE: { 727cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 728df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn f.mNextAnim = op.popEnterAnim; 729cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.addFragment(f, false); 730cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 731cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_HIDE: { 732cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 733df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn f.mNextAnim = op.popEnterAnim; 734cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.showFragment(f, 735cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); 736cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 737cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn case OP_SHOW: { 738cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn Fragment f = op.fragment; 739df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn f.mNextAnim = op.popExitAnim; 740cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.hideFragment(f, 741cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); 742cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } break; 743eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn case OP_DETACH: { 744eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn Fragment f = op.fragment; 745df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn f.mNextAnim = op.popEnterAnim; 746eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn mManager.attachFragment(f, 747eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); 748eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } break; 749eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn case OP_ATTACH: { 750eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn Fragment f = op.fragment; 751df6f1393f73a488ba2661b28d3d88a5ac19c4ea2Dianne Hackborn f.mNextAnim = op.popEnterAnim; 752eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn mManager.detachFragment(f, 753eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); 754eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } break; 755cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn default: { 756cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn throw new IllegalArgumentException("Unknown cmd: " + op.cmd); 757cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 758cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 759cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 760cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn op = op.prev; 761cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 762cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 763cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (doStateMove) { 764cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.moveToState(mManager.mCurState, 765cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle, true); 766cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 767cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 768cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn if (mIndex >= 0) { 769cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mManager.freeBackStackIndex(mIndex); 770cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn mIndex = -1; 771cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 772cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 773cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 774cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public String getName() { 775cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mName; 776cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 777cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 778cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int getTransition() { 779cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mTransition; 780cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 781cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 782cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public int getTransitionStyle() { 783cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mTransitionStyle; 784cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 785cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn 786cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn public boolean isEmpty() { 787cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn return mNumOp == 0; 788cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn } 789cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn} 790