SRE/02-Easy5/E5/sources/com/google/android/material/motion/MaterialMainContainerBackHelper.java
2025-03-31 16:33:42 +02:00

200 lines
8.6 KiB
Java

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