JEB output JD-GUI output
// Decompiled by JEB v0.9.0 alpha

package android.support.v4.app;

import android.util.Log;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;

final class BackStackRecord extends FragmentTransaction implements BackStackEntry, Runnable {
    final class Op {
        Op() {
            super();
        }
    }

    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;

    public BackStackRecord(FragmentManagerImpl arg2) {
        super();
        this.mAllowAddToBackStack = true;
        this.mManager = arg2;
    }

    public FragmentTransaction add(int arg3, Fragment arg4) {
        this.doAddOp(arg3, arg4, 0, 1);
        return this;
    }

    public FragmentTransaction add(int arg2, Fragment arg3, String arg4) {
        this.doAddOp(arg2, arg3, arg4, 1);
        return this;
    }

    public FragmentTransaction add(Fragment arg3, String arg4) {
        this.doAddOp(0, arg3, arg4, 1);
        return this;
    }

    void addOp(Op arg2) {
        if(this.mHead == 0) {
            this.mTail = arg2;
            this.mHead = arg2;
        }
        else {
            arg2.prev = this.mTail;
            this.mTail.next = arg2;
            this.mTail = arg2;
        }

        arg2.enterAnim = this.mEnterAnim;
        arg2.exitAnim = this.mExitAnim;
        arg2.popEnterAnim = this.mPopEnterAnim;
        arg2.popExitAnim = this.mPopExitAnim;
        ++this.mNumOp;
    }

    public FragmentTransaction addToBackStack(String arg3) {
        if(!this.mAllowAddToBackStack) {
            throw new IllegalStateException("This FragmentTransaction is not allowed to be added to the back stack.");
        }

        this.mAddToBackStack = true;
        this.mName = arg3;
        return this;
    }

    public FragmentTransaction attach(Fragment arg3) {
        Op v0 = new Op();
        v0.cmd = 7;
        v0.fragment = arg3;
        this.addOp(v0);
        return this;
    }

    void bumpBackStackNesting(int arg7) {
        if(this.mAddToBackStack) {
            if(FragmentManagerImpl.DEBUG != false) {
                StringBuilder v4 = new StringBuilder();
                v4 = v4.append("Bump nesting in ");
                v4 = v4.append(((Object)this));
                v4 = v4.append(" by ");
                v4 = v4.append(arg7);
                String v4_1 = v4.toString();
                Log.v("BackStackEntry", v4_1);
            }

            Op v1 = this.mHead;
            while(v1 != 0) {
                if(v1.fragment != 0) {
                    v1.fragment.mBackStackNesting += arg7;
                    if(FragmentManagerImpl.DEBUG != false) {
                        v4 = new StringBuilder();
                        v4 = v4.append("Bump nesting of ");
                        v4 = v4.append(v1.fragment);
                        v4 = v4.append(" to ");
                        v4 = v4.append(v1.fragment.mBackStackNesting);
                        v4_1 = v4.toString();
                        Log.v("BackStackEntry", v4_1);
                    }

                }

                if(v1.removed != 0) {
                    int v0 = v1.removed.size() - 1;
                    while(v0 >= 0) {
                        Object v2 = v1.removed.get(v0);
                        ((Fragment)v2).mBackStackNesting += arg7;
                        if(FragmentManagerImpl.DEBUG != false) {
                            v4 = new StringBuilder();
                            v4 = v4.append("Bump nesting of ");
                            v4 = v4.append(v2);
                            v4 = v4.append(" to ");
                            v4 = v4.append(((Fragment)v2).mBackStackNesting);
                            v4_1 = v4.toString();
                            Log.v("BackStackEntry", v4_1);
                        }

                        --v0;
                    }

                }

                v1 = v1.next;
            }

        }

    }

    public int commit() {
        return this.commitInternal(false);
    }

    public int commitAllowingStateLoss() {
        return this.commitInternal(true);
    }

    int commitInternal(boolean arg4) {
        if(this.mCommitted) {
            throw new IllegalStateException("commit already called");
        }

        if(FragmentManagerImpl.DEBUG) {
            StringBuilder v1 = new StringBuilder();
            v1 = v1.append("Commit: ");
            v1 = v1.append(((Object)this));
            String v1_1 = v1.toString();
            Log.v("BackStackEntry", v1_1);
        }

        this.mCommitted = true;
        if(this.mAddToBackStack) {
            this.mIndex = this.mManager.allocBackStackIndex(this);
        }
        else {
            this.mIndex = 1;
        }

        this.mManager.enqueueAction(((Runnable)this), arg4);
        return this.mIndex;
    }

    public FragmentTransaction detach(Fragment arg3) {
        Op v0 = new Op();
        v0.cmd = 6;
        v0.fragment = arg3;
        this.addOp(v0);
        return this;
    }

    public FragmentTransaction disallowAddToBackStack() {
        if(this.mAddToBackStack) {
            throw new IllegalStateException("This transaction is already being added to the back stack");
        }

        this.mAllowAddToBackStack = false;
        return this;
    }

