ADD week 5
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
package com.google.android.material.motion;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Rect;
|
||||
import android.util.Property;
|
||||
import android.view.RoundedCorner;
|
||||
import android.view.View;
|
||||
import android.view.WindowInsets;
|
||||
import androidx.activity.BackEventCompat;
|
||||
import com.google.android.material.R;
|
||||
import com.google.android.material.animation.AnimationUtils;
|
||||
import com.google.android.material.internal.ClippableRoundedCornerLayout;
|
||||
import com.google.android.material.internal.ViewUtils;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class MaterialMainContainerBackHelper extends MaterialBackAnimationHelper<View> {
|
||||
private static final float MIN_SCALE = 0.9f;
|
||||
private Integer expandedCornerSize;
|
||||
private Rect initialHideFromClipBounds;
|
||||
private Rect initialHideToClipBounds;
|
||||
private float initialTouchY;
|
||||
private final float maxTranslationY;
|
||||
private final float minEdgeGap;
|
||||
|
||||
private void resetInitialValues() {
|
||||
this.initialTouchY = 0.0f;
|
||||
this.initialHideToClipBounds = null;
|
||||
this.initialHideFromClipBounds = null;
|
||||
}
|
||||
|
||||
public Rect getInitialHideFromClipBounds() {
|
||||
return this.initialHideFromClipBounds;
|
||||
}
|
||||
|
||||
public Rect getInitialHideToClipBounds() {
|
||||
return this.initialHideToClipBounds;
|
||||
}
|
||||
|
||||
public MaterialMainContainerBackHelper(View view) {
|
||||
super(view);
|
||||
Resources resources = view.getResources();
|
||||
this.minEdgeGap = resources.getDimension(R.dimen.m3_back_progress_main_container_min_edge_gap);
|
||||
this.maxTranslationY = resources.getDimension(R.dimen.m3_back_progress_main_container_max_translation_y);
|
||||
}
|
||||
|
||||
public void startBackProgress(BackEventCompat backEventCompat, View view) {
|
||||
super.onStartBackProgress(backEventCompat);
|
||||
startBackProgress(backEventCompat.getTouchY(), view);
|
||||
}
|
||||
|
||||
public void startBackProgress(float f, View view) {
|
||||
this.initialHideToClipBounds = ViewUtils.calculateRectFromBounds(this.view);
|
||||
if (view != null) {
|
||||
this.initialHideFromClipBounds = ViewUtils.calculateOffsetRectFromBounds(this.view, view);
|
||||
}
|
||||
this.initialTouchY = f;
|
||||
}
|
||||
|
||||
public void updateBackProgress(BackEventCompat backEventCompat, View view, float f) {
|
||||
if (super.onUpdateBackProgress(backEventCompat) == null) {
|
||||
return;
|
||||
}
|
||||
if (view != null && view.getVisibility() != 4) {
|
||||
view.setVisibility(4);
|
||||
}
|
||||
updateBackProgress(backEventCompat.getProgress(), backEventCompat.getSwipeEdge() == 0, backEventCompat.getTouchY(), f);
|
||||
}
|
||||
|
||||
public void updateBackProgress(float f, boolean z, float f2, float f3) {
|
||||
float interpolateProgress = interpolateProgress(f);
|
||||
float width = this.view.getWidth();
|
||||
float height = this.view.getHeight();
|
||||
if (width <= 0.0f || height <= 0.0f) {
|
||||
return;
|
||||
}
|
||||
float lerp = AnimationUtils.lerp(1.0f, MIN_SCALE, interpolateProgress);
|
||||
float lerp2 = AnimationUtils.lerp(0.0f, Math.max(0.0f, ((width - (MIN_SCALE * width)) / 2.0f) - this.minEdgeGap), interpolateProgress) * (z ? 1 : -1);
|
||||
float min = Math.min(Math.max(0.0f, ((height - (lerp * height)) / 2.0f) - this.minEdgeGap), this.maxTranslationY);
|
||||
float f4 = f2 - this.initialTouchY;
|
||||
float lerp3 = AnimationUtils.lerp(0.0f, min, Math.abs(f4) / height) * Math.signum(f4);
|
||||
this.view.setScaleX(lerp);
|
||||
this.view.setScaleY(lerp);
|
||||
this.view.setTranslationX(lerp2);
|
||||
this.view.setTranslationY(lerp3);
|
||||
if (this.view instanceof ClippableRoundedCornerLayout) {
|
||||
((ClippableRoundedCornerLayout) this.view).updateCornerRadius(AnimationUtils.lerp(getExpandedCornerSize(), f3, interpolateProgress));
|
||||
}
|
||||
}
|
||||
|
||||
public void finishBackProgress(long j, View view) {
|
||||
AnimatorSet createResetScaleAndTranslationAnimator = createResetScaleAndTranslationAnimator(view);
|
||||
createResetScaleAndTranslationAnimator.setDuration(j);
|
||||
createResetScaleAndTranslationAnimator.start();
|
||||
resetInitialValues();
|
||||
}
|
||||
|
||||
public void cancelBackProgress(View view) {
|
||||
if (super.onCancelBackProgress() == null) {
|
||||
return;
|
||||
}
|
||||
AnimatorSet createResetScaleAndTranslationAnimator = createResetScaleAndTranslationAnimator(view);
|
||||
if (this.view instanceof ClippableRoundedCornerLayout) {
|
||||
createResetScaleAndTranslationAnimator.playTogether(createCornerAnimator((ClippableRoundedCornerLayout) this.view));
|
||||
}
|
||||
createResetScaleAndTranslationAnimator.setDuration(this.cancelDuration);
|
||||
createResetScaleAndTranslationAnimator.start();
|
||||
resetInitialValues();
|
||||
}
|
||||
|
||||
private AnimatorSet createResetScaleAndTranslationAnimator(final View view) {
|
||||
AnimatorSet animatorSet = new AnimatorSet();
|
||||
animatorSet.playTogether(ObjectAnimator.ofFloat(this.view, (Property<V, Float>) View.SCALE_X, 1.0f), ObjectAnimator.ofFloat(this.view, (Property<V, Float>) View.SCALE_Y, 1.0f), ObjectAnimator.ofFloat(this.view, (Property<V, Float>) View.TRANSLATION_X, 0.0f), ObjectAnimator.ofFloat(this.view, (Property<V, Float>) View.TRANSLATION_Y, 0.0f));
|
||||
animatorSet.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.motion.MaterialMainContainerBackHelper.1
|
||||
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
|
||||
public void onAnimationEnd(Animator animator) {
|
||||
View view2 = view;
|
||||
if (view2 != null) {
|
||||
view2.setVisibility(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
return animatorSet;
|
||||
}
|
||||
|
||||
private ValueAnimator createCornerAnimator(final ClippableRoundedCornerLayout clippableRoundedCornerLayout) {
|
||||
ValueAnimator ofFloat = ValueAnimator.ofFloat(clippableRoundedCornerLayout.getCornerRadius(), getExpandedCornerSize());
|
||||
ofFloat.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // from class: com.google.android.material.motion.MaterialMainContainerBackHelper$$ExternalSyntheticLambda0
|
||||
@Override // android.animation.ValueAnimator.AnimatorUpdateListener
|
||||
public final void onAnimationUpdate(ValueAnimator valueAnimator) {
|
||||
ClippableRoundedCornerLayout.this.updateCornerRadius(((Float) valueAnimator.getAnimatedValue()).floatValue());
|
||||
}
|
||||
});
|
||||
return ofFloat;
|
||||
}
|
||||
|
||||
public int getExpandedCornerSize() {
|
||||
if (this.expandedCornerSize == null) {
|
||||
this.expandedCornerSize = Integer.valueOf(isAtTopOfScreen() ? getMaxDeviceCornerRadius() : 0);
|
||||
}
|
||||
return this.expandedCornerSize.intValue();
|
||||
}
|
||||
|
||||
private boolean isAtTopOfScreen() {
|
||||
int[] iArr = new int[2];
|
||||
this.view.getLocationOnScreen(iArr);
|
||||
return iArr[1] == 0;
|
||||
}
|
||||
|
||||
/* JADX WARN: Code restructure failed: missing block: B:3:0x0007, code lost:
|
||||
|
||||
r0 = r4.view.getRootWindowInsets();
|
||||
*/
|
||||
/*
|
||||
Code decompiled incorrectly, please refer to instructions dump.
|
||||
To view partially-correct add '--show-bad-code' argument
|
||||
*/
|
||||
private int getMaxDeviceCornerRadius() {
|
||||
/*
|
||||
r4 = this;
|
||||
int r0 = android.os.Build.VERSION.SDK_INT
|
||||
r1 = 31
|
||||
r2 = 0
|
||||
if (r0 < r1) goto L2f
|
||||
V extends android.view.View r0 = r4.view
|
||||
android.view.WindowInsets r0 = androidx.tracing.Trace$$ExternalSyntheticApiModelOutline0.m173m(r0)
|
||||
if (r0 == 0) goto L2f
|
||||
int r1 = r4.getRoundedCornerRadius(r0, r2)
|
||||
r2 = 1
|
||||
int r2 = r4.getRoundedCornerRadius(r0, r2)
|
||||
int r1 = java.lang.Math.max(r1, r2)
|
||||
r2 = 3
|
||||
int r2 = r4.getRoundedCornerRadius(r0, r2)
|
||||
r3 = 2
|
||||
int r0 = r4.getRoundedCornerRadius(r0, r3)
|
||||
int r0 = java.lang.Math.max(r2, r0)
|
||||
int r0 = java.lang.Math.max(r1, r0)
|
||||
return r0
|
||||
L2f:
|
||||
return r2
|
||||
*/
|
||||
throw new UnsupportedOperationException("Method not decompiled: com.google.android.material.motion.MaterialMainContainerBackHelper.getMaxDeviceCornerRadius():int");
|
||||
}
|
||||
|
||||
private int getRoundedCornerRadius(WindowInsets windowInsets, int i) {
|
||||
RoundedCorner roundedCorner;
|
||||
int radius;
|
||||
roundedCorner = windowInsets.getRoundedCorner(i);
|
||||
if (roundedCorner == null) {
|
||||
return 0;
|
||||
}
|
||||
radius = roundedCorner.getRadius();
|
||||
return radius;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user