ADD week 5
This commit is contained in:
		| @@ -0,0 +1,172 @@ | ||||
| package com.google.android.material.carousel; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.RectF; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.MotionEvent; | ||||
| import android.widget.FrameLayout; | ||||
| import androidx.core.math.MathUtils; | ||||
| import com.google.android.material.animation.AnimationUtils; | ||||
| import com.google.android.material.canvas.CanvasCompat; | ||||
| import com.google.android.material.shape.AbsoluteCornerSize; | ||||
| import com.google.android.material.shape.ClampedCornerSize; | ||||
| import com.google.android.material.shape.CornerSize; | ||||
| import com.google.android.material.shape.ShapeAppearanceModel; | ||||
| import com.google.android.material.shape.Shapeable; | ||||
| import com.google.android.material.shape.ShapeableDelegate; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class MaskableFrameLayout extends FrameLayout implements Maskable, Shapeable { | ||||
|     private static final int NOT_SET = -1; | ||||
|     private final RectF maskRect; | ||||
|     private float maskXPercentage; | ||||
|     private OnMaskChangedListener onMaskChangedListener; | ||||
|     private Boolean savedForceCompatClippingEnabled; | ||||
|     private ShapeAppearanceModel shapeAppearanceModel; | ||||
|     private final ShapeableDelegate shapeableDelegate; | ||||
|  | ||||
|     @Override // com.google.android.material.carousel.Maskable | ||||
|     public RectF getMaskRectF() { | ||||
|         return this.maskRect; | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.carousel.Maskable | ||||
|     @Deprecated | ||||
|     public float getMaskXPercentage() { | ||||
|         return this.maskXPercentage; | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.shape.Shapeable | ||||
|     public ShapeAppearanceModel getShapeAppearanceModel() { | ||||
|         return this.shapeAppearanceModel; | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.carousel.Maskable | ||||
|     public void setOnMaskChangedListener(OnMaskChangedListener onMaskChangedListener) { | ||||
|         this.onMaskChangedListener = onMaskChangedListener; | ||||
|     } | ||||
|  | ||||
|     public MaskableFrameLayout(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public MaskableFrameLayout(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public MaskableFrameLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.maskXPercentage = -1.0f; | ||||
|         this.maskRect = new RectF(); | ||||
|         this.shapeableDelegate = ShapeableDelegate.create(this); | ||||
|         this.savedForceCompatClippingEnabled = null; | ||||
|         setShapeAppearanceModel(ShapeAppearanceModel.builder(context, attributeSet, i, 0, 0).build()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected void onSizeChanged(int i, int i2, int i3, int i4) { | ||||
|         super.onSizeChanged(i, i2, i3, i4); | ||||
|         if (this.maskXPercentage != -1.0f) { | ||||
|             updateMaskRectForMaskXPercentage(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void getFocusedRect(Rect rect) { | ||||
|         rect.set((int) this.maskRect.left, (int) this.maskRect.top, (int) this.maskRect.right, (int) this.maskRect.bottom); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onAttachedToWindow() { | ||||
|         super.onAttachedToWindow(); | ||||
|         Boolean bool = this.savedForceCompatClippingEnabled; | ||||
|         if (bool != null) { | ||||
|             this.shapeableDelegate.setForceCompatClippingEnabled(this, bool.booleanValue()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onDetachedFromWindow() { | ||||
|         this.savedForceCompatClippingEnabled = Boolean.valueOf(this.shapeableDelegate.isForceCompatClippingEnabled()); | ||||
|         this.shapeableDelegate.setForceCompatClippingEnabled(this, true); | ||||
|         super.onDetachedFromWindow(); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.shape.Shapeable | ||||
|     public void setShapeAppearanceModel(ShapeAppearanceModel shapeAppearanceModel) { | ||||
|         ShapeAppearanceModel withTransformedCornerSizes = shapeAppearanceModel.withTransformedCornerSizes(new ShapeAppearanceModel.CornerSizeUnaryOperator() { // from class: com.google.android.material.carousel.MaskableFrameLayout$$ExternalSyntheticLambda1 | ||||
|             @Override // com.google.android.material.shape.ShapeAppearanceModel.CornerSizeUnaryOperator | ||||
|             public final CornerSize apply(CornerSize cornerSize) { | ||||
|                 return MaskableFrameLayout.lambda$setShapeAppearanceModel$0(cornerSize); | ||||
|             } | ||||
|         }); | ||||
|         this.shapeAppearanceModel = withTransformedCornerSizes; | ||||
|         this.shapeableDelegate.onShapeAppearanceChanged(this, withTransformedCornerSizes); | ||||
|     } | ||||
|  | ||||
|     static /* synthetic */ CornerSize lambda$setShapeAppearanceModel$0(CornerSize cornerSize) { | ||||
|         return cornerSize instanceof AbsoluteCornerSize ? ClampedCornerSize.createFromCornerSize((AbsoluteCornerSize) cornerSize) : cornerSize; | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.carousel.Maskable | ||||
|     @Deprecated | ||||
|     public void setMaskXPercentage(float f) { | ||||
|         float clamp = MathUtils.clamp(f, 0.0f, 1.0f); | ||||
|         if (this.maskXPercentage != clamp) { | ||||
|             this.maskXPercentage = clamp; | ||||
|             updateMaskRectForMaskXPercentage(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void updateMaskRectForMaskXPercentage() { | ||||
|         if (this.maskXPercentage != -1.0f) { | ||||
|             float lerp = AnimationUtils.lerp(0.0f, getWidth() / 2.0f, 0.0f, 1.0f, this.maskXPercentage); | ||||
|             setMaskRectF(new RectF(lerp, 0.0f, getWidth() - lerp, getHeight())); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.carousel.Maskable | ||||
|     public void setMaskRectF(RectF rectF) { | ||||
|         this.maskRect.set(rectF); | ||||
|         onMaskChanged(); | ||||
|     } | ||||
|  | ||||
|     private void onMaskChanged() { | ||||
|         this.shapeableDelegate.onMaskChanged(this, this.maskRect); | ||||
|         OnMaskChangedListener onMaskChangedListener = this.onMaskChangedListener; | ||||
|         if (onMaskChangedListener != null) { | ||||
|             onMaskChangedListener.onMaskChanged(this.maskRect); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setForceCompatClipping(boolean z) { | ||||
|         this.shapeableDelegate.setForceCompatClippingEnabled(this, z); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public boolean onTouchEvent(MotionEvent motionEvent) { | ||||
|         if (!this.maskRect.isEmpty() && motionEvent.getAction() == 0) { | ||||
|             if (!this.maskRect.contains(motionEvent.getX(), motionEvent.getY())) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         return super.onTouchEvent(motionEvent); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void dispatchDraw(Canvas canvas) { | ||||
|         this.shapeableDelegate.maybeClip(canvas, new CanvasCompat.CanvasOperation() { // from class: com.google.android.material.carousel.MaskableFrameLayout$$ExternalSyntheticLambda0 | ||||
|             @Override // com.google.android.material.canvas.CanvasCompat.CanvasOperation | ||||
|             public final void run(Canvas canvas2) { | ||||
|                 MaskableFrameLayout.this.m196x418c47c0(canvas2); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /* renamed from: lambda$dispatchDraw$1$com-google-android-material-carousel-MaskableFrameLayout, reason: not valid java name */ | ||||
|     /* synthetic */ void m196x418c47c0(Canvas canvas) { | ||||
|         super.dispatchDraw(canvas); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user