discord-jadx/app/src/main/java/androidx/constraintlayout/solver/widgets/analyzer/RunGroup.java

185 lines
8.0 KiB
Java

package androidx.constraintlayout.solver.widgets.analyzer;
import androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer;
import b.d.b.a.a;
import java.util.ArrayList;
import java.util.Iterator;
public class RunGroup {
public static final int BASELINE = 2;
public static final int END = 1;
public static final int START = 0;
public static int index;
public int direction;
public boolean dual = false;
public WidgetRun firstRun = null;
public int groupIndex = 0;
public WidgetRun lastRun = null;
public int position = 0;
public ArrayList<WidgetRun> runs = new ArrayList<>();
public RunGroup(WidgetRun widgetRun, int i) {
int i2 = index;
this.groupIndex = i2;
index = i2 + 1;
this.firstRun = widgetRun;
this.lastRun = widgetRun;
this.direction = i;
}
private boolean defineTerminalWidget(WidgetRun widgetRun, int i) {
DependencyNode dependencyNode;
WidgetRun widgetRun2;
DependencyNode dependencyNode2;
WidgetRun widgetRun3;
if (!widgetRun.widget.isTerminalWidget[i]) {
return false;
}
for (Dependency dependency : widgetRun.start.dependencies) {
if ((dependency instanceof DependencyNode) && (widgetRun3 = (dependencyNode2 = (DependencyNode) dependency).run) != widgetRun && dependencyNode2 == widgetRun3.start) {
if (widgetRun instanceof ChainRun) {
Iterator<WidgetRun> it = ((ChainRun) widgetRun).widgets.iterator();
while (it.hasNext()) {
defineTerminalWidget(it.next(), i);
}
} else if (!(widgetRun instanceof HelperReferences)) {
widgetRun.widget.isTerminalWidget[i] = false;
}
defineTerminalWidget(dependencyNode2.run, i);
}
}
for (Dependency dependency2 : widgetRun.end.dependencies) {
if ((dependency2 instanceof DependencyNode) && (widgetRun2 = (dependencyNode = (DependencyNode) dependency2).run) != widgetRun && dependencyNode == widgetRun2.start) {
if (widgetRun instanceof ChainRun) {
Iterator<WidgetRun> it2 = ((ChainRun) widgetRun).widgets.iterator();
while (it2.hasNext()) {
defineTerminalWidget(it2.next(), i);
}
} else if (!(widgetRun instanceof HelperReferences)) {
widgetRun.widget.isTerminalWidget[i] = false;
}
defineTerminalWidget(dependencyNode.run, i);
}
}
return false;
}
private long traverseEnd(DependencyNode dependencyNode, long j) {
WidgetRun widgetRun = dependencyNode.run;
if (widgetRun instanceof HelperReferences) {
return j;
}
int size = dependencyNode.dependencies.size();
long j2 = j;
for (int i = 0; i < size; i++) {
Dependency dependency = dependencyNode.dependencies.get(i);
if (dependency instanceof DependencyNode) {
DependencyNode dependencyNode2 = (DependencyNode) dependency;
if (dependencyNode2.run != widgetRun) {
j2 = Math.min(j2, traverseEnd(dependencyNode2, ((long) dependencyNode2.margin) + j));
}
}
}
if (dependencyNode != widgetRun.end) {
return j2;
}
long wrapDimension = j - widgetRun.getWrapDimension();
return Math.min(Math.min(j2, traverseEnd(widgetRun.start, wrapDimension)), wrapDimension - ((long) widgetRun.start.margin));
}
private long traverseStart(DependencyNode dependencyNode, long j) {
WidgetRun widgetRun = dependencyNode.run;
if (widgetRun instanceof HelperReferences) {
return j;
}
int size = dependencyNode.dependencies.size();
long j2 = j;
for (int i = 0; i < size; i++) {
Dependency dependency = dependencyNode.dependencies.get(i);
if (dependency instanceof DependencyNode) {
DependencyNode dependencyNode2 = (DependencyNode) dependency;
if (dependencyNode2.run != widgetRun) {
j2 = Math.max(j2, traverseStart(dependencyNode2, ((long) dependencyNode2.margin) + j));
}
}
}
if (dependencyNode != widgetRun.start) {
return j2;
}
long wrapDimension = j + widgetRun.getWrapDimension();
return Math.max(Math.max(j2, traverseStart(widgetRun.end, wrapDimension)), wrapDimension - ((long) widgetRun.end.margin));
}
public void add(WidgetRun widgetRun) {
this.runs.add(widgetRun);
this.lastRun = widgetRun;
}
public long computeWrapSize(ConstraintWidgetContainer constraintWidgetContainer, int i) {
WidgetRun widgetRun = this.firstRun;
long j = 0;
if (widgetRun instanceof ChainRun) {
if (((ChainRun) widgetRun).orientation != i) {
return 0;
}
} else if (i == 0) {
if (!(widgetRun instanceof HorizontalWidgetRun)) {
return 0;
}
} else if (!(widgetRun instanceof VerticalWidgetRun)) {
return 0;
}
DependencyNode dependencyNode = (i == 0 ? constraintWidgetContainer.horizontalRun : constraintWidgetContainer.verticalRun).start;
DependencyNode dependencyNode2 = (i == 0 ? constraintWidgetContainer.horizontalRun : constraintWidgetContainer.verticalRun).end;
boolean contains = widgetRun.start.targets.contains(dependencyNode);
boolean contains2 = this.firstRun.end.targets.contains(dependencyNode2);
long wrapDimension = this.firstRun.getWrapDimension();
if (contains && contains2) {
long traverseStart = traverseStart(this.firstRun.start, 0);
long traverseEnd = traverseEnd(this.firstRun.end, 0);
long j2 = traverseStart - wrapDimension;
WidgetRun widgetRun2 = this.firstRun;
int i2 = widgetRun2.end.margin;
if (j2 >= ((long) (-i2))) {
j2 += (long) i2;
}
int i3 = widgetRun2.start.margin;
long j3 = ((-traverseEnd) - wrapDimension) - ((long) i3);
if (j3 >= ((long) i3)) {
j3 -= (long) i3;
}
float biasPercent = widgetRun2.widget.getBiasPercent(i);
if (biasPercent > 0.0f) {
j = (long) ((((float) j2) / (1.0f - biasPercent)) + (((float) j3) / biasPercent));
}
float f = (float) j;
long a = ((long) ((f * biasPercent) + 0.5f)) + wrapDimension + ((long) a.a(1.0f, biasPercent, f, 0.5f));
WidgetRun widgetRun3 = this.firstRun;
return (((long) widgetRun3.start.margin) + a) - ((long) widgetRun3.end.margin);
} else if (contains) {
DependencyNode dependencyNode3 = this.firstRun.start;
return Math.max(traverseStart(dependencyNode3, (long) dependencyNode3.margin), ((long) this.firstRun.start.margin) + wrapDimension);
} else if (contains2) {
DependencyNode dependencyNode4 = this.firstRun.end;
return Math.max(-traverseEnd(dependencyNode4, (long) dependencyNode4.margin), ((long) (-this.firstRun.end.margin)) + wrapDimension);
} else {
WidgetRun widgetRun4 = this.firstRun;
return (widgetRun4.getWrapDimension() + ((long) widgetRun4.start.margin)) - ((long) this.firstRun.end.margin);
}
}
public void defineTerminalWidgets(boolean z2, boolean z3) {
if (z2) {
WidgetRun widgetRun = this.firstRun;
if (widgetRun instanceof HorizontalWidgetRun) {
defineTerminalWidget(widgetRun, 0);
}
}
if (z3) {
WidgetRun widgetRun2 = this.firstRun;
if (widgetRun2 instanceof VerticalWidgetRun) {
defineTerminalWidget(widgetRun2, 1);
}
}
}
}