4784 lines
		
	
	
		
			225 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			4784 lines
		
	
	
		
			225 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.constraintlayout.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.content.res.XmlResourceParser;
 | |
| import android.graphics.Color;
 | |
| import android.util.AttributeSet;
 | |
| import android.util.Log;
 | |
| import android.util.SparseArray;
 | |
| import android.util.SparseIntArray;
 | |
| import android.util.TypedValue;
 | |
| import android.util.Xml;
 | |
| import android.view.LayoutInflater;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import androidx.constraintlayout.core.motion.utils.Easing;
 | |
| import androidx.constraintlayout.core.motion.utils.TypedValues;
 | |
| import androidx.constraintlayout.core.widgets.ConstraintWidget;
 | |
| import androidx.constraintlayout.core.widgets.HelperWidget;
 | |
| import androidx.constraintlayout.motion.widget.Debug;
 | |
| import androidx.constraintlayout.motion.widget.MotionLayout;
 | |
| import androidx.constraintlayout.motion.widget.MotionScene;
 | |
| import androidx.constraintlayout.widget.ConstraintAttribute;
 | |
| import androidx.constraintlayout.widget.ConstraintLayout;
 | |
| import androidx.constraintlayout.widget.Constraints;
 | |
| import androidx.constraintlayout.widget.R;
 | |
| import androidx.core.os.EnvironmentCompat;
 | |
| import java.io.IOException;
 | |
| import java.io.Writer;
 | |
| import java.lang.reflect.Field;
 | |
| import java.lang.reflect.Modifier;
 | |
| import java.util.ArrayList;
 | |
| import java.util.Arrays;
 | |
| import java.util.HashMap;
 | |
| import java.util.HashSet;
 | |
| import java.util.Iterator;
 | |
| import java.util.Set;
 | |
| import org.xmlpull.v1.XmlPullParser;
 | |
| import org.xmlpull.v1.XmlPullParserException;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class ConstraintSet {
 | |
|     private static final int ALPHA = 43;
 | |
|     private static final int ANIMATE_CIRCLE_ANGLE_TO = 82;
 | |
|     private static final int ANIMATE_RELATIVE_TO = 64;
 | |
|     private static final int BARRIER_ALLOWS_GONE_WIDGETS = 75;
 | |
|     private static final int BARRIER_DIRECTION = 72;
 | |
|     private static final int BARRIER_MARGIN = 73;
 | |
|     private static final int BARRIER_TYPE = 1;
 | |
|     public static final int BASELINE = 5;
 | |
|     private static final int BASELINE_MARGIN = 93;
 | |
|     private static final int BASELINE_TO_BASELINE = 1;
 | |
|     private static final int BASELINE_TO_BOTTOM = 92;
 | |
|     private static final int BASELINE_TO_TOP = 91;
 | |
|     public static final int BOTTOM = 4;
 | |
|     private static final int BOTTOM_MARGIN = 2;
 | |
|     private static final int BOTTOM_TO_BOTTOM = 3;
 | |
|     private static final int BOTTOM_TO_TOP = 4;
 | |
|     public static final int CHAIN_PACKED = 2;
 | |
|     public static final int CHAIN_SPREAD = 0;
 | |
|     public static final int CHAIN_SPREAD_INSIDE = 1;
 | |
|     private static final int CHAIN_USE_RTL = 71;
 | |
|     private static final int CIRCLE = 61;
 | |
|     private static final int CIRCLE_ANGLE = 63;
 | |
|     private static final int CIRCLE_RADIUS = 62;
 | |
|     public static final int CIRCLE_REFERENCE = 8;
 | |
|     private static final int CONSTRAINED_HEIGHT = 81;
 | |
|     private static final int CONSTRAINED_WIDTH = 80;
 | |
|     private static final int CONSTRAINT_REFERENCED_IDS = 74;
 | |
|     private static final int CONSTRAINT_TAG = 77;
 | |
|     private static final boolean DEBUG = false;
 | |
|     private static final int DIMENSION_RATIO = 5;
 | |
|     private static final int DRAW_PATH = 66;
 | |
|     private static final int EDITOR_ABSOLUTE_X = 6;
 | |
|     private static final int EDITOR_ABSOLUTE_Y = 7;
 | |
|     private static final int ELEVATION = 44;
 | |
|     public static final int END = 7;
 | |
|     private static final int END_MARGIN = 8;
 | |
|     private static final int END_TO_END = 9;
 | |
|     private static final int END_TO_START = 10;
 | |
|     private static final String ERROR_MESSAGE = "XML parser error must be within a Constraint ";
 | |
|     public static final int GONE = 8;
 | |
|     private static final int GONE_BASELINE_MARGIN = 94;
 | |
|     private static final int GONE_BOTTOM_MARGIN = 11;
 | |
|     private static final int GONE_END_MARGIN = 12;
 | |
|     private static final int GONE_LEFT_MARGIN = 13;
 | |
|     private static final int GONE_RIGHT_MARGIN = 14;
 | |
|     private static final int GONE_START_MARGIN = 15;
 | |
|     private static final int GONE_TOP_MARGIN = 16;
 | |
|     private static final int GUIDELINE_USE_RTL = 99;
 | |
|     private static final int GUIDE_BEGIN = 17;
 | |
|     private static final int GUIDE_END = 18;
 | |
|     private static final int GUIDE_PERCENT = 19;
 | |
|     private static final int HEIGHT_DEFAULT = 55;
 | |
|     private static final int HEIGHT_MAX = 57;
 | |
|     private static final int HEIGHT_MIN = 59;
 | |
|     private static final int HEIGHT_PERCENT = 70;
 | |
|     public static final int HORIZONTAL = 0;
 | |
|     private static final int HORIZONTAL_BIAS = 20;
 | |
|     public static final int HORIZONTAL_GUIDELINE = 0;
 | |
|     private static final int HORIZONTAL_STYLE = 41;
 | |
|     private static final int HORIZONTAL_WEIGHT = 39;
 | |
|     private static final int INTERNAL_MATCH_CONSTRAINT = -3;
 | |
|     private static final int INTERNAL_MATCH_PARENT = -1;
 | |
|     private static final int INTERNAL_WRAP_CONTENT = -2;
 | |
|     private static final int INTERNAL_WRAP_CONTENT_CONSTRAINED = -4;
 | |
|     public static final int INVISIBLE = 4;
 | |
|     private static final String KEY_PERCENT_PARENT = "parent";
 | |
|     private static final String KEY_RATIO = "ratio";
 | |
|     private static final String KEY_WEIGHT = "weight";
 | |
|     private static final int LAYOUT_CONSTRAINT_HEIGHT = 96;
 | |
|     private static final int LAYOUT_CONSTRAINT_WIDTH = 95;
 | |
|     private static final int LAYOUT_HEIGHT = 21;
 | |
|     private static final int LAYOUT_VISIBILITY = 22;
 | |
|     private static final int LAYOUT_WIDTH = 23;
 | |
|     private static final int LAYOUT_WRAP_BEHAVIOR = 97;
 | |
|     public static final int LEFT = 1;
 | |
|     private static final int LEFT_MARGIN = 24;
 | |
|     private static final int LEFT_TO_LEFT = 25;
 | |
|     private static final int LEFT_TO_RIGHT = 26;
 | |
|     public static final int MATCH_CONSTRAINT = 0;
 | |
|     public static final int MATCH_CONSTRAINT_PERCENT = 2;
 | |
|     public static final int MATCH_CONSTRAINT_SPREAD = 0;
 | |
|     public static final int MATCH_CONSTRAINT_WRAP = 1;
 | |
|     private static final int MOTION_STAGGER = 79;
 | |
|     private static final int MOTION_TARGET = 98;
 | |
|     private static final int ORIENTATION = 27;
 | |
|     public static final int PARENT_ID = 0;
 | |
|     private static final int PATH_MOTION_ARC = 76;
 | |
|     private static final int PROGRESS = 68;
 | |
|     private static final int QUANTIZE_MOTION_INTERPOLATOR = 86;
 | |
|     private static final int QUANTIZE_MOTION_INTERPOLATOR_ID = 89;
 | |
|     private static final int QUANTIZE_MOTION_INTERPOLATOR_STR = 90;
 | |
|     private static final int QUANTIZE_MOTION_INTERPOLATOR_TYPE = 88;
 | |
|     private static final int QUANTIZE_MOTION_PHASE = 85;
 | |
|     private static final int QUANTIZE_MOTION_STEPS = 84;
 | |
|     public static final int RIGHT = 2;
 | |
|     private static final int RIGHT_MARGIN = 28;
 | |
|     private static final int RIGHT_TO_LEFT = 29;
 | |
|     private static final int RIGHT_TO_RIGHT = 30;
 | |
|     public static final int ROTATE_LEFT_OF_PORTRATE = 4;
 | |
|     public static final int ROTATE_NONE = 0;
 | |
|     public static final int ROTATE_PORTRATE_OF_LEFT = 2;
 | |
|     public static final int ROTATE_PORTRATE_OF_RIGHT = 1;
 | |
|     public static final int ROTATE_RIGHT_OF_PORTRATE = 3;
 | |
|     private static final int ROTATION = 60;
 | |
|     private static final int ROTATION_X = 45;
 | |
|     private static final int ROTATION_Y = 46;
 | |
|     private static final int SCALE_X = 47;
 | |
|     private static final int SCALE_Y = 48;
 | |
|     public static final int START = 6;
 | |
|     private static final int START_MARGIN = 31;
 | |
|     private static final int START_TO_END = 32;
 | |
|     private static final int START_TO_START = 33;
 | |
|     private static final String TAG = "ConstraintSet";
 | |
|     public static final int TOP = 3;
 | |
|     private static final int TOP_MARGIN = 34;
 | |
|     private static final int TOP_TO_BOTTOM = 35;
 | |
|     private static final int TOP_TO_TOP = 36;
 | |
|     private static final int TRANSFORM_PIVOT_TARGET = 83;
 | |
|     private static final int TRANSFORM_PIVOT_X = 49;
 | |
|     private static final int TRANSFORM_PIVOT_Y = 50;
 | |
|     private static final int TRANSITION_EASING = 65;
 | |
|     private static final int TRANSITION_PATH_ROTATE = 67;
 | |
|     private static final int TRANSLATION_X = 51;
 | |
|     private static final int TRANSLATION_Y = 52;
 | |
|     private static final int TRANSLATION_Z = 53;
 | |
|     public static final int UNSET = -1;
 | |
|     private static final int UNUSED = 87;
 | |
|     public static final int VERTICAL = 1;
 | |
|     private static final int VERTICAL_BIAS = 37;
 | |
|     public static final int VERTICAL_GUIDELINE = 1;
 | |
|     private static final int VERTICAL_STYLE = 42;
 | |
|     private static final int VERTICAL_WEIGHT = 40;
 | |
|     private static final int VIEW_ID = 38;
 | |
|     private static final int VISIBILITY_MODE = 78;
 | |
|     public static final int VISIBILITY_MODE_IGNORE = 1;
 | |
|     public static final int VISIBILITY_MODE_NORMAL = 0;
 | |
|     public static final int VISIBLE = 0;
 | |
|     private static final int WIDTH_DEFAULT = 54;
 | |
|     private static final int WIDTH_MAX = 56;
 | |
|     private static final int WIDTH_MIN = 58;
 | |
|     private static final int WIDTH_PERCENT = 69;
 | |
|     public static final int WRAP_CONTENT = -2;
 | |
|     public String mIdString;
 | |
|     private boolean mValidate;
 | |
|     private static final int[] VISIBILITY_FLAGS = {0, 4, 8};
 | |
|     private static SparseIntArray mapToConstant = new SparseIntArray();
 | |
|     private static SparseIntArray overrideMapToConstant = new SparseIntArray();
 | |
|     public String derivedState = "";
 | |
|     public int mRotate = 0;
 | |
|     private HashMap<String, ConstraintAttribute> mSavedAttributes = new HashMap<>();
 | |
|     private boolean mForceId = true;
 | |
|     private HashMap<Integer, Constraint> mConstraints = new HashMap<>();
 | |
| 
 | |
|     private String sideToString(int side) {
 | |
|         switch (side) {
 | |
|             case 1:
 | |
|                 return "left";
 | |
|             case 2:
 | |
|                 return "right";
 | |
|             case 3:
 | |
|                 return "top";
 | |
|             case 4:
 | |
|                 return "bottom";
 | |
|             case 5:
 | |
|                 return "baseline";
 | |
|             case 6:
 | |
|                 return "start";
 | |
|             case 7:
 | |
|                 return "end";
 | |
|             default:
 | |
|                 return "undefined";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public HashMap<String, ConstraintAttribute> getCustomAttributeSet() {
 | |
|         return this.mSavedAttributes;
 | |
|     }
 | |
| 
 | |
|     public boolean isForceId() {
 | |
|         return this.mForceId;
 | |
|     }
 | |
| 
 | |
|     public void setForceId(boolean forceId) {
 | |
|         this.mForceId = forceId;
 | |
|     }
 | |
| 
 | |
|     public void setValidateOnParse(boolean validate) {
 | |
|         this.mValidate = validate;
 | |
|     }
 | |
| 
 | |
|     static {
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintLeft_toLeftOf, 25);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintLeft_toRightOf, 26);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintRight_toLeftOf, 29);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintRight_toRightOf, 30);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintTop_toTopOf, 36);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintTop_toBottomOf, 35);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBottom_toTopOf, 4);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBottom_toBottomOf, 3);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBaseline_toBaselineOf, 1);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBaseline_toTopOf, 91);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBaseline_toBottomOf, 92);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_editor_absoluteX, 6);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_editor_absoluteY, 7);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintGuide_begin, 17);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintGuide_end, 18);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintGuide_percent, 19);
 | |
|         mapToConstant.append(R.styleable.Constraint_guidelineUseRtl, 99);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_orientation, 27);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintStart_toEndOf, 32);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintStart_toStartOf, 33);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintEnd_toStartOf, 10);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintEnd_toEndOf, 9);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_goneMarginLeft, 13);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_goneMarginTop, 16);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_goneMarginRight, 14);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_goneMarginBottom, 11);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_goneMarginStart, 15);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_goneMarginEnd, 12);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintVertical_weight, 40);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHorizontal_weight, 39);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHorizontal_chainStyle, 41);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintVertical_chainStyle, 42);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHorizontal_bias, 20);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintVertical_bias, 37);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintDimensionRatio, 5);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintLeft_creator, 87);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintTop_creator, 87);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintRight_creator, 87);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBottom_creator, 87);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintBaseline_creator, 87);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_marginLeft, 24);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_marginRight, 28);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_marginStart, 31);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_marginEnd, 8);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_marginTop, 34);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_marginBottom, 2);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_width, 23);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_layout_height, 21);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintWidth, 95);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHeight, 96);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_visibility, 22);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_alpha, 43);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_elevation, 44);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_rotationX, 45);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_rotationY, 46);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_rotation, 60);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_scaleX, 47);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_scaleY, 48);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_transformPivotX, 49);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_transformPivotY, 50);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_translationX, 51);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_translationY, 52);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_translationZ, 53);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintWidth_default, 54);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHeight_default, 55);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintWidth_max, 56);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHeight_max, 57);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintWidth_min, 58);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHeight_min, 59);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintCircle, 61);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintCircleRadius, 62);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintCircleAngle, 63);
 | |
|         mapToConstant.append(R.styleable.Constraint_animateRelativeTo, 64);
 | |
|         mapToConstant.append(R.styleable.Constraint_transitionEasing, 65);
 | |
|         mapToConstant.append(R.styleable.Constraint_drawPath, 66);
 | |
|         mapToConstant.append(R.styleable.Constraint_transitionPathRotate, 67);
 | |
|         mapToConstant.append(R.styleable.Constraint_motionStagger, 79);
 | |
|         mapToConstant.append(R.styleable.Constraint_android_id, 38);
 | |
|         mapToConstant.append(R.styleable.Constraint_motionProgress, 68);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintWidth_percent, 69);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintHeight_percent, 70);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_wrapBehaviorInParent, 97);
 | |
|         mapToConstant.append(R.styleable.Constraint_chainUseRtl, 71);
 | |
|         mapToConstant.append(R.styleable.Constraint_barrierDirection, 72);
 | |
|         mapToConstant.append(R.styleable.Constraint_barrierMargin, 73);
 | |
|         mapToConstant.append(R.styleable.Constraint_constraint_referenced_ids, 74);
 | |
|         mapToConstant.append(R.styleable.Constraint_barrierAllowsGoneWidgets, 75);
 | |
|         mapToConstant.append(R.styleable.Constraint_pathMotionArc, 76);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constraintTag, 77);
 | |
|         mapToConstant.append(R.styleable.Constraint_visibilityMode, 78);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constrainedWidth, 80);
 | |
|         mapToConstant.append(R.styleable.Constraint_layout_constrainedHeight, 81);
 | |
|         mapToConstant.append(R.styleable.Constraint_polarRelativeTo, 82);
 | |
|         mapToConstant.append(R.styleable.Constraint_transformPivotTarget, 83);
 | |
|         mapToConstant.append(R.styleable.Constraint_quantizeMotionSteps, 84);
 | |
|         mapToConstant.append(R.styleable.Constraint_quantizeMotionPhase, 85);
 | |
|         mapToConstant.append(R.styleable.Constraint_quantizeMotionInterpolator, 86);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_editor_absoluteY, 6);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_editor_absoluteY, 7);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_orientation, 27);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_goneMarginLeft, 13);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_goneMarginTop, 16);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_goneMarginRight, 14);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_goneMarginBottom, 11);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_goneMarginStart, 15);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_goneMarginEnd, 12);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintVertical_weight, 40);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHorizontal_weight, 39);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHorizontal_chainStyle, 41);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintVertical_chainStyle, 42);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHorizontal_bias, 20);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintVertical_bias, 37);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintDimensionRatio, 5);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintLeft_creator, 87);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintTop_creator, 87);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintRight_creator, 87);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintBottom_creator, 87);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintBaseline_creator, 87);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_marginLeft, 24);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_marginRight, 28);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_marginStart, 31);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_marginEnd, 8);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_marginTop, 34);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_marginBottom, 2);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_width, 23);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_layout_height, 21);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintWidth, 95);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHeight, 96);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_visibility, 22);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_alpha, 43);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_elevation, 44);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_rotationX, 45);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_rotationY, 46);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_rotation, 60);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_scaleX, 47);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_scaleY, 48);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_transformPivotX, 49);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_transformPivotY, 50);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_translationX, 51);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_translationY, 52);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_translationZ, 53);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintWidth_default, 54);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHeight_default, 55);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintWidth_max, 56);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHeight_max, 57);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintWidth_min, 58);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHeight_min, 59);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintCircleRadius, 62);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintCircleAngle, 63);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_animateRelativeTo, 64);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_transitionEasing, 65);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_drawPath, 66);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_transitionPathRotate, 67);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_motionStagger, 79);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_android_id, 38);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_motionTarget, 98);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_motionProgress, 68);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintWidth_percent, 69);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintHeight_percent, 70);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_chainUseRtl, 71);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_barrierDirection, 72);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_barrierMargin, 73);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_constraint_referenced_ids, 74);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_barrierAllowsGoneWidgets, 75);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_pathMotionArc, 76);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constraintTag, 77);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_visibilityMode, 78);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constrainedWidth, 80);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_constrainedHeight, 81);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_polarRelativeTo, 82);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_transformPivotTarget, 83);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_quantizeMotionSteps, 84);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_quantizeMotionPhase, 85);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_quantizeMotionInterpolator, 86);
 | |
|         overrideMapToConstant.append(R.styleable.ConstraintOverride_layout_wrapBehaviorInParent, 97);
 | |
|     }
 | |
| 
 | |
|     public Constraint getParameters(int mId) {
 | |
|         return get(mId);
 | |
|     }
 | |
| 
 | |
