137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.internal;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.graphics.Typeface;
 | |
| import android.text.TextPaint;
 | |
| import com.google.android.material.resources.TextAppearance;
 | |
| import com.google.android.material.resources.TextAppearanceFontCallback;
 | |
| import java.lang.ref.WeakReference;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class TextDrawableHelper {
 | |
|     private TextAppearance textAppearance;
 | |
|     private float textHeight;
 | |
|     private float textWidth;
 | |
|     private final TextPaint textPaint = new TextPaint(1);
 | |
|     private final TextAppearanceFontCallback fontCallback = new TextAppearanceFontCallback() { // from class: com.google.android.material.internal.TextDrawableHelper.1
 | |
|         @Override // com.google.android.material.resources.TextAppearanceFontCallback
 | |
|         public void onFontRetrieved(Typeface typeface, boolean z) {
 | |
|             if (z) {
 | |
|                 return;
 | |
|             }
 | |
|             TextDrawableHelper.this.textSizeDirty = true;
 | |
|             TextDrawableDelegate textDrawableDelegate = (TextDrawableDelegate) TextDrawableHelper.this.delegate.get();
 | |
|             if (textDrawableDelegate != null) {
 | |
|                 textDrawableDelegate.onTextSizeChange();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.resources.TextAppearanceFontCallback
 | |
|         public void onFontRetrievalFailed(int i) {
 | |
|             TextDrawableHelper.this.textSizeDirty = true;
 | |
|             TextDrawableDelegate textDrawableDelegate = (TextDrawableDelegate) TextDrawableHelper.this.delegate.get();
 | |
|             if (textDrawableDelegate != null) {
 | |
|                 textDrawableDelegate.onTextSizeChange();
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     private boolean textSizeDirty = true;
 | |
|     private WeakReference<TextDrawableDelegate> delegate = new WeakReference<>(null);
 | |
| 
 | |
|     public interface TextDrawableDelegate {
 | |
|         int[] getState();
 | |
| 
 | |
|         boolean onStateChange(int[] iArr);
 | |
| 
 | |
|         void onTextSizeChange();
 | |
|     }
 | |
| 
 | |
|     public TextAppearance getTextAppearance() {
 | |
|         return this.textAppearance;
 | |
|     }
 | |
| 
 | |
|     public TextPaint getTextPaint() {
 | |
|         return this.textPaint;
 | |
|     }
 | |
| 
 | |
|     public boolean isTextWidthDirty() {
 | |
|         return this.textSizeDirty;
 | |
|     }
 | |
| 
 | |
|     public void setTextSizeDirty(boolean z) {
 | |
|         this.textSizeDirty = z;
 | |
|     }
 | |
| 
 | |
|     public void setTextWidthDirty(boolean z) {
 | |
|         this.textSizeDirty = z;
 | |
|     }
 | |
| 
 | |
|     public TextDrawableHelper(TextDrawableDelegate textDrawableDelegate) {
 | |
|         setDelegate(textDrawableDelegate);
 | |
|     }
 | |
| 
 | |
|     public void setDelegate(TextDrawableDelegate textDrawableDelegate) {
 | |
|         this.delegate = new WeakReference<>(textDrawableDelegate);
 | |
|     }
 | |
| 
 | |
|     private void refreshTextDimens(String str) {
 | |
|         this.textWidth = calculateTextWidth(str);
 | |
|         this.textHeight = calculateTextHeight(str);
 | |
|         this.textSizeDirty = false;
 | |
|     }
 | |
| 
 | |
|     public float getTextWidth(String str) {
 | |
|         if (!this.textSizeDirty) {
 | |
|             return this.textWidth;
 | |
|         }
 | |
|         refreshTextDimens(str);
 | |
|         return this.textWidth;
 | |
|     }
 | |
| 
 | |
|     private float calculateTextWidth(CharSequence charSequence) {
 | |
|         if (charSequence == null) {
 | |
|             return 0.0f;
 | |
|         }
 | |
|         return this.textPaint.measureText(charSequence, 0, charSequence.length());
 | |
|     }
 | |
| 
 | |
|     public float getTextHeight(String str) {
 | |
|         if (!this.textSizeDirty) {
 | |
|             return this.textHeight;
 | |
|         }
 | |
|         refreshTextDimens(str);
 | |
|         return this.textHeight;
 | |
|     }
 | |
| 
 | |
|     private float calculateTextHeight(String str) {
 | |
|         if (str == null) {
 | |
|             return 0.0f;
 | |
|         }
 | |
|         return Math.abs(this.textPaint.getFontMetrics().ascent);
 | |
|     }
 | |
| 
 | |
|     public void setTextAppearance(TextAppearance textAppearance, Context context) {
 | |
|         if (this.textAppearance != textAppearance) {
 | |
|             this.textAppearance = textAppearance;
 | |
|             if (textAppearance != null) {
 | |
|                 textAppearance.updateMeasureState(context, this.textPaint, this.fontCallback);
 | |
|                 TextDrawableDelegate textDrawableDelegate = this.delegate.get();
 | |
|                 if (textDrawableDelegate != null) {
 | |
|                     this.textPaint.drawableState = textDrawableDelegate.getState();
 | |
|                 }
 | |
|                 textAppearance.updateDrawState(context, this.textPaint, this.fontCallback);
 | |
|                 this.textSizeDirty = true;
 | |
|             }
 | |
|             TextDrawableDelegate textDrawableDelegate2 = this.delegate.get();
 | |
|             if (textDrawableDelegate2 != null) {
 | |
|                 textDrawableDelegate2.onTextSizeChange();
 | |
|                 textDrawableDelegate2.onStateChange(textDrawableDelegate2.getState());
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void updateTextPaintDrawState(Context context) {
 | |
|         this.textAppearance.updateDrawState(context, this.textPaint, this.fontCallback);
 | |
|     }
 | |
| }
 |