223 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.resources;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.content.res.Resources;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Typeface;
 | |
| import android.text.TextPaint;
 | |
| import android.util.Log;
 | |
| import androidx.core.content.res.ResourcesCompat;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import com.google.android.material.R;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class TextAppearance {
 | |
|     private static final String TAG = "TextAppearance";
 | |
|     private static final int TYPEFACE_MONOSPACE = 3;
 | |
|     private static final int TYPEFACE_SANS = 1;
 | |
|     private static final int TYPEFACE_SERIF = 2;
 | |
|     private Typeface font;
 | |
|     public final String fontFamily;
 | |
|     private final int fontFamilyResourceId;
 | |
|     private boolean fontResolved = false;
 | |
|     public final boolean hasLetterSpacing;
 | |
|     public final float letterSpacing;
 | |
|     public final ColorStateList shadowColor;
 | |
|     public final float shadowDx;
 | |
|     public final float shadowDy;
 | |
|     public final float shadowRadius;
 | |
|     public final boolean textAllCaps;
 | |
|     private ColorStateList textColor;
 | |
|     public final ColorStateList textColorHint;
 | |
|     public final ColorStateList textColorLink;
 | |
|     private float textSize;
 | |
|     public final int textStyle;
 | |
|     public final int typeface;
 | |
| 
 | |
|     public ColorStateList getTextColor() {
 | |
|         return this.textColor;
 | |
|     }
 | |
| 
 | |
|     public float getTextSize() {
 | |
|         return this.textSize;
 | |
|     }
 | |
| 
 | |
|     public void setTextColor(ColorStateList colorStateList) {
 | |
|         this.textColor = colorStateList;
 | |
|     }
 | |
| 
 | |
|     public void setTextSize(float f) {
 | |
|         this.textSize = f;
 | |
|     }
 | |
| 
 | |
|     public TextAppearance(Context context, int i) {
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(i, R.styleable.TextAppearance);
 | |
|         setTextSize(obtainStyledAttributes.getDimension(R.styleable.TextAppearance_android_textSize, 0.0f));
 | |
|         setTextColor(MaterialResources.getColorStateList(context, obtainStyledAttributes, R.styleable.TextAppearance_android_textColor));
 | |
|         this.textColorHint = MaterialResources.getColorStateList(context, obtainStyledAttributes, R.styleable.TextAppearance_android_textColorHint);
 | |
|         this.textColorLink = MaterialResources.getColorStateList(context, obtainStyledAttributes, R.styleable.TextAppearance_android_textColorLink);
 | |
|         this.textStyle = obtainStyledAttributes.getInt(R.styleable.TextAppearance_android_textStyle, 0);
 | |
|         this.typeface = obtainStyledAttributes.getInt(R.styleable.TextAppearance_android_typeface, 1);
 | |
|         int indexWithValue = MaterialResources.getIndexWithValue(obtainStyledAttributes, R.styleable.TextAppearance_fontFamily, R.styleable.TextAppearance_android_fontFamily);
 | |
|         this.fontFamilyResourceId = obtainStyledAttributes.getResourceId(indexWithValue, 0);
 | |
|         this.fontFamily = obtainStyledAttributes.getString(indexWithValue);
 | |
|         this.textAllCaps = obtainStyledAttributes.getBoolean(R.styleable.TextAppearance_textAllCaps, false);
 | |
|         this.shadowColor = MaterialResources.getColorStateList(context, obtainStyledAttributes, R.styleable.TextAppearance_android_shadowColor);
 | |
|         this.shadowDx = obtainStyledAttributes.getFloat(R.styleable.TextAppearance_android_shadowDx, 0.0f);
 | |
|         this.shadowDy = obtainStyledAttributes.getFloat(R.styleable.TextAppearance_android_shadowDy, 0.0f);
 | |
|         this.shadowRadius = obtainStyledAttributes.getFloat(R.styleable.TextAppearance_android_shadowRadius, 0.0f);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         TypedArray obtainStyledAttributes2 = context.obtainStyledAttributes(i, R.styleable.MaterialTextAppearance);
 | |
|         this.hasLetterSpacing = obtainStyledAttributes2.hasValue(R.styleable.MaterialTextAppearance_android_letterSpacing);
 | |
|         this.letterSpacing = obtainStyledAttributes2.getFloat(R.styleable.MaterialTextAppearance_android_letterSpacing, 0.0f);
 | |
|         obtainStyledAttributes2.recycle();
 | |
|     }
 | |
| 
 | |
|     public Typeface getFont(Context context) {
 | |
|         if (this.fontResolved) {
 | |
|             return this.font;
 | |
|         }
 | |
|         if (!context.isRestricted()) {
 | |
|             try {
 | |
|                 Typeface font = ResourcesCompat.getFont(context, this.fontFamilyResourceId);
 | |
|                 this.font = font;
 | |
|                 if (font != null) {
 | |
|                     this.font = Typeface.create(font, this.textStyle);
 | |
|                 }
 | |
|             } catch (Resources.NotFoundException | UnsupportedOperationException unused) {
 | |
|             } catch (Exception e) {
 | |
|                 Log.d(TAG, "Error loading font " + this.fontFamily, e);
 | |
|             }
 | |
|         }
 | |
|         createFallbackFont();
 | |
|         this.fontResolved = true;
 | |
|         return this.font;
 | |
|     }
 | |
| 
 | |
|     public void getFontAsync(Context context, final TextAppearanceFontCallback textAppearanceFontCallback) {
 | |
|         if (shouldLoadFontSynchronously(context)) {
 | |
|             getFont(context);
 | |
|         } else {
 | |
|             createFallbackFont();
 | |
|         }
 | |
|         int i = this.fontFamilyResourceId;
 | |
|         if (i == 0) {
 | |
|             this.fontResolved = true;
 | |
|         }
 | |
|         if (this.fontResolved) {
 | |
|             textAppearanceFontCallback.onFontRetrieved(this.font, true);
 | |
|             return;
 | |
|         }
 | |
|         try {
 | |
|             ResourcesCompat.getFont(context, i, new ResourcesCompat.FontCallback() { // from class: com.google.android.material.resources.TextAppearance.1
 | |
|                 @Override // androidx.core.content.res.ResourcesCompat.FontCallback
 | |
|                 /* renamed from: onFontRetrieved */
 | |
|                 public void m81x46c88379(Typeface typeface) {
 | |
|                     TextAppearance textAppearance = TextAppearance.this;
 | |
|                     textAppearance.font = Typeface.create(typeface, textAppearance.textStyle);
 | |
|                     TextAppearance.this.fontResolved = true;
 | |
|                     textAppearanceFontCallback.onFontRetrieved(TextAppearance.this.font, false);
 | |
|                 }
 | |
| 
 | |
|                 @Override // androidx.core.content.res.ResourcesCompat.FontCallback
 | |
|                 /* renamed from: onFontRetrievalFailed */
 | |
|                 public void m80xb24343b7(int i2) {
 | |
|                     TextAppearance.this.fontResolved = true;
 | |
|                     textAppearanceFontCallback.onFontRetrievalFailed(i2);
 | |
|                 }
 | |
|             }, null);
 | |
|         } catch (Resources.NotFoundException unused) {
 | |
|             this.fontResolved = true;
 | |
|             textAppearanceFontCallback.onFontRetrievalFailed(1);
 | |
|         } catch (Exception e) {
 | |
|             Log.d(TAG, "Error loading font " + this.fontFamily, e);
 | |
|             this.fontResolved = true;
 | |
|             textAppearanceFontCallback.onFontRetrievalFailed(-3);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void getFontAsync(final Context context, final TextPaint textPaint, final TextAppearanceFontCallback textAppearanceFontCallback) {
 | |
|         updateTextPaintMeasureState(context, textPaint, getFallbackFont());
 | |
|         getFontAsync(context, new TextAppearanceFontCallback() { // from class: com.google.android.material.resources.TextAppearance.2
 | |
|             @Override // com.google.android.material.resources.TextAppearanceFontCallback
 | |
|             public void onFontRetrieved(Typeface typeface, boolean z) {
 | |
|                 TextAppearance.this.updateTextPaintMeasureState(context, textPaint, typeface);
 | |
|                 textAppearanceFontCallback.onFontRetrieved(typeface, z);
 | |
|             }
 | |
| 
 | |
|             @Override // com.google.android.material.resources.TextAppearanceFontCallback
 | |
|             public void onFontRetrievalFailed(int i) {
 | |
|                 textAppearanceFontCallback.onFontRetrievalFailed(i);
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     public Typeface getFallbackFont() {
 | |
|         createFallbackFont();
 | |
|         return this.font;
 | |
|     }
 | |
| 
 | |
|     private void createFallbackFont() {
 | |
|         String str;
 | |
|         if (this.font == null && (str = this.fontFamily) != null) {
 | |
|             this.font = Typeface.create(str, this.textStyle);
 | |
|         }
 | |
|         if (this.font == null) {
 | |
|             int i = this.typeface;
 | |
|             if (i == 1) {
 | |
|                 this.font = Typeface.SANS_SERIF;
 | |
|             } else if (i == 2) {
 | |
|                 this.font = Typeface.SERIF;
 | |
|             } else if (i == 3) {
 | |
|                 this.font = Typeface.MONOSPACE;
 | |
|             } else {
 | |
|                 this.font = Typeface.DEFAULT;
 | |
|             }
 | |
|             this.font = Typeface.create(this.font, this.textStyle);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void updateDrawState(Context context, TextPaint textPaint, TextAppearanceFontCallback textAppearanceFontCallback) {
 | |
|         updateMeasureState(context, textPaint, textAppearanceFontCallback);
 | |
|         ColorStateList colorStateList = this.textColor;
 | |
|         textPaint.setColor(colorStateList != null ? colorStateList.getColorForState(textPaint.drawableState, this.textColor.getDefaultColor()) : ViewCompat.MEASURED_STATE_MASK);
 | |
|         float f = this.shadowRadius;
 | |
|         float f2 = this.shadowDx;
 | |
|         float f3 = this.shadowDy;
 | |
|         ColorStateList colorStateList2 = this.shadowColor;
 | |
|         textPaint.setShadowLayer(f, f2, f3, colorStateList2 != null ? colorStateList2.getColorForState(textPaint.drawableState, this.shadowColor.getDefaultColor()) : 0);
 | |
|     }
 | |
| 
 | |
|     public void updateMeasureState(Context context, TextPaint textPaint, TextAppearanceFontCallback textAppearanceFontCallback) {
 | |
|         if (shouldLoadFontSynchronously(context)) {
 | |
|             updateTextPaintMeasureState(context, textPaint, getFont(context));
 | |
|         } else {
 | |
|             getFontAsync(context, textPaint, textAppearanceFontCallback);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void updateTextPaintMeasureState(Context context, TextPaint textPaint, Typeface typeface) {
 | |
|         Typeface maybeCopyWithFontWeightAdjustment = TypefaceUtils.maybeCopyWithFontWeightAdjustment(context, typeface);
 | |
|         if (maybeCopyWithFontWeightAdjustment != null) {
 | |
|             typeface = maybeCopyWithFontWeightAdjustment;
 | |
|         }
 | |
|         textPaint.setTypeface(typeface);
 | |
|         int i = this.textStyle & (~typeface.getStyle());
 | |
|         textPaint.setFakeBoldText((i & 1) != 0);
 | |
|         textPaint.setTextSkewX((i & 2) != 0 ? -0.25f : 0.0f);
 | |
|         textPaint.setTextSize(this.textSize);
 | |
|         if (this.hasLetterSpacing) {
 | |
|             textPaint.setLetterSpacing(this.letterSpacing);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private boolean shouldLoadFontSynchronously(Context context) {
 | |
|         if (TextAppearanceConfig.shouldLoadFontSynchronously()) {
 | |
|             return true;
 | |
|         }
 | |
|         int i = this.fontFamilyResourceId;
 | |
|         return (i != 0 ? ResourcesCompat.getCachedFont(context, i) : null) != null;
 | |
|     }
 | |
| }
 |