2021-06-27 20:44:35 +00:00
|
|
|
package androidx.constraintlayout.solver.widgets.analyzer;
|
|
|
|
|
|
|
|
import androidx.constraintlayout.solver.LinearSystem;
|
|
|
|
import androidx.constraintlayout.solver.widgets.Chain;
|
|
|
|
import androidx.constraintlayout.solver.widgets.ConstraintWidget;
|
|
|
|
import androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer;
|
|
|
|
import c.d.b.a.a;
|
|
|
|
import java.lang.ref.WeakReference;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Iterator;
|
|
|
|
public class WidgetGroup {
|
|
|
|
private static final boolean DEBUG = false;
|
|
|
|
public static int count;
|
|
|
|
public boolean authoritative = false;
|
|
|
|
|
|
|
|
/* renamed from: id reason: collision with root package name */
|
|
|
|
public int f23id = -1;
|
|
|
|
private int moveTo = -1;
|
|
|
|
public int orientation = 0;
|
|
|
|
public ArrayList<MeasureResult> results = null;
|
|
|
|
public ArrayList<ConstraintWidget> widgets = new ArrayList<>();
|
|
|
|
|
|
|
|
public class MeasureResult {
|
|
|
|
public int baseline;
|
|
|
|
public int bottom;
|
|
|
|
public int left;
|
|
|
|
public int orientation;
|
|
|
|
public int right;
|
|
|
|
public int top;
|
|
|
|
public WeakReference<ConstraintWidget> widgetRef;
|
|
|
|
|
|
|
|
public MeasureResult(ConstraintWidget constraintWidget, LinearSystem linearSystem, int i) {
|
|
|
|
this.widgetRef = new WeakReference<>(constraintWidget);
|
|
|
|
this.left = linearSystem.getObjectVariableValue(constraintWidget.mLeft);
|
|
|
|
this.top = linearSystem.getObjectVariableValue(constraintWidget.mTop);
|
|
|
|
this.right = linearSystem.getObjectVariableValue(constraintWidget.mRight);
|
|
|
|
this.bottom = linearSystem.getObjectVariableValue(constraintWidget.mBottom);
|
|
|
|
this.baseline = linearSystem.getObjectVariableValue(constraintWidget.mBaseline);
|
|
|
|
this.orientation = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void apply() {
|
|
|
|
ConstraintWidget constraintWidget = this.widgetRef.get();
|
|
|
|
if (constraintWidget != null) {
|
|
|
|
constraintWidget.setFinalFrame(this.left, this.top, this.right, this.bottom, this.baseline, this.orientation);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public WidgetGroup(int i) {
|
|
|
|
int i2 = count;
|
|
|
|
count = i2 + 1;
|
|
|
|
this.f23id = i2;
|
|
|
|
this.orientation = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
private boolean contains(ConstraintWidget constraintWidget) {
|
|
|
|
return this.widgets.contains(constraintWidget);
|
|
|
|
}
|
|
|
|
|
|
|
|
private String getOrientationString() {
|
|
|
|
int i = this.orientation;
|
|
|
|
return i == 0 ? "Horizontal" : i == 1 ? "Vertical" : i == 2 ? "Both" : "Unknown";
|
|
|
|
}
|
|
|
|
|
|
|
|
private int measureWrap(int i, ConstraintWidget constraintWidget) {
|
|
|
|
ConstraintWidget.DimensionBehaviour dimensionBehaviour = constraintWidget.getDimensionBehaviour(i);
|
|
|
|
if (dimensionBehaviour == ConstraintWidget.DimensionBehaviour.WRAP_CONTENT || dimensionBehaviour == ConstraintWidget.DimensionBehaviour.MATCH_PARENT || dimensionBehaviour == ConstraintWidget.DimensionBehaviour.FIXED) {
|
|
|
|
return i == 0 ? constraintWidget.getWidth() : constraintWidget.getHeight();
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
private int solverMeasure(LinearSystem linearSystem, ArrayList<ConstraintWidget> arrayList, int i) {
|
|
|
|
int objectVariableValue;
|
|
|
|
int objectVariableValue2;
|
|
|
|
ConstraintWidgetContainer constraintWidgetContainer = (ConstraintWidgetContainer) arrayList.get(0).getParent();
|
|
|
|
linearSystem.reset();
|
|
|
|
constraintWidgetContainer.addToSolver(linearSystem, false);
|
|
|
|
for (int i2 = 0; i2 < arrayList.size(); i2++) {
|
|
|
|
arrayList.get(i2).addToSolver(linearSystem, false);
|
|
|
|
}
|
|
|
|
if (i == 0 && constraintWidgetContainer.mHorizontalChainsSize > 0) {
|
|
|
|
Chain.applyChainConstraints(constraintWidgetContainer, linearSystem, arrayList, 0);
|
|
|
|
}
|
|
|
|
if (i == 1 && constraintWidgetContainer.mVerticalChainsSize > 0) {
|
|
|
|
Chain.applyChainConstraints(constraintWidgetContainer, linearSystem, arrayList, 1);
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
linearSystem.minimize();
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
this.results = new ArrayList<>();
|
|
|
|
for (int i3 = 0; i3 < arrayList.size(); i3++) {
|
|
|
|
this.results.add(new MeasureResult(arrayList.get(i3), linearSystem, i));
|
|
|
|
}
|
|
|
|
if (i == 0) {
|
|
|
|
objectVariableValue = linearSystem.getObjectVariableValue(constraintWidgetContainer.mLeft);
|
|
|
|
objectVariableValue2 = linearSystem.getObjectVariableValue(constraintWidgetContainer.mRight);
|
|
|
|
linearSystem.reset();
|
|
|
|
} else {
|
|
|
|
objectVariableValue = linearSystem.getObjectVariableValue(constraintWidgetContainer.mTop);
|
|
|
|
objectVariableValue2 = linearSystem.getObjectVariableValue(constraintWidgetContainer.mBottom);
|
|
|
|
linearSystem.reset();
|
|
|
|
}
|
|
|
|
return objectVariableValue2 - objectVariableValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean add(ConstraintWidget constraintWidget) {
|
|
|
|
if (this.widgets.contains(constraintWidget)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
this.widgets.add(constraintWidget);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void apply() {
|
|
|
|
if (this.results != null && this.authoritative) {
|
|
|
|
for (int i = 0; i < this.results.size(); i++) {
|
|
|
|
this.results.get(i).apply();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void cleanup(ArrayList<WidgetGroup> arrayList) {
|
|
|
|
int size = this.widgets.size();
|
|
|
|
if (this.moveTo != -1 && size > 0) {
|
|
|
|
for (int i = 0; i < arrayList.size(); i++) {
|
|
|
|
WidgetGroup widgetGroup = arrayList.get(i);
|
|
|
|
if (this.moveTo == widgetGroup.f23id) {
|
|
|
|
moveTo(this.orientation, widgetGroup);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (size == 0) {
|
|
|
|
arrayList.remove(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void clear() {
|
|
|
|
this.widgets.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getId() {
|
|
|
|
return this.f23id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getOrientation() {
|
|
|
|
return this.orientation;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean intersectWith(WidgetGroup widgetGroup) {
|
|
|
|
for (int i = 0; i < this.widgets.size(); i++) {
|
|
|
|
if (widgetGroup.contains(this.widgets.get(i))) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isAuthoritative() {
|
|
|
|
return this.authoritative;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int measureWrap(LinearSystem linearSystem, int i) {
|
|
|
|
if (this.widgets.size() == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return solverMeasure(linearSystem, this.widgets, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void moveTo(int i, WidgetGroup widgetGroup) {
|
|
|
|
Iterator<ConstraintWidget> it = this.widgets.iterator();
|
|
|
|
while (it.hasNext()) {
|
|
|
|
ConstraintWidget next = it.next();
|
|
|
|
widgetGroup.add(next);
|
|
|
|
if (i == 0) {
|
|
|
|
next.horizontalGroup = widgetGroup.getId();
|
|
|
|
} else {
|
|
|
|
next.verticalGroup = widgetGroup.getId();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.moveTo = widgetGroup.f23id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setAuthoritative(boolean z2) {
|
|
|
|
this.authoritative = z2;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setOrientation(int i) {
|
|
|
|
this.orientation = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int size() {
|
|
|
|
return this.widgets.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
public String toString() {
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.append(getOrientationString());
|
|
|
|
sb.append(" [");
|
2021-07-13 20:23:20 +00:00
|
|
|
String y2 = a.y(sb, this.f23id, "] <");
|
2021-06-27 20:44:35 +00:00
|
|
|
Iterator<ConstraintWidget> it = this.widgets.iterator();
|
|
|
|
while (it.hasNext()) {
|
2021-07-13 20:23:20 +00:00
|
|
|
StringBuilder P = a.P(y2, " ");
|
2021-06-27 20:44:35 +00:00
|
|
|
P.append(it.next().getDebugName());
|
2021-07-13 20:23:20 +00:00
|
|
|
y2 = P.toString();
|
2021-06-27 20:44:35 +00:00
|
|
|
}
|
2021-07-13 20:23:20 +00:00
|
|
|
return a.t(y2, " >");
|
2021-06-27 20:44:35 +00:00
|
|
|
}
|
|
|
|
}
|