    private void doAddOp(int arg5, Fragment arg6, String arg7, int arg8) {
        arg6.mFragmentManager = this.mManager;
        if(arg7 != 0) {
            if(arg6.mTag != 0 && arg7.equals(arg6.mTag) == false) {
                StringBuilder v2 = new StringBuilder();
                v2 = v2.append("Can\'t change tag of fragment ");
                v2 = v2.append(((Object)arg6));
                v2 = v2.append(": was ");
                v2 = v2.append(arg6.mTag);
                v2 = v2.append(" now ");
                v2 = v2.append(arg7);
                String v2_1 = v2.toString();
                throw new IllegalStateException(v2_1);
            }

            arg6.mTag = arg7;
        }

        if(arg5 != 0) {
            if(arg6.mFragmentId != 0 && arg6.mFragmentId != arg5) {
                v2 = new StringBuilder();
                v2 = v2.append("Can\'t change container ID of fragment ");
                v2 = v2.append(((Object)arg6));
                v2 = v2.append(": was ");
                v2 = v2.append(arg6.mFragmentId);
                v2 = v2.append(" now ");
                v2 = v2.append(arg5);
                v2_1 = v2.toString();
                throw new IllegalStateException(v2_1);
            }

            arg6.mFragmentId = arg5;
            arg6.mContainerId = arg5;
        }

        Op v0 = new Op();
        v0.cmd = arg8;
        v0.fragment = arg6;
        this.addOp(v0);
    }

    public void dump(String arg7, FileDescriptor arg8, PrintWriter arg9, String[] arg10) {
        arg9.print(arg7);
        arg9.print("mName=");
        arg9.print(this.mName);
        arg9.print(" mIndex=");
        arg9.print(this.mIndex);
        arg9.print(" mCommitted=");
        arg9.println(this.mCommitted);
        if(this.mTransition != 0) {
            arg9.print(arg7);
            arg9.print("mTransition=#");
            String v4 = Integer.toHexString(this.mTransition);
            arg9.print(v4);
            arg9.print(" mTransitionStyle=#");
            v4 = Integer.toHexString(this.mTransitionStyle);
            arg9.println(v4);
        }

        if(this.mEnterAnim != 0 || this.mExitAnim != 0) {
            arg9.print(arg7);
            arg9.print("mEnterAnim=#");
            v4 = Integer.toHexString(this.mEnterAnim);
            arg9.print(v4);
            arg9.print(" mExitAnim=#");
            v4 = Integer.toHexString(this.mExitAnim);
            arg9.println(v4);
        }

        if(this.mPopEnterAnim != 0 || this.mPopExitAnim != 0) {
            arg9.print(arg7);
            arg9.print("mPopEnterAnim=#");
            v4 = Integer.toHexString(this.mPopEnterAnim);
            arg9.print(v4);
            arg9.print(" mPopExitAnim=#");
            v4 = Integer.toHexString(this.mPopExitAnim);
            arg9.println(v4);
        }

        if(this.mBreadCrumbTitleRes != 0 || this.mBreadCrumbTitleText != 0) {
            arg9.print(arg7);
            arg9.print("mBreadCrumbTitleRes=#");
            v4 = Integer.toHexString(this.mBreadCrumbTitleRes);
            arg9.print(v4);
            arg9.print(" mBreadCrumbTitleText=");
            arg9.println(this.mBreadCrumbTitleText);
        }

        if(this.mBreadCrumbShortTitleRes != 0 || this.mBreadCrumbShortTitleText != 0) {
            arg9.print(arg7);
            arg9.print("mBreadCrumbShortTitleRes=#");
            v4 = Integer.toHexString(this.mBreadCrumbShortTitleRes);
            arg9.print(v4);
            arg9.print(" mBreadCrumbShortTitleText=");
            arg9.println(this.mBreadCrumbShortTitleText);
        }

        if(this.mHead != 0) {
            arg9.print(arg7);
            arg9.println("Operations:");
            StringBuilder v4_1 = new StringBuilder();
            v4_1 = v4_1.append(arg7);
            v4_1 = v4_1.append("    ");
            String v1 = v4_1.toString();
            Op v3 = this.mHead;
            while(v3 != 0) {
                arg9.print(arg7);
                arg9.print("  Op #");
                arg9.print(0);
                arg9.println(":");
                arg9.print(v1);
                arg9.print("cmd=");
                arg9.print(v3.cmd);
                arg9.print(" fragment=");
                arg9.println(v3.fragment);
                if(v3.enterAnim != 0 || v3.exitAnim != 0) {
                    arg9.print(arg7);
                    arg9.print("enterAnim=#");
                    v4 = Integer.toHexString(v3.enterAnim);
                    arg9.print(v4);
                    arg9.print(" exitAnim=#");
                    v4 = Integer.toHexString(v3.exitAnim);
                    arg9.println(v4);
                }

                if(v3.popEnterAnim != 0 || v3.popExitAnim != 0) {
                    arg9.print(arg7);
                    arg9.print("popEnterAnim=#");
                    v4 = Integer.toHexString(v3.popEnterAnim);
                    arg9.print(v4);
                    arg9.print(" popExitAnim=#");
                    v4 = Integer.toHexString(v3.popExitAnim);
                    arg9.println(v4);
                }

                if(v3.removed != 0 && v3.removed.size() > 0) {
                    int v0 = 0;
                    while(v0 < v3.removed.size()) {
                        arg9.print(v1);
                        if(v3.removed.size() == 1) {
                            arg9.print("Removed: ");
                        }
                        else {
                            arg9.println("Removed:");
                            arg9.print(v1);
                            arg9.print("  #");
                            arg9.print(0);
                            arg9.print(": ");
                        }

                        Object v4_2 = v3.removed.get(v0);
                        arg9.println(v4_2);
                        ++v0;
                    }

                }

                v3 = v3.next;
            }

        }

    }

