189208232f3b5d1451408d787872504a190bc7ee0Chris Banes/*
22cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes * Copyright (C) 2015 The Android Open Source Project
389208232f3b5d1451408d787872504a190bc7ee0Chris Banes *
489208232f3b5d1451408d787872504a190bc7ee0Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
589208232f3b5d1451408d787872504a190bc7ee0Chris Banes * you may not use this file except in compliance with the License.
689208232f3b5d1451408d787872504a190bc7ee0Chris Banes * You may obtain a copy of the License at
789208232f3b5d1451408d787872504a190bc7ee0Chris Banes *
889208232f3b5d1451408d787872504a190bc7ee0Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
989208232f3b5d1451408d787872504a190bc7ee0Chris Banes *
1089208232f3b5d1451408d787872504a190bc7ee0Chris Banes * Unless required by applicable law or agreed to in writing, software
1189208232f3b5d1451408d787872504a190bc7ee0Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1289208232f3b5d1451408d787872504a190bc7ee0Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1389208232f3b5d1451408d787872504a190bc7ee0Chris Banes * See the License for the specific language governing permissions and
1489208232f3b5d1451408d787872504a190bc7ee0Chris Banes * limitations under the License.
1589208232f3b5d1451408d787872504a190bc7ee0Chris Banes */
1689208232f3b5d1451408d787872504a190bc7ee0Chris Banes
172cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banespackage android.support.v7.widget;
1889208232f3b5d1451408d787872504a190bc7ee0Chris Banes
198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikasimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas
2189208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.content.Context;
2252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banesimport android.content.res.ColorStateList;
2352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banesimport android.graphics.PorterDuff;
2452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banesimport android.graphics.drawable.Drawable;
2552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banesimport android.support.annotation.DrawableRes;
26cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanuimport android.support.annotation.NonNull;
2752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banesimport android.support.annotation.Nullable;
28c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo;
29e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanuimport android.support.v4.os.BuildCompat;
3052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banesimport android.support.v4.view.TintableBackgroundView;
31cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanuimport android.support.v4.widget.AutoSizeableTextView;
32cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanuimport android.support.v4.widget.TextViewCompat;
3389208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.support.v7.appcompat.R;
3489208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.util.AttributeSet;
3589208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.widget.TextView;
3689208232f3b5d1451408d787872504a190bc7ee0Chris Banes
3789208232f3b5d1451408d787872504a190bc7ee0Chris Banes/**
38091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * A {@link TextView} which supports compatible features on older version of the platform,
39091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * including:
40091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * <ul>
41091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *     <li>Supports {@link R.attr#textAllCaps} style attribute which works back to
4264dbe1d454f1190b3cd8426d09b9119949a10709Kirill Grouchnikov *     {@link android.os.Build.VERSION_CODES#GINGERBREAD Gingerbread}.</li>
4329def828b59307ae6bfec1e5da8c44b7e651ddcfKirill Grouchnikov *     <li>Allows dynamic tint of its background via the background tint methods in
4452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes *     {@link android.support.v4.view.ViewCompat}.</li>
4552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes *     <li>Allows setting of the background tint using {@link R.attr#backgroundTint} and
4652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes *     {@link R.attr#backgroundTintMode}.</li>
479143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     <li>Supports auto-sizing via {@link android.support.v4.widget.TextViewCompat} by allowing
489143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     to instruct a {@link TextView} to let the size of the text expand or contract automatically
499143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     to fill its layout based on the TextView's characteristics and boundaries. The
509143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     style attributes associated with auto-sizing are {@link R.attr#autoSizeTextType},
519143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     {@link R.attr#autoSizeMinTextSize}, {@link R.attr#autoSizeMaxTextSize},
529143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     {@link R.attr#autoSizeStepGranularity} and {@link R.attr#autoSizePresetSizes}, all of
539143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     which work back to
549143d7d1813d0db1d8a62a68bcf8d633aa9f60fcAndrei Stingaceanu *     {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH Ice Cream Sandwich}.</li>
55091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * </ul>
56091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *
57091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * <p>This will automatically be used when you use {@link TextView} in your layouts.
58091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * You should only need to manually use this class when writing custom views.</p>
5989208232f3b5d1451408d787872504a190bc7ee0Chris Banes */
60cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanupublic class AppCompatTextView extends TextView implements TintableBackgroundView,
61cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        AutoSizeableTextView {
6241ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu
6329def828b59307ae6bfec1e5da8c44b7e651ddcfKirill Grouchnikov    private final AppCompatBackgroundHelper mBackgroundTintHelper;
6429def828b59307ae6bfec1e5da8c44b7e651ddcfKirill Grouchnikov    private final AppCompatTextHelper mTextHelper;
65091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
662cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public AppCompatTextView(Context context) {
6789208232f3b5d1451408d787872504a190bc7ee0Chris Banes        this(context, null);
6889208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
6989208232f3b5d1451408d787872504a190bc7ee0Chris Banes
702cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public AppCompatTextView(Context context, AttributeSet attrs) {
71e120656eaf98961d4550f6e4e970812839887b26Chris Banes        this(context, attrs, android.R.attr.textViewStyle);
7289208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
7389208232f3b5d1451408d787872504a190bc7ee0Chris Banes
74091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    public AppCompatTextView(Context context, AttributeSet attrs, int defStyleAttr) {
75e4beadba70aecabbd7f6677943ab7c0b94809b8aChris Banes        super(TintContextWrapper.wrap(context), attrs, defStyleAttr);
76320c3e9fe1e100a5a7cda5dd217d2d1152d08b3fChris Banes
774c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banes        mBackgroundTintHelper = new AppCompatBackgroundHelper(this);
7852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
7952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
80f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        mTextHelper = AppCompatTextHelper.create(this);
81091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mTextHelper.loadFromAttributes(attrs, defStyleAttr);
82f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        mTextHelper.applyCompoundDrawablesTints();
83320c3e9fe1e100a5a7cda5dd217d2d1152d08b3fChris Banes    }
84320c3e9fe1e100a5a7cda5dd217d2d1152d08b3fChris Banes
85320c3e9fe1e100a5a7cda5dd217d2d1152d08b3fChris Banes    @Override
8652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    public void setBackgroundResource(@DrawableRes int resId) {
8752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        super.setBackgroundResource(resId);
8852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        if (mBackgroundTintHelper != null) {
8952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes            mBackgroundTintHelper.onSetBackgroundResource(resId);
9052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        }
9152a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    }
9252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
9352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Override
9452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    public void setBackgroundDrawable(Drawable background) {
9552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        super.setBackgroundDrawable(background);
9652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        if (mBackgroundTintHelper != null) {
9752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes            mBackgroundTintHelper.onSetBackgroundDrawable(background);
9852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        }
9952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    }
10052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
10152a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    /**
10252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * This should be accessed via
10352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * {@link android.support.v4.view.ViewCompat#setBackgroundTintList(android.view.View, ColorStateList)}
10452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     *
10552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * @hide
10652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     */
1078e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
10852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Override
10952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
11052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        if (mBackgroundTintHelper != null) {
11152a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes            mBackgroundTintHelper.setSupportBackgroundTintList(tint);
11252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        }
11352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    }
11452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
11552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    /**
11652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * This should be accessed via
11752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * {@link android.support.v4.view.ViewCompat#getBackgroundTintList(android.view.View)}
11852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     *
11952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * @hide
12052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     */
1218e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
12252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Override
12352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Nullable
12452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    public ColorStateList getSupportBackgroundTintList() {
12552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        return mBackgroundTintHelper != null
12652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes                ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
12752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    }
12852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
12952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    /**
13052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * This should be accessed via
13152a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * {@link android.support.v4.view.ViewCompat#setBackgroundTintMode(android.view.View, PorterDuff.Mode)}
13252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     *
13352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * @hide
13452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     */
1358e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
13652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Override
13752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
13852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        if (mBackgroundTintHelper != null) {
13952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes            mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
14052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        }
14152a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    }
14252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
14352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    /**
14452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * This should be accessed via
14552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * {@link android.support.v4.view.ViewCompat#getBackgroundTintMode(android.view.View)}
14652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     *
14752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     * @hide
14852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes     */
1498e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
15052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Override
15152a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Nullable
15252a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    public PorterDuff.Mode getSupportBackgroundTintMode() {
15352a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        return mBackgroundTintHelper != null
15452a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes                ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
15552a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    }
15652a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes
15752a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes    @Override
1582cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public void setTextAppearance(Context context, int resId) {
1592cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        super.setTextAppearance(context, resId);
160091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mTextHelper != null) {
161091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mTextHelper.onSetTextAppearance(context, resId);
16289208232f3b5d1451408d787872504a190bc7ee0Chris Banes        }
16389208232f3b5d1451408d787872504a190bc7ee0Chris Banes    }
164f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes
165f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes    @Override
166f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes    protected void drawableStateChanged() {
167f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        super.drawableStateChanged();
16852a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        if (mBackgroundTintHelper != null) {
16952a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes            mBackgroundTintHelper.applySupportBackgroundTint();
17052a2fcaedc37de7e6c243a860ffd8d17b648f972Chris Banes        }
171f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        if (mTextHelper != null) {
172f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes            mTextHelper.applyCompoundDrawablesTints();
173f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        }
174f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes    }
17541ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu
17641ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu    @Override
17741ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
17841ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu        super.onLayout(changed, left, top, right, bottom);
17941ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu        if (mTextHelper != null) {
18041ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu            mTextHelper.onLayout(changed, left, top, right, bottom);
18141ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu        }
18241ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu    }
18341ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu
18441ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu    @Override
18541ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu    public void setTextSize(int unit, float size) {
186e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
18741ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu            super.setTextSize(unit, size);
188e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
189e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
190e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                mTextHelper.setTextSize(unit, size);
191e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
19241ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu        }
19341ce347ead8295377dc22960102efb6bbaf80afcAndrei Stingaceanu    }
194cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
195cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
196cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
197cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#setAutoSizeTextTypeWithDefaults(
198cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *        TextView, int)}
199cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
200cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
201cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
202cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
203cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
204cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public void setAutoSizeTextTypeWithDefaults(
205cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu            @TextViewCompat.AutoSizeTextType int autoSizeTextType) {
206e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
207e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            super.setAutoSizeTextTypeWithDefaults(autoSizeTextType);
208e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
209e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
210e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeWithDefaults(autoSizeTextType);
211e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
212cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
213cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
214cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
215cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
216cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
217cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#setAutoSizeTextTypeUniformWithConfiguration(
218cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *        TextView, int, int, int, int)}
219cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
220cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
221cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
222cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
223cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
224cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public void setAutoSizeTextTypeUniformWithConfiguration(
225cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu            int autoSizeMinTextSize,
226cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu            int autoSizeMaxTextSize,
227cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu            int autoSizeStepGranularity,
228cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu            int unit) throws IllegalArgumentException {
229e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
230e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            super.setAutoSizeTextTypeUniformWithConfiguration(
231cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu                    autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
232e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
233e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
234e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeUniformWithConfiguration(
235e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                        autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
236e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
237cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
238cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
239cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
240cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
241cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
242cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#setAutoSizeTextTypeUniformWithPresetSizes(
243cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *        TextView, int[], int)}
244cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
245cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
246cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
247cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
248cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
249cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
250cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu            throws IllegalArgumentException {
251e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
252e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            super.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
253e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
254e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
255e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
256e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
257cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
258cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
259cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
260cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
261cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
262cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#getAutoSizeTextType(TextView)}
263cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
264cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
265cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
266cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
267cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
268cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @TextViewCompat.AutoSizeTextType
269cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public int getAutoSizeTextType() {
270e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
271e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            return super.getAutoSizeTextType() == TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM
272e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                    ? TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
273e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                    : TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE;
274e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
275e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
276e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                return mTextHelper.getAutoSizeTextType();
277e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
278cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
279cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        return TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE;
280cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
281cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
282cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
283cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
284cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#getAutoSizeStepGranularity(TextView)}
285cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
286cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
287cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
288cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
289cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
290cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public int getAutoSizeStepGranularity() {
291e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
292e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            return super.getAutoSizeStepGranularity();
293e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
294e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
295e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                return mTextHelper.getAutoSizeStepGranularity();
296e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
297cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
298cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        return -1;
299cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
300cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
301cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
302cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
303cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#getAutoSizeMinTextSize(TextView)}
304cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
305cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
306cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
307cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
308cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
309cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public int getAutoSizeMinTextSize() {
310e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
311e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            return super.getAutoSizeMinTextSize();
312e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
313e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
314e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                return mTextHelper.getAutoSizeMinTextSize();
315e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
316cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
317cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        return -1;
318cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
319cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
320cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
321cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
322cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#getAutoSizeMaxTextSize(TextView)}
323cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
324cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
325cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
326cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
327cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
328cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public int getAutoSizeMaxTextSize() {
329e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
330e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            return super.getAutoSizeMaxTextSize();
331e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
332e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
333e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                return mTextHelper.getAutoSizeMaxTextSize();
334e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
335cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
336cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        return -1;
337cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
338cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu
339cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    /**
340cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * This should be accessed via
341cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * {@link android.support.v4.widget.TextViewCompat#getAutoSizeTextAvailableSizes(TextView)}
342cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     *
343cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     * @hide
344cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu     */
345cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
346cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    @Override
347cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    public int[] getAutoSizeTextAvailableSizes() {
348e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        if (BuildCompat.isAtLeastO()) {
349e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            return super.getAutoSizeTextAvailableSizes();
350e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu        } else {
351e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            if (mTextHelper != null) {
352e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu                return mTextHelper.getAutoSizeTextAvailableSizes();
353e93cedb4454a05a0ecba12ff1ba60965c5c9d8d0Andrei Stingaceanu            }
354cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        }
355cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu        return new int[0];
356cc93b432d3b66d1127b1d71cf1b95eb8a21ef319Andrei Stingaceanu    }
35789208232f3b5d1451408d787872504a190bc7ee0Chris Banes}
358