mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-25 16:42:30 -06:00
124 lines
4.2 KiB
Java
124 lines
4.2 KiB
Java
package androidx.transition;
|
|
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.FrameLayout;
|
|
import java.util.ArrayList;
|
|
|
|
/* loaded from: classes2.dex */
|
|
class GhostViewHolder extends FrameLayout {
|
|
private boolean mAttached;
|
|
private ViewGroup mParent;
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public GhostViewHolder(ViewGroup viewGroup) {
|
|
super(viewGroup.getContext());
|
|
setClipChildren(false);
|
|
this.mParent = viewGroup;
|
|
viewGroup.setTag(R.id.ghost_view_holder, this);
|
|
ViewGroupUtils.getOverlay(this.mParent).add(this);
|
|
this.mAttached = true;
|
|
}
|
|
|
|
@Override // android.view.ViewGroup
|
|
public void onViewAdded(View view) {
|
|
if (!this.mAttached) {
|
|
throw new IllegalStateException("This GhostViewHolder is detached!");
|
|
}
|
|
super.onViewAdded(view);
|
|
}
|
|
|
|
@Override // android.view.ViewGroup
|
|
public void onViewRemoved(View view) {
|
|
super.onViewRemoved(view);
|
|
if ((getChildCount() == 1 && getChildAt(0) == view) || getChildCount() == 0) {
|
|
this.mParent.setTag(R.id.ghost_view_holder, null);
|
|
ViewGroupUtils.getOverlay(this.mParent).remove(this);
|
|
this.mAttached = false;
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public static GhostViewHolder getHolder(ViewGroup viewGroup) {
|
|
return (GhostViewHolder) viewGroup.getTag(R.id.ghost_view_holder);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public void popToOverlayTop() {
|
|
if (!this.mAttached) {
|
|
throw new IllegalStateException("This GhostViewHolder is detached!");
|
|
}
|
|
ViewGroupUtils.getOverlay(this.mParent).remove(this);
|
|
ViewGroupUtils.getOverlay(this.mParent).add(this);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public void addGhostView(GhostViewPort ghostViewPort) {
|
|
ArrayList<View> arrayList = new ArrayList<>();
|
|
getParents(ghostViewPort.mView, arrayList);
|
|
int insertIndex = getInsertIndex(arrayList);
|
|
if (insertIndex < 0 || insertIndex >= getChildCount()) {
|
|
addView(ghostViewPort);
|
|
} else {
|
|
addView(ghostViewPort, insertIndex);
|
|
}
|
|
}
|
|
|
|
private int getInsertIndex(ArrayList<View> arrayList) {
|
|
ArrayList arrayList2 = new ArrayList();
|
|
int childCount = getChildCount() - 1;
|
|
int i = 0;
|
|
while (i <= childCount) {
|
|
int i2 = (i + childCount) / 2;
|
|
getParents(((GhostViewPort) getChildAt(i2)).mView, arrayList2);
|
|
if (isOnTop(arrayList, (ArrayList<View>) arrayList2)) {
|
|
i = i2 + 1;
|
|
} else {
|
|
childCount = i2 - 1;
|
|
}
|
|
arrayList2.clear();
|
|
}
|
|
return i;
|
|
}
|
|
|
|
private static boolean isOnTop(ArrayList<View> arrayList, ArrayList<View> arrayList2) {
|
|
if (arrayList.isEmpty() || arrayList2.isEmpty() || arrayList.get(0) != arrayList2.get(0)) {
|
|
return true;
|
|
}
|
|
int min = Math.min(arrayList.size(), arrayList2.size());
|
|
for (int i = 1; i < min; i++) {
|
|
View view = arrayList.get(i);
|
|
View view2 = arrayList2.get(i);
|
|
if (view != view2) {
|
|
return isOnTop(view, view2);
|
|
}
|
|
}
|
|
return arrayList2.size() == min;
|
|
}
|
|
|
|
private static void getParents(View view, ArrayList<View> arrayList) {
|
|
Object parent = view.getParent();
|
|
if (parent instanceof ViewGroup) {
|
|
getParents((View) parent, arrayList);
|
|
}
|
|
arrayList.add(view);
|
|
}
|
|
|
|
private static boolean isOnTop(View view, View view2) {
|
|
ViewGroup viewGroup = (ViewGroup) view.getParent();
|
|
int childCount = viewGroup.getChildCount();
|
|
if (view.getZ() != view2.getZ()) {
|
|
return view.getZ() > view2.getZ();
|
|
}
|
|
for (int i = 0; i < childCount; i++) {
|
|
View childAt = viewGroup.getChildAt(ViewGroupUtils.getChildDrawingOrder(viewGroup, i));
|
|
if (childAt == view) {
|
|
return false;
|
|
}
|
|
if (childAt == view2) {
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|