737 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			737 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.fragment.app;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.graphics.Rect;
 | |
| import android.util.SparseArray;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import androidx.collection.ArrayMap;
 | |
| import androidx.core.app.SharedElementCallback;
 | |
| import androidx.core.os.CancellationSignal;
 | |
| import androidx.core.view.OneShotPreDrawListener;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import java.util.ArrayList;
 | |
| import java.util.Collection;
 | |
| import java.util.List;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class FragmentTransition {
 | |
|     private static final int[] INVERSE_OPS = {0, 3, 0, 1, 5, 4, 7, 6, 9, 8, 10};
 | |
|     static final FragmentTransitionImpl PLATFORM_IMPL = new FragmentTransitionCompat21();
 | |
|     static final FragmentTransitionImpl SUPPORT_IMPL = resolveSupportImpl();
 | |
| 
 | |
|     interface Callback {
 | |
|         void onComplete(Fragment fragment, CancellationSignal cancellationSignal);
 | |
| 
 | |
|         void onStart(Fragment fragment, CancellationSignal cancellationSignal);
 | |
|     }
 | |
| 
 | |
|     static boolean supportsTransition() {
 | |
|         return (PLATFORM_IMPL == null && SUPPORT_IMPL == null) ? false : true;
 | |
|     }
 | |
| 
 | |
|     private static FragmentTransitionImpl resolveSupportImpl() {
 | |
|         try {
 | |
|             return (FragmentTransitionImpl) Class.forName("androidx.transition.FragmentTransitionSupport").getDeclaredConstructor(new Class[0]).newInstance(new Object[0]);
 | |
|         } catch (Exception unused) {
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static void startTransitions(Context context, FragmentContainer fragmentContainer, ArrayList<BackStackRecord> arrayList, ArrayList<Boolean> arrayList2, int i, int i2, boolean z, Callback callback) {
 | |
|         ViewGroup viewGroup;
 | |
|         SparseArray sparseArray = new SparseArray();
 | |
|         for (int i3 = i; i3 < i2; i3++) {
 | |
|             BackStackRecord backStackRecord = arrayList.get(i3);
 | |
|             if (arrayList2.get(i3).booleanValue()) {
 | |
|                 calculatePopFragments(backStackRecord, sparseArray, z);
 | |
|             } else {
 | |
|                 calculateFragments(backStackRecord, sparseArray, z);
 | |
|             }
 | |
|         }
 | |
|         if (sparseArray.size() != 0) {
 | |
|             View view = new View(context);
 | |
|             int size = sparseArray.size();
 | |
|             for (int i4 = 0; i4 < size; i4++) {
 | |
|                 int keyAt = sparseArray.keyAt(i4);
 | |
|                 ArrayMap<String, String> calculateNameOverrides = calculateNameOverrides(keyAt, arrayList, arrayList2, i, i2);
 | |
|                 FragmentContainerTransition fragmentContainerTransition = (FragmentContainerTransition) sparseArray.valueAt(i4);
 | |
|                 if (fragmentContainer.onHasView() && (viewGroup = (ViewGroup) fragmentContainer.onFindViewById(keyAt)) != null) {
 | |
|                     if (z) {
 | |
|                         configureTransitionsReordered(viewGroup, fragmentContainerTransition, view, calculateNameOverrides, callback);
 | |
|                     } else {
 | |
|                         configureTransitionsOrdered(viewGroup, fragmentContainerTransition, view, calculateNameOverrides, callback);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static ArrayMap<String, String> calculateNameOverrides(int i, ArrayList<BackStackRecord> arrayList, ArrayList<Boolean> arrayList2, int i2, int i3) {
 | |
|         ArrayList<String> arrayList3;
 | |
|         ArrayList<String> arrayList4;
 | |
|         ArrayMap<String, String> arrayMap = new ArrayMap<>();
 | |
|         for (int i4 = i3 - 1; i4 >= i2; i4--) {
 | |
|             BackStackRecord backStackRecord = arrayList.get(i4);
 | |
|             if (backStackRecord.interactsWith(i)) {
 | |
|                 boolean booleanValue = arrayList2.get(i4).booleanValue();
 | |
|                 if (backStackRecord.mSharedElementSourceNames != null) {
 | |
|                     int size = backStackRecord.mSharedElementSourceNames.size();
 | |
|                     if (booleanValue) {
 | |
|                         arrayList3 = backStackRecord.mSharedElementSourceNames;
 | |
|                         arrayList4 = backStackRecord.mSharedElementTargetNames;
 | |
|                     } else {
 | |
|                         ArrayList<String> arrayList5 = backStackRecord.mSharedElementSourceNames;
 | |
|                         arrayList3 = backStackRecord.mSharedElementTargetNames;
 | |
|                         arrayList4 = arrayList5;
 | |
|                     }
 | |
|                     for (int i5 = 0; i5 < size; i5++) {
 | |
|                         String str = arrayList4.get(i5);
 | |
|                         String str2 = arrayList3.get(i5);
 | |
|                         String remove = arrayMap.remove(str2);
 | |
|                         if (remove != null) {
 | |
|                             arrayMap.put(str, remove);
 | |
|                         } else {
 | |
|                             arrayMap.put(str, str2);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return arrayMap;
 | |
|     }
 | |
| 
 | |
|     private static void configureTransitionsReordered(ViewGroup viewGroup, FragmentContainerTransition fragmentContainerTransition, View view, ArrayMap<String, String> arrayMap, final Callback callback) {
 | |
|         Object obj;
 | |
|         Fragment fragment = fragmentContainerTransition.lastIn;
 | |
|         final Fragment fragment2 = fragmentContainerTransition.firstOut;
 | |
|         FragmentTransitionImpl chooseImpl = chooseImpl(fragment2, fragment);
 | |
|         if (chooseImpl == null) {
 | |
|             return;
 | |
|         }
 | |
|         boolean z = fragmentContainerTransition.lastInIsPop;
 | |
|         boolean z2 = fragmentContainerTransition.firstOutIsPop;
 | |
|         ArrayList<View> arrayList = new ArrayList<>();
 | |
|         ArrayList<View> arrayList2 = new ArrayList<>();
 | |
|         Object enterTransition = getEnterTransition(chooseImpl, fragment, z);
 | |
|         Object exitTransition = getExitTransition(chooseImpl, fragment2, z2);
 | |
|         Object configureSharedElementsReordered = configureSharedElementsReordered(chooseImpl, viewGroup, view, arrayMap, fragmentContainerTransition, arrayList2, arrayList, enterTransition, exitTransition);
 | |
|         if (enterTransition == null && configureSharedElementsReordered == null) {
 | |
|             obj = exitTransition;
 | |
|             if (obj == null) {
 | |
|                 return;
 | |
|             }
 | |
|         } else {
 | |
|             obj = exitTransition;
 | |
|         }
 | |
|         ArrayList<View> configureEnteringExitingViews = configureEnteringExitingViews(chooseImpl, obj, fragment2, arrayList2, view);
 | |
|         ArrayList<View> configureEnteringExitingViews2 = configureEnteringExitingViews(chooseImpl, enterTransition, fragment, arrayList, view);
 | |
|         setViewVisibility(configureEnteringExitingViews2, 4);
 | |
|         Object mergeTransitions = mergeTransitions(chooseImpl, enterTransition, obj, configureSharedElementsReordered, fragment, z);
 | |
|         if (fragment2 != null && configureEnteringExitingViews != null && (configureEnteringExitingViews.size() > 0 || arrayList2.size() > 0)) {
 | |
|             final CancellationSignal cancellationSignal = new CancellationSignal();
 | |
|             callback.onStart(fragment2, cancellationSignal);
 | |
|             chooseImpl.setListenerForTransitionEnd(fragment2, mergeTransitions, cancellationSignal, new Runnable() { // from class: androidx.fragment.app.FragmentTransition.1
 | |
|                 @Override // java.lang.Runnable
 | |
|                 public void run() {
 | |
|                     Callback.this.onComplete(fragment2, cancellationSignal);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|         if (mergeTransitions != null) {
 | |
|             replaceHide(chooseImpl, obj, fragment2, configureEnteringExitingViews);
 | |
|             ArrayList<String> prepareSetNameOverridesReordered = chooseImpl.prepareSetNameOverridesReordered(arrayList);
 | |
|             chooseImpl.scheduleRemoveTargets(mergeTransitions, enterTransition, configureEnteringExitingViews2, obj, configureEnteringExitingViews, configureSharedElementsReordered, arrayList);
 | |
|             chooseImpl.beginDelayedTransition(viewGroup, mergeTransitions);
 | |
|             chooseImpl.setNameOverridesReordered(viewGroup, arrayList2, arrayList, prepareSetNameOverridesReordered, arrayMap);
 | |
|             setViewVisibility(configureEnteringExitingViews2, 0);
 | |
|             chooseImpl.swapSharedElementTargets(configureSharedElementsReordered, arrayList2, arrayList);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static void replaceHide(FragmentTransitionImpl fragmentTransitionImpl, Object obj, Fragment fragment, final ArrayList<View> arrayList) {
 | |
|         if (fragment != null && obj != null && fragment.mAdded && fragment.mHidden && fragment.mHiddenChanged) {
 | |
|             fragment.setHideReplaced(true);
 | |
|             fragmentTransitionImpl.scheduleHideFragmentView(obj, fragment.getView(), arrayList);
 | |
|             OneShotPreDrawListener.add(fragment.mContainer, new Runnable() { // from class: androidx.fragment.app.FragmentTransition.2
 | |
|                 @Override // java.lang.Runnable
 | |
|                 public void run() {
 | |
|                     FragmentTransition.setViewVisibility(arrayList, 4);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static void configureTransitionsOrdered(ViewGroup viewGroup, FragmentContainerTransition fragmentContainerTransition, View view, ArrayMap<String, String> arrayMap, final Callback callback) {
 | |
|         Object obj;
 | |
|         Fragment fragment = fragmentContainerTransition.lastIn;
 | |
|         final Fragment fragment2 = fragmentContainerTransition.firstOut;
 | |
|         FragmentTransitionImpl chooseImpl = chooseImpl(fragment2, fragment);
 | |
|         if (chooseImpl == null) {
 | |
|             return;
 | |
|         }
 | |
|         boolean z = fragmentContainerTransition.lastInIsPop;
 | |
|         boolean z2 = fragmentContainerTransition.firstOutIsPop;
 | |
|         Object enterTransition = getEnterTransition(chooseImpl, fragment, z);
 | |
|         Object exitTransition = getExitTransition(chooseImpl, fragment2, z2);
 | |
|         ArrayList arrayList = new ArrayList();
 | |
|         ArrayList<View> arrayList2 = new ArrayList<>();
 | |
|         Object configureSharedElementsOrdered = configureSharedElementsOrdered(chooseImpl, viewGroup, view, arrayMap, fragmentContainerTransition, arrayList, arrayList2, enterTransition, exitTransition);
 | |
|         if (enterTransition == null && configureSharedElementsOrdered == null) {
 | |
|             obj = exitTransition;
 | |
|             if (obj == null) {
 | |
|                 return;
 | |
|             }
 | |
|         } else {
 | |
|             obj = exitTransition;
 | |
|         }
 | |
|         ArrayList<View> configureEnteringExitingViews = configureEnteringExitingViews(chooseImpl, obj, fragment2, arrayList, view);
 | |
|         if (configureEnteringExitingViews == null || configureEnteringExitingViews.isEmpty()) {
 | |
|             obj = null;
 | |
|         }
 | |
|         Object obj2 = obj;
 | |
|         chooseImpl.addTarget(enterTransition, view);
 | |
|         Object mergeTransitions = mergeTransitions(chooseImpl, enterTransition, obj2, configureSharedElementsOrdered, fragment, fragmentContainerTransition.lastInIsPop);
 | |
|         if (fragment2 != null && configureEnteringExitingViews != null && (configureEnteringExitingViews.size() > 0 || arrayList.size() > 0)) {
 | |
|             final CancellationSignal cancellationSignal = new CancellationSignal();
 | |
|             callback.onStart(fragment2, cancellationSignal);
 | |
|             chooseImpl.setListenerForTransitionEnd(fragment2, mergeTransitions, cancellationSignal, new Runnable() { // from class: androidx.fragment.app.FragmentTransition.3
 | |
|                 @Override // java.lang.Runnable
 | |
|                 public void run() {
 | |
|                     Callback.this.onComplete(fragment2, cancellationSignal);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|         if (mergeTransitions != null) {
 | |
|             ArrayList<View> arrayList3 = new ArrayList<>();
 | |
|             chooseImpl.scheduleRemoveTargets(mergeTransitions, enterTransition, arrayList3, obj2, configureEnteringExitingViews, configureSharedElementsOrdered, arrayList2);
 | |
|             scheduleTargetChange(chooseImpl, viewGroup, fragment, view, arrayList2, enterTransition, arrayList3, obj2, configureEnteringExitingViews);
 | |
|             chooseImpl.setNameOverridesOrdered(viewGroup, arrayList2, arrayMap);
 | |
|             chooseImpl.beginDelayedTransition(viewGroup, mergeTransitions);
 | |
|             chooseImpl.scheduleNameReset(viewGroup, arrayList2, arrayMap);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static void scheduleTargetChange(final FragmentTransitionImpl fragmentTransitionImpl, ViewGroup viewGroup, final Fragment fragment, final View view, final ArrayList<View> arrayList, final Object obj, final ArrayList<View> arrayList2, final Object obj2, final ArrayList<View> arrayList3) {
 | |
|         OneShotPreDrawListener.add(viewGroup, new Runnable() { // from class: androidx.fragment.app.FragmentTransition.4
 | |
|             @Override // java.lang.Runnable
 | |
|             public void run() {
 | |
|                 Object obj3 = obj;
 | |
|                 if (obj3 != null) {
 | |
|                     fragmentTransitionImpl.removeTarget(obj3, view);
 | |
|                     arrayList2.addAll(FragmentTransition.configureEnteringExitingViews(fragmentTransitionImpl, obj, fragment, arrayList, view));
 | |
|                 }
 | |
|                 if (arrayList3 != null) {
 | |
|                     if (obj2 != null) {
 | |
|                         ArrayList<View> arrayList4 = new ArrayList<>();
 | |
|                         arrayList4.add(view);
 | |
|                         fragmentTransitionImpl.replaceTargets(obj2, arrayList3, arrayList4);
 | |
|                     }
 | |
|                     arrayList3.clear();
 | |
|                     arrayList3.add(view);
 | |
|                 }
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     private static FragmentTransitionImpl chooseImpl(Fragment fragment, Fragment fragment2) {
 | |
|         ArrayList arrayList = new ArrayList();
 | |
|         if (fragment != null) {
 | |
|             Object exitTransition = fragment.getExitTransition();
 | |
|             if (exitTransition != null) {
 | |
|                 arrayList.add(exitTransition);
 | |
|             }
 | |
|             Object returnTransition = fragment.getReturnTransition();
 | |
|             if (returnTransition != null) {
 | |
|                 arrayList.add(returnTransition);
 | |
|             }
 | |
|             Object sharedElementReturnTransition = fragment.getSharedElementReturnTransition();
 | |
|             if (sharedElementReturnTransition != null) {
 | |
|                 arrayList.add(sharedElementReturnTransition);
 | |
|             }
 | |
|         }
 | |
|         if (fragment2 != null) {
 | |
|             Object enterTransition = fragment2.getEnterTransition();
 | |
|             if (enterTransition != null) {
 | |
|                 arrayList.add(enterTransition);
 | |
|             }
 | |
|             Object reenterTransition = fragment2.getReenterTransition();
 | |
|             if (reenterTransition != null) {
 | |
|                 arrayList.add(reenterTransition);
 | |
|             }
 | |
|             Object sharedElementEnterTransition = fragment2.getSharedElementEnterTransition();
 | |
|             if (sharedElementEnterTransition != null) {
 | |
|                 arrayList.add(sharedElementEnterTransition);
 | |
|             }
 | |
|         }
 | |
|         if (arrayList.isEmpty()) {
 | |
|             return null;
 | |
|         }
 | |
|         FragmentTransitionImpl fragmentTransitionImpl = PLATFORM_IMPL;
 | |
|         if (fragmentTransitionImpl != null && canHandleAll(fragmentTransitionImpl, arrayList)) {
 | |
|             return fragmentTransitionImpl;
 | |
|         }
 | |
|         FragmentTransitionImpl fragmentTransitionImpl2 = SUPPORT_IMPL;
 | |
|         if (fragmentTransitionImpl2 != null && canHandleAll(fragmentTransitionImpl2, arrayList)) {
 | |
|             return fragmentTransitionImpl2;
 | |
|         }
 | |
|         if (fragmentTransitionImpl == null && fragmentTransitionImpl2 == null) {
 | |
|             return null;
 | |
|         }
 | |
|         throw new IllegalArgumentException("Invalid Transition types");
 | |
|     }
 | |
| 
 | |
|     private static boolean canHandleAll(FragmentTransitionImpl fragmentTransitionImpl, List<Object> list) {
 | |
|         int size = list.size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             if (!fragmentTransitionImpl.canHandle(list.get(i))) {
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     private static Object getSharedElementTransition(FragmentTransitionImpl fragmentTransitionImpl, Fragment fragment, Fragment fragment2, boolean z) {
 | |
|         Object sharedElementEnterTransition;
 | |
|         if (fragment == null || fragment2 == null) {
 | |
|             return null;
 | |
|         }
 | |
|         if (z) {
 | |
|             sharedElementEnterTransition = fragment2.getSharedElementReturnTransition();
 | |
|         } else {
 | |
|             sharedElementEnterTransition = fragment.getSharedElementEnterTransition();
 | |
|         }
 | |
|         return fragmentTransitionImpl.wrapTransitionInSet(fragmentTransitionImpl.cloneTransition(sharedElementEnterTransition));
 | |
|     }
 | |
| 
 | |
|     private static Object getEnterTransition(FragmentTransitionImpl fragmentTransitionImpl, Fragment fragment, boolean z) {
 | |
|         Object enterTransition;
 | |
|         if (fragment == null) {
 | |
|             return null;
 | |
|         }
 | |
|         if (z) {
 | |
|             enterTransition = fragment.getReenterTransition();
 | |
|         } else {
 | |
|             enterTransition = fragment.getEnterTransition();
 | |
|         }
 | |
|         return fragmentTransitionImpl.cloneTransition(enterTransition);
 | |
|     }
 | |
| 
 | |
|     private static Object getExitTransition(FragmentTransitionImpl fragmentTransitionImpl, Fragment fragment, boolean z) {
 | |
|         Object exitTransition;
 | |
|         if (fragment == null) {
 | |
|             return null;
 | |
|         }
 | |
|         if (z) {
 | |
|             exitTransition = fragment.getReturnTransition();
 | |
|         } else {
 | |
|             exitTransition = fragment.getExitTransition();
 | |
|         }
 | |
|         return fragmentTransitionImpl.cloneTransition(exitTransition);
 | |
|     }
 | |
| 
 | |
|     private static Object configureSharedElementsReordered(final FragmentTransitionImpl fragmentTransitionImpl, ViewGroup viewGroup, View view, ArrayMap<String, String> arrayMap, FragmentContainerTransition fragmentContainerTransition, ArrayList<View> arrayList, ArrayList<View> arrayList2, Object obj, Object obj2) {
 | |
|         Object obj3;
 | |
|         final View view2;
 | |
|         final Rect rect;
 | |
|         final Fragment fragment = fragmentContainerTransition.lastIn;
 | |
|         final Fragment fragment2 = fragmentContainerTransition.firstOut;
 | |
|         if (fragment != null) {
 | |
|             fragment.requireView().setVisibility(0);
 | |
|         }
 | |
|         if (fragment == null || fragment2 == null) {
 | |
|             return null;
 | |
|         }
 | |
|         final boolean z = fragmentContainerTransition.lastInIsPop;
 | |
|         Object sharedElementTransition = arrayMap.isEmpty() ? null : getSharedElementTransition(fragmentTransitionImpl, fragment, fragment2, z);
 | |
|         ArrayMap<String, View> captureOutSharedElements = captureOutSharedElements(fragmentTransitionImpl, arrayMap, sharedElementTransition, fragmentContainerTransition);
 | |
|         final ArrayMap<String, View> captureInSharedElements = captureInSharedElements(fragmentTransitionImpl, arrayMap, sharedElementTransition, fragmentContainerTransition);
 | |
|         if (arrayMap.isEmpty()) {
 | |
|             if (captureOutSharedElements != null) {
 | |
|                 captureOutSharedElements.clear();
 | |
|             }
 | |
|             if (captureInSharedElements != null) {
 | |
|                 captureInSharedElements.clear();
 | |
|             }
 | |
|             obj3 = null;
 | |
|         } else {
 | |
|             addSharedElementsWithMatchingNames(arrayList, captureOutSharedElements, arrayMap.keySet());
 | |
|             addSharedElementsWithMatchingNames(arrayList2, captureInSharedElements, arrayMap.values());
 | |
|             obj3 = sharedElementTransition;
 | |
|         }
 | |
|         if (obj == null && obj2 == null && obj3 == null) {
 | |
|             return null;
 | |
|         }
 | |
|         callSharedElementStartEnd(fragment, fragment2, z, captureOutSharedElements, true);
 | |
|         if (obj3 != null) {
 | |
|             arrayList2.add(view);
 | |
|             fragmentTransitionImpl.setSharedElementTargets(obj3, view, arrayList);
 | |
|             setOutEpicenter(fragmentTransitionImpl, obj3, obj2, captureOutSharedElements, fragmentContainerTransition.firstOutIsPop, fragmentContainerTransition.firstOutTransaction);
 | |
|             Rect rect2 = new Rect();
 | |
|             View inEpicenterView = getInEpicenterView(captureInSharedElements, fragmentContainerTransition, obj, z);
 | |
|             if (inEpicenterView != null) {
 | |
|                 fragmentTransitionImpl.setEpicenter(obj, rect2);
 | |
|             }
 | |
|             rect = rect2;
 | |
|             view2 = inEpicenterView;
 | |
|         } else {
 | |
|             view2 = null;
 | |
|             rect = null;
 | |
|         }
 | |
|         OneShotPreDrawListener.add(viewGroup, new Runnable() { // from class: androidx.fragment.app.FragmentTransition.5
 | |
|             @Override // java.lang.Runnable
 | |
|             public void run() {
 | |
|                 FragmentTransition.callSharedElementStartEnd(Fragment.this, fragment2, z, captureInSharedElements, false);
 | |
|                 View view3 = view2;
 | |
|                 if (view3 != null) {
 | |
|                     fragmentTransitionImpl.getBoundsOnScreen(view3, rect);
 | |
|                 }
 | |
|             }
 | |
|         });
 | |
|         return obj3;
 | |
|     }
 | |
| 
 | |
|     private static void addSharedElementsWithMatchingNames(ArrayList<View> arrayList, ArrayMap<String, View> arrayMap, Collection<String> collection) {
 | |
|         for (int size = arrayMap.size() - 1; size >= 0; size--) {
 | |
|             View valueAt = arrayMap.valueAt(size);
 | |
|             if (collection.contains(ViewCompat.getTransitionName(valueAt))) {
 | |
|                 arrayList.add(valueAt);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static Object configureSharedElementsOrdered(final FragmentTransitionImpl fragmentTransitionImpl, ViewGroup viewGroup, final View view, final ArrayMap<String, String> arrayMap, final FragmentContainerTransition fragmentContainerTransition, final ArrayList<View> arrayList, final ArrayList<View> arrayList2, final Object obj, Object obj2) {
 | |
|         Object sharedElementTransition;
 | |
|         ArrayMap<String, String> arrayMap2;
 | |
|         Object obj3;
 | |
|         Rect rect;
 | |
|         final Fragment fragment = fragmentContainerTransition.lastIn;
 | |
|         final Fragment fragment2 = fragmentContainerTransition.firstOut;
 | |
|         if (fragment == null || fragment2 == null) {
 | |
|             return null;
 | |
|         }
 | |
|         final boolean z = fragmentContainerTransition.lastInIsPop;
 | |
|         if (arrayMap.isEmpty()) {
 | |
|             arrayMap2 = arrayMap;
 | |
|             sharedElementTransition = null;
 | |
|         } else {
 | |
|             sharedElementTransition = getSharedElementTransition(fragmentTransitionImpl, fragment, fragment2, z);
 | |
|             arrayMap2 = arrayMap;
 | |
|         }
 | |
|         ArrayMap<String, View> captureOutSharedElements = captureOutSharedElements(fragmentTransitionImpl, arrayMap2, sharedElementTransition, fragmentContainerTransition);
 | |
|         if (arrayMap.isEmpty()) {
 | |
|             obj3 = null;
 | |
|         } else {
 | |
|             arrayList.addAll(captureOutSharedElements.values());
 | |
|             obj3 = sharedElementTransition;
 | |
|         }
 | |
|         if (obj == null && obj2 == null && obj3 == null) {
 | |
|             return null;
 | |
|         }
 | |
|         callSharedElementStartEnd(fragment, fragment2, z, captureOutSharedElements, true);
 | |
|         if (obj3 != null) {
 | |
|             rect = new Rect();
 | |
|             fragmentTransitionImpl.setSharedElementTargets(obj3, view, arrayList);
 | |
|             setOutEpicenter(fragmentTransitionImpl, obj3, obj2, captureOutSharedElements, fragmentContainerTransition.firstOutIsPop, fragmentContainerTransition.firstOutTransaction);
 | |
|             if (obj != null) {
 | |
|                 fragmentTransitionImpl.setEpicenter(obj, rect);
 | |
|             }
 | |
|         } else {
 | |
|             rect = null;
 | |
|         }
 | |
|         final Object obj4 = obj3;
 | |
|         final Rect rect2 = rect;
 | |
|         OneShotPreDrawListener.add(viewGroup, new Runnable() { // from class: androidx.fragment.app.FragmentTransition.6
 | |
|             @Override // java.lang.Runnable
 | |
|             public void run() {
 | |
|                 ArrayMap<String, View> captureInSharedElements = FragmentTransition.captureInSharedElements(FragmentTransitionImpl.this, arrayMap, obj4, fragmentContainerTransition);
 | |
|                 if (captureInSharedElements != null) {
 | |
|                     arrayList2.addAll(captureInSharedElements.values());
 | |
|                     arrayList2.add(view);
 | |
|                 }
 | |
|                 FragmentTransition.callSharedElementStartEnd(fragment, fragment2, z, captureInSharedElements, false);
 | |
|                 Object obj5 = obj4;
 | |
|                 if (obj5 != null) {
 | |
|                     FragmentTransitionImpl.this.swapSharedElementTargets(obj5, arrayList, arrayList2);
 | |
|                     View inEpicenterView = FragmentTransition.getInEpicenterView(captureInSharedElements, fragmentContainerTransition, obj, z);
 | |
|                     if (inEpicenterView != null) {
 | |
|                         FragmentTransitionImpl.this.getBoundsOnScreen(inEpicenterView, rect2);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         });
 | |
|         return obj3;
 | |
|     }
 | |
| 
 | |
|     private static ArrayMap<String, View> captureOutSharedElements(FragmentTransitionImpl fragmentTransitionImpl, ArrayMap<String, String> arrayMap, Object obj, FragmentContainerTransition fragmentContainerTransition) {
 | |
|         SharedElementCallback exitTransitionCallback;
 | |
|         ArrayList<String> arrayList;
 | |
|         if (arrayMap.isEmpty() || obj == null) {
 | |
|             arrayMap.clear();
 | |
|             return null;
 | |
|         }
 | |
|         Fragment fragment = fragmentContainerTransition.firstOut;
 | |
|         ArrayMap<String, View> arrayMap2 = new ArrayMap<>();
 | |
|         fragmentTransitionImpl.findNamedViews(arrayMap2, fragment.requireView());
 | |
|         BackStackRecord backStackRecord = fragmentContainerTransition.firstOutTransaction;
 | |
|         if (fragmentContainerTransition.firstOutIsPop) {
 | |
|             exitTransitionCallback = fragment.getEnterTransitionCallback();
 | |
|             arrayList = backStackRecord.mSharedElementTargetNames;
 | |
|         } else {
 | |
|             exitTransitionCallback = fragment.getExitTransitionCallback();
 | |
|             arrayList = backStackRecord.mSharedElementSourceNames;
 | |
|         }
 | |
|         if (arrayList != null) {
 | |
|             arrayMap2.retainAll(arrayList);
 | |
|         }
 | |
|         if (exitTransitionCallback != null) {
 | |
|             exitTransitionCallback.onMapSharedElements(arrayList, arrayMap2);
 | |
|             for (int size = arrayList.size() - 1; size >= 0; size--) {
 | |
|                 String str = arrayList.get(size);
 | |
|                 View view = arrayMap2.get(str);
 | |
|                 if (view == null) {
 | |
|                     arrayMap.remove(str);
 | |
|                 } else if (!str.equals(ViewCompat.getTransitionName(view))) {
 | |
|                     arrayMap.put(ViewCompat.getTransitionName(view), arrayMap.remove(str));
 | |
|                 }
 | |
|             }
 | |
|         } else {
 | |
|             arrayMap.retainAll(arrayMap2.keySet());
 | |
|         }
 | |
|         return arrayMap2;
 | |
|     }
 | |
| 
 | |
|     static ArrayMap<String, View> captureInSharedElements(FragmentTransitionImpl fragmentTransitionImpl, ArrayMap<String, String> arrayMap, Object obj, FragmentContainerTransition fragmentContainerTransition) {
 | |
|         SharedElementCallback enterTransitionCallback;
 | |
|         ArrayList<String> arrayList;
 | |
|         String findKeyForValue;
 | |
|         Fragment fragment = fragmentContainerTransition.lastIn;
 | |
|         View view = fragment.getView();
 | |
|         if (arrayMap.isEmpty() || obj == null || view == null) {
 | |
|             arrayMap.clear();
 | |
|             return null;
 | |
|         }
 | |
|         ArrayMap<String, View> arrayMap2 = new ArrayMap<>();
 | |
|         fragmentTransitionImpl.findNamedViews(arrayMap2, view);
 | |
|         BackStackRecord backStackRecord = fragmentContainerTransition.lastInTransaction;
 | |
|         if (fragmentContainerTransition.lastInIsPop) {
 | |
|             enterTransitionCallback = fragment.getExitTransitionCallback();
 | |
|             arrayList = backStackRecord.mSharedElementSourceNames;
 | |
|         } else {
 | |
|             enterTransitionCallback = fragment.getEnterTransitionCallback();
 | |
|             arrayList = backStackRecord.mSharedElementTargetNames;
 | |
|         }
 | |
|         if (arrayList != null) {
 | |
|             arrayMap2.retainAll(arrayList);
 | |
|             arrayMap2.retainAll(arrayMap.values());
 | |
|         }
 | |
|         if (enterTransitionCallback != null) {
 | |
|             enterTransitionCallback.onMapSharedElements(arrayList, arrayMap2);
 | |
|             for (int size = arrayList.size() - 1; size >= 0; size--) {
 | |
|                 String str = arrayList.get(size);
 | |
|                 View view2 = arrayMap2.get(str);
 | |
|                 if (view2 == null) {
 | |
|                     String findKeyForValue2 = findKeyForValue(arrayMap, str);
 | |
|                     if (findKeyForValue2 != null) {
 | |
|                         arrayMap.remove(findKeyForValue2);
 | |
|                     }
 | |
|                 } else if (!str.equals(ViewCompat.getTransitionName(view2)) && (findKeyForValue = findKeyForValue(arrayMap, str)) != null) {
 | |
|                     arrayMap.put(findKeyForValue, ViewCompat.getTransitionName(view2));
 | |
|                 }
 | |
|             }
 | |
|         } else {
 | |
|             retainValues(arrayMap, arrayMap2);
 | |
|         }
 | |
|         return arrayMap2;
 | |
|     }
 | |
| 
 | |
|     static String findKeyForValue(ArrayMap<String, String> arrayMap, String str) {
 | |
|         int size = arrayMap.size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             if (str.equals(arrayMap.valueAt(i))) {
 | |
|                 return arrayMap.keyAt(i);
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     static View getInEpicenterView(ArrayMap<String, View> arrayMap, FragmentContainerTransition fragmentContainerTransition, Object obj, boolean z) {
 | |
|         String str;
 | |
|         BackStackRecord backStackRecord = fragmentContainerTransition.lastInTransaction;
 | |
|         if (obj == null || arrayMap == null || backStackRecord.mSharedElementSourceNames == null || backStackRecord.mSharedElementSourceNames.isEmpty()) {
 | |
|             return null;
 | |
|         }
 | |
|         if (z) {
 | |
|             str = backStackRecord.mSharedElementSourceNames.get(0);
 | |
|         } else {
 | |
|             str = backStackRecord.mSharedElementTargetNames.get(0);
 | |
|         }
 | |
|         return arrayMap.get(str);
 | |
|     }
 | |
| 
 | |
|     private static void setOutEpicenter(FragmentTransitionImpl fragmentTransitionImpl, Object obj, Object obj2, ArrayMap<String, View> arrayMap, boolean z, BackStackRecord backStackRecord) {
 | |
|         String str;
 | |
|         if (backStackRecord.mSharedElementSourceNames == null || backStackRecord.mSharedElementSourceNames.isEmpty()) {
 | |
|             return;
 | |
|         }
 | |
|         if (z) {
 | |
|             str = backStackRecord.mSharedElementTargetNames.get(0);
 | |
|         } else {
 | |
|             str = backStackRecord.mSharedElementSourceNames.get(0);
 | |
|         }
 | |
|         View view = arrayMap.get(str);
 | |
|         fragmentTransitionImpl.setEpicenter(obj, view);
 | |
|         if (obj2 != null) {
 | |
|             fragmentTransitionImpl.setEpicenter(obj2, view);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static void retainValues(ArrayMap<String, String> arrayMap, ArrayMap<String, View> arrayMap2) {
 | |
|         for (int size = arrayMap.size() - 1; size >= 0; size--) {
 | |
|             if (!arrayMap2.containsKey(arrayMap.valueAt(size))) {
 | |
|                 arrayMap.removeAt(size);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static void callSharedElementStartEnd(Fragment fragment, Fragment fragment2, boolean z, ArrayMap<String, View> arrayMap, boolean z2) {
 | |
|         SharedElementCallback enterTransitionCallback;
 | |
|         if (z) {
 | |
|             enterTransitionCallback = fragment2.getEnterTransitionCallback();
 | |
|         } else {
 | |
|             enterTransitionCallback = fragment.getEnterTransitionCallback();
 | |
|         }
 | |
|         if (enterTransitionCallback != null) {
 | |
|             ArrayList arrayList = new ArrayList();
 | |
|             ArrayList arrayList2 = new ArrayList();
 | |
|             int size = arrayMap == null ? 0 : arrayMap.size();
 | |
|             for (int i = 0; i < size; i++) {
 | |
|                 arrayList2.add(arrayMap.keyAt(i));
 | |
|                 arrayList.add(arrayMap.valueAt(i));
 | |
|             }
 | |
|             if (z2) {
 | |
|                 enterTransitionCallback.onSharedElementStart(arrayList2, arrayList, null);
 | |
|             } else {
 | |
|                 enterTransitionCallback.onSharedElementEnd(arrayList2, arrayList, null);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static ArrayList<View> configureEnteringExitingViews(FragmentTransitionImpl fragmentTransitionImpl, Object obj, Fragment fragment, ArrayList<View> arrayList, View view) {
 | |
|         if (obj == null) {
 | |
|             return null;
 | |
|         }
 | |
|         ArrayList<View> arrayList2 = new ArrayList<>();
 | |
|         View view2 = fragment.getView();
 | |
|         if (view2 != null) {
 | |
|             fragmentTransitionImpl.captureTransitioningViews(arrayList2, view2);
 | |
|         }
 | |
|         if (arrayList != null) {
 | |
|             arrayList2.removeAll(arrayList);
 | |
|         }
 | |
|         if (arrayList2.isEmpty()) {
 | |
|             return arrayList2;
 | |
|         }
 | |
|         arrayList2.add(view);
 | |
|         fragmentTransitionImpl.addTargets(obj, arrayList2);
 | |
|         return arrayList2;
 | |
|     }
 | |
| 
 | |
|     static void setViewVisibility(ArrayList<View> arrayList, int i) {
 | |
|         if (arrayList == null) {
 | |
|             return;
 | |
|         }
 | |
|         for (int size = arrayList.size() - 1; size >= 0; size--) {
 | |
|             arrayList.get(size).setVisibility(i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static Object mergeTransitions(FragmentTransitionImpl fragmentTransitionImpl, Object obj, Object obj2, Object obj3, Fragment fragment, boolean z) {
 | |
|         boolean allowEnterTransitionOverlap;
 | |
|         if (obj != null && obj2 != null && fragment != null) {
 | |
|             if (z) {
 | |
|                 allowEnterTransitionOverlap = fragment.getAllowReturnTransitionOverlap();
 | |
|             } else {
 | |
|                 allowEnterTransitionOverlap = fragment.getAllowEnterTransitionOverlap();
 | |
|             }
 | |
|             if (!allowEnterTransitionOverlap) {
 | |
|                 return fragmentTransitionImpl.mergeTransitionsInSequence(obj2, obj, obj3);
 | |
|             }
 | |
|         }
 | |
|         return fragmentTransitionImpl.mergeTransitionsTogether(obj2, obj, obj3);
 | |
|     }
 | |
| 
 | |
|     public static void calculateFragments(BackStackRecord backStackRecord, SparseArray<FragmentContainerTransition> sparseArray, boolean z) {
 | |
|         int size = backStackRecord.mOps.size();
 | |
|         for (int i = 0; i < size; i++) {
 | |
|             addToFirstInLastOut(backStackRecord, backStackRecord.mOps.get(i), sparseArray, false, z);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static void calculatePopFragments(BackStackRecord backStackRecord, SparseArray<FragmentContainerTransition> sparseArray, boolean z) {
 | |
|         if (backStackRecord.mManager.getContainer().onHasView()) {
 | |
|             for (int size = backStackRecord.mOps.size() - 1; size >= 0; size--) {
 | |
|                 addToFirstInLastOut(backStackRecord, backStackRecord.mOps.get(size), sparseArray, true, z);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:59:0x0039, code lost:
 | |
|     
 | |
|         if (r0.mAdded != false) goto L70;
 | |
|      */
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:60:0x008e, code lost:
 | |
|     
 | |
|         r9 = true;
 | |
|      */
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:71:0x0070, code lost:
 | |
|     
 | |
|         r9 = true;
 | |
|      */
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:96:0x008c, code lost:
 | |
|     
 | |
|         if (r0.mHidden == false) goto L70;
 | |
|      */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:26:0x009c  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:29:0x00a9 A[ADDED_TO_REGION] */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:36:0x00b7  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:38:0x00c9 A[ADDED_TO_REGION] */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:43:0x00db A[ADDED_TO_REGION] */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:52:? A[ADDED_TO_REGION, RETURN, SYNTHETIC] */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     private static void addToFirstInLastOut(androidx.fragment.app.BackStackRecord r8, androidx.fragment.app.FragmentTransaction.Op r9, android.util.SparseArray<androidx.fragment.app.FragmentTransition.FragmentContainerTransition> r10, boolean r11, boolean r12) {
 | |
|         /*
 | |
|             Method dump skipped, instructions count: 230
 | |
|             To view this dump add '--comments-level debug' option
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.fragment.app.FragmentTransition.addToFirstInLastOut(androidx.fragment.app.BackStackRecord, androidx.fragment.app.FragmentTransaction$Op, android.util.SparseArray, boolean, boolean):void");
 | |
|     }
 | |
| 
 | |
|     private static FragmentContainerTransition ensureContainer(FragmentContainerTransition fragmentContainerTransition, SparseArray<FragmentContainerTransition> sparseArray, int i) {
 | |
|         if (fragmentContainerTransition != null) {
 | |
|             return fragmentContainerTransition;
 | |
|         }
 | |
|         FragmentContainerTransition fragmentContainerTransition2 = new FragmentContainerTransition();
 | |
|         sparseArray.put(i, fragmentContainerTransition2);
 | |
|         return fragmentContainerTransition2;
 | |
|     }
 | |
| 
 | |
|     static class FragmentContainerTransition {
 | |
|         public Fragment firstOut;
 | |
|         public boolean firstOutIsPop;
 | |
|         public BackStackRecord firstOutTransaction;
 | |
|         public Fragment lastIn;
 | |
|         public boolean lastInIsPop;
 | |
|         public BackStackRecord lastInTransaction;
 | |
| 
 | |
|         FragmentContainerTransition() {
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private FragmentTransition() {
 | |
|     }
 | |
| }
 |