320 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.fragment.app;
 | |
| 
 | |
| import android.util.Log;
 | |
| import android.view.ViewGroup;
 | |
| 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;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class FragmentStore {
 | |
|     private static final String TAG = "FragmentManager";
 | |
|     private FragmentManagerViewModel mNonConfig;
 | |
|     private final ArrayList<Fragment> mAdded = new ArrayList<>();
 | |
|     private final HashMap<String, FragmentStateManager> mActive = new HashMap<>();
 | |
| 
 | |
|     FragmentManagerViewModel getNonConfig() {
 | |
|         return this.mNonConfig;
 | |
|     }
 | |
| 
 | |
|     void setNonConfig(FragmentManagerViewModel fragmentManagerViewModel) {
 | |
|         this.mNonConfig = fragmentManagerViewModel;
 | |
|     }
 | |
| 
 | |
|     FragmentStore() {
 | |
|     }
 | |
| 
 | |
|     void resetActiveFragments() {
 | |
|         this.mActive.clear();
 | |
|     }
 | |
| 
 | |
|     void restoreAddedFragments(List<String> list) {
 | |
|         this.mAdded.clear();
 | |
|         if (list != null) {
 | |
|             for (String str : list) {
 | |
|                 Fragment findActiveFragment = findActiveFragment(str);
 | |
|                 if (findActiveFragment == null) {
 | |
|                     throw new IllegalStateException("No instantiated fragment for (" + str + ")");
 | |
|                 }
 | |
|                 if (FragmentManager.isLoggingEnabled(2)) {
 | |
|                     Log.v(TAG, "restoreSaveState: added (" + str + "): " + findActiveFragment);
 | |
|                 }
 | |
|                 addFragment(findActiveFragment);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void makeActive(FragmentStateManager fragmentStateManager) {
 | |
|         Fragment fragment = fragmentStateManager.getFragment();
 | |
|         if (containsActiveFragment(fragment.mWho)) {
 | |
|             return;
 | |
|         }
 | |
|         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(TAG, "Added fragment to active set " + fragment);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void addFragment(Fragment fragment) {
 | |
|         if (this.mAdded.contains(fragment)) {
 | |
|             throw new IllegalStateException("Fragment already added: " + fragment);
 | |
|         }
 | |
|         synchronized (this.mAdded) {
 | |
|             this.mAdded.add(fragment);
 | |
|         }
 | |
|         fragment.mAdded = true;
 | |
|     }
 | |
| 
 | |
|     void dispatchStateChange(int i) {
 | |
|         for (FragmentStateManager fragmentStateManager : this.mActive.values()) {
 | |
|             if (fragmentStateManager != null) {
 | |
|                 fragmentStateManager.setFragmentManagerState(i);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     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);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void removeFragment(Fragment fragment) {
 | |
|         synchronized (this.mAdded) {
 | |
|             this.mAdded.remove(fragment);
 | |
|         }
 | |
|         fragment.mAdded = false;
 | |
|     }
 | |
| 
 | |
|     void makeInactive(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(TAG, "Removed fragment from active set " + fragment);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void burpActive() {
 | |
|         this.mActive.values().removeAll(Collections.singleton(null));
 | |
|     }
 | |
| 
 | |
|     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(TAG, "Saved state of " + fragment + ": " + saveState.mSavedFragmentState);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return arrayList;
 | |
|     }
 | |
| 
 | |
|     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(TAG, "saveAllState: adding fragment (" + next.mWho + "): " + next);
 | |
|                 }
 | |
|             }
 | |
|             return arrayList;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     List<FragmentStateManager> getActiveFragmentStateManagers() {
 | |
|         ArrayList arrayList = new ArrayList();
 | |
|         for (FragmentStateManager fragmentStateManager : this.mActive.values()) {
 | |
|             if (fragmentStateManager != null) {
 | |
|                 arrayList.add(fragmentStateManager);
 | |
|             }
 | |
|         }
 | |
|         return arrayList;
 | |
|     }
 | |
| 
 | |
|     List<Fragment> getFragments() {
 | |
|         ArrayList arrayList;
 | |
|         if (this.mAdded.isEmpty()) {
 | |
|             return Collections.emptyList();
 | |
|         }
 | |
|         synchronized (this.mAdded) {
 | |
|             arrayList = new ArrayList(this.mAdded);
 | |
|         }
 | |
|         return arrayList;
 | |
|     }
 | |
| 
 | |
|     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;
 | |
|     }
 | |
| 
 | |
|     int getActiveFragmentCount() {
 | |
|         return this.mActive.size();
 | |
|     }
 | |
| 
 | |
|     Fragment findFragmentById(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;
 | |
|     }
 | |
| 
 | |
|     Fragment findFragmentByTag(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;
 | |
|     }
 | |
| 
 | |
|     boolean containsActiveFragment(String str) {
 | |
|         return this.mActive.get(str) != null;
 | |
|     }
 | |
| 
 | |
|     FragmentStateManager getFragmentStateManager(String str) {
 | |
|         return this.mActive.get(str);
 | |
|     }
 | |
| 
 | |
|     Fragment findFragmentByWho(String str) {
 | |
|         Fragment findFragmentByWho;
 | |
|         for (FragmentStateManager fragmentStateManager : this.mActive.values()) {
 | |
|             if (fragmentStateManager != null && (findFragmentByWho = fragmentStateManager.getFragment().findFragmentByWho(str)) != null) {
 | |
|                 return findFragmentByWho;
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     Fragment findActiveFragment(String str) {
 | |
|         FragmentStateManager fragmentStateManager = this.mActive.get(str);
 | |
|         if (fragmentStateManager != null) {
 | |
|             return fragmentStateManager.getFragment();
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     int findFragmentIndexInContainer(Fragment fragment) {
 | |
|         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 && fragment2.mView != null) {
 | |
|                 return viewGroup.indexOfChild(fragment2.mView) + 1;
 | |
|             }
 | |
|         }
 | |
|         while (true) {
 | |
|             indexOf++;
 | |
|             if (indexOf >= this.mAdded.size()) {
 | |
|                 return -1;
 | |
|             }
 | |
|             Fragment fragment3 = this.mAdded.get(indexOf);
 | |
|             if (fragment3.mContainer == viewGroup && fragment3.mView != null) {
 | |
|                 return viewGroup.indexOfChild(fragment3.mView);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr) {
 | |
|         String str2 = str + "    ";
 | |
|         if (!this.mActive.isEmpty()) {
 | |
|             printWriter.print(str);
 | |
|             printWriter.println("Active Fragments:");
 | |
|             for (FragmentStateManager fragmentStateManager : this.mActive.values()) {
 | |
|                 printWriter.print(str);
 | |
|                 if (fragmentStateManager != null) {
 | |
|                     Fragment fragment = fragmentStateManager.getFragment();
 | |
|                     printWriter.println(fragment);
 | |
|                     fragment.dump(str2, 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++) {
 | |
|                 Fragment fragment2 = this.mAdded.get(i);
 | |
|                 printWriter.print(str);
 | |
|                 printWriter.print("  #");
 | |
|                 printWriter.print(i);
 | |
|                 printWriter.print(": ");
 | |
|                 printWriter.println(fragment2.toString());
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |