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