191 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.constraintlayout.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Canvas;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.View;
 | |
| import androidx.constraintlayout.motion.widget.MotionLayout;
 | |
| import androidx.constraintlayout.widget.ConstraintLayout;
 | |
| import androidx.constraintlayout.widget.SharedValues;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class ReactiveGuide extends View implements SharedValues.SharedValuesListener {
 | |
|     private boolean mAnimateChange;
 | |
|     private boolean mApplyToAllConstraintSets;
 | |
|     private int mApplyToConstraintSetId;
 | |
|     private int mAttributeId;
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void draw(Canvas canvas) {
 | |
|     }
 | |
| 
 | |
|     public int getApplyToConstraintSetId() {
 | |
|         return this.mApplyToConstraintSetId;
 | |
|     }
 | |
| 
 | |
|     public int getAttributeId() {
 | |
|         return this.mAttributeId;
 | |
|     }
 | |
| 
 | |
|     public boolean isAnimatingChange() {
 | |
|         return this.mAnimateChange;
 | |
|     }
 | |
| 
 | |
|     public void setAnimateChange(boolean animate) {
 | |
|         this.mAnimateChange = animate;
 | |
|     }
 | |
| 
 | |
|     public void setApplyToConstraintSetId(int id) {
 | |
|         this.mApplyToConstraintSetId = id;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setVisibility(int visibility) {
 | |
|     }
 | |
| 
 | |
|     public ReactiveGuide(Context context) {
 | |
|         super(context);
 | |
|         this.mAttributeId = -1;
 | |
|         this.mAnimateChange = false;
 | |
|         this.mApplyToConstraintSetId = 0;
 | |
|         this.mApplyToAllConstraintSets = true;
 | |
|         super.setVisibility(8);
 | |
|         init(null);
 | |
|     }
 | |
| 
 | |
|     public ReactiveGuide(Context context, AttributeSet attrs) {
 | |
|         super(context, attrs);
 | |
|         this.mAttributeId = -1;
 | |
|         this.mAnimateChange = false;
 | |
|         this.mApplyToConstraintSetId = 0;
 | |
|         this.mApplyToAllConstraintSets = true;
 | |
|         super.setVisibility(8);
 | |
|         init(attrs);
 | |
|     }
 | |
| 
 | |
|     public ReactiveGuide(Context context, AttributeSet attrs, int defStyleAttr) {
 | |
|         super(context, attrs, defStyleAttr);
 | |
|         this.mAttributeId = -1;
 | |
|         this.mAnimateChange = false;
 | |
|         this.mApplyToConstraintSetId = 0;
 | |
|         this.mApplyToAllConstraintSets = true;
 | |
|         super.setVisibility(8);
 | |
|         init(attrs);
 | |
|     }
 | |
| 
 | |
|     public ReactiveGuide(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
 | |
|         super(context, attrs, defStyleAttr);
 | |
|         this.mAttributeId = -1;
 | |
|         this.mAnimateChange = false;
 | |
|         this.mApplyToConstraintSetId = 0;
 | |
|         this.mApplyToAllConstraintSets = true;
 | |
|         super.setVisibility(8);
 | |
|         init(attrs);
 | |
|     }
 | |
| 
 | |
|     private void init(AttributeSet attrs) {
 | |
|         if (attrs != null) {
 | |
|             TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.ConstraintLayout_ReactiveGuide);
 | |
|             int indexCount = obtainStyledAttributes.getIndexCount();
 | |
|             for (int i = 0; i < indexCount; i++) {
 | |
|                 int index = obtainStyledAttributes.getIndex(i);
 | |
|                 if (index == R.styleable.ConstraintLayout_ReactiveGuide_reactiveGuide_valueId) {
 | |
|                     this.mAttributeId = obtainStyledAttributes.getResourceId(index, this.mAttributeId);
 | |
|                 } else if (index == R.styleable.ConstraintLayout_ReactiveGuide_reactiveGuide_animateChange) {
 | |
|                     this.mAnimateChange = obtainStyledAttributes.getBoolean(index, this.mAnimateChange);
 | |
|                 } else if (index == R.styleable.ConstraintLayout_ReactiveGuide_reactiveGuide_applyToConstraintSet) {
 | |
|                     this.mApplyToConstraintSetId = obtainStyledAttributes.getResourceId(index, this.mApplyToConstraintSetId);
 | |
|                 } else if (index == R.styleable.ConstraintLayout_ReactiveGuide_reactiveGuide_applyToAllConstraintSets) {
 | |
|                     this.mApplyToAllConstraintSets = obtainStyledAttributes.getBoolean(index, this.mApplyToAllConstraintSets);
 | |
|                 }
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
|         if (this.mAttributeId != -1) {
 | |
|             ConstraintLayout.getSharedValues().addListener(this.mAttributeId, this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setAttributeId(int id) {
 | |
|         SharedValues sharedValues = ConstraintLayout.getSharedValues();
 | |
|         int i = this.mAttributeId;
 | |
|         if (i != -1) {
 | |
|             sharedValues.removeListener(i, this);
 | |
|         }
 | |
|         this.mAttributeId = id;
 | |
|         if (id != -1) {
 | |
|             sharedValues.addListener(id, this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 | |
|         setMeasuredDimension(0, 0);
 | |
|     }
 | |
| 
 | |
|     public void setGuidelineBegin(int margin) {
 | |
|         ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) getLayoutParams();
 | |
|         layoutParams.guideBegin = margin;
 | |
|         setLayoutParams(layoutParams);
 | |
|     }
 | |
| 
 | |
|     public void setGuidelineEnd(int margin) {
 | |
|         ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) getLayoutParams();
 | |
|         layoutParams.guideEnd = margin;
 | |
|         setLayoutParams(layoutParams);
 | |
|     }
 | |
| 
 | |
|     public void setGuidelinePercent(float ratio) {
 | |
|         ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) getLayoutParams();
 | |
|         layoutParams.guidePercent = ratio;
 | |
|         setLayoutParams(layoutParams);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.constraintlayout.widget.SharedValues.SharedValuesListener
 | |
|     public void onNewValue(int key, int newValue, int oldValue) {
 | |
|         setGuidelineBegin(newValue);
 | |
|         int id = getId();
 | |
|         if (id > 0 && (getParent() instanceof MotionLayout)) {
 | |
|             MotionLayout motionLayout = (MotionLayout) getParent();
 | |
|             int currentState = motionLayout.getCurrentState();
 | |
|             int i = this.mApplyToConstraintSetId;
 | |
|             if (i != 0) {
 | |
|                 currentState = i;
 | |
|             }
 | |
|             int i2 = 0;
 | |
|             if (!this.mAnimateChange) {
 | |
|                 if (this.mApplyToAllConstraintSets) {
 | |
|                     int[] constraintSetIds = motionLayout.getConstraintSetIds();
 | |
|                     while (i2 < constraintSetIds.length) {
 | |
|                         changeValue(newValue, id, motionLayout, constraintSetIds[i2]);
 | |
|                         i2++;
 | |
|                     }
 | |
|                     return;
 | |
|                 }
 | |
|                 changeValue(newValue, id, motionLayout, currentState);
 | |
|                 return;
 | |
|             }
 | |
|             if (this.mApplyToAllConstraintSets) {
 | |
|                 int[] constraintSetIds2 = motionLayout.getConstraintSetIds();
 | |
|                 while (i2 < constraintSetIds2.length) {
 | |
|                     int i3 = constraintSetIds2[i2];
 | |
|                     if (i3 != currentState) {
 | |
|                         changeValue(newValue, id, motionLayout, i3);
 | |
|                     }
 | |
|                     i2++;
 | |
|                 }
 | |
|             }
 | |
|             ConstraintSet cloneConstraintSet = motionLayout.cloneConstraintSet(currentState);
 | |
|             cloneConstraintSet.setGuidelineEnd(id, newValue);
 | |
|             motionLayout.updateStateAnimate(currentState, cloneConstraintSet, 1000);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void changeValue(int newValue, int id, MotionLayout motionLayout, int currentState) {
 | |
|         ConstraintSet constraintSet = motionLayout.getConstraintSet(currentState);
 | |
|         constraintSet.setGuidelineEnd(id, newValue);
 | |
|         motionLayout.updateState(currentState, constraintSet);
 | |
|     }
 | |
| }
 |