ADD week 5
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user