    public CharSequence getBreadCrumbShortTitle() {
        if(this.mBreadCrumbShortTitleRes != 0) {
            CharSequence v0 = this.mManager.mActivity.getText(this.mBreadCrumbShortTitleRes);
        }
        else {
            v0 = this.mBreadCrumbShortTitleText;
        }

        return v0;
    }

    public int getBreadCrumbShortTitleRes() {
        return this.mBreadCrumbShortTitleRes;
    }

    public CharSequence getBreadCrumbTitle() {
        if(this.mBreadCrumbTitleRes != 0) {
            CharSequence v0 = this.mManager.mActivity.getText(this.mBreadCrumbTitleRes);
        }
        else {
            v0 = this.mBreadCrumbTitleText;
        }

        return v0;
    }

    public int getBreadCrumbTitleRes() {
        return this.mBreadCrumbTitleRes;
    }

    public int getId() {
        return this.mIndex;
    }

    public String getName() {
        return this.mName;
    }

    public int getTransition() {
        return this.mTransition;
    }

    public int getTransitionStyle() {
        return this.mTransitionStyle;
    }

    public FragmentTransaction hide(Fragment arg3) {
        Op v0 = new Op();
        v0.cmd = 4;
        v0.fragment = arg3;
        this.addOp(v0);
        return this;
    }

    public boolean isAddToBackStackAllowed() {
        return this.mAllowAddToBackStack;
    }

    public boolean isEmpty() {
        if(this.mNumOp == 0) {
            boolean v0 = true;
        }
        else {
            v0 = false;
        }

        return v0;
    }

