JAD output
// Decompiled by Jad v1.5.8g package android.support.v4.app; import android.util.Log; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; // Referenced classes of package android.support.v4.app: // FragmentTransaction, Fragment, FragmentManagerImpl, FragmentActivity final class BackStackRecord extends FragmentTransaction implements FragmentManager.BackStackEntry, Runnable { /* member class not found */ class Op {} public BackStackRecord(FragmentManagerImpl fragmentmanagerimpl) { mAllowAddToBackStack = true; mManager = fragmentmanagerimpl; } private void doAddOp(int i, Fragment fragment, String s, int j) { fragment.mFragmentManager = mManager; if(s != null) { if(fragment.mTag != null && !s.equals(fragment.mTag)) throw new IllegalStateException((new StringBuilder()).append("Can't change tag of fragment ").append(fragment).append(": was ").append(fragment.mTag).append(" now ").append(s).toString()); fragment.mTag = s; } if(i != 0) { if(fragment.mFragmentId != 0 && fragment.mFragmentId != i) throw new IllegalStateException((new StringBuilder()).append("Can't change container ID of fragment ").append(fragment).append(": was ").append(fragment.mFragmentId).append(" now ").append(i).toString()); fragment.mFragmentId = i; fragment.mContainerId = i; } Op op = new Op(); op.cmd = j; op.fragment = fragment; addOp(op); } public FragmentTransaction add(int i, Fragment fragment) { doAddOp(i, fragment, null, 1); return this; } public FragmentTransaction add(int i, Fragment fragment, String s) { doAddOp(i, fragment, s, 1); return this; } public FragmentTransaction add(Fragment fragment, String s) { doAddOp(0, fragment, s, 1); return this; } void addOp(Op op) { if(mHead == null) { mTail = op; mHead = op; } else { op.prev = mTail; mTail.next = op; mTail = op; } op.enterAnim = mEnterAnim; op.exitAnim = mExitAnim; op.popEnterAnim = mPopEnterAnim; op.popExitAnim = mPopExitAnim; mNumOp = 1 + mNumOp; } public FragmentTransaction addToBackStack(String s) { if(!mAllowAddToBackStack) { throw new IllegalStateException("This FragmentTransaction is not allowed to be added to the back stack."); } else { mAddToBackStack = true; mName = s; return this; } } public FragmentTransaction attach(Fragment fragment) { Op op = new Op(); op.cmd = 7; op.fragment = fragment; addOp(op); return this; } void bumpBackStackNesting(int i) { if(mAddToBackStack) { if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("Bump nesting in ").append(this).append(" by ").append(i).toString()); Op op = mHead; while(op != null) { if(op.fragment != null) { Fragment fragment1 = op.fragment; fragment1.mBackStackNesting = i + fragment1.mBackStackNesting; if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("Bump nesting of ").append(op.fragment).append(" to ").append(op.fragment.mBackStackNesting).toString()); } if(op.removed != null) { for(int j = -1 + op.removed.size(); j >= 0; j--) { Fragment fragment = (Fragment)op.removed.get(j); fragment.mBackStackNesting = i + fragment.mBackStackNesting; if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("Bump nesting of ").append(fragment).append(" to ").append(fragment.mBackStackNesting).toString()); } } op = op.next; } } } public int commit() { return commitInternal(false); } public int commitAllowingStateLoss() { return commitInternal(true); } int commitInternal(boolean flag) { if(mCommitted) throw new IllegalStateException("commit already called"); if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("Commit: ").append(this).toString()); mCommitted = true; if(mAddToBackStack) mIndex = mManager.allocBackStackIndex(this); else mIndex = -1; mManager.enqueueAction(this, flag); return mIndex; } public FragmentTransaction detach(Fragment fragment) { Op op = new Op(); op.cmd = 6; op.fragment = fragment; addOp(op); return this; } public FragmentTransaction disallowAddToBackStack() { if(mAddToBackStack) { throw new IllegalStateException("This transaction is already being added to the back stack"); } else { mAllowAddToBackStack = false; return this; } } public void dump(String s, FileDescriptor filedescriptor, PrintWriter printwriter, String as[]) { printwriter.print(s); printwriter.print("mName="); printwriter.print(mName); printwriter.print(" mIndex="); printwriter.print(mIndex); printwriter.print(" mCommitted="); printwriter.println(mCommitted); if(mTransition != 0) { printwriter.print(s); printwriter.print("mTransition=#"); printwriter.print(Integer.toHexString(mTransition)); printwriter.print(" mTransitionStyle=#"); printwriter.println(Integer.toHexString(mTransitionStyle)); } if(mEnterAnim != 0 || mExitAnim != 0) { printwriter.print(s); printwriter.print("mEnterAnim=#"); printwriter.print(Integer.toHexString(mEnterAnim)); printwriter.print(" mExitAnim=#"); printwriter.println(Integer.toHexString(mExitAnim)); } if(mPopEnterAnim != 0 || mPopExitAnim != 0) { printwriter.print(s); printwriter.print("mPopEnterAnim=#"); printwriter.print(Integer.toHexString(mPopEnterAnim)); printwriter.print(" mPopExitAnim=#"); printwriter.println(Integer.toHexString(mPopExitAnim)); } if(mBreadCrumbTitleRes != 0 || mBreadCrumbTitleText != null) { printwriter.print(s); printwriter.print("mBreadCrumbTitleRes=#"); printwriter.print(Integer.toHexString(mBreadCrumbTitleRes)); printwriter.print(" mBreadCrumbTitleText="); printwriter.println(mBreadCrumbTitleText); } if(mBreadCrumbShortTitleRes != 0 || mBreadCrumbShortTitleText != null) { printwriter.print(s); printwriter.print("mBreadCrumbShortTitleRes=#"); printwriter.print(Integer.toHexString(mBreadCrumbShortTitleRes)); printwriter.print(" mBreadCrumbShortTitleText="); printwriter.println(mBreadCrumbShortTitleText); } if(mHead != null) { printwriter.print(s); printwriter.println("Operations:"); String s1 = (new StringBuilder()).append(s).append(" ").toString(); label0: for(Op op = mHead; op != null; op = op.next) { printwriter.print(s); printwriter.print(" Op #"); printwriter.print(0); printwriter.println(":"); printwriter.print(s1); printwriter.print("cmd="); printwriter.print(op.cmd); printwriter.print(" fragment="); printwriter.println(op.fragment); if(op.enterAnim != 0 || op.exitAnim != 0) { printwriter.print(s); printwriter.print("enterAnim=#"); printwriter.print(Integer.toHexString(op.enterAnim)); printwriter.print(" exitAnim=#"); printwriter.println(Integer.toHexString(op.exitAnim)); } if(op.popEnterAnim != 0 || op.popExitAnim != 0) { printwriter.print(s); printwriter.print("popEnterAnim=#"); printwriter.print(Integer.toHexString(op.popEnterAnim)); printwriter.print(" popExitAnim=#"); printwriter.println(Integer.toHexString(op.popExitAnim)); } if(op.removed == null || op.removed.size() <= 0) continue; int i = 0; do { if(i >= op.removed.size()) continue label0; printwriter.print(s1); if(op.removed.size() == 1) { printwriter.print("Removed: "); } else { printwriter.println("Removed:"); printwriter.print(s1); printwriter.print(" #"); printwriter.print(0); printwriter.print(": "); } printwriter.println(op.removed.get(i)); i++; } while(true); } } } public CharSequence getBreadCrumbShortTitle() { CharSequence charsequence; if(mBreadCrumbShortTitleRes != 0) charsequence = mManager.mActivity.getText(mBreadCrumbShortTitleRes); else charsequence = mBreadCrumbShortTitleText; return charsequence; } public int getBreadCrumbShortTitleRes() { return mBreadCrumbShortTitleRes; } public CharSequence getBreadCrumbTitle() { CharSequence charsequence; if(mBreadCrumbTitleRes != 0) charsequence = mManager.mActivity.getText(mBreadCrumbTitleRes); else charsequence = mBreadCrumbTitleText; return charsequence; } public int getBreadCrumbTitleRes() { return mBreadCrumbTitleRes; } public int getId() { return mIndex; } public String getName() { return mName; } public int getTransition() { return mTransition; } public int getTransitionStyle() { return mTransitionStyle; } public FragmentTransaction hide(Fragment fragment) { Op op = new Op(); op.cmd = 4; op.fragment = fragment; addOp(op); return this; } public boolean isAddToBackStackAllowed() { return mAllowAddToBackStack; } public boolean isEmpty() { boolean flag; if(mNumOp == 0) flag = true; else flag = false; return flag; } public void popFromBackStack(boolean flag) { Op op; if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("popFromBackStack: ").append(this).toString()); bumpBackStackNesting(-1); op = mTail; _L10: if(op == null) break MISSING_BLOCK_LABEL_444; op.cmd; JVM INSTR tableswitch 1 7: default 92 // 1 123 // 2 166 // 3 267 // 4 295 // 5 333 // 6 371 // 7 409; goto _L1 _L2 _L3 _L4 _L5 _L6 _L7 _L8 _L8: break MISSING_BLOCK_LABEL_409; _L3: break; /* Loop/switch isn't completed */ _L1: throw new IllegalArgumentException((new StringBuilder()).append("Unknown cmd: ").append(op.cmd).toString()); _L2: Fragment fragment7 = op.fragment; fragment7.mNextAnim = op.popExitAnim; mManager.removeFragment(fragment7, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); _L11: op = op.prev; if(true) goto _L10; else goto _L9 _L9: Fragment fragment5 = op.fragment; if(fragment5 != null) { fragment5.mNextAnim = op.popExitAnim; mManager.removeFragment(fragment5, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); } if(op.removed != null) { int i = 0; while(i < op.removed.size()) { Fragment fragment6 = (Fragment)op.removed.get(i); fragment6.mNextAnim = op.popEnterAnim; mManager.addFragment(fragment6, false); i++; } } goto _L11 _L4: Fragment fragment4 = op.fragment; fragment4.mNextAnim = op.popEnterAnim; mManager.addFragment(fragment4, false); goto _L11 _L5: Fragment fragment3 = op.fragment; fragment3.mNextAnim = op.popEnterAnim; mManager.showFragment(fragment3, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); goto _L11 _L6: Fragment fragment2 = op.fragment; fragment2.mNextAnim = op.popExitAnim; mManager.hideFragment(fragment2, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); goto _L11 _L7: Fragment fragment1 = op.fragment; fragment1.mNextAnim = op.popEnterAnim; mManager.attachFragment(fragment1, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); goto _L11 Fragment fragment = op.fragment; fragment.mNextAnim = op.popEnterAnim; mManager.detachFragment(fragment, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle); goto _L11 if(flag) mManager.moveToState(mManager.mCurState, FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle, true); if(mIndex >= 0) { mManager.freeBackStackIndex(mIndex); mIndex = -1; } return; } public FragmentTransaction remove(Fragment fragment) { Op op = new Op(); op.cmd = 3; op.fragment = fragment; addOp(op); return this; } public FragmentTransaction replace(int i, Fragment fragment) { return replace(i, fragment, null); } public FragmentTransaction replace(int i, Fragment fragment, String s) { if(i == 0) { throw new IllegalArgumentException("Must use non-zero containerViewId"); } else { doAddOp(i, fragment, s, 2); return this; } } public void run() { Op op; if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("Run: ").append(this).toString()); if(mAddToBackStack && mIndex < 0) throw new IllegalStateException("addToBackStack() called after commit()"); bumpBackStackNesting(1); op = mHead; _L10: if(op == null) break MISSING_BLOCK_LABEL_631; op.cmd; JVM INSTR tableswitch 1 7: default 116 // 1 147 // 2 180 // 3 462 // 4 497 // 5 532 // 6 567 // 7 599; goto _L1 _L2 _L3 _L4 _L5 _L6 _L7 _L8 _L8: break MISSING_BLOCK_LABEL_599; _L3: break; /* Loop/switch isn't completed */ _L1: throw new IllegalArgumentException((new StringBuilder()).append("Unknown cmd: ").append(op.cmd).toString()); _L2: Fragment fragment7 = op.fragment; fragment7.mNextAnim = op.enterAnim; mManager.addFragment(fragment7, false); _L11: op = op.next; if(true) goto _L10; else goto _L9 _L9: Fragment fragment5 = op.fragment; if(mManager.mAdded != null) { int i = 0; while(i < mManager.mAdded.size()) { Fragment fragment6 = (Fragment)mManager.mAdded.get(i); if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("OP_REPLACE: adding=").append(fragment5).append(" old=").append(fragment6).toString()); if(fragment5 == null || fragment6.mContainerId == fragment5.mContainerId) if(fragment6 == fragment5) { fragment5 = null; op.fragment = null; } else { if(op.removed == null) op.removed = new ArrayList(); op.removed.add(fragment6); fragment6.mNextAnim = op.exitAnim; if(mAddToBackStack) { fragment6.mBackStackNesting = 1 + fragment6.mBackStackNesting; if(FragmentManagerImpl.DEBUG) Log.v("BackStackEntry", (new StringBuilder()).append("Bump nesting of ").append(fragment6).append(" to ").append(fragment6.mBackStackNesting).toString()); } mManager.removeFragment(fragment6, mTransition, mTransitionStyle); } i++; } } if(fragment5 != null) { fragment5.mNextAnim = op.enterAnim; mManager.addFragment(fragment5, false); } goto _L11 _L4: Fragment fragment4 = op.fragment; fragment4.mNextAnim = op.exitAnim; mManager.removeFragment(fragment4, mTransition, mTransitionStyle); goto _L11 _L5: Fragment fragment3 = op.fragment; fragment3.mNextAnim = op.exitAnim; mManager.hideFragment(fragment3, mTransition, mTransitionStyle); goto _L11 _L6: Fragment fragment2 = op.fragment; fragment2.mNextAnim = op.enterAnim; mManager.showFragment(fragment2, mTransition, mTransitionStyle); goto _L11 _L7: Fragment fragment1 = op.fragment; fragment1.mNextAnim = op.exitAnim; mManager.detachFragment(fragment1, mTransition, mTransitionStyle); goto _L11 Fragment fragment = op.fragment; fragment.mNextAnim = op.enterAnim; mManager.attachFragment(fragment, mTransition, mTransitionStyle); goto _L11 mManager.moveToState(mManager.mCurState, mTransition, mTransitionStyle, true); if(mAddToBackStack) mManager.addBackStackState(this); return; } public FragmentTransaction setBreadCrumbShortTitle(int i) { mBreadCrumbShortTitleRes = i; mBreadCrumbShortTitleText = null; return this; } public FragmentTransaction setBreadCrumbShortTitle(CharSequence charsequence) { mBreadCrumbShortTitleRes = 0; mBreadCrumbShortTitleText = charsequence; return this; } public FragmentTransaction setBreadCrumbTitle(int i) { mBreadCrumbTitleRes = i; mBreadCrumbTitleText = null; return this; } public FragmentTransaction setBreadCrumbTitle(CharSequence charsequence) { mBreadCrumbTitleRes = 0; mBreadCrumbTitleText = charsequence; return this; } public FragmentTransaction setCustomAnimations(int i, int j) { return setCustomAnimations(i, j, 0, 0); } public FragmentTransaction setCustomAnimations(int i, int j, int k, int l) { mEnterAnim = i; mExitAnim = j; mPopEnterAnim = k; mPopExitAnim = l; return this; } public FragmentTransaction setTransition(int i) { mTransition = i; return this; } public FragmentTransaction setTransitionStyle(int i) { mTransitionStyle = i; return this; } public FragmentTransaction show(Fragment fragment) { Op op = new Op(); op.cmd = 5; op.fragment = fragment; addOp(op); return this; } static final int OP_ADD = 1; static final int OP_ATTACH = 7; static final int OP_DETACH = 6; static final int OP_HIDE = 4; static final int OP_NULL = 0; static final int OP_REMOVE = 3; static final int OP_REPLACE = 2; static final int OP_SHOW = 5; static final String TAG = "BackStackEntry"; boolean mAddToBackStack; boolean mAllowAddToBackStack; int mBreadCrumbShortTitleRes; CharSequence mBreadCrumbShortTitleText; int mBreadCrumbTitleRes; CharSequence mBreadCrumbTitleText; boolean mCommitted; int mEnterAnim; int mExitAnim; Op mHead; int mIndex; final FragmentManagerImpl mManager; String mName; int mNumOp; int mPopEnterAnim; int mPopExitAnim; Op mTail; int mTransition; int mTransitionStyle; }