discord-jadx/app/src/main/java/androidx/fragment/app/FragmentStore.java

332 lines
12 KiB
Java

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<String, FragmentStateManager> mActive = new HashMap<>();
private final ArrayList<Fragment> 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<FragmentStateManager> getActiveFragmentStateManagers() {
ArrayList arrayList = new ArrayList();
for (FragmentStateManager fragmentStateManager : this.mActive.values()) {
if (fragmentStateManager != null) {
arrayList.add(fragmentStateManager);
}
}
return arrayList;
}
@NonNull
public List<Fragment> 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<Fragment> 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<Fragment> 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<String> 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<FragmentState> saveActiveFragments() {
ArrayList<FragmentState> 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<String> saveAddedFragments() {
synchronized (this.mAdded) {
if (this.mAdded.isEmpty()) {
return null;
}
ArrayList<String> arrayList = new ArrayList<>(this.mAdded.size());
Iterator<Fragment> 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;
}
}