1091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes/*
2091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * Copyright (C) 2015 The Android Open Source Project
3091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *
4091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * you may not use this file except in compliance with the License.
6091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * You may obtain a copy of the License at
7091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *
8091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes *
10091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * Unless required by applicable law or agreed to in writing, software
11091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * See the License for the specific language governing permissions and
14091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes * limitations under the License.
15091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes */
16091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
17091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banespackage android.support.v7.widget;
18091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
19091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.content.res.ColorStateList;
20091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.graphics.PorterDuff;
21091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.graphics.drawable.Drawable;
22483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banesimport android.os.Build;
23483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banesimport android.support.annotation.NonNull;
24091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.support.v4.view.ViewCompat;
25091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.support.v7.appcompat.R;
26091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.util.AttributeSet;
27091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesimport android.view.View;
28091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
29091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banesclass AppCompatBackgroundHelper {
30091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
31091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    private final View mView;
327e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes    private final AppCompatDrawableManager mDrawableManager;
33091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
34c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    private int mBackgroundResId = -1;
35c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
36c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    private BackgroundTintInfo mInternalBackgroundTint;
37c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    private BackgroundTintInfo mBackgroundTint;
38c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    private BackgroundTintInfo mTmpInfo;
39091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
404c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banes    AppCompatBackgroundHelper(View view) {
41091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mView = view;
424c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banes        mDrawableManager = AppCompatDrawableManager.get();
43091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
44091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
45091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
469d5f84f33353a42e837c6b465412d1a6f2fc6eaaChris Banes        TintTypedArray a = TintTypedArray.obtainStyledAttributes(mView.getContext(), attrs,
47091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                R.styleable.ViewBackgroundHelper, defStyleAttr, 0);
48091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        try {
49091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            if (a.hasValue(R.styleable.ViewBackgroundHelper_android_background)) {
50c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                mBackgroundResId = a.getResourceId(
51c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                        R.styleable.ViewBackgroundHelper_android_background, -1);
52c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                ColorStateList tint = mDrawableManager
53c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                        .getTintList(mView.getContext(), mBackgroundResId);
54091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                if (tint != null) {
55091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                    setInternalBackgroundTint(tint);
56091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                }
57091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            }
58091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            if (a.hasValue(R.styleable.ViewBackgroundHelper_backgroundTint)) {
59091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                ViewCompat.setBackgroundTintList(mView,
60091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                        a.getColorStateList(R.styleable.ViewBackgroundHelper_backgroundTint));
61091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            }
62091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            if (a.hasValue(R.styleable.ViewBackgroundHelper_backgroundTintMode)) {
63091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                ViewCompat.setBackgroundTintMode(mView,
64091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                        DrawableUtils.parseTintMode(
65091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                                a.getInt(R.styleable.ViewBackgroundHelper_backgroundTintMode, -1),
66091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes                                null));
67091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            }
68091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        } finally {
69091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            a.recycle();
70091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
71091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
72091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
73091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void onSetBackgroundResource(int resId) {
74c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        mBackgroundResId = resId;
75091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        // Update the default background tint
767e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes        setInternalBackgroundTint(mDrawableManager != null
777e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes                ? mDrawableManager.getTintList(mView.getContext(), resId)
787e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes                : null);
79c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
80c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        if (updateBackgroundTint()) {
81c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            applySupportBackgroundTint();
82c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        }
83091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
84091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
85091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void onSetBackgroundDrawable(Drawable background) {
86c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        mBackgroundResId = -1;
87091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        // We don't know that this drawable is, so we need to clear the default background tint
88091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        setInternalBackgroundTint(null);
89c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
90c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        if (updateBackgroundTint()) {
91c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            applySupportBackgroundTint();
92c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        }
93091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
94091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
95091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void setSupportBackgroundTintList(ColorStateList tint) {
96091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTint == null) {
97c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            mBackgroundTint = new BackgroundTintInfo();
98091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
99c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
100c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        // Store the original tint and null out the applicable tint. updateBackgroundTint() will
101c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        // set mTintList to the tint to actually use
102c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        mBackgroundTint.mOriginalTintList = tint;
103c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        mBackgroundTint.mTintList = null;
104091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mBackgroundTint.mHasTintList = true;
105091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
106c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        if (updateBackgroundTint()) {
107c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            applySupportBackgroundTint();
108c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        }
109c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    }
110c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
111c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    /**
112c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes     * Updates the background tint state
113c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes     * @return true if the state was changed and requires an apply
114c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes     */
115c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    private boolean updateBackgroundTint() {
116c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        if (mBackgroundTint != null && mBackgroundTint.mHasTintList) {
117c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            if (mBackgroundResId >= 0) {
118c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                // If we have a background resource id, lets see if we need to modify the tint
119c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                // list to add any touch highlights in (for example, Button needs this)
120c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                final ColorStateList updated = mDrawableManager.getTintList(
121c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                        mView.getContext(), mBackgroundResId, mBackgroundTint.mOriginalTintList);
122c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                if (updated != null) {
123c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                    mBackgroundTint.mTintList = updated;
124c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                    return true;
125c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                }
126c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            }
127c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            // If we reach here then we should just be using the original tint list. Check if we
128c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            // need to set and apply
129c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            if (mBackgroundTint.mTintList != mBackgroundTint.mOriginalTintList) {
130c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                mBackgroundTint.mTintList = mBackgroundTint.mOriginalTintList;
131c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                return true;
132c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            }
133c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        }
134c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        return false;
135091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
136091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
137091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    ColorStateList getSupportBackgroundTintList() {
138091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        return mBackgroundTint != null ? mBackgroundTint.mTintList : null;
139091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
140091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
141091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void setSupportBackgroundTintMode(PorterDuff.Mode tintMode) {
142091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (mBackgroundTint == null) {
143c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            mBackgroundTint = new BackgroundTintInfo();
144091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
145091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mBackgroundTint.mTintMode = tintMode;
146091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        mBackgroundTint.mHasTintMode = true;
147091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
148091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        applySupportBackgroundTint();
149091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
150091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
151091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    PorterDuff.Mode getSupportBackgroundTintMode() {
152091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        return mBackgroundTint != null ? mBackgroundTint.mTintMode : null;
153091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
154091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
155091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void applySupportBackgroundTint() {
156f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        final Drawable background = mView.getBackground();
157f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes        if (background != null) {
158779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes            if (Build.VERSION.SDK_INT == 21 && applyFrameworkTintUsingColorFilter(background)) {
159779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                // GradientDrawable doesn't implement setTintList on API 21, and since there is
160779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                // no nice way to unwrap DrawableContainers we have to blanket apply this
161779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                // on API 21. This needs to be called before the internal tints below so it takes
162779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                // effect on any widgets using the compat tint on API 21 (EditText)
163779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                return;
164779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes            }
165779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes
166091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            if (mBackgroundTint != null) {
167779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                AppCompatDrawableManager.tintDrawable(background, mBackgroundTint,
168779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes                        mView.getDrawableState());
169091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            } else if (mInternalBackgroundTint != null) {
1707e4e8b664820f773bc96e37ee1d2bbf500d64e69Chris Banes                AppCompatDrawableManager.tintDrawable(background, mInternalBackgroundTint,
171f7b73431b366b76bcf58536b7b1086489e4683b2Chris Banes                        mView.getDrawableState());
172091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            }
173091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
174091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
175091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes
176091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    void setInternalBackgroundTint(ColorStateList tint) {
177091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        if (tint != null) {
178091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            if (mInternalBackgroundTint == null) {
179c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes                mInternalBackgroundTint = new BackgroundTintInfo();
180091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            }
181091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mInternalBackgroundTint.mTintList = tint;
182091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mInternalBackgroundTint.mHasTintList = true;
183091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        } else {
184091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes            mInternalBackgroundTint = null;
185091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        }
186091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes        applySupportBackgroundTint();
187091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes    }
188483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes
189779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes    /**
190779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes     * Applies the framework background tint to a view, but using the compat method (ColorFilter)
191779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes     *
192779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes     * @return true if a tint was applied
193779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes     */
194779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes    private boolean applyFrameworkTintUsingColorFilter(@NonNull Drawable background) {
195483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        if (mTmpInfo == null) {
196c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            mTmpInfo = new BackgroundTintInfo();
197483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        }
198483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        final TintInfo info = mTmpInfo;
199483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        info.clear();
200483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes
201483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        final ColorStateList tintList = ViewCompat.getBackgroundTintList(mView);
202483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        if (tintList != null) {
203483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes            info.mHasTintList = true;
204483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes            info.mTintList = tintList;
205483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        }
206483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        final PorterDuff.Mode mode = ViewCompat.getBackgroundTintMode(mView);
207483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        if (mode != null) {
208483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes            info.mHasTintMode = true;
209483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes            info.mTintMode = mode;
210483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        }
211483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes
212483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        if (info.mHasTintList || info.mHasTintMode) {
213483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes            AppCompatDrawableManager.tintDrawable(background, info, mView.getDrawableState());
214779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes            return true;
215483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes        }
216779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes
217779bf4e0187ccc8601fbe9d37a5c0079a534733fChris Banes        return false;
218483ee34ae7ef0cac94d60cbe32a945dae4cb2b21Chris Banes    }
219c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
220c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    private static class BackgroundTintInfo extends TintInfo {
221c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        // The original tint list given to the call. We need this distinction because create a
222c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        // modified for actual tinting purposes
223c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        public ColorStateList mOriginalTintList;
224c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes
2252c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas        BackgroundTintInfo() {
2262c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas        }
2272c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas
228c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        @Override
229c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        void clear() {
230c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            super.clear();
231c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes            mOriginalTintList = null;
232c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes        }
233c3fa0c344f27c192cf69c5f608d5dc7073a4dfb8Chris Banes    }
234091b0f935e68ce9bfecc2422e60eada33fa3b09cChris Banes}
235