    public void popFromBackStack(boolean arg11) {
        int v9 = 1;
        if(FragmentManagerImpl.DEBUG) {
            StringBuilder v5 = new StringBuilder();
            v5 = v5.append("popFromBackStack: ");
            v5 = v5.append(((Object)this));
            String v5_1 = v5.toString();
            Log.v("BackStackEntry", v5_1);
        }

        this.bumpBackStackNesting(v9);
        Op v3 = this.mTail;
        while(v3 != 0) {
            switch(v3.cmd) {
                case 0x1: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.popExitAnim;
                    v4 = this.mManager;
                    v5_2 = FragmentManagerImpl.reverseTransit(this.mTransition);
                    v4.removeFragment(v0, v5_2, this.mTransitionStyle);
                    break;
                }
                case 0x2: {
                    v0 = v3.fragment;
                    if(v0 != 0) {
                        v0.mNextAnim = v3.popExitAnim;
                        FragmentManagerImpl v4 = this.mManager;
                        int v5_2 = FragmentManagerImpl.reverseTransit(this.mTransition);
                        v4.removeFragment(v0, v5_2, this.mTransitionStyle);
                    }

                    if(v3.removed == 0) {
                        goto label_32;
                    }

                    int v1 = 0;
                    while(v1 < v3.removed.size()) {
                        Object v2 = v3.removed.get(v1);
                        ((Fragment)v2).mNextAnim = v3.popEnterAnim;
                        this.mManager.addFragment(((Fragment)v2), false);
                        ++v1;
                    }

                }
                case 0x3: {
                    Fragment v0 = v3.fragment;
                    v0.mNextAnim = v3.popEnterAnim;
                    this.mManager.addFragment(v0, false);
                    break;
                }
                case 0x4: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.popEnterAnim;
                    v4 = this.mManager;
                    v5_2 = FragmentManagerImpl.reverseTransit(this.mTransition);
                    v4.showFragment(v0, v5_2, this.mTransitionStyle);
                    break;
                }
                case 0x5: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.popExitAnim;
                    v4 = this.mManager;
                    v5_2 = FragmentManagerImpl.reverseTransit(this.mTransition);
                    v4.hideFragment(v0, v5_2, this.mTransitionStyle);
                    break;
                }
                case 0x6: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.popEnterAnim;
                    v4 = this.mManager;
                    v5_2 = FragmentManagerImpl.reverseTransit(this.mTransition);
                    v4.attachFragment(v0, v5_2, this.mTransitionStyle);
                    break;
                }
                case 0x7: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.popEnterAnim;
                    v4 = this.mManager;
                    v5_2 = FragmentManagerImpl.reverseTransit(this.mTransition);
                    v4.detachFragment(v0, v5_2, this.mTransitionStyle);
                    break;
                }
                default: {
                    v5 = new StringBuilder();
                    v5 = v5.append("Unknown cmd: ");
                    v5 = v5.append(v3.cmd);
                    v5_1 = v5.toString();
                    throw new IllegalArgumentException(v5_1);
                }
            }

        label_32:
            v3 = v3.prev;
        }

        if(arg11) {
            v4 = this.mManager;
            v5_2 = this.mManager.mCurState;
            int v6 = FragmentManagerImpl.reverseTransit(this.mTransition);
            v4.moveToState(v5_2, v6, this.mTransitionStyle, true);
        }

        if(this.mIndex >= 0) {
            this.mManager.freeBackStackIndex(this.mIndex);
            this.mIndex = v9;
        }

    }

    public FragmentTransaction remove(Fragment arg3) {
        Op v0 = new Op();
        v0.cmd = 3;
        v0.fragment = arg3;
        this.addOp(v0);
        return this;
    }

    public FragmentTransaction replace(int arg2, Fragment arg3) {
        return this.replace(arg2, arg3, 0);
    }

    public FragmentTransaction replace(int arg3, Fragment arg4, String arg5) {
        if(arg3 == 0) {
            throw new IllegalArgumentException("Must use non-zero containerViewId");
        }

        this.doAddOp(arg3, arg4, arg5, 2);
        return this;
    }

    public void run() {
        if(FragmentManagerImpl.DEBUG) {
            StringBuilder v5 = new StringBuilder();
            v5 = v5.append("Run: ");
            v5 = v5.append(((Object)this));
            String v5_1 = v5.toString();
            Log.v("BackStackEntry", v5_1);
        }

        if(this.mAddToBackStack) {
            if(this.mIndex >= 0) {
                goto label_18;
            }

            goto label_15;
        }

    label_18:
        this.bumpBackStackNesting(1);
        Op v3 = this.mHead;
        while(v3 != 0) {
            switch(v3.cmd) {
                case 0x1: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.enterAnim;
                    this.mManager.addFragment(v0, false);
                    break;
                }
                case 0x2: {
                    v0 = v3.fragment;
                    if(this.mManager.mAdded != 0) {
                        int v1 = 0;
                        while(v1 < this.mManager.mAdded.size()) {
                            Object v2 = this.mManager.mAdded.get(v1);
                            if(FragmentManagerImpl.DEBUG != false) {
                                v5 = new StringBuilder();
                                v5 = v5.append("OP_REPLACE: adding=");
                                v5 = v5.append(((Object)v0));
                                v5 = v5.append(" old=");
                                v5 = v5.append(v2);
                                v5_1 = v5.toString();
                                Log.v("BackStackEntry", v5_1);
                            }

                            if(v0 == 0 || ((Fragment)v2).mContainerId == v0.mContainerId) {
                                if((((Fragment)v2)) == v0) {
                                    Object v0_1 = 0;
                                    v3.fragment = v0;
                                }
                                else {
                                    if(v3.removed == 0) {
                                        v3.removed = new ArrayList();
                                    }

                                    v3.removed.add(v2);
                                    ((Fragment)v2).mNextAnim = v3.exitAnim;
                                    if(this.mAddToBackStack != false) {
                                        ++((Fragment)v2).mBackStackNesting;
                                        if(FragmentManagerImpl.DEBUG != false) {
                                            v5 = new StringBuilder();
                                            v5 = v5.append("Bump nesting of ");
                                            v5 = v5.append(v2);
                                            v5 = v5.append(" to ");
                                            v5 = v5.append(((Fragment)v2).mBackStackNesting);
                                            v5_1 = v5.toString();
                                            Log.v("BackStackEntry", v5_1);
                                        }

                                    }

                                    this.mManager.removeFragment(((Fragment)v2), this.mTransition, this.mTransitionStyle);
                                }

                            }

                            ++v1;
                        }

                    }

                    if(v0 == 0) {
                        goto label_36;
                    }

                    v0.mNextAnim = v3.enterAnim;
                    this.mManager.addFragment(v0, false);
                    break;
                }
                case 0x3: {
                    Fragment v0 = v3.fragment;
                    v0.mNextAnim = v3.exitAnim;
                    this.mManager.removeFragment(v0, this.mTransition, this.mTransitionStyle);
                    break;
                }
                case 0x4: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.exitAnim;
                    this.mManager.hideFragment(v0, this.mTransition, this.mTransitionStyle);
                    break;
                }
                case 0x5: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.enterAnim;
                    this.mManager.showFragment(v0, this.mTransition, this.mTransitionStyle);
                    break;
                }
                case 0x6: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.exitAnim;
                    this.mManager.detachFragment(v0, this.mTransition, this.mTransitionStyle);
                    break;
                }
                case 0x7: {
                    v0 = v3.fragment;
                    v0.mNextAnim = v3.enterAnim;
                    this.mManager.attachFragment(v0, this.mTransition, this.mTransitionStyle);
                    break;
                }
                default: {
                    v5 = new StringBuilder();
                    v5 = v5.append("Unknown cmd: ");
                    v5 = v5.append(v3.cmd);
                    v5_1 = v5.toString();
                    throw new IllegalArgumentException(v5_1);
                }
            }

        label_36:
            v3 = v3.next;
        }

        this.mManager.moveToState(this.mManager.mCurState, this.mTransition, this.mTransitionStyle, true);
        if(this.mAddToBackStack) {
            this.mManager.addBackStackState(this);
        }

        return;
    label_15:
        throw new IllegalStateException("addToBackStack() called after commit()");
    }

    public FragmentTransaction setBreadCrumbShortTitle(int arg2) {
        this.mBreadCrumbShortTitleRes = arg2;
        this.mBreadCrumbShortTitleText = 0;
        return this;
    }

    public FragmentTransaction setBreadCrumbShortTitle(CharSequence arg2) {
        this.mBreadCrumbShortTitleRes = 0;
        this.mBreadCrumbShortTitleText = arg2;
        return this;
    }

    public FragmentTransaction setBreadCrumbTitle(int arg2) {
        this.mBreadCrumbTitleRes = arg2;
        this.mBreadCrumbTitleText = 0;
        return this;
    }

    public FragmentTransaction setBreadCrumbTitle(CharSequence arg2) {
        this.mBreadCrumbTitleRes = 0;
        this.mBreadCrumbTitleText = arg2;
        return this;
    }

    public FragmentTransaction setCustomAnimations(int arg2, int arg3) {
        return this.setCustomAnimations(arg2, arg3, 0, 0);
    }

    public FragmentTransaction setCustomAnimations(int arg1, int arg2, int arg3, int arg4) {
        this.mEnterAnim = arg1;
        this.mExitAnim = arg2;
        this.mPopEnterAnim = arg3;
        this.mPopExitAnim = arg4;
        return this;
    }

    public FragmentTransaction setTransition(int arg1) {
        this.mTransition = arg1;
        return this;
    }

    public FragmentTransaction setTransitionStyle(int arg1) {
        this.mTransitionStyle = arg1;
        return this;
    }

    public FragmentTransaction show(Fragment arg3) {
        Op v0 = new Op();
        v0.cmd = 5;
        v0.fragment = arg3;
        this.addOp(v0);
        return this;
    }
}
// Decompiled by JD-GUI v0.3.5

