mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-30 11:02:31 -06:00
368 lines
12 KiB
Java
368 lines
12 KiB
Java
|
package androidx.constraintlayout.solver.widgets;
|
||
|
|
||
|
import androidx.constraintlayout.solver.Cache;
|
||
|
import androidx.constraintlayout.solver.SolverVariable;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.HashMap;
|
||
|
import java.util.HashSet;
|
||
|
import java.util.Iterator;
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public class ConstraintAnchor {
|
||
|
private static final boolean ALLOW_BINARY = false;
|
||
|
private static final int UNSET_GONE_MARGIN = -1;
|
||
|
public final ConstraintWidget mOwner;
|
||
|
SolverVariable mSolverVariable;
|
||
|
public ConstraintAnchor mTarget;
|
||
|
public final Type mType;
|
||
|
private HashSet<ConstraintAnchor> mDependents = null;
|
||
|
public int mMargin = 0;
|
||
|
int mGoneMargin = -1;
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public enum Type {
|
||
|
NONE,
|
||
|
LEFT,
|
||
|
TOP,
|
||
|
RIGHT,
|
||
|
BOTTOM,
|
||
|
BASELINE,
|
||
|
CENTER,
|
||
|
CENTER_X,
|
||
|
CENTER_Y
|
||
|
}
|
||
|
|
||
|
public ConstraintWidget getOwner() {
|
||
|
return this.mOwner;
|
||
|
}
|
||
|
|
||
|
public SolverVariable getSolverVariable() {
|
||
|
return this.mSolverVariable;
|
||
|
}
|
||
|
|
||
|
public ConstraintAnchor getTarget() {
|
||
|
return this.mTarget;
|
||
|
}
|
||
|
|
||
|
public Type getType() {
|
||
|
return this.mType;
|
||
|
}
|
||
|
|
||
|
public boolean isConnected() {
|
||
|
return this.mTarget != null;
|
||
|
}
|
||
|
|
||
|
public boolean hasDependents() {
|
||
|
HashSet<ConstraintAnchor> hashSet = this.mDependents;
|
||
|
return hashSet != null && hashSet.size() > 0;
|
||
|
}
|
||
|
|
||
|
public boolean hasCenteredDependents() {
|
||
|
HashSet<ConstraintAnchor> hashSet = this.mDependents;
|
||
|
if (hashSet == null) {
|
||
|
return false;
|
||
|
}
|
||
|
Iterator<ConstraintAnchor> it = hashSet.iterator();
|
||
|
while (it.hasNext()) {
|
||
|
if (it.next().getOpposite().isConnected()) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public void copyFrom(ConstraintAnchor constraintAnchor, HashMap<ConstraintWidget, ConstraintWidget> hashMap) {
|
||
|
HashSet<ConstraintAnchor> hashSet;
|
||
|
ConstraintAnchor constraintAnchor2 = this.mTarget;
|
||
|
if (constraintAnchor2 != null && (hashSet = constraintAnchor2.mDependents) != null) {
|
||
|
hashSet.remove(this);
|
||
|
}
|
||
|
ConstraintAnchor constraintAnchor3 = constraintAnchor.mTarget;
|
||
|
if (constraintAnchor3 != null) {
|
||
|
this.mTarget = hashMap.get(constraintAnchor.mTarget.mOwner).getAnchor(constraintAnchor3.getType());
|
||
|
} else {
|
||
|
this.mTarget = null;
|
||
|
}
|
||
|
ConstraintAnchor constraintAnchor4 = this.mTarget;
|
||
|
if (constraintAnchor4 != null) {
|
||
|
if (constraintAnchor4.mDependents == null) {
|
||
|
constraintAnchor4.mDependents = new HashSet<>();
|
||
|
}
|
||
|
this.mTarget.mDependents.add(this);
|
||
|
}
|
||
|
this.mMargin = constraintAnchor.mMargin;
|
||
|
this.mGoneMargin = constraintAnchor.mGoneMargin;
|
||
|
}
|
||
|
|
||
|
public ConstraintAnchor(ConstraintWidget constraintWidget, Type type) {
|
||
|
this.mOwner = constraintWidget;
|
||
|
this.mType = type;
|
||
|
}
|
||
|
|
||
|
public void resetSolverVariable(Cache cache) {
|
||
|
SolverVariable solverVariable = this.mSolverVariable;
|
||
|
if (solverVariable == null) {
|
||
|
this.mSolverVariable = new SolverVariable(SolverVariable.Type.UNRESTRICTED, (String) null);
|
||
|
} else {
|
||
|
solverVariable.reset();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public int getMargin() {
|
||
|
ConstraintAnchor constraintAnchor;
|
||
|
if (this.mOwner.getVisibility() == 8) {
|
||
|
return 0;
|
||
|
}
|
||
|
return (this.mGoneMargin <= -1 || (constraintAnchor = this.mTarget) == null || constraintAnchor.mOwner.getVisibility() != 8) ? this.mMargin : this.mGoneMargin;
|
||
|
}
|
||
|
|
||
|
public void reset() {
|
||
|
HashSet<ConstraintAnchor> hashSet;
|
||
|
ConstraintAnchor constraintAnchor = this.mTarget;
|
||
|
if (constraintAnchor != null && (hashSet = constraintAnchor.mDependents) != null) {
|
||
|
hashSet.remove(this);
|
||
|
}
|
||
|
this.mTarget = null;
|
||
|
this.mMargin = 0;
|
||
|
this.mGoneMargin = -1;
|
||
|
}
|
||
|
|
||
|
public boolean connect(ConstraintAnchor constraintAnchor, int i, int i2, boolean z) {
|
||
|
if (constraintAnchor == null) {
|
||
|
reset();
|
||
|
return true;
|
||
|
}
|
||
|
if (!z && !isValidConnection(constraintAnchor)) {
|
||
|
return false;
|
||
|
}
|
||
|
this.mTarget = constraintAnchor;
|
||
|
if (constraintAnchor.mDependents == null) {
|
||
|
constraintAnchor.mDependents = new HashSet<>();
|
||
|
}
|
||
|
this.mTarget.mDependents.add(this);
|
||
|
if (i > 0) {
|
||
|
this.mMargin = i;
|
||
|
} else {
|
||
|
this.mMargin = 0;
|
||
|
}
|
||
|
this.mGoneMargin = i2;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public boolean connect(ConstraintAnchor constraintAnchor, int i) {
|
||
|
return connect(constraintAnchor, i, -1, false);
|
||
|
}
|
||
|
|
||
|
public boolean isValidConnection(ConstraintAnchor constraintAnchor) {
|
||
|
if (constraintAnchor == null) {
|
||
|
return false;
|
||
|
}
|
||
|
Type type = constraintAnchor.getType();
|
||
|
Type type2 = this.mType;
|
||
|
if (type == type2) {
|
||
|
return type2 != Type.BASELINE || (constraintAnchor.getOwner().hasBaseline() && getOwner().hasBaseline());
|
||
|
}
|
||
|
switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[this.mType.ordinal()]) {
|
||
|
case 1:
|
||
|
return (type == Type.BASELINE || type == Type.CENTER_X || type == Type.CENTER_Y) ? false : true;
|
||
|
case 2:
|
||
|
case 3:
|
||
|
boolean z = type == Type.LEFT || type == Type.RIGHT;
|
||
|
if (constraintAnchor.getOwner() instanceof Guideline) {
|
||
|
return z || type == Type.CENTER_X;
|
||
|
}
|
||
|
return z;
|
||
|
case 4:
|
||
|
case 5:
|
||
|
boolean z2 = type == Type.TOP || type == Type.BOTTOM;
|
||
|
if (constraintAnchor.getOwner() instanceof Guideline) {
|
||
|
return z2 || type == Type.CENTER_Y;
|
||
|
}
|
||
|
return z2;
|
||
|
case 6:
|
||
|
case 7:
|
||
|
case 8:
|
||
|
case 9:
|
||
|
return false;
|
||
|
default:
|
||
|
throw new AssertionError(this.mType.name());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
/* renamed from: androidx.constraintlayout.solver.widgets.ConstraintAnchor$1, reason: invalid class name */
|
||
|
/* loaded from: classes.dex */
|
||
|
public static /* synthetic */ class AnonymousClass1 {
|
||
|
static final /* synthetic */ int[] $SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type;
|
||
|
|
||
|
static {
|
||
|
int[] iArr = new int[Type.values().length];
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type = iArr;
|
||
|
try {
|
||
|
iArr[Type.CENTER.ordinal()] = 1;
|
||
|
} catch (NoSuchFieldError unused) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.LEFT.ordinal()] = 2;
|
||
|
} catch (NoSuchFieldError unused2) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.RIGHT.ordinal()] = 3;
|
||
|
} catch (NoSuchFieldError unused3) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.TOP.ordinal()] = 4;
|
||
|
} catch (NoSuchFieldError unused4) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.BOTTOM.ordinal()] = 5;
|
||
|
} catch (NoSuchFieldError unused5) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.BASELINE.ordinal()] = 6;
|
||
|
} catch (NoSuchFieldError unused6) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.CENTER_X.ordinal()] = 7;
|
||
|
} catch (NoSuchFieldError unused7) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.CENTER_Y.ordinal()] = 8;
|
||
|
} catch (NoSuchFieldError unused8) {
|
||
|
}
|
||
|
try {
|
||
|
$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[Type.NONE.ordinal()] = 9;
|
||
|
} catch (NoSuchFieldError unused9) {
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean isSideAnchor() {
|
||
|
switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[this.mType.ordinal()]) {
|
||
|
case 1:
|
||
|
case 6:
|
||
|
case 7:
|
||
|
case 8:
|
||
|
case 9:
|
||
|
return false;
|
||
|
case 2:
|
||
|
case 3:
|
||
|
case 4:
|
||
|
case 5:
|
||
|
return true;
|
||
|
default:
|
||
|
throw new AssertionError(this.mType.name());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean isSimilarDimensionConnection(ConstraintAnchor constraintAnchor) {
|
||
|
Type type = constraintAnchor.getType();
|
||
|
if (type == this.mType) {
|
||
|
return true;
|
||
|
}
|
||
|
switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[this.mType.ordinal()]) {
|
||
|
case 1:
|
||
|
return type != Type.BASELINE;
|
||
|
case 2:
|
||
|
case 3:
|
||
|
case 7:
|
||
|
return type == Type.LEFT || type == Type.RIGHT || type == Type.CENTER_X;
|
||
|
case 4:
|
||
|
case 5:
|
||
|
case 6:
|
||
|
case 8:
|
||
|
return type == Type.TOP || type == Type.BOTTOM || type == Type.CENTER_Y || type == Type.BASELINE;
|
||
|
case 9:
|
||
|
return false;
|
||
|
default:
|
||
|
throw new AssertionError(this.mType.name());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void setMargin(int i) {
|
||
|
if (isConnected()) {
|
||
|
this.mMargin = i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void setGoneMargin(int i) {
|
||
|
if (isConnected()) {
|
||
|
this.mGoneMargin = i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean isVerticalAnchor() {
|
||
|
switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[this.mType.ordinal()]) {
|
||
|
case 1:
|
||
|
case 2:
|
||
|
case 3:
|
||
|
case 7:
|
||
|
return false;
|
||
|
case 4:
|
||
|
case 5:
|
||
|
case 6:
|
||
|
case 8:
|
||
|
case 9:
|
||
|
return true;
|
||
|
default:
|
||
|
throw new AssertionError(this.mType.name());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public String toString() {
|
||
|
return this.mOwner.getDebugName() + ":" + this.mType.toString();
|
||
|
}
|
||
|
|
||
|
public boolean isConnectionAllowed(ConstraintWidget constraintWidget, ConstraintAnchor constraintAnchor) {
|
||
|
return isConnectionAllowed(constraintWidget);
|
||
|
}
|
||
|
|
||
|
public boolean isConnectionAllowed(ConstraintWidget constraintWidget) {
|
||
|
if (isConnectionToMe(constraintWidget, new HashSet<>())) {
|
||
|
return false;
|
||
|
}
|
||
|
ConstraintWidget parent = getOwner().getParent();
|
||
|
return parent == constraintWidget || constraintWidget.getParent() == parent;
|
||
|
}
|
||
|
|
||
|
private boolean isConnectionToMe(ConstraintWidget constraintWidget, HashSet<ConstraintWidget> hashSet) {
|
||
|
if (hashSet.contains(constraintWidget)) {
|
||
|
return false;
|
||
|
}
|
||
|
hashSet.add(constraintWidget);
|
||
|
if (constraintWidget == getOwner()) {
|
||
|
return true;
|
||
|
}
|
||
|
ArrayList<ConstraintAnchor> anchors = constraintWidget.getAnchors();
|
||
|
int size = anchors.size();
|
||
|
for (int i = 0; i < size; i++) {
|
||
|
ConstraintAnchor constraintAnchor = anchors.get(i);
|
||
|
if (constraintAnchor.isSimilarDimensionConnection(this) && constraintAnchor.isConnected() && isConnectionToMe(constraintAnchor.getTarget().getOwner(), hashSet)) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public final ConstraintAnchor getOpposite() {
|
||
|
switch (AnonymousClass1.$SwitchMap$androidx$constraintlayout$solver$widgets$ConstraintAnchor$Type[this.mType.ordinal()]) {
|
||
|
case 1:
|
||
|
case 6:
|
||
|
case 7:
|
||
|
case 8:
|
||
|
case 9:
|
||
|
return null;
|
||
|
case 2:
|
||
|
return this.mOwner.mRight;
|
||
|
case 3:
|
||
|
return this.mOwner.mLeft;
|
||
|
case 4:
|
||
|
return this.mOwner.mBottom;
|
||
|
case 5:
|
||
|
return this.mOwner.mTop;
|
||
|
default:
|
||
|
throw new AssertionError(this.mType.name());
|
||
|
}
|
||
|
}
|
||
|
}
|