package androidx.constraintlayout.solver.widgets.analyzer; import androidx.constraintlayout.solver.LinearSystem; import androidx.constraintlayout.solver.Metrics; import androidx.constraintlayout.solver.widgets.Barrier; import androidx.constraintlayout.solver.widgets.ConstraintAnchor; import androidx.constraintlayout.solver.widgets.ConstraintWidget; import androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer; import androidx.constraintlayout.solver.widgets.Guideline; import androidx.constraintlayout.solver.widgets.Helper; import androidx.constraintlayout.solver.widgets.Optimizer; import androidx.constraintlayout.solver.widgets.VirtualLayout; import java.util.ArrayList; public class BasicMeasure { public static final int AT_MOST = Integer.MIN_VALUE; private static final boolean DEBUG = false; public static final int EXACTLY = 1073741824; public static final int FIXED = -3; public static final int MATCH_PARENT = -1; private static final int MODE_SHIFT = 30; public static final int UNSPECIFIED = 0; public static final int WRAP_CONTENT = -2; private ConstraintWidgetContainer constraintWidgetContainer; private Measure mMeasure = new Measure(); private final ArrayList mVariableDimensionsWidgets = new ArrayList<>(); public static class Measure { public static int SELF_DIMENSIONS = 0; public static int TRY_GIVEN_DIMENSIONS = 1; public static int USE_GIVEN_DIMENSIONS = 2; public ConstraintWidget.DimensionBehaviour horizontalBehavior; public int horizontalDimension; public int measureStrategy; public int measuredBaseline; public boolean measuredHasBaseline; public int measuredHeight; public boolean measuredNeedsSolverPass; public int measuredWidth; public ConstraintWidget.DimensionBehaviour verticalBehavior; public int verticalDimension; } public interface Measurer { void didMeasures(); void measure(ConstraintWidget constraintWidget, Measure measure); } public BasicMeasure(ConstraintWidgetContainer constraintWidgetContainer) { this.constraintWidgetContainer = constraintWidgetContainer; } private boolean measure(Measurer measurer, ConstraintWidget constraintWidget, int i) { this.mMeasure.horizontalBehavior = constraintWidget.getHorizontalDimensionBehaviour(); this.mMeasure.verticalBehavior = constraintWidget.getVerticalDimensionBehaviour(); this.mMeasure.horizontalDimension = constraintWidget.getWidth(); this.mMeasure.verticalDimension = constraintWidget.getHeight(); Measure measure = this.mMeasure; measure.measuredNeedsSolverPass = false; measure.measureStrategy = i; ConstraintWidget.DimensionBehaviour dimensionBehaviour = measure.horizontalBehavior; ConstraintWidget.DimensionBehaviour dimensionBehaviour2 = ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT; boolean z2 = dimensionBehaviour == dimensionBehaviour2; boolean z3 = measure.verticalBehavior == dimensionBehaviour2; boolean z4 = z2 && constraintWidget.mDimensionRatio > 0.0f; boolean z5 = z3 && constraintWidget.mDimensionRatio > 0.0f; if (z4 && constraintWidget.mResolvedMatchConstraintDefault[0] == 4) { measure.horizontalBehavior = ConstraintWidget.DimensionBehaviour.FIXED; } if (z5 && constraintWidget.mResolvedMatchConstraintDefault[1] == 4) { measure.verticalBehavior = ConstraintWidget.DimensionBehaviour.FIXED; } measurer.measure(constraintWidget, measure); constraintWidget.setWidth(this.mMeasure.measuredWidth); constraintWidget.setHeight(this.mMeasure.measuredHeight); constraintWidget.setHasBaseline(this.mMeasure.measuredHasBaseline); constraintWidget.setBaselineDistance(this.mMeasure.measuredBaseline); Measure measure2 = this.mMeasure; measure2.measureStrategy = Measure.SELF_DIMENSIONS; return measure2.measuredNeedsSolverPass; } /* JADX WARNING: Code restructure failed: missing block: B:46:0x008e, code lost: if (r8 != r9) goto L_0x0098; */ /* JADX WARNING: Code restructure failed: missing block: B:48:0x0095, code lost: if (r5.mDimensionRatio <= 0.0f) goto L_0x0098; */ private void measureChildren(ConstraintWidgetContainer constraintWidgetContainer) { HorizontalWidgetRun horizontalWidgetRun; VerticalWidgetRun verticalWidgetRun; int size = constraintWidgetContainer.mChildren.size(); boolean optimizeFor = constraintWidgetContainer.optimizeFor(64); Measurer measurer = constraintWidgetContainer.getMeasurer(); for (int i = 0; i < size; i++) { ConstraintWidget constraintWidget = constraintWidgetContainer.mChildren.get(i); if (!(constraintWidget instanceof Guideline) && !(constraintWidget instanceof Barrier) && !constraintWidget.isInVirtualLayout() && (!optimizeFor || (horizontalWidgetRun = constraintWidget.horizontalRun) == null || (verticalWidgetRun = constraintWidget.verticalRun) == null || !horizontalWidgetRun.dimension.resolved || !verticalWidgetRun.dimension.resolved)) { ConstraintWidget.DimensionBehaviour dimensionBehaviour = constraintWidget.getDimensionBehaviour(0); boolean z2 = true; ConstraintWidget.DimensionBehaviour dimensionBehaviour2 = constraintWidget.getDimensionBehaviour(1); ConstraintWidget.DimensionBehaviour dimensionBehaviour3 = ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT; boolean z3 = dimensionBehaviour == dimensionBehaviour3 && constraintWidget.mMatchConstraintDefaultWidth != 1 && dimensionBehaviour2 == dimensionBehaviour3 && constraintWidget.mMatchConstraintDefaultHeight != 1; if (!z3 && constraintWidgetContainer.optimizeFor(1) && !(constraintWidget instanceof VirtualLayout)) { if (dimensionBehaviour == dimensionBehaviour3 && constraintWidget.mMatchConstraintDefaultWidth == 0 && dimensionBehaviour2 != dimensionBehaviour3 && !constraintWidget.isInHorizontalChain()) { z3 = true; } if (dimensionBehaviour2 == dimensionBehaviour3 && constraintWidget.mMatchConstraintDefaultHeight == 0 && dimensionBehaviour != dimensionBehaviour3 && !constraintWidget.isInHorizontalChain()) { z3 = true; } if (dimensionBehaviour != dimensionBehaviour3) { } } z2 = z3; if (!z2) { measure(measurer, constraintWidget, Measure.SELF_DIMENSIONS); Metrics metrics = constraintWidgetContainer.mMetrics; if (metrics != null) { metrics.measuredWidgets++; } } } } measurer.didMeasures(); } private void solveLinearSystem(ConstraintWidgetContainer constraintWidgetContainer, String str, int i, int i2) { int minWidth = constraintWidgetContainer.getMinWidth(); int minHeight = constraintWidgetContainer.getMinHeight(); constraintWidgetContainer.setMinWidth(0); constraintWidgetContainer.setMinHeight(0); constraintWidgetContainer.setWidth(i); constraintWidgetContainer.setHeight(i2); constraintWidgetContainer.setMinWidth(minWidth); constraintWidgetContainer.setMinHeight(minHeight); this.constraintWidgetContainer.layout(); } public long solverMeasure(ConstraintWidgetContainer constraintWidgetContainer, int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9) { int i10; boolean z2; int i11; boolean z3; boolean z4; int i12; boolean z5; Measurer measurer; int i13; int i14; int i15; boolean z6; Metrics metrics; Measurer measurer2 = constraintWidgetContainer.getMeasurer(); int size = constraintWidgetContainer.mChildren.size(); int width = constraintWidgetContainer.getWidth(); int height = constraintWidgetContainer.getHeight(); boolean enabled = Optimizer.enabled(i, 128); boolean z7 = enabled || Optimizer.enabled(i, 64); if (z7) { int i16 = 0; while (true) { if (i16 >= size) { break; } ConstraintWidget constraintWidget = constraintWidgetContainer.mChildren.get(i16); ConstraintWidget.DimensionBehaviour horizontalDimensionBehaviour = constraintWidget.getHorizontalDimensionBehaviour(); ConstraintWidget.DimensionBehaviour dimensionBehaviour = ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT; boolean z8 = (horizontalDimensionBehaviour == dimensionBehaviour) && (constraintWidget.getVerticalDimensionBehaviour() == dimensionBehaviour) && constraintWidget.getDimensionRatio() > 0.0f; if ((!constraintWidget.isInHorizontalChain() || !z8) && ((!constraintWidget.isInVerticalChain() || !z8) && !(constraintWidget instanceof VirtualLayout) && !constraintWidget.isInHorizontalChain() && !constraintWidget.isInVerticalChain())) { i16++; } } z7 = false; } if (z7 && (metrics = LinearSystem.sMetrics) != null) { metrics.measures++; } boolean z9 = z7 & ((i4 == 1073741824 && i6 == 1073741824) || enabled); if (z9) { int min = Math.min(constraintWidgetContainer.getMaxWidth(), i5); int min2 = Math.min(constraintWidgetContainer.getMaxHeight(), i7); if (i4 == 1073741824 && constraintWidgetContainer.getWidth() != min) { constraintWidgetContainer.setWidth(min); constraintWidgetContainer.invalidateGraph(); } if (i6 == 1073741824 && constraintWidgetContainer.getHeight() != min2) { constraintWidgetContainer.setHeight(min2); constraintWidgetContainer.invalidateGraph(); } if (i4 == 1073741824 && i6 == 1073741824) { z2 = constraintWidgetContainer.directMeasure(enabled); i10 = 2; } else { boolean directMeasureSetup = constraintWidgetContainer.directMeasureSetup(enabled); if (i4 == 1073741824) { directMeasureSetup &= constraintWidgetContainer.directMeasureWithOrientation(enabled, 0); i10 = 1; } else { i10 = 0; } if (i6 == 1073741824) { z2 = constraintWidgetContainer.directMeasureWithOrientation(enabled, 1) & directMeasureSetup; i10++; } else { z2 = directMeasureSetup; } } if (z2) { constraintWidgetContainer.updateFromRuns(i4 == 1073741824, i6 == 1073741824); } } else { z2 = false; i10 = 0; } if (z2 && i10 == 2) { return 0; } int optimizationLevel = constraintWidgetContainer.getOptimizationLevel(); if (size > 0) { measureChildren(constraintWidgetContainer); } updateHierarchy(constraintWidgetContainer); int size2 = this.mVariableDimensionsWidgets.size(); if (size > 0) { solveLinearSystem(constraintWidgetContainer, "First pass", width, height); } if (size2 > 0) { ConstraintWidget.DimensionBehaviour horizontalDimensionBehaviour2 = constraintWidgetContainer.getHorizontalDimensionBehaviour(); ConstraintWidget.DimensionBehaviour dimensionBehaviour2 = ConstraintWidget.DimensionBehaviour.WRAP_CONTENT; boolean z10 = horizontalDimensionBehaviour2 == dimensionBehaviour2; boolean z11 = constraintWidgetContainer.getVerticalDimensionBehaviour() == dimensionBehaviour2; int max = Math.max(constraintWidgetContainer.getWidth(), this.constraintWidgetContainer.getMinWidth()); int max2 = Math.max(constraintWidgetContainer.getHeight(), this.constraintWidgetContainer.getMinHeight()); int i17 = 0; boolean z12 = false; while (i17 < size2) { ConstraintWidget constraintWidget2 = this.mVariableDimensionsWidgets.get(i17); if (!(constraintWidget2 instanceof VirtualLayout)) { i13 = optimizationLevel; i15 = width; i14 = height; } else { int width2 = constraintWidget2.getWidth(); i13 = optimizationLevel; int height2 = constraintWidget2.getHeight(); i15 = width; boolean measure = measure(measurer2, constraintWidget2, Measure.TRY_GIVEN_DIMENSIONS) | z12; Metrics metrics2 = constraintWidgetContainer.mMetrics; i14 = height; if (metrics2 != null) { metrics2.measuredMatchWidgets++; } int width3 = constraintWidget2.getWidth(); int height3 = constraintWidget2.getHeight(); if (width3 != width2) { constraintWidget2.setWidth(width3); if (z10 && constraintWidget2.getRight() > max) { max = Math.max(max, constraintWidget2.getAnchor(ConstraintAnchor.Type.RIGHT).getMargin() + constraintWidget2.getRight()); } z6 = true; } else { z6 = measure; } if (height3 != height2) { constraintWidget2.setHeight(height3); if (z11 && constraintWidget2.getBottom() > max2) { max2 = Math.max(max2, constraintWidget2.getAnchor(ConstraintAnchor.Type.BOTTOM).getMargin() + constraintWidget2.getBottom()); } z6 = true; } z12 = z6 | ((VirtualLayout) constraintWidget2).needSolverPass(); } i17++; optimizationLevel = i13; width = i15; height = i14; } int i18 = 0; int i19 = 2; while (i18 < i19) { int i20 = 0; while (i20 < size2) { ConstraintWidget constraintWidget3 = this.mVariableDimensionsWidgets.get(i20); if ((!(constraintWidget3 instanceof Helper) || (constraintWidget3 instanceof VirtualLayout)) && !(constraintWidget3 instanceof Guideline) && constraintWidget3.getVisibility() != 8 && ((!z9 || !constraintWidget3.horizontalRun.dimension.resolved || !constraintWidget3.verticalRun.dimension.resolved) && !(constraintWidget3 instanceof VirtualLayout))) { int width4 = constraintWidget3.getWidth(); int height4 = constraintWidget3.getHeight(); int baselineDistance = constraintWidget3.getBaselineDistance(); int i21 = Measure.TRY_GIVEN_DIMENSIONS; z5 = z9; if (i18 == 1) { i21 = Measure.USE_GIVEN_DIMENSIONS; } boolean measure2 = measure(measurer2, constraintWidget3, i21) | z12; Metrics metrics3 = constraintWidgetContainer.mMetrics; i12 = size2; measurer = measurer2; if (metrics3 != null) { metrics3.measuredMatchWidgets++; } int width5 = constraintWidget3.getWidth(); int height5 = constraintWidget3.getHeight(); if (width5 != width4) { constraintWidget3.setWidth(width5); if (z10 && constraintWidget3.getRight() > max) { max = Math.max(max, constraintWidget3.getAnchor(ConstraintAnchor.Type.RIGHT).getMargin() + constraintWidget3.getRight()); } measure2 = true; } if (height5 != height4) { constraintWidget3.setHeight(height5); if (z11 && constraintWidget3.getBottom() > max2) { max2 = Math.max(max2, constraintWidget3.getAnchor(ConstraintAnchor.Type.BOTTOM).getMargin() + constraintWidget3.getBottom()); } measure2 = true; } z12 = (!constraintWidget3.hasBaseline() || baselineDistance == constraintWidget3.getBaselineDistance()) ? measure2 : true; } else { z5 = z9; i12 = size2; measurer = measurer2; } i20++; size2 = i12; measurer2 = measurer; z9 = z5; } if (!z12) { break; } solveLinearSystem(constraintWidgetContainer, "intermediate pass", width, height); i18++; measurer2 = measurer2; z9 = z9; i19 = 2; z12 = false; size2 = size2; } if (z12) { solveLinearSystem(constraintWidgetContainer, "2nd pass", width, height); if (constraintWidgetContainer.getWidth() < max) { constraintWidgetContainer.setWidth(max); z3 = true; } else { z3 = false; } if (constraintWidgetContainer.getHeight() < max2) { constraintWidgetContainer.setHeight(max2); z4 = true; } else { z4 = z3; } if (z4) { solveLinearSystem(constraintWidgetContainer, "3rd pass", width, height); } } i11 = optimizationLevel; } else { i11 = optimizationLevel; } constraintWidgetContainer.setOptimizationLevel(i11); return 0; } public void updateHierarchy(ConstraintWidgetContainer constraintWidgetContainer) { this.mVariableDimensionsWidgets.clear(); int size = constraintWidgetContainer.mChildren.size(); for (int i = 0; i < size; i++) { ConstraintWidget constraintWidget = constraintWidgetContainer.mChildren.get(i); ConstraintWidget.DimensionBehaviour horizontalDimensionBehaviour = constraintWidget.getHorizontalDimensionBehaviour(); ConstraintWidget.DimensionBehaviour dimensionBehaviour = ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT; if (horizontalDimensionBehaviour == dimensionBehaviour || constraintWidget.getVerticalDimensionBehaviour() == dimensionBehaviour) { this.mVariableDimensionsWidgets.add(constraintWidget); } } constraintWidgetContainer.invalidateGraph(); } }