ADD week 5
This commit is contained in:
		| @@ -0,0 +1,285 @@ | ||||
| package com.google.android.material.tooltip; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Paint; | ||||
| import android.graphics.Rect; | ||||
| import android.text.TextUtils; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import androidx.core.graphics.ColorUtils; | ||||
| import com.google.android.material.R; | ||||
| import com.google.android.material.animation.AnimationUtils; | ||||
| import com.google.android.material.color.MaterialColors; | ||||
| import com.google.android.material.internal.TextDrawableHelper; | ||||
| import com.google.android.material.internal.ThemeEnforcement; | ||||
| import com.google.android.material.resources.MaterialResources; | ||||
| import com.google.android.material.resources.TextAppearance; | ||||
| import com.google.android.material.shape.EdgeTreatment; | ||||
| import com.google.android.material.shape.MarkerEdgeTreatment; | ||||
| import com.google.android.material.shape.MaterialShapeDrawable; | ||||
| import com.google.android.material.shape.OffsetEdgeTreatment; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class TooltipDrawable extends MaterialShapeDrawable implements TextDrawableHelper.TextDrawableDelegate { | ||||
|     private static final int DEFAULT_STYLE = R.style.Widget_MaterialComponents_Tooltip; | ||||
|     private static final int DEFAULT_THEME_ATTR = R.attr.tooltipStyle; | ||||
|     private int arrowSize; | ||||
|     private final View.OnLayoutChangeListener attachedViewLayoutChangeListener; | ||||
|     private final Context context; | ||||
|     private final Rect displayFrame; | ||||
|     private final Paint.FontMetrics fontMetrics; | ||||
|     private float labelOpacity; | ||||
|     private int layoutMargin; | ||||
|     private int locationOnScreenX; | ||||
|     private int minHeight; | ||||
|     private int minWidth; | ||||
|     private int padding; | ||||
|     private CharSequence text; | ||||
|     private final TextDrawableHelper textDrawableHelper; | ||||
|     private final float tooltipPivotX; | ||||
|     private float tooltipPivotY; | ||||
|     private float tooltipScaleX; | ||||
|     private float tooltipScaleY; | ||||
|  | ||||
|     public int getLayoutMargin() { | ||||
|         return this.layoutMargin; | ||||
|     } | ||||
|  | ||||
|     public int getMinHeight() { | ||||
|         return this.minHeight; | ||||
|     } | ||||
|  | ||||
|     public int getMinWidth() { | ||||
|         return this.minWidth; | ||||
|     } | ||||
|  | ||||
|     public CharSequence getText() { | ||||
|         return this.text; | ||||
|     } | ||||
|  | ||||
|     public int getTextPadding() { | ||||
|         return this.padding; | ||||
|     } | ||||
|  | ||||
|     public static TooltipDrawable createFromAttributes(Context context, AttributeSet attributeSet, int i, int i2) { | ||||
|         TooltipDrawable tooltipDrawable = new TooltipDrawable(context, attributeSet, i, i2); | ||||
|         tooltipDrawable.loadFromAttributes(attributeSet, i, i2); | ||||
|         return tooltipDrawable; | ||||
|     } | ||||
|  | ||||
|     public static TooltipDrawable createFromAttributes(Context context, AttributeSet attributeSet) { | ||||
|         return createFromAttributes(context, attributeSet, DEFAULT_THEME_ATTR, DEFAULT_STYLE); | ||||
|     } | ||||
|  | ||||
|     public static TooltipDrawable create(Context context) { | ||||
|         return createFromAttributes(context, null, DEFAULT_THEME_ATTR, DEFAULT_STYLE); | ||||
|     } | ||||
|  | ||||
|     private TooltipDrawable(Context context, AttributeSet attributeSet, int i, int i2) { | ||||
|         super(context, attributeSet, i, i2); | ||||
|         this.fontMetrics = new Paint.FontMetrics(); | ||||
|         TextDrawableHelper textDrawableHelper = new TextDrawableHelper(this); | ||||
|         this.textDrawableHelper = textDrawableHelper; | ||||
|         this.attachedViewLayoutChangeListener = new View.OnLayoutChangeListener() { // from class: com.google.android.material.tooltip.TooltipDrawable.1 | ||||
|             @Override // android.view.View.OnLayoutChangeListener | ||||
|             public void onLayoutChange(View view, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) { | ||||
|                 TooltipDrawable.this.updateLocationOnScreen(view); | ||||
|             } | ||||
|         }; | ||||
|         this.displayFrame = new Rect(); | ||||
|         this.tooltipScaleX = 1.0f; | ||||
|         this.tooltipScaleY = 1.0f; | ||||
|         this.tooltipPivotX = 0.5f; | ||||
|         this.tooltipPivotY = 0.5f; | ||||
|         this.labelOpacity = 1.0f; | ||||
|         this.context = context; | ||||
|         textDrawableHelper.getTextPaint().density = context.getResources().getDisplayMetrics().density; | ||||
|         textDrawableHelper.getTextPaint().setTextAlign(Paint.Align.CENTER); | ||||
|     } | ||||
|  | ||||
|     private void loadFromAttributes(AttributeSet attributeSet, int i, int i2) { | ||||
|         TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(this.context, attributeSet, R.styleable.Tooltip, i, i2, new int[0]); | ||||
|         this.arrowSize = this.context.getResources().getDimensionPixelSize(R.dimen.mtrl_tooltip_arrowSize); | ||||
|         setShapeAppearanceModel(getShapeAppearanceModel().toBuilder().setBottomEdge(createMarkerEdge()).build()); | ||||
|         setText(obtainStyledAttributes.getText(R.styleable.Tooltip_android_text)); | ||||
|         TextAppearance textAppearance = MaterialResources.getTextAppearance(this.context, obtainStyledAttributes, R.styleable.Tooltip_android_textAppearance); | ||||
|         if (textAppearance != null && obtainStyledAttributes.hasValue(R.styleable.Tooltip_android_textColor)) { | ||||
|             textAppearance.setTextColor(MaterialResources.getColorStateList(this.context, obtainStyledAttributes, R.styleable.Tooltip_android_textColor)); | ||||
|         } | ||||
|         setTextAppearance(textAppearance); | ||||
|         setFillColor(ColorStateList.valueOf(obtainStyledAttributes.getColor(R.styleable.Tooltip_backgroundTint, MaterialColors.layer(ColorUtils.setAlphaComponent(MaterialColors.getColor(this.context, android.R.attr.colorBackground, TooltipDrawable.class.getCanonicalName()), 229), ColorUtils.setAlphaComponent(MaterialColors.getColor(this.context, R.attr.colorOnBackground, TooltipDrawable.class.getCanonicalName()), 153))))); | ||||
|         setStrokeColor(ColorStateList.valueOf(MaterialColors.getColor(this.context, R.attr.colorSurface, TooltipDrawable.class.getCanonicalName()))); | ||||
|         this.padding = obtainStyledAttributes.getDimensionPixelSize(R.styleable.Tooltip_android_padding, 0); | ||||
|         this.minWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.Tooltip_android_minWidth, 0); | ||||
|         this.minHeight = obtainStyledAttributes.getDimensionPixelSize(R.styleable.Tooltip_android_minHeight, 0); | ||||
|         this.layoutMargin = obtainStyledAttributes.getDimensionPixelSize(R.styleable.Tooltip_android_layout_margin, 0); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|     } | ||||
|  | ||||
|     public void setTextResource(int i) { | ||||
|         setText(this.context.getResources().getString(i)); | ||||
|     } | ||||
|  | ||||
|     public void setText(CharSequence charSequence) { | ||||
|         if (TextUtils.equals(this.text, charSequence)) { | ||||
|             return; | ||||
|         } | ||||
|         this.text = charSequence; | ||||
|         this.textDrawableHelper.setTextWidthDirty(true); | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     public TextAppearance getTextAppearance() { | ||||
|         return this.textDrawableHelper.getTextAppearance(); | ||||
|     } | ||||
|  | ||||
|     public void setTextAppearanceResource(int i) { | ||||
|         setTextAppearance(new TextAppearance(this.context, i)); | ||||
|     } | ||||
|  | ||||
|     public void setTextAppearance(TextAppearance textAppearance) { | ||||
|         this.textDrawableHelper.setTextAppearance(textAppearance, this.context); | ||||
|     } | ||||
|  | ||||
|     public void setMinWidth(int i) { | ||||
|         this.minWidth = i; | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     public void setMinHeight(int i) { | ||||
|         this.minHeight = i; | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     public void setTextPadding(int i) { | ||||
|         this.padding = i; | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     public void setLayoutMargin(int i) { | ||||
|         this.layoutMargin = i; | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     public void setRevealFraction(float f) { | ||||
|         this.tooltipPivotY = 1.2f; | ||||
|         this.tooltipScaleX = f; | ||||
|         this.tooltipScaleY = f; | ||||
|         this.labelOpacity = AnimationUtils.lerp(0.0f, 1.0f, 0.19f, 1.0f, f); | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     public void setRelativeToView(View view) { | ||||
|         if (view == null) { | ||||
|             return; | ||||
|         } | ||||
|         updateLocationOnScreen(view); | ||||
|         view.addOnLayoutChangeListener(this.attachedViewLayoutChangeListener); | ||||
|     } | ||||
|  | ||||
|     public void detachView(View view) { | ||||
|         if (view == null) { | ||||
|             return; | ||||
|         } | ||||
|         view.removeOnLayoutChangeListener(this.attachedViewLayoutChangeListener); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getIntrinsicWidth() { | ||||
|         return (int) Math.max((this.padding * 2) + getTextWidth(), this.minWidth); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getIntrinsicHeight() { | ||||
|         return (int) Math.max(this.textDrawableHelper.getTextPaint().getTextSize(), this.minHeight); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.shape.MaterialShapeDrawable, android.graphics.drawable.Drawable | ||||
|     public void draw(Canvas canvas) { | ||||
|         canvas.save(); | ||||
|         float calculatePointerOffset = calculatePointerOffset(); | ||||
|         float f = (float) (-((this.arrowSize * Math.sqrt(2.0d)) - this.arrowSize)); | ||||
|         canvas.scale(this.tooltipScaleX, this.tooltipScaleY, getBounds().left + (getBounds().width() * 0.5f), getBounds().top + (getBounds().height() * this.tooltipPivotY)); | ||||
|         canvas.translate(calculatePointerOffset, f); | ||||
|         super.draw(canvas); | ||||
|         drawText(canvas); | ||||
|         canvas.restore(); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.shape.MaterialShapeDrawable, android.graphics.drawable.Drawable | ||||
|     protected void onBoundsChange(Rect rect) { | ||||
|         super.onBoundsChange(rect); | ||||
|         setShapeAppearanceModel(getShapeAppearanceModel().toBuilder().setBottomEdge(createMarkerEdge()).build()); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.shape.MaterialShapeDrawable, android.graphics.drawable.Drawable, com.google.android.material.internal.TextDrawableHelper.TextDrawableDelegate | ||||
|     public boolean onStateChange(int[] iArr) { | ||||
|         return super.onStateChange(iArr); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.TextDrawableHelper.TextDrawableDelegate | ||||
|     public void onTextSizeChange() { | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public void updateLocationOnScreen(View view) { | ||||
|         int[] iArr = new int[2]; | ||||
|         view.getLocationOnScreen(iArr); | ||||
|         this.locationOnScreenX = iArr[0]; | ||||
|         view.getWindowVisibleDisplayFrame(this.displayFrame); | ||||
|     } | ||||
|  | ||||
|     private float calculatePointerOffset() { | ||||
|         int i; | ||||
|         if (((this.displayFrame.right - getBounds().right) - this.locationOnScreenX) - this.layoutMargin < 0) { | ||||
|             i = ((this.displayFrame.right - getBounds().right) - this.locationOnScreenX) - this.layoutMargin; | ||||
|         } else { | ||||
|             if (((this.displayFrame.left - getBounds().left) - this.locationOnScreenX) + this.layoutMargin <= 0) { | ||||
|                 return 0.0f; | ||||
|             } | ||||
|             i = ((this.displayFrame.left - getBounds().left) - this.locationOnScreenX) + this.layoutMargin; | ||||
|         } | ||||
|         return i; | ||||
|     } | ||||
|  | ||||
|     private EdgeTreatment createMarkerEdge() { | ||||
|         float f = -calculatePointerOffset(); | ||||
|         float width = ((float) (getBounds().width() - (this.arrowSize * Math.sqrt(2.0d)))) / 2.0f; | ||||
|         return new OffsetEdgeTreatment(new MarkerEdgeTreatment(this.arrowSize), Math.min(Math.max(f, -width), width)); | ||||
|     } | ||||
|  | ||||
|     private void drawText(Canvas canvas) { | ||||
|         if (this.text == null) { | ||||
|             return; | ||||
|         } | ||||
|         int calculateTextOriginAndAlignment = (int) calculateTextOriginAndAlignment(getBounds()); | ||||
|         if (this.textDrawableHelper.getTextAppearance() != null) { | ||||
|             this.textDrawableHelper.getTextPaint().drawableState = getState(); | ||||
|             this.textDrawableHelper.updateTextPaintDrawState(this.context); | ||||
|             this.textDrawableHelper.getTextPaint().setAlpha((int) (this.labelOpacity * 255.0f)); | ||||
|         } | ||||
|         CharSequence charSequence = this.text; | ||||
|         canvas.drawText(charSequence, 0, charSequence.length(), r0.centerX(), calculateTextOriginAndAlignment, this.textDrawableHelper.getTextPaint()); | ||||
|     } | ||||
|  | ||||
|     private float getTextWidth() { | ||||
|         CharSequence charSequence = this.text; | ||||
|         if (charSequence == null) { | ||||
|             return 0.0f; | ||||
|         } | ||||
|         return this.textDrawableHelper.getTextWidth(charSequence.toString()); | ||||
|     } | ||||
|  | ||||
|     private float calculateTextOriginAndAlignment(Rect rect) { | ||||
|         return rect.centerY() - calculateTextCenterFromBaseline(); | ||||
|     } | ||||
|  | ||||
|     private float calculateTextCenterFromBaseline() { | ||||
|         this.textDrawableHelper.getTextPaint().getFontMetrics(this.fontMetrics); | ||||
|         return (this.fontMetrics.descent + this.fontMetrics.ascent) / 2.0f; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user