2025-03-31 16:33:42 +02:00

350 lines
13 KiB
Java

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;
}
}