ADD week 5
This commit is contained in:
		| @@ -0,0 +1,239 @@ | ||||
| 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); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user