package android.support.v4.app;

import android.util.Log;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;

final class BackStackRecord extends FragmentTransaction
  implements FragmentManager.BackStackEntry, Runnable
{
  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 = true;
  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;

  public BackStackRecord(FragmentManagerImpl paramFragmentManagerImpl)
  {
    this.mManager = paramFragmentManagerImpl;
  }

  private void doAddOp(int paramInt1, Fragment paramFragment, String paramString, int paramInt2)
  {
    paramFragment.mFragmentManager = this.mManager;
    if (paramString != null)
    {
      if ((paramFragment.mTag != null) && (!paramString.equals(paramFragment.mTag)))
        throw new IllegalStateException("Can't change tag of fragment " + paramFragment + ": was " + paramFragment.mTag + " now " + paramString);
      paramFragment.mTag = paramString;
    }
    if (paramInt1 != 0)
    {
      if ((paramFragment.mFragmentId != 0) && (paramFragment.mFragmentId != paramInt1))
        throw new IllegalStateException("Can't change container ID of fragment " + paramFragment + ": was " + paramFragment.mFragmentId + " now " + paramInt1);
      paramFragment.mFragmentId = paramInt1;
      paramFragment.mContainerId = paramInt1;
    }
    Op localOp = new Op();
    localOp.cmd = paramInt2;
    localOp.fragment = paramFragment;
    addOp(localOp);
  }

  public FragmentTransaction add(int paramInt, Fragment paramFragment)
  {
    doAddOp(paramInt, paramFragment, null, 1);
    return this;
  }

  public FragmentTransaction add(int paramInt, Fragment paramFragment, String paramString)
  {
    doAddOp(paramInt, paramFragment, paramString, 1);
    return this;
  }

  public FragmentTransaction add(Fragment paramFragment, String paramString)
  {
    doAddOp(0, paramFragment, paramString, 1);
    return this;
  }

  void addOp(Op paramOp)
  {
    if (this.mHead == null)
    {
      this.mTail = paramOp;
      this.mHead = paramOp;
    }
    while (true)
    {
      paramOp.enterAnim = this.mEnterAnim;
      paramOp.exitAnim = this.mExitAnim;
      paramOp.popEnterAnim = this.mPopEnterAnim;
      paramOp.popExitAnim = this.mPopExitAnim;
      this.mNumOp = (1 + this.mNumOp);
      return;
      paramOp.prev = this.mTail;
      this.mTail.next = paramOp;
      this.mTail = paramOp;
    }
  }

  public FragmentTransaction addToBackStack(String paramString)
  {
    if (!this.mAllowAddToBackStack)
      throw new IllegalStateException("This FragmentTransaction is not allowed to be added to the back stack.");
    this.mAddToBackStack = true;
    this.mName = paramString;
    return this;
  }

  public FragmentTransaction attach(Fragment paramFragment)
  {
    Op localOp = new Op();
    localOp.cmd = 7;
    localOp.fragment = paramFragment;
    addOp(localOp);
    return this;
  }

  void bumpBackStackNesting(int paramInt)
  {
    if (!this.mAddToBackStack);
    while (true)
    {
      return;
      if (FragmentManagerImpl.DEBUG)
        Log.v("BackStackEntry", "Bump nesting in " + this + " by " + paramInt);
      for (Op localOp = this.mHead; localOp != null; localOp = localOp.next)
      {
        if (localOp.fragment != null)
        {
          Fragment localFragment2 = localOp.fragment;
          localFragment2.mBackStackNesting = (paramInt + localFragment2.mBackStackNesting);
          if (FragmentManagerImpl.DEBUG)
            Log.v("BackStackEntry", "Bump nesting of " + localOp.fragment + " to " + localOp.fragment.mBackStackNesting);
        }
        if (localOp.removed != null)
          for (int i = -1 + localOp.removed.size(); i >= 0; i--)
          {
            Fragment localFragment1 = (Fragment)localOp.removed.get(i);
            localFragment1.mBackStackNesting = (paramInt + localFragment1.mBackStackNesting);
            if (FragmentManagerImpl.DEBUG)
              Log.v("BackStackEntry", "Bump nesting of " + localFragment1 + " to " + localFragment1.mBackStackNesting);
          }
      }
    }
  }

  public int commit()
  {
    return commitInternal(false);
  }

  public int commitAllowingStateLoss()
  {
    return commitInternal(true);
  }

  int commitInternal(boolean paramBoolean)
  {
    if (this.mCommitted)
      throw new IllegalStateException("commit already called");
    if (FragmentManagerImpl.DEBUG)
      Log.v("BackStackEntry", "Commit: " + this);
    this.mCommitted = true;
    if (this.mAddToBackStack);
    for (this.mIndex = this.mManager.allocBackStackIndex(this); ; this.mIndex = -1)
    {
      this.mManager.enqueueAction(this, paramBoolean);
      return this.mIndex;
    }
  }

  public FragmentTransaction detach(Fragment paramFragment)
  {
    Op localOp = new Op();
    localOp.cmd = 6;
    localOp.fragment = paramFragment;
    addOp(localOp);
    return this;
  }

  public FragmentTransaction disallowAddToBackStack()
  {
    if (this.mAddToBackStack)
      throw new IllegalStateException("This transaction is already being added to the back stack");
    this.mAllowAddToBackStack = false;
    return this;
  }

  public void dump(String paramString, FileDescriptor paramFileDescriptor, PrintWriter paramPrintWriter, String[] paramArrayOfString)
  {
    paramPrintWriter.print(paramString);
    paramPrintWriter.print("mName=");
    paramPrintWriter.print(this.mName);
    paramPrintWriter.print(" mIndex=");
    paramPrintWriter.print(this.mIndex);
    paramPrintWriter.print(" mCommitted=");
    paramPrintWriter.println(this.mCommitted);
    if (this.mTransition != 0)
    {
      paramPrintWriter.print(paramString);
      paramPrintWriter.print("mTransition=#");
      paramPrintWriter.print(Integer.toHexString(this.mTransition));
      paramPrintWriter.print(" mTransitionStyle=#");
      paramPrintWriter.println(Integer.toHexString(this.mTransitionStyle));
    }
    if ((this.mEnterAnim != 0) || (this.mExitAnim != 0))
    {
      paramPrintWriter.print(paramString);
      paramPrintWriter.print("mEnterAnim=#");
      paramPrintWriter.print(Integer.toHexString(this.mEnterAnim));
      paramPrintWriter.print(" mExitAnim=#");
      paramPrintWriter.println(Integer.toHexString(this.mExitAnim));
    }
    if ((this.mPopEnterAnim != 0) || (this.mPopExitAnim != 0))
    {
      paramPrintWriter.print(paramString);
      paramPrintWriter.print("mPopEnterAnim=#");
      paramPrintWriter.print(Integer.toHexString(this.mPopEnterAnim));
      paramPrintWriter.print(" mPopExitAnim=#");
      paramPrintWriter.println(Integer.toHexString(this.mPopExitAnim));
    }
    if ((this.mBreadCrumbTitleRes != 0) || (this.mBreadCrumbTitleText != null))
    {
      paramPrintWriter.print(paramString);
      paramPrintWriter.print("mBreadCrumbTitleRes=#");
      paramPrintWriter.print(Integer.toHexString(this.mBreadCrumbTitleRes));
      paramPrintWriter.print(" mBreadCrumbTitleText=");
      paramPrintWriter.println(this.mBreadCrumbTitleText);
    }
    if ((this.mBreadCrumbShortTitleRes != 0) || (this.mBreadCrumbShortTitleText != null))
    {
      paramPrintWriter.print(paramString);
      paramPrintWriter.print("mBreadCrumbShortTitleRes=#");
      paramPrintWriter.print(Integer.toHexString(this.mBreadCrumbShortTitleRes));
      paramPrintWriter.print(" mBreadCrumbShortTitleText=");
      paramPrintWriter.println(this.mBreadCrumbShortTitleText);
    }
    if (this.mHead != null)
    {
      paramPrintWriter.print(paramString);
      paramPrintWriter.println("Operations:");
      String str = paramString + "    ";
      for (Op localOp = this.mHead; localOp != null; localOp = localOp.next)
      {
        paramPrintWriter.print(paramString);
        paramPrintWriter.print("  Op #");
        paramPrintWriter.print(0);
        paramPrintWriter.println(":");
        paramPrintWriter.print(str);
        paramPrintWriter.print("cmd=");
        paramPrintWriter.print(localOp.cmd);
        paramPrintWriter.print(" fragment=");
        paramPrintWriter.println(localOp.fragment);
        if ((localOp.enterAnim != 0) || (localOp.exitAnim != 0))
        {
          paramPrintWriter.print(paramString);
          paramPrintWriter.print("enterAnim=#");
          paramPrintWriter.print(Integer.toHexString(localOp.enterAnim));
          paramPrintWriter.print(" exitAnim=#");
          paramPrintWriter.println(Integer.toHexString(localOp.exitAnim));
        }
        if ((localOp.popEnterAnim != 0) || (localOp.popExitAnim != 0))
        {
          paramPrintWriter.print(paramString);
          paramPrintWriter.print("popEnterAnim=#");
          paramPrintWriter.print(Integer.toHexString(localOp.popEnterAnim));
          paramPrintWriter.print(" popExitAnim=#");
          paramPrintWriter.println(Integer.toHexString(localOp.popExitAnim));
        }
        if ((localOp.removed != null) && (localOp.removed.size() > 0))
        {
          int i = 0;
          if (i < localOp.removed.size())
          {
            paramPrintWriter.print(str);
            if (localOp.removed.size() == 1)
              paramPrintWriter.print("Removed: ");
            while (true)
            {
              paramPrintWriter.println(localOp.removed.get(i));
              i++;
              break;
              paramPrintWriter.println("Removed:");
              paramPrintWriter.print(str);
              paramPrintWriter.print("  #");
              paramPrintWriter.print(0);
              paramPrintWriter.print(": ");
            }
          }
        }
      }
    }
  }

  public CharSequence getBreadCrumbShortTitle()
  {
    if (this.mBreadCrumbShortTitleRes != 0);
    for (CharSequence localCharSequence = this.mManager.mActivity.getText(this.mBreadCrumbShortTitleRes); ; localCharSequence = this.mBreadCrumbShortTitleText)
      return localCharSequence;
  }

  public int getBreadCrumbShortTitleRes()
  {
    return this.mBreadCrumbShortTitleRes;
  }

  public CharSequence getBreadCrumbTitle()
  {
    if (this.mBreadCrumbTitleRes != 0);
    for (CharSequence localCharSequence = this.mManager.mActivity.getText(this.mBreadCrumbTitleRes); ; localCharSequence = this.mBreadCrumbTitleText)
      return localCharSequence;
  }

  public int getBreadCrumbTitleRes()
  {
    return this.mBreadCrumbTitleRes;
  }

  public int getId()
  {
    return this.mIndex;
  }

  public String getName()
  {
    return this.mName;
  }

  public int getTransition()
  {
    return this.mTransition;
  }

  public int getTransitionStyle()
  {
    return this.mTransitionStyle;
  }

  public FragmentTransaction hide(Fragment paramFragment)
  {
    Op localOp = new Op();
    localOp.cmd = 4;
    localOp.fragment = paramFragment;
    addOp(localOp);
    return this;
  }

  public boolean isAddToBackStackAllowed()
  {
    return this.mAllowAddToBackStack;
  }

  public boolean isEmpty()
  {
    if (this.mNumOp == 0);
    for (boolean bool = true; ; bool = false)
      return bool;
  }

  public void popFromBackStack(boolean paramBoolean)
  {
    if (FragmentManagerImpl.DEBUG)
      Log.v("BackStackEntry", "popFromBackStack: " + this);
    bumpBackStackNesting(-1);
    Op localOp = this.mTail;
    if (localOp != null)
    {
      switch (localOp.cmd)
      {
      default:
        throw new IllegalArgumentException("Unknown cmd: " + localOp.cmd);
      case 1:
        Fragment localFragment8 = localOp.fragment;
        localFragment8.mNextAnim = localOp.popExitAnim;
        this.mManager.removeFragment(localFragment8, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
      }
      while (true)
      {
        localOp = localOp.prev;
        break;
        Fragment localFragment6 = localOp.fragment;
        if (localFragment6 != null)
        {
          localFragment6.mNextAnim = localOp.popExitAnim;
          this.mManager.removeFragment(localFragment6, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
        }
        if (localOp.removed != null)
        {
          for (int i = 0; i < localOp.removed.size(); i++)
          {
            Fragment localFragment7 = (Fragment)localOp.removed.get(i);
            localFragment7.mNextAnim = localOp.popEnterAnim;
            this.mManager.addFragment(localFragment7, false);
          }
          Fragment localFragment5 = localOp.fragment;
          localFragment5.mNextAnim = localOp.popEnterAnim;
          this.mManager.addFragment(localFragment5, false);
          continue;
          Fragment localFragment4 = localOp.fragment;
          localFragment4.mNextAnim = localOp.popEnterAnim;
          this.mManager.showFragment(localFragment4, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
          continue;
          Fragment localFragment3 = localOp.fragment;
          localFragment3.mNextAnim = localOp.popExitAnim;
          this.mManager.hideFragment(localFragment3, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
          continue;
          Fragment localFragment2 = localOp.fragment;
          localFragment2.mNextAnim = localOp.popEnterAnim;
          this.mManager.attachFragment(localFragment2, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
          continue;
          Fragment localFragment1 = localOp.fragment;
          localFragment1.mNextAnim = localOp.popEnterAnim;
          this.mManager.detachFragment(localFragment1, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
        }
      }
    }
    if (paramBoolean)
      this.mManager.moveToState(this.mManager.mCurState, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle, true);
    if (this.mIndex >= 0)
    {
      this.mManager.freeBackStackIndex(this.mIndex);
      this.mIndex = -1;
    }
  }

  public FragmentTransaction remove(Fragment paramFragment)
  {
    Op localOp = new Op();
    localOp.cmd = 3;
    localOp.fragment = paramFragment;
    addOp(localOp);
    return this;
  }

  public FragmentTransaction replace(int paramInt, Fragment paramFragment)
  {
    return replace(paramInt, paramFragment, null);
  }

  public FragmentTransaction replace(int paramInt, Fragment paramFragment, String paramString)
  {
    if (paramInt == 0)
      throw new IllegalArgumentException("Must use non-zero containerViewId");
    doAddOp(paramInt, paramFragment, paramString, 2);
    return this;
  }

  public void run()
  {
    if (FragmentManagerImpl.DEBUG)
      Log.v("BackStackEntry", "Run: " + this);
    if ((this.mAddToBackStack) && (this.mIndex < 0))
      throw new IllegalStateException("addToBackStack() called after commit()");
    bumpBackStackNesting(1);
    Op localOp = this.mHead;
    if (localOp != null)
    {
      switch (localOp.cmd)
      {
      default:
        throw new IllegalArgumentException("Unknown cmd: " + localOp.cmd);
      case 1:
        Fragment localFragment8 = localOp.fragment;
        localFragment8.mNextAnim = localOp.enterAnim;
        this.mManager.addFragment(localFragment8, false);
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
      }
      while (true)
      {
        localOp = localOp.next;
        break;
        Fragment localFragment6 = localOp.fragment;
        if (this.mManager.mAdded != null)
        {
          int i = 0;
          if (i < this.mManager.mAdded.size())
          {
            Fragment localFragment7 = (Fragment)this.mManager.mAdded.get(i);
            if (FragmentManagerImpl.DEBUG)
              Log.v("BackStackEntry", "OP_REPLACE: adding=" + localFragment6 + " old=" + localFragment7);
            if ((localFragment6 == null) || (localFragment7.mContainerId == localFragment6.mContainerId))
            {
              if (localFragment7 != localFragment6)
                break label314;
              localFragment6 = null;
              localOp.fragment = null;
            }
            while (true)
            {
              i++;
              break;
              label314: if (localOp.removed == null)
                localOp.removed = new ArrayList();
              localOp.removed.add(localFragment7);
              localFragment7.mNextAnim = localOp.exitAnim;
              if (this.mAddToBackStack)
              {
                localFragment7.mBackStackNesting = (1 + localFragment7.mBackStackNesting);
                if (FragmentManagerImpl.DEBUG)
                  Log.v("BackStackEntry", "Bump nesting of " + localFragment7 + " to " + localFragment7.mBackStackNesting);
              }
              this.mManager.removeFragment(localFragment7, this.mTransition, this.mTransitionStyle);
            }
          }
        }
        if (localFragment6 != null)
        {
          localFragment6.mNextAnim = localOp.enterAnim;
          this.mManager.addFragment(localFragment6, false);
          continue;
          Fragment localFragment5 = localOp.fragment;
          localFragment5.mNextAnim = localOp.exitAnim;
          this.mManager.removeFragment(localFragment5, this.mTransition, this.mTransitionStyle);
          continue;
          Fragment localFragment4 = localOp.fragment;
          localFragment4.mNextAnim = localOp.exitAnim;
          this.mManager.hideFragment(localFragment4, this.mTransition, this.mTransitionStyle);
          continue;
          Fragment localFragment3 = localOp.fragment;
          localFragment3.mNextAnim = localOp.enterAnim;
          this.mManager.showFragment(localFragment3, this.mTransition, this.mTransitionStyle);
          continue;
          Fragment localFragment2 = localOp.fragment;
          localFragment2.mNextAnim = localOp.exitAnim;
          this.mManager.detachFragment(localFragment2, this.mTransition, this.mTransitionStyle);
          continue;
          Fragment localFragment1 = localOp.fragment;
          localFragment1.mNextAnim = localOp.enterAnim;
          this.mManager.attachFragment(localFragment1, this.mTransition, this.mTransitionStyle);
        }
      }
    }
    this.mManager.moveToState(this.mManager.mCurState, this.mTransition, this.mTransitionStyle, true);
    if (this.mAddToBackStack)
      this.mManager.addBackStackState(this);
  }

  public FragmentTransaction setBreadCrumbShortTitle(int paramInt)
  {
    this.mBreadCrumbShortTitleRes = paramInt;
    this.mBreadCrumbShortTitleText = null;
    return this;
  }

  public FragmentTransaction setBreadCrumbShortTitle(CharSequence paramCharSequence)
  {
    this.mBreadCrumbShortTitleRes = 0;
    this.mBreadCrumbShortTitleText = paramCharSequence;
    return this;
  }

  public FragmentTransaction setBreadCrumbTitle(int paramInt)
  {
    this.mBreadCrumbTitleRes = paramInt;
    this.mBreadCrumbTitleText = null;
    return this;
  }

  public FragmentTransaction setBreadCrumbTitle(CharSequence paramCharSequence)
  {
    this.mBreadCrumbTitleRes = 0;
    this.mBreadCrumbTitleText = paramCharSequence;
    return this;
  }

  public FragmentTransaction setCustomAnimations(int paramInt1, int paramInt2)
  {
    return setCustomAnimations(paramInt1, paramInt2, 0, 0);
  }

  public FragmentTransaction setCustomAnimations(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    this.mEnterAnim = paramInt1;
    this.mExitAnim = paramInt2;
    this.mPopEnterAnim = paramInt3;
    this.mPopExitAnim = paramInt4;
    return this;
  }

  public FragmentTransaction setTransition(int paramInt)
  {
    this.mTransition = paramInt;
    return this;
  }

  public FragmentTransaction setTransitionStyle(int paramInt)
  {
    this.mTransitionStyle = paramInt;
    return this;
  }

  public FragmentTransaction show(Fragment paramFragment)
  {
    Op localOp = new Op();
    localOp.cmd = 5;
    localOp.fragment = paramFragment;
    addOp(localOp);
    return this;
  }

  static final class Op
  {
    int cmd;
    int enterAnim;
    int exitAnim;
    Fragment fragment;
    Op next;
    int popEnterAnim;
    int popExitAnim;
    Op prev;
    ArrayList removed;
  }
}