189 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.floatingactionbutton;
 | |
| 
 | |
| import android.animation.Animator;
 | |
| import android.animation.AnimatorSet;
 | |
| import android.animation.ObjectAnimator;
 | |
| import android.animation.StateListAnimator;
 | |
| import android.content.Context;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.graphics.PorterDuff;
 | |
| import android.graphics.Rect;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.graphics.drawable.LayerDrawable;
 | |
| import android.graphics.drawable.RippleDrawable;
 | |
| import android.os.Build;
 | |
| import android.util.Property;
 | |
| import android.view.View;
 | |
| import androidx.core.content.ContextCompat;
 | |
| import androidx.core.util.Preconditions;
 | |
| import com.google.android.material.R;
 | |
| import com.google.android.material.ripple.RippleUtils;
 | |
| import com.google.android.material.shadow.ShadowViewDelegate;
 | |
| import com.google.android.material.shape.MaterialShapeDrawable;
 | |
| import com.google.android.material.shape.ShapeAppearanceModel;
 | |
| import java.util.ArrayList;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class FloatingActionButtonImplLollipop extends FloatingActionButtonImpl {
 | |
|     private StateListAnimator stateListAnimator;
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void jumpDrawableToCurrentState() {
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     boolean requirePreDrawListener() {
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void updateFromViewRotation() {
 | |
|     }
 | |
| 
 | |
|     FloatingActionButtonImplLollipop(FloatingActionButton floatingActionButton, ShadowViewDelegate shadowViewDelegate) {
 | |
|         super(floatingActionButton, shadowViewDelegate);
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void initializeBackgroundDrawable(ColorStateList colorStateList, PorterDuff.Mode mode, ColorStateList colorStateList2, int i) {
 | |
|         Drawable drawable;
 | |
|         this.shapeDrawable = createShapeDrawable();
 | |
|         this.shapeDrawable.setTintList(colorStateList);
 | |
|         if (mode != null) {
 | |
|             this.shapeDrawable.setTintMode(mode);
 | |
|         }
 | |
|         this.shapeDrawable.initializeElevationOverlay(this.view.getContext());
 | |
|         if (i > 0) {
 | |
|             this.borderDrawable = createBorderDrawable(i, colorStateList);
 | |
|             drawable = new LayerDrawable(new Drawable[]{(Drawable) Preconditions.checkNotNull(this.borderDrawable), (Drawable) Preconditions.checkNotNull(this.shapeDrawable)});
 | |
|         } else {
 | |
|             this.borderDrawable = null;
 | |
|             drawable = this.shapeDrawable;
 | |
|         }
 | |
|         this.rippleDrawable = new RippleDrawable(RippleUtils.sanitizeRippleDrawableColor(colorStateList2), drawable, null);
 | |
|         this.contentBackground = this.rippleDrawable;
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void setRippleColor(ColorStateList colorStateList) {
 | |
|         if (this.rippleDrawable instanceof RippleDrawable) {
 | |
|             ((RippleDrawable) this.rippleDrawable).setColor(RippleUtils.sanitizeRippleDrawableColor(colorStateList));
 | |
|         } else {
 | |
|             super.setRippleColor(colorStateList);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void onElevationsChanged(float f, float f2, float f3) {
 | |
|         if (Build.VERSION.SDK_INT == 21) {
 | |
|             this.view.refreshDrawableState();
 | |
|         } else if (this.view.getStateListAnimator() == this.stateListAnimator) {
 | |
|             this.stateListAnimator = createDefaultStateListAnimator(f, f2, f3);
 | |
|             this.view.setStateListAnimator(this.stateListAnimator);
 | |
|         }
 | |
|         if (shouldAddPadding()) {
 | |
|             updatePadding();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private StateListAnimator createDefaultStateListAnimator(float f, float f2, float f3) {
 | |
|         StateListAnimator stateListAnimator = new StateListAnimator();
 | |
|         stateListAnimator.addState(PRESSED_ENABLED_STATE_SET, createElevationAnimator(f, f3));
 | |
|         stateListAnimator.addState(HOVERED_FOCUSED_ENABLED_STATE_SET, createElevationAnimator(f, f2));
 | |
|         stateListAnimator.addState(FOCUSED_ENABLED_STATE_SET, createElevationAnimator(f, f2));
 | |
|         stateListAnimator.addState(HOVERED_ENABLED_STATE_SET, createElevationAnimator(f, f2));
 | |
|         AnimatorSet animatorSet = new AnimatorSet();
 | |
|         ArrayList arrayList = new ArrayList();
 | |
|         arrayList.add(ObjectAnimator.ofFloat(this.view, "elevation", f).setDuration(0L));
 | |
|         if (Build.VERSION.SDK_INT >= 22 && Build.VERSION.SDK_INT <= 24) {
 | |
|             arrayList.add(ObjectAnimator.ofFloat(this.view, (Property<FloatingActionButton, Float>) View.TRANSLATION_Z, this.view.getTranslationZ()).setDuration(100L));
 | |
|         }
 | |
|         arrayList.add(ObjectAnimator.ofFloat(this.view, (Property<FloatingActionButton, Float>) View.TRANSLATION_Z, 0.0f).setDuration(100L));
 | |
|         animatorSet.playSequentially((Animator[]) arrayList.toArray(new Animator[0]));
 | |
|         animatorSet.setInterpolator(ELEVATION_ANIM_INTERPOLATOR);
 | |
|         stateListAnimator.addState(ENABLED_STATE_SET, animatorSet);
 | |
|         stateListAnimator.addState(EMPTY_STATE_SET, createElevationAnimator(0.0f, 0.0f));
 | |
|         return stateListAnimator;
 | |
|     }
 | |
| 
 | |
|     private Animator createElevationAnimator(float f, float f2) {
 | |
|         AnimatorSet animatorSet = new AnimatorSet();
 | |
|         animatorSet.play(ObjectAnimator.ofFloat(this.view, "elevation", f).setDuration(0L)).with(ObjectAnimator.ofFloat(this.view, (Property<FloatingActionButton, Float>) View.TRANSLATION_Z, f2).setDuration(100L));
 | |
|         animatorSet.setInterpolator(ELEVATION_ANIM_INTERPOLATOR);
 | |
|         return animatorSet;
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     public float getElevation() {
 | |
|         return this.view.getElevation();
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void onCompatShadowChanged() {
 | |
|         updatePadding();
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     boolean shouldAddPadding() {
 | |
|         return this.shadowViewDelegate.isCompatPaddingEnabled() || !shouldExpandBoundsForA11y();
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void onDrawableStateChanged(int[] iArr) {
 | |
|         if (Build.VERSION.SDK_INT == 21) {
 | |
|             if (this.view.isEnabled()) {
 | |
|                 this.view.setElevation(this.elevation);
 | |
|                 if (this.view.isPressed()) {
 | |
|                     this.view.setTranslationZ(this.pressedTranslationZ);
 | |
|                     return;
 | |
|                 } else if (this.view.isFocused() || this.view.isHovered()) {
 | |
|                     this.view.setTranslationZ(this.hoveredFocusedTranslationZ);
 | |
|                     return;
 | |
|                 } else {
 | |
|                     this.view.setTranslationZ(0.0f);
 | |
|                     return;
 | |
|                 }
 | |
|             }
 | |
|             this.view.setElevation(0.0f);
 | |
|             this.view.setTranslationZ(0.0f);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     BorderDrawable createBorderDrawable(int i, ColorStateList colorStateList) {
 | |
|         Context context = this.view.getContext();
 | |
|         BorderDrawable borderDrawable = new BorderDrawable((ShapeAppearanceModel) Preconditions.checkNotNull(this.shapeAppearance));
 | |
|         borderDrawable.setGradientColors(ContextCompat.getColor(context, R.color.design_fab_stroke_top_outer_color), ContextCompat.getColor(context, R.color.design_fab_stroke_top_inner_color), ContextCompat.getColor(context, R.color.design_fab_stroke_end_inner_color), ContextCompat.getColor(context, R.color.design_fab_stroke_end_outer_color));
 | |
|         borderDrawable.setBorderWidth(i);
 | |
|         borderDrawable.setBorderTint(colorStateList);
 | |
|         return borderDrawable;
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     MaterialShapeDrawable createShapeDrawable() {
 | |
|         return new AlwaysStatefulMaterialShapeDrawable((ShapeAppearanceModel) Preconditions.checkNotNull(this.shapeAppearance));
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.floatingactionbutton.FloatingActionButtonImpl
 | |
|     void getPadding(Rect rect) {
 | |
|         if (this.shadowViewDelegate.isCompatPaddingEnabled()) {
 | |
|             super.getPadding(rect);
 | |
|         } else if (!shouldExpandBoundsForA11y()) {
 | |
|             int sizeDimension = (this.minTouchTargetSize - this.view.getSizeDimension()) / 2;
 | |
|             rect.set(sizeDimension, sizeDimension, sizeDimension, sizeDimension);
 | |
|         } else {
 | |
|             rect.set(0, 0, 0, 0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class AlwaysStatefulMaterialShapeDrawable extends MaterialShapeDrawable {
 | |
|         @Override // com.google.android.material.shape.MaterialShapeDrawable, android.graphics.drawable.Drawable
 | |
|         public boolean isStateful() {
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         AlwaysStatefulMaterialShapeDrawable(ShapeAppearanceModel shapeAppearanceModel) {
 | |
|             super(shapeAppearanceModel);
 | |
|         }
 | |
|     }
 | |
| }
 |