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);
|
|
}
|
|
}
|