ADD week 5
This commit is contained in:
		
							
								
								
									
										319
									
								
								02-Easy5/E5/sources/androidx/fragment/app/FragmentStore.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										319
									
								
								02-Easy5/E5/sources/androidx/fragment/app/FragmentStore.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,319 @@ | ||||
| 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()); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user