ADD week 5
This commit is contained in:
@ -0,0 +1,462 @@
|
||||
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.motion.widget.MotionHelper;
|
||||
import androidx.constraintlayout.motion.widget.MotionLayout;
|
||||
import androidx.constraintlayout.motion.widget.MotionScene;
|
||||
import androidx.constraintlayout.widget.ConstraintSet;
|
||||
import androidx.constraintlayout.widget.R;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class Carousel extends MotionHelper {
|
||||
private static final boolean DEBUG = false;
|
||||
private static final String TAG = "Carousel";
|
||||
public static final int TOUCH_UP_CARRY_ON = 2;
|
||||
public static final int TOUCH_UP_IMMEDIATE_STOP = 1;
|
||||
private int backwardTransition;
|
||||
private float dampening;
|
||||
private int emptyViewBehavior;
|
||||
private int firstViewReference;
|
||||
private int forwardTransition;
|
||||
private boolean infiniteCarousel;
|
||||
private Adapter mAdapter;
|
||||
private int mAnimateTargetDelay;
|
||||
private int mIndex;
|
||||
int mLastStartId;
|
||||
private final ArrayList<View> mList;
|
||||
private MotionLayout mMotionLayout;
|
||||
private int mPreviousIndex;
|
||||
private int mTargetIndex;
|
||||
Runnable mUpdateRunnable;
|
||||
private int nextState;
|
||||
private int previousState;
|
||||
private int startIndex;
|
||||
private int touchUpMode;
|
||||
private float velocityThreshold;
|
||||
|
||||
public interface Adapter {
|
||||
int count();
|
||||
|
||||
void onNewItem(int index);
|
||||
|
||||
void populate(View view, int index);
|
||||
}
|
||||
|
||||
public int getCurrentIndex() {
|
||||
return this.mIndex;
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.motion.widget.MotionHelper, androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener
|
||||
public void onTransitionChange(MotionLayout motionLayout, int startId, int endId, float progress) {
|
||||
this.mLastStartId = startId;
|
||||
}
|
||||
|
||||
public void setAdapter(Adapter adapter) {
|
||||
this.mAdapter = adapter;
|
||||
}
|
||||
|
||||
public Carousel(Context context) {
|
||||
super(context);
|
||||
this.mAdapter = null;
|
||||
this.mList = new ArrayList<>();
|
||||
this.mPreviousIndex = 0;
|
||||
this.mIndex = 0;
|
||||
this.firstViewReference = -1;
|
||||
this.infiniteCarousel = false;
|
||||
this.backwardTransition = -1;
|
||||
this.forwardTransition = -1;
|
||||
this.previousState = -1;
|
||||
this.nextState = -1;
|
||||
this.dampening = 0.9f;
|
||||
this.startIndex = 0;
|
||||
this.emptyViewBehavior = 4;
|
||||
this.touchUpMode = 1;
|
||||
this.velocityThreshold = 2.0f;
|
||||
this.mTargetIndex = -1;
|
||||
this.mAnimateTargetDelay = ItemTouchHelper.Callback.DEFAULT_DRAG_ANIMATION_DURATION;
|
||||
this.mLastStartId = -1;
|
||||
this.mUpdateRunnable = new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel.1
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
Carousel.this.mMotionLayout.setProgress(0.0f);
|
||||
Carousel.this.updateItems();
|
||||
Carousel.this.mAdapter.onNewItem(Carousel.this.mIndex);
|
||||
float velocity = Carousel.this.mMotionLayout.getVelocity();
|
||||
if (Carousel.this.touchUpMode != 2 || velocity <= Carousel.this.velocityThreshold || Carousel.this.mIndex >= Carousel.this.mAdapter.count() - 1) {
|
||||
return;
|
||||
}
|
||||
final float f = velocity * Carousel.this.dampening;
|
||||
if (Carousel.this.mIndex != 0 || Carousel.this.mPreviousIndex <= Carousel.this.mIndex) {
|
||||
if (Carousel.this.mIndex != Carousel.this.mAdapter.count() - 1 || Carousel.this.mPreviousIndex >= Carousel.this.mIndex) {
|
||||
Carousel.this.mMotionLayout.post(new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel.1.1
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
Carousel.this.mMotionLayout.touchAnimateTo(5, 1.0f, f);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public Carousel(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.mAdapter = null;
|
||||
this.mList = new ArrayList<>();
|
||||
this.mPreviousIndex = 0;
|
||||
this.mIndex = 0;
|
||||
this.firstViewReference = -1;
|
||||
this.infiniteCarousel = false;
|
||||
this.backwardTransition = -1;
|
||||
this.forwardTransition = -1;
|
||||
this.previousState = -1;
|
||||
this.nextState = -1;
|
||||
this.dampening = 0.9f;
|
||||
this.startIndex = 0;
|
||||
this.emptyViewBehavior = 4;
|
||||
this.touchUpMode = 1;
|
||||
this.velocityThreshold = 2.0f;
|
||||
this.mTargetIndex = -1;
|
||||
this.mAnimateTargetDelay = ItemTouchHelper.Callback.DEFAULT_DRAG_ANIMATION_DURATION;
|
||||
this.mLastStartId = -1;
|
||||
this.mUpdateRunnable = new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel.1
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
Carousel.this.mMotionLayout.setProgress(0.0f);
|
||||
Carousel.this.updateItems();
|
||||
Carousel.this.mAdapter.onNewItem(Carousel.this.mIndex);
|
||||
float velocity = Carousel.this.mMotionLayout.getVelocity();
|
||||
if (Carousel.this.touchUpMode != 2 || velocity <= Carousel.this.velocityThreshold || Carousel.this.mIndex >= Carousel.this.mAdapter.count() - 1) {
|
||||
return;
|
||||
}
|
||||
final float f = velocity * Carousel.this.dampening;
|
||||
if (Carousel.this.mIndex != 0 || Carousel.this.mPreviousIndex <= Carousel.this.mIndex) {
|
||||
if (Carousel.this.mIndex != Carousel.this.mAdapter.count() - 1 || Carousel.this.mPreviousIndex >= Carousel.this.mIndex) {
|
||||
Carousel.this.mMotionLayout.post(new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel.1.1
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
Carousel.this.mMotionLayout.touchAnimateTo(5, 1.0f, f);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
init(context, attrs);
|
||||
}
|
||||
|
||||
public Carousel(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this.mAdapter = null;
|
||||
this.mList = new ArrayList<>();
|
||||
this.mPreviousIndex = 0;
|
||||
this.mIndex = 0;
|
||||
this.firstViewReference = -1;
|
||||
this.infiniteCarousel = false;
|
||||
this.backwardTransition = -1;
|
||||
this.forwardTransition = -1;
|
||||
this.previousState = -1;
|
||||
this.nextState = -1;
|
||||
this.dampening = 0.9f;
|
||||
this.startIndex = 0;
|
||||
this.emptyViewBehavior = 4;
|
||||
this.touchUpMode = 1;
|
||||
this.velocityThreshold = 2.0f;
|
||||
this.mTargetIndex = -1;
|
||||
this.mAnimateTargetDelay = ItemTouchHelper.Callback.DEFAULT_DRAG_ANIMATION_DURATION;
|
||||
this.mLastStartId = -1;
|
||||
this.mUpdateRunnable = new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel.1
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
Carousel.this.mMotionLayout.setProgress(0.0f);
|
||||
Carousel.this.updateItems();
|
||||
Carousel.this.mAdapter.onNewItem(Carousel.this.mIndex);
|
||||
float velocity = Carousel.this.mMotionLayout.getVelocity();
|
||||
if (Carousel.this.touchUpMode != 2 || velocity <= Carousel.this.velocityThreshold || Carousel.this.mIndex >= Carousel.this.mAdapter.count() - 1) {
|
||||
return;
|
||||
}
|
||||
final float f = velocity * Carousel.this.dampening;
|
||||
if (Carousel.this.mIndex != 0 || Carousel.this.mPreviousIndex <= Carousel.this.mIndex) {
|
||||
if (Carousel.this.mIndex != Carousel.this.mAdapter.count() - 1 || Carousel.this.mPreviousIndex >= Carousel.this.mIndex) {
|
||||
Carousel.this.mMotionLayout.post(new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel.1.1
|
||||
@Override // java.lang.Runnable
|
||||
public void run() {
|
||||
Carousel.this.mMotionLayout.touchAnimateTo(5, 1.0f, f);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
init(context, attrs);
|
||||
}
|
||||
|
||||
private void init(Context context, AttributeSet attrs) {
|
||||
if (attrs != null) {
|
||||
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.Carousel);
|
||||
int indexCount = obtainStyledAttributes.getIndexCount();
|
||||
for (int i = 0; i < indexCount; i++) {
|
||||
int index = obtainStyledAttributes.getIndex(i);
|
||||
if (index == R.styleable.Carousel_carousel_firstView) {
|
||||
this.firstViewReference = obtainStyledAttributes.getResourceId(index, this.firstViewReference);
|
||||
} else if (index == R.styleable.Carousel_carousel_backwardTransition) {
|
||||
this.backwardTransition = obtainStyledAttributes.getResourceId(index, this.backwardTransition);
|
||||
} else if (index == R.styleable.Carousel_carousel_forwardTransition) {
|
||||
this.forwardTransition = obtainStyledAttributes.getResourceId(index, this.forwardTransition);
|
||||
} else if (index == R.styleable.Carousel_carousel_emptyViewsBehavior) {
|
||||
this.emptyViewBehavior = obtainStyledAttributes.getInt(index, this.emptyViewBehavior);
|
||||
} else if (index == R.styleable.Carousel_carousel_previousState) {
|
||||
this.previousState = obtainStyledAttributes.getResourceId(index, this.previousState);
|
||||
} else if (index == R.styleable.Carousel_carousel_nextState) {
|
||||
this.nextState = obtainStyledAttributes.getResourceId(index, this.nextState);
|
||||
} else if (index == R.styleable.Carousel_carousel_touchUp_dampeningFactor) {
|
||||
this.dampening = obtainStyledAttributes.getFloat(index, this.dampening);
|
||||
} else if (index == R.styleable.Carousel_carousel_touchUpMode) {
|
||||
this.touchUpMode = obtainStyledAttributes.getInt(index, this.touchUpMode);
|
||||
} else if (index == R.styleable.Carousel_carousel_touchUp_velocityThreshold) {
|
||||
this.velocityThreshold = obtainStyledAttributes.getFloat(index, this.velocityThreshold);
|
||||
} else if (index == R.styleable.Carousel_carousel_infinite) {
|
||||
this.infiniteCarousel = obtainStyledAttributes.getBoolean(index, this.infiniteCarousel);
|
||||
}
|
||||
}
|
||||
obtainStyledAttributes.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
Adapter adapter = this.mAdapter;
|
||||
if (adapter != null) {
|
||||
return adapter.count();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void transitionToIndex(int index, int delay) {
|
||||
this.mTargetIndex = Math.max(0, Math.min(getCount() - 1, index));
|
||||
int max = Math.max(0, delay);
|
||||
this.mAnimateTargetDelay = max;
|
||||
this.mMotionLayout.setTransitionDuration(max);
|
||||
if (index < this.mIndex) {
|
||||
this.mMotionLayout.transitionToState(this.previousState, this.mAnimateTargetDelay);
|
||||
} else {
|
||||
this.mMotionLayout.transitionToState(this.nextState, this.mAnimateTargetDelay);
|
||||
}
|
||||
}
|
||||
|
||||
public void jumpToIndex(int index) {
|
||||
this.mIndex = Math.max(0, Math.min(getCount() - 1, index));
|
||||
refresh();
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
int size = this.mList.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
View view = this.mList.get(i);
|
||||
if (this.mAdapter.count() == 0) {
|
||||
updateViewVisibility(view, this.emptyViewBehavior);
|
||||
} else {
|
||||
updateViewVisibility(view, 0);
|
||||
}
|
||||
}
|
||||
this.mMotionLayout.rebuildScene();
|
||||
updateItems();
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.motion.widget.MotionHelper, androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener
|
||||
public void onTransitionCompleted(MotionLayout motionLayout, int currentId) {
|
||||
int i = this.mIndex;
|
||||
this.mPreviousIndex = i;
|
||||
if (currentId == this.nextState) {
|
||||
this.mIndex = i + 1;
|
||||
} else if (currentId == this.previousState) {
|
||||
this.mIndex = i - 1;
|
||||
}
|
||||
if (this.infiniteCarousel) {
|
||||
if (this.mIndex >= this.mAdapter.count()) {
|
||||
this.mIndex = 0;
|
||||
}
|
||||
if (this.mIndex < 0) {
|
||||
this.mIndex = this.mAdapter.count() - 1;
|
||||
}
|
||||
} else {
|
||||
if (this.mIndex >= this.mAdapter.count()) {
|
||||
this.mIndex = this.mAdapter.count() - 1;
|
||||
}
|
||||
if (this.mIndex < 0) {
|
||||
this.mIndex = 0;
|
||||
}
|
||||
}
|
||||
if (this.mPreviousIndex != this.mIndex) {
|
||||
this.mMotionLayout.post(this.mUpdateRunnable);
|
||||
}
|
||||
}
|
||||
|
||||
private void enableAllTransitions(boolean enable) {
|
||||
Iterator<MotionScene.Transition> it = this.mMotionLayout.getDefinedTransitions().iterator();
|
||||
while (it.hasNext()) {
|
||||
it.next().setEnabled(enable);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean enableTransition(int transitionID, boolean enable) {
|
||||
MotionLayout motionLayout;
|
||||
MotionScene.Transition transition;
|
||||
if (transitionID == -1 || (motionLayout = this.mMotionLayout) == null || (transition = motionLayout.getTransition(transitionID)) == null || enable == transition.isEnabled()) {
|
||||
return false;
|
||||
}
|
||||
transition.setEnabled(enable);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper, android.view.View
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
if (getParent() instanceof MotionLayout) {
|
||||
MotionLayout motionLayout = (MotionLayout) getParent();
|
||||
for (int i = 0; i < this.mCount; i++) {
|
||||
int i2 = this.mIds[i];
|
||||
View viewById = motionLayout.getViewById(i2);
|
||||
if (this.firstViewReference == i2) {
|
||||
this.startIndex = i;
|
||||
}
|
||||
this.mList.add(viewById);
|
||||
}
|
||||
this.mMotionLayout = motionLayout;
|
||||
if (this.touchUpMode == 2) {
|
||||
MotionScene.Transition transition = motionLayout.getTransition(this.forwardTransition);
|
||||
if (transition != null) {
|
||||
transition.setOnTouchUp(5);
|
||||
}
|
||||
MotionScene.Transition transition2 = this.mMotionLayout.getTransition(this.backwardTransition);
|
||||
if (transition2 != null) {
|
||||
transition2.setOnTouchUp(5);
|
||||
}
|
||||
}
|
||||
updateItems();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean updateViewVisibility(View view, int visibility) {
|
||||
MotionLayout motionLayout = this.mMotionLayout;
|
||||
if (motionLayout == null) {
|
||||
return false;
|
||||
}
|
||||
boolean z = false;
|
||||
for (int i : motionLayout.getConstraintSetIds()) {
|
||||
z |= updateViewVisibility(i, view, visibility);
|
||||
}
|
||||
return z;
|
||||
}
|
||||
|
||||
private boolean updateViewVisibility(int constraintSetId, View view, int visibility) {
|
||||
ConstraintSet.Constraint constraint;
|
||||
ConstraintSet constraintSet = this.mMotionLayout.getConstraintSet(constraintSetId);
|
||||
if (constraintSet == null || (constraint = constraintSet.getConstraint(view.getId())) == null) {
|
||||
return false;
|
||||
}
|
||||
constraint.propertySet.mVisibilityMode = 1;
|
||||
view.setVisibility(visibility);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public void updateItems() {
|
||||
Adapter adapter = this.mAdapter;
|
||||
if (adapter == null || this.mMotionLayout == null || adapter.count() == 0) {
|
||||
return;
|
||||
}
|
||||
int size = this.mList.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
View view = this.mList.get(i);
|
||||
int i2 = (this.mIndex + i) - this.startIndex;
|
||||
if (this.infiniteCarousel) {
|
||||
if (i2 < 0) {
|
||||
int i3 = this.emptyViewBehavior;
|
||||
if (i3 != 4) {
|
||||
updateViewVisibility(view, i3);
|
||||
} else {
|
||||
updateViewVisibility(view, 0);
|
||||
}
|
||||
if (i2 % this.mAdapter.count() == 0) {
|
||||
this.mAdapter.populate(view, 0);
|
||||
} else {
|
||||
Adapter adapter2 = this.mAdapter;
|
||||
adapter2.populate(view, adapter2.count() + (i2 % this.mAdapter.count()));
|
||||
}
|
||||
} else if (i2 >= this.mAdapter.count()) {
|
||||
if (i2 == this.mAdapter.count()) {
|
||||
i2 = 0;
|
||||
} else if (i2 > this.mAdapter.count()) {
|
||||
i2 %= this.mAdapter.count();
|
||||
}
|
||||
int i4 = this.emptyViewBehavior;
|
||||
if (i4 != 4) {
|
||||
updateViewVisibility(view, i4);
|
||||
} else {
|
||||
updateViewVisibility(view, 0);
|
||||
}
|
||||
this.mAdapter.populate(view, i2);
|
||||
} else {
|
||||
updateViewVisibility(view, 0);
|
||||
this.mAdapter.populate(view, i2);
|
||||
}
|
||||
} else if (i2 < 0) {
|
||||
updateViewVisibility(view, this.emptyViewBehavior);
|
||||
} else if (i2 >= this.mAdapter.count()) {
|
||||
updateViewVisibility(view, this.emptyViewBehavior);
|
||||
} else {
|
||||
updateViewVisibility(view, 0);
|
||||
this.mAdapter.populate(view, i2);
|
||||
}
|
||||
}
|
||||
int i5 = this.mTargetIndex;
|
||||
if (i5 != -1 && i5 != this.mIndex) {
|
||||
this.mMotionLayout.post(new Runnable() { // from class: androidx.constraintlayout.helper.widget.Carousel$$ExternalSyntheticLambda0
|
||||
@Override // java.lang.Runnable
|
||||
public final void run() {
|
||||
Carousel.this.m48xc943cdea();
|
||||
}
|
||||
});
|
||||
} else if (i5 == this.mIndex) {
|
||||
this.mTargetIndex = -1;
|
||||
}
|
||||
if (this.backwardTransition == -1 || this.forwardTransition == -1) {
|
||||
Log.w(TAG, "No backward or forward transitions defined for Carousel!");
|
||||
return;
|
||||
}
|
||||
if (this.infiniteCarousel) {
|
||||
return;
|
||||
}
|
||||
int count = this.mAdapter.count();
|
||||
if (this.mIndex == 0) {
|
||||
enableTransition(this.backwardTransition, false);
|
||||
} else {
|
||||
enableTransition(this.backwardTransition, true);
|
||||
this.mMotionLayout.setTransition(this.backwardTransition);
|
||||
}
|
||||
if (this.mIndex == count - 1) {
|
||||
enableTransition(this.forwardTransition, false);
|
||||
} else {
|
||||
enableTransition(this.forwardTransition, true);
|
||||
this.mMotionLayout.setTransition(this.forwardTransition);
|
||||
}
|
||||
}
|
||||
|
||||
/* renamed from: lambda$updateItems$0$androidx-constraintlayout-helper-widget-Carousel, reason: not valid java name */
|
||||
/* synthetic */ void m48xc943cdea() {
|
||||
this.mMotionLayout.setTransitionDuration(this.mAnimateTargetDelay);
|
||||
if (this.mTargetIndex < this.mIndex) {
|
||||
this.mMotionLayout.transitionToState(this.previousState, this.mAnimateTargetDelay);
|
||||
} else {
|
||||
this.mMotionLayout.transitionToState(this.nextState, this.mAnimateTargetDelay);
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -0,0 +1,270 @@
|
||||
package androidx.constraintlayout.helper.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
import androidx.constraintlayout.core.widgets.ConstraintWidget;
|
||||
import androidx.constraintlayout.core.widgets.HelperWidget;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.constraintlayout.widget.ConstraintSet;
|
||||
import androidx.constraintlayout.widget.R;
|
||||
import androidx.constraintlayout.widget.VirtualLayout;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class Flow extends VirtualLayout {
|
||||
public static final int CHAIN_PACKED = 2;
|
||||
public static final int CHAIN_SPREAD = 0;
|
||||
public static final int CHAIN_SPREAD_INSIDE = 1;
|
||||
public static final int HORIZONTAL = 0;
|
||||
public static final int HORIZONTAL_ALIGN_CENTER = 2;
|
||||
public static final int HORIZONTAL_ALIGN_END = 1;
|
||||
public static final int HORIZONTAL_ALIGN_START = 0;
|
||||
private static final String TAG = "Flow";
|
||||
public static final int VERTICAL = 1;
|
||||
public static final int VERTICAL_ALIGN_BASELINE = 3;
|
||||
public static final int VERTICAL_ALIGN_BOTTOM = 1;
|
||||
public static final int VERTICAL_ALIGN_CENTER = 2;
|
||||
public static final int VERTICAL_ALIGN_TOP = 0;
|
||||
public static final int WRAP_ALIGNED = 2;
|
||||
public static final int WRAP_CHAIN = 1;
|
||||
public static final int WRAP_NONE = 0;
|
||||
private androidx.constraintlayout.core.widgets.Flow mFlow;
|
||||
|
||||
public Flow(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public Flow(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public Flow(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
public void resolveRtl(ConstraintWidget widget, boolean isRtl) {
|
||||
this.mFlow.applyRtl(isRtl);
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper, android.view.View
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
onMeasure(this.mFlow, widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.VirtualLayout
|
||||
public void onMeasure(androidx.constraintlayout.core.widgets.VirtualLayout layout, int widthMeasureSpec, int heightMeasureSpec) {
|
||||
int mode = View.MeasureSpec.getMode(widthMeasureSpec);
|
||||
int size = View.MeasureSpec.getSize(widthMeasureSpec);
|
||||
int mode2 = View.MeasureSpec.getMode(heightMeasureSpec);
|
||||
int size2 = View.MeasureSpec.getSize(heightMeasureSpec);
|
||||
if (layout != null) {
|
||||
layout.measure(mode, size, mode2, size2);
|
||||
setMeasuredDimension(layout.getMeasuredWidth(), layout.getMeasuredHeight());
|
||||
} else {
|
||||
setMeasuredDimension(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
public void loadParameters(ConstraintSet.Constraint constraint, HelperWidget child, ConstraintLayout.LayoutParams layoutParams, SparseArray<ConstraintWidget> mapIdToWidget) {
|
||||
super.loadParameters(constraint, child, layoutParams, mapIdToWidget);
|
||||
if (child instanceof androidx.constraintlayout.core.widgets.Flow) {
|
||||
androidx.constraintlayout.core.widgets.Flow flow = (androidx.constraintlayout.core.widgets.Flow) child;
|
||||
if (layoutParams.orientation != -1) {
|
||||
flow.setOrientation(layoutParams.orientation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.VirtualLayout, androidx.constraintlayout.widget.ConstraintHelper
|
||||
protected void init(AttributeSet attrs) {
|
||||
super.init(attrs);
|
||||
this.mFlow = new androidx.constraintlayout.core.widgets.Flow();
|
||||
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_android_orientation) {
|
||||
this.mFlow.setOrientation(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_padding) {
|
||||
this.mFlow.setPadding(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_paddingStart) {
|
||||
this.mFlow.setPaddingStart(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_paddingEnd) {
|
||||
this.mFlow.setPaddingEnd(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_paddingLeft) {
|
||||
this.mFlow.setPaddingLeft(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_paddingTop) {
|
||||
this.mFlow.setPaddingTop(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_paddingRight) {
|
||||
this.mFlow.setPaddingRight(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_paddingBottom) {
|
||||
this.mFlow.setPaddingBottom(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_wrapMode) {
|
||||
this.mFlow.setWrapMode(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_horizontalStyle) {
|
||||
this.mFlow.setHorizontalStyle(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_verticalStyle) {
|
||||
this.mFlow.setVerticalStyle(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_firstHorizontalStyle) {
|
||||
this.mFlow.setFirstHorizontalStyle(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_lastHorizontalStyle) {
|
||||
this.mFlow.setLastHorizontalStyle(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_firstVerticalStyle) {
|
||||
this.mFlow.setFirstVerticalStyle(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_lastVerticalStyle) {
|
||||
this.mFlow.setLastVerticalStyle(obtainStyledAttributes.getInt(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_horizontalBias) {
|
||||
this.mFlow.setHorizontalBias(obtainStyledAttributes.getFloat(index, 0.5f));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_firstHorizontalBias) {
|
||||
this.mFlow.setFirstHorizontalBias(obtainStyledAttributes.getFloat(index, 0.5f));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_lastHorizontalBias) {
|
||||
this.mFlow.setLastHorizontalBias(obtainStyledAttributes.getFloat(index, 0.5f));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_firstVerticalBias) {
|
||||
this.mFlow.setFirstVerticalBias(obtainStyledAttributes.getFloat(index, 0.5f));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_lastVerticalBias) {
|
||||
this.mFlow.setLastVerticalBias(obtainStyledAttributes.getFloat(index, 0.5f));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_verticalBias) {
|
||||
this.mFlow.setVerticalBias(obtainStyledAttributes.getFloat(index, 0.5f));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_horizontalAlign) {
|
||||
this.mFlow.setHorizontalAlign(obtainStyledAttributes.getInt(index, 2));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_verticalAlign) {
|
||||
this.mFlow.setVerticalAlign(obtainStyledAttributes.getInt(index, 2));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_horizontalGap) {
|
||||
this.mFlow.setHorizontalGap(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_verticalGap) {
|
||||
this.mFlow.setVerticalGap(obtainStyledAttributes.getDimensionPixelSize(index, 0));
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_flow_maxElementsWrap) {
|
||||
this.mFlow.setMaxElementsWrap(obtainStyledAttributes.getInt(index, -1));
|
||||
}
|
||||
}
|
||||
obtainStyledAttributes.recycle();
|
||||
}
|
||||
this.mHelperWidget = this.mFlow;
|
||||
validateParams();
|
||||
}
|
||||
|
||||
public void setOrientation(int orientation) {
|
||||
this.mFlow.setOrientation(orientation);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setPadding(int padding) {
|
||||
this.mFlow.setPadding(padding);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setPaddingLeft(int paddingLeft) {
|
||||
this.mFlow.setPaddingLeft(paddingLeft);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setPaddingTop(int paddingTop) {
|
||||
this.mFlow.setPaddingTop(paddingTop);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setPaddingRight(int paddingRight) {
|
||||
this.mFlow.setPaddingRight(paddingRight);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setPaddingBottom(int paddingBottom) {
|
||||
this.mFlow.setPaddingBottom(paddingBottom);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setLastHorizontalStyle(int style) {
|
||||
this.mFlow.setLastHorizontalStyle(style);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setLastVerticalStyle(int style) {
|
||||
this.mFlow.setLastVerticalStyle(style);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setLastHorizontalBias(float bias) {
|
||||
this.mFlow.setLastHorizontalBias(bias);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setLastVerticalBias(float bias) {
|
||||
this.mFlow.setLastVerticalBias(bias);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setWrapMode(int mode) {
|
||||
this.mFlow.setWrapMode(mode);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setHorizontalStyle(int style) {
|
||||
this.mFlow.setHorizontalStyle(style);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setVerticalStyle(int style) {
|
||||
this.mFlow.setVerticalStyle(style);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setHorizontalBias(float bias) {
|
||||
this.mFlow.setHorizontalBias(bias);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setVerticalBias(float bias) {
|
||||
this.mFlow.setVerticalBias(bias);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setFirstHorizontalStyle(int style) {
|
||||
this.mFlow.setFirstHorizontalStyle(style);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setFirstVerticalStyle(int style) {
|
||||
this.mFlow.setFirstVerticalStyle(style);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setFirstHorizontalBias(float bias) {
|
||||
this.mFlow.setFirstHorizontalBias(bias);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setFirstVerticalBias(float bias) {
|
||||
this.mFlow.setFirstVerticalBias(bias);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setHorizontalAlign(int align) {
|
||||
this.mFlow.setHorizontalAlign(align);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setVerticalAlign(int align) {
|
||||
this.mFlow.setVerticalAlign(align);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setHorizontalGap(int gap) {
|
||||
this.mFlow.setHorizontalGap(gap);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setVerticalGap(int gap) {
|
||||
this.mFlow.setVerticalGap(gap);
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setMaxElementsWrap(int max) {
|
||||
this.mFlow.setMaxElementsWrap(max);
|
||||
requestLayout();
|
||||
}
|
||||
}
|
@ -0,0 +1,303 @@
|
||||
package androidx.constraintlayout.helper.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import androidx.constraintlayout.core.widgets.ConstraintWidget;
|
||||
import androidx.constraintlayout.widget.ConstraintHelper;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.constraintlayout.widget.R;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class Layer extends ConstraintHelper {
|
||||
private static final String TAG = "Layer";
|
||||
private boolean mApplyElevationOnAttach;
|
||||
private boolean mApplyVisibilityOnAttach;
|
||||
protected float mComputedCenterX;
|
||||
protected float mComputedCenterY;
|
||||
protected float mComputedMaxX;
|
||||
protected float mComputedMaxY;
|
||||
protected float mComputedMinX;
|
||||
protected float mComputedMinY;
|
||||
ConstraintLayout mContainer;
|
||||
private float mGroupRotateAngle;
|
||||
boolean mNeedBounds;
|
||||
private float mRotationCenterX;
|
||||
private float mRotationCenterY;
|
||||
private float mScaleX;
|
||||
private float mScaleY;
|
||||
private float mShiftX;
|
||||
private float mShiftY;
|
||||
View[] mViews;
|
||||
|
||||
public Layer(Context context) {
|
||||
super(context);
|
||||
this.mRotationCenterX = Float.NaN;
|
||||
this.mRotationCenterY = Float.NaN;
|
||||
this.mGroupRotateAngle = Float.NaN;
|
||||
this.mScaleX = 1.0f;
|
||||
this.mScaleY = 1.0f;
|
||||
this.mComputedCenterX = Float.NaN;
|
||||
this.mComputedCenterY = Float.NaN;
|
||||
this.mComputedMaxX = Float.NaN;
|
||||
this.mComputedMaxY = Float.NaN;
|
||||
this.mComputedMinX = Float.NaN;
|
||||
this.mComputedMinY = Float.NaN;
|
||||
this.mNeedBounds = true;
|
||||
this.mViews = null;
|
||||
this.mShiftX = 0.0f;
|
||||
this.mShiftY = 0.0f;
|
||||
}
|
||||
|
||||
public Layer(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.mRotationCenterX = Float.NaN;
|
||||
this.mRotationCenterY = Float.NaN;
|
||||
this.mGroupRotateAngle = Float.NaN;
|
||||
this.mScaleX = 1.0f;
|
||||
this.mScaleY = 1.0f;
|
||||
this.mComputedCenterX = Float.NaN;
|
||||
this.mComputedCenterY = Float.NaN;
|
||||
this.mComputedMaxX = Float.NaN;
|
||||
this.mComputedMaxY = Float.NaN;
|
||||
this.mComputedMinX = Float.NaN;
|
||||
this.mComputedMinY = Float.NaN;
|
||||
this.mNeedBounds = true;
|
||||
this.mViews = null;
|
||||
this.mShiftX = 0.0f;
|
||||
this.mShiftY = 0.0f;
|
||||
}
|
||||
|
||||
public Layer(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this.mRotationCenterX = Float.NaN;
|
||||
this.mRotationCenterY = Float.NaN;
|
||||
this.mGroupRotateAngle = Float.NaN;
|
||||
this.mScaleX = 1.0f;
|
||||
this.mScaleY = 1.0f;
|
||||
this.mComputedCenterX = Float.NaN;
|
||||
this.mComputedCenterY = Float.NaN;
|
||||
this.mComputedMaxX = Float.NaN;
|
||||
this.mComputedMaxY = Float.NaN;
|
||||
this.mComputedMinX = Float.NaN;
|
||||
this.mComputedMinY = Float.NaN;
|
||||
this.mNeedBounds = true;
|
||||
this.mViews = null;
|
||||
this.mShiftX = 0.0f;
|
||||
this.mShiftY = 0.0f;
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
protected void init(AttributeSet attrs) {
|
||||
super.init(attrs);
|
||||
this.mUseViewMeasure = false;
|
||||
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_android_visibility) {
|
||||
this.mApplyVisibilityOnAttach = true;
|
||||
} else if (index == R.styleable.ConstraintLayout_Layout_android_elevation) {
|
||||
this.mApplyElevationOnAttach = true;
|
||||
}
|
||||
}
|
||||
obtainStyledAttributes.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper, android.view.View
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
this.mContainer = (ConstraintLayout) getParent();
|
||||
if (this.mApplyVisibilityOnAttach || this.mApplyElevationOnAttach) {
|
||||
int visibility = getVisibility();
|
||||
float elevation = getElevation();
|
||||
for (int i = 0; i < this.mCount; i++) {
|
||||
View viewById = this.mContainer.getViewById(this.mIds[i]);
|
||||
if (viewById != null) {
|
||||
if (this.mApplyVisibilityOnAttach) {
|
||||
viewById.setVisibility(visibility);
|
||||
}
|
||||
if (this.mApplyElevationOnAttach && elevation > 0.0f) {
|
||||
viewById.setTranslationZ(viewById.getTranslationZ() + elevation);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
public void updatePreDraw(ConstraintLayout container) {
|
||||
this.mContainer = container;
|
||||
float rotation = getRotation();
|
||||
if (rotation != 0.0f) {
|
||||
this.mGroupRotateAngle = rotation;
|
||||
} else {
|
||||
if (Float.isNaN(this.mGroupRotateAngle)) {
|
||||
return;
|
||||
}
|
||||
this.mGroupRotateAngle = rotation;
|
||||
}
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setRotation(float angle) {
|
||||
this.mGroupRotateAngle = angle;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setScaleX(float scaleX) {
|
||||
this.mScaleX = scaleX;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setScaleY(float scaleY) {
|
||||
this.mScaleY = scaleY;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setPivotX(float pivotX) {
|
||||
this.mRotationCenterX = pivotX;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setPivotY(float pivotY) {
|
||||
this.mRotationCenterY = pivotY;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setTranslationX(float dx) {
|
||||
this.mShiftX = dx;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setTranslationY(float dy) {
|
||||
this.mShiftY = dy;
|
||||
transform();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setVisibility(int visibility) {
|
||||
super.setVisibility(visibility);
|
||||
applyLayoutFeatures();
|
||||
}
|
||||
|
||||
@Override // android.view.View
|
||||
public void setElevation(float elevation) {
|
||||
super.setElevation(elevation);
|
||||
applyLayoutFeatures();
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
public void updatePostLayout(ConstraintLayout container) {
|
||||
reCacheViews();
|
||||
this.mComputedCenterX = Float.NaN;
|
||||
this.mComputedCenterY = Float.NaN;
|
||||
ConstraintWidget constraintWidget = ((ConstraintLayout.LayoutParams) getLayoutParams()).getConstraintWidget();
|
||||
constraintWidget.setWidth(0);
|
||||
constraintWidget.setHeight(0);
|
||||
calcCenters();
|
||||
layout(((int) this.mComputedMinX) - getPaddingLeft(), ((int) this.mComputedMinY) - getPaddingTop(), ((int) this.mComputedMaxX) + getPaddingRight(), ((int) this.mComputedMaxY) + getPaddingBottom());
|
||||
transform();
|
||||
}
|
||||
|
||||
private void reCacheViews() {
|
||||
if (this.mContainer == null || this.mCount == 0) {
|
||||
return;
|
||||
}
|
||||
View[] viewArr = this.mViews;
|
||||
if (viewArr == null || viewArr.length != this.mCount) {
|
||||
this.mViews = new View[this.mCount];
|
||||
}
|
||||
for (int i = 0; i < this.mCount; i++) {
|
||||
this.mViews[i] = this.mContainer.getViewById(this.mIds[i]);
|
||||
}
|
||||
}
|
||||
|
||||
protected void calcCenters() {
|
||||
if (this.mContainer == null) {
|
||||
return;
|
||||
}
|
||||
if (this.mNeedBounds || Float.isNaN(this.mComputedCenterX) || Float.isNaN(this.mComputedCenterY)) {
|
||||
if (!Float.isNaN(this.mRotationCenterX) && !Float.isNaN(this.mRotationCenterY)) {
|
||||
this.mComputedCenterY = this.mRotationCenterY;
|
||||
this.mComputedCenterX = this.mRotationCenterX;
|
||||
return;
|
||||
}
|
||||
View[] views = getViews(this.mContainer);
|
||||
int left = views[0].getLeft();
|
||||
int top = views[0].getTop();
|
||||
int right = views[0].getRight();
|
||||
int bottom = views[0].getBottom();
|
||||
for (int i = 0; i < this.mCount; i++) {
|
||||
View view = views[i];
|
||||
left = Math.min(left, view.getLeft());
|
||||
top = Math.min(top, view.getTop());
|
||||
right = Math.max(right, view.getRight());
|
||||
bottom = Math.max(bottom, view.getBottom());
|
||||
}
|
||||
this.mComputedMaxX = right;
|
||||
this.mComputedMaxY = bottom;
|
||||
this.mComputedMinX = left;
|
||||
this.mComputedMinY = top;
|
||||
if (Float.isNaN(this.mRotationCenterX)) {
|
||||
this.mComputedCenterX = (left + right) / 2;
|
||||
} else {
|
||||
this.mComputedCenterX = this.mRotationCenterX;
|
||||
}
|
||||
if (Float.isNaN(this.mRotationCenterY)) {
|
||||
this.mComputedCenterY = (top + bottom) / 2;
|
||||
} else {
|
||||
this.mComputedCenterY = this.mRotationCenterY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void transform() {
|
||||
if (this.mContainer == null) {
|
||||
return;
|
||||
}
|
||||
if (this.mViews == null) {
|
||||
reCacheViews();
|
||||
}
|
||||
calcCenters();
|
||||
double radians = Float.isNaN(this.mGroupRotateAngle) ? 0.0d : Math.toRadians(this.mGroupRotateAngle);
|
||||
float sin = (float) Math.sin(radians);
|
||||
float cos = (float) Math.cos(radians);
|
||||
float f = this.mScaleX;
|
||||
float f2 = f * cos;
|
||||
float f3 = this.mScaleY;
|
||||
float f4 = (-f3) * sin;
|
||||
float f5 = f * sin;
|
||||
float f6 = f3 * cos;
|
||||
for (int i = 0; i < this.mCount; i++) {
|
||||
View view = this.mViews[i];
|
||||
int left = (view.getLeft() + view.getRight()) / 2;
|
||||
int top = (view.getTop() + view.getBottom()) / 2;
|
||||
float f7 = left - this.mComputedCenterX;
|
||||
float f8 = top - this.mComputedCenterY;
|
||||
float f9 = (((f2 * f7) + (f4 * f8)) - f7) + this.mShiftX;
|
||||
float f10 = (((f7 * f5) + (f6 * f8)) - f8) + this.mShiftY;
|
||||
view.setTranslationX(f9);
|
||||
view.setTranslationY(f10);
|
||||
view.setScaleY(this.mScaleY);
|
||||
view.setScaleX(this.mScaleX);
|
||||
if (!Float.isNaN(this.mGroupRotateAngle)) {
|
||||
view.setRotation(this.mGroupRotateAngle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
protected void applyLayoutFeaturesInConstraintSet(ConstraintLayout container) {
|
||||
applyLayoutFeatures(container);
|
||||
}
|
||||
}
|
@ -0,0 +1,141 @@
|
||||
package androidx.constraintlayout.helper.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import androidx.constraintlayout.motion.widget.MotionHelper;
|
||||
import androidx.constraintlayout.widget.R;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class MotionEffect extends MotionHelper {
|
||||
public static final int AUTO = -1;
|
||||
public static final int EAST = 2;
|
||||
public static final int NORTH = 0;
|
||||
public static final int SOUTH = 1;
|
||||
public static final String TAG = "FadeMove";
|
||||
private static final int UNSET = -1;
|
||||
public static final int WEST = 3;
|
||||
private int fadeMove;
|
||||
private float motionEffectAlpha;
|
||||
private int motionEffectEnd;
|
||||
private int motionEffectStart;
|
||||
private boolean motionEffectStrictMove;
|
||||
private int motionEffectTranslationX;
|
||||
private int motionEffectTranslationY;
|
||||
private int viewTransitionId;
|
||||
|
||||
@Override // androidx.constraintlayout.motion.widget.MotionHelper, androidx.constraintlayout.motion.widget.MotionHelperInterface
|
||||
public boolean isDecorator() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public MotionEffect(Context context) {
|
||||
super(context);
|
||||
this.motionEffectAlpha = 0.1f;
|
||||
this.motionEffectStart = 49;
|
||||
this.motionEffectEnd = 50;
|
||||
this.motionEffectTranslationX = 0;
|
||||
this.motionEffectTranslationY = 0;
|
||||
this.motionEffectStrictMove = true;
|
||||
this.viewTransitionId = -1;
|
||||
this.fadeMove = -1;
|
||||
}
|
||||
|
||||
public MotionEffect(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.motionEffectAlpha = 0.1f;
|
||||
this.motionEffectStart = 49;
|
||||
this.motionEffectEnd = 50;
|
||||
this.motionEffectTranslationX = 0;
|
||||
this.motionEffectTranslationY = 0;
|
||||
this.motionEffectStrictMove = true;
|
||||
this.viewTransitionId = -1;
|
||||
this.fadeMove = -1;
|
||||
init(context, attrs);
|
||||
}
|
||||
|
||||
public MotionEffect(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this.motionEffectAlpha = 0.1f;
|
||||
this.motionEffectStart = 49;
|
||||
this.motionEffectEnd = 50;
|
||||
this.motionEffectTranslationX = 0;
|
||||
this.motionEffectTranslationY = 0;
|
||||
this.motionEffectStrictMove = true;
|
||||
this.viewTransitionId = -1;
|
||||
this.fadeMove = -1;
|
||||
init(context, attrs);
|
||||
}
|
||||
|
||||
private void init(Context context, AttributeSet attrs) {
|
||||
if (attrs != null) {
|
||||
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attrs, R.styleable.MotionEffect);
|
||||
int indexCount = obtainStyledAttributes.getIndexCount();
|
||||
for (int i = 0; i < indexCount; i++) {
|
||||
int index = obtainStyledAttributes.getIndex(i);
|
||||
if (index == R.styleable.MotionEffect_motionEffect_start) {
|
||||
int i2 = obtainStyledAttributes.getInt(index, this.motionEffectStart);
|
||||
this.motionEffectStart = i2;
|
||||
this.motionEffectStart = Math.max(Math.min(i2, 99), 0);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_end) {
|
||||
int i3 = obtainStyledAttributes.getInt(index, this.motionEffectEnd);
|
||||
this.motionEffectEnd = i3;
|
||||
this.motionEffectEnd = Math.max(Math.min(i3, 99), 0);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_translationX) {
|
||||
this.motionEffectTranslationX = obtainStyledAttributes.getDimensionPixelOffset(index, this.motionEffectTranslationX);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_translationY) {
|
||||
this.motionEffectTranslationY = obtainStyledAttributes.getDimensionPixelOffset(index, this.motionEffectTranslationY);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_alpha) {
|
||||
this.motionEffectAlpha = obtainStyledAttributes.getFloat(index, this.motionEffectAlpha);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_move) {
|
||||
this.fadeMove = obtainStyledAttributes.getInt(index, this.fadeMove);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_strict) {
|
||||
this.motionEffectStrictMove = obtainStyledAttributes.getBoolean(index, this.motionEffectStrictMove);
|
||||
} else if (index == R.styleable.MotionEffect_motionEffect_viewTransition) {
|
||||
this.viewTransitionId = obtainStyledAttributes.getResourceId(index, this.viewTransitionId);
|
||||
}
|
||||
}
|
||||
int i4 = this.motionEffectStart;
|
||||
int i5 = this.motionEffectEnd;
|
||||
if (i4 == i5) {
|
||||
if (i4 > 0) {
|
||||
this.motionEffectStart = i4 - 1;
|
||||
} else {
|
||||
this.motionEffectEnd = i5 + 1;
|
||||
}
|
||||
}
|
||||
obtainStyledAttributes.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
/* JADX WARN: Code restructure failed: missing block: B:60:0x0187, code lost:
|
||||
|
||||
if (r14 == 0.0f) goto L55;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:82:0x019a, code lost:
|
||||
|
||||
if (r14 == 0.0f) goto L55;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:90:0x01aa, code lost:
|
||||
|
||||
if (r15 == 0.0f) goto L55;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:98:0x01ba, code lost:
|
||||
|
||||
if (r15 == 0.0f) goto L46;
|
||||
*/
|
||||
/* JADX WARN: Removed duplicated region for block: B:65:0x01c2 */
|
||||
/* JADX WARN: Removed duplicated region for block: B:73:0x01e5 */
|
||||
@Override // androidx.constraintlayout.motion.widget.MotionHelper, androidx.constraintlayout.motion.widget.MotionHelperInterface
|
||||
/*
|
||||
Code decompiled incorrectly, please refer to instructions dump.
|
||||
To view partially-correct add '--show-bad-code' argument
|
||||
*/
|
||||
public void onPreSetup(androidx.constraintlayout.motion.widget.MotionLayout r23, java.util.HashMap<android.view.View, androidx.constraintlayout.motion.widget.MotionController> r24) {
|
||||
/*
|
||||
Method dump skipped, instructions count: 497
|
||||
To view this dump add '--comments-level debug' option
|
||||
*/
|
||||
throw new UnsupportedOperationException("Method not decompiled: androidx.constraintlayout.helper.widget.MotionEffect.onPreSetup(androidx.constraintlayout.motion.widget.MotionLayout, java.util.HashMap):void");
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package androidx.constraintlayout.helper.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
import androidx.constraintlayout.core.widgets.ConstraintWidget;
|
||||
import androidx.constraintlayout.core.widgets.ConstraintWidgetContainer;
|
||||
import androidx.constraintlayout.core.widgets.Helper;
|
||||
import androidx.constraintlayout.core.widgets.Placeholder;
|
||||
import androidx.constraintlayout.widget.VirtualLayout;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class MotionPlaceholder extends VirtualLayout {
|
||||
private static final String TAG = "MotionPlaceholder";
|
||||
Placeholder mPlaceholder;
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper
|
||||
public void updatePreLayout(ConstraintWidgetContainer container, Helper helper, SparseArray<ConstraintWidget> map) {
|
||||
}
|
||||
|
||||
public MotionPlaceholder(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public MotionPlaceholder(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public MotionPlaceholder(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
public MotionPlaceholder(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.ConstraintHelper, android.view.View
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
onMeasure(this.mPlaceholder, widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.VirtualLayout
|
||||
public void onMeasure(androidx.constraintlayout.core.widgets.VirtualLayout layout, int widthMeasureSpec, int heightMeasureSpec) {
|
||||
int mode = View.MeasureSpec.getMode(widthMeasureSpec);
|
||||
int size = View.MeasureSpec.getSize(widthMeasureSpec);
|
||||
int mode2 = View.MeasureSpec.getMode(heightMeasureSpec);
|
||||
int size2 = View.MeasureSpec.getSize(heightMeasureSpec);
|
||||
if (layout != null) {
|
||||
layout.measure(mode, size, mode2, size2);
|
||||
setMeasuredDimension(layout.getMeasuredWidth(), layout.getMeasuredHeight());
|
||||
} else {
|
||||
setMeasuredDimension(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.constraintlayout.widget.VirtualLayout, androidx.constraintlayout.widget.ConstraintHelper
|
||||
protected void init(AttributeSet attrs) {
|
||||
super.init(attrs);
|
||||
this.mHelperWidget = new Placeholder();
|
||||
validateParams();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user