package androidx.fragment.app; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; import c.d.b.a.a; import java.io.PrintWriter; import java.util.ArrayList; public final class BackStackRecord extends FragmentTransaction implements FragmentManager.BackStackEntry, FragmentManager.OpGenerator { private static final String TAG = "FragmentManager"; public boolean mCommitted; public int mIndex; public final FragmentManager mManager; /* JADX INFO: super call moved to the top of the method (can break code semantics) */ public BackStackRecord(@NonNull FragmentManager fragmentManager) { super(fragmentManager.getFragmentFactory(), fragmentManager.getHost() != null ? fragmentManager.getHost().getContext().getClassLoader() : null); this.mIndex = -1; this.mManager = fragmentManager; } private static boolean isFragmentPostponed(FragmentTransaction.Op op) { Fragment fragment = op.mFragment; return fragment != null && fragment.mAdded && fragment.mView != null && !fragment.mDetached && !fragment.mHidden && fragment.isPostponed(); } public void bumpBackStackNesting(int i) { if (this.mAddToBackStack) { if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "Bump nesting in " + this + " by " + i); } int size = this.mOps.size(); for (int i2 = 0; i2 < size; i2++) { FragmentTransaction.Op op = this.mOps.get(i2); Fragment fragment = op.mFragment; if (fragment != null) { fragment.mBackStackNesting += i; if (FragmentManager.isLoggingEnabled(2)) { StringBuilder L = a.L("Bump nesting of "); L.append(op.mFragment); L.append(" to "); L.append(op.mFragment.mBackStackNesting); Log.v("FragmentManager", L.toString()); } } } } } @Override // androidx.fragment.app.FragmentTransaction public int commit() { return commitInternal(false); } @Override // androidx.fragment.app.FragmentTransaction public int commitAllowingStateLoss() { return commitInternal(true); } public int commitInternal(boolean z2) { if (!this.mCommitted) { if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "Commit: " + this); PrintWriter printWriter = new PrintWriter(new LogWriter("FragmentManager")); dump(" ", printWriter); printWriter.close(); } this.mCommitted = true; if (this.mAddToBackStack) { this.mIndex = this.mManager.allocBackStackIndex(); } else { this.mIndex = -1; } this.mManager.enqueueAction(this, z2); return this.mIndex; } throw new IllegalStateException("commit already called"); } @Override // androidx.fragment.app.FragmentTransaction public void commitNow() { disallowAddToBackStack(); this.mManager.execSingleAction(this, false); } @Override // androidx.fragment.app.FragmentTransaction public void commitNowAllowingStateLoss() { disallowAddToBackStack(); this.mManager.execSingleAction(this, true); } @Override // androidx.fragment.app.FragmentTransaction @NonNull public FragmentTransaction detach(@NonNull Fragment fragment) { FragmentManager fragmentManager = fragment.mFragmentManager; if (fragmentManager == null || fragmentManager == this.mManager) { return super.detach(fragment); } StringBuilder L = a.L("Cannot detach Fragment attached to a different FragmentManager. Fragment "); L.append(fragment.toString()); L.append(" is already attached to a FragmentManager."); throw new IllegalStateException(L.toString()); } @Override // androidx.fragment.app.FragmentTransaction public void doAddOp(int i, Fragment fragment, @Nullable String str, int i2) { super.doAddOp(i, fragment, str, i2); fragment.mFragmentManager = this.mManager; } public void dump(String str, PrintWriter printWriter) { dump(str, printWriter, true); } public void dump(String str, PrintWriter printWriter, boolean z2) { String str2; if (z2) { printWriter.print(str); printWriter.print("mName="); printWriter.print(this.mName); printWriter.print(" mIndex="); printWriter.print(this.mIndex); printWriter.print(" mCommitted="); printWriter.println(this.mCommitted); if (this.mTransition != 0) { printWriter.print(str); printWriter.print("mTransition=#"); printWriter.print(Integer.toHexString(this.mTransition)); } if (!(this.mEnterAnim == 0 && this.mExitAnim == 0)) { printWriter.print(str); printWriter.print("mEnterAnim=#"); printWriter.print(Integer.toHexString(this.mEnterAnim)); printWriter.print(" mExitAnim=#"); printWriter.println(Integer.toHexString(this.mExitAnim)); } if (!(this.mPopEnterAnim == 0 && this.mPopExitAnim == 0)) { printWriter.print(str); printWriter.print("mPopEnterAnim=#"); printWriter.print(Integer.toHexString(this.mPopEnterAnim)); printWriter.print(" mPopExitAnim=#"); printWriter.println(Integer.toHexString(this.mPopExitAnim)); } if (!(this.mBreadCrumbTitleRes == 0 && this.mBreadCrumbTitleText == null)) { printWriter.print(str); printWriter.print("mBreadCrumbTitleRes=#"); printWriter.print(Integer.toHexString(this.mBreadCrumbTitleRes)); printWriter.print(" mBreadCrumbTitleText="); printWriter.println(this.mBreadCrumbTitleText); } if (!(this.mBreadCrumbShortTitleRes == 0 && this.mBreadCrumbShortTitleText == null)) { printWriter.print(str); printWriter.print("mBreadCrumbShortTitleRes=#"); printWriter.print(Integer.toHexString(this.mBreadCrumbShortTitleRes)); printWriter.print(" mBreadCrumbShortTitleText="); printWriter.println(this.mBreadCrumbShortTitleText); } } if (!this.mOps.isEmpty()) { printWriter.print(str); printWriter.println("Operations:"); int size = this.mOps.size(); for (int i = 0; i < size; i++) { FragmentTransaction.Op op = this.mOps.get(i); switch (op.mCmd) { case 0: str2 = "NULL"; break; case 1: str2 = "ADD"; break; case 2: str2 = "REPLACE"; break; case 3: str2 = "REMOVE"; break; case 4: str2 = "HIDE"; break; case 5: str2 = "SHOW"; break; case 6: str2 = "DETACH"; break; case 7: str2 = "ATTACH"; break; case 8: str2 = "SET_PRIMARY_NAV"; break; case 9: str2 = "UNSET_PRIMARY_NAV"; break; case 10: str2 = "OP_SET_MAX_LIFECYCLE"; break; default: StringBuilder L = a.L("cmd="); L.append(op.mCmd); str2 = L.toString(); break; } printWriter.print(str); printWriter.print(" Op #"); printWriter.print(i); printWriter.print(": "); printWriter.print(str2); printWriter.print(" "); printWriter.println(op.mFragment); if (z2) { if (!(op.mEnterAnim == 0 && op.mExitAnim == 0)) { printWriter.print(str); printWriter.print("enterAnim=#"); printWriter.print(Integer.toHexString(op.mEnterAnim)); printWriter.print(" exitAnim=#"); printWriter.println(Integer.toHexString(op.mExitAnim)); } if (op.mPopEnterAnim != 0 || op.mPopExitAnim != 0) { printWriter.print(str); printWriter.print("popEnterAnim=#"); printWriter.print(Integer.toHexString(op.mPopEnterAnim)); printWriter.print(" popExitAnim=#"); printWriter.println(Integer.toHexString(op.mPopExitAnim)); } } } } } public void executeOps() { int size = this.mOps.size(); for (int i = 0; i < size; i++) { FragmentTransaction.Op op = this.mOps.get(i); Fragment fragment = op.mFragment; if (fragment != null) { fragment.setNextTransition(this.mTransition); fragment.setSharedElementNames(this.mSharedElementSourceNames, this.mSharedElementTargetNames); } switch (op.mCmd) { case 1: fragment.setNextAnim(op.mEnterAnim); this.mManager.setExitAnimationOrder(fragment, false); this.mManager.addFragment(fragment); break; case 2: default: StringBuilder L = a.L("Unknown cmd: "); L.append(op.mCmd); throw new IllegalArgumentException(L.toString()); case 3: fragment.setNextAnim(op.mExitAnim); this.mManager.removeFragment(fragment); break; case 4: fragment.setNextAnim(op.mExitAnim); this.mManager.hideFragment(fragment); break; case 5: fragment.setNextAnim(op.mEnterAnim); this.mManager.setExitAnimationOrder(fragment, false); this.mManager.showFragment(fragment); break; case 6: fragment.setNextAnim(op.mExitAnim); this.mManager.detachFragment(fragment); break; case 7: fragment.setNextAnim(op.mEnterAnim); this.mManager.setExitAnimationOrder(fragment, false); this.mManager.attachFragment(fragment); break; case 8: this.mManager.setPrimaryNavigationFragment(fragment); break; case 9: this.mManager.setPrimaryNavigationFragment(null); break; case 10: this.mManager.setMaxLifecycle(fragment, op.mCurrentMaxState); break; } if (!this.mReorderingAllowed && op.mCmd != 1 && fragment != null && !FragmentManager.USE_STATE_MANAGER) { this.mManager.moveFragmentToExpectedState(fragment); } } if (!(this.mReorderingAllowed || FragmentManager.USE_STATE_MANAGER)) { FragmentManager fragmentManager = this.mManager; fragmentManager.moveToState(fragmentManager.mCurState, true); } } public void executePopOps(boolean z2) { for (int size = this.mOps.size() - 1; size >= 0; size--) { FragmentTransaction.Op op = this.mOps.get(size); Fragment fragment = op.mFragment; if (fragment != null) { fragment.setNextTransition(FragmentManager.reverseTransit(this.mTransition)); fragment.setSharedElementNames(this.mSharedElementTargetNames, this.mSharedElementSourceNames); } switch (op.mCmd) { case 1: fragment.setNextAnim(op.mPopExitAnim); this.mManager.setExitAnimationOrder(fragment, true); this.mManager.removeFragment(fragment); break; case 2: default: StringBuilder L = a.L("Unknown cmd: "); L.append(op.mCmd); throw new IllegalArgumentException(L.toString()); case 3: fragment.setNextAnim(op.mPopEnterAnim); this.mManager.addFragment(fragment); break; case 4: fragment.setNextAnim(op.mPopEnterAnim); this.mManager.showFragment(fragment); break; case 5: fragment.setNextAnim(op.mPopExitAnim); this.mManager.setExitAnimationOrder(fragment, true); this.mManager.hideFragment(fragment); break; case 6: fragment.setNextAnim(op.mPopEnterAnim); this.mManager.attachFragment(fragment); break; case 7: fragment.setNextAnim(op.mPopExitAnim); this.mManager.setExitAnimationOrder(fragment, true); this.mManager.detachFragment(fragment); break; case 8: this.mManager.setPrimaryNavigationFragment(null); break; case 9: this.mManager.setPrimaryNavigationFragment(fragment); break; case 10: this.mManager.setMaxLifecycle(fragment, op.mOldMaxState); break; } if (!this.mReorderingAllowed && op.mCmd != 3 && fragment != null && !FragmentManager.USE_STATE_MANAGER) { this.mManager.moveFragmentToExpectedState(fragment); } } if (!(this.mReorderingAllowed || !z2 || FragmentManager.USE_STATE_MANAGER)) { FragmentManager fragmentManager = this.mManager; fragmentManager.moveToState(fragmentManager.mCurState, true); } } public Fragment expandOps(ArrayList arrayList, Fragment fragment) { Fragment fragment2 = fragment; int i = 0; while (i < this.mOps.size()) { FragmentTransaction.Op op = this.mOps.get(i); int i2 = op.mCmd; if (i2 != 1) { if (i2 == 2) { Fragment fragment3 = op.mFragment; int i3 = fragment3.mContainerId; boolean z2 = false; for (int size = arrayList.size() - 1; size >= 0; size--) { Fragment fragment4 = arrayList.get(size); if (fragment4.mContainerId == i3) { if (fragment4 == fragment3) { z2 = true; } else { if (fragment4 == fragment2) { this.mOps.add(i, new FragmentTransaction.Op(9, fragment4)); i++; fragment2 = null; } FragmentTransaction.Op op2 = new FragmentTransaction.Op(3, fragment4); op2.mEnterAnim = op.mEnterAnim; op2.mPopEnterAnim = op.mPopEnterAnim; op2.mExitAnim = op.mExitAnim; op2.mPopExitAnim = op.mPopExitAnim; this.mOps.add(i, op2); arrayList.remove(fragment4); i++; } } } if (z2) { this.mOps.remove(i); i--; } else { op.mCmd = 1; arrayList.add(fragment3); } } else if (i2 == 3 || i2 == 6) { arrayList.remove(op.mFragment); Fragment fragment5 = op.mFragment; if (fragment5 == fragment2) { this.mOps.add(i, new FragmentTransaction.Op(9, fragment5)); i++; fragment2 = null; } } else if (i2 != 7) { if (i2 == 8) { this.mOps.add(i, new FragmentTransaction.Op(9, fragment2)); i++; fragment2 = op.mFragment; } } i++; } arrayList.add(op.mFragment); i++; } return fragment2; } @Override // androidx.fragment.app.FragmentManager.OpGenerator public boolean generateOps(@NonNull ArrayList arrayList, @NonNull ArrayList arrayList2) { if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "Run: " + this); } arrayList.add(this); arrayList2.add(Boolean.FALSE); if (!this.mAddToBackStack) { return true; } this.mManager.addBackStackState(this); return true; } @Override // androidx.fragment.app.FragmentManager.BackStackEntry @Nullable public CharSequence getBreadCrumbShortTitle() { return this.mBreadCrumbShortTitleRes != 0 ? this.mManager.getHost().getContext().getText(this.mBreadCrumbShortTitleRes) : this.mBreadCrumbShortTitleText; } @Override // androidx.fragment.app.FragmentManager.BackStackEntry public int getBreadCrumbShortTitleRes() { return this.mBreadCrumbShortTitleRes; } @Override // androidx.fragment.app.FragmentManager.BackStackEntry @Nullable public CharSequence getBreadCrumbTitle() { return this.mBreadCrumbTitleRes != 0 ? this.mManager.getHost().getContext().getText(this.mBreadCrumbTitleRes) : this.mBreadCrumbTitleText; } @Override // androidx.fragment.app.FragmentManager.BackStackEntry public int getBreadCrumbTitleRes() { return this.mBreadCrumbTitleRes; } @Override // androidx.fragment.app.FragmentManager.BackStackEntry public int getId() { return this.mIndex; } @Override // androidx.fragment.app.FragmentManager.BackStackEntry @Nullable public String getName() { return this.mName; } @Override // androidx.fragment.app.FragmentTransaction @NonNull public FragmentTransaction hide(@NonNull Fragment fragment) { FragmentManager fragmentManager = fragment.mFragmentManager; if (fragmentManager == null || fragmentManager == this.mManager) { return super.hide(fragment); } StringBuilder L = a.L("Cannot hide Fragment attached to a different FragmentManager. Fragment "); L.append(fragment.toString()); L.append(" is already attached to a FragmentManager."); throw new IllegalStateException(L.toString()); } public boolean interactsWith(int i) { int size = this.mOps.size(); for (int i2 = 0; i2 < size; i2++) { Fragment fragment = this.mOps.get(i2).mFragment; int i3 = fragment != null ? fragment.mContainerId : 0; if (i3 != 0 && i3 == i) { return true; } } return false; } public boolean interactsWith(ArrayList arrayList, int i, int i2) { if (i2 == i) { return false; } int size = this.mOps.size(); int i3 = -1; for (int i4 = 0; i4 < size; i4++) { Fragment fragment = this.mOps.get(i4).mFragment; int i5 = fragment != null ? fragment.mContainerId : 0; if (!(i5 == 0 || i5 == i3)) { for (int i6 = i; i6 < i2; i6++) { BackStackRecord backStackRecord = arrayList.get(i6); int size2 = backStackRecord.mOps.size(); for (int i7 = 0; i7 < size2; i7++) { Fragment fragment2 = backStackRecord.mOps.get(i7).mFragment; if ((fragment2 != null ? fragment2.mContainerId : 0) == i5) { return true; } } } i3 = i5; } } return false; } @Override // androidx.fragment.app.FragmentTransaction public boolean isEmpty() { return this.mOps.isEmpty(); } public boolean isPostponed() { for (int i = 0; i < this.mOps.size(); i++) { if (isFragmentPostponed(this.mOps.get(i))) { return true; } } return false; } @Override // androidx.fragment.app.FragmentTransaction @NonNull public FragmentTransaction remove(@NonNull Fragment fragment) { FragmentManager fragmentManager = fragment.mFragmentManager; if (fragmentManager == null || fragmentManager == this.mManager) { return super.remove(fragment); } StringBuilder L = a.L("Cannot remove Fragment attached to a different FragmentManager. Fragment "); L.append(fragment.toString()); L.append(" is already attached to a FragmentManager."); throw new IllegalStateException(L.toString()); } public void runOnCommitRunnables() { if (this.mCommitRunnables != null) { for (int i = 0; i < this.mCommitRunnables.size(); i++) { this.mCommitRunnables.get(i).run(); } this.mCommitRunnables = null; } } @Override // androidx.fragment.app.FragmentTransaction @NonNull public FragmentTransaction setMaxLifecycle(@NonNull Fragment fragment, @NonNull Lifecycle.State state) { if (fragment.mFragmentManager != this.mManager) { StringBuilder L = a.L("Cannot setMaxLifecycle for Fragment not attached to FragmentManager "); L.append(this.mManager); throw new IllegalArgumentException(L.toString()); } else if (state == Lifecycle.State.INITIALIZED && fragment.mState > -1) { throw new IllegalArgumentException("Cannot set maximum Lifecycle to " + state + " after the Fragment has been created"); } else if (state != Lifecycle.State.DESTROYED) { return super.setMaxLifecycle(fragment, state); } else { throw new IllegalArgumentException("Cannot set maximum Lifecycle to " + state + ". Use remove() to remove the fragment from the FragmentManager and trigger its destruction."); } } public void setOnStartPostponedListener(Fragment.OnStartEnterTransitionListener onStartEnterTransitionListener) { for (int i = 0; i < this.mOps.size(); i++) { FragmentTransaction.Op op = this.mOps.get(i); if (isFragmentPostponed(op)) { op.mFragment.setOnStartEnterTransitionListener(onStartEnterTransitionListener); } } } @Override // androidx.fragment.app.FragmentTransaction @NonNull public FragmentTransaction setPrimaryNavigationFragment(@Nullable Fragment fragment) { FragmentManager fragmentManager; if (fragment == null || (fragmentManager = fragment.mFragmentManager) == null || fragmentManager == this.mManager) { return super.setPrimaryNavigationFragment(fragment); } StringBuilder L = a.L("Cannot setPrimaryNavigation for Fragment attached to a different FragmentManager. Fragment "); L.append(fragment.toString()); L.append(" is already attached to a FragmentManager."); throw new IllegalStateException(L.toString()); } @Override // androidx.fragment.app.FragmentTransaction @NonNull public FragmentTransaction show(@NonNull Fragment fragment) { FragmentManager fragmentManager = fragment.mFragmentManager; if (fragmentManager == null || fragmentManager == this.mManager) { return super.show(fragment); } StringBuilder L = a.L("Cannot show Fragment attached to a different FragmentManager. Fragment "); L.append(fragment.toString()); L.append(" is already attached to a FragmentManager."); throw new IllegalStateException(L.toString()); } public String toString() { StringBuilder sb = new StringBuilder(128); sb.append("BackStackEntry{"); sb.append(Integer.toHexString(System.identityHashCode(this))); if (this.mIndex >= 0) { sb.append(" #"); sb.append(this.mIndex); } if (this.mName != null) { sb.append(" "); sb.append(this.mName); } sb.append("}"); return sb.toString(); } public Fragment trackAddedFragmentsInPop(ArrayList arrayList, Fragment fragment) { for (int size = this.mOps.size() - 1; size >= 0; size--) { FragmentTransaction.Op op = this.mOps.get(size); int i = op.mCmd; if (i != 1) { if (i != 3) { switch (i) { case 8: fragment = null; break; case 9: fragment = op.mFragment; break; case 10: op.mCurrentMaxState = op.mOldMaxState; break; } } arrayList.add(op.mFragment); } arrayList.remove(op.mFragment); } return fragment; } }