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;
253de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport android.util.AttributeSet;
263de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport android.view.accessibility.AccessibilityEvent;
273de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport android.view.accessibility.AccessibilityNodeInfo;
283de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport android.widget.Button;
293de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport android.widget.TextView;
303de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikas
31ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.DrawableRes;
32ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.NonNull;
33ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.Nullable;
34ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo;
353de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport androidx.appcompat.R;
36ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.view.TintableBackgroundView;
37ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.widget.AutoSizeableTextView;
38ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.widget.TextViewCompat;
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
75746219c9e09bc6f0a9a3e9faa720cee2db7a0049Jake Wharton        mTextHelper = new AppCompatTextHelper(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
1772cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    @Override
1782cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
1792cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        super.onInitializeAccessibilityNodeInfo(info);
1802cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        info.setClassName(Button.class.getName());
1812cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    }
1822cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes
183afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
184afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
185afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        super.onLayout(changed, left, top, right, bottom);
186afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        if (mTextHelper != null) {
187afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            mTextHelper.onLayout(changed, left, top, right, bottom);
188afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
189afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
190afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
191afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
192afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setTextSize(int unit, float size) {
19345a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
194afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setTextSize(unit, size);
195afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
196afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
197afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setTextSize(unit, size);
198afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
199afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
200afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
201afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
202afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
203afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
204afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        super.onTextChanged(text, start, lengthBefore, lengthAfter);
20545a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (mTextHelper != null && !PLATFORM_SUPPORTS_AUTOSIZE && mTextHelper.isAutoSizeEnabled()) {
206afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            mTextHelper.autoSizeText();
207afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
208afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
209afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
210afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
211afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
212afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
213afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
214afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
215afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setAutoSizeTextTypeWithDefaults(
216afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            @TextViewCompat.AutoSizeTextType int autoSizeTextType) {
21745a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
218afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setAutoSizeTextTypeWithDefaults(autoSizeTextType);
219afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
220afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
221afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeWithDefaults(autoSizeTextType);
222afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
223afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
224afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
225afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
226afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
227afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
228afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
229afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
230afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
231afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setAutoSizeTextTypeUniformWithConfiguration(
232afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int autoSizeMinTextSize,
233afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int autoSizeMaxTextSize,
234afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int autoSizeStepGranularity,
235afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            int unit) throws IllegalArgumentException {
23645a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
237afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setAutoSizeTextTypeUniformWithConfiguration(
238afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                    autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
239afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
240afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
241afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeUniformWithConfiguration(
242afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                        autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
243afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
244afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
245afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
246afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
247afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
248afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
249afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
250afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
251afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
252afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
253afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            throws IllegalArgumentException {
25445a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
255afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            super.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
256afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
257afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
258afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                mTextHelper.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
259afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
260afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
261afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
262afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
263afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
264afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
265afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
266afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
267afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
268afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @TextViewCompat.AutoSizeTextType
269afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeTextType() {
27045a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
271afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeTextType() == TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM
272afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                    ? TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
273afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                    : TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE;
274afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
275afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
276afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeTextType();
277afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
278afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
279afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE;
280afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
281afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
282afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
283afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
284afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
285afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
286afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
287afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeStepGranularity() {
28845a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
289afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeStepGranularity();
290afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
291afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
292afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeStepGranularity();
293afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
294afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
295afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return -1;
296afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
297afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
298afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
299afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
300afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
301afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
302afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
303afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeMinTextSize() {
30445a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
305afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeMinTextSize();
306afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
307afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
308afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeMinTextSize();
309afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
310afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
311afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return -1;
312afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
313afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
314afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
315afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
316afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
317afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
318afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
319afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int getAutoSizeMaxTextSize() {
32045a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
321afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeMaxTextSize();
322afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
323afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
324afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeMaxTextSize();
325afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
326afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
327afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return -1;
328afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
329afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
330afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    /**
331afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     * @hide
332afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu     */
333afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @RestrictTo(LIBRARY_GROUP)
334afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    @Override
335afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    public int[] getAutoSizeTextAvailableSizes() {
33645a0c35cb933b2b46e3eba94c5aaca51f7b7feffAndrei Stingaceanu        if (PLATFORM_SUPPORTS_AUTOSIZE) {
337afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            return super.getAutoSizeTextAvailableSizes();
338afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        } else {
339afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            if (mTextHelper != null) {
340afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu                return mTextHelper.getAutoSizeTextAvailableSizes();
341afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu            }
342afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        }
343afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu        return new int[0];
344afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu    }
345afa3ba7dc20d194934eb17a5151fe41f42bfc309Andrei Stingaceanu
346091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    /**
347091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * Sets the properties of this field to transform input to ALL CAPS
348091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * display. This may use a "small caps" formatting if available.
349091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * This setting will be ignored if this field is editable or selectable.
350091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     *
351091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * This call replaces the current transformation method. Disabling this
352091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * will not necessarily restore the previous behavior from before this
353091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     * was enabled.
354091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes     */
355091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    public void setSupportAllCaps(boolean allCaps) {
356091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mTextHelper != null) {
357091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mTextHelper.setAllCaps(allCaps);
3582cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes        }
3592cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes    }
360a9585dae398a69dd67797e7ca86f44ffcabd9e86Chris Banes}
361