AppCompatEditText.java revision a5f106fbd09335ae504c39b1ee1e0caa3f1238e3
1469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes/* 2469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * Copyright (C) 2014 The Android Open Source Project 3469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * 4469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * you may not use this file except in compliance with the License. 6469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * You may obtain a copy of the License at 7469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * 8469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 9469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * 10469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * Unless required by applicable law or agreed to in writing, software 11469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * See the License for the specific language governing permissions and 14469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * limitations under the License. 15469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes */ 16469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 17469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banespackage android.support.v7.internal.widget; 18469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 19469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banesimport android.content.Context; 20a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banesimport android.content.res.ColorStateList; 21a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banesimport android.graphics.PorterDuff; 22a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banesimport android.support.annotation.Nullable; 23a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banesimport android.support.v4.view.TintableBackgroundView; 24469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banesimport android.util.AttributeSet; 25469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banesimport android.widget.EditText; 26469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 27469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes/** 28469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes * An tint aware {@link android.widget.EditText}. 29fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes * <p> 30fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes * This will automatically be used when you use {@link android.widget.EditText} in your 31fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes * layouts. You should only need to manually use this class when writing custom views. 32469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes */ 33a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banespublic class TintEditText extends EditText implements TintableBackgroundView { 34469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 35469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes private static final int[] TINT_ATTRS = { 36469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes android.R.attr.background 37469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes }; 38469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 39a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes private TintInfo mBackgroundTint; 40a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 41469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes public TintEditText(Context context) { 42469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes this(context, null); 43469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes } 44469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 45469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes public TintEditText(Context context, AttributeSet attrs) { 46469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes this(context, attrs, android.R.attr.editTextStyle); 47469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes } 48469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 49469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes public TintEditText(Context context, AttributeSet attrs, int defStyleAttr) { 50469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes super(context, attrs, defStyleAttr); 51469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes 52fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes if (TintManager.SHOULD_BE_USED) { 53fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs, 54fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes TINT_ATTRS, defStyleAttr, 0); 55fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes if (a.hasValue(0)) { 56a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes setSupportBackgroundTintList( 57a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes a.getTintManager().getColorStateList(a.getResourceId(0, -1))); 58fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes } 59fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes a.recycle(); 60fd1eb27a3700de31507de34fd1bcc51830fe876cChris Banes } 61469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes } 62a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 63a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes /** 64a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * This should be accessed via 65a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * {@link android.support.v4.view.ViewCompat#setBackgroundTintList(android.view.View, 66a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * android.content.res.ColorStateList)} 67a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * 68a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * @hide 69a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes */ 70a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Override 71a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes public void setSupportBackgroundTintList(@Nullable ColorStateList tint) { 72a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes if (mBackgroundTint == null) { 73a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes mBackgroundTint = new TintInfo(); 74a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 75a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes mBackgroundTint.mTintList = tint; 76a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes applySupportBackgroundTint(); 77a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 78a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 79a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes /** 80a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * This should be accessed via 81a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * {@link android.support.v4.view.ViewCompat#getBackgroundTintList(android.view.View)} 82a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * 83a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * @hide 84a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes */ 85a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Override 86a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Nullable 87a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes public ColorStateList getSupportBackgroundTintList() { 88a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes return mBackgroundTint != null ? mBackgroundTint.mTintList : null; 89a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 90a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 91a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes /** 92a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * This should be accessed via 93a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * {@link android.support.v4.view.ViewCompat#setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode)} 94a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * 95a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * @hide 96a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes */ 97a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Override 98a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) { 99a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes if (mBackgroundTint == null) { 100a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes mBackgroundTint = new TintInfo(); 101a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 102a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes mBackgroundTint.mTintMode = tintMode; 103a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes applySupportBackgroundTint(); 104a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 105a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 106a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes /** 107a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * This should be accessed via 108a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * {@link android.support.v4.view.ViewCompat#getBackgroundTintMode(android.view.View)} 109a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * 110a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes * @hide 111a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes */ 112a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Override 113a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Nullable 114a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes public PorterDuff.Mode getSupportBackgroundTintMode() { 115a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes return mBackgroundTint != null ? mBackgroundTint.mTintMode : null; 116a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 117a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 118a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes @Override 119a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes protected void drawableStateChanged() { 120a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes super.drawableStateChanged(); 121a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes applySupportBackgroundTint(); 122a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 123a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes 124a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes private void applySupportBackgroundTint() { 125a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes if (getBackground() != null && mBackgroundTint != null) { 126a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes TintManager.tintViewBackground(this, mBackgroundTint); 127a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 128a5f106fbd09335ae504c39b1ee1e0caa3f1238e3Chris Banes } 129469286122bcbbecbdd0bef74fb50f9d8920e77b9Chris Banes} 130