Rabbit-R1/android (non root)/java/sources/com/google/android/material/motion/MaterialMainContainerBackHelper.java
2024-05-21 17:08:36 -04:00

169 lines
7.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: classes2.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;
}
private int getMaxDeviceCornerRadius() {
WindowInsets rootWindowInsets = this.view.getRootWindowInsets();
if (rootWindowInsets != null) {
return Math.max(Math.max(getRoundedCornerRadius(rootWindowInsets, 0), getRoundedCornerRadius(rootWindowInsets, 1)), Math.max(getRoundedCornerRadius(rootWindowInsets, 3), getRoundedCornerRadius(rootWindowInsets, 2)));
}
return 0;
}
private int getRoundedCornerRadius(WindowInsets windowInsets, int i) {
RoundedCorner roundedCorner = windowInsets.getRoundedCorner(i);
if (roundedCorner != null) {
return roundedCorner.getRadius();
}
return 0;
}
}