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