240 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.fragment.app;
 | |
| 
 | |
| import android.animation.LayoutTransition;
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Canvas;
 | |
| import android.os.Bundle;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.WindowInsets;
 | |
| import android.widget.FrameLayout;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.WindowInsetsCompat;
 | |
| import androidx.fragment.R;
 | |
| import java.util.ArrayList;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public final class FragmentContainerView extends FrameLayout {
 | |
|     private View.OnApplyWindowInsetsListener mApplyWindowInsetsListener;
 | |
|     private ArrayList<View> mDisappearingFragmentChildren;
 | |
|     private boolean mDrawDisappearingViewsFirst;
 | |
|     private ArrayList<View> mTransitioningFragmentViews;
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public WindowInsets onApplyWindowInsets(WindowInsets windowInsets) {
 | |
|         return windowInsets;
 | |
|     }
 | |
| 
 | |
|     void setDrawDisappearingViewsLast(boolean z) {
 | |
|         this.mDrawDisappearingViewsFirst = z;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setOnApplyWindowInsetsListener(View.OnApplyWindowInsetsListener onApplyWindowInsetsListener) {
 | |
|         this.mApplyWindowInsetsListener = onApplyWindowInsetsListener;
 | |
|     }
 | |
| 
 | |
|     public FragmentContainerView(Context context) {
 | |
|         super(context);
 | |
|         this.mDrawDisappearingViewsFirst = true;
 | |
|     }
 | |
| 
 | |
|     public FragmentContainerView(Context context, AttributeSet attributeSet) {
 | |
|         this(context, attributeSet, 0);
 | |
|     }
 | |
| 
 | |
|     public FragmentContainerView(Context context, AttributeSet attributeSet, int i) {
 | |
|         super(context, attributeSet, i);
 | |
|         String str;
 | |
|         this.mDrawDisappearingViewsFirst = true;
 | |
|         if (attributeSet != null) {
 | |
|             String classAttribute = attributeSet.getClassAttribute();
 | |
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.FragmentContainerView);
 | |
|             if (classAttribute == null) {
 | |
|                 classAttribute = obtainStyledAttributes.getString(R.styleable.FragmentContainerView_android_name);
 | |
|                 str = "android:name";
 | |
|             } else {
 | |
|                 str = "class";
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|             if (classAttribute == null || isInEditMode()) {
 | |
|                 return;
 | |
|             }
 | |
|             throw new UnsupportedOperationException("FragmentContainerView must be within a FragmentActivity to use " + str + "=\"" + classAttribute + "\"");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     FragmentContainerView(Context context, AttributeSet attributeSet, FragmentManager fragmentManager) {
 | |
|         super(context, attributeSet);
 | |
|         String str;
 | |
|         this.mDrawDisappearingViewsFirst = true;
 | |
|         String classAttribute = attributeSet.getClassAttribute();
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.FragmentContainerView);
 | |
|         classAttribute = classAttribute == null ? obtainStyledAttributes.getString(R.styleable.FragmentContainerView_android_name) : classAttribute;
 | |
|         String string = obtainStyledAttributes.getString(R.styleable.FragmentContainerView_android_tag);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         int id = getId();
 | |
|         Fragment findFragmentById = fragmentManager.findFragmentById(id);
 | |
|         if (classAttribute != null && findFragmentById == null) {
 | |
|             if (id <= 0) {
 | |
|                 if (string != null) {
 | |
|                     str = " with tag " + string;
 | |
|                 } else {
 | |
|                     str = "";
 | |
|                 }
 | |
|                 throw new IllegalStateException("FragmentContainerView must have an android:id to add Fragment " + classAttribute + str);
 | |
|             }
 | |
|             Fragment instantiate = fragmentManager.getFragmentFactory().instantiate(context.getClassLoader(), classAttribute);
 | |
|             instantiate.onInflate(context, attributeSet, (Bundle) null);
 | |
|             fragmentManager.beginTransaction().setReorderingAllowed(true).add(this, instantiate, string).commitNowAllowingStateLoss();
 | |
|         }
 | |
|         fragmentManager.onContainerAvailable(this);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void setLayoutTransition(LayoutTransition layoutTransition) {
 | |
|         throw new UnsupportedOperationException("FragmentContainerView does not support Layout Transitions or animateLayoutChanges=\"true\".");
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     public WindowInsets dispatchApplyWindowInsets(WindowInsets windowInsets) {
 | |
|         WindowInsetsCompat onApplyWindowInsets;
 | |
|         WindowInsetsCompat windowInsetsCompat = WindowInsetsCompat.toWindowInsetsCompat(windowInsets);
 | |
|         View.OnApplyWindowInsetsListener onApplyWindowInsetsListener = this.mApplyWindowInsetsListener;
 | |
|         if (onApplyWindowInsetsListener != null) {
 | |
|             onApplyWindowInsets = WindowInsetsCompat.toWindowInsetsCompat(onApplyWindowInsetsListener.onApplyWindowInsets(this, windowInsets));
 | |
|         } else {
 | |
|             onApplyWindowInsets = ViewCompat.onApplyWindowInsets(this, windowInsetsCompat);
 | |
|         }
 | |
|         if (!onApplyWindowInsets.isConsumed()) {
 | |
|             int childCount = getChildCount();
 | |
|             for (int i = 0; i < childCount; i++) {
 | |
|                 ViewCompat.dispatchApplyWindowInsets(getChildAt(i), onApplyWindowInsets);
 | |
|             }
 | |
|         }
 | |
|         return windowInsets;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.View
 | |
|     protected void dispatchDraw(Canvas canvas) {
 | |
|         if (this.mDrawDisappearingViewsFirst && this.mDisappearingFragmentChildren != null) {
 | |
|             for (int i = 0; i < this.mDisappearingFragmentChildren.size(); i++) {
 | |
|                 super.drawChild(canvas, this.mDisappearingFragmentChildren.get(i), getDrawingTime());
 | |
|             }
 | |
|         }
 | |
|         super.dispatchDraw(canvas);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     protected boolean drawChild(Canvas canvas, View view, long j) {
 | |
|         ArrayList<View> arrayList;
 | |
|         if (!this.mDrawDisappearingViewsFirst || (arrayList = this.mDisappearingFragmentChildren) == null || arrayList.size() <= 0 || !this.mDisappearingFragmentChildren.contains(view)) {
 | |
|             return super.drawChild(canvas, view, j);
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void startViewTransition(View view) {
 | |
|         if (view.getParent() == this) {
 | |
|             if (this.mTransitioningFragmentViews == null) {
 | |
|                 this.mTransitioningFragmentViews = new ArrayList<>();
 | |
|             }
 | |
|             this.mTransitioningFragmentViews.add(view);
 | |
|         }
 | |
|         super.startViewTransition(view);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void endViewTransition(View view) {
 | |
|         ArrayList<View> arrayList = this.mTransitioningFragmentViews;
 | |
|         if (arrayList != null) {
 | |
|             arrayList.remove(view);
 | |
|             ArrayList<View> arrayList2 = this.mDisappearingFragmentChildren;
 | |
|             if (arrayList2 != null && arrayList2.remove(view)) {
 | |
|                 this.mDrawDisappearingViewsFirst = true;
 | |
|             }
 | |
|         }
 | |
|         super.endViewTransition(view);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void addView(View view, int i, ViewGroup.LayoutParams layoutParams) {
 | |
|         if (FragmentManager.getViewFragment(view) == null) {
 | |
|             throw new IllegalStateException("Views added to a FragmentContainerView must be associated with a Fragment. View " + view + " is not associated with a Fragment.");
 | |
|         }
 | |
|         super.addView(view, i, layoutParams);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     protected boolean addViewInLayout(View view, int i, ViewGroup.LayoutParams layoutParams, boolean z) {
 | |
|         if (FragmentManager.getViewFragment(view) == null) {
 | |
|             throw new IllegalStateException("Views added to a FragmentContainerView must be associated with a Fragment. View " + view + " is not associated with a Fragment.");
 | |
|         }
 | |
|         return super.addViewInLayout(view, i, layoutParams, z);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void removeViewAt(int i) {
 | |
|         addDisappearingFragmentView(getChildAt(i));
 | |
|         super.removeViewAt(i);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void removeViewInLayout(View view) {
 | |
|         addDisappearingFragmentView(view);
 | |
|         super.removeViewInLayout(view);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup, android.view.ViewManager
 | |
|     public void removeView(View view) {
 | |
|         addDisappearingFragmentView(view);
 | |
|         super.removeView(view);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void removeViews(int i, int i2) {
 | |
|         for (int i3 = i; i3 < i + i2; i3++) {
 | |
|             addDisappearingFragmentView(getChildAt(i3));
 | |
|         }
 | |
|         super.removeViews(i, i2);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void removeViewsInLayout(int i, int i2) {
 | |
|         for (int i3 = i; i3 < i + i2; i3++) {
 | |
|             addDisappearingFragmentView(getChildAt(i3));
 | |
|         }
 | |
|         super.removeViewsInLayout(i, i2);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     public void removeAllViewsInLayout() {
 | |
|         for (int childCount = getChildCount() - 1; childCount >= 0; childCount--) {
 | |
|             addDisappearingFragmentView(getChildAt(childCount));
 | |
|         }
 | |
|         super.removeAllViewsInLayout();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.ViewGroup
 | |
|     protected void removeDetachedView(View view, boolean z) {
 | |
|         if (z) {
 | |
|             addDisappearingFragmentView(view);
 | |
|         }
 | |
|         super.removeDetachedView(view, z);
 | |
|     }
 | |
| 
 | |
|     private void addDisappearingFragmentView(View view) {
 | |
|         ArrayList<View> arrayList = this.mTransitioningFragmentViews;
 | |
|         if (arrayList == null || !arrayList.contains(view)) {
 | |
|             return;
 | |
|         }
 | |
|         if (this.mDisappearingFragmentChildren == null) {
 | |
|             this.mDisappearingFragmentChildren = new ArrayList<>();
 | |
|         }
 | |
|         this.mDisappearingFragmentChildren.add(view);
 | |
|     }
 | |
| }
 |