package androidx.fragment.app; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import androidx.annotation.AnimRes; import androidx.annotation.AnimatorRes; import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.StyleRes; import androidx.core.view.ViewCompat; import androidx.lifecycle.Lifecycle; import c.d.b.a.a; import java.lang.reflect.Modifier; import java.util.ArrayList; public abstract class FragmentTransaction { public static final int OP_ADD = 1; public static final int OP_ATTACH = 7; public static final int OP_DETACH = 6; public static final int OP_HIDE = 4; public static final int OP_NULL = 0; public static final int OP_REMOVE = 3; public static final int OP_REPLACE = 2; public static final int OP_SET_MAX_LIFECYCLE = 10; public static final int OP_SET_PRIMARY_NAV = 8; public static final int OP_SHOW = 5; public static final int OP_UNSET_PRIMARY_NAV = 9; public static final int TRANSIT_ENTER_MASK = 4096; public static final int TRANSIT_EXIT_MASK = 8192; public static final int TRANSIT_FRAGMENT_CLOSE = 8194; public static final int TRANSIT_FRAGMENT_FADE = 4099; public static final int TRANSIT_FRAGMENT_OPEN = 4097; public static final int TRANSIT_NONE = 0; public static final int TRANSIT_UNSET = -1; public boolean mAddToBackStack; public boolean mAllowAddToBackStack; public int mBreadCrumbShortTitleRes; public CharSequence mBreadCrumbShortTitleText; public int mBreadCrumbTitleRes; public CharSequence mBreadCrumbTitleText; private final ClassLoader mClassLoader; public ArrayList mCommitRunnables; public int mEnterAnim; public int mExitAnim; private final FragmentFactory mFragmentFactory; @Nullable public String mName; public ArrayList mOps; public int mPopEnterAnim; public int mPopExitAnim; public boolean mReorderingAllowed; public ArrayList mSharedElementSourceNames; public ArrayList mSharedElementTargetNames; public int mTransition; public static final class Op { public int mCmd; public Lifecycle.State mCurrentMaxState; public int mEnterAnim; public int mExitAnim; public Fragment mFragment; public Lifecycle.State mOldMaxState; public int mPopEnterAnim; public int mPopExitAnim; public Op() { } public Op(int i, Fragment fragment) { this.mCmd = i; this.mFragment = fragment; Lifecycle.State state = Lifecycle.State.RESUMED; this.mOldMaxState = state; this.mCurrentMaxState = state; } public Op(int i, @NonNull Fragment fragment, Lifecycle.State state) { this.mCmd = i; this.mFragment = fragment; this.mOldMaxState = fragment.mMaxState; this.mCurrentMaxState = state; } } @Deprecated public FragmentTransaction() { this.mOps = new ArrayList<>(); this.mAllowAddToBackStack = true; this.mReorderingAllowed = false; this.mFragmentFactory = null; this.mClassLoader = null; } public FragmentTransaction(@NonNull FragmentFactory fragmentFactory, @Nullable ClassLoader classLoader) { this.mOps = new ArrayList<>(); this.mAllowAddToBackStack = true; this.mReorderingAllowed = false; this.mFragmentFactory = fragmentFactory; this.mClassLoader = classLoader; } @NonNull private Fragment createFragment(@NonNull Class cls, @Nullable Bundle bundle) { FragmentFactory fragmentFactory = this.mFragmentFactory; if (fragmentFactory != null) { ClassLoader classLoader = this.mClassLoader; if (classLoader != null) { Fragment instantiate = fragmentFactory.instantiate(classLoader, cls.getName()); if (bundle != null) { instantiate.setArguments(bundle); } return instantiate; } throw new IllegalStateException("The FragmentManager must be attached to itshost to create a Fragment"); } throw new IllegalStateException("Creating a Fragment requires that this FragmentTransaction was built with FragmentManager.beginTransaction()"); } @NonNull public FragmentTransaction add(@IdRes int i, @NonNull Fragment fragment) { doAddOp(i, fragment, null, 1); return this; } @NonNull public FragmentTransaction add(@IdRes int i, @NonNull Fragment fragment, @Nullable String str) { doAddOp(i, fragment, str, 1); return this; } @NonNull public final FragmentTransaction add(@IdRes int i, @NonNull Class cls, @Nullable Bundle bundle) { return add(i, createFragment(cls, bundle)); } @NonNull public final FragmentTransaction add(@IdRes int i, @NonNull Class cls, @Nullable Bundle bundle, @Nullable String str) { return add(i, createFragment(cls, bundle), str); } public FragmentTransaction add(@NonNull ViewGroup viewGroup, @NonNull Fragment fragment, @Nullable String str) { fragment.mContainer = viewGroup; return add(viewGroup.getId(), fragment, str); } @NonNull public FragmentTransaction add(@NonNull Fragment fragment, @Nullable String str) { doAddOp(0, fragment, str, 1); return this; } @NonNull public final FragmentTransaction add(@NonNull Class cls, @Nullable Bundle bundle, @Nullable String str) { return add(createFragment(cls, bundle), str); } public void addOp(Op op) { this.mOps.add(op); op.mEnterAnim = this.mEnterAnim; op.mExitAnim = this.mExitAnim; op.mPopEnterAnim = this.mPopEnterAnim; op.mPopExitAnim = this.mPopExitAnim; } @NonNull public FragmentTransaction addSharedElement(@NonNull View view, @NonNull String str) { if (FragmentTransition.supportsTransition()) { String transitionName = ViewCompat.getTransitionName(view); if (transitionName != null) { if (this.mSharedElementSourceNames == null) { this.mSharedElementSourceNames = new ArrayList<>(); this.mSharedElementTargetNames = new ArrayList<>(); } else if (this.mSharedElementTargetNames.contains(str)) { throw new IllegalArgumentException(a.u("A shared element with the target name '", str, "' has already been added to the transaction.")); } else if (this.mSharedElementSourceNames.contains(transitionName)) { throw new IllegalArgumentException(a.u("A shared element with the source name '", transitionName, "' has already been added to the transaction.")); } this.mSharedElementSourceNames.add(transitionName); this.mSharedElementTargetNames.add(str); } else { throw new IllegalArgumentException("Unique transitionNames are required for all sharedElements"); } } return this; } @NonNull public FragmentTransaction addToBackStack(@Nullable String str) { if (this.mAllowAddToBackStack) { this.mAddToBackStack = true; this.mName = str; return this; } throw new IllegalStateException("This FragmentTransaction is not allowed to be added to the back stack."); } @NonNull public FragmentTransaction attach(@NonNull Fragment fragment) { addOp(new Op(7, fragment)); return this; } public abstract int commit(); public abstract int commitAllowingStateLoss(); public abstract void commitNow(); public abstract void commitNowAllowingStateLoss(); @NonNull public FragmentTransaction detach(@NonNull Fragment fragment) { addOp(new Op(6, fragment)); return this; } @NonNull public FragmentTransaction disallowAddToBackStack() { if (!this.mAddToBackStack) { this.mAllowAddToBackStack = false; return this; } throw new IllegalStateException("This transaction is already being added to the back stack"); } public void doAddOp(int i, Fragment fragment, @Nullable String str, int i2) { Class cls = fragment.getClass(); int modifiers = cls.getModifiers(); if (cls.isAnonymousClass() || !Modifier.isPublic(modifiers) || (cls.isMemberClass() && !Modifier.isStatic(modifiers))) { StringBuilder L = a.L("Fragment "); L.append(cls.getCanonicalName()); L.append(" must be a public static class to be properly recreated from instance state."); throw new IllegalStateException(L.toString()); } if (str != null) { String str2 = fragment.mTag; if (str2 == null || str.equals(str2)) { fragment.mTag = str; } else { throw new IllegalStateException("Can't change tag of fragment " + fragment + ": was " + fragment.mTag + " now " + str); } } if (i != 0) { if (i != -1) { int i3 = fragment.mFragmentId; if (i3 == 0 || i3 == i) { fragment.mFragmentId = i; fragment.mContainerId = i; } else { throw new IllegalStateException("Can't change container ID of fragment " + fragment + ": was " + fragment.mFragmentId + " now " + i); } } else { throw new IllegalArgumentException("Can't add fragment " + fragment + " with tag " + str + " to container view with no id"); } } addOp(new Op(i2, fragment)); } @NonNull public FragmentTransaction hide(@NonNull Fragment fragment) { addOp(new Op(4, fragment)); return this; } public boolean isAddToBackStackAllowed() { return this.mAllowAddToBackStack; } public boolean isEmpty() { return this.mOps.isEmpty(); } @NonNull public FragmentTransaction remove(@NonNull Fragment fragment) { addOp(new Op(3, fragment)); return this; } @NonNull public FragmentTransaction replace(@IdRes int i, @NonNull Fragment fragment) { return replace(i, fragment, (String) null); } @NonNull public FragmentTransaction replace(@IdRes int i, @NonNull Fragment fragment, @Nullable String str) { if (i != 0) { doAddOp(i, fragment, str, 2); return this; } throw new IllegalArgumentException("Must use non-zero containerViewId"); } @NonNull public final FragmentTransaction replace(@IdRes int i, @NonNull Class cls, @Nullable Bundle bundle) { return replace(i, cls, bundle, null); } @NonNull public final FragmentTransaction replace(@IdRes int i, @NonNull Class cls, @Nullable Bundle bundle, @Nullable String str) { return replace(i, createFragment(cls, bundle), str); } @NonNull public FragmentTransaction runOnCommit(@NonNull Runnable runnable) { disallowAddToBackStack(); if (this.mCommitRunnables == null) { this.mCommitRunnables = new ArrayList<>(); } this.mCommitRunnables.add(runnable); return this; } @NonNull @Deprecated public FragmentTransaction setAllowOptimization(boolean z2) { return setReorderingAllowed(z2); } @NonNull @Deprecated public FragmentTransaction setBreadCrumbShortTitle(@StringRes int i) { this.mBreadCrumbShortTitleRes = i; this.mBreadCrumbShortTitleText = null; return this; } @NonNull @Deprecated public FragmentTransaction setBreadCrumbShortTitle(@Nullable CharSequence charSequence) { this.mBreadCrumbShortTitleRes = 0; this.mBreadCrumbShortTitleText = charSequence; return this; } @NonNull @Deprecated public FragmentTransaction setBreadCrumbTitle(@StringRes int i) { this.mBreadCrumbTitleRes = i; this.mBreadCrumbTitleText = null; return this; } @NonNull @Deprecated public FragmentTransaction setBreadCrumbTitle(@Nullable CharSequence charSequence) { this.mBreadCrumbTitleRes = 0; this.mBreadCrumbTitleText = charSequence; return this; } @NonNull public FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int i, @AnimRes @AnimatorRes int i2) { return setCustomAnimations(i, i2, 0, 0); } @NonNull public FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int i, @AnimRes @AnimatorRes int i2, @AnimRes @AnimatorRes int i3, @AnimRes @AnimatorRes int i4) { this.mEnterAnim = i; this.mExitAnim = i2; this.mPopEnterAnim = i3; this.mPopExitAnim = i4; return this; } @NonNull public FragmentTransaction setMaxLifecycle(@NonNull Fragment fragment, @NonNull Lifecycle.State state) { addOp(new Op(10, fragment, state)); return this; } @NonNull public FragmentTransaction setPrimaryNavigationFragment(@Nullable Fragment fragment) { addOp(new Op(8, fragment)); return this; } @NonNull public FragmentTransaction setReorderingAllowed(boolean z2) { this.mReorderingAllowed = z2; return this; } @NonNull public FragmentTransaction setTransition(int i) { this.mTransition = i; return this; } @NonNull @Deprecated public FragmentTransaction setTransitionStyle(@StyleRes int i) { return this; } @NonNull public FragmentTransaction show(@NonNull Fragment fragment) { addOp(new Op(5, fragment)); return this; } }