1415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes/* 2415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * Copyright (C) 2014 The Android Open Source Project 3415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * 4415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * you may not use this file except in compliance with the License. 6415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * You may obtain a copy of the License at 7415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * 8415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 9415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * 10415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * Unless required by applicable law or agreed to in writing, software 11415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * See the License for the specific language governing permissions and 14415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes * limitations under the License. 15415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes */ 16415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 172cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banespackage android.support.v7.widget; 18415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 19415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banesimport android.content.Context; 202cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banesimport android.support.annotation.DrawableRes; 214c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banesimport android.support.v7.content.res.AppCompatResources; 22415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banesimport android.util.AttributeSet; 23415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banesimport android.widget.CheckedTextView; 24415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 25415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes/** 26091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * A {@link CheckedTextView} which supports compatible features on older version of the platform. 27091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * 28091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * <p>This will automatically be used when you use {@link CheckedTextView} in your layouts. 29091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * You should only need to manually use this class when writing custom views.</p> 30415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes */ 312cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banespublic class AppCompatCheckedTextView extends CheckedTextView { 32415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 33415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes private static final int[] TINT_ATTRS = { 34415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes android.R.attr.checkMark 35415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes }; 36415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 37f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes private AppCompatTextHelper mTextHelper; 38415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 392cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes public AppCompatCheckedTextView(Context context) { 40415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes this(context, null); 41415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes } 42415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 432cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes public AppCompatCheckedTextView(Context context, AttributeSet attrs) { 44fa91294114db5cfa43910d4d921fd06449192420Chris Banes this(context, attrs, android.R.attr.checkedTextViewStyle); 45415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes } 46415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 472cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes public AppCompatCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) { 48e4beadba70aecabbd7f6677943ab7c0b94809b8aChris Banes super(TintContextWrapper.wrap(context), attrs, defStyleAttr); 49415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 50f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes mTextHelper = AppCompatTextHelper.create(this); 51f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes mTextHelper.loadFromAttributes(attrs, defStyleAttr); 52f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes mTextHelper.applyCompoundDrawablesTints(); 53f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes 547e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs, 557e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes TINT_ATTRS, defStyleAttr, 0); 567e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes setCheckMarkDrawable(a.getDrawable(0)); 577e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes a.recycle(); 58415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes } 59415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 60415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes @Override 612cccf609662389d6a23dbc0711d5fb2e826e8c63Chris Banes public void setCheckMarkDrawable(@DrawableRes int resId) { 624c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banes setCheckMarkDrawable(AppCompatResources.getDrawable(getContext(), resId)); 63415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes } 64415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes 65f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes @Override 66f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes public void setTextAppearance(Context context, int resId) { 67f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes super.setTextAppearance(context, resId); 68f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes if (mTextHelper != null) { 69f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes mTextHelper.onSetTextAppearance(context, resId); 70f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes } 71f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes } 72f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes 73f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes @Override 74f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes protected void drawableStateChanged() { 75f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes super.drawableStateChanged(); 76f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes if (mTextHelper != null) { 77f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes mTextHelper.applyCompoundDrawablesTints(); 78f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes } 79f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes } 80415f740df4981ef2f5fb462a50c7cf095cc21128Chris Banes} 81