ADD week 5
This commit is contained in:
		| @@ -0,0 +1,349 @@ | ||||
| package androidx.constraintlayout.helper.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.util.AttributeSet; | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
| import androidx.constraintlayout.widget.ConstraintLayout; | ||||
| import androidx.constraintlayout.widget.ConstraintSet; | ||||
| import androidx.constraintlayout.widget.R; | ||||
| import androidx.constraintlayout.widget.VirtualLayout; | ||||
| import java.util.Arrays; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class CircularFlow extends VirtualLayout { | ||||
|     private static float DEFAULT_ANGLE = 0.0f; | ||||
|     private static int DEFAULT_RADIUS = 0; | ||||
|     private static final String TAG = "CircularFlow"; | ||||
|     private float[] mAngles; | ||||
|     ConstraintLayout mContainer; | ||||
|     private int mCountAngle; | ||||
|     private int mCountRadius; | ||||
|     private int[] mRadius; | ||||
|     private String mReferenceAngles; | ||||
|     private Float mReferenceDefaultAngle; | ||||
|     private Integer mReferenceDefaultRadius; | ||||
|     private String mReferenceRadius; | ||||
|     int mViewCenter; | ||||
|  | ||||
|     public void setDefaultAngle(float angle) { | ||||
|         DEFAULT_ANGLE = angle; | ||||
|     } | ||||
|  | ||||
|     public void setDefaultRadius(int radius) { | ||||
|         DEFAULT_RADIUS = radius; | ||||
|     } | ||||
|  | ||||
|     public CircularFlow(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     public CircularFlow(Context context, AttributeSet attrs) { | ||||
|         super(context, attrs); | ||||
|     } | ||||
|  | ||||
|     public CircularFlow(Context context, AttributeSet attrs, int defStyleAttr) { | ||||
|         super(context, attrs, defStyleAttr); | ||||
|     } | ||||
|  | ||||
|     public int[] getRadius() { | ||||
|         return Arrays.copyOf(this.mRadius, this.mCountRadius); | ||||
|     } | ||||
|  | ||||
|     public float[] getAngles() { | ||||
|         return Arrays.copyOf(this.mAngles, this.mCountAngle); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.constraintlayout.widget.VirtualLayout, androidx.constraintlayout.widget.ConstraintHelper | ||||
|     protected void init(AttributeSet attrs) { | ||||
|         super.init(attrs); | ||||
|         if (attrs != null) { | ||||
|             TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.ConstraintLayout_Layout); | ||||
|             int indexCount = obtainStyledAttributes.getIndexCount(); | ||||
|             for (int i = 0; i < indexCount; i++) { | ||||
|                 int index = obtainStyledAttributes.getIndex(i); | ||||
|                 if (index == R.styleable.ConstraintLayout_Layout_circularflow_viewCenter) { | ||||
|                     this.mViewCenter = obtainStyledAttributes.getResourceId(index, 0); | ||||
|                 } else if (index == R.styleable.ConstraintLayout_Layout_circularflow_angles) { | ||||
|                     String string = obtainStyledAttributes.getString(index); | ||||
|                     this.mReferenceAngles = string; | ||||
|                     setAngles(string); | ||||
|                 } else if (index == R.styleable.ConstraintLayout_Layout_circularflow_radiusInDP) { | ||||
|                     String string2 = obtainStyledAttributes.getString(index); | ||||
|                     this.mReferenceRadius = string2; | ||||
|                     setRadius(string2); | ||||
|                 } else if (index == R.styleable.ConstraintLayout_Layout_circularflow_defaultAngle) { | ||||
|                     Float valueOf = Float.valueOf(obtainStyledAttributes.getFloat(index, DEFAULT_ANGLE)); | ||||
|                     this.mReferenceDefaultAngle = valueOf; | ||||
|                     setDefaultAngle(valueOf.floatValue()); | ||||
|                 } else if (index == R.styleable.ConstraintLayout_Layout_circularflow_defaultRadius) { | ||||
|                     Integer valueOf2 = Integer.valueOf(obtainStyledAttributes.getDimensionPixelSize(index, DEFAULT_RADIUS)); | ||||
|                     this.mReferenceDefaultRadius = valueOf2; | ||||
|                     setDefaultRadius(valueOf2.intValue()); | ||||
|                 } | ||||
|             } | ||||
|             obtainStyledAttributes.recycle(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.constraintlayout.widget.VirtualLayout, androidx.constraintlayout.widget.ConstraintHelper, android.view.View | ||||
|     public void onAttachedToWindow() { | ||||
|         super.onAttachedToWindow(); | ||||
|         String str = this.mReferenceAngles; | ||||
|         if (str != null) { | ||||
|             this.mAngles = new float[1]; | ||||
|             setAngles(str); | ||||
|         } | ||||
|         String str2 = this.mReferenceRadius; | ||||
|         if (str2 != null) { | ||||
|             this.mRadius = new int[1]; | ||||
|             setRadius(str2); | ||||
|         } | ||||
|         Float f = this.mReferenceDefaultAngle; | ||||
|         if (f != null) { | ||||
|             setDefaultAngle(f.floatValue()); | ||||
|         } | ||||
|         Integer num = this.mReferenceDefaultRadius; | ||||
|         if (num != null) { | ||||
|             setDefaultRadius(num.intValue()); | ||||
|         } | ||||
|         anchorReferences(); | ||||
|     } | ||||
|  | ||||
|     private void anchorReferences() { | ||||
|         this.mContainer = (ConstraintLayout) getParent(); | ||||
|         for (int i = 0; i < this.mCount; i++) { | ||||
|             View viewById = this.mContainer.getViewById(this.mIds[i]); | ||||
|             if (viewById != null) { | ||||
|                 int i2 = DEFAULT_RADIUS; | ||||
|                 float f = DEFAULT_ANGLE; | ||||
|                 int[] iArr = this.mRadius; | ||||
|                 if (iArr != null && i < iArr.length) { | ||||
|                     i2 = iArr[i]; | ||||
|                 } else { | ||||
|                     Integer num = this.mReferenceDefaultRadius; | ||||
|                     if (num == null || num.intValue() == -1) { | ||||
|                         Log.e(TAG, "Added radius to view with id: " + this.mMap.get(Integer.valueOf(viewById.getId()))); | ||||
|                     } else { | ||||
|                         this.mCountRadius++; | ||||
|                         if (this.mRadius == null) { | ||||
|                             this.mRadius = new int[1]; | ||||
|                         } | ||||
|                         int[] radius = getRadius(); | ||||
|                         this.mRadius = radius; | ||||
|                         radius[this.mCountRadius - 1] = i2; | ||||
|                     } | ||||
|                 } | ||||
|                 float[] fArr = this.mAngles; | ||||
|                 if (fArr == null || i >= fArr.length) { | ||||
|                     Float f2 = this.mReferenceDefaultAngle; | ||||
|                     if (f2 == null || f2.floatValue() == -1.0f) { | ||||
|                         Log.e(TAG, "Added angle to view with id: " + this.mMap.get(Integer.valueOf(viewById.getId()))); | ||||
|                     } else { | ||||
|                         this.mCountAngle++; | ||||
|                         if (this.mAngles == null) { | ||||
|                             this.mAngles = new float[1]; | ||||
|                         } | ||||
|                         float[] angles = getAngles(); | ||||
|                         this.mAngles = angles; | ||||
|                         angles[this.mCountAngle - 1] = f; | ||||
|                     } | ||||
|                 } else { | ||||
|                     f = fArr[i]; | ||||
|                 } | ||||
|                 ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) viewById.getLayoutParams(); | ||||
|                 layoutParams.circleAngle = f; | ||||
|                 layoutParams.circleConstraint = this.mViewCenter; | ||||
|                 layoutParams.circleRadius = i2; | ||||
|                 viewById.setLayoutParams(layoutParams); | ||||
|             } | ||||
|         } | ||||
|         applyLayoutFeatures(); | ||||
|     } | ||||
|  | ||||
|     public void addViewToCircularFlow(View view, int radius, float angle) { | ||||
|         if (containsId(view.getId())) { | ||||
|             return; | ||||
|         } | ||||
|         addView(view); | ||||
|         this.mCountAngle++; | ||||
|         float[] angles = getAngles(); | ||||
|         this.mAngles = angles; | ||||
|         angles[this.mCountAngle - 1] = angle; | ||||
|         this.mCountRadius++; | ||||
|         int[] radius2 = getRadius(); | ||||
|         this.mRadius = radius2; | ||||
|         radius2[this.mCountRadius - 1] = (int) (radius * this.myContext.getResources().getDisplayMetrics().density); | ||||
|         anchorReferences(); | ||||
|     } | ||||
|  | ||||
|     public void updateRadius(View view, int radius) { | ||||
|         if (!isUpdatable(view)) { | ||||
|             Log.e(TAG, "It was not possible to update radius to view with id: " + view.getId()); | ||||
|             return; | ||||
|         } | ||||
|         int indexFromId = indexFromId(view.getId()); | ||||
|         if (indexFromId > this.mRadius.length) { | ||||
|             return; | ||||
|         } | ||||
|         int[] radius2 = getRadius(); | ||||
|         this.mRadius = radius2; | ||||
|         radius2[indexFromId] = (int) (radius * this.myContext.getResources().getDisplayMetrics().density); | ||||
|         anchorReferences(); | ||||
|     } | ||||
|  | ||||
|     public void updateAngle(View view, float angle) { | ||||
|         if (!isUpdatable(view)) { | ||||
|             Log.e(TAG, "It was not possible to update angle to view with id: " + view.getId()); | ||||
|             return; | ||||
|         } | ||||
|         int indexFromId = indexFromId(view.getId()); | ||||
|         if (indexFromId > this.mAngles.length) { | ||||
|             return; | ||||
|         } | ||||
|         float[] angles = getAngles(); | ||||
|         this.mAngles = angles; | ||||
|         angles[indexFromId] = angle; | ||||
|         anchorReferences(); | ||||
|     } | ||||
|  | ||||
|     public void updateReference(View view, int radius, float angle) { | ||||
|         if (!isUpdatable(view)) { | ||||
|             Log.e(TAG, "It was not possible to update radius and angle to view with id: " + view.getId()); | ||||
|             return; | ||||
|         } | ||||
|         int indexFromId = indexFromId(view.getId()); | ||||
|         if (getAngles().length > indexFromId) { | ||||
|             float[] angles = getAngles(); | ||||
|             this.mAngles = angles; | ||||
|             angles[indexFromId] = angle; | ||||
|         } | ||||
|         if (getRadius().length > indexFromId) { | ||||
|             int[] radius2 = getRadius(); | ||||
|             this.mRadius = radius2; | ||||
|             radius2[indexFromId] = (int) (radius * this.myContext.getResources().getDisplayMetrics().density); | ||||
|         } | ||||
|         anchorReferences(); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.constraintlayout.widget.ConstraintHelper | ||||
|     public int removeView(View view) { | ||||
|         int removeView = super.removeView(view); | ||||
|         if (removeView == -1) { | ||||
|             return removeView; | ||||
|         } | ||||
|         ConstraintSet constraintSet = new ConstraintSet(); | ||||
|         constraintSet.clone(this.mContainer); | ||||
|         constraintSet.clear(view.getId(), 8); | ||||
|         constraintSet.applyTo(this.mContainer); | ||||
|         float[] fArr = this.mAngles; | ||||
|         if (removeView < fArr.length) { | ||||
|             this.mAngles = removeAngle(fArr, removeView); | ||||
|             this.mCountAngle--; | ||||
|         } | ||||
|         int[] iArr = this.mRadius; | ||||
|         if (removeView < iArr.length) { | ||||
|             this.mRadius = removeRadius(iArr, removeView); | ||||
|             this.mCountRadius--; | ||||
|         } | ||||
|         anchorReferences(); | ||||
|         return removeView; | ||||
|     } | ||||
|  | ||||
|     private float[] removeAngle(float[] angles, int index) { | ||||
|         return (angles == null || index < 0 || index >= this.mCountAngle) ? angles : removeElementFromArray(angles, index); | ||||
|     } | ||||
|  | ||||
|     private int[] removeRadius(int[] radius, int index) { | ||||
|         return (radius == null || index < 0 || index >= this.mCountRadius) ? radius : removeElementFromArray(radius, index); | ||||
|     } | ||||
|  | ||||
|     private void setAngles(String idList) { | ||||
|         if (idList == null) { | ||||
|             return; | ||||
|         } | ||||
|         int i = 0; | ||||
|         this.mCountAngle = 0; | ||||
|         while (true) { | ||||
|             int indexOf = idList.indexOf(44, i); | ||||
|             if (indexOf == -1) { | ||||
|                 addAngle(idList.substring(i).trim()); | ||||
|                 return; | ||||
|             } else { | ||||
|                 addAngle(idList.substring(i, indexOf).trim()); | ||||
|                 i = indexOf + 1; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void setRadius(String idList) { | ||||
|         if (idList == null) { | ||||
|             return; | ||||
|         } | ||||
|         int i = 0; | ||||
|         this.mCountRadius = 0; | ||||
|         while (true) { | ||||
|             int indexOf = idList.indexOf(44, i); | ||||
|             if (indexOf == -1) { | ||||
|                 addRadius(idList.substring(i).trim()); | ||||
|                 return; | ||||
|             } else { | ||||
|                 addRadius(idList.substring(i, indexOf).trim()); | ||||
|                 i = indexOf + 1; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void addAngle(String angleString) { | ||||
|         float[] fArr; | ||||
|         if (angleString == null || angleString.length() == 0 || this.myContext == null || (fArr = this.mAngles) == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (this.mCountAngle + 1 > fArr.length) { | ||||
|             this.mAngles = Arrays.copyOf(fArr, fArr.length + 1); | ||||
|         } | ||||
|         this.mAngles[this.mCountAngle] = Integer.parseInt(angleString); | ||||
|         this.mCountAngle++; | ||||
|     } | ||||
|  | ||||
|     private void addRadius(String radiusString) { | ||||
|         int[] iArr; | ||||
|         if (radiusString == null || radiusString.length() == 0 || this.myContext == null || (iArr = this.mRadius) == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (this.mCountRadius + 1 > iArr.length) { | ||||
|             this.mRadius = Arrays.copyOf(iArr, iArr.length + 1); | ||||
|         } | ||||
|         this.mRadius[this.mCountRadius] = (int) (Integer.parseInt(radiusString) * this.myContext.getResources().getDisplayMetrics().density); | ||||
|         this.mCountRadius++; | ||||
|     } | ||||
|  | ||||
|     public static int[] removeElementFromArray(int[] array, int index) { | ||||
|         int[] iArr = new int[array.length - 1]; | ||||
|         int i = 0; | ||||
|         for (int i2 = 0; i2 < array.length; i2++) { | ||||
|             if (i2 != index) { | ||||
|                 iArr[i] = array[i2]; | ||||
|                 i++; | ||||
|             } | ||||
|         } | ||||
|         return iArr; | ||||
|     } | ||||
|  | ||||
|     public static float[] removeElementFromArray(float[] array, int index) { | ||||
|         float[] fArr = new float[array.length - 1]; | ||||
|         int i = 0; | ||||
|         for (int i2 = 0; i2 < array.length; i2++) { | ||||
|             if (i2 != index) { | ||||
|                 fArr[i] = array[i2]; | ||||
|                 i++; | ||||
|             } | ||||
|         } | ||||
|         return fArr; | ||||
|     } | ||||
|  | ||||
|     public boolean isUpdatable(View view) { | ||||
|         return containsId(view.getId()) && indexFromId(view.getId()) != -1; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user