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