package androidx.appcompat.widget; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; import android.util.AttributeSet; import android.view.ActionMode; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.textclassifier.TextClassifier; import android.widget.TextView; import androidx.annotation.DrawableRes; import androidx.annotation.IntRange; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.annotation.RequiresApi; import androidx.annotation.RestrictTo; import androidx.appcompat.content.res.AppCompatResources; import androidx.core.graphics.TypefaceCompat; import androidx.core.text.PrecomputedTextCompat; import androidx.core.view.TintableBackgroundView; import androidx.core.widget.AutoSizeableTextView; import androidx.core.widget.TextViewCompat; import androidx.core.widget.TintableCompoundDrawablesView; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; public class AppCompatTextView extends TextView implements TintableBackgroundView, TintableCompoundDrawablesView, AutoSizeableTextView { private final AppCompatBackgroundHelper mBackgroundTintHelper; @Nullable private Future mPrecomputedTextFuture; private final AppCompatTextClassifierHelper mTextClassifierHelper; private final AppCompatTextHelper mTextHelper; public AppCompatTextView(@NonNull Context context) { this(context, null); } public AppCompatTextView(@NonNull Context context, @Nullable AttributeSet attributeSet) { this(context, attributeSet, 16842884); } public AppCompatTextView(@NonNull Context context, @Nullable AttributeSet attributeSet, int i) { super(TintContextWrapper.wrap(context), attributeSet, i); ThemeUtils.checkAppCompatTheme(this, getContext()); AppCompatBackgroundHelper appCompatBackgroundHelper = new AppCompatBackgroundHelper(this); this.mBackgroundTintHelper = appCompatBackgroundHelper; appCompatBackgroundHelper.loadFromAttributes(attributeSet, i); AppCompatTextHelper appCompatTextHelper = new AppCompatTextHelper(this); this.mTextHelper = appCompatTextHelper; appCompatTextHelper.loadFromAttributes(attributeSet, i); appCompatTextHelper.applyCompoundDrawablesTints(); this.mTextClassifierHelper = new AppCompatTextClassifierHelper(this); } private void consumeTextFutureAndSetBlocking() { Future future = this.mPrecomputedTextFuture; if (future != null) { try { this.mPrecomputedTextFuture = null; TextViewCompat.setPrecomputedText(this, future.get()); } catch (InterruptedException | ExecutionException unused) { } } } @Override // android.widget.TextView, android.view.View public void drawableStateChanged() { super.drawableStateChanged(); AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { appCompatBackgroundHelper.applySupportBackgroundTint(); } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.applyCompoundDrawablesTints(); } } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public int getAutoSizeMaxTextSize() { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { return super.getAutoSizeMaxTextSize(); } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { return appCompatTextHelper.getAutoSizeMaxTextSize(); } return -1; } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public int getAutoSizeMinTextSize() { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { return super.getAutoSizeMinTextSize(); } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { return appCompatTextHelper.getAutoSizeMinTextSize(); } return -1; } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public int getAutoSizeStepGranularity() { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { return super.getAutoSizeStepGranularity(); } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { return appCompatTextHelper.getAutoSizeStepGranularity(); } return -1; } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public int[] getAutoSizeTextAvailableSizes() { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { return super.getAutoSizeTextAvailableSizes(); } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; return appCompatTextHelper != null ? appCompatTextHelper.getAutoSizeTextAvailableSizes() : new int[0]; } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @SuppressLint({"WrongConstant"}) @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public int getAutoSizeTextType() { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { return super.getAutoSizeTextType() == 1 ? 1 : 0; } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { return appCompatTextHelper.getAutoSizeTextType(); } return 0; } @Override // android.widget.TextView public int getFirstBaselineToTopHeight() { return TextViewCompat.getFirstBaselineToTopHeight(this); } @Override // android.widget.TextView public int getLastBaselineToBottomHeight() { return TextViewCompat.getLastBaselineToBottomHeight(this); } @Override // androidx.core.view.TintableBackgroundView @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public ColorStateList getSupportBackgroundTintList() { AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { return appCompatBackgroundHelper.getSupportBackgroundTintList(); } return null; } @Override // androidx.core.view.TintableBackgroundView @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public PorterDuff.Mode getSupportBackgroundTintMode() { AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { return appCompatBackgroundHelper.getSupportBackgroundTintMode(); } return null; } @Override // androidx.core.widget.TintableCompoundDrawablesView @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public ColorStateList getSupportCompoundDrawablesTintList() { return this.mTextHelper.getCompoundDrawableTintList(); } @Override // androidx.core.widget.TintableCompoundDrawablesView @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public PorterDuff.Mode getSupportCompoundDrawablesTintMode() { return this.mTextHelper.getCompoundDrawableTintMode(); } @Override // android.widget.TextView public CharSequence getText() { consumeTextFutureAndSetBlocking(); return super.getText(); } @Override // android.widget.TextView @NonNull @RequiresApi(api = 26) public TextClassifier getTextClassifier() { AppCompatTextClassifierHelper appCompatTextClassifierHelper; return (Build.VERSION.SDK_INT >= 28 || (appCompatTextClassifierHelper = this.mTextClassifierHelper) == null) ? super.getTextClassifier() : appCompatTextClassifierHelper.getTextClassifier(); } @NonNull public PrecomputedTextCompat.Params getTextMetricsParamsCompat() { return TextViewCompat.getTextMetricsParams(this); } @Override // android.widget.TextView, android.view.View public InputConnection onCreateInputConnection(EditorInfo editorInfo) { return AppCompatHintHelper.onCreateInputConnection(super.onCreateInputConnection(editorInfo), editorInfo, this); } @Override // android.widget.TextView, android.view.View public void onLayout(boolean z2, int i, int i2, int i3, int i4) { super.onLayout(z2, i, i2, i3, i4); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onLayout(z2, i, i2, i3, i4); } } @Override // android.widget.TextView, android.view.View public void onMeasure(int i, int i2) { consumeTextFutureAndSetBlocking(); super.onMeasure(i, i2); } @Override // android.widget.TextView public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { super.onTextChanged(charSequence, i, i2, i3); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null && !AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE && appCompatTextHelper.isAutoSizeEnabled()) { this.mTextHelper.autoSizeText(); } } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setAutoSizeTextTypeUniformWithConfiguration(int i, int i2, int i3, int i4) throws IllegalArgumentException { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { super.setAutoSizeTextTypeUniformWithConfiguration(i, i2, i3, i4); return; } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.setAutoSizeTextTypeUniformWithConfiguration(i, i2, i3, i4); } } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] iArr, int i) throws IllegalArgumentException { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { super.setAutoSizeTextTypeUniformWithPresetSizes(iArr, i); return; } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.setAutoSizeTextTypeUniformWithPresetSizes(iArr, i); } } @Override // android.widget.TextView, androidx.core.widget.AutoSizeableTextView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setAutoSizeTextTypeWithDefaults(int i) { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { super.setAutoSizeTextTypeWithDefaults(i); return; } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.setAutoSizeTextTypeWithDefaults(i); } } @Override // android.view.View public void setBackgroundDrawable(Drawable drawable) { super.setBackgroundDrawable(drawable); AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { appCompatBackgroundHelper.onSetBackgroundDrawable(drawable); } } @Override // android.view.View public void setBackgroundResource(@DrawableRes int i) { super.setBackgroundResource(i); AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { appCompatBackgroundHelper.onSetBackgroundResource(i); } } @Override // android.widget.TextView public void setCompoundDrawables(@Nullable Drawable drawable, @Nullable Drawable drawable2, @Nullable Drawable drawable3, @Nullable Drawable drawable4) { super.setCompoundDrawables(drawable, drawable2, drawable3, drawable4); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetCompoundDrawables(); } } @Override // android.widget.TextView @RequiresApi(17) public void setCompoundDrawablesRelative(@Nullable Drawable drawable, @Nullable Drawable drawable2, @Nullable Drawable drawable3, @Nullable Drawable drawable4) { super.setCompoundDrawablesRelative(drawable, drawable2, drawable3, drawable4); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetCompoundDrawables(); } } @Override // android.widget.TextView @RequiresApi(17) public void setCompoundDrawablesRelativeWithIntrinsicBounds(int i, int i2, int i3, int i4) { Context context = getContext(); Drawable drawable = null; Drawable drawable2 = i != 0 ? AppCompatResources.getDrawable(context, i) : null; Drawable drawable3 = i2 != 0 ? AppCompatResources.getDrawable(context, i2) : null; Drawable drawable4 = i3 != 0 ? AppCompatResources.getDrawable(context, i3) : null; if (i4 != 0) { drawable = AppCompatResources.getDrawable(context, i4); } setCompoundDrawablesRelativeWithIntrinsicBounds(drawable2, drawable3, drawable4, drawable); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetCompoundDrawables(); } } @Override // android.widget.TextView @RequiresApi(17) public void setCompoundDrawablesRelativeWithIntrinsicBounds(@Nullable Drawable drawable, @Nullable Drawable drawable2, @Nullable Drawable drawable3, @Nullable Drawable drawable4) { super.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, drawable2, drawable3, drawable4); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetCompoundDrawables(); } } @Override // android.widget.TextView public void setCompoundDrawablesWithIntrinsicBounds(int i, int i2, int i3, int i4) { Context context = getContext(); Drawable drawable = null; Drawable drawable2 = i != 0 ? AppCompatResources.getDrawable(context, i) : null; Drawable drawable3 = i2 != 0 ? AppCompatResources.getDrawable(context, i2) : null; Drawable drawable4 = i3 != 0 ? AppCompatResources.getDrawable(context, i3) : null; if (i4 != 0) { drawable = AppCompatResources.getDrawable(context, i4); } setCompoundDrawablesWithIntrinsicBounds(drawable2, drawable3, drawable4, drawable); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetCompoundDrawables(); } } @Override // android.widget.TextView public void setCompoundDrawablesWithIntrinsicBounds(@Nullable Drawable drawable, @Nullable Drawable drawable2, @Nullable Drawable drawable3, @Nullable Drawable drawable4) { super.setCompoundDrawablesWithIntrinsicBounds(drawable, drawable2, drawable3, drawable4); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetCompoundDrawables(); } } @Override // android.widget.TextView public void setCustomSelectionActionModeCallback(ActionMode.Callback callback) { super.setCustomSelectionActionModeCallback(TextViewCompat.wrapCustomSelectionActionModeCallback(this, callback)); } @Override // android.widget.TextView public void setFirstBaselineToTopHeight(@IntRange(from = 0) @Px int i) { if (Build.VERSION.SDK_INT >= 28) { super.setFirstBaselineToTopHeight(i); } else { TextViewCompat.setFirstBaselineToTopHeight(this, i); } } @Override // android.widget.TextView public void setLastBaselineToBottomHeight(@IntRange(from = 0) @Px int i) { if (Build.VERSION.SDK_INT >= 28) { super.setLastBaselineToBottomHeight(i); } else { TextViewCompat.setLastBaselineToBottomHeight(this, i); } } @Override // android.widget.TextView public void setLineHeight(@IntRange(from = 0) @Px int i) { TextViewCompat.setLineHeight(this, i); } public void setPrecomputedText(@NonNull PrecomputedTextCompat precomputedTextCompat) { TextViewCompat.setPrecomputedText(this, precomputedTextCompat); } @Override // androidx.core.view.TintableBackgroundView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setSupportBackgroundTintList(@Nullable ColorStateList colorStateList) { AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { appCompatBackgroundHelper.setSupportBackgroundTintList(colorStateList); } } @Override // androidx.core.view.TintableBackgroundView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode mode) { AppCompatBackgroundHelper appCompatBackgroundHelper = this.mBackgroundTintHelper; if (appCompatBackgroundHelper != null) { appCompatBackgroundHelper.setSupportBackgroundTintMode(mode); } } @Override // androidx.core.widget.TintableCompoundDrawablesView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setSupportCompoundDrawablesTintList(@Nullable ColorStateList colorStateList) { this.mTextHelper.setCompoundDrawableTintList(colorStateList); this.mTextHelper.applyCompoundDrawablesTints(); } @Override // androidx.core.widget.TintableCompoundDrawablesView @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode mode) { this.mTextHelper.setCompoundDrawableTintMode(mode); this.mTextHelper.applyCompoundDrawablesTints(); } @Override // android.widget.TextView public void setTextAppearance(Context context, int i) { super.setTextAppearance(context, i); AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.onSetTextAppearance(context, i); } } @Override // android.widget.TextView @RequiresApi(api = 26) public void setTextClassifier(@Nullable TextClassifier textClassifier) { AppCompatTextClassifierHelper appCompatTextClassifierHelper; if (Build.VERSION.SDK_INT >= 28 || (appCompatTextClassifierHelper = this.mTextClassifierHelper) == null) { super.setTextClassifier(textClassifier); } else { appCompatTextClassifierHelper.setTextClassifier(textClassifier); } } public void setTextFuture(@Nullable Future future) { this.mPrecomputedTextFuture = future; if (future != null) { requestLayout(); } } public void setTextMetricsParamsCompat(@NonNull PrecomputedTextCompat.Params params) { TextViewCompat.setTextMetricsParams(this, params); } @Override // android.widget.TextView public void setTextSize(int i, float f) { if (AutoSizeableTextView.PLATFORM_SUPPORTS_AUTOSIZE) { super.setTextSize(i, f); return; } AppCompatTextHelper appCompatTextHelper = this.mTextHelper; if (appCompatTextHelper != null) { appCompatTextHelper.setTextSize(i, f); } } @Override // android.widget.TextView public void setTypeface(@Nullable Typeface typeface, int i) { Typeface create = (typeface == null || i <= 0) ? null : TypefaceCompat.create(getContext(), typeface, i); if (create != null) { typeface = create; } super.setTypeface(typeface, i); } }