AppCompatButton.java revision ac5fe7c617c66850fff75a9fce9979c6e5674b0f
1a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes/*
2a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * Copyright (C) 2014 The Android Open Source Project
3a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes *
4a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * you may not use this file except in compliance with the License.
6a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * You may obtain a copy of the License at
7a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes *
8a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes *
10a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * Unless required by applicable law or agreed to in writing, software
11a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * See the License for the specific language governing permissions and
14a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes * limitations under the License.
15a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes */
16a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.appcompat.widget;
18a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
19ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas
21a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banesimport android.content.Context;
22a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banesimport android.content.res.ColorStateList;
23a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banesimport android.graphics.PorterDuff;
24684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banesimport android.graphics.drawable.Drawable;
25ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.DrawableRes;
26ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.NonNull;
27ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.Nullable;
28ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RequiresApi;
29ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo;
30ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.view.TintableBackgroundView;
31ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.widget.AutoSizeableTextView;
32ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.widget.TextViewCompat;
33ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.appcompat.R;
34a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banesimport android.util.AttributeSet;
352cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banesimport android.view.accessibility.AccessibilityEvent;
362cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banesimport android.view.accessibility.AccessibilityNodeInfo;
37a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banesimport android.widget.Button;
38afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanuimport android.widget.TextView;
39a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
40a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes/**
41de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * A {@link Button} which supports compatible features on older versions of the platform,
42091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * including:
43091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * <ul>
4429def828b59307ae6bfec1e5da8c44b7e651ddcfKirill Grouchnikov *     <li>Allows dynamic tint of its background via the background tint methods in
45ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas *     {@link androidx.core.view.ViewCompat}.</li>
46091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *     <li>Allows setting of the background tint using {@link R.attr#backgroundTint} and
47091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *     {@link R.attr#backgroundTintMode}.</li>
48091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * </ul>
49091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *
50de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * <p>This will automatically be used when you use {@link Button} in your layouts
51de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * and the top-level activity / dialog is provided by
52de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * <a href="{@docRoot}topic/libraries/support-library/packages.html#v7-appcompat">appcompat</a>.
53de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * You should only need to manually use this class when writing custom views.</p>
54a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes */
55afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanupublic class AppCompatButton extends Button implements TintableBackgroundView,
56afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        AutoSizeableTextView {
57a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
58091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    private final AppCompatBackgroundHelper mBackgroundTintHelper;
59091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    private final AppCompatTextHelper mTextHelper;
60a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
612cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public AppCompatButton(Context context) {
62a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes        this(context, null);
63a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes    }
64a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
652cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public AppCompatButton(Context context, AttributeSet attrs) {
662cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        this(context, attrs, R.attr.buttonStyle);
67a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes    }
68a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
692cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public AppCompatButton(Context context, AttributeSet attrs, int defStyleAttr) {
70e4beadba70aecabbd7f6677943ab7c0b94809b8aChris Banes        super(TintContextWrapper.wrap(context), attrs, defStyleAttr);
71a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
724c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banes        mBackgroundTintHelper = new AppCompatBackgroundHelper(this);
73091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
74a73cf65dff6d7fa58907e614f95e1d3679de0a79Chris Banes
75f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        mTextHelper = AppCompatTextHelper.create(this);
76091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mTextHelper.loadFromAttributes(attrs, defStyleAttr);
77f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        mTextHelper.applyCompoundDrawablesTints();
78a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    }
79a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
80684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes    @Override
81091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    public void setBackgroundResource(@DrawableRes int resId) {
82684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes        super.setBackgroundResource(resId);
83091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTintHelper != null) {
84091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mBackgroundTintHelper.onSetBackgroundResource(resId);
85091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
86684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes    }
87684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes
88684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes    @Override
89684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes    public void setBackgroundDrawable(Drawable background) {
90684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes        super.setBackgroundDrawable(background);
91091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTintHelper != null) {
92091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mBackgroundTintHelper.onSetBackgroundDrawable(background);
93091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
94684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes    }
95684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes
96a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    /**
97a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * This should be accessed via
98ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas     * {@link androidx.core.view.ViewCompat#setBackgroundTintList(android.view.View, ColorStateList)}
99a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     *
100a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * @hide
101a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     */
1028e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
103a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    @Override
104a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
105091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTintHelper != null) {
106091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mBackgroundTintHelper.setSupportBackgroundTintList(tint);
107fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes        }
108a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    }
109a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes
110a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    /**
111a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * This should be accessed via
112ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas     * {@link androidx.core.view.ViewCompat#getBackgroundTintList(android.view.View)}
113a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     *
114a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * @hide
115a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     */
1168e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
117a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    @Override
118a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    @Nullable
119a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    public ColorStateList getSupportBackgroundTintList() {
120091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        return mBackgroundTintHelper != null
121091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
122a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes    }
123a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes
124a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    /**
125a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * This should be accessed via
126ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas     * {@link androidx.core.view.ViewCompat#setBackgroundTintMode(android.view.View, PorterDuff.Mode)}
127a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     *
128a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * @hide
129a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     */
1308e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
131a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes    @Override
132a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
133091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTintHelper != null) {
134091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
135a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes        }
136a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    }
137a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes
138a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    /**
139a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * This should be accessed via
140ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas     * {@link androidx.core.view.ViewCompat#getBackgroundTintMode(android.view.View)}
141a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     *
142a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     * @hide
143a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes     */
1448e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
145a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    @Override
146a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    @Nullable
147a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    public PorterDuff.Mode getSupportBackgroundTintMode() {
148091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        return mBackgroundTintHelper != null
149091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
150a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    }
151a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes
152a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    @Override
153a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes    protected void drawableStateChanged() {
154a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes        super.drawableStateChanged();
155091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTintHelper != null) {
156091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mBackgroundTintHelper.applySupportBackgroundTint();
157684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes        }
158f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        if (mTextHelper != null) {
159f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes            mTextHelper.applyCompoundDrawablesTints();
160f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        }
161684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes    }
162684dbfaf7105761b5a19a82e8273ed79d3b0641eChris Banes
163091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    @Override
164091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    public void setTextAppearance(Context context, int resId) {
165091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        super.setTextAppearance(context, resId);
166091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mTextHelper != null) {
167091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mTextHelper.onSetTextAppearance(context, resId);
168fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes        }
169a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes    }
170a73cf65dff6d7fa58907e614f95e1d3679de0a79Chris Banes
1712cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    @Override
1722cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
1732cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        super.onInitializeAccessibilityEvent(event);
1742cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        event.setClassName(Button.class.getName());
1752cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    }
1762cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes
1778f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette    @RequiresApi(14)
1782cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    @Override
1792cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
1802cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        super.onInitializeAccessibilityNodeInfo(info);
1812cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        info.setClassName(Button.class.getName());
1822cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    }
1832cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes
184afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
185afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
186afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        super.onLayout(changed, left, top, right, bottom);
187afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        if (mTextHelper != null) {
188afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            mTextHelper.onLayout(changed, left, top, right, bottom);
189afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
190afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
191afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
192afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
193afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setTextSize(int unit, float size) {
19445a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
195afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setTextSize(unit, size);
196afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
197afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
198afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setTextSize(unit, size);
199afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
200afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
201afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
202afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
203afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
204afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
205afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        super.onTextChanged(text, start, lengthBefore, lengthAfter);
20645a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (mTextHelper != null && !PLATFORM_SUPPORTS_AUTOSIZE && mTextHelper.isAutoSizeEnabled()) {
207afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            mTextHelper.autoSizeText();
208afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
209afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
210afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
211afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
212afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
213afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
214afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
215afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
216afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setAutoSizeTextTypeWithDefaults(
217afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            @TextViewCompat.AutoSizeTextType int autoSizeTextType) {
21845a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
219afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setAutoSizeTextTypeWithDefaults(autoSizeTextType);
220afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
221afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
222afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeWithDefaults(autoSizeTextType);
223afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
224afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
225afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
226afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
227afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
228afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
229afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
230afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
231afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
232afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setAutoSizeTextTypeUniformWithConfiguration(
233afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int autoSizeMinTextSize,
234afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int autoSizeMaxTextSize,
235afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int autoSizeStepGranularity,
236afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int unit) throws IllegalArgumentException {
23745a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
238afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setAutoSizeTextTypeUniformWithConfiguration(
239afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                    autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
240afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
241afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
242afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeUniformWithConfiguration(
243afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                        autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
244afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
245afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
246afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
247afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
248afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
249afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
250afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
251afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
252afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
253afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
254afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            throws IllegalArgumentException {
25545a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
256afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
257afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
258afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
259afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
260afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
261afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
262afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
263afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
264afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
265afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
266afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
267afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
268afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
269afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @TextViewCompat.AutoSizeTextType
270afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeTextType() {
27145a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
272afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeTextType() == TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM
273afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                    ? TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
274afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                    : TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE;
275afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
276afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
277afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeTextType();
278afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
279afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
280afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE;
281afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
282afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
283afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
284afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
285afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
286afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
287afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
288afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeStepGranularity() {
28945a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
290afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeStepGranularity();
291afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
292afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
293afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeStepGranularity();
294afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
295afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
296afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return -1;
297afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
298afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
299afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
300afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
301afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
302afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
303afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
304afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeMinTextSize() {
30545a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
306afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeMinTextSize();
307afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
308afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
309afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeMinTextSize();
310afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
311afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
312afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return -1;
313afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
314afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
315afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
316afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
317afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
318afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
319afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
320afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeMaxTextSize() {
32145a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
322afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeMaxTextSize();
323afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
324afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
325afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeMaxTextSize();
326afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
327afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
328afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return -1;
329afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
330afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
331afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
332afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
333afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
334afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
335afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
336afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int[] getAutoSizeTextAvailableSizes() {
33745a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
338afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeTextAvailableSizes();
339afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
340afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
341afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeTextAvailableSizes();
342afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
343afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
344afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return new int[0];
345afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
346afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
347091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    /**
348091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * Sets the properties of this field to transform input to ALL CAPS
349091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * display. This may use a "small caps" formatting if available.
350091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * This setting will be ignored if this field is editable or selectable.
351091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     *
352091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * This call replaces the current transformation method. Disabling this
353091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * will not necessarily restore the previous behavior from before this
354091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * was enabled.
355091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     */
356091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    public void setSupportAllCaps(boolean allCaps) {
357091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mTextHelper != null) {
358091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mTextHelper.setAllCaps(allCaps);
3592cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        }
3602cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    }
361a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes}
362