package androidx.fragment.app; import android.util.Log; import android.view.View; import android.view.ViewGroup; import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import c.d.b.a.a; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; public class FragmentStore { private static final String TAG = "FragmentManager"; private final HashMap mActive = new HashMap<>(); private final ArrayList mAdded = new ArrayList<>(); private FragmentManagerViewModel mNonConfig; public void addFragment(@NonNull Fragment fragment) { if (!this.mAdded.contains(fragment)) { synchronized (this.mAdded) { this.mAdded.add(fragment); } fragment.mAdded = true; return; } throw new IllegalStateException("Fragment already added: " + fragment); } public void burpActive() { this.mActive.values().removeAll(Collections.singleton(null)); } public boolean containsActiveFragment(@NonNull String str) { return this.mActive.get(str) != null; } public void dispatchStateChange(int i) { for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (fragmentStateManager != null) { fragmentStateManager.setFragmentManagerState(i); } } } public void dump(@NonNull String str, @Nullable FileDescriptor fileDescriptor, @NonNull PrintWriter printWriter, @Nullable String[] strArr) { String t = a.t(str, " "); if (!this.mActive.isEmpty()) { printWriter.print(str); printWriter.print("Active Fragments:"); for (FragmentStateManager fragmentStateManager : this.mActive.values()) { printWriter.print(str); if (fragmentStateManager != null) { Fragment fragment = fragmentStateManager.getFragment(); printWriter.println(fragment); fragment.dump(t, fileDescriptor, printWriter, strArr); } else { printWriter.println("null"); } } } int size = this.mAdded.size(); if (size > 0) { printWriter.print(str); printWriter.println("Added Fragments:"); for (int i = 0; i < size; i++) { printWriter.print(str); printWriter.print(" #"); printWriter.print(i); printWriter.print(": "); printWriter.println(this.mAdded.get(i).toString()); } } } @Nullable public Fragment findActiveFragment(@NonNull String str) { FragmentStateManager fragmentStateManager = this.mActive.get(str); if (fragmentStateManager != null) { return fragmentStateManager.getFragment(); } return null; } @Nullable public Fragment findFragmentById(@IdRes int i) { for (int size = this.mAdded.size() - 1; size >= 0; size--) { Fragment fragment = this.mAdded.get(size); if (fragment != null && fragment.mFragmentId == i) { return fragment; } } for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (fragmentStateManager != null) { Fragment fragment2 = fragmentStateManager.getFragment(); if (fragment2.mFragmentId == i) { return fragment2; } } } return null; } @Nullable public Fragment findFragmentByTag(@Nullable String str) { if (str != null) { for (int size = this.mAdded.size() - 1; size >= 0; size--) { Fragment fragment = this.mAdded.get(size); if (fragment != null && str.equals(fragment.mTag)) { return fragment; } } } if (str == null) { return null; } for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (fragmentStateManager != null) { Fragment fragment2 = fragmentStateManager.getFragment(); if (str.equals(fragment2.mTag)) { return fragment2; } } } return null; } @Nullable public Fragment findFragmentByWho(@NonNull String str) { Fragment findFragmentByWho; for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (!(fragmentStateManager == null || (findFragmentByWho = fragmentStateManager.getFragment().findFragmentByWho(str)) == null)) { return findFragmentByWho; } } return null; } public int findFragmentIndexInContainer(@NonNull Fragment fragment) { View view; View view2; ViewGroup viewGroup = fragment.mContainer; if (viewGroup == null) { return -1; } int indexOf = this.mAdded.indexOf(fragment); for (int i = indexOf - 1; i >= 0; i--) { Fragment fragment2 = this.mAdded.get(i); if (fragment2.mContainer == viewGroup && (view2 = fragment2.mView) != null) { return viewGroup.indexOfChild(view2) + 1; } } while (true) { indexOf++; if (indexOf >= this.mAdded.size()) { return -1; } Fragment fragment3 = this.mAdded.get(indexOf); if (fragment3.mContainer == viewGroup && (view = fragment3.mView) != null) { return viewGroup.indexOfChild(view); } } } public int getActiveFragmentCount() { return this.mActive.size(); } @NonNull public List getActiveFragmentStateManagers() { ArrayList arrayList = new ArrayList(); for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (fragmentStateManager != null) { arrayList.add(fragmentStateManager); } } return arrayList; } @NonNull public List getActiveFragments() { ArrayList arrayList = new ArrayList(); for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (fragmentStateManager != null) { arrayList.add(fragmentStateManager.getFragment()); } else { arrayList.add(null); } } return arrayList; } @Nullable public FragmentStateManager getFragmentStateManager(@NonNull String str) { return this.mActive.get(str); } @NonNull public List getFragments() { ArrayList arrayList; if (this.mAdded.isEmpty()) { return Collections.emptyList(); } synchronized (this.mAdded) { arrayList = new ArrayList(this.mAdded); } return arrayList; } public FragmentManagerViewModel getNonConfig() { return this.mNonConfig; } public void makeActive(@NonNull FragmentStateManager fragmentStateManager) { Fragment fragment = fragmentStateManager.getFragment(); if (!containsActiveFragment(fragment.mWho)) { this.mActive.put(fragment.mWho, fragmentStateManager); if (fragment.mRetainInstanceChangedWhileDetached) { if (fragment.mRetainInstance) { this.mNonConfig.addRetainedFragment(fragment); } else { this.mNonConfig.removeRetainedFragment(fragment); } fragment.mRetainInstanceChangedWhileDetached = false; } if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "Added fragment to active set " + fragment); } } } public void makeInactive(@NonNull FragmentStateManager fragmentStateManager) { Fragment fragment = fragmentStateManager.getFragment(); if (fragment.mRetainInstance) { this.mNonConfig.removeRetainedFragment(fragment); } if (this.mActive.put(fragment.mWho, null) != null && FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "Removed fragment from active set " + fragment); } } public void moveToExpectedState() { Iterator it = this.mAdded.iterator(); while (it.hasNext()) { FragmentStateManager fragmentStateManager = this.mActive.get(it.next().mWho); if (fragmentStateManager != null) { fragmentStateManager.moveToExpectedState(); } } for (FragmentStateManager fragmentStateManager2 : this.mActive.values()) { if (fragmentStateManager2 != null) { fragmentStateManager2.moveToExpectedState(); Fragment fragment = fragmentStateManager2.getFragment(); if (fragment.mRemoving && !fragment.isInBackStack()) { makeInactive(fragmentStateManager2); } } } } public void removeFragment(@NonNull Fragment fragment) { synchronized (this.mAdded) { this.mAdded.remove(fragment); } fragment.mAdded = false; } public void resetActiveFragments() { this.mActive.clear(); } public void restoreAddedFragments(@Nullable List list) { this.mAdded.clear(); if (list != null) { for (String str : list) { Fragment findActiveFragment = findActiveFragment(str); if (findActiveFragment != null) { if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "restoreSaveState: added (" + str + "): " + findActiveFragment); } addFragment(findActiveFragment); } else { throw new IllegalStateException(a.u("No instantiated fragment for (", str, ")")); } } } } @NonNull public ArrayList saveActiveFragments() { ArrayList arrayList = new ArrayList<>(this.mActive.size()); for (FragmentStateManager fragmentStateManager : this.mActive.values()) { if (fragmentStateManager != null) { Fragment fragment = fragmentStateManager.getFragment(); FragmentState saveState = fragmentStateManager.saveState(); arrayList.add(saveState); if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "Saved state of " + fragment + ": " + saveState.mSavedFragmentState); } } } return arrayList; } @Nullable public ArrayList saveAddedFragments() { synchronized (this.mAdded) { if (this.mAdded.isEmpty()) { return null; } ArrayList arrayList = new ArrayList<>(this.mAdded.size()); Iterator it = this.mAdded.iterator(); while (it.hasNext()) { Fragment next = it.next(); arrayList.add(next.mWho); if (FragmentManager.isLoggingEnabled(2)) { Log.v("FragmentManager", "saveAllState: adding fragment (" + next.mWho + "): " + next); } } return arrayList; } } public void setNonConfig(@NonNull FragmentManagerViewModel fragmentManagerViewModel) { this.mNonConfig = fragmentManagerViewModel; } }