173 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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);
 | |
|     }
 | |
| }
 |