|     public void readFallback(ConstraintSet set) {
 | |
|         for (Integer num : set.mConstraints.keySet()) {
 | |
|             int intValue = num.intValue();
 | |
|             Constraint constraint = set.mConstraints.get(num);
 | |
|             if (!this.mConstraints.containsKey(Integer.valueOf(intValue))) {
 | |
|                 this.mConstraints.put(Integer.valueOf(intValue), new Constraint());
 | |
|             }
 | |
|             Constraint constraint2 = this.mConstraints.get(Integer.valueOf(intValue));
 | |
|             if (constraint2 != null) {
 | |
|                 if (!constraint2.layout.mApply) {
 | |
|                     constraint2.layout.copyFrom(constraint.layout);
 | |
|                 }
 | |
|                 if (!constraint2.propertySet.mApply) {
 | |
|                     constraint2.propertySet.copyFrom(constraint.propertySet);
 | |
|                 }
 | |
|                 if (!constraint2.transform.mApply) {
 | |
|                     constraint2.transform.copyFrom(constraint.transform);
 | |
|                 }
 | |
|                 if (!constraint2.motion.mApply) {
 | |
|                     constraint2.motion.copyFrom(constraint.motion);
 | |
|                 }
 | |
|                 for (String str : constraint.mCustomConstraints.keySet()) {
 | |
|                     if (!constraint2.mCustomConstraints.containsKey(str)) {
 | |
|                         constraint2.mCustomConstraints.put(str, constraint.mCustomConstraints.get(str));
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void readFallback(ConstraintLayout constraintLayout) {
 | |
|         int childCount = constraintLayout.getChildCount();
 | |
|         for (int i = 0; i < childCount; i++) {
 | |
|             View childAt = constraintLayout.getChildAt(i);
 | |
|             ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) childAt.getLayoutParams();
 | |
|             int id = childAt.getId();
 | |
|             if (this.mForceId && id == -1) {
 | |
|                 throw new RuntimeException("All children of ConstraintLayout must have ids to use ConstraintSet");
 | |
|             }
 | |
|             if (!this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|                 this.mConstraints.put(Integer.valueOf(id), new Constraint());
 | |
|             }
 | |
|             Constraint constraint = this.mConstraints.get(Integer.valueOf(id));
 | |
|             if (constraint != null) {
 | |
|                 if (!constraint.layout.mApply) {
 | |
|                     constraint.fillFrom(id, layoutParams);
 | |
|                     if (childAt instanceof ConstraintHelper) {
 | |
|                         constraint.layout.mReferenceIds = ((ConstraintHelper) childAt).getReferencedIds();
 | |
|                         if (childAt instanceof Barrier) {
 | |
|                             Barrier barrier = (Barrier) childAt;
 | |
|                             constraint.layout.mBarrierAllowsGoneWidgets = barrier.getAllowsGoneWidget();
 | |
|                             constraint.layout.mBarrierDirection = barrier.getType();
 | |
|                             constraint.layout.mBarrierMargin = barrier.getMargin();
 | |
|                         }
 | |
|                     }
 | |
|                     constraint.layout.mApply = true;
 | |
|                 }
 | |
|                 if (!constraint.propertySet.mApply) {
 | |
|                     constraint.propertySet.visibility = childAt.getVisibility();
 | |
|                     constraint.propertySet.alpha = childAt.getAlpha();
 | |
|                     constraint.propertySet.mApply = true;
 | |
|                 }
 | |
|                 if (!constraint.transform.mApply) {
 | |
|                     constraint.transform.mApply = true;
 | |
|                     constraint.transform.rotation = childAt.getRotation();
 | |
|                     constraint.transform.rotationX = childAt.getRotationX();
 | |
|                     constraint.transform.rotationY = childAt.getRotationY();
 | |
|                     constraint.transform.scaleX = childAt.getScaleX();
 | |
|                     constraint.transform.scaleY = childAt.getScaleY();
 | |
|                     float pivotX = childAt.getPivotX();
 | |
|                     float pivotY = childAt.getPivotY();
 | |
|                     if (pivotX != 0.0d || pivotY != 0.0d) {
 | |
|                         constraint.transform.transformPivotX = pivotX;
 | |
|                         constraint.transform.transformPivotY = pivotY;
 | |
|                     }
 | |
|                     constraint.transform.translationX = childAt.getTranslationX();
 | |
|                     constraint.transform.translationY = childAt.getTranslationY();
 | |
|                     constraint.transform.translationZ = childAt.getTranslationZ();
 | |
|                     if (constraint.transform.applyElevation) {
 | |
|                         constraint.transform.elevation = childAt.getElevation();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void applyDeltaFrom(ConstraintSet cs) {
 | |
|         for (Constraint constraint : cs.mConstraints.values()) {
 | |
|             if (constraint.mDelta != null) {
 | |
|                 if (constraint.mTargetString != null) {
 | |
|                     Iterator<Integer> it = this.mConstraints.keySet().iterator();
 | |
|                     while (it.hasNext()) {
 | |
|                         Constraint constraint2 = getConstraint(it.next().intValue());
 | |
|                         if (constraint2.layout.mConstraintTag != null && constraint.mTargetString.matches(constraint2.layout.mConstraintTag)) {
 | |
|                             constraint.mDelta.applyDelta(constraint2);
 | |
|                             constraint2.mCustomConstraints.putAll((HashMap) constraint.mCustomConstraints.clone());
 | |
|                         }
 | |
|                     }
 | |
|                 } else {
 | |
|                     constraint.mDelta.applyDelta(getConstraint(constraint.mViewId));
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:14:0x001e, code lost:
 | |
|     
 | |
|         if (r4 == (-1)) goto L18;
 | |
|      */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:19:0x002f  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:25:0x003d  */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     static void parseDimensionConstraints(java.lang.Object r3, android.content.res.TypedArray r4, int r5, int r6) {
 | |
|         /*
 | |
|             if (r3 != 0) goto L3
 | |
|             return
 | |
|         L3:
 | |
|             android.util.TypedValue r0 = r4.peekValue(r5)
 | |
|             int r0 = r0.type
 | |
|             r1 = 3
 | |
|             if (r0 == r1) goto L6d
 | |
|             r1 = 5
 | |
|             r2 = 0
 | |
|             if (r0 == r1) goto L25
 | |
|             int r4 = r4.getInt(r5, r2)
 | |
|             r5 = -4
 | |
|             r0 = -2
 | |
|             if (r4 == r5) goto L21
 | |
|             r5 = -3
 | |
|             if (r4 == r5) goto L2a
 | |
|             if (r4 == r0) goto L29
 | |
|             r5 = -1
 | |
|             if (r4 == r5) goto L29
 | |
|             goto L2a
 | |
|         L21:
 | |
|             r2 = 1
 | |
|             r4 = 1
 | |
|             r2 = -2
 | |
|             goto L2b
 | |
|         L25:
 | |
|             int r4 = r4.getDimensionPixelSize(r5, r2)
 | |
|         L29:
 | |
|             r2 = r4
 | |
|         L2a:
 | |
|             r4 = 0
 | |
|         L2b:
 | |
|             boolean r5 = r3 instanceof androidx.constraintlayout.widget.ConstraintLayout.LayoutParams
 | |
|             if (r5 == 0) goto L3d
 | |
|             androidx.constraintlayout.widget.ConstraintLayout$LayoutParams r3 = (androidx.constraintlayout.widget.ConstraintLayout.LayoutParams) r3
 | |
|             if (r6 != 0) goto L38
 | |
|             r3.width = r2
 | |
|             r3.constrainedWidth = r4
 | |
|             goto L6c
 | |
|         L38:
 | |
|             r3.height = r2
 | |
|             r3.constrainedHeight = r4
 | |
|             goto L6c
 | |
|         L3d:
 | |
|             boolean r5 = r3 instanceof androidx.constraintlayout.widget.ConstraintSet.Layout
 | |
|             if (r5 == 0) goto L4f
 | |
|             androidx.constraintlayout.widget.ConstraintSet$Layout r3 = (androidx.constraintlayout.widget.ConstraintSet.Layout) r3
 | |
|             if (r6 != 0) goto L4a
 | |
|             r3.mWidth = r2
 | |
|             r3.constrainedWidth = r4
 | |
|             goto L6c
 | |
|         L4a:
 | |
|             r3.mHeight = r2
 | |
|             r3.constrainedHeight = r4
 | |
|             goto L6c
 | |
|         L4f:
 | |
|             boolean r5 = r3 instanceof androidx.constraintlayout.widget.ConstraintSet.Constraint.Delta
 | |
|             if (r5 == 0) goto L6c
 | |
|             androidx.constraintlayout.widget.ConstraintSet$Constraint$Delta r3 = (androidx.constraintlayout.widget.ConstraintSet.Constraint.Delta) r3
 | |
|             if (r6 != 0) goto L62
 | |
|             r5 = 23
 | |
|             r3.add(r5, r2)
 | |
|             r5 = 80
 | |
|             r3.add(r5, r4)
 | |
|             goto L6c
 | |
|         L62:
 | |
|             r5 = 21
 | |
|             r3.add(r5, r2)
 | |
|             r5 = 81
 | |
|             r3.add(r5, r4)
 | |
|         L6c:
 | |
|             return
 | |
|         L6d:
 | |
|             java.lang.String r4 = r4.getString(r5)
 | |
|             parseDimensionConstraintsString(r3, r4, r6)
 | |
|             return
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.constraintlayout.widget.ConstraintSet.parseDimensionConstraints(java.lang.Object, android.content.res.TypedArray, int, int):void");
 | |
|     }
 | |
| 
 | |
|     static void parseDimensionRatioString(ConstraintLayout.LayoutParams params, String value) {
 | |
|         float f = Float.NaN;
 | |
|         int i = -1;
 | |
|         if (value != null) {
 | |
|             int length = value.length();
 | |
|             int indexOf = value.indexOf(44);
 | |
|             int i2 = 0;
 | |
|             if (indexOf > 0 && indexOf < length - 1) {
 | |
|                 String substring = value.substring(0, indexOf);
 | |
|                 if (substring.equalsIgnoreCase("W")) {
 | |
|                     i = 0;
 | |
|                 } else if (substring.equalsIgnoreCase("H")) {
 | |
|                     i = 1;
 | |
|                 }
 | |
|                 i2 = indexOf + 1;
 | |
|             }
 | |
|             int indexOf2 = value.indexOf(58);
 | |
|             try {
 | |
|                 if (indexOf2 >= 0 && indexOf2 < length - 1) {
 | |
|                     String substring2 = value.substring(i2, indexOf2);
 | |
|                     String substring3 = value.substring(indexOf2 + 1);
 | |
|                     if (substring2.length() > 0 && substring3.length() > 0) {
 | |
|                         float parseFloat = Float.parseFloat(substring2);
 | |
|                         float parseFloat2 = Float.parseFloat(substring3);
 | |
|                         if (parseFloat > 0.0f && parseFloat2 > 0.0f) {
 | |
|                             if (i == 1) {
 | |
|                                 f = Math.abs(parseFloat2 / parseFloat);
 | |
|                             } else {
 | |
|                                 f = Math.abs(parseFloat / parseFloat2);
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 } else {
 | |
|                     String substring4 = value.substring(i2);
 | |
|                     if (substring4.length() > 0) {
 | |
|                         f = Float.parseFloat(substring4);
 | |
|                     }
 | |
|                 }
 | |
|             } catch (NumberFormatException unused) {
 | |
|             }
 | |
|         }
 | |
|         params.dimensionRatio = value;
 | |
|         params.dimensionRatioValue = f;
 | |
|         params.dimensionRatioSide = i;
 | |
|     }
 | |
| 
 | |
|     static void parseDimensionConstraintsString(Object data, String value, int orientation) {
 | |
|         if (value == null) {
 | |
|             return;
 | |
|         }
 | |
|         int indexOf = value.indexOf(61);
 | |
|         int length = value.length();
 | |
|         if (indexOf <= 0 || indexOf >= length - 1) {
 | |
|             return;
 | |
|         }
 | |
|         String substring = value.substring(0, indexOf);
 | |
|         String substring2 = value.substring(indexOf + 1);
 | |
|         if (substring2.length() > 0) {
 | |
|             String trim = substring.trim();
 | |
|             String trim2 = substring2.trim();
 | |
|             if (KEY_RATIO.equalsIgnoreCase(trim)) {
 | |
|                 if (data instanceof ConstraintLayout.LayoutParams) {
 | |
|                     ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) data;
 | |
|                     if (orientation == 0) {
 | |
|                         layoutParams.width = 0;
 | |
|                     } else {
 | |
|                         layoutParams.height = 0;
 | |
|                     }
 | |
|                     parseDimensionRatioString(layoutParams, trim2);
 | |
|                     return;
 | |
|                 }
 | |
|                 if (data instanceof Layout) {
 | |
|                     ((Layout) data).dimensionRatio = trim2;
 | |
|                     return;
 | |
|                 } else {
 | |
|                     if (data instanceof Constraint.Delta) {
 | |
|                         ((Constraint.Delta) data).add(5, trim2);
 | |
|                         return;
 | |
|                     }
 | |
|                     return;
 | |
|                 }
 | |
|             }
 | |
|             try {
 | |
|                 if (KEY_WEIGHT.equalsIgnoreCase(trim)) {
 | |
|                     float parseFloat = Float.parseFloat(trim2);
 | |
|                     if (data instanceof ConstraintLayout.LayoutParams) {
 | |
|                         ConstraintLayout.LayoutParams layoutParams2 = (ConstraintLayout.LayoutParams) data;
 | |
|                         if (orientation == 0) {
 | |
|                             layoutParams2.width = 0;
 | |
|                             layoutParams2.horizontalWeight = parseFloat;
 | |
|                         } else {
 | |
|                             layoutParams2.height = 0;
 | |
|                             layoutParams2.verticalWeight = parseFloat;
 | |
|                         }
 | |
|                     } else if (data instanceof Layout) {
 | |
|                         Layout layout = (Layout) data;
 | |
|                         if (orientation == 0) {
 | |
|                             layout.mWidth = 0;
 | |
|                             layout.horizontalWeight = parseFloat;
 | |
|                         } else {
 | |
|                             layout.mHeight = 0;
 | |
|                             layout.verticalWeight = parseFloat;
 | |
|                         }
 | |
|                     } else if (data instanceof Constraint.Delta) {
 | |
|                         Constraint.Delta delta = (Constraint.Delta) data;
 | |
|                         if (orientation == 0) {
 | |
|                             delta.add(23, 0);
 | |
|                             delta.add(39, parseFloat);
 | |
|                         } else {
 | |
|                             delta.add(21, 0);
 | |
|                             delta.add(40, parseFloat);
 | |
|                         }
 | |
|                     }
 | |
|                 } else {
 | |
|                     if (!KEY_PERCENT_PARENT.equalsIgnoreCase(trim)) {
 | |
|                         return;
 | |
|                     }
 | |
|                     float max = Math.max(0.0f, Math.min(1.0f, Float.parseFloat(trim2)));
 | |
|                     if (data instanceof ConstraintLayout.LayoutParams) {
 | |
|                         ConstraintLayout.LayoutParams layoutParams3 = (ConstraintLayout.LayoutParams) data;
 | |
|                         if (orientation == 0) {
 | |
|                             layoutParams3.width = 0;
 | |
|                             layoutParams3.matchConstraintPercentWidth = max;
 | |
|                             layoutParams3.matchConstraintDefaultWidth = 2;
 | |
|                         } else {
 | |
|                             layoutParams3.height = 0;
 | |
|                             layoutParams3.matchConstraintPercentHeight = max;
 | |
|                             layoutParams3.matchConstraintDefaultHeight = 2;
 | |
|                         }
 | |
|                     } else if (data instanceof Layout) {
 | |
|                         Layout layout2 = (Layout) data;
 | |
|                         if (orientation == 0) {
 | |
|                             layout2.mWidth = 0;
 | |
|                             layout2.widthPercent = max;
 | |
|                             layout2.widthDefault = 2;
 | |
|                         } else {
 | |
|                             layout2.mHeight = 0;
 | |
|                             layout2.heightPercent = max;
 | |
|                             layout2.heightDefault = 2;
 | |
|                         }
 | |
|                     } else if (data instanceof Constraint.Delta) {
 | |
|                         Constraint.Delta delta2 = (Constraint.Delta) data;
 | |
|                         if (orientation == 0) {
 | |
|                             delta2.add(23, 0);
 | |
|                             delta2.add(54, 2);
 | |
|                         } else {
 | |
|                             delta2.add(21, 0);
 | |
|                             delta2.add(55, 2);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             } catch (NumberFormatException unused) {
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class Layout {
 | |
|         private static final int BARRIER_ALLOWS_GONE_WIDGETS = 75;
 | |
|         private static final int BARRIER_DIRECTION = 72;
 | |
|         private static final int BARRIER_MARGIN = 73;
 | |
|         private static final int BASELINE_MARGIN = 80;
 | |
|         private static final int BASELINE_TO_BASELINE = 1;
 | |
|         private static final int BASELINE_TO_BOTTOM = 78;
 | |
|         private static final int BASELINE_TO_TOP = 77;
 | |
|         private static final int BOTTOM_MARGIN = 2;
 | |
|         private static final int BOTTOM_TO_BOTTOM = 3;
 | |
|         private static final int BOTTOM_TO_TOP = 4;
 | |
|         private static final int CHAIN_USE_RTL = 71;
 | |
|         private static final int CIRCLE = 61;
 | |
|         private static final int CIRCLE_ANGLE = 63;
 | |
|         private static final int CIRCLE_RADIUS = 62;
 | |
|         private static final int CONSTRAINED_HEIGHT = 88;
 | |
|         private static final int CONSTRAINED_WIDTH = 87;
 | |
|         private static final int CONSTRAINT_REFERENCED_IDS = 74;
 | |
|         private static final int CONSTRAINT_TAG = 89;
 | |
|         private static final int DIMENSION_RATIO = 5;
 | |
|         private static final int EDITOR_ABSOLUTE_X = 6;
 | |
|         private static final int EDITOR_ABSOLUTE_Y = 7;
 | |
|         private static final int END_MARGIN = 8;
 | |
|         private static final int END_TO_END = 9;
 | |
|         private static final int END_TO_START = 10;
 | |
|         private static final int GONE_BASELINE_MARGIN = 79;
 | |
|         private static final int GONE_BOTTOM_MARGIN = 11;
 | |
|         private static final int GONE_END_MARGIN = 12;
 | |
|         private static final int GONE_LEFT_MARGIN = 13;
 | |
|         private static final int GONE_RIGHT_MARGIN = 14;
 | |
|         private static final int GONE_START_MARGIN = 15;
 | |
|         private static final int GONE_TOP_MARGIN = 16;
 | |
|         private static final int GUIDE_BEGIN = 17;
 | |
|         private static final int GUIDE_END = 18;
 | |
|         private static final int GUIDE_PERCENT = 19;
 | |
|         private static final int GUIDE_USE_RTL = 90;
 | |
|         private static final int HEIGHT_DEFAULT = 82;
 | |
|         private static final int HEIGHT_MAX = 83;
 | |
|         private static final int HEIGHT_MIN = 85;
 | |
|         private static final int HEIGHT_PERCENT = 70;
 | |
|         private static final int HORIZONTAL_BIAS = 20;
 | |
|         private static final int HORIZONTAL_STYLE = 39;
 | |
|         private static final int HORIZONTAL_WEIGHT = 37;
 | |
|         private static final int LAYOUT_CONSTRAINT_HEIGHT = 42;
 | |
|         private static final int LAYOUT_CONSTRAINT_WIDTH = 41;
 | |
|         private static final int LAYOUT_HEIGHT = 21;
 | |
|         private static final int LAYOUT_WIDTH = 22;
 | |
|         private static final int LAYOUT_WRAP_BEHAVIOR = 76;
 | |
|         private static final int LEFT_MARGIN = 23;
 | |
|         private static final int LEFT_TO_LEFT = 24;
 | |
|         private static final int LEFT_TO_RIGHT = 25;
 | |
|         private static final int ORIENTATION = 26;
 | |
|         private static final int RIGHT_MARGIN = 27;
 | |
|         private static final int RIGHT_TO_LEFT = 28;
 | |
|         private static final int RIGHT_TO_RIGHT = 29;
 | |
|         private static final int START_MARGIN = 30;
 | |
|         private static final int START_TO_END = 31;
 | |
|         private static final int START_TO_START = 32;
 | |
|         private static final int TOP_MARGIN = 33;
 | |
|         private static final int TOP_TO_BOTTOM = 34;
 | |
|         private static final int TOP_TO_TOP = 35;
 | |
|         public static final int UNSET = -1;
 | |
|         public static final int UNSET_GONE_MARGIN = Integer.MIN_VALUE;
 | |
|         private static final int UNUSED = 91;
 | |
|         private static final int VERTICAL_BIAS = 36;
 | |
|         private static final int VERTICAL_STYLE = 40;
 | |
|         private static final int VERTICAL_WEIGHT = 38;
 | |
|         private static final int WIDTH_DEFAULT = 81;
 | |
|         private static final int WIDTH_MAX = 84;
 | |
|         private static final int WIDTH_MIN = 86;
 | |
|         private static final int WIDTH_PERCENT = 69;
 | |
|         private static SparseIntArray mapToConstant;
 | |
|         public String mConstraintTag;
 | |
|         public int mHeight;
 | |
|         public String mReferenceIdString;
 | |
|         public int[] mReferenceIds;
 | |
|         public int mWidth;
 | |
|         public boolean mIsGuideline = false;
 | |
|         public boolean mApply = false;
 | |
|         public boolean mOverride = false;
 | |
|         public int guideBegin = -1;
 | |
|         public int guideEnd = -1;
 | |
|         public float guidePercent = -1.0f;
 | |
|         public boolean guidelineUseRtl = true;
 | |
|         public int leftToLeft = -1;
 | |
|         public int leftToRight = -1;
 | |
|         public int rightToLeft = -1;
 | |
|         public int rightToRight = -1;
 | |
|         public int topToTop = -1;
 | |
|         public int topToBottom = -1;
 | |
|         public int bottomToTop = -1;
 | |
|         public int bottomToBottom = -1;
 | |
|         public int baselineToBaseline = -1;
 | |
|         public int baselineToTop = -1;
 | |
|         public int baselineToBottom = -1;
 | |
|         public int startToEnd = -1;
 | |
|         public int startToStart = -1;
 | |
|         public int endToStart = -1;
 | |
|         public int endToEnd = -1;
 | |
|         public float horizontalBias = 0.5f;
 | |
|         public float verticalBias = 0.5f;
 | |
|         public String dimensionRatio = null;
 | |
|         public int circleConstraint = -1;
 | |
|         public int circleRadius = 0;
 | |
|         public float circleAngle = 0.0f;
 | |
|         public int editorAbsoluteX = -1;
 | |
|         public int editorAbsoluteY = -1;
 | |
|         public int orientation = -1;
 | |
|         public int leftMargin = 0;
 | |
|         public int rightMargin = 0;
 | |
|         public int topMargin = 0;
 | |
|         public int bottomMargin = 0;
 | |
|         public int endMargin = 0;
 | |
|         public int startMargin = 0;
 | |
|         public int baselineMargin = 0;
 | |
|         public int goneLeftMargin = Integer.MIN_VALUE;
 | |
|         public int goneTopMargin = Integer.MIN_VALUE;
 | |
|         public int goneRightMargin = Integer.MIN_VALUE;
 | |
|         public int goneBottomMargin = Integer.MIN_VALUE;
 | |
|         public int goneEndMargin = Integer.MIN_VALUE;
 | |
|         public int goneStartMargin = Integer.MIN_VALUE;
 | |
|         public int goneBaselineMargin = Integer.MIN_VALUE;
 | |
|         public float verticalWeight = -1.0f;
 | |
|         public float horizontalWeight = -1.0f;
 | |
|         public int horizontalChainStyle = 0;
 | |
|         public int verticalChainStyle = 0;
 | |
|         public int widthDefault = 0;
 | |
|         public int heightDefault = 0;
 | |
|         public int widthMax = 0;
 | |
|         public int heightMax = 0;
 | |
|         public int widthMin = 0;
 | |
|         public int heightMin = 0;
 | |
|         public float widthPercent = 1.0f;
 | |
|         public float heightPercent = 1.0f;
 | |
|         public int mBarrierDirection = -1;
 | |
|         public int mBarrierMargin = 0;
 | |
|         public int mHelperType = -1;
 | |
|         public boolean constrainedWidth = false;
 | |
|         public boolean constrainedHeight = false;
 | |
|         public boolean mBarrierAllowsGoneWidgets = true;
 | |
|         public int mWrapBehavior = 0;
 | |
| 
 | |
|         public void copyFrom(Layout src) {
 | |
|             this.mIsGuideline = src.mIsGuideline;
 | |
|             this.mWidth = src.mWidth;
 | |
|             this.mApply = src.mApply;
 | |
|             this.mHeight = src.mHeight;
 | |
|             this.guideBegin = src.guideBegin;
 | |
|             this.guideEnd = src.guideEnd;
 | |
|             this.guidePercent = src.guidePercent;
 | |
|             this.guidelineUseRtl = src.guidelineUseRtl;
 | |
|             this.leftToLeft = src.leftToLeft;
 | |
|             this.leftToRight = src.leftToRight;
 | |
|             this.rightToLeft = src.rightToLeft;
 | |
|             this.rightToRight = src.rightToRight;
 | |
|             this.topToTop = src.topToTop;
 | |
|             this.topToBottom = src.topToBottom;
 | |
|             this.bottomToTop = src.bottomToTop;
 | |
|             this.bottomToBottom = src.bottomToBottom;
 | |
|             this.baselineToBaseline = src.baselineToBaseline;
 | |
|             this.baselineToTop = src.baselineToTop;
 | |
|             this.baselineToBottom = src.baselineToBottom;
 | |
|             this.startToEnd = src.startToEnd;
 | |
|             this.startToStart = src.startToStart;
 | |
|             this.endToStart = src.endToStart;
 | |
|             this.endToEnd = src.endToEnd;
 | |
|             this.horizontalBias = src.horizontalBias;
 | |
|             this.verticalBias = src.verticalBias;
 | |
|             this.dimensionRatio = src.dimensionRatio;
 | |
|             this.circleConstraint = src.circleConstraint;
 | |
|             this.circleRadius = src.circleRadius;
 | |
|             this.circleAngle = src.circleAngle;
 | |
|             this.editorAbsoluteX = src.editorAbsoluteX;
 | |
|             this.editorAbsoluteY = src.editorAbsoluteY;
 | |
|             this.orientation = src.orientation;
 | |
|             this.leftMargin = src.leftMargin;
 | |
|             this.rightMargin = src.rightMargin;
 | |
|             this.topMargin = src.topMargin;
 | |
|             this.bottomMargin = src.bottomMargin;
 | |
|             this.endMargin = src.endMargin;
 | |
|             this.startMargin = src.startMargin;
 | |
|             this.baselineMargin = src.baselineMargin;
 | |
|             this.goneLeftMargin = src.goneLeftMargin;
 | |
|             this.goneTopMargin = src.goneTopMargin;
 | |
|             this.goneRightMargin = src.goneRightMargin;
 | |
|             this.goneBottomMargin = src.goneBottomMargin;
 | |
|             this.goneEndMargin = src.goneEndMargin;
 | |
|             this.goneStartMargin = src.goneStartMargin;
 | |
|             this.goneBaselineMargin = src.goneBaselineMargin;
 | |
|             this.verticalWeight = src.verticalWeight;
 | |
|             this.horizontalWeight = src.horizontalWeight;
 | |
|             this.horizontalChainStyle = src.horizontalChainStyle;
 | |
|             this.verticalChainStyle = src.verticalChainStyle;
 | |
|             this.widthDefault = src.widthDefault;
 | |
|             this.heightDefault = src.heightDefault;
 | |
|             this.widthMax = src.widthMax;
 | |
|             this.heightMax = src.heightMax;
 | |
|             this.widthMin = src.widthMin;
 | |
|             this.heightMin = src.heightMin;
 | |
|             this.widthPercent = src.widthPercent;
 | |
|             this.heightPercent = src.heightPercent;
 | |
|             this.mBarrierDirection = src.mBarrierDirection;
 | |
|             this.mBarrierMargin = src.mBarrierMargin;
 | |
|             this.mHelperType = src.mHelperType;
 | |
|             this.mConstraintTag = src.mConstraintTag;
 | |
|             int[] iArr = src.mReferenceIds;
 | |
|             if (iArr == null || src.mReferenceIdString != null) {
 | |
|                 this.mReferenceIds = null;
 | |
|             } else {
 | |
|                 this.mReferenceIds = Arrays.copyOf(iArr, iArr.length);
 | |
|             }
 | |
|             this.mReferenceIdString = src.mReferenceIdString;
 | |
|             this.constrainedWidth = src.constrainedWidth;
 | |
|             this.constrainedHeight = src.constrainedHeight;
 | |
|             this.mBarrierAllowsGoneWidgets = src.mBarrierAllowsGoneWidgets;
 | |
|             this.mWrapBehavior = src.mWrapBehavior;
 | |
|         }
 | |
| 
 | |
|         static {
 | |
|             SparseIntArray sparseIntArray = new SparseIntArray();
 | |
|             mapToConstant = sparseIntArray;
 | |
|             sparseIntArray.append(R.styleable.Layout_layout_constraintLeft_toLeftOf, 24);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintLeft_toRightOf, 25);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintRight_toLeftOf, 28);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintRight_toRightOf, 29);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintTop_toTopOf, 35);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintTop_toBottomOf, 34);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintBottom_toTopOf, 4);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintBottom_toBottomOf, 3);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintBaseline_toBaselineOf, 1);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_editor_absoluteX, 6);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_editor_absoluteY, 7);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintGuide_begin, 17);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintGuide_end, 18);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintGuide_percent, 19);
 | |
|             mapToConstant.append(R.styleable.Layout_guidelineUseRtl, 90);
 | |
|             mapToConstant.append(R.styleable.Layout_android_orientation, 26);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintStart_toEndOf, 31);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintStart_toStartOf, 32);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintEnd_toStartOf, 10);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintEnd_toEndOf, 9);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_goneMarginLeft, 13);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_goneMarginTop, 16);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_goneMarginRight, 14);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_goneMarginBottom, 11);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_goneMarginStart, 15);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_goneMarginEnd, 12);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintVertical_weight, 38);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintHorizontal_weight, 37);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintHorizontal_chainStyle, 39);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintVertical_chainStyle, 40);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintHorizontal_bias, 20);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintVertical_bias, 36);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintDimensionRatio, 5);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintLeft_creator, 91);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintTop_creator, 91);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintRight_creator, 91);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintBottom_creator, 91);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintBaseline_creator, 91);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_marginLeft, 23);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_marginRight, 27);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_marginStart, 30);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_marginEnd, 8);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_marginTop, 33);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_marginBottom, 2);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_width, 22);
 | |
|             mapToConstant.append(R.styleable.Layout_android_layout_height, 21);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintWidth, 41);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintHeight, 42);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constrainedWidth, 41);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constrainedHeight, 42);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_wrapBehaviorInParent, 76);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintCircle, 61);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintCircleRadius, 62);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintCircleAngle, 63);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintWidth_percent, 69);
 | |
|             mapToConstant.append(R.styleable.Layout_layout_constraintHeight_percent, 70);
 | |
|             mapToConstant.append(R.styleable.Layout_chainUseRtl, 71);
 | |
|             mapToConstant.append(R.styleable.Layout_barrierDirection, 72);
 | |
|             mapToConstant.append(R.styleable.Layout_barrierMargin, 73);
 | |
|             mapToConstant.append(R.styleable.Layout_constraint_referenced_ids, 74);
 | |
|             mapToConstant.append(R.styleable.Layout_barrierAllowsGoneWidgets, 75);
 | |
|         }
 | |
| 
 | |
|         void fillFromAttributeList(Context context, AttributeSet attrs) {
 | |
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.Layout);
 | |
|             this.mApply = true;
 | |
|             int indexCount = obtainStyledAttributes.getIndexCount();
 | |
|             for (int i = 0; i < indexCount; i++) {
 | |
|                 int index = obtainStyledAttributes.getIndex(i);
 | |
|                 int i2 = mapToConstant.get(index);
 | |
|                 switch (i2) {
 | |
|                     case 1:
 | |
|                         this.baselineToBaseline = ConstraintSet.lookupID(obtainStyledAttributes, index, this.baselineToBaseline);
 | |
|                         break;
 | |
|                     case 2:
 | |
|                         this.bottomMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.bottomMargin);
 | |
|                         break;
 | |
|                     case 3:
 | |
|                         this.bottomToBottom = ConstraintSet.lookupID(obtainStyledAttributes, index, this.bottomToBottom);
 | |
|                         break;
 | |
|                     case 4:
 | |
|                         this.bottomToTop = ConstraintSet.lookupID(obtainStyledAttributes, index, this.bottomToTop);
 | |
|                         break;
 | |
|                     case 5:
 | |
|                         this.dimensionRatio = obtainStyledAttributes.getString(index);
 | |
|                         break;
 | |
|                     case 6:
 | |
|                         this.editorAbsoluteX = obtainStyledAttributes.getDimensionPixelOffset(index, this.editorAbsoluteX);
 | |
|                         break;
 | |
|                     case 7:
 | |
|                         this.editorAbsoluteY = obtainStyledAttributes.getDimensionPixelOffset(index, this.editorAbsoluteY);
 | |
|                         break;
 | |
|                     case 8:
 | |
|                         this.endMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.endMargin);
 | |
|                         break;
 | |
|                     case 9:
 | |
|                         this.endToEnd = ConstraintSet.lookupID(obtainStyledAttributes, index, this.endToEnd);
 | |
|                         break;
 | |
|                     case 10:
 | |
|                         this.endToStart = ConstraintSet.lookupID(obtainStyledAttributes, index, this.endToStart);
 | |
|                         break;
 | |
|                     case 11:
 | |
|                         this.goneBottomMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneBottomMargin);
 | |
|                         break;
 | |
|                     case 12:
 | |
|                         this.goneEndMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneEndMargin);
 | |
|                         break;
 | |
|                     case 13:
 | |
|                         this.goneLeftMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneLeftMargin);
 | |
|                         break;
 | |
|                     case 14:
 | |
|                         this.goneRightMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneRightMargin);
 | |
|                         break;
 | |
|                     case 15:
 | |
|                         this.goneStartMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneStartMargin);
 | |
|                         break;
 | |
|                     case 16:
 | |
|                         this.goneTopMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneTopMargin);
 | |
|                         break;
 | |
|                     case 17:
 | |
|                         this.guideBegin = obtainStyledAttributes.getDimensionPixelOffset(index, this.guideBegin);
 | |
|                         break;
 | |
|                     case 18:
 | |
|                         this.guideEnd = obtainStyledAttributes.getDimensionPixelOffset(index, this.guideEnd);
 | |
|                         break;
 | |
|                     case 19:
 | |
|                         this.guidePercent = obtainStyledAttributes.getFloat(index, this.guidePercent);
 | |
|                         break;
 | |
|                     case 20:
 | |
|                         this.horizontalBias = obtainStyledAttributes.getFloat(index, this.horizontalBias);
 | |
|                         break;
 | |
|                     case 21:
 | |
|                         this.mHeight = obtainStyledAttributes.getLayoutDimension(index, this.mHeight);
 | |
|                         break;
 | |
|                     case 22:
 | |
|                         this.mWidth = obtainStyledAttributes.getLayoutDimension(index, this.mWidth);
 | |
|                         break;
 | |
|                     case 23:
 | |
|                         this.leftMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.leftMargin);
 | |
|                         break;
 | |
|                     case 24:
 | |
|                         this.leftToLeft = ConstraintSet.lookupID(obtainStyledAttributes, index, this.leftToLeft);
 | |
|                         break;
 | |
|                     case 25:
 | |
|                         this.leftToRight = ConstraintSet.lookupID(obtainStyledAttributes, index, this.leftToRight);
 | |
|                         break;
 | |
|                     case 26:
 | |
|                         this.orientation = obtainStyledAttributes.getInt(index, this.orientation);
 | |
|                         break;
 | |
|                     case 27:
 | |
|                         this.rightMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.rightMargin);
 | |
|                         break;
 | |
|                     case 28:
 | |
|                         this.rightToLeft = ConstraintSet.lookupID(obtainStyledAttributes, index, this.rightToLeft);
 | |
|                         break;
 | |
|                     case 29:
 | |
|                         this.rightToRight = ConstraintSet.lookupID(obtainStyledAttributes, index, this.rightToRight);
 | |
|                         break;
 | |
|                     case 30:
 | |
|                         this.startMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.startMargin);
 | |
|                         break;
 | |
|                     case 31:
 | |
|                         this.startToEnd = ConstraintSet.lookupID(obtainStyledAttributes, index, this.startToEnd);
 | |
|                         break;
 | |
|                     case 32:
 | |
|                         this.startToStart = ConstraintSet.lookupID(obtainStyledAttributes, index, this.startToStart);
 | |
|                         break;
 | |
|                     case 33:
 | |
|                         this.topMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.topMargin);
 | |
|                         break;
 | |
|                     case 34:
 | |
|                         this.topToBottom = ConstraintSet.lookupID(obtainStyledAttributes, index, this.topToBottom);
 | |
|                         break;
 | |
|                     case 35:
 | |
|                         this.topToTop = ConstraintSet.lookupID(obtainStyledAttributes, index, this.topToTop);
 | |
|                         break;
 | |
|                     case 36:
 | |
|                         this.verticalBias = obtainStyledAttributes.getFloat(index, this.verticalBias);
 | |
|                         break;
 | |
|                     case 37:
 | |
|                         this.horizontalWeight = obtainStyledAttributes.getFloat(index, this.horizontalWeight);
 | |
|                         break;
 | |
|                     case 38:
 | |
|                         this.verticalWeight = obtainStyledAttributes.getFloat(index, this.verticalWeight);
 | |
|                         break;
 | |
|                     case 39:
 | |
|                         this.horizontalChainStyle = obtainStyledAttributes.getInt(index, this.horizontalChainStyle);
 | |
|                         break;
 | |
|                     case 40:
 | |
|                         this.verticalChainStyle = obtainStyledAttributes.getInt(index, this.verticalChainStyle);
 | |
|                         break;
 | |
|                     case 41:
 | |
|                         ConstraintSet.parseDimensionConstraints(this, obtainStyledAttributes, index, 0);
 | |
|                         break;
 | |
|                     case 42:
 | |
|                         ConstraintSet.parseDimensionConstraints(this, obtainStyledAttributes, index, 1);
 | |
|                         break;
 | |
|                     default:
 | |
|                         switch (i2) {
 | |
|                             case 61:
 | |
|                                 this.circleConstraint = ConstraintSet.lookupID(obtainStyledAttributes, index, this.circleConstraint);
 | |
|                                 break;
 | |
|                             case 62:
 | |
|                                 this.circleRadius = obtainStyledAttributes.getDimensionPixelSize(index, this.circleRadius);
 | |
|                                 break;
 | |
|                             case 63:
 | |
|                                 this.circleAngle = obtainStyledAttributes.getFloat(index, this.circleAngle);
 | |
|                                 break;
 | |
|                             default:
 | |
|                                 switch (i2) {
 | |
|                                     case 69:
 | |
|                                         this.widthPercent = obtainStyledAttributes.getFloat(index, 1.0f);
 | |
|                                         break;
 | |
|                                     case 70:
 | |
|                                         this.heightPercent = obtainStyledAttributes.getFloat(index, 1.0f);
 | |
|                                         break;
 | |
|                                     case 71:
 | |
|                                         Log.e(ConstraintSet.TAG, "CURRENTLY UNSUPPORTED");
 | |
|                                         break;
 | |
|                                     case 72:
 | |
|                                         this.mBarrierDirection = obtainStyledAttributes.getInt(index, this.mBarrierDirection);
 | |
|                                         break;
 | |
|                                     case 73:
 | |
|                                         this.mBarrierMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.mBarrierMargin);
 | |
|                                         break;
 | |
|                                     case 74:
 | |
|                                         this.mReferenceIdString = obtainStyledAttributes.getString(index);
 | |
|                                         break;
 | |
|                                     case 75:
 | |
|                                         this.mBarrierAllowsGoneWidgets = obtainStyledAttributes.getBoolean(index, this.mBarrierAllowsGoneWidgets);
 | |
|                                         break;
 | |
|                                     case 76:
 | |
|                                         this.mWrapBehavior = obtainStyledAttributes.getInt(index, this.mWrapBehavior);
 | |
|                                         break;
 | |
|                                     case 77:
 | |
|                                         this.baselineToTop = ConstraintSet.lookupID(obtainStyledAttributes, index, this.baselineToTop);
 | |
|                                         break;
 | |
|                                     case 78:
 | |
|                                         this.baselineToBottom = ConstraintSet.lookupID(obtainStyledAttributes, index, this.baselineToBottom);
 | |
|                                         break;
 | |
|                                     case 79:
 | |
|                                         this.goneBaselineMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.goneBaselineMargin);
 | |
|                                         break;
 | |
|                                     case 80:
 | |
|                                         this.baselineMargin = obtainStyledAttributes.getDimensionPixelSize(index, this.baselineMargin);
 | |
|                                         break;
 | |
|                                     case 81:
 | |
|                                         this.widthDefault = obtainStyledAttributes.getInt(index, this.widthDefault);
 | |
|                                         break;
 | |
|                                     case 82:
 | |
|                                         this.heightDefault = obtainStyledAttributes.getInt(index, this.heightDefault);
 | |
|                                         break;
 | |
|                                     case 83:
 | |
|                                         this.heightMax = obtainStyledAttributes.getDimensionPixelSize(index, this.heightMax);
 | |
|                                         break;
 | |
|                                     case 84:
 | |
|                                         this.widthMax = obtainStyledAttributes.getDimensionPixelSize(index, this.widthMax);
 | |
|                                         break;
 | |
|                                     case 85:
 | |
|                                         this.heightMin = obtainStyledAttributes.getDimensionPixelSize(index, this.heightMin);
 | |
|                                         break;
 | |
|                                     case 86:
 | |
|                                         this.widthMin = obtainStyledAttributes.getDimensionPixelSize(index, this.widthMin);
 | |
|                                         break;
 | |
|                                     case 87:
 | |
|                                         this.constrainedWidth = obtainStyledAttributes.getBoolean(index, this.constrainedWidth);
 | |
|                                         break;
 | |
|                                     case 88:
 | |
|                                         this.constrainedHeight = obtainStyledAttributes.getBoolean(index, this.constrainedHeight);
 | |
|                                         break;
 | |
|                                     case 89:
 | |
|                                         this.mConstraintTag = obtainStyledAttributes.getString(index);
 | |
|                                         break;
 | |
|                                     case 90:
 | |
|                                         this.guidelineUseRtl = obtainStyledAttributes.getBoolean(index, this.guidelineUseRtl);
 | |
|                                         break;
 | |
|                                     case 91:
 | |
|                                         Log.w(ConstraintSet.TAG, "unused attribute 0x" + Integer.toHexString(index) + "   " + mapToConstant.get(index));
 | |
|                                         break;
 | |
|                                     default:
 | |
|                                         Log.w(ConstraintSet.TAG, "Unknown attribute 0x" + Integer.toHexString(index) + "   " + mapToConstant.get(index));
 | |
|                                         break;
 | |
|                                 }
 | |
|                         }
 | |
|                 }
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
| 
 | |
|         public void dump(MotionScene motionScene, StringBuilder sb) {
 | |
|             Field[] declaredFields = getClass().getDeclaredFields();
 | |
|             sb.append("\n");
 | |
|             for (Field field : declaredFields) {
 | |
|                 String name = field.getName();
 | |
|                 if (!Modifier.isStatic(field.getModifiers())) {
 | |
|                     try {
 | |
|                         Object obj = field.get(this);
 | |
|                         Class<?> type = field.getType();
 | |
|                         if (type == Integer.TYPE) {
 | |
|                             Integer num = (Integer) obj;
 | |
|                             if (num.intValue() != -1) {
 | |
|                                 Object lookUpConstraintName = motionScene.lookUpConstraintName(num.intValue());
 | |
|                                 sb.append("    ");
 | |
|                                 sb.append(name);
 | |
|                                 sb.append(" = \"");
 | |
|                                 sb.append(lookUpConstraintName == null ? num : lookUpConstraintName);
 | |
|                                 sb.append("\"\n");
 | |
|                             }
 | |
|                         } else if (type == Float.TYPE) {
 | |
|                             Float f = (Float) obj;
 | |
|                             if (f.floatValue() != -1.0f) {
 | |
|                                 sb.append("    ");
 | |
|                                 sb.append(name);
 | |
|                                 sb.append(" = \"");
 | |
|                                 sb.append(f);
 | |
|                                 sb.append("\"\n");
 | |
|                             }
 | |
|                         }
 | |
|                     } catch (IllegalAccessException e) {
 | |
|                         e.printStackTrace();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class Transform {
 | |
|         private static final int ELEVATION = 11;
 | |
|         private static final int ROTATION = 1;
 | |
|         private static final int ROTATION_X = 2;
 | |
|         private static final int ROTATION_Y = 3;
 | |
|         private static final int SCALE_X = 4;
 | |
|         private static final int SCALE_Y = 5;
 | |
|         private static final int TRANSFORM_PIVOT_TARGET = 12;
 | |
|         private static final int TRANSFORM_PIVOT_X = 6;
 | |
|         private static final int TRANSFORM_PIVOT_Y = 7;
 | |
|         private static final int TRANSLATION_X = 8;
 | |
|         private static final int TRANSLATION_Y = 9;
 | |
|         private static final int TRANSLATION_Z = 10;
 | |
|         private static SparseIntArray mapToConstant;
 | |
|         public boolean mApply = false;
 | |
|         public float rotation = 0.0f;
 | |
|         public float rotationX = 0.0f;
 | |
|         public float rotationY = 0.0f;
 | |
|         public float scaleX = 1.0f;
 | |
|         public float scaleY = 1.0f;
 | |
|         public float transformPivotX = Float.NaN;
 | |
|         public float transformPivotY = Float.NaN;
 | |
|         public int transformPivotTarget = -1;
 | |
|         public float translationX = 0.0f;
 | |
|         public float translationY = 0.0f;
 | |
|         public float translationZ = 0.0f;
 | |
|         public boolean applyElevation = false;
 | |
|         public float elevation = 0.0f;
 | |
| 
 | |
|         public void copyFrom(Transform src) {
 | |
|             this.mApply = src.mApply;
 | |
|             this.rotation = src.rotation;
 | |
|             this.rotationX = src.rotationX;
 | |
|             this.rotationY = src.rotationY;
 | |
|             this.scaleX = src.scaleX;
 | |
|             this.scaleY = src.scaleY;
 | |
|             this.transformPivotX = src.transformPivotX;
 | |
|             this.transformPivotY = src.transformPivotY;
 | |
|             this.transformPivotTarget = src.transformPivotTarget;
 | |
|             this.translationX = src.translationX;
 | |
|             this.translationY = src.translationY;
 | |
|             this.translationZ = src.translationZ;
 | |
|             this.applyElevation = src.applyElevation;
 | |
|             this.elevation = src.elevation;
 | |
|         }
 | |
| 
 | |
|         static {
 | |
|             SparseIntArray sparseIntArray = new SparseIntArray();
 | |
|             mapToConstant = sparseIntArray;
 | |
|             sparseIntArray.append(R.styleable.Transform_android_rotation, 1);
 | |
|             mapToConstant.append(R.styleable.Transform_android_rotationX, 2);
 | |
|             mapToConstant.append(R.styleable.Transform_android_rotationY, 3);
 | |
|             mapToConstant.append(R.styleable.Transform_android_scaleX, 4);
 | |
|             mapToConstant.append(R.styleable.Transform_android_scaleY, 5);
 | |
|             mapToConstant.append(R.styleable.Transform_android_transformPivotX, 6);
 | |
|             mapToConstant.append(R.styleable.Transform_android_transformPivotY, 7);
 | |
|             mapToConstant.append(R.styleable.Transform_android_translationX, 8);
 | |
|             mapToConstant.append(R.styleable.Transform_android_translationY, 9);
 | |
|             mapToConstant.append(R.styleable.Transform_android_translationZ, 10);
 | |
|             mapToConstant.append(R.styleable.Transform_android_elevation, 11);
 | |
|             mapToConstant.append(R.styleable.Transform_transformPivotTarget, 12);
 | |
|         }
 | |
| 
 | |
|         void fillFromAttributeList(Context context, AttributeSet attrs) {
 | |
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.Transform);
 | |
|             this.mApply = true;
 | |
|             int indexCount = obtainStyledAttributes.getIndexCount();
 | |
|             for (int i = 0; i < indexCount; i++) {
 | |
|                 int index = obtainStyledAttributes.getIndex(i);
 | |
|                 switch (mapToConstant.get(index)) {
 | |
|                     case 1:
 | |
|                         this.rotation = obtainStyledAttributes.getFloat(index, this.rotation);
 | |
|                         break;
 | |
|                     case 2:
 | |
|                         this.rotationX = obtainStyledAttributes.getFloat(index, this.rotationX);
 | |
|                         break;
 | |
|                     case 3:
 | |
|                         this.rotationY = obtainStyledAttributes.getFloat(index, this.rotationY);
 | |
|                         break;
 | |
|                     case 4:
 | |
|                         this.scaleX = obtainStyledAttributes.getFloat(index, this.scaleX);
 | |
|                         break;
 | |
|                     case 5:
 | |
|                         this.scaleY = obtainStyledAttributes.getFloat(index, this.scaleY);
 | |
|                         break;
 | |
|                     case 6:
 | |
|                         this.transformPivotX = obtainStyledAttributes.getDimension(index, this.transformPivotX);
 | |
|                         break;
 | |
|                     case 7:
 | |
|                         this.transformPivotY = obtainStyledAttributes.getDimension(index, this.transformPivotY);
 | |
|                         break;
 | |
|                     case 8:
 | |
|                         this.translationX = obtainStyledAttributes.getDimension(index, this.translationX);
 | |
|                         break;
 | |
|                     case 9:
 | |
|                         this.translationY = obtainStyledAttributes.getDimension(index, this.translationY);
 | |
|                         break;
 | |
|                     case 10:
 | |
|                         this.translationZ = obtainStyledAttributes.getDimension(index, this.translationZ);
 | |
|                         break;
 | |
|                     case 11:
 | |
|                         this.applyElevation = true;
 | |
|                         this.elevation = obtainStyledAttributes.getDimension(index, this.elevation);
 | |
|                         break;
 | |
|                     case 12:
 | |
|                         this.transformPivotTarget = ConstraintSet.lookupID(obtainStyledAttributes, index, this.transformPivotTarget);
 | |
|                         break;
 | |
|                 }
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class PropertySet {
 | |
|         public boolean mApply = false;
 | |
|         public int visibility = 0;
 | |
|         public int mVisibilityMode = 0;
 | |
|         public float alpha = 1.0f;
 | |
|         public float mProgress = Float.NaN;
 | |
| 
 | |
|         public void copyFrom(PropertySet src) {
 | |
|             this.mApply = src.mApply;
 | |
|             this.visibility = src.visibility;
 | |
|             this.alpha = src.alpha;
 | |
|             this.mProgress = src.mProgress;
 | |
|             this.mVisibilityMode = src.mVisibilityMode;
 | |
|         }
 | |
| 
 | |
|         void fillFromAttributeList(Context context, AttributeSet attrs) {
 | |
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.PropertySet);
 | |
|             this.mApply = true;
 | |
|             int indexCount = obtainStyledAttributes.getIndexCount();
 | |
|             for (int i = 0; i < indexCount; i++) {
 | |
|                 int index = obtainStyledAttributes.getIndex(i);
 | |
|                 if (index == R.styleable.PropertySet_android_alpha) {
 | |
|                     this.alpha = obtainStyledAttributes.getFloat(index, this.alpha);
 | |
|                 } else if (index == R.styleable.PropertySet_android_visibility) {
 | |
|                     this.visibility = obtainStyledAttributes.getInt(index, this.visibility);
 | |
|                     this.visibility = ConstraintSet.VISIBILITY_FLAGS[this.visibility];
 | |
|                 } else if (index == R.styleable.PropertySet_visibilityMode) {
 | |
|                     this.mVisibilityMode = obtainStyledAttributes.getInt(index, this.mVisibilityMode);
 | |
|                 } else if (index == R.styleable.PropertySet_motionProgress) {
 | |
|                     this.mProgress = obtainStyledAttributes.getFloat(index, this.mProgress);
 | |
|                 }
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class Motion {
 | |
|         private static final int ANIMATE_CIRCLE_ANGLE_TO = 6;
 | |
|         private static final int ANIMATE_RELATIVE_TO = 5;
 | |
|         private static final int INTERPOLATOR_REFERENCE_ID = -2;
 | |
|         private static final int INTERPOLATOR_UNDEFINED = -3;
 | |
|         private static final int MOTION_DRAW_PATH = 4;
 | |
|         private static final int MOTION_STAGGER = 7;
 | |
|         private static final int PATH_MOTION_ARC = 2;
 | |
|         private static final int QUANTIZE_MOTION_INTERPOLATOR = 10;
 | |
|         private static final int QUANTIZE_MOTION_PHASE = 9;
 | |
|         private static final int QUANTIZE_MOTION_STEPS = 8;
 | |
|         private static final int SPLINE_STRING = -1;
 | |
|         private static final int TRANSITION_EASING = 3;
 | |
|         private static final int TRANSITION_PATH_ROTATE = 1;
 | |
|         private static SparseIntArray mapToConstant;
 | |
|         public boolean mApply = false;
 | |
|         public int mAnimateRelativeTo = -1;
 | |
|         public int mAnimateCircleAngleTo = 0;
 | |
|         public String mTransitionEasing = null;
 | |
|         public int mPathMotionArc = -1;
 | |
|         public int mDrawPath = 0;
 | |
|         public float mMotionStagger = Float.NaN;
 | |
|         public int mPolarRelativeTo = -1;
 | |
|         public float mPathRotate = Float.NaN;
 | |
|         public float mQuantizeMotionPhase = Float.NaN;
 | |
|         public int mQuantizeMotionSteps = -1;
 | |
|         public String mQuantizeInterpolatorString = null;
 | |
|         public int mQuantizeInterpolatorType = -3;
 | |
|         public int mQuantizeInterpolatorID = -1;
 | |
| 
 | |
|         public void copyFrom(Motion src) {
 | |
|             this.mApply = src.mApply;
 | |
|             this.mAnimateRelativeTo = src.mAnimateRelativeTo;
 | |
|             this.mTransitionEasing = src.mTransitionEasing;
 | |
|             this.mPathMotionArc = src.mPathMotionArc;
 | |
|             this.mDrawPath = src.mDrawPath;
 | |
|             this.mPathRotate = src.mPathRotate;
 | |
|             this.mMotionStagger = src.mMotionStagger;
 | |
|             this.mPolarRelativeTo = src.mPolarRelativeTo;
 | |
|         }
 | |
| 
 | |
|         static {
 | |
|             SparseIntArray sparseIntArray = new SparseIntArray();
 | |
|             mapToConstant = sparseIntArray;
 | |
|             sparseIntArray.append(R.styleable.Motion_motionPathRotate, 1);
 | |
|             mapToConstant.append(R.styleable.Motion_pathMotionArc, 2);
 | |
|             mapToConstant.append(R.styleable.Motion_transitionEasing, 3);
 | |
|             mapToConstant.append(R.styleable.Motion_drawPath, 4);
 | |
|             mapToConstant.append(R.styleable.Motion_animateRelativeTo, 5);
 | |
|             mapToConstant.append(R.styleable.Motion_animateCircleAngleTo, 6);
 | |
|             mapToConstant.append(R.styleable.Motion_motionStagger, 7);
 | |
|             mapToConstant.append(R.styleable.Motion_quantizeMotionSteps, 8);
 | |
|             mapToConstant.append(R.styleable.Motion_quantizeMotionPhase, 9);
 | |
|             mapToConstant.append(R.styleable.Motion_quantizeMotionInterpolator, 10);
 | |
|         }
 | |
| 
 | |
|         void fillFromAttributeList(Context context, AttributeSet attrs) {
 | |
|             TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.Motion);
 | |
|             this.mApply = true;
 | |
|             int indexCount = obtainStyledAttributes.getIndexCount();
 | |
|             for (int i = 0; i < indexCount; i++) {
 | |
|                 int index = obtainStyledAttributes.getIndex(i);
 | |
|                 switch (mapToConstant.get(index)) {
 | |
|                     case 1:
 | |
|                         this.mPathRotate = obtainStyledAttributes.getFloat(index, this.mPathRotate);
 | |
|                         break;
 | |
|                     case 2:
 | |
|                         this.mPathMotionArc = obtainStyledAttributes.getInt(index, this.mPathMotionArc);
 | |
|                         break;
 | |
|                     case 3:
 | |
|                         if (obtainStyledAttributes.peekValue(index).type == 3) {
 | |
|                             this.mTransitionEasing = obtainStyledAttributes.getString(index);
 | |
|                             break;
 | |
|                         } else {
 | |
|                             this.mTransitionEasing = Easing.NAMED_EASING[obtainStyledAttributes.getInteger(index, 0)];
 | |
|                             break;
 | |
|                         }
 | |
|                     case 4:
 | |
|                         this.mDrawPath = obtainStyledAttributes.getInt(index, 0);
 | |
|                         break;
 | |
|                     case 5:
 | |
|                         this.mAnimateRelativeTo = ConstraintSet.lookupID(obtainStyledAttributes, index, this.mAnimateRelativeTo);
 | |
|                         break;
 | |
|                     case 6:
 | |
|                         this.mAnimateCircleAngleTo = obtainStyledAttributes.getInteger(index, this.mAnimateCircleAngleTo);
 | |
|                         break;
 | |
|                     case 7:
 | |
|                         this.mMotionStagger = obtainStyledAttributes.getFloat(index, this.mMotionStagger);
 | |
|                         break;
 | |
|                     case 8:
 | |
|                         this.mQuantizeMotionSteps = obtainStyledAttributes.getInteger(index, this.mQuantizeMotionSteps);
 | |
|                         break;
 | |
|                     case 9:
 | |
|                         this.mQuantizeMotionPhase = obtainStyledAttributes.getFloat(index, this.mQuantizeMotionPhase);
 | |
|                         break;
 | |
|                     case 10:
 | |
|                         TypedValue peekValue = obtainStyledAttributes.peekValue(index);
 | |
|                         if (peekValue.type == 1) {
 | |
|                             int resourceId = obtainStyledAttributes.getResourceId(index, -1);
 | |
|                             this.mQuantizeInterpolatorID = resourceId;
 | |
|                             if (resourceId != -1) {
 | |
|                                 this.mQuantizeInterpolatorType = -2;
 | |
|                                 break;
 | |
|                             } else {
 | |
|                                 break;
 | |
|                             }
 | |
|                         } else if (peekValue.type == 3) {
 | |
|                             String string = obtainStyledAttributes.getString(index);
 | |
|                             this.mQuantizeInterpolatorString = string;
 | |
|                             if (string.indexOf("/") > 0) {
 | |
|                                 this.mQuantizeInterpolatorID = obtainStyledAttributes.getResourceId(index, -1);
 | |
|                                 this.mQuantizeInterpolatorType = -2;
 | |
|                                 break;
 | |
|                             } else {
 | |
|                                 this.mQuantizeInterpolatorType = -1;
 | |
|                                 break;
 | |
|                             }
 | |
|                         } else {
 | |
|                             this.mQuantizeInterpolatorType = obtainStyledAttributes.getInteger(index, this.mQuantizeInterpolatorID);
 | |
|                             break;
 | |
|                         }
 | |
|                 }
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class Constraint {
 | |
|         Delta mDelta;
 | |
|         String mTargetString;
 | |
|         int mViewId;
 | |
|         public final PropertySet propertySet = new PropertySet();
 | |
|         public final Motion motion = new Motion();
 | |
|         public final Layout layout = new Layout();
 | |
|         public final Transform transform = new Transform();
 | |
|         public HashMap<String, ConstraintAttribute> mCustomConstraints = new HashMap<>();
 | |
| 
 | |
|         static class Delta {
 | |
|             private static final int INITIAL_BOOLEAN = 4;
 | |
|             private static final int INITIAL_FLOAT = 10;
 | |
|             private static final int INITIAL_INT = 10;
 | |
|             private static final int INITIAL_STRING = 5;
 | |
|             int[] mTypeInt = new int[10];
 | |
|             int[] mValueInt = new int[10];
 | |
|             int mCountInt = 0;
 | |
|             int[] mTypeFloat = new int[10];
 | |
|             float[] mValueFloat = new float[10];
 | |
|             int mCountFloat = 0;
 | |
|             int[] mTypeString = new int[5];
 | |
|             String[] mValueString = new String[5];
 | |
|             int mCountString = 0;
 | |
|             int[] mTypeBoolean = new int[4];
 | |
|             boolean[] mValueBoolean = new boolean[4];
 | |
|             int mCountBoolean = 0;
 | |
| 
 | |
|             Delta() {
 | |
|             }
 | |
| 
 | |
|             void add(int type, int value) {
 | |
|                 int i = this.mCountInt;
 | |
|                 int[] iArr = this.mTypeInt;
 | |
|                 if (i >= iArr.length) {
 | |
|                     this.mTypeInt = Arrays.copyOf(iArr, iArr.length * 2);
 | |
|                     int[] iArr2 = this.mValueInt;
 | |
|                     this.mValueInt = Arrays.copyOf(iArr2, iArr2.length * 2);
 | |
|                 }
 | |
|                 int[] iArr3 = this.mTypeInt;
 | |
|                 int i2 = this.mCountInt;
 | |
|                 iArr3[i2] = type;
 | |
|                 int[] iArr4 = this.mValueInt;
 | |
|                 this.mCountInt = i2 + 1;
 | |
|                 iArr4[i2] = value;
 | |
|             }
 | |
| 
 | |
|             void add(int type, float value) {
 | |
|                 int i = this.mCountFloat;
 | |
|                 int[] iArr = this.mTypeFloat;
 | |
|                 if (i >= iArr.length) {
 | |
|                     this.mTypeFloat = Arrays.copyOf(iArr, iArr.length * 2);
 | |
|                     float[] fArr = this.mValueFloat;
 | |
|                     this.mValueFloat = Arrays.copyOf(fArr, fArr.length * 2);
 | |
|                 }
 | |
|                 int[] iArr2 = this.mTypeFloat;
 | |
|                 int i2 = this.mCountFloat;
 | |
|                 iArr2[i2] = type;
 | |
|                 float[] fArr2 = this.mValueFloat;
 | |
|                 this.mCountFloat = i2 + 1;
 | |
|                 fArr2[i2] = value;
 | |
|             }
 | |
| 
 | |
|             void add(int type, String value) {
 | |
|                 int i = this.mCountString;
 | |
|                 int[] iArr = this.mTypeString;
 | |
|                 if (i >= iArr.length) {
 | |
|                     this.mTypeString = Arrays.copyOf(iArr, iArr.length * 2);
 | |
|                     String[] strArr = this.mValueString;
 | |
|                     this.mValueString = (String[]) Arrays.copyOf(strArr, strArr.length * 2);
 | |
|                 }
 | |
|                 int[] iArr2 = this.mTypeString;
 | |
|                 int i2 = this.mCountString;
 | |
|                 iArr2[i2] = type;
 | |
|                 String[] strArr2 = this.mValueString;
 | |
|                 this.mCountString = i2 + 1;
 | |
|                 strArr2[i2] = value;
 | |
|             }
 | |
| 
 | |
|             void add(int type, boolean value) {
 | |
|                 int i = this.mCountBoolean;
 | |
|                 int[] iArr = this.mTypeBoolean;
 | |
|                 if (i >= iArr.length) {
 | |
|                     this.mTypeBoolean = Arrays.copyOf(iArr, iArr.length * 2);
 | |
|                     boolean[] zArr = this.mValueBoolean;
 | |
|                     this.mValueBoolean = Arrays.copyOf(zArr, zArr.length * 2);
 | |
|                 }
 | |
|                 int[] iArr2 = this.mTypeBoolean;
 | |
|                 int i2 = this.mCountBoolean;
 | |
|                 iArr2[i2] = type;
 | |
|                 boolean[] zArr2 = this.mValueBoolean;
 | |
|                 this.mCountBoolean = i2 + 1;
 | |
|                 zArr2[i2] = value;
 | |
|             }
 | |
| 
 | |
|             void applyDelta(Constraint c) {
 | |
|                 for (int i = 0; i < this.mCountInt; i++) {
 | |
|                     ConstraintSet.setDeltaValue(c, this.mTypeInt[i], this.mValueInt[i]);
 | |
|                 }
 | |
|                 for (int i2 = 0; i2 < this.mCountFloat; i2++) {
 | |
|                     ConstraintSet.setDeltaValue(c, this.mTypeFloat[i2], this.mValueFloat[i2]);
 | |
|                 }
 | |
|                 for (int i3 = 0; i3 < this.mCountString; i3++) {
 | |
|                     ConstraintSet.setDeltaValue(c, this.mTypeString[i3], this.mValueString[i3]);
 | |
|                 }
 | |
|                 for (int i4 = 0; i4 < this.mCountBoolean; i4++) {
 | |
|                     ConstraintSet.setDeltaValue(c, this.mTypeBoolean[i4], this.mValueBoolean[i4]);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             void printDelta(String tag) {
 | |
|                 Log.v(tag, "int");
 | |
|                 for (int i = 0; i < this.mCountInt; i++) {
 | |
|                     Log.v(tag, this.mTypeInt[i] + " = " + this.mValueInt[i]);
 | |
|                 }
 | |
|                 Log.v(tag, TypedValues.Custom.S_FLOAT);
 | |
|                 for (int i2 = 0; i2 < this.mCountFloat; i2++) {
 | |
|                     Log.v(tag, this.mTypeFloat[i2] + " = " + this.mValueFloat[i2]);
 | |
|                 }
 | |
|                 Log.v(tag, "strings");
 | |
|                 for (int i3 = 0; i3 < this.mCountString; i3++) {
 | |
|                     Log.v(tag, this.mTypeString[i3] + " = " + this.mValueString[i3]);
 | |
|                 }
 | |
|                 Log.v(tag, TypedValues.Custom.S_BOOLEAN);
 | |
|                 for (int i4 = 0; i4 < this.mCountBoolean; i4++) {
 | |
|                     Log.v(tag, this.mTypeBoolean[i4] + " = " + this.mValueBoolean[i4]);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void applyDelta(Constraint c) {
 | |
|             Delta delta = this.mDelta;
 | |
|             if (delta != null) {
 | |
|                 delta.applyDelta(c);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void printDelta(String tag) {
 | |
|             Delta delta = this.mDelta;
 | |
|             if (delta != null) {
 | |
|                 delta.printDelta(tag);
 | |
|             } else {
 | |
|                 Log.v(tag, "DELTA IS NULL");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private ConstraintAttribute get(String attributeName, ConstraintAttribute.AttributeType attributeType) {
 | |
|             if (this.mCustomConstraints.containsKey(attributeName)) {
 | |
|                 ConstraintAttribute constraintAttribute = this.mCustomConstraints.get(attributeName);
 | |
|                 if (constraintAttribute.getType() == attributeType) {
 | |
|                     return constraintAttribute;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException("ConstraintAttribute is already a " + constraintAttribute.getType().name());
 | |
|             }
 | |
|             ConstraintAttribute constraintAttribute2 = new ConstraintAttribute(attributeName, attributeType);
 | |
|             this.mCustomConstraints.put(attributeName, constraintAttribute2);
 | |
|             return constraintAttribute2;
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void setStringValue(String attributeName, String value) {
 | |
|             get(attributeName, ConstraintAttribute.AttributeType.STRING_TYPE).setStringValue(value);
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void setFloatValue(String attributeName, float value) {
 | |
|             get(attributeName, ConstraintAttribute.AttributeType.FLOAT_TYPE).setFloatValue(value);
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void setIntValue(String attributeName, int value) {
 | |
|             get(attributeName, ConstraintAttribute.AttributeType.INT_TYPE).setIntValue(value);
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void setColorValue(String attributeName, int value) {
 | |
|             get(attributeName, ConstraintAttribute.AttributeType.COLOR_TYPE).setColorValue(value);
 | |
|         }
 | |
| 
 | |
|         /* renamed from: clone, reason: merged with bridge method [inline-methods] */
 | |
|         public Constraint m51clone() {
 | |
|             Constraint constraint = new Constraint();
 | |
|             constraint.layout.copyFrom(this.layout);
 | |
|             constraint.motion.copyFrom(this.motion);
 | |
|             constraint.propertySet.copyFrom(this.propertySet);
 | |
|             constraint.transform.copyFrom(this.transform);
 | |
|             constraint.mViewId = this.mViewId;
 | |
|             constraint.mDelta = this.mDelta;
 | |
|             return constraint;
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void fillFromConstraints(ConstraintHelper helper, int viewId, Constraints.LayoutParams param) {
 | |
|             fillFromConstraints(viewId, param);
 | |
|             if (helper instanceof Barrier) {
 | |
|                 this.layout.mHelperType = 1;
 | |
|                 Barrier barrier = (Barrier) helper;
 | |
|                 this.layout.mBarrierDirection = barrier.getType();
 | |
|                 this.layout.mReferenceIds = barrier.getReferencedIds();
 | |
|                 this.layout.mBarrierMargin = barrier.getMargin();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void fillFromConstraints(int viewId, Constraints.LayoutParams param) {
 | |
|             fillFrom(viewId, param);
 | |
|             this.propertySet.alpha = param.alpha;
 | |
|             this.transform.rotation = param.rotation;
 | |
|             this.transform.rotationX = param.rotationX;
 | |
|             this.transform.rotationY = param.rotationY;
 | |
|             this.transform.scaleX = param.scaleX;
 | |
|             this.transform.scaleY = param.scaleY;
 | |
|             this.transform.transformPivotX = param.transformPivotX;
 | |
|             this.transform.transformPivotY = param.transformPivotY;
 | |
|             this.transform.translationX = param.translationX;
 | |
|             this.transform.translationY = param.translationY;
 | |
|             this.transform.translationZ = param.translationZ;
 | |
|             this.transform.elevation = param.elevation;
 | |
|             this.transform.applyElevation = param.applyElevation;
 | |
|         }
 | |
| 
 | |
|         /* JADX INFO: Access modifiers changed from: private */
 | |
|         public void fillFrom(int viewId, ConstraintLayout.LayoutParams param) {
 | |
|             this.mViewId = viewId;
 | |
|             this.layout.leftToLeft = param.leftToLeft;
 | |
|             this.layout.leftToRight = param.leftToRight;
 | |
|             this.layout.rightToLeft = param.rightToLeft;
 | |
|             this.layout.rightToRight = param.rightToRight;
 | |
|             this.layout.topToTop = param.topToTop;
 | |
|             this.layout.topToBottom = param.topToBottom;
 | |
|             this.layout.bottomToTop = param.bottomToTop;
 | |
|             this.layout.bottomToBottom = param.bottomToBottom;
 | |
|             this.layout.baselineToBaseline = param.baselineToBaseline;
 | |
|             this.layout.baselineToTop = param.baselineToTop;
 | |
|             this.layout.baselineToBottom = param.baselineToBottom;
 | |
|             this.layout.startToEnd = param.startToEnd;
 | |
|             this.layout.startToStart = param.startToStart;
 | |
|             this.layout.endToStart = param.endToStart;
 | |
|             this.layout.endToEnd = param.endToEnd;
 | |
|             this.layout.horizontalBias = param.horizontalBias;
 | |
|             this.layout.verticalBias = param.verticalBias;
 | |
|             this.layout.dimensionRatio = param.dimensionRatio;
 | |
|             this.layout.circleConstraint = param.circleConstraint;
 | |
|             this.layout.circleRadius = param.circleRadius;
 | |
|             this.layout.circleAngle = param.circleAngle;
 | |
|             this.layout.editorAbsoluteX = param.editorAbsoluteX;
 | |
|             this.layout.editorAbsoluteY = param.editorAbsoluteY;
 | |
|             this.layout.orientation = param.orientation;
 | |
|             this.layout.guidePercent = param.guidePercent;
 | |
|             this.layout.guideBegin = param.guideBegin;
 | |
|             this.layout.guideEnd = param.guideEnd;
 | |
|             this.layout.mWidth = param.width;
 | |
|             this.layout.mHeight = param.height;
 | |
|             this.layout.leftMargin = param.leftMargin;
 | |
|             this.layout.rightMargin = param.rightMargin;
 | |
|             this.layout.topMargin = param.topMargin;
 | |
|             this.layout.bottomMargin = param.bottomMargin;
 | |
|             this.layout.baselineMargin = param.baselineMargin;
 | |
|             this.layout.verticalWeight = param.verticalWeight;
 | |
|             this.layout.horizontalWeight = param.horizontalWeight;
 | |
|             this.layout.verticalChainStyle = param.verticalChainStyle;
 | |
|             this.layout.horizontalChainStyle = param.horizontalChainStyle;
 | |
|             this.layout.constrainedWidth = param.constrainedWidth;
 | |
|             this.layout.constrainedHeight = param.constrainedHeight;
 | |
|             this.layout.widthDefault = param.matchConstraintDefaultWidth;
 | |
|             this.layout.heightDefault = param.matchConstraintDefaultHeight;
 | |
|             this.layout.widthMax = param.matchConstraintMaxWidth;
 | |
|             this.layout.heightMax = param.matchConstraintMaxHeight;
 | |
|             this.layout.widthMin = param.matchConstraintMinWidth;
 | |
|             this.layout.heightMin = param.matchConstraintMinHeight;
 | |
|             this.layout.widthPercent = param.matchConstraintPercentWidth;
 | |
|             this.layout.heightPercent = param.matchConstraintPercentHeight;
 | |
|             this.layout.mConstraintTag = param.constraintTag;
 | |
|             this.layout.goneTopMargin = param.goneTopMargin;
 | |
|             this.layout.goneBottomMargin = param.goneBottomMargin;
 | |
|             this.layout.goneLeftMargin = param.goneLeftMargin;
 | |
|             this.layout.goneRightMargin = param.goneRightMargin;
 | |
|             this.layout.goneStartMargin = param.goneStartMargin;
 | |
|             this.layout.goneEndMargin = param.goneEndMargin;
 | |
|             this.layout.goneBaselineMargin = param.goneBaselineMargin;
 | |
|             this.layout.mWrapBehavior = param.wrapBehaviorInParent;
 | |
|             this.layout.endMargin = param.getMarginEnd();
 | |
|             this.layout.startMargin = param.getMarginStart();
 | |
|         }
 | |
| 
 | |
|         public void applyTo(ConstraintLayout.LayoutParams param) {
 | |
|             param.leftToLeft = this.layout.leftToLeft;
 | |
|             param.leftToRight = this.layout.leftToRight;
 | |
|             param.rightToLeft = this.layout.rightToLeft;
 | |
|             param.rightToRight = this.layout.rightToRight;
 | |
|             param.topToTop = this.layout.topToTop;
 | |
|             param.topToBottom = this.layout.topToBottom;
 | |
|             param.bottomToTop = this.layout.bottomToTop;
 | |
|             param.bottomToBottom = this.layout.bottomToBottom;
 | |
|             param.baselineToBaseline = this.layout.baselineToBaseline;
 | |
|             param.baselineToTop = this.layout.baselineToTop;
 | |
|             param.baselineToBottom = this.layout.baselineToBottom;
 | |
|             param.startToEnd = this.layout.startToEnd;
 | |
|             param.startToStart = this.layout.startToStart;
 | |
|             param.endToStart = this.layout.endToStart;
 | |
|             param.endToEnd = this.layout.endToEnd;
 | |
|             param.leftMargin = this.layout.leftMargin;
 | |
|             param.rightMargin = this.layout.rightMargin;
 | |
|             param.topMargin = this.layout.topMargin;
 | |
|             param.bottomMargin = this.layout.bottomMargin;
 | |
|             param.goneStartMargin = this.layout.goneStartMargin;
 | |
|             param.goneEndMargin = this.layout.goneEndMargin;
 | |
|             param.goneTopMargin = this.layout.goneTopMargin;
 | |
|             param.goneBottomMargin = this.layout.goneBottomMargin;
 | |
|             param.horizontalBias = this.layout.horizontalBias;
 | |
|             param.verticalBias = this.layout.verticalBias;
 | |
|             param.circleConstraint = this.layout.circleConstraint;
 | |
|             param.circleRadius = this.layout.circleRadius;
 | |
|             param.circleAngle = this.layout.circleAngle;
 | |
|             param.dimensionRatio = this.layout.dimensionRatio;
 | |
|             param.editorAbsoluteX = this.layout.editorAbsoluteX;
 | |
|             param.editorAbsoluteY = this.layout.editorAbsoluteY;
 | |
|             param.verticalWeight = this.layout.verticalWeight;
 | |
|             param.horizontalWeight = this.layout.horizontalWeight;
 | |
|             param.verticalChainStyle = this.layout.verticalChainStyle;
 | |
|             param.horizontalChainStyle = this.layout.horizontalChainStyle;
 | |
|             param.constrainedWidth = this.layout.constrainedWidth;
 | |
|             param.constrainedHeight = this.layout.constrainedHeight;
 | |
|             param.matchConstraintDefaultWidth = this.layout.widthDefault;
 | |
|             param.matchConstraintDefaultHeight = this.layout.heightDefault;
 | |
|             param.matchConstraintMaxWidth = this.layout.widthMax;
 | |
|             param.matchConstraintMaxHeight = this.layout.heightMax;
 | |
|             param.matchConstraintMinWidth = this.layout.widthMin;
 | |
|             param.matchConstraintMinHeight = this.layout.heightMin;
 | |
|             param.matchConstraintPercentWidth = this.layout.widthPercent;
 | |
|             param.matchConstraintPercentHeight = this.layout.heightPercent;
 | |
|             param.orientation = this.layout.orientation;
 | |
|             param.guidePercent = this.layout.guidePercent;
 | |
|             param.guideBegin = this.layout.guideBegin;
 | |
|             param.guideEnd = this.layout.guideEnd;
 | |
|             param.width = this.layout.mWidth;
 | |
|             param.height = this.layout.mHeight;
 | |
|             if (this.layout.mConstraintTag != null) {
 | |
|                 param.constraintTag = this.layout.mConstraintTag;
 | |
|             }
 | |
|             param.wrapBehaviorInParent = this.layout.mWrapBehavior;
 | |
|             param.setMarginStart(this.layout.startMargin);
 | |
|             param.setMarginEnd(this.layout.endMargin);
 | |
|             param.validate();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void clone(Context context, int constraintLayoutId) {
 | |
|         clone((ConstraintLayout) LayoutInflater.from(context).inflate(constraintLayoutId, (ViewGroup) null));
 | |
|     }
 | |
| 
 | |
|     public void clone(ConstraintSet set) {
 | |
|         this.mConstraints.clear();
 | |
|         for (Integer num : set.mConstraints.keySet()) {
 | |
|             Constraint constraint = set.mConstraints.get(num);
 | |
|             if (constraint != null) {
 | |
|                 this.mConstraints.put(num, constraint.m51clone());
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void clone(ConstraintLayout constraintLayout) {
 | |
|         int childCount = constraintLayout.getChildCount();
 | |
|         this.mConstraints.clear();
 | |
|         for (int i = 0; i < childCount; i++) {
 | |
|             View childAt = constraintLayout.getChildAt(i);
 | |
|             ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) childAt.getLayoutParams();
 | |
|             int id = childAt.getId();
 | |
|             if (this.mForceId && id == -1) {
 | |
|                 throw new RuntimeException("All children of ConstraintLayout must have ids to use ConstraintSet");
 | |
|             }
 | |
|             if (!this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|                 this.mConstraints.put(Integer.valueOf(id), new Constraint());
 | |
|             }
 | |
|             Constraint constraint = this.mConstraints.get(Integer.valueOf(id));
 | |
|             if (constraint != null) {
 | |
|                 constraint.mCustomConstraints = ConstraintAttribute.extractAttributes(this.mSavedAttributes, childAt);
 | |
|                 constraint.fillFrom(id, layoutParams);
 | |
|                 constraint.propertySet.visibility = childAt.getVisibility();
 | |
|                 constraint.propertySet.alpha = childAt.getAlpha();
 | |
|                 constraint.transform.rotation = childAt.getRotation();
 | |
|                 constraint.transform.rotationX = childAt.getRotationX();
 | |
|                 constraint.transform.rotationY = childAt.getRotationY();
 | |
|                 constraint.transform.scaleX = childAt.getScaleX();
 | |
|                 constraint.transform.scaleY = childAt.getScaleY();
 | |
|                 float pivotX = childAt.getPivotX();
 | |
|                 float pivotY = childAt.getPivotY();
 | |
|                 if (pivotX != 0.0d || pivotY != 0.0d) {
 | |
|                     constraint.transform.transformPivotX = pivotX;
 | |
|                     constraint.transform.transformPivotY = pivotY;
 | |
|                 }
 | |
|                 constraint.transform.translationX = childAt.getTranslationX();
 | |
|                 constraint.transform.translationY = childAt.getTranslationY();
 | |
|                 constraint.transform.translationZ = childAt.getTranslationZ();
 | |
|                 if (constraint.transform.applyElevation) {
 | |
|                     constraint.transform.elevation = childAt.getElevation();
 | |
|                 }
 | |
|                 if (childAt instanceof Barrier) {
 | |
|                     Barrier barrier = (Barrier) childAt;
 | |
|                     constraint.layout.mBarrierAllowsGoneWidgets = barrier.getAllowsGoneWidget();
 | |
|                     constraint.layout.mReferenceIds = barrier.getReferencedIds();
 | |
|                     constraint.layout.mBarrierDirection = barrier.getType();
 | |
|                     constraint.layout.mBarrierMargin = barrier.getMargin();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void clone(Constraints constraints) {
 | |
|         int childCount = constraints.getChildCount();
 | |
|         this.mConstraints.clear();
 | |
|         for (int i = 0; i < childCount; i++) {
 | |
|             View childAt = constraints.getChildAt(i);
 | |
|             Constraints.LayoutParams layoutParams = (Constraints.LayoutParams) childAt.getLayoutParams();
 | |
|             int id = childAt.getId();
 | |
|             if (this.mForceId && id == -1) {
 | |
|                 throw new RuntimeException("All children of ConstraintLayout must have ids to use ConstraintSet");
 | |
|             }
 | |
|             if (!this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|                 this.mConstraints.put(Integer.valueOf(id), new Constraint());
 | |
|             }
 | |
|             Constraint constraint = this.mConstraints.get(Integer.valueOf(id));
 | |
|             if (constraint != null) {
 | |
|                 if (childAt instanceof ConstraintHelper) {
 | |
|                     constraint.fillFromConstraints((ConstraintHelper) childAt, id, layoutParams);
 | |
|                 }
 | |
|                 constraint.fillFromConstraints(id, layoutParams);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void applyTo(ConstraintLayout constraintLayout) {
 | |
|         applyToInternal(constraintLayout, true);
 | |
|         constraintLayout.setConstraintSet(null);
 | |
|         constraintLayout.requestLayout();
 | |
|     }
 | |
| 
 | |
|     public void applyToWithoutCustom(ConstraintLayout constraintLayout) {
 | |
|         applyToInternal(constraintLayout, false);
 | |
|         constraintLayout.setConstraintSet(null);
 | |
|     }
 | |
| 
 | |
|     public void applyCustomAttributes(ConstraintLayout constraintLayout) {
 | |
|         Constraint constraint;
 | |
|         int childCount = constraintLayout.getChildCount();
 | |
|         for (int i = 0; i < childCount; i++) {
 | |
|             View childAt = constraintLayout.getChildAt(i);
 | |
|             int id = childAt.getId();
 | |
|             if (!this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|                 Log.w(TAG, "id unknown " + Debug.getName(childAt));
 | |
|             } else {
 | |
|                 if (this.mForceId && id == -1) {
 | |
|                     throw new RuntimeException("All children of ConstraintLayout must have ids to use ConstraintSet");
 | |
|                 }
 | |
|                 if (this.mConstraints.containsKey(Integer.valueOf(id)) && (constraint = this.mConstraints.get(Integer.valueOf(id))) != null) {
 | |
|                     ConstraintAttribute.setAttributes(childAt, constraint.mCustomConstraints);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void applyToHelper(ConstraintHelper helper, ConstraintWidget child, ConstraintLayout.LayoutParams layoutParams, SparseArray<ConstraintWidget> mapIdToWidget) {
 | |
|         Constraint constraint;
 | |
|         int id = helper.getId();
 | |
|         if (this.mConstraints.containsKey(Integer.valueOf(id)) && (constraint = this.mConstraints.get(Integer.valueOf(id))) != null && (child instanceof HelperWidget)) {
 | |
|             helper.loadParameters(constraint, (HelperWidget) child, layoutParams, mapIdToWidget);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void applyToLayoutParams(int id, ConstraintLayout.LayoutParams layoutParams) {
 | |
|         Constraint constraint;
 | |
|         if (!this.mConstraints.containsKey(Integer.valueOf(id)) || (constraint = this.mConstraints.get(Integer.valueOf(id))) == null) {
 | |
|             return;
 | |
|         }
 | |
|         constraint.applyTo(layoutParams);
 | |
|     }
 | |
| 
 | |
|     void applyToInternal(ConstraintLayout constraintLayout, boolean applyPostLayout) {
 | |
|         int childCount = constraintLayout.getChildCount();
 | |
|         HashSet hashSet = new HashSet(this.mConstraints.keySet());
 | |
|         for (int i = 0; i < childCount; i++) {
 | |
|             View childAt = constraintLayout.getChildAt(i);
 | |
|             int id = childAt.getId();
 | |
|             if (!this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|                 Log.w(TAG, "id unknown " + Debug.getName(childAt));
 | |
|             } else {
 | |
|                 if (this.mForceId && id == -1) {
 | |
|                     throw new RuntimeException("All children of ConstraintLayout must have ids to use ConstraintSet");
 | |
|                 }
 | |
|                 if (id != -1) {
 | |
|                     if (this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|                         hashSet.remove(Integer.valueOf(id));
 | |
|                         Constraint constraint = this.mConstraints.get(Integer.valueOf(id));
 | |
|                         if (constraint != null) {
 | |
|                             if (childAt instanceof Barrier) {
 | |
|                                 constraint.layout.mHelperType = 1;
 | |
|                                 Barrier barrier = (Barrier) childAt;
 | |
|                                 barrier.setId(id);
 | |
|                                 barrier.setType(constraint.layout.mBarrierDirection);
 | |
|                                 barrier.setMargin(constraint.layout.mBarrierMargin);
 | |
|                                 barrier.setAllowsGoneWidget(constraint.layout.mBarrierAllowsGoneWidgets);
 | |
|                                 if (constraint.layout.mReferenceIds != null) {
 | |
|                                     barrier.setReferencedIds(constraint.layout.mReferenceIds);
 | |
|                                 } else if (constraint.layout.mReferenceIdString != null) {
 | |
|                                     constraint.layout.mReferenceIds = convertReferenceString(barrier, constraint.layout.mReferenceIdString);
 | |
|                                     barrier.setReferencedIds(constraint.layout.mReferenceIds);
 | |
|                                 }
 | |
|                             }
 | |
|                             ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) childAt.getLayoutParams();
 | |
|                             layoutParams.validate();
 | |
|                             constraint.applyTo(layoutParams);
 | |
|                             if (applyPostLayout) {
 | |
|                                 ConstraintAttribute.setAttributes(childAt, constraint.mCustomConstraints);
 | |
|                             }
 | |
|                             childAt.setLayoutParams(layoutParams);
 | |
|                             if (constraint.propertySet.mVisibilityMode == 0) {
 | |
|                                 childAt.setVisibility(constraint.propertySet.visibility);
 | |
|                             }
 | |
|                             childAt.setAlpha(constraint.propertySet.alpha);
 | |
|                             childAt.setRotation(constraint.transform.rotation);
 | |
|                             childAt.setRotationX(constraint.transform.rotationX);
 | |
|                             childAt.setRotationY(constraint.transform.rotationY);
 | |
|                             childAt.setScaleX(constraint.transform.scaleX);
 | |
|                             childAt.setScaleY(constraint.transform.scaleY);
 | |
|                             if (constraint.transform.transformPivotTarget != -1) {
 | |
|                                 if (((View) childAt.getParent()).findViewById(constraint.transform.transformPivotTarget) != null) {
 | |
|                                     float top = (r4.getTop() + r4.getBottom()) / 2.0f;
 | |
|                                     float left = (r4.getLeft() + r4.getRight()) / 2.0f;
 | |
|                                     if (childAt.getRight() - childAt.getLeft() > 0 && childAt.getBottom() - childAt.getTop() > 0) {
 | |
|                                         childAt.setPivotX(left - childAt.getLeft());
 | |
|                                         childAt.setPivotY(top - childAt.getTop());
 | |
|                                     }
 | |
|                                 }
 | |
|                             } else {
 | |
|                                 if (!Float.isNaN(constraint.transform.transformPivotX)) {
 | |
|                                     childAt.setPivotX(constraint.transform.transformPivotX);
 | |
|                                 }
 | |
|                                 if (!Float.isNaN(constraint.transform.transformPivotY)) {
 | |
|                                     childAt.setPivotY(constraint.transform.transformPivotY);
 | |
|                                 }
 | |
|                             }
 | |
|                             childAt.setTranslationX(constraint.transform.translationX);
 | |
|                             childAt.setTranslationY(constraint.transform.translationY);
 | |
|                             childAt.setTranslationZ(constraint.transform.translationZ);
 | |
|                             if (constraint.transform.applyElevation) {
 | |
|                                 childAt.setElevation(constraint.transform.elevation);
 | |
|                             }
 | |
|                         }
 | |
|                     } else {
 | |
|                         Log.v(TAG, "WARNING NO CONSTRAINTS for view " + id);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         Iterator it = hashSet.iterator();
 | |
|         while (it.hasNext()) {
 | |
|             Integer num = (Integer) it.next();
 | |
|             Constraint constraint2 = this.mConstraints.get(num);
 | |
|             if (constraint2 != null) {
 | |
|                 if (constraint2.layout.mHelperType == 1) {
 | |
|                     Barrier barrier2 = new Barrier(constraintLayout.getContext());
 | |
|                     barrier2.setId(num.intValue());
 | |
|                     if (constraint2.layout.mReferenceIds != null) {
 | |
|                         barrier2.setReferencedIds(constraint2.layout.mReferenceIds);
 | |
|                     } else if (constraint2.layout.mReferenceIdString != null) {
 | |
|                         constraint2.layout.mReferenceIds = convertReferenceString(barrier2, constraint2.layout.mReferenceIdString);
 | |
|                         barrier2.setReferencedIds(constraint2.layout.mReferenceIds);
 | |
|                     }
 | |
|                     barrier2.setType(constraint2.layout.mBarrierDirection);
 | |
|                     barrier2.setMargin(constraint2.layout.mBarrierMargin);
 | |
|                     ConstraintLayout.LayoutParams generateDefaultLayoutParams = constraintLayout.generateDefaultLayoutParams();
 | |
|                     barrier2.validateParams();
 | |
|                     constraint2.applyTo(generateDefaultLayoutParams);
 | |
|                     constraintLayout.addView(barrier2, generateDefaultLayoutParams);
 | |
|                 }
 | |
|                 if (constraint2.layout.mIsGuideline) {
 | |
|                     Guideline guideline = new Guideline(constraintLayout.getContext());
 | |
|                     guideline.setId(num.intValue());
 | |
|                     ConstraintLayout.LayoutParams generateDefaultLayoutParams2 = constraintLayout.generateDefaultLayoutParams();
 | |
|                     constraint2.applyTo(generateDefaultLayoutParams2);
 | |
|                     constraintLayout.addView(guideline, generateDefaultLayoutParams2);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         for (int i2 = 0; i2 < childCount; i2++) {
 | |
|             View childAt2 = constraintLayout.getChildAt(i2);
 | |
|             if (childAt2 instanceof ConstraintHelper) {
 | |
|                 ((ConstraintHelper) childAt2).applyLayoutFeaturesInConstraintSet(constraintLayout);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void center(int centerID, int firstID, int firstSide, int firstMargin, int secondId, int secondSide, int secondMargin, float bias) {
 | |
|         if (firstMargin < 0) {
 | |
|             throw new IllegalArgumentException("margin must be > 0");
 | |
|         }
 | |
|         if (secondMargin < 0) {
 | |
|             throw new IllegalArgumentException("margin must be > 0");
 | |
|         }
 | |
|         if (bias <= 0.0f || bias > 1.0f) {
 | |
|             throw new IllegalArgumentException("bias must be between 0 and 1 inclusive");
 | |
|         }
 | |
|         if (firstSide == 1 || firstSide == 2) {
 | |
|             connect(centerID, 1, firstID, firstSide, firstMargin);
 | |
|             connect(centerID, 2, secondId, secondSide, secondMargin);
 | |
|             Constraint constraint = this.mConstraints.get(Integer.valueOf(centerID));
 | |
|             if (constraint != null) {
 | |
|                 constraint.layout.horizontalBias = bias;
 | |
|                 return;
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         if (firstSide == 6 || firstSide == 7) {
 | |
|             connect(centerID, 6, firstID, firstSide, firstMargin);
 | |
|             connect(centerID, 7, secondId, secondSide, secondMargin);
 | |
|             Constraint constraint2 = this.mConstraints.get(Integer.valueOf(centerID));
 | |
|             if (constraint2 != null) {
 | |
|                 constraint2.layout.horizontalBias = bias;
 | |
|                 return;
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         connect(centerID, 3, firstID, firstSide, firstMargin);
 | |
|         connect(centerID, 4, secondId, secondSide, secondMargin);
 | |
|         Constraint constraint3 = this.mConstraints.get(Integer.valueOf(centerID));
 | |
|         if (constraint3 != null) {
 | |
|             constraint3.layout.verticalBias = bias;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void centerHorizontally(int centerID, int leftId, int leftSide, int leftMargin, int rightId, int rightSide, int rightMargin, float bias) {
 | |
|         connect(centerID, 1, leftId, leftSide, leftMargin);
 | |
|         connect(centerID, 2, rightId, rightSide, rightMargin);
 | |
|         Constraint constraint = this.mConstraints.get(Integer.valueOf(centerID));
 | |
|         if (constraint != null) {
 | |
|             constraint.layout.horizontalBias = bias;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void centerHorizontallyRtl(int centerID, int startId, int startSide, int startMargin, int endId, int endSide, int endMargin, float bias) {
 | |
|         connect(centerID, 6, startId, startSide, startMargin);
 | |
|         connect(centerID, 7, endId, endSide, endMargin);
 | |
|         Constraint constraint = this.mConstraints.get(Integer.valueOf(centerID));
 | |
|         if (constraint != null) {
 | |
|             constraint.layout.horizontalBias = bias;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void centerVertically(int centerID, int topId, int topSide, int topMargin, int bottomId, int bottomSide, int bottomMargin, float bias) {
 | |
|         connect(centerID, 3, topId, topSide, topMargin);
 | |
|         connect(centerID, 4, bottomId, bottomSide, bottomMargin);
 | |
|         Constraint constraint = this.mConstraints.get(Integer.valueOf(centerID));
 | |
|         if (constraint != null) {
 | |
|             constraint.layout.verticalBias = bias;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void createVerticalChain(int topId, int topSide, int bottomId, int bottomSide, int[] chainIds, float[] weights, int style) {
 | |
|         if (chainIds.length < 2) {
 | |
|             throw new IllegalArgumentException("must have 2 or more widgets in a chain");
 | |
|         }
 | |
|         if (weights != null && weights.length != chainIds.length) {
 | |
|             throw new IllegalArgumentException("must have 2 or more widgets in a chain");
 | |
|         }
 | |
|         if (weights != null) {
 | |
|             get(chainIds[0]).layout.verticalWeight = weights[0];
 | |
|         }
 | |
|         get(chainIds[0]).layout.verticalChainStyle = style;
 | |
|         connect(chainIds[0], 3, topId, topSide, 0);
 | |
|         for (int i = 1; i < chainIds.length; i++) {
 | |
|             int i2 = i - 1;
 | |
|             connect(chainIds[i], 3, chainIds[i2], 4, 0);
 | |
|             connect(chainIds[i2], 4, chainIds[i], 3, 0);
 | |
|             if (weights != null) {
 | |
|                 get(chainIds[i]).layout.verticalWeight = weights[i];
 | |
|             }
 | |
|         }
 | |
|         connect(chainIds[chainIds.length - 1], 4, bottomId, bottomSide, 0);
 | |
|     }
 | |
| 
 | |
|     public void createHorizontalChain(int leftId, int leftSide, int rightId, int rightSide, int[] chainIds, float[] weights, int style) {
 | |
|         createHorizontalChain(leftId, leftSide, rightId, rightSide, chainIds, weights, style, 1, 2);
 | |
|     }
 | |
| 
 | |
|     public void createHorizontalChainRtl(int startId, int startSide, int endId, int endSide, int[] chainIds, float[] weights, int style) {
 | |
|         createHorizontalChain(startId, startSide, endId, endSide, chainIds, weights, style, 6, 7);
 | |
|     }
 | |
| 
 | |
|     private void createHorizontalChain(int leftId, int leftSide, int rightId, int rightSide, int[] chainIds, float[] weights, int style, int left, int right) {
 | |
|         if (chainIds.length < 2) {
 | |
|             throw new IllegalArgumentException("must have 2 or more widgets in a chain");
 | |
|         }
 | |
|         if (weights != null && weights.length != chainIds.length) {
 | |
|             throw new IllegalArgumentException("must have 2 or more widgets in a chain");
 | |
|         }
 | |
|         if (weights != null) {
 | |
|             get(chainIds[0]).layout.horizontalWeight = weights[0];
 | |
|         }
 | |
|         get(chainIds[0]).layout.horizontalChainStyle = style;
 | |
|         connect(chainIds[0], left, leftId, leftSide, -1);
 | |
|         for (int i = 1; i < chainIds.length; i++) {
 | |
|             int i2 = i - 1;
 | |
|             connect(chainIds[i], left, chainIds[i2], right, -1);
 | |
|             connect(chainIds[i2], right, chainIds[i], left, -1);
 | |
|             if (weights != null) {
 | |
|                 get(chainIds[i]).layout.horizontalWeight = weights[i];
 | |
|             }
 | |
|         }
 | |
|         connect(chainIds[chainIds.length - 1], right, rightId, rightSide, -1);
 | |
|     }
 | |
| 
 | |
|     public void connect(int startID, int startSide, int endID, int endSide, int margin) {
 | |
|         if (!this.mConstraints.containsKey(Integer.valueOf(startID))) {
 | |
|             this.mConstraints.put(Integer.valueOf(startID), new Constraint());
 | |
|         }
 | |
|         Constraint constraint = this.mConstraints.get(Integer.valueOf(startID));
 | |
|         if (constraint == null) {
 | |
|             return;
 | |
|         }
 | |
|         switch (startSide) {
 | |
|             case 1:
 | |
|                 if (endSide == 1) {
 | |
|                     constraint.layout.leftToLeft = endID;
 | |
|                     constraint.layout.leftToRight = -1;
 | |
|                 } else if (endSide == 2) {
 | |
|                     constraint.layout.leftToRight = endID;
 | |
|                     constraint.layout.leftToLeft = -1;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("Left to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|                 constraint.layout.leftMargin = margin;
 | |
|                 return;
 | |
|             case 2:
 | |
|                 if (endSide == 1) {
 | |
|                     constraint.layout.rightToLeft = endID;
 | |
|                     constraint.layout.rightToRight = -1;
 | |
|                 } else if (endSide == 2) {
 | |
|                     constraint.layout.rightToRight = endID;
 | |
|                     constraint.layout.rightToLeft = -1;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|                 constraint.layout.rightMargin = margin;
 | |
|                 return;
 | |
|             case 3:
 | |
|                 if (endSide == 3) {
 | |
|                     constraint.layout.topToTop = endID;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                 } else if (endSide == 4) {
 | |
|                     constraint.layout.topToBottom = endID;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|                 constraint.layout.topMargin = margin;
 | |
|                 return;
 | |
|             case 4:
 | |
|                 if (endSide == 4) {
 | |
|                     constraint.layout.bottomToBottom = endID;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                 } else if (endSide == 3) {
 | |
|                     constraint.layout.bottomToTop = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|                 constraint.layout.bottomMargin = margin;
 | |
|                 return;
 | |
|             case 5:
 | |
|                 if (endSide == 5) {
 | |
|                     constraint.layout.baselineToBaseline = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 if (endSide == 3) {
 | |
|                     constraint.layout.baselineToTop = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 if (endSide == 4) {
 | |
|                     constraint.layout.baselineToBottom = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|             case 6:
 | |
|                 if (endSide == 6) {
 | |
|                     constraint.layout.startToStart = endID;
 | |
|                     constraint.layout.startToEnd = -1;
 | |
|                 } else if (endSide == 7) {
 | |
|                     constraint.layout.startToEnd = endID;
 | |
|                     constraint.layout.startToStart = -1;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|                 constraint.layout.startMargin = margin;
 | |
|                 return;
 | |
|             case 7:
 | |
|                 if (endSide == 7) {
 | |
|                     constraint.layout.endToEnd = endID;
 | |
|                     constraint.layout.endToStart = -1;
 | |
|                 } else if (endSide == 6) {
 | |
|                     constraint.layout.endToStart = endID;
 | |
|                     constraint.layout.endToEnd = -1;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|                 constraint.layout.endMargin = margin;
 | |
|                 return;
 | |
|             default:
 | |
|                 throw new IllegalArgumentException(sideToString(startSide) + " to " + sideToString(endSide) + " unknown");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void connect(int startID, int startSide, int endID, int endSide) {
 | |
|         if (!this.mConstraints.containsKey(Integer.valueOf(startID))) {
 | |
|             this.mConstraints.put(Integer.valueOf(startID), new Constraint());
 | |
|         }
 | |
|         Constraint constraint = this.mConstraints.get(Integer.valueOf(startID));
 | |
|         if (constraint == null) {
 | |
|             return;
 | |
|         }
 | |
|         switch (startSide) {
 | |
|             case 1:
 | |
|                 if (endSide == 1) {
 | |
|                     constraint.layout.leftToLeft = endID;
 | |
|                     constraint.layout.leftToRight = -1;
 | |
|                     return;
 | |
|                 } else if (endSide == 2) {
 | |
|                     constraint.layout.leftToRight = endID;
 | |
|                     constraint.layout.leftToLeft = -1;
 | |
|                     return;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("left to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|             case 2:
 | |
|                 if (endSide == 1) {
 | |
|                     constraint.layout.rightToLeft = endID;
 | |
|                     constraint.layout.rightToRight = -1;
 | |
|                     return;
 | |
|                 } else if (endSide == 2) {
 | |
|                     constraint.layout.rightToRight = endID;
 | |
|                     constraint.layout.rightToLeft = -1;
 | |
|                     return;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|             case 3:
 | |
|                 if (endSide == 3) {
 | |
|                     constraint.layout.topToTop = endID;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 if (endSide == 4) {
 | |
|                     constraint.layout.topToBottom = endID;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|             case 4:
 | |
|                 if (endSide == 4) {
 | |
|                     constraint.layout.bottomToBottom = endID;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 if (endSide == 3) {
 | |
|                     constraint.layout.bottomToTop = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.baselineToBaseline = -1;
 | |
|                     constraint.layout.baselineToTop = -1;
 | |
|                     constraint.layout.baselineToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|             case 5:
 | |
|                 if (endSide == 5) {
 | |
|                     constraint.layout.baselineToBaseline = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 if (endSide == 3) {
 | |
|                     constraint.layout.baselineToTop = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 if (endSide == 4) {
 | |
|                     constraint.layout.baselineToBottom = endID;
 | |
|                     constraint.layout.bottomToBottom = -1;
 | |
|                     constraint.layout.bottomToTop = -1;
 | |
|                     constraint.layout.topToTop = -1;
 | |
|                     constraint.layout.topToBottom = -1;
 | |
|                     return;
 | |
|                 }
 | |
|                 throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|             case 6:
 | |
|                 if (endSide == 6) {
 | |
|                     constraint.layout.startToStart = endID;
 | |
|                     constraint.layout.startToEnd = -1;
 | |
|                     return;
 | |
|                 } else if (endSide == 7) {
 | |
|                     constraint.layout.startToEnd = endID;
 | |
|                     constraint.layout.startToStart = -1;
 | |
|                     return;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|             case 7:
 | |
|                 if (endSide == 7) {
 | |
|                     constraint.layout.endToEnd = endID;
 | |
|                     constraint.layout.endToStart = -1;
 | |
|                     return;
 | |
|                 } else if (endSide == 6) {
 | |
|                     constraint.layout.endToStart = endID;
 | |
|                     constraint.layout.endToEnd = -1;
 | |
|                     return;
 | |
|                 } else {
 | |
|                     throw new IllegalArgumentException("right to " + sideToString(endSide) + " undefined");
 | |
|                 }
 | |
|             default:
 | |
|                 throw new IllegalArgumentException(sideToString(startSide) + " to " + sideToString(endSide) + " unknown");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void centerHorizontally(int viewId, int toView) {
 | |
|         if (toView == 0) {
 | |
|             center(viewId, 0, 1, 0, 0, 2, 0, 0.5f);
 | |
|         } else {
 | |
|             center(viewId, toView, 2, 0, toView, 1, 0, 0.5f);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void centerHorizontallyRtl(int viewId, int toView) {
 | |
|         if (toView == 0) {
 | |
|             center(viewId, 0, 6, 0, 0, 7, 0, 0.5f);
 | |
|         } else {
 | |
|             center(viewId, toView, 7, 0, toView, 6, 0, 0.5f);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void centerVertically(int viewId, int toView) {
 | |
|         if (toView == 0) {
 | |
|             center(viewId, 0, 3, 0, 0, 4, 0, 0.5f);
 | |
|         } else {
 | |
|             center(viewId, toView, 4, 0, toView, 3, 0, 0.5f);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void clear(int viewId) {
 | |
|         this.mConstraints.remove(Integer.valueOf(viewId));
 | |
|     }
 | |
| 
 | |
|     public void clear(int viewId, int anchor) {
 | |
|         Constraint constraint;
 | |
|         if (!this.mConstraints.containsKey(Integer.valueOf(viewId)) || (constraint = this.mConstraints.get(Integer.valueOf(viewId))) == null) {
 | |
|             return;
 | |
|         }
 | |
|         switch (anchor) {
 | |
|             case 1:
 | |
|                 constraint.layout.leftToRight = -1;
 | |
|                 constraint.layout.leftToLeft = -1;
 | |
|                 constraint.layout.leftMargin = -1;
 | |
|                 constraint.layout.goneLeftMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 2:
 | |
|                 constraint.layout.rightToRight = -1;
 | |
|                 constraint.layout.rightToLeft = -1;
 | |
|                 constraint.layout.rightMargin = -1;
 | |
|                 constraint.layout.goneRightMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 3:
 | |
|                 constraint.layout.topToBottom = -1;
 | |
|                 constraint.layout.topToTop = -1;
 | |
|                 constraint.layout.topMargin = 0;
 | |
|                 constraint.layout.goneTopMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 4:
 | |
|                 constraint.layout.bottomToTop = -1;
 | |
|                 constraint.layout.bottomToBottom = -1;
 | |
|                 constraint.layout.bottomMargin = 0;
 | |
|                 constraint.layout.goneBottomMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 5:
 | |
|                 constraint.layout.baselineToBaseline = -1;
 | |
|                 constraint.layout.baselineToTop = -1;
 | |
|                 constraint.layout.baselineToBottom = -1;
 | |
|                 constraint.layout.baselineMargin = 0;
 | |
|                 constraint.layout.goneBaselineMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 6:
 | |
|                 constraint.layout.startToEnd = -1;
 | |
|                 constraint.layout.startToStart = -1;
 | |
|                 constraint.layout.startMargin = 0;
 | |
|                 constraint.layout.goneStartMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 7:
 | |
|                 constraint.layout.endToStart = -1;
 | |
|                 constraint.layout.endToEnd = -1;
 | |
|                 constraint.layout.endMargin = 0;
 | |
|                 constraint.layout.goneEndMargin = Integer.MIN_VALUE;
 | |
|                 return;
 | |
|             case 8:
 | |
|                 constraint.layout.circleAngle = -1.0f;
 | |
|                 constraint.layout.circleRadius = -1;
 | |
|                 constraint.layout.circleConstraint = -1;
 | |
|                 return;
 | |
|             default:
 | |
|                 throw new IllegalArgumentException("unknown constraint");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setMargin(int viewId, int anchor, int value) {
 | |
|         Constraint constraint = get(viewId);
 | |
|         switch (anchor) {
 | |
|             case 1:
 | |
|                 constraint.layout.leftMargin = value;
 | |
|                 return;
 | |
|             case 2:
 | |
|                 constraint.layout.rightMargin = value;
 | |
|                 return;
 | |
|             case 3:
 | |
|                 constraint.layout.topMargin = value;
 | |
|                 return;
 | |
|             case 4:
 | |
|                 constraint.layout.bottomMargin = value;
 | |
|                 return;
 | |
|             case 5:
 | |
|                 constraint.layout.baselineMargin = value;
 | |
|                 return;
 | |
|             case 6:
 | |
|                 constraint.layout.startMargin = value;
 | |
|                 return;
 | |
|             case 7:
 | |
|                 constraint.layout.endMargin = value;
 | |
|                 return;
 | |
|             default:
 | |
|                 throw new IllegalArgumentException("unknown constraint");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setGoneMargin(int viewId, int anchor, int value) {
 | |
|         Constraint constraint = get(viewId);
 | |
|         switch (anchor) {
 | |
|             case 1:
 | |
|                 constraint.layout.goneLeftMargin = value;
 | |
|                 return;
 | |
|             case 2:
 | |
|                 constraint.layout.goneRightMargin = value;
 | |
|                 return;
 | |
|             case 3:
 | |
|                 constraint.layout.goneTopMargin = value;
 | |
|                 return;
 | |
|             case 4:
 | |
|                 constraint.layout.goneBottomMargin = value;
 | |
|                 return;
 | |
|             case 5:
 | |
|                 constraint.layout.goneBaselineMargin = value;
 | |
|                 return;
 | |
|             case 6:
 | |
|                 constraint.layout.goneStartMargin = value;
 | |
|                 return;
 | |
|             case 7:
 | |
|                 constraint.layout.goneEndMargin = value;
 | |
|                 return;
 | |
|             default:
 | |
|                 throw new IllegalArgumentException("unknown constraint");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setHorizontalBias(int viewId, float bias) {
 | |
|         get(viewId).layout.horizontalBias = bias;
 | |
|     }
 | |
| 
 | |
|     public void setVerticalBias(int viewId, float bias) {
 | |
|         get(viewId).layout.verticalBias = bias;
 | |
|     }
 | |
| 
 | |
|     public void setDimensionRatio(int viewId, String ratio) {
 | |
|         get(viewId).layout.dimensionRatio = ratio;
 | |
|     }
 | |
| 
 | |
|     public void setVisibility(int viewId, int visibility) {
 | |
|         get(viewId).propertySet.visibility = visibility;
 | |
|     }
 | |
| 
 | |
|     public void setVisibilityMode(int viewId, int visibilityMode) {
 | |
|         get(viewId).propertySet.mVisibilityMode = visibilityMode;
 | |
|     }
 | |
| 
 | |
|     public int getVisibilityMode(int viewId) {
 | |
|         return get(viewId).propertySet.mVisibilityMode;
 | |
|     }
 | |
| 
 | |
|     public int getVisibility(int viewId) {
 | |
|         return get(viewId).propertySet.visibility;
 | |
|     }
 | |
| 
 | |
|     public int getHeight(int viewId) {
 | |
|         return get(viewId).layout.mHeight;
 | |
|     }
 | |
| 
 | |
|     public int getWidth(int viewId) {
 | |
|         return get(viewId).layout.mWidth;
 | |
|     }
 | |
| 
 | |
|     public void setAlpha(int viewId, float alpha) {
 | |
|         get(viewId).propertySet.alpha = alpha;
 | |
|     }
 | |
| 
 | |
|     public boolean getApplyElevation(int viewId) {
 | |
|         return get(viewId).transform.applyElevation;
 | |
|     }
 | |
| 
 | |
|     public void setApplyElevation(int viewId, boolean apply) {
 | |
|         get(viewId).transform.applyElevation = apply;
 | |
|     }
 | |
| 
 | |
|     public void setElevation(int viewId, float elevation) {
 | |
|         get(viewId).transform.elevation = elevation;
 | |
|         get(viewId).transform.applyElevation = true;
 | |
|     }
 | |
| 
 | |
|     public void setRotation(int viewId, float rotation) {
 | |
|         get(viewId).transform.rotation = rotation;
 | |
|     }
 | |
| 
 | |
|     public void setRotationX(int viewId, float rotationX) {
 | |
|         get(viewId).transform.rotationX = rotationX;
 | |
|     }
 | |
| 
 | |
|     public void setRotationY(int viewId, float rotationY) {
 | |
|         get(viewId).transform.rotationY = rotationY;
 | |
|     }
 | |
| 
 | |
|     public void setScaleX(int viewId, float scaleX) {
 | |
|         get(viewId).transform.scaleX = scaleX;
 | |
|     }
 | |
| 
 | |
|     public void setScaleY(int viewId, float scaleY) {
 | |
|         get(viewId).transform.scaleY = scaleY;
 | |
|     }
 | |
| 
 | |
|     public void setTransformPivotX(int viewId, float transformPivotX) {
 | |
|         get(viewId).transform.transformPivotX = transformPivotX;
 | |
|     }
 | |
| 
 | |
|     public void setTransformPivotY(int viewId, float transformPivotY) {
 | |
|         get(viewId).transform.transformPivotY = transformPivotY;
 | |
|     }
 | |
| 
 | |
|     public void setTransformPivot(int viewId, float transformPivotX, float transformPivotY) {
 | |
|         Constraint constraint = get(viewId);
 | |
|         constraint.transform.transformPivotY = transformPivotY;
 | |
|         constraint.transform.transformPivotX = transformPivotX;
 | |
|     }
 | |
| 
 | |
|     public void setTranslationX(int viewId, float translationX) {
 | |
|         get(viewId).transform.translationX = translationX;
 | |
|     }
 | |
| 
 | |
|     public void setTranslationY(int viewId, float translationY) {
 | |
|         get(viewId).transform.translationY = translationY;
 | |
|     }
 | |
| 
 | |
|     public void setTranslation(int viewId, float translationX, float translationY) {
 | |
|         Constraint constraint = get(viewId);
 | |
|         constraint.transform.translationX = translationX;
 | |
|         constraint.transform.translationY = translationY;
 | |
|     }
 | |
| 
 | |
|     public void setTranslationZ(int viewId, float translationZ) {
 | |
|         get(viewId).transform.translationZ = translationZ;
 | |
|     }
 | |
| 
 | |
|     public void setEditorAbsoluteX(int viewId, int position) {
 | |
|         get(viewId).layout.editorAbsoluteX = position;
 | |
|     }
 | |
| 
 | |
|     public void setEditorAbsoluteY(int viewId, int position) {
 | |
|         get(viewId).layout.editorAbsoluteY = position;
 | |
|     }
 | |
| 
 | |
|     public void setLayoutWrapBehavior(int viewId, int behavior) {
 | |
|         if (behavior < 0 || behavior > 3) {
 | |
|             return;
 | |
|         }
 | |
|         get(viewId).layout.mWrapBehavior = behavior;
 | |
|     }
 | |
| 
 | |
|     public void constrainHeight(int viewId, int height) {
 | |
|         get(viewId).layout.mHeight = height;
 | |
|     }
 | |
| 
 | |
|     public void constrainWidth(int viewId, int width) {
 | |
|         get(viewId).layout.mWidth = width;
 | |
|     }
 | |
| 
 | |
|     public void constrainCircle(int viewId, int id, int radius, float angle) {
 | |
|         Constraint constraint = get(viewId);
 | |
|         constraint.layout.circleConstraint = id;
 | |
|         constraint.layout.circleRadius = radius;
 | |
|         constraint.layout.circleAngle = angle;
 | |
|     }
 | |
| 
 | |
|     public void constrainMaxHeight(int viewId, int height) {
 | |
|         get(viewId).layout.heightMax = height;
 | |
|     }
 | |
| 
 | |
|     public void constrainMaxWidth(int viewId, int width) {
 | |
|         get(viewId).layout.widthMax = width;
 | |
|     }
 | |
| 
 | |
|     public void constrainMinHeight(int viewId, int height) {
 | |
|         get(viewId).layout.heightMin = height;
 | |
|     }
 | |
| 
 | |
|     public void constrainMinWidth(int viewId, int width) {
 | |
|         get(viewId).layout.widthMin = width;
 | |
|     }
 | |
| 
 | |
|     public void constrainPercentWidth(int viewId, float percent) {
 | |
|         get(viewId).layout.widthPercent = percent;
 | |
|     }
 | |
| 
 | |
|     public void constrainPercentHeight(int viewId, float percent) {
 | |
|         get(viewId).layout.heightPercent = percent;
 | |
|     }
 | |
| 
 | |
|     public void constrainDefaultHeight(int viewId, int height) {
 | |
|         get(viewId).layout.heightDefault = height;
 | |
|     }
 | |
| 
 | |
|     public void constrainedWidth(int viewId, boolean constrained) {
 | |
|         get(viewId).layout.constrainedWidth = constrained;
 | |
|     }
 | |
| 
 | |
|     public void constrainedHeight(int viewId, boolean constrained) {
 | |
|         get(viewId).layout.constrainedHeight = constrained;
 | |
|     }
 | |
| 
 | |
|     public void constrainDefaultWidth(int viewId, int width) {
 | |
|         get(viewId).layout.widthDefault = width;
 | |
|     }
 | |
| 
 | |
|     public void setHorizontalWeight(int viewId, float weight) {
 | |
|         get(viewId).layout.horizontalWeight = weight;
 | |
|     }
 | |
| 
 | |
|     public void setVerticalWeight(int viewId, float weight) {
 | |
|         get(viewId).layout.verticalWeight = weight;
 | |
|     }
 | |
| 
 | |
|     public void setHorizontalChainStyle(int viewId, int chainStyle) {
 | |
|         get(viewId).layout.horizontalChainStyle = chainStyle;
 | |
|     }
 | |
| 
 | |
|     public void setVerticalChainStyle(int viewId, int chainStyle) {
 | |
|         get(viewId).layout.verticalChainStyle = chainStyle;
 | |
|     }
 | |
| 
 | |
|     public void addToHorizontalChain(int viewId, int leftId, int rightId) {
 | |
|         connect(viewId, 1, leftId, leftId == 0 ? 1 : 2, 0);
 | |
|         connect(viewId, 2, rightId, rightId == 0 ? 2 : 1, 0);
 | |
|         if (leftId != 0) {
 | |
|             connect(leftId, 2, viewId, 1, 0);
 | |
|         }
 | |
|         if (rightId != 0) {
 | |
|             connect(rightId, 1, viewId, 2, 0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void addToHorizontalChainRTL(int viewId, int leftId, int rightId) {
 | |
|         connect(viewId, 6, leftId, leftId == 0 ? 6 : 7, 0);
 | |
|         connect(viewId, 7, rightId, rightId == 0 ? 7 : 6, 0);
 | |
|         if (leftId != 0) {
 | |
|             connect(leftId, 7, viewId, 6, 0);
 | |
|         }
 | |
|         if (rightId != 0) {
 | |
|             connect(rightId, 6, viewId, 7, 0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void addToVerticalChain(int viewId, int topId, int bottomId) {
 | |
|         connect(viewId, 3, topId, topId == 0 ? 3 : 4, 0);
 | |
|         connect(viewId, 4, bottomId, bottomId == 0 ? 4 : 3, 0);
 | |
|         if (topId != 0) {
 | |
|             connect(topId, 4, viewId, 3, 0);
 | |
|         }
 | |
|         if (bottomId != 0) {
 | |
|             connect(bottomId, 3, viewId, 4, 0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void removeFromVerticalChain(int viewId) {
 | |
|         if (this.mConstraints.containsKey(Integer.valueOf(viewId))) {
 | |
|             Constraint constraint = this.mConstraints.get(Integer.valueOf(viewId));
 | |
|             if (constraint == null) {
 | |
|                 return;
 | |
|             }
 | |
|             int i = constraint.layout.topToBottom;
 | |
|             int i2 = constraint.layout.bottomToTop;
 | |
|             if (i != -1 || i2 != -1) {
 | |
|                 if (i != -1 && i2 != -1) {
 | |
|                     connect(i, 4, i2, 3, 0);
 | |
|                     connect(i2, 3, i, 4, 0);
 | |
|                 } else if (constraint.layout.bottomToBottom != -1) {
 | |
|                     connect(i, 4, constraint.layout.bottomToBottom, 4, 0);
 | |
|                 } else if (constraint.layout.topToTop != -1) {
 | |
|                     connect(i2, 3, constraint.layout.topToTop, 3, 0);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         clear(viewId, 3);
 | |
|         clear(viewId, 4);
 | |
|     }
 | |
| 
 | |
|     public void removeFromHorizontalChain(int viewId) {
 | |
|         Constraint constraint;
 | |
|         if (!this.mConstraints.containsKey(Integer.valueOf(viewId)) || (constraint = this.mConstraints.get(Integer.valueOf(viewId))) == null) {
 | |
|             return;
 | |
|         }
 | |
|         int i = constraint.layout.leftToRight;
 | |
|         int i2 = constraint.layout.rightToLeft;
 | |
|         if (i != -1 || i2 != -1) {
 | |
|             if (i != -1 && i2 != -1) {
 | |
|                 connect(i, 2, i2, 1, 0);
 | |
|                 connect(i2, 1, i, 2, 0);
 | |
|             } else if (constraint.layout.rightToRight != -1) {
 | |
|                 connect(i, 2, constraint.layout.rightToRight, 2, 0);
 | |
|             } else if (constraint.layout.leftToLeft != -1) {
 | |
|                 connect(i2, 1, constraint.layout.leftToLeft, 1, 0);
 | |
|             }
 | |
|             clear(viewId, 1);
 | |
|             clear(viewId, 2);
 | |
|             return;
 | |
|         }
 | |
|         int i3 = constraint.layout.startToEnd;
 | |
|         int i4 = constraint.layout.endToStart;
 | |
|         if (i3 != -1 || i4 != -1) {
 | |
|             if (i3 != -1 && i4 != -1) {
 | |
|                 connect(i3, 7, i4, 6, 0);
 | |
|                 connect(i4, 6, i, 7, 0);
 | |
|             } else if (i4 != -1) {
 | |
|                 if (constraint.layout.rightToRight != -1) {
 | |
|                     connect(i, 7, constraint.layout.rightToRight, 7, 0);
 | |
|                 } else if (constraint.layout.leftToLeft != -1) {
 | |
|                     connect(i4, 6, constraint.layout.leftToLeft, 6, 0);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         clear(viewId, 6);
 | |
|         clear(viewId, 7);
 | |
|     }
 | |
| 
 | |
|     public void create(int guidelineID, int orientation) {
 | |
|         Constraint constraint = get(guidelineID);
 | |
|         constraint.layout.mIsGuideline = true;
 | |
|         constraint.layout.orientation = orientation;
 | |
|     }
 | |
| 
 | |
|     public void createBarrier(int id, int direction, int margin, int... referenced) {
 | |
|         Constraint constraint = get(id);
 | |
|         constraint.layout.mHelperType = 1;
 | |
|         constraint.layout.mBarrierDirection = direction;
 | |
|         constraint.layout.mBarrierMargin = margin;
 | |
|         constraint.layout.mIsGuideline = false;
 | |
|         constraint.layout.mReferenceIds = referenced;
 | |
|     }
 | |
| 
 | |
|     public void setGuidelineBegin(int guidelineID, int margin) {
 | |
|         get(guidelineID).layout.guideBegin = margin;
 | |
|         get(guidelineID).layout.guideEnd = -1;
 | |
|         get(guidelineID).layout.guidePercent = -1.0f;
 | |
|     }
 | |
| 
 | |
|     public void setGuidelineEnd(int guidelineID, int margin) {
 | |
|         get(guidelineID).layout.guideEnd = margin;
 | |
|         get(guidelineID).layout.guideBegin = -1;
 | |
|         get(guidelineID).layout.guidePercent = -1.0f;
 | |
|     }
 | |
| 
 | |
|     public void setGuidelinePercent(int guidelineID, float ratio) {
 | |
|         get(guidelineID).layout.guidePercent = ratio;
 | |
|         get(guidelineID).layout.guideEnd = -1;
 | |
|         get(guidelineID).layout.guideBegin = -1;
 | |
|     }
 | |
| 
 | |
|     public int[] getReferencedIds(int id) {
 | |
|         Constraint constraint = get(id);
 | |
|         return constraint.layout.mReferenceIds == null ? new int[0] : Arrays.copyOf(constraint.layout.mReferenceIds, constraint.layout.mReferenceIds.length);
 | |
|     }
 | |
| 
 | |
|     public void setReferencedIds(int id, int... referenced) {
 | |
|         get(id).layout.mReferenceIds = referenced;
 | |
|     }
 | |
| 
 | |
|     public void setBarrierType(int id, int type) {
 | |
|         get(id).layout.mHelperType = type;
 | |
|     }
 | |
| 
 | |
|     public void removeAttribute(String attributeName) {
 | |
|         this.mSavedAttributes.remove(attributeName);
 | |
|     }
 | |
| 
 | |
|     public void setIntValue(int viewId, String attributeName, int value) {
 | |
|         get(viewId).setIntValue(attributeName, value);
 | |
|     }
 | |
| 
 | |
|     public void setColorValue(int viewId, String attributeName, int value) {
 | |
|         get(viewId).setColorValue(attributeName, value);
 | |
|     }
 | |
| 
 | |
|     public void setFloatValue(int viewId, String attributeName, float value) {
 | |
|         get(viewId).setFloatValue(attributeName, value);
 | |
|     }
 | |
| 
 | |
|     public void setStringValue(int viewId, String attributeName, String value) {
 | |
|         get(viewId).setStringValue(attributeName, value);
 | |
|     }
 | |
| 
 | |
|     private void addAttributes(ConstraintAttribute.AttributeType attributeType, String... attributeName) {
 | |
|         for (int i = 0; i < attributeName.length; i++) {
 | |
|             if (this.mSavedAttributes.containsKey(attributeName[i])) {
 | |
|                 ConstraintAttribute constraintAttribute = this.mSavedAttributes.get(attributeName[i]);
 | |
|                 if (constraintAttribute != null && constraintAttribute.getType() != attributeType) {
 | |
|                     throw new IllegalArgumentException("ConstraintAttribute is already a " + constraintAttribute.getType().name());
 | |
|                 }
 | |
|             } else {
 | |
|                 this.mSavedAttributes.put(attributeName[i], new ConstraintAttribute(attributeName[i], attributeType));
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void parseIntAttributes(Constraint set, String attributes) {
 | |
|         String[] split = attributes.split(",");
 | |
|         for (int i = 0; i < split.length; i++) {
 | |
|             String[] split2 = split[i].split("=");
 | |
|             if (split2.length == 2) {
 | |
|                 set.setFloatValue(split2[0], Integer.decode(split2[1]).intValue());
 | |
|             } else {
 | |
|                 Log.w(TAG, " Unable to parse " + split[i]);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void parseColorAttributes(Constraint set, String attributes) {
 | |
|         String[] split = attributes.split(",");
 | |
|         for (int i = 0; i < split.length; i++) {
 | |
|             String[] split2 = split[i].split("=");
 | |
|             if (split2.length == 2) {
 | |
|                 set.setColorValue(split2[0], Color.parseColor(split2[1]));
 | |
|             } else {
 | |
|                 Log.w(TAG, " Unable to parse " + split[i]);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void parseFloatAttributes(Constraint set, String attributes) {
 | |
|         String[] split = attributes.split(",");
 | |
|         for (int i = 0; i < split.length; i++) {
 | |
|             String[] split2 = split[i].split("=");
 | |
|             if (split2.length == 2) {
 | |
|                 set.setFloatValue(split2[0], Float.parseFloat(split2[1]));
 | |
|             } else {
 | |
|                 Log.w(TAG, " Unable to parse " + split[i]);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void parseStringAttributes(Constraint set, String attributes) {
 | |
|         String[] splitString = splitString(attributes);
 | |
|         for (int i = 0; i < splitString.length; i++) {
 | |
|             String[] split = splitString[i].split("=");
 | |
|             Log.w(TAG, " Unable to parse " + splitString[i]);
 | |
|             set.setStringValue(split[0], split[1]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static String[] splitString(String str) {
 | |
|         char[] charArray = str.toCharArray();
 | |
|         ArrayList arrayList = new ArrayList();
 | |
|         int i = 0;
 | |
|         boolean z = false;
 | |
|         for (int i2 = 0; i2 < charArray.length; i2++) {
 | |
|             char c = charArray[i2];
 | |
|             if (c == ',' && !z) {
 | |
|                 arrayList.add(new String(charArray, i, i2 - i));
 | |
|                 i = i2 + 1;
 | |
|             } else if (c == '\"') {
 | |
|                 z = !z;
 | |
|             }
 | |
|         }
 | |
|         arrayList.add(new String(charArray, i, charArray.length - i));
 | |
|         return (String[]) arrayList.toArray(new String[arrayList.size()]);
 | |
|     }
 | |
| 
 | |
|     public void addIntAttributes(String... attributeName) {
 | |
|         addAttributes(ConstraintAttribute.AttributeType.INT_TYPE, attributeName);
 | |
|     }
 | |
| 
 | |
|     public void addColorAttributes(String... attributeName) {
 | |
|         addAttributes(ConstraintAttribute.AttributeType.COLOR_TYPE, attributeName);
 | |
|     }
 | |
| 
 | |
|     public void addFloatAttributes(String... attributeName) {
 | |
|         addAttributes(ConstraintAttribute.AttributeType.FLOAT_TYPE, attributeName);
 | |
|     }
 | |
| 
 | |
|     public void addStringAttributes(String... attributeName) {
 | |
|         addAttributes(ConstraintAttribute.AttributeType.STRING_TYPE, attributeName);
 | |
|     }
 | |
| 
 | |
|     private Constraint get(int id) {
 | |
|         if (!this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|             this.mConstraints.put(Integer.valueOf(id), new Constraint());
 | |
|         }
 | |
|         return this.mConstraints.get(Integer.valueOf(id));
 | |
|     }
 | |
| 
 | |
|     public void load(Context context, int resourceId) {
 | |
|         XmlResourceParser xml = context.getResources().getXml(resourceId);
 | |
|         try {
 | |
|             for (int eventType = xml.getEventType(); eventType != 1; eventType = xml.next()) {
 | |
|                 if (eventType == 0) {
 | |
|                     xml.getName();
 | |
|                 } else if (eventType == 2) {
 | |
|                     String name = xml.getName();
 | |
|                     Constraint fillFromAttributeList = fillFromAttributeList(context, Xml.asAttributeSet(xml), false);
 | |
|                     if (name.equalsIgnoreCase("Guideline")) {
 | |
|                         fillFromAttributeList.layout.mIsGuideline = true;
 | |
|                     }
 | |
|                     this.mConstraints.put(Integer.valueOf(fillFromAttributeList.mViewId), fillFromAttributeList);
 | |
|                 }
 | |
|             }
 | |
|         } catch (IOException e) {
 | |
|             e.printStackTrace();
 | |
|         } catch (XmlPullParserException e2) {
 | |
|             e2.printStackTrace();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Code restructure failed: missing block: B:79:0x01cd, code lost:
 | |
|     
 | |
|         continue;
 | |
|      */
 | |
|     /* JADX WARN: Failed to restore switch over string. Please report as a decompilation issue
 | |
|     java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return value of "jadx.core.dex.visitors.regions.SwitchOverStringVisitor$SwitchData.getNewCases()" is null
 | |
|     	at jadx.core.dex.visitors.regions.SwitchOverStringVisitor.restoreSwitchOverString(SwitchOverStringVisitor.java:109)
 | |
|     	at jadx.core.dex.visitors.regions.SwitchOverStringVisitor.visitRegion(SwitchOverStringVisitor.java:66)
 | |
|     	at jadx.core.dex.visitors.regions.DepthRegionTraversal.traverseIterativeStepInternal(DepthRegionTraversal.java:77)
 | |
|     	at jadx.core.dex.visitors.regions.DepthRegionTraversal.traverseIterativeStepInternal(DepthRegionTraversal.java:82)
 | |
|      */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     public void load(android.content.Context r10, org.xmlpull.v1.XmlPullParser r11) {
 | |
|         /*
 | |
|             Method dump skipped, instructions count: 562
 | |
|             To view this dump add '--comments-level debug' option
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.constraintlayout.widget.ConstraintSet.load(android.content.Context, org.xmlpull.v1.XmlPullParser):void");
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public static int lookupID(TypedArray a, int index, int def) {
 | |
|         int resourceId = a.getResourceId(index, def);
 | |
|         return resourceId == -1 ? a.getInt(index, -1) : resourceId;
 | |
|     }
 | |
| 
 | |
|     private Constraint fillFromAttributeList(Context context, AttributeSet attrs, boolean override) {
 | |
|         Constraint constraint = new Constraint();
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, override ? R.styleable.ConstraintOverride : R.styleable.Constraint);
 | |
|         populateConstraint(context, constraint, obtainStyledAttributes, override);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         return constraint;
 | |
|     }
 | |
| 
 | |
|     public static Constraint buildDelta(Context context, XmlPullParser parser) {
 | |
|         AttributeSet asAttributeSet = Xml.asAttributeSet(parser);
 | |
|         Constraint constraint = new Constraint();
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(asAttributeSet, R.styleable.ConstraintOverride);
 | |
|         populateOverride(context, constraint, obtainStyledAttributes);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         return constraint;
 | |
|     }
 | |
| 
 | |
|     private static void populateOverride(Context ctx, Constraint c, TypedArray a) {
 | |
|         int indexCount = a.getIndexCount();
 | |
|         Constraint.Delta delta = new Constraint.Delta();
 | |
|         c.mDelta = delta;
 | |
|         c.motion.mApply = false;
 | |
|         c.layout.mApply = false;
 | |
|         c.propertySet.mApply = false;
 | |
|         c.transform.mApply = false;
 | |
|         for (int i = 0; i < indexCount; i++) {
 | |
|             int index = a.getIndex(i);
 | |
|             switch (overrideMapToConstant.get(index)) {
 | |
|                 case 2:
 | |
|                     delta.add(2, a.getDimensionPixelSize(index, c.layout.bottomMargin));
 | |
|                     break;
 | |
|                 case 3:
 | |
|                 case 4:
 | |
|                 case 9:
 | |
|                 case 10:
 | |
|                 case 25:
 | |
|                 case 26:
 | |
|                 case 29:
 | |
|                 case 30:
 | |
|                 case 32:
 | |
|                 case 33:
 | |
|                 case 35:
 | |
|                 case 36:
 | |
|                 case 61:
 | |
|                 case 88:
 | |
|                 case 89:
 | |
|                 case 90:
 | |
|                 case 91:
 | |
|                 case 92:
 | |
|                 default:
 | |
|                     Log.w(TAG, "Unknown attribute 0x" + Integer.toHexString(index) + "   " + mapToConstant.get(index));
 | |
|                     break;
 | |
|                 case 5:
 | |
|                     delta.add(5, a.getString(index));
 | |
|                     break;
 | |
|                 case 6:
 | |
|                     delta.add(6, a.getDimensionPixelOffset(index, c.layout.editorAbsoluteX));
 | |
|                     break;
 | |
|                 case 7:
 | |
|                     delta.add(7, a.getDimensionPixelOffset(index, c.layout.editorAbsoluteY));
 | |
|                     break;
 | |
|                 case 8:
 | |
|                     delta.add(8, a.getDimensionPixelSize(index, c.layout.endMargin));
 | |
|                     break;
 | |
|                 case 11:
 | |
|                     delta.add(11, a.getDimensionPixelSize(index, c.layout.goneBottomMargin));
 | |
|                     break;
 | |
|                 case 12:
 | |
|                     delta.add(12, a.getDimensionPixelSize(index, c.layout.goneEndMargin));
 | |
|                     break;
 | |
|                 case 13:
 | |
|                     delta.add(13, a.getDimensionPixelSize(index, c.layout.goneLeftMargin));
 | |
|                     break;
 | |
|                 case 14:
 | |
|                     delta.add(14, a.getDimensionPixelSize(index, c.layout.goneRightMargin));
 | |
|                     break;
 | |
|                 case 15:
 | |
|                     delta.add(15, a.getDimensionPixelSize(index, c.layout.goneStartMargin));
 | |
|                     break;
 | |
|                 case 16:
 | |
|                     delta.add(16, a.getDimensionPixelSize(index, c.layout.goneTopMargin));
 | |
|                     break;
 | |
|                 case 17:
 | |
|                     delta.add(17, a.getDimensionPixelOffset(index, c.layout.guideBegin));
 | |
|                     break;
 | |
|                 case 18:
 | |
|                     delta.add(18, a.getDimensionPixelOffset(index, c.layout.guideEnd));
 | |
|                     break;
 | |
|                 case 19:
 | |
|                     delta.add(19, a.getFloat(index, c.layout.guidePercent));
 | |
|                     break;
 | |
|                 case 20:
 | |
|                     delta.add(20, a.getFloat(index, c.layout.horizontalBias));
 | |
|                     break;
 | |
|                 case 21:
 | |
|                     delta.add(21, a.getLayoutDimension(index, c.layout.mHeight));
 | |
|                     break;
 | |
|                 case 22:
 | |
|                     delta.add(22, VISIBILITY_FLAGS[a.getInt(index, c.propertySet.visibility)]);
 | |
|                     break;
 | |
|                 case 23:
 | |
|                     delta.add(23, a.getLayoutDimension(index, c.layout.mWidth));
 | |
|                     break;
 | |
|                 case 24:
 | |
|                     delta.add(24, a.getDimensionPixelSize(index, c.layout.leftMargin));
 | |
|                     break;
 | |
|                 case 27:
 | |
|                     delta.add(27, a.getInt(index, c.layout.orientation));
 | |
|                     break;
 | |
|                 case 28:
 | |
|                     delta.add(28, a.getDimensionPixelSize(index, c.layout.rightMargin));
 | |
|                     break;
 | |
|                 case 31:
 | |
|                     delta.add(31, a.getDimensionPixelSize(index, c.layout.startMargin));
 | |
|                     break;
 | |
|                 case 34:
 | |
|                     delta.add(34, a.getDimensionPixelSize(index, c.layout.topMargin));
 | |
|                     break;
 | |
|                 case 37:
 | |
|                     delta.add(37, a.getFloat(index, c.layout.verticalBias));
 | |
|                     break;
 | |
|                 case 38:
 | |
|                     c.mViewId = a.getResourceId(index, c.mViewId);
 | |
|                     delta.add(38, c.mViewId);
 | |
|                     break;
 | |
|                 case 39:
 | |
|                     delta.add(39, a.getFloat(index, c.layout.horizontalWeight));
 | |
|                     break;
 | |
|                 case 40:
 | |
|                     delta.add(40, a.getFloat(index, c.layout.verticalWeight));
 | |
|                     break;
 | |
|                 case 41:
 | |
|                     delta.add(41, a.getInt(index, c.layout.horizontalChainStyle));
 | |
|                     break;
 | |
|                 case 42:
 | |
|                     delta.add(42, a.getInt(index, c.layout.verticalChainStyle));
 | |
|                     break;
 | |
|                 case 43:
 | |
|                     delta.add(43, a.getFloat(index, c.propertySet.alpha));
 | |
|                     break;
 | |
|                 case 44:
 | |
|                     delta.add(44, true);
 | |
|                     delta.add(44, a.getDimension(index, c.transform.elevation));
 | |
|                     break;
 | |
|                 case 45:
 | |
|                     delta.add(45, a.getFloat(index, c.transform.rotationX));
 | |
|                     break;
 | |
|                 case 46:
 | |
|                     delta.add(46, a.getFloat(index, c.transform.rotationY));
 | |
|                     break;
 | |
|                 case 47:
 | |
|                     delta.add(47, a.getFloat(index, c.transform.scaleX));
 | |
|                     break;
 | |
|                 case 48:
 | |
|                     delta.add(48, a.getFloat(index, c.transform.scaleY));
 | |
|                     break;
 | |
|                 case 49:
 | |
|                     delta.add(49, a.getDimension(index, c.transform.transformPivotX));
 | |
|                     break;
 | |
|                 case 50:
 | |
|                     delta.add(50, a.getDimension(index, c.transform.transformPivotY));
 | |
|                     break;
 | |
|                 case 51:
 | |
|                     delta.add(51, a.getDimension(index, c.transform.translationX));
 | |
|                     break;
 | |
|                 case 52:
 | |
|                     delta.add(52, a.getDimension(index, c.transform.translationY));
 | |
|                     break;
 | |
|                 case 53:
 | |
|                     delta.add(53, a.getDimension(index, c.transform.translationZ));
 | |
|                     break;
 | |
|                 case 54:
 | |
|                     delta.add(54, a.getInt(index, c.layout.widthDefault));
 | |
|                     break;
 | |
|                 case 55:
 | |
|                     delta.add(55, a.getInt(index, c.layout.heightDefault));
 | |
|                     break;
 | |
|                 case 56:
 | |
|                     delta.add(56, a.getDimensionPixelSize(index, c.layout.widthMax));
 | |
|                     break;
 | |
|                 case 57:
 | |
|                     delta.add(57, a.getDimensionPixelSize(index, c.layout.heightMax));
 | |
|                     break;
 | |
|                 case 58:
 | |
|                     delta.add(58, a.getDimensionPixelSize(index, c.layout.widthMin));
 | |
|                     break;
 | |
|                 case 59:
 | |
|                     delta.add(59, a.getDimensionPixelSize(index, c.layout.heightMin));
 | |
|                     break;
 | |
|                 case 60:
 | |
|                     delta.add(60, a.getFloat(index, c.transform.rotation));
 | |
|                     break;
 | |
|                 case 62:
 | |
|                     delta.add(62, a.getDimensionPixelSize(index, c.layout.circleRadius));
 | |
|                     break;
 | |
|                 case 63:
 | |
|                     delta.add(63, a.getFloat(index, c.layout.circleAngle));
 | |
|                     break;
 | |
|                 case 64:
 | |
|                     delta.add(64, lookupID(a, index, c.motion.mAnimateRelativeTo));
 | |
|                     break;
 | |
|                 case 65:
 | |
|                     if (a.peekValue(index).type == 3) {
 | |
|                         delta.add(65, a.getString(index));
 | |
|                         break;
 | |
|                     } else {
 | |
|                         delta.add(65, Easing.NAMED_EASING[a.getInteger(index, 0)]);
 | |
|                         break;
 | |
|                     }
 | |
|                 case 66:
 | |
|                     delta.add(66, a.getInt(index, 0));
 | |
|                     break;
 | |
|                 case 67:
 | |
|                     delta.add(67, a.getFloat(index, c.motion.mPathRotate));
 | |
|                     break;
 | |
|                 case 68:
 | |
|                     delta.add(68, a.getFloat(index, c.propertySet.mProgress));
 | |
|                     break;
 | |
|                 case 69:
 | |
|                     delta.add(69, a.getFloat(index, 1.0f));
 | |
|                     break;
 | |
|                 case 70:
 | |
|                     delta.add(70, a.getFloat(index, 1.0f));
 | |
|                     break;
 | |
|                 case 71:
 | |
|                     Log.e(TAG, "CURRENTLY UNSUPPORTED");
 | |
|                     break;
 | |
|                 case 72:
 | |
|                     delta.add(72, a.getInt(index, c.layout.mBarrierDirection));
 | |
|                     break;
 | |
|                 case 73:
 | |
|                     delta.add(73, a.getDimensionPixelSize(index, c.layout.mBarrierMargin));
 | |
|                     break;
 | |
|                 case 74:
 | |
|                     delta.add(74, a.getString(index));
 | |
|                     break;
 | |
|                 case 75:
 | |
|                     delta.add(75, a.getBoolean(index, c.layout.mBarrierAllowsGoneWidgets));
 | |
|                     break;
 | |
|                 case 76:
 | |
|                     delta.add(76, a.getInt(index, c.motion.mPathMotionArc));
 | |
|                     break;
 | |
|                 case 77:
 | |
|                     delta.add(77, a.getString(index));
 | |
|                     break;
 | |
|                 case 78:
 | |
|                     delta.add(78, a.getInt(index, c.propertySet.mVisibilityMode));
 | |
|                     break;
 | |
|                 case 79:
 | |
|                     delta.add(79, a.getFloat(index, c.motion.mMotionStagger));
 | |
|                     break;
 | |
|                 case 80:
 | |
|                     delta.add(80, a.getBoolean(index, c.layout.constrainedWidth));
 | |
|                     break;
 | |
|                 case 81:
 | |
|                     delta.add(81, a.getBoolean(index, c.layout.constrainedHeight));
 | |
|                     break;
 | |
|                 case 82:
 | |
|                     delta.add(82, a.getInteger(index, c.motion.mAnimateCircleAngleTo));
 | |
|                     break;
 | |
|                 case 83:
 | |
|                     delta.add(83, lookupID(a, index, c.transform.transformPivotTarget));
 | |
|                     break;
 | |
|                 case 84:
 | |
|                     delta.add(84, a.getInteger(index, c.motion.mQuantizeMotionSteps));
 | |
|                     break;
 | |
|                 case 85:
 | |
|                     delta.add(85, a.getFloat(index, c.motion.mQuantizeMotionPhase));
 | |
|                     break;
 | |
|                 case 86:
 | |
|                     TypedValue peekValue = a.peekValue(index);
 | |
|                     if (peekValue.type == 1) {
 | |
|                         c.motion.mQuantizeInterpolatorID = a.getResourceId(index, -1);
 | |
|                         delta.add(89, c.motion.mQuantizeInterpolatorID);
 | |
|                         if (c.motion.mQuantizeInterpolatorID != -1) {
 | |
|                             c.motion.mQuantizeInterpolatorType = -2;
 | |
|                             delta.add(88, c.motion.mQuantizeInterpolatorType);
 | |
|                             break;
 | |
|                         } else {
 | |
|                             break;
 | |
|                         }
 | |
|                     } else if (peekValue.type == 3) {
 | |
|                         c.motion.mQuantizeInterpolatorString = a.getString(index);
 | |
|                         delta.add(90, c.motion.mQuantizeInterpolatorString);
 | |
|                         if (c.motion.mQuantizeInterpolatorString.indexOf("/") > 0) {
 | |
|                             c.motion.mQuantizeInterpolatorID = a.getResourceId(index, -1);
 | |
|                             delta.add(89, c.motion.mQuantizeInterpolatorID);
 | |
|                             c.motion.mQuantizeInterpolatorType = -2;
 | |
|                             delta.add(88, c.motion.mQuantizeInterpolatorType);
 | |
|                             break;
 | |
|                         } else {
 | |
|                             c.motion.mQuantizeInterpolatorType = -1;
 | |
|                             delta.add(88, c.motion.mQuantizeInterpolatorType);
 | |
|                             break;
 | |
|                         }
 | |
|                     } else {
 | |
|                         c.motion.mQuantizeInterpolatorType = a.getInteger(index, c.motion.mQuantizeInterpolatorID);
 | |
|                         delta.add(88, c.motion.mQuantizeInterpolatorType);
 | |
|                         break;
 | |
|                     }
 | |
|                 case 87:
 | |
|                     Log.w(TAG, "unused attribute 0x" + Integer.toHexString(index) + "   " + mapToConstant.get(index));
 | |
|                     break;
 | |
|                 case 93:
 | |
|                     delta.add(93, a.getDimensionPixelSize(index, c.layout.baselineMargin));
 | |
|                     break;
 | |
|                 case 94:
 | |
|                     delta.add(94, a.getDimensionPixelSize(index, c.layout.goneBaselineMargin));
 | |
|                     break;
 | |
|                 case 95:
 | |
|                     parseDimensionConstraints(delta, a, index, 0);
 | |
|                     break;
 | |
|                 case 96:
 | |
|                     parseDimensionConstraints(delta, a, index, 1);
 | |
|                     break;
 | |
|                 case 97:
 | |
|                     delta.add(97, a.getInt(index, c.layout.mWrapBehavior));
 | |
|                     break;
 | |
|                 case 98:
 | |
|                     if (MotionLayout.IS_IN_EDIT_MODE) {
 | |
|                         c.mViewId = a.getResourceId(index, c.mViewId);
 | |
|                         if (c.mViewId == -1) {
 | |
|                             c.mTargetString = a.getString(index);
 | |
|                             break;
 | |
|                         } else {
 | |
|                             break;
 | |
|                         }
 | |
|                     } else if (a.peekValue(index).type == 3) {
 | |
|                         c.mTargetString = a.getString(index);
 | |
|                         break;
 | |
|                     } else {
 | |
|                         c.mViewId = a.getResourceId(index, c.mViewId);
 | |
|                         break;
 | |
|                     }
 | |
|                 case 99:
 | |
|                     delta.add(99, a.getBoolean(index, c.layout.guidelineUseRtl));
 | |
|                     break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public static void setDeltaValue(Constraint c, int type, float value) {
 | |
|         if (type == 19) {
 | |
|             c.layout.guidePercent = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 20) {
 | |
|             c.layout.horizontalBias = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 37) {
 | |
|             c.layout.verticalBias = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 60) {
 | |
|             c.transform.rotation = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 63) {
 | |
|             c.layout.circleAngle = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 79) {
 | |
|             c.motion.mMotionStagger = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 85) {
 | |
|             c.motion.mQuantizeMotionPhase = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type != 87) {
 | |
|             if (type == 39) {
 | |
|                 c.layout.horizontalWeight = value;
 | |
|                 return;
 | |
|             }
 | |
|             if (type != 40) {
 | |
|                 switch (type) {
 | |
|                     case 43:
 | |
|                         c.propertySet.alpha = value;
 | |
|                         break;
 | |
|                     case 44:
 | |
|                         c.transform.elevation = value;
 | |
|                         c.transform.applyElevation = true;
 | |
|                         break;
 | |
|                     case 45:
 | |
|                         c.transform.rotationX = value;
 | |
|                         break;
 | |
|                     case 46:
 | |
|                         c.transform.rotationY = value;
 | |
|                         break;
 | |
|                     case 47:
 | |
|                         c.transform.scaleX = value;
 | |
|                         break;
 | |
|                     case 48:
 | |
|                         c.transform.scaleY = value;
 | |
|                         break;
 | |
|                     case 49:
 | |
|                         c.transform.transformPivotX = value;
 | |
|                         break;
 | |
|                     case 50:
 | |
|                         c.transform.transformPivotY = value;
 | |
|                         break;
 | |
|                     case 51:
 | |
|                         c.transform.translationX = value;
 | |
|                         break;
 | |
|                     case 52:
 | |
|                         c.transform.translationY = value;
 | |
|                         break;
 | |
|                     case 53:
 | |
|                         c.transform.translationZ = value;
 | |
|                         break;
 | |
|                     default:
 | |
|                         switch (type) {
 | |
|                             case 67:
 | |
|                                 c.motion.mPathRotate = value;
 | |
|                                 break;
 | |
|                             case 68:
 | |
|                                 c.propertySet.mProgress = value;
 | |
|                                 break;
 | |
|                             case 69:
 | |
|                                 c.layout.widthPercent = value;
 | |
|                                 break;
 | |
|                             case 70:
 | |
|                                 c.layout.heightPercent = value;
 | |
|                                 break;
 | |
|                             default:
 | |
|                                 Log.w(TAG, "Unknown attribute 0x");
 | |
|                                 break;
 | |
|                         }
 | |
|                 }
 | |
|                 return;
 | |
|             }
 | |
|             c.layout.verticalWeight = value;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public static void setDeltaValue(Constraint c, int type, int value) {
 | |
|         if (type == 6) {
 | |
|             c.layout.editorAbsoluteX = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 7) {
 | |
|             c.layout.editorAbsoluteY = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 8) {
 | |
|             c.layout.endMargin = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 27) {
 | |
|             c.layout.orientation = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 28) {
 | |
|             c.layout.rightMargin = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 41) {
 | |
|             c.layout.horizontalChainStyle = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 42) {
 | |
|             c.layout.verticalChainStyle = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 61) {
 | |
|             c.layout.circleConstraint = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 62) {
 | |
|             c.layout.circleRadius = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 72) {
 | |
|             c.layout.mBarrierDirection = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type != 73) {
 | |
|             switch (type) {
 | |
|                 case 2:
 | |
|                     c.layout.bottomMargin = value;
 | |
|                     break;
 | |
|                 case 11:
 | |
|                     c.layout.goneBottomMargin = value;
 | |
|                     break;
 | |
|                 case 12:
 | |
|                     c.layout.goneEndMargin = value;
 | |
|                     break;
 | |
|                 case 13:
 | |
|                     c.layout.goneLeftMargin = value;
 | |
|                     break;
 | |
|                 case 14:
 | |
|                     c.layout.goneRightMargin = value;
 | |
|                     break;
 | |
|                 case 15:
 | |
|                     c.layout.goneStartMargin = value;
 | |
|                     break;
 | |
|                 case 16:
 | |
|                     c.layout.goneTopMargin = value;
 | |
|                     break;
 | |
|                 case 17:
 | |
|                     c.layout.guideBegin = value;
 | |
|                     break;
 | |
|                 case 18:
 | |
|                     c.layout.guideEnd = value;
 | |
|                     break;
 | |
|                 case 31:
 | |
|                     c.layout.startMargin = value;
 | |
|                     break;
 | |
|                 case 34:
 | |
|                     c.layout.topMargin = value;
 | |
|                     break;
 | |
|                 case 38:
 | |
|                     c.mViewId = value;
 | |
|                     break;
 | |
|                 case 64:
 | |
|                     c.motion.mAnimateRelativeTo = value;
 | |
|                     break;
 | |
|                 case 66:
 | |
|                     c.motion.mDrawPath = value;
 | |
|                     break;
 | |
|                 case 76:
 | |
|                     c.motion.mPathMotionArc = value;
 | |
|                     break;
 | |
|                 case 78:
 | |
|                     c.propertySet.mVisibilityMode = value;
 | |
|                     break;
 | |
|                 case 93:
 | |
|                     c.layout.baselineMargin = value;
 | |
|                     break;
 | |
|                 case 94:
 | |
|                     c.layout.goneBaselineMargin = value;
 | |
|                     break;
 | |
|                 case 97:
 | |
|                     c.layout.mWrapBehavior = value;
 | |
|                     break;
 | |
|                 default:
 | |
|                     switch (type) {
 | |
|                         case 21:
 | |
|                             c.layout.mHeight = value;
 | |
|                             break;
 | |
|                         case 22:
 | |
|                             c.propertySet.visibility = value;
 | |
|                             break;
 | |
|                         case 23:
 | |
|                             c.layout.mWidth = value;
 | |
|                             break;
 | |
|                         case 24:
 | |
|                             c.layout.leftMargin = value;
 | |
|                             break;
 | |
|                         default:
 | |
|                             switch (type) {
 | |
|                                 case 54:
 | |
|                                     c.layout.widthDefault = value;
 | |
|                                     break;
 | |
|                                 case 55:
 | |
|                                     c.layout.heightDefault = value;
 | |
|                                     break;
 | |
|                                 case 56:
 | |
|                                     c.layout.widthMax = value;
 | |
|                                     break;
 | |
|                                 case 57:
 | |
|                                     c.layout.heightMax = value;
 | |
|                                     break;
 | |
|                                 case 58:
 | |
|                                     c.layout.widthMin = value;
 | |
|                                     break;
 | |
|                                 case 59:
 | |
|                                     c.layout.heightMin = value;
 | |
|                                     break;
 | |
|                                 default:
 | |
|                                     switch (type) {
 | |
|                                         case 82:
 | |
|                                             c.motion.mAnimateCircleAngleTo = value;
 | |
|                                             break;
 | |
|                                         case 83:
 | |
|                                             c.transform.transformPivotTarget = value;
 | |
|                                             break;
 | |
|                                         case 84:
 | |
|                                             c.motion.mQuantizeMotionSteps = value;
 | |
|                                             break;
 | |
|                                         default:
 | |
|                                             switch (type) {
 | |
|                                                 case 87:
 | |
|                                                     break;
 | |
|                                                 case 88:
 | |
|                                                     c.motion.mQuantizeInterpolatorType = value;
 | |
|                                                     break;
 | |
|                                                 case 89:
 | |
|                                                     c.motion.mQuantizeInterpolatorID = value;
 | |
|                                                     break;
 | |
|                                                 default:
 | |
|                                                     Log.w(TAG, "Unknown attribute 0x");
 | |
|                                                     break;
 | |
|                                             }
 | |
|                                     }
 | |
|                             }
 | |
|                     }
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         c.layout.mBarrierMargin = value;
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public static void setDeltaValue(Constraint c, int type, String value) {
 | |
|         if (type == 5) {
 | |
|             c.layout.dimensionRatio = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 65) {
 | |
|             c.motion.mTransitionEasing = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 74) {
 | |
|             c.layout.mReferenceIdString = value;
 | |
|             c.layout.mReferenceIds = null;
 | |
|         } else if (type == 77) {
 | |
|             c.layout.mConstraintTag = value;
 | |
|         } else if (type != 87) {
 | |
|             if (type == 90) {
 | |
|                 c.motion.mQuantizeInterpolatorString = value;
 | |
|             } else {
 | |
|                 Log.w(TAG, "Unknown attribute 0x");
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX INFO: Access modifiers changed from: private */
 | |
|     public static void setDeltaValue(Constraint c, int type, boolean value) {
 | |
|         if (type == 44) {
 | |
|             c.transform.applyElevation = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type == 75) {
 | |
|             c.layout.mBarrierAllowsGoneWidgets = value;
 | |
|             return;
 | |
|         }
 | |
|         if (type != 87) {
 | |
|             if (type == 80) {
 | |
|                 c.layout.constrainedWidth = value;
 | |
|             } else if (type == 81) {
 | |
|                 c.layout.constrainedHeight = value;
 | |
|             } else {
 | |
|                 Log.w(TAG, "Unknown attribute 0x");
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void populateConstraint(Context ctx, Constraint c, TypedArray a, boolean override) {
 | |
|         if (override) {
 | |
|             populateOverride(ctx, c, a);
 | |
|             return;
 | |
|         }
 | |
|         int indexCount = a.getIndexCount();
 | |
|         for (int i = 0; i < indexCount; i++) {
 | |
|             int index = a.getIndex(i);
 | |
|             if (index != R.styleable.Constraint_android_id && R.styleable.Constraint_android_layout_marginStart != index && R.styleable.Constraint_android_layout_marginEnd != index) {
 | |
|                 c.motion.mApply = true;
 | |
|                 c.layout.mApply = true;
 | |
|                 c.propertySet.mApply = true;
 | |
|                 c.transform.mApply = true;
 | |
|             }
 | |
|             switch (mapToConstant.get(index)) {
 | |
|                 case 1:
 | |
|                     c.layout.baselineToBaseline = lookupID(a, index, c.layout.baselineToBaseline);
 | |
|                     break;
 | |
|                 case 2:
 | |
|                     c.layout.bottomMargin = a.getDimensionPixelSize(index, c.layout.bottomMargin);
 | |
|                     break;
 | |
|                 case 3:
 | |
|                     c.layout.bottomToBottom = lookupID(a, index, c.layout.bottomToBottom);
 | |
|                     break;
 | |
|                 case 4:
 | |
|                     c.layout.bottomToTop = lookupID(a, index, c.layout.bottomToTop);
 | |
|                     break;
 | |
|                 case 5:
 | |
|                     c.layout.dimensionRatio = a.getString(index);
 | |
|                     break;
 | |
|                 case 6:
 | |
|                     c.layout.editorAbsoluteX = a.getDimensionPixelOffset(index, c.layout.editorAbsoluteX);
 | |
|                     break;
 | |
|                 case 7:
 | |
|                     c.layout.editorAbsoluteY = a.getDimensionPixelOffset(index, c.layout.editorAbsoluteY);
 | |
|                     break;
 | |
|                 case 8:
 | |
|                     c.layout.endMargin = a.getDimensionPixelSize(index, c.layout.endMargin);
 | |
|                     break;
 | |
|                 case 9:
 | |
|                     c.layout.endToEnd = lookupID(a, index, c.layout.endToEnd);
 | |
|                     break;
 | |
|                 case 10:
 | |
|                     c.layout.endToStart = lookupID(a, index, c.layout.endToStart);
 | |
|                     break;
 | |
|                 case 11:
 | |
|                     c.layout.goneBottomMargin = a.getDimensionPixelSize(index, c.layout.goneBottomMargin);
 | |
|                     break;
 | |
|                 case 12:
 | |
|                     c.layout.goneEndMargin = a.getDimensionPixelSize(index, c.layout.goneEndMargin);
 | |
|                     break;
 | |
|                 case 13:
 | |
|                     c.layout.goneLeftMargin = a.getDimensionPixelSize(index, c.layout.goneLeftMargin);
 | |
|                     break;
 | |
|                 case 14:
 | |
|                     c.layout.goneRightMargin = a.getDimensionPixelSize(index, c.layout.goneRightMargin);
 | |
|                     break;
 | |
|                 case 15:
 | |
|                     c.layout.goneStartMargin = a.getDimensionPixelSize(index, c.layout.goneStartMargin);
 | |
|                     break;
 | |
|                 case 16:
 | |
|                     c.layout.goneTopMargin = a.getDimensionPixelSize(index, c.layout.goneTopMargin);
 | |
|                     break;
 | |
|                 case 17:
 | |
|                     c.layout.guideBegin = a.getDimensionPixelOffset(index, c.layout.guideBegin);
 | |
|                     break;
 | |
|                 case 18:
 | |
|                     c.layout.guideEnd = a.getDimensionPixelOffset(index, c.layout.guideEnd);
 | |
|                     break;
 | |
|                 case 19:
 | |
|                     c.layout.guidePercent = a.getFloat(index, c.layout.guidePercent);
 | |
|                     break;
 | |
|                 case 20:
 | |
|                     c.layout.horizontalBias = a.getFloat(index, c.layout.horizontalBias);
 | |
|                     break;
 | |
|                 case 21:
 | |
|                     c.layout.mHeight = a.getLayoutDimension(index, c.layout.mHeight);
 | |
|                     break;
 | |
|                 case 22:
 | |
|                     c.propertySet.visibility = a.getInt(index, c.propertySet.visibility);
 | |
|                     c.propertySet.visibility = VISIBILITY_FLAGS[c.propertySet.visibility];
 | |
|                     break;
 | |
|                 case 23:
 | |
|                     c.layout.mWidth = a.getLayoutDimension(index, c.layout.mWidth);
 | |
|                     break;
 | |
|                 case 24:
 | |
|                     c.layout.leftMargin = a.getDimensionPixelSize(index, c.layout.leftMargin);
 | |
|                     break;
 | |
|                 case 25:
 | |
|                     c.layout.leftToLeft = lookupID(a, index, c.layout.leftToLeft);
 | |
|                     break;
 | |
|                 case 26:
 | |
|                     c.layout.leftToRight = lookupID(a, index, c.layout.leftToRight);
 | |
|                     break;
 | |
|                 case 27:
 | |
|                     c.layout.orientation = a.getInt(index, c.layout.orientation);
 | |
|                     break;
 | |
|                 case 28:
 | |
|                     c.layout.rightMargin = a.getDimensionPixelSize(index, c.layout.rightMargin);
 | |
|                     break;
 | |
|                 case 29:
 | |
|                     c.layout.rightToLeft = lookupID(a, index, c.layout.rightToLeft);
 | |
|                     break;
 | |
|                 case 30:
 | |
|                     c.layout.rightToRight = lookupID(a, index, c.layout.rightToRight);
 | |
|                     break;
 | |
|                 case 31:
 | |
|                     c.layout.startMargin = a.getDimensionPixelSize(index, c.layout.startMargin);
 | |
|                     break;
 | |
|                 case 32:
 | |
|                     c.layout.startToEnd = lookupID(a, index, c.layout.startToEnd);
 | |
|                     break;
 | |
|                 case 33:
 | |
|                     c.layout.startToStart = lookupID(a, index, c.layout.startToStart);
 | |
|                     break;
 | |
|                 case 34:
 | |
|                     c.layout.topMargin = a.getDimensionPixelSize(index, c.layout.topMargin);
 | |
|                     break;
 | |
|                 case 35:
 | |
|                     c.layout.topToBottom = lookupID(a, index, c.layout.topToBottom);
 | |
|                     break;
 | |
|                 case 36:
 | |
|                     c.layout.topToTop = lookupID(a, index, c.layout.topToTop);
 | |
|                     break;
 | |
|                 case 37:
 | |
|                     c.layout.verticalBias = a.getFloat(index, c.layout.verticalBias);
 | |
|                     break;
 | |
|                 case 38:
 | |
|                     c.mViewId = a.getResourceId(index, c.mViewId);
 | |
|                     break;
 | |
|                 case 39:
 | |
|                     c.layout.horizontalWeight = a.getFloat(index, c.layout.horizontalWeight);
 | |
|                     break;
 | |
|                 case 40:
 | |
|                     c.layout.verticalWeight = a.getFloat(index, c.layout.verticalWeight);
 | |
|                     break;
 | |
|                 case 41:
 | |
|                     c.layout.horizontalChainStyle = a.getInt(index, c.layout.horizontalChainStyle);
 | |
|                     break;
 | |
|                 case 42:
 | |
|                     c.layout.verticalChainStyle = a.getInt(index, c.layout.verticalChainStyle);
 | |
|                     break;
 | |
|                 case 43:
 | |
|                     c.propertySet.alpha = a.getFloat(index, c.propertySet.alpha);
 | |
|                     break;
 | |
|                 case 44:
 | |
|                     c.transform.applyElevation = true;
 | |
|                     c.transform.elevation = a.getDimension(index, c.transform.elevation);
 | |
|                     break;
 | |
|                 case 45:
 | |
|                     c.transform.rotationX = a.getFloat(index, c.transform.rotationX);
 | |
|                     break;
 | |
|                 case 46:
 | |
|                     c.transform.rotationY = a.getFloat(index, c.transform.rotationY);
 | |
|                     break;
 | |
|                 case 47:
 | |
|                     c.transform.scaleX = a.getFloat(index, c.transform.scaleX);
 | |
|                     break;
 | |
|                 case 48:
 | |
|                     c.transform.scaleY = a.getFloat(index, c.transform.scaleY);
 | |
|                     break;
 | |
|                 case 49:
 | |
|                     c.transform.transformPivotX = a.getDimension(index, c.transform.transformPivotX);
 | |
|                     break;
 | |
|                 case 50:
 | |
|                     c.transform.transformPivotY = a.getDimension(index, c.transform.transformPivotY);
 | |
|                     break;
 | |
|                 case 51:
 | |
|                     c.transform.translationX = a.getDimension(index, c.transform.translationX);
 | |
|                     break;
 | |
|                 case 52:
 | |
|                     c.transform.translationY = a.getDimension(index, c.transform.translationY);
 | |
|                     break;
 | |
|                 case 53:
 | |
|                     c.transform.translationZ = a.getDimension(index, c.transform.translationZ);
 | |
|                     break;
 | |
|                 case 54:
 | |
|                     c.layout.widthDefault = a.getInt(index, c.layout.widthDefault);
 | |
|                     break;
 | |
|                 case 55:
 | |
|                     c.layout.heightDefault = a.getInt(index, c.layout.heightDefault);
 | |
|                     break;
 | |
|                 case 56:
 | |
|                     c.layout.widthMax = a.getDimensionPixelSize(index, c.layout.widthMax);
 | |
|                     break;
 | |
|                 case 57:
 | |
|                     c.layout.heightMax = a.getDimensionPixelSize(index, c.layout.heightMax);
 | |
|                     break;
 | |
|                 case 58:
 | |
|                     c.layout.widthMin = a.getDimensionPixelSize(index, c.layout.widthMin);
 | |
|                     break;
 | |
|                 case 59:
 | |
|                     c.layout.heightMin = a.getDimensionPixelSize(index, c.layout.heightMin);
 | |
|                     break;
 | |
|                 case 60:
 | |
|                     c.transform.rotation = a.getFloat(index, c.transform.rotation);
 | |
|                     break;
 | |
|                 case 61:
 | |
|                     c.layout.circleConstraint = lookupID(a, index, c.layout.circleConstraint);
 | |
|                     break;
 | |
|                 case 62:
 | |
|                     c.layout.circleRadius = a.getDimensionPixelSize(index, c.layout.circleRadius);
 | |
|                     break;
 | |
|                 case 63:
 | |
|                     c.layout.circleAngle = a.getFloat(index, c.layout.circleAngle);
 | |
|                     break;
 | |
|                 case 64:
 | |
|                     c.motion.mAnimateRelativeTo = lookupID(a, index, c.motion.mAnimateRelativeTo);
 | |
|                     break;
 | |
|                 case 65:
 | |
|                     if (a.peekValue(index).type == 3) {
 | |
|                         c.motion.mTransitionEasing = a.getString(index);
 | |
|                         break;
 | |
|                     } else {
 | |
|                         c.motion.mTransitionEasing = Easing.NAMED_EASING[a.getInteger(index, 0)];
 | |
|                         break;
 | |
|                     }
 | |
|                 case 66:
 | |
|                     c.motion.mDrawPath = a.getInt(index, 0);
 | |
|                     break;
 | |
|                 case 67:
 | |
|                     c.motion.mPathRotate = a.getFloat(index, c.motion.mPathRotate);
 | |
|                     break;
 | |
|                 case 68:
 | |
|                     c.propertySet.mProgress = a.getFloat(index, c.propertySet.mProgress);
 | |
|                     break;
 | |
|                 case 69:
 | |
|                     c.layout.widthPercent = a.getFloat(index, 1.0f);
 | |
|                     break;
 | |
|                 case 70:
 | |
|                     c.layout.heightPercent = a.getFloat(index, 1.0f);
 | |
|                     break;
 | |
|                 case 71:
 | |
|                     Log.e(TAG, "CURRENTLY UNSUPPORTED");
 | |
|                     break;
 | |
|                 case 72:
 | |
|                     c.layout.mBarrierDirection = a.getInt(index, c.layout.mBarrierDirection);
 | |
|                     break;
 | |
|                 case 73:
 | |
|                     c.layout.mBarrierMargin = a.getDimensionPixelSize(index, c.layout.mBarrierMargin);
 | |
|                     break;
 | |
|                 case 74:
 | |
|                     c.layout.mReferenceIdString = a.getString(index);
 | |
|                     break;
 | |
|                 case 75:
 | |
|                     c.layout.mBarrierAllowsGoneWidgets = a.getBoolean(index, c.layout.mBarrierAllowsGoneWidgets);
 | |
|                     break;
 | |
|                 case 76:
 | |
|                     c.motion.mPathMotionArc = a.getInt(index, c.motion.mPathMotionArc);
 | |
|                     break;
 | |
|                 case 77:
 | |
|                     c.layout.mConstraintTag = a.getString(index);
 | |
|                     break;
 | |
|                 case 78:
 | |
|                     c.propertySet.mVisibilityMode = a.getInt(index, c.propertySet.mVisibilityMode);
 | |
|                     break;
 | |
|                 case 79:
 | |
|                     c.motion.mMotionStagger = a.getFloat(index, c.motion.mMotionStagger);
 | |
|                     break;
 | |
|                 case 80:
 | |
|                     c.layout.constrainedWidth = a.getBoolean(index, c.layout.constrainedWidth);
 | |
|                     break;
 | |
|                 case 81:
 | |
|                     c.layout.constrainedHeight = a.getBoolean(index, c.layout.constrainedHeight);
 | |
|                     break;
 | |
|                 case 82:
 | |
|                     c.motion.mAnimateCircleAngleTo = a.getInteger(index, c.motion.mAnimateCircleAngleTo);
 | |
|                     break;
 | |
|                 case 83:
 | |
|                     c.transform.transformPivotTarget = lookupID(a, index, c.transform.transformPivotTarget);
 | |
|                     break;
 | |
|                 case 84:
 | |
|                     c.motion.mQuantizeMotionSteps = a.getInteger(index, c.motion.mQuantizeMotionSteps);
 | |
|                     break;
 | |
|                 case 85:
 | |
|                     c.motion.mQuantizeMotionPhase = a.getFloat(index, c.motion.mQuantizeMotionPhase);
 | |
|                     break;
 | |
|                 case 86:
 | |
|                     TypedValue peekValue = a.peekValue(index);
 | |
|                     if (peekValue.type == 1) {
 | |
|                         c.motion.mQuantizeInterpolatorID = a.getResourceId(index, -1);
 | |
|                         if (c.motion.mQuantizeInterpolatorID != -1) {
 | |
|                             c.motion.mQuantizeInterpolatorType = -2;
 | |
|                             break;
 | |
|                         } else {
 | |
|                             break;
 | |
|                         }
 | |
|                     } else if (peekValue.type == 3) {
 | |
|                         c.motion.mQuantizeInterpolatorString = a.getString(index);
 | |
|                         if (c.motion.mQuantizeInterpolatorString.indexOf("/") > 0) {
 | |
|                             c.motion.mQuantizeInterpolatorID = a.getResourceId(index, -1);
 | |
|                             c.motion.mQuantizeInterpolatorType = -2;
 | |
|                             break;
 | |
|                         } else {
 | |
|                             c.motion.mQuantizeInterpolatorType = -1;
 | |
|                             break;
 | |
|                         }
 | |
|                     } else {
 | |
|                         c.motion.mQuantizeInterpolatorType = a.getInteger(index, c.motion.mQuantizeInterpolatorID);
 | |
|                         break;
 | |
|                     }
 | |
|                 case 87:
 | |
|                     Log.w(TAG, "unused attribute 0x" + Integer.toHexString(index) + "   " + mapToConstant.get(index));
 | |
|                     break;
 | |
|                 case 88:
 | |
|                 case 89:
 | |
|                 case 90:
 | |
|                 default:
 | |
|                     Log.w(TAG, "Unknown attribute 0x" + Integer.toHexString(index) + "   " + mapToConstant.get(index));
 | |
|                     break;
 | |
|                 case 91:
 | |
|                     c.layout.baselineToTop = lookupID(a, index, c.layout.baselineToTop);
 | |
|                     break;
 | |
|                 case 92:
 | |
|                     c.layout.baselineToBottom = lookupID(a, index, c.layout.baselineToBottom);
 | |
|                     break;
 | |
|                 case 93:
 | |
|                     c.layout.baselineMargin = a.getDimensionPixelSize(index, c.layout.baselineMargin);
 | |
|                     break;
 | |
|                 case 94:
 | |
|                     c.layout.goneBaselineMargin = a.getDimensionPixelSize(index, c.layout.goneBaselineMargin);
 | |
|                     break;
 | |
|                 case 95:
 | |
|                     parseDimensionConstraints(c.layout, a, index, 0);
 | |
|                     break;
 | |
|                 case 96:
 | |
|                     parseDimensionConstraints(c.layout, a, index, 1);
 | |
|                     break;
 | |
|                 case 97:
 | |
|                     c.layout.mWrapBehavior = a.getInt(index, c.layout.mWrapBehavior);
 | |
|                     break;
 | |
|             }
 | |
|         }
 | |
|         if (c.layout.mReferenceIdString != null) {
 | |
|             c.layout.mReferenceIds = null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private int[] convertReferenceString(View view, String referenceIdString) {
 | |
|         int i;
 | |
|         Object designInformation;
 | |
|         String[] split = referenceIdString.split(",");
 | |
|         Context context = view.getContext();
 | |
|         int[] iArr = new int[split.length];
 | |
|         int i2 = 0;
 | |
|         int i3 = 0;
 | |
|         while (i2 < split.length) {
 | |
|             String trim = split[i2].trim();
 | |
|             try {
 | |
|                 i = R.id.class.getField(trim).getInt(null);
 | |
|             } catch (Exception unused) {
 | |
|                 i = 0;
 | |
|             }
 | |
|             if (i == 0) {
 | |
|                 i = context.getResources().getIdentifier(trim, "id", context.getPackageName());
 | |
|             }
 | |
|             if (i == 0 && view.isInEditMode() && (view.getParent() instanceof ConstraintLayout) && (designInformation = ((ConstraintLayout) view.getParent()).getDesignInformation(0, trim)) != null && (designInformation instanceof Integer)) {
 | |
|                 i = ((Integer) designInformation).intValue();
 | |
|             }
 | |
|             iArr[i3] = i;
 | |
|             i2++;
 | |
|             i3++;
 | |
|         }
 | |
|         return i3 != split.length ? Arrays.copyOf(iArr, i3) : iArr;
 | |
|     }
 | |
| 
 | |
|     public Constraint getConstraint(int id) {
 | |
|         if (this.mConstraints.containsKey(Integer.valueOf(id))) {
 | |
|             return this.mConstraints.get(Integer.valueOf(id));
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     public int[] getKnownIds() {
 | |
|         Integer[] numArr = (Integer[]) this.mConstraints.keySet().toArray(new Integer[0]);
 | |
|         int length = numArr.length;
 | |
|         int[] iArr = new int[length];
 | |
|         for (int i = 0; i < length; i++) {
 | |
|             iArr[i] = numArr[i].intValue();
 | |
|         }
 | |
|         return iArr;
 | |
|     }
 | |
| 
 | |
|     public void dump(MotionScene scene, int... ids) {
 | |
|         HashSet hashSet;
 | |
|         Set<Integer> keySet = this.mConstraints.keySet();
 | |
|         if (ids.length != 0) {
 | |
|             hashSet = new HashSet();
 | |
|             for (int i : ids) {
 | |
|                 hashSet.add(Integer.valueOf(i));
 | |
|             }
 | |
|         } else {
 | |
|             hashSet = new HashSet(keySet);
 | |
|         }
 | |
|         System.out.println(hashSet.size() + " constraints");
 | |
|         StringBuilder sb = new StringBuilder();
 | |
|         for (Integer num : (Integer[]) hashSet.toArray(new Integer[0])) {
 | |
|             Constraint constraint = this.mConstraints.get(num);
 | |
|             if (constraint != null) {
 | |
|                 sb.append("<Constraint id=");
 | |
|                 sb.append(num);
 | |
|                 sb.append(" \n");
 | |
|                 constraint.layout.dump(scene, sb);
 | |
|                 sb.append("/>\n");
 | |
|             }
 | |
|         }
 | |
|         System.out.println(sb.toString());
 | |
|     }
 | |
| 
 | |
|     static String getLine(Context context, int resourceId, XmlPullParser pullParser) {
 | |
|         return ".(" + Debug.getName(context, resourceId) + ".xml:" + pullParser.getLineNumber() + ") \"" + pullParser.getName() + "\"";
 | |
|     }
 | |
| 
 | |
|     static String getDebugName(int v) {
 | |
|         for (Field field : ConstraintSet.class.getDeclaredFields()) {
 | |
|             if (field.getName().contains("_") && field.getType() == Integer.TYPE && Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) {
 | |
|                 try {
 | |
|                     if (field.getInt(null) == v) {
 | |
|                         return field.getName();
 | |
|                     }
 | |
|                     continue;
 | |
|                 } catch (IllegalAccessException e) {
 | |
|                     e.printStackTrace();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return "UNKNOWN";
 | |
|     }
 | |
| 
 | |
|     public void writeState(Writer writer, ConstraintLayout layout, int flags) throws IOException {
 | |
|         writer.write("\n---------------------------------------------\n");
 | |
|         if ((flags & 1) == 1) {
 | |
|             new WriteXmlEngine(writer, layout, flags).writeLayout();
 | |
|         } else {
 | |
|             new WriteJsonEngine(writer, layout, flags).writeLayout();
 | |
|         }
 | |
|         writer.write("\n---------------------------------------------\n");
 | |
|     }
 | |
| 
 | |
|     class WriteXmlEngine {
 | |
|         private static final String SPACE = "\n       ";
 | |
|         Context context;
 | |
|         int flags;
 | |
|         ConstraintLayout layout;
 | |
|         Writer writer;
 | |
|         int unknownCount = 0;
 | |
|         final String LEFT = "'left'";
 | |
|         final String RIGHT = "'right'";
 | |
|         final String BASELINE = "'baseline'";
 | |
|         final String BOTTOM = "'bottom'";
 | |
|         final String TOP = "'top'";
 | |
|         final String START = "'start'";
 | |
|         final String END = "'end'";
 | |
|         HashMap<Integer, String> idMap = new HashMap<>();
 | |
| 
 | |
|         WriteXmlEngine(Writer writer, ConstraintLayout layout, int flags) throws IOException {
 | |
|             this.writer = writer;
 | |
|             this.layout = layout;
 | |
|             this.context = layout.getContext();
 | |
|             this.flags = flags;
 | |
|         }
 | |
| 
 | |
|         void writeLayout() throws IOException {
 | |
|             this.writer.write("\n<ConstraintSet>\n");
 | |
|             for (Integer num : ConstraintSet.this.mConstraints.keySet()) {
 | |
|                 Constraint constraint = (Constraint) ConstraintSet.this.mConstraints.get(num);
 | |
|                 String name = getName(num.intValue());
 | |
|                 this.writer.write("  <Constraint");
 | |
|                 this.writer.write("\n       android:id=\"" + name + "\"");
 | |
|                 Layout layout = constraint.layout;
 | |
|                 writeBaseDimension("android:layout_width", layout.mWidth, -5);
 | |
|                 writeBaseDimension("android:layout_height", layout.mHeight, -5);
 | |
|                 writeVariable("app:layout_constraintGuide_begin", layout.guideBegin, -1.0f);
 | |
|                 writeVariable("app:layout_constraintGuide_end", layout.guideEnd, -1.0f);
 | |
|                 writeVariable("app:layout_constraintGuide_percent", layout.guidePercent, -1.0f);
 | |
|                 writeVariable("app:layout_constraintHorizontal_bias", layout.horizontalBias, 0.5f);
 | |
|                 writeVariable("app:layout_constraintVertical_bias", layout.verticalBias, 0.5f);
 | |
|                 writeVariable("app:layout_constraintDimensionRatio", layout.dimensionRatio, (String) null);
 | |
|                 writeXmlConstraint("app:layout_constraintCircle", layout.circleConstraint);
 | |
|                 writeVariable("app:layout_constraintCircleRadius", layout.circleRadius, 0.0f);
 | |
|                 writeVariable("app:layout_constraintCircleAngle", layout.circleAngle, 0.0f);
 | |
|                 writeVariable("android:orientation", layout.orientation, -1.0f);
 | |
|                 writeVariable("app:layout_constraintVertical_weight", layout.verticalWeight, -1.0f);
 | |
|                 writeVariable("app:layout_constraintHorizontal_weight", layout.horizontalWeight, -1.0f);
 | |
|                 writeVariable("app:layout_constraintHorizontal_chainStyle", layout.horizontalChainStyle, 0.0f);
 | |
|                 writeVariable("app:layout_constraintVertical_chainStyle", layout.verticalChainStyle, 0.0f);
 | |
|                 writeVariable("app:barrierDirection", layout.mBarrierDirection, -1.0f);
 | |
|                 writeVariable("app:barrierMargin", layout.mBarrierMargin, 0.0f);
 | |
|                 writeDimension("app:layout_marginLeft", layout.leftMargin, 0);
 | |
|                 writeDimension("app:layout_goneMarginLeft", layout.goneLeftMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:layout_marginRight", layout.rightMargin, 0);
 | |
|                 writeDimension("app:layout_goneMarginRight", layout.goneRightMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:layout_marginStart", layout.startMargin, 0);
 | |
|                 writeDimension("app:layout_goneMarginStart", layout.goneStartMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:layout_marginEnd", layout.endMargin, 0);
 | |
|                 writeDimension("app:layout_goneMarginEnd", layout.goneEndMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:layout_marginTop", layout.topMargin, 0);
 | |
|                 writeDimension("app:layout_goneMarginTop", layout.goneTopMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:layout_marginBottom", layout.bottomMargin, 0);
 | |
|                 writeDimension("app:layout_goneMarginBottom", layout.goneBottomMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:goneBaselineMargin", layout.goneBaselineMargin, Integer.MIN_VALUE);
 | |
|                 writeDimension("app:baselineMargin", layout.baselineMargin, 0);
 | |
|                 writeBoolen("app:layout_constrainedWidth", layout.constrainedWidth, false);
 | |
|                 writeBoolen("app:layout_constrainedHeight", layout.constrainedHeight, false);
 | |
|                 writeBoolen("app:barrierAllowsGoneWidgets", layout.mBarrierAllowsGoneWidgets, true);
 | |
|                 writeVariable("app:layout_wrapBehaviorInParent", layout.mWrapBehavior, 0.0f);
 | |
|                 writeXmlConstraint("app:baselineToBaseline", layout.baselineToBaseline);
 | |
|                 writeXmlConstraint("app:baselineToBottom", layout.baselineToBottom);
 | |
|                 writeXmlConstraint("app:baselineToTop", layout.baselineToTop);
 | |
|                 writeXmlConstraint("app:layout_constraintBottom_toBottomOf", layout.bottomToBottom);
 | |
|                 writeXmlConstraint("app:layout_constraintBottom_toTopOf", layout.bottomToTop);
 | |
|                 writeXmlConstraint("app:layout_constraintEnd_toEndOf", layout.endToEnd);
 | |
|                 writeXmlConstraint("app:layout_constraintEnd_toStartOf", layout.endToStart);
 | |
|                 writeXmlConstraint("app:layout_constraintLeft_toLeftOf", layout.leftToLeft);
 | |
|                 writeXmlConstraint("app:layout_constraintLeft_toRightOf", layout.leftToRight);
 | |
|                 writeXmlConstraint("app:layout_constraintRight_toLeftOf", layout.rightToLeft);
 | |
|                 writeXmlConstraint("app:layout_constraintRight_toRightOf", layout.rightToRight);
 | |
|                 writeXmlConstraint("app:layout_constraintStart_toEndOf", layout.startToEnd);
 | |
|                 writeXmlConstraint("app:layout_constraintStart_toStartOf", layout.startToStart);
 | |
|                 writeXmlConstraint("app:layout_constraintTop_toBottomOf", layout.topToBottom);
 | |
|                 writeXmlConstraint("app:layout_constraintTop_toTopOf", layout.topToTop);
 | |
|                 String[] strArr = {"spread", "wrap", "percent"};
 | |
|                 writeEnum("app:layout_constraintHeight_default", layout.heightDefault, strArr, 0);
 | |
|                 writeVariable("app:layout_constraintHeight_percent", layout.heightPercent, 1.0f);
 | |
|                 writeDimension("app:layout_constraintHeight_min", layout.heightMin, 0);
 | |
|                 writeDimension("app:layout_constraintHeight_max", layout.heightMax, 0);
 | |
|                 writeBoolen("android:layout_constrainedHeight", layout.constrainedHeight, false);
 | |
|                 writeEnum("app:layout_constraintWidth_default", layout.widthDefault, strArr, 0);
 | |
|                 writeVariable("app:layout_constraintWidth_percent", layout.widthPercent, 1.0f);
 | |
|                 writeDimension("app:layout_constraintWidth_min", layout.widthMin, 0);
 | |
|                 writeDimension("app:layout_constraintWidth_max", layout.widthMax, 0);
 | |
|                 writeBoolen("android:layout_constrainedWidth", layout.constrainedWidth, false);
 | |
|                 writeVariable("app:layout_constraintVertical_weight", layout.verticalWeight, -1.0f);
 | |
|                 writeVariable("app:layout_constraintHorizontal_weight", layout.horizontalWeight, -1.0f);
 | |
|                 writeVariable("app:layout_constraintHorizontal_chainStyle", layout.horizontalChainStyle);
 | |
|                 writeVariable("app:layout_constraintVertical_chainStyle", layout.verticalChainStyle);
 | |
|                 writeEnum("app:barrierDirection", layout.mBarrierDirection, new String[]{"left", "right", "top", "bottom", "start", "end"}, -1);
 | |
|                 writeVariable("app:layout_constraintTag", layout.mConstraintTag, (String) null);
 | |
|                 if (layout.mReferenceIds != null) {
 | |
|                     writeVariable("'ReferenceIds'", layout.mReferenceIds);
 | |
|                 }
 | |
|                 this.writer.write(" />\n");
 | |
|             }
 | |
|             this.writer.write("</ConstraintSet>\n");
 | |
|         }
 | |
| 
 | |
|         private void writeBoolen(String dimString, boolean val, boolean def) throws IOException {
 | |
|             if (val != def) {
 | |
|                 this.writer.write(SPACE + dimString + "=\"" + val + "dp\"");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void writeEnum(String dimString, int val, String[] types, int def) throws IOException {
 | |
|             if (val != def) {
 | |
|                 this.writer.write(SPACE + dimString + "=\"" + types[val] + "\"");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void writeDimension(String dimString, int dim, int def) throws IOException {
 | |
|             if (dim != def) {
 | |
|                 this.writer.write(SPACE + dimString + "=\"" + dim + "dp\"");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void writeBaseDimension(String dimString, int dim, int def) throws IOException {
 | |
|             if (dim != def) {
 | |
|                 if (dim == -2) {
 | |
|                     this.writer.write(SPACE + dimString + "=\"wrap_content\"");
 | |
|                     return;
 | |
|                 }
 | |
|                 if (dim == -1) {
 | |
|                     this.writer.write(SPACE + dimString + "=\"match_parent\"");
 | |
|                     return;
 | |
|                 }
 | |
|                 this.writer.write(SPACE + dimString + "=\"" + dim + "dp\"");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         String getName(int id) {
 | |
|             if (this.idMap.containsKey(Integer.valueOf(id))) {
 | |
|                 return "@+id/" + this.idMap.get(Integer.valueOf(id)) + "";
 | |
|             }
 | |
|             if (id == 0) {
 | |
|                 return ConstraintSet.KEY_PERCENT_PARENT;
 | |
|             }
 | |
|             String lookup = lookup(id);
 | |
|             this.idMap.put(Integer.valueOf(id), lookup);
 | |
|             return "@+id/" + lookup + "";
 | |
|         }
 | |
| 
 | |
|         String lookup(int id) {
 | |
|             try {
 | |
|                 if (id != -1) {
 | |
|                     return this.context.getResources().getResourceEntryName(id);
 | |
|                 }
 | |
|                 StringBuilder sb = new StringBuilder(EnvironmentCompat.MEDIA_UNKNOWN);
 | |
|                 int i = this.unknownCount + 1;
 | |
|                 this.unknownCount = i;
 | |
|                 sb.append(i);
 | |
|                 return sb.toString();
 | |
|             } catch (Exception unused) {
 | |
|                 StringBuilder sb2 = new StringBuilder(EnvironmentCompat.MEDIA_UNKNOWN);
 | |
|                 int i2 = this.unknownCount + 1;
 | |
|                 this.unknownCount = i2;
 | |
|                 sb2.append(i2);
 | |
|                 return sb2.toString();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void writeXmlConstraint(String str, int leftToLeft) throws IOException {
 | |
|             if (leftToLeft == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + str);
 | |
|             this.writer.write("=\"" + getName(leftToLeft) + "\"");
 | |
|         }
 | |
| 
 | |
|         void writeConstraint(String my, int leftToLeft, String other, int margin, int goneMargin) throws IOException {
 | |
|             if (leftToLeft == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + my);
 | |
|             this.writer.write(":[");
 | |
|             this.writer.write(getName(leftToLeft));
 | |
|             this.writer.write(" , ");
 | |
|             this.writer.write(other);
 | |
|             if (margin != 0) {
 | |
|                 this.writer.write(" , " + margin);
 | |
|             }
 | |
|             this.writer.write("],\n");
 | |
|         }
 | |
| 
 | |
|         void writeCircle(int circleConstraint, float circleAngle, int circleRadius) throws IOException {
 | |
|             if (circleConstraint == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write("circle");
 | |
|             this.writer.write(":[");
 | |
|             this.writer.write(getName(circleConstraint));
 | |
|             this.writer.write(", " + circleAngle);
 | |
|             this.writer.write(circleRadius + "]");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, int value) throws IOException {
 | |
|             if (value == 0 || value == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name + "=\"" + value + "\"\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, float value, float def) throws IOException {
 | |
|             if (value == def) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write("=\"" + value + "\"");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, String value, String def) throws IOException {
 | |
|             if (value == null || value.equals(def)) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write("=\"" + value + "\"");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, int[] value) throws IOException {
 | |
|             if (value == null) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(":");
 | |
|             int i = 0;
 | |
|             while (i < value.length) {
 | |
|                 Writer writer = this.writer;
 | |
|                 StringBuilder sb = new StringBuilder();
 | |
|                 sb.append(i == 0 ? "[" : ", ");
 | |
|                 sb.append(getName(value[i]));
 | |
|                 writer.write(sb.toString());
 | |
|                 i++;
 | |
|             }
 | |
|             this.writer.write("],\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, String value) throws IOException {
 | |
|             if (value == null) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(name);
 | |
|             this.writer.write(":");
 | |
|             this.writer.write(", " + value);
 | |
|             this.writer.write("\n");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     class WriteJsonEngine {
 | |
|         private static final String SPACE = "       ";
 | |
|         Context context;
 | |
|         int flags;
 | |
|         ConstraintLayout layout;
 | |
|         Writer writer;
 | |
|         int unknownCount = 0;
 | |
|         final String LEFT = "'left'";
 | |
|         final String RIGHT = "'right'";
 | |
|         final String BASELINE = "'baseline'";
 | |
|         final String BOTTOM = "'bottom'";
 | |
|         final String TOP = "'top'";
 | |
|         final String START = "'start'";
 | |
|         final String END = "'end'";
 | |
|         HashMap<Integer, String> idMap = new HashMap<>();
 | |
| 
 | |
|         private void writeGuideline(int orientation, int guideBegin, int guideEnd, float guidePercent) {
 | |
|         }
 | |
| 
 | |
|         WriteJsonEngine(Writer writer, ConstraintLayout layout, int flags) throws IOException {
 | |
|             this.writer = writer;
 | |
|             this.layout = layout;
 | |
|             this.context = layout.getContext();
 | |
|             this.flags = flags;
 | |
|         }
 | |
| 
 | |
|         void writeLayout() throws IOException {
 | |
|             this.writer.write("\n'ConstraintSet':{\n");
 | |
|             for (Integer num : ConstraintSet.this.mConstraints.keySet()) {
 | |
|                 Constraint constraint = (Constraint) ConstraintSet.this.mConstraints.get(num);
 | |
|                 String name = getName(num.intValue());
 | |
|                 this.writer.write(name + ":{\n");
 | |
|                 Layout layout = constraint.layout;
 | |
|                 writeDimension("height", layout.mHeight, layout.heightDefault, layout.heightPercent, layout.heightMin, layout.heightMax, layout.constrainedHeight);
 | |
|                 writeDimension("width", layout.mWidth, layout.widthDefault, layout.widthPercent, layout.widthMin, layout.widthMax, layout.constrainedWidth);
 | |
|                 writeConstraint("'left'", layout.leftToLeft, "'left'", layout.leftMargin, layout.goneLeftMargin);
 | |
|                 writeConstraint("'left'", layout.leftToRight, "'right'", layout.leftMargin, layout.goneLeftMargin);
 | |
|                 writeConstraint("'right'", layout.rightToLeft, "'left'", layout.rightMargin, layout.goneRightMargin);
 | |
|                 writeConstraint("'right'", layout.rightToRight, "'right'", layout.rightMargin, layout.goneRightMargin);
 | |
|                 writeConstraint("'baseline'", layout.baselineToBaseline, "'baseline'", -1, layout.goneBaselineMargin);
 | |
|                 writeConstraint("'baseline'", layout.baselineToTop, "'top'", -1, layout.goneBaselineMargin);
 | |
|                 writeConstraint("'baseline'", layout.baselineToBottom, "'bottom'", -1, layout.goneBaselineMargin);
 | |
|                 writeConstraint("'top'", layout.topToBottom, "'bottom'", layout.topMargin, layout.goneTopMargin);
 | |
|                 writeConstraint("'top'", layout.topToTop, "'top'", layout.topMargin, layout.goneTopMargin);
 | |
|                 writeConstraint("'bottom'", layout.bottomToBottom, "'bottom'", layout.bottomMargin, layout.goneBottomMargin);
 | |
|                 writeConstraint("'bottom'", layout.bottomToTop, "'top'", layout.bottomMargin, layout.goneBottomMargin);
 | |
|                 writeConstraint("'start'", layout.startToStart, "'start'", layout.startMargin, layout.goneStartMargin);
 | |
|                 writeConstraint("'start'", layout.startToEnd, "'end'", layout.startMargin, layout.goneStartMargin);
 | |
|                 writeConstraint("'end'", layout.endToStart, "'start'", layout.endMargin, layout.goneEndMargin);
 | |
|                 writeConstraint("'end'", layout.endToEnd, "'end'", layout.endMargin, layout.goneEndMargin);
 | |
|                 writeVariable("'horizontalBias'", layout.horizontalBias, 0.5f);
 | |
|                 writeVariable("'verticalBias'", layout.verticalBias, 0.5f);
 | |
|                 writeCircle(layout.circleConstraint, layout.circleAngle, layout.circleRadius);
 | |
|                 writeGuideline(layout.orientation, layout.guideBegin, layout.guideEnd, layout.guidePercent);
 | |
|                 writeVariable("'dimensionRatio'", layout.dimensionRatio);
 | |
|                 writeVariable("'barrierMargin'", layout.mBarrierMargin);
 | |
|                 writeVariable("'type'", layout.mHelperType);
 | |
|                 writeVariable("'ReferenceId'", layout.mReferenceIdString);
 | |
|                 writeVariable("'mBarrierAllowsGoneWidgets'", layout.mBarrierAllowsGoneWidgets, true);
 | |
|                 writeVariable("'WrapBehavior'", layout.mWrapBehavior);
 | |
|                 writeVariable("'verticalWeight'", layout.verticalWeight);
 | |
|                 writeVariable("'horizontalWeight'", layout.horizontalWeight);
 | |
|                 writeVariable("'horizontalChainStyle'", layout.horizontalChainStyle);
 | |
|                 writeVariable("'verticalChainStyle'", layout.verticalChainStyle);
 | |
|                 writeVariable("'barrierDirection'", layout.mBarrierDirection);
 | |
|                 if (layout.mReferenceIds != null) {
 | |
|                     writeVariable("'ReferenceIds'", layout.mReferenceIds);
 | |
|                 }
 | |
|                 this.writer.write("}\n");
 | |
|             }
 | |
|             this.writer.write("}\n");
 | |
|         }
 | |
| 
 | |
|         private void writeDimension(String dimString, int dim, int dimDefault, float dimPercent, int dimMin, int dimMax, boolean constrainedDim) throws IOException {
 | |
|             if (dim != 0) {
 | |
|                 if (dim == -2) {
 | |
|                     this.writer.write(SPACE + dimString + ": 'wrap'\n");
 | |
|                     return;
 | |
|                 }
 | |
|                 if (dim == -1) {
 | |
|                     this.writer.write(SPACE + dimString + ": 'parent'\n");
 | |
|                     return;
 | |
|                 }
 | |
|                 this.writer.write(SPACE + dimString + ": " + dim + ",\n");
 | |
|                 return;
 | |
|             }
 | |
|             if (dimMax == -1 && dimMin == -1) {
 | |
|                 if (dimDefault == 1) {
 | |
|                     this.writer.write(SPACE + dimString + ": '???????????',\n");
 | |
|                     return;
 | |
|                 }
 | |
|                 if (dimDefault != 2) {
 | |
|                     return;
 | |
|                 }
 | |
|                 this.writer.write(SPACE + dimString + ": '" + dimPercent + "%',\n");
 | |
|                 return;
 | |
|             }
 | |
|             if (dimDefault == 0) {
 | |
|                 this.writer.write(SPACE + dimString + ": {'spread' ," + dimMin + ", " + dimMax + "}\n");
 | |
|                 return;
 | |
|             }
 | |
|             if (dimDefault == 1) {
 | |
|                 this.writer.write(SPACE + dimString + ": {'wrap' ," + dimMin + ", " + dimMax + "}\n");
 | |
|                 return;
 | |
|             }
 | |
|             if (dimDefault != 2) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + dimString + ": {'" + dimPercent + "'% ," + dimMin + ", " + dimMax + "}\n");
 | |
|         }
 | |
| 
 | |
|         String getName(int id) {
 | |
|             if (this.idMap.containsKey(Integer.valueOf(id))) {
 | |
|                 return "'" + this.idMap.get(Integer.valueOf(id)) + "'";
 | |
|             }
 | |
|             if (id == 0) {
 | |
|                 return "'parent'";
 | |
|             }
 | |
|             String lookup = lookup(id);
 | |
|             this.idMap.put(Integer.valueOf(id), lookup);
 | |
|             return "'" + lookup + "'";
 | |
|         }
 | |
| 
 | |
|         String lookup(int id) {
 | |
|             try {
 | |
|                 if (id != -1) {
 | |
|                     return this.context.getResources().getResourceEntryName(id);
 | |
|                 }
 | |
|                 StringBuilder sb = new StringBuilder(EnvironmentCompat.MEDIA_UNKNOWN);
 | |
|                 int i = this.unknownCount + 1;
 | |
|                 this.unknownCount = i;
 | |
|                 sb.append(i);
 | |
|                 return sb.toString();
 | |
|             } catch (Exception unused) {
 | |
|                 StringBuilder sb2 = new StringBuilder(EnvironmentCompat.MEDIA_UNKNOWN);
 | |
|                 int i2 = this.unknownCount + 1;
 | |
|                 this.unknownCount = i2;
 | |
|                 sb2.append(i2);
 | |
|                 return sb2.toString();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void writeConstraint(String my, int leftToLeft, String other, int margin, int goneMargin) throws IOException {
 | |
|             if (leftToLeft == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + my);
 | |
|             this.writer.write(":[");
 | |
|             this.writer.write(getName(leftToLeft));
 | |
|             this.writer.write(" , ");
 | |
|             this.writer.write(other);
 | |
|             if (margin != 0) {
 | |
|                 this.writer.write(" , " + margin);
 | |
|             }
 | |
|             this.writer.write("],\n");
 | |
|         }
 | |
| 
 | |
|         void writeCircle(int circleConstraint, float circleAngle, int circleRadius) throws IOException {
 | |
|             if (circleConstraint == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write("       circle");
 | |
|             this.writer.write(":[");
 | |
|             this.writer.write(getName(circleConstraint));
 | |
|             this.writer.write(", " + circleAngle);
 | |
|             this.writer.write(circleRadius + "]");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, int value) throws IOException {
 | |
|             if (value == 0 || value == -1) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(":");
 | |
|             this.writer.write(", " + value);
 | |
|             this.writer.write("\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, float value) throws IOException {
 | |
|             if (value == -1.0f) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(": " + value);
 | |
|             this.writer.write(",\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, float value, float def) throws IOException {
 | |
|             if (value == def) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(": " + value);
 | |
|             this.writer.write(",\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, boolean value) throws IOException {
 | |
|             if (value) {
 | |
|                 this.writer.write(SPACE + name);
 | |
|                 this.writer.write(": " + value);
 | |
|                 this.writer.write(",\n");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, boolean value, boolean def) throws IOException {
 | |
|             if (value == def) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(": " + value);
 | |
|             this.writer.write(",\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, int[] value) throws IOException {
 | |
|             if (value == null) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(": ");
 | |
|             int i = 0;
 | |
|             while (i < value.length) {
 | |
|                 Writer writer = this.writer;
 | |
|                 StringBuilder sb = new StringBuilder();
 | |
|                 sb.append(i == 0 ? "[" : ", ");
 | |
|                 sb.append(getName(value[i]));
 | |
|                 writer.write(sb.toString());
 | |
|                 i++;
 | |
|             }
 | |
|             this.writer.write("],\n");
 | |
|         }
 | |
| 
 | |
|         void writeVariable(String name, String value) throws IOException {
 | |
|             if (value == null) {
 | |
|                 return;
 | |
|             }
 | |
|             this.writer.write(SPACE + name);
 | |
|             this.writer.write(":");
 | |
|             this.writer.write(", " + value);
 | |
|             this.writer.write("\n");
 | |
|         }
 | |
|     }
 | |
| }
 |