202 lines
8.8 KiB
Java
202 lines
8.8 KiB
Java
package androidx.constraintlayout.solver.widgets;
|
|
|
|
import androidx.constraintlayout.solver.widgets.ConstraintWidget;
|
|
import java.util.ArrayList;
|
|
public class ChainHead {
|
|
private boolean mDefined;
|
|
public ConstraintWidget mFirst;
|
|
public ConstraintWidget mFirstMatchConstraintWidget;
|
|
public ConstraintWidget mFirstVisibleWidget;
|
|
public boolean mHasComplexMatchWeights;
|
|
public boolean mHasDefinedWeights;
|
|
public boolean mHasRatio;
|
|
public boolean mHasUndefinedWeights;
|
|
public ConstraintWidget mHead;
|
|
private boolean mIsRtl = false;
|
|
public ConstraintWidget mLast;
|
|
public ConstraintWidget mLastMatchConstraintWidget;
|
|
public ConstraintWidget mLastVisibleWidget;
|
|
public boolean mOptimizable;
|
|
private int mOrientation;
|
|
public int mTotalMargins;
|
|
public int mTotalSize;
|
|
public float mTotalWeight = 0.0f;
|
|
public int mVisibleWidgets;
|
|
public ArrayList<ConstraintWidget> mWeightedMatchConstraintsWidgets;
|
|
public int mWidgetsCount;
|
|
public int mWidgetsMatchCount;
|
|
|
|
public ChainHead(ConstraintWidget constraintWidget, int i, boolean z2) {
|
|
this.mFirst = constraintWidget;
|
|
this.mOrientation = i;
|
|
this.mIsRtl = z2;
|
|
}
|
|
|
|
private void defineChainProperties() {
|
|
int i = this.mOrientation * 2;
|
|
ConstraintWidget constraintWidget = this.mFirst;
|
|
boolean z2 = true;
|
|
this.mOptimizable = true;
|
|
ConstraintWidget constraintWidget2 = constraintWidget;
|
|
boolean z3 = false;
|
|
while (!z3) {
|
|
this.mWidgetsCount++;
|
|
ConstraintWidget[] constraintWidgetArr = constraintWidget.mNextChainWidget;
|
|
int i2 = this.mOrientation;
|
|
ConstraintWidget constraintWidget3 = null;
|
|
constraintWidgetArr[i2] = null;
|
|
constraintWidget.mListNextMatchConstraintsWidget[i2] = null;
|
|
if (constraintWidget.getVisibility() != 8) {
|
|
this.mVisibleWidgets++;
|
|
ConstraintWidget.DimensionBehaviour dimensionBehaviour = constraintWidget.getDimensionBehaviour(this.mOrientation);
|
|
ConstraintWidget.DimensionBehaviour dimensionBehaviour2 = ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT;
|
|
if (dimensionBehaviour != dimensionBehaviour2) {
|
|
this.mTotalSize = constraintWidget.getLength(this.mOrientation) + this.mTotalSize;
|
|
}
|
|
int margin = constraintWidget.mListAnchors[i].getMargin() + this.mTotalSize;
|
|
this.mTotalSize = margin;
|
|
int i3 = i + 1;
|
|
this.mTotalSize = constraintWidget.mListAnchors[i3].getMargin() + margin;
|
|
int margin2 = constraintWidget.mListAnchors[i].getMargin() + this.mTotalMargins;
|
|
this.mTotalMargins = margin2;
|
|
this.mTotalMargins = constraintWidget.mListAnchors[i3].getMargin() + margin2;
|
|
if (this.mFirstVisibleWidget == null) {
|
|
this.mFirstVisibleWidget = constraintWidget;
|
|
}
|
|
this.mLastVisibleWidget = constraintWidget;
|
|
ConstraintWidget.DimensionBehaviour[] dimensionBehaviourArr = constraintWidget.mListDimensionBehaviors;
|
|
int i4 = this.mOrientation;
|
|
if (dimensionBehaviourArr[i4] == dimensionBehaviour2) {
|
|
int[] iArr = constraintWidget.mResolvedMatchConstraintDefault;
|
|
if (iArr[i4] == 0 || iArr[i4] == 3 || iArr[i4] == 2) {
|
|
this.mWidgetsMatchCount++;
|
|
float[] fArr = constraintWidget.mWeight;
|
|
float f = fArr[i4];
|
|
if (f > 0.0f) {
|
|
this.mTotalWeight += fArr[i4];
|
|
}
|
|
if (isMatchConstraintEqualityCandidate(constraintWidget, i4)) {
|
|
if (f < 0.0f) {
|
|
this.mHasUndefinedWeights = true;
|
|
} else {
|
|
this.mHasDefinedWeights = true;
|
|
}
|
|
if (this.mWeightedMatchConstraintsWidgets == null) {
|
|
this.mWeightedMatchConstraintsWidgets = new ArrayList<>();
|
|
}
|
|
this.mWeightedMatchConstraintsWidgets.add(constraintWidget);
|
|
}
|
|
if (this.mFirstMatchConstraintWidget == null) {
|
|
this.mFirstMatchConstraintWidget = constraintWidget;
|
|
}
|
|
ConstraintWidget constraintWidget4 = this.mLastMatchConstraintWidget;
|
|
if (constraintWidget4 != null) {
|
|
constraintWidget4.mListNextMatchConstraintsWidget[this.mOrientation] = constraintWidget;
|
|
}
|
|
this.mLastMatchConstraintWidget = constraintWidget;
|
|
}
|
|
if (this.mOrientation == 0) {
|
|
if (constraintWidget.mMatchConstraintDefaultWidth != 0) {
|
|
this.mOptimizable = false;
|
|
} else if (!(constraintWidget.mMatchConstraintMinWidth == 0 && constraintWidget.mMatchConstraintMaxWidth == 0)) {
|
|
this.mOptimizable = false;
|
|
}
|
|
} else if (constraintWidget.mMatchConstraintDefaultHeight != 0) {
|
|
this.mOptimizable = false;
|
|
} else if (!(constraintWidget.mMatchConstraintMinHeight == 0 && constraintWidget.mMatchConstraintMaxHeight == 0)) {
|
|
this.mOptimizable = false;
|
|
}
|
|
if (constraintWidget.mDimensionRatio != 0.0f) {
|
|
this.mOptimizable = false;
|
|
this.mHasRatio = true;
|
|
}
|
|
}
|
|
}
|
|
if (constraintWidget2 != constraintWidget) {
|
|
constraintWidget2.mNextChainWidget[this.mOrientation] = constraintWidget;
|
|
}
|
|
ConstraintAnchor constraintAnchor = constraintWidget.mListAnchors[i + 1].mTarget;
|
|
if (constraintAnchor != null) {
|
|
ConstraintWidget constraintWidget5 = constraintAnchor.mOwner;
|
|
ConstraintAnchor[] constraintAnchorArr = constraintWidget5.mListAnchors;
|
|
if (constraintAnchorArr[i].mTarget != null && constraintAnchorArr[i].mTarget.mOwner == constraintWidget) {
|
|
constraintWidget3 = constraintWidget5;
|
|
}
|
|
}
|
|
if (constraintWidget3 == null) {
|
|
constraintWidget3 = constraintWidget;
|
|
z3 = true;
|
|
}
|
|
constraintWidget2 = constraintWidget;
|
|
constraintWidget = constraintWidget3;
|
|
}
|
|
ConstraintWidget constraintWidget6 = this.mFirstVisibleWidget;
|
|
if (constraintWidget6 != null) {
|
|
this.mTotalSize -= constraintWidget6.mListAnchors[i].getMargin();
|
|
}
|
|
ConstraintWidget constraintWidget7 = this.mLastVisibleWidget;
|
|
if (constraintWidget7 != null) {
|
|
this.mTotalSize -= constraintWidget7.mListAnchors[i + 1].getMargin();
|
|
}
|
|
this.mLast = constraintWidget;
|
|
if (this.mOrientation != 0 || !this.mIsRtl) {
|
|
this.mHead = this.mFirst;
|
|
} else {
|
|
this.mHead = constraintWidget;
|
|
}
|
|
if (!this.mHasDefinedWeights || !this.mHasUndefinedWeights) {
|
|
z2 = false;
|
|
}
|
|
this.mHasComplexMatchWeights = z2;
|
|
}
|
|
|
|
private static boolean isMatchConstraintEqualityCandidate(ConstraintWidget constraintWidget, int i) {
|
|
if (constraintWidget.getVisibility() != 8 && constraintWidget.mListDimensionBehaviors[i] == ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT) {
|
|
int[] iArr = constraintWidget.mResolvedMatchConstraintDefault;
|
|
if (iArr[i] == 0 || iArr[i] == 3) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void define() {
|
|
if (!this.mDefined) {
|
|
defineChainProperties();
|
|
}
|
|
this.mDefined = true;
|
|
}
|
|
|
|
public ConstraintWidget getFirst() {
|
|
return this.mFirst;
|
|
}
|
|
|
|
public ConstraintWidget getFirstMatchConstraintWidget() {
|
|
return this.mFirstMatchConstraintWidget;
|
|
}
|
|
|
|
public ConstraintWidget getFirstVisibleWidget() {
|
|
return this.mFirstVisibleWidget;
|
|
}
|
|
|
|
public ConstraintWidget getHead() {
|
|
return this.mHead;
|
|
}
|
|
|
|
public ConstraintWidget getLast() {
|
|
return this.mLast;
|
|
}
|
|
|
|
public ConstraintWidget getLastMatchConstraintWidget() {
|
|
return this.mLastMatchConstraintWidget;
|
|
}
|
|
|
|
public ConstraintWidget getLastVisibleWidget() {
|
|
return this.mLastVisibleWidget;
|
|
}
|
|
|
|
public float getTotalWeight() {
|
|
return this.mTotalWeight;
|
|
}
|
|
}
|