// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.widget.ImageButton;
import org.chromium.chrome.R;
/**
* Implementation of ImageButton that allows to tint the color of the image button for all
* image button states using chrome:tint attribute in XML.
*/
public class TintedImageButton extends ImageButton {
private ColorStateList mTint;
public TintedImageButton(Context context) {
super(context);
}
public TintedImageButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
public TintedImageButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs, defStyle);
}
private void init(Context context, AttributeSet attrs, int defStyle) {
TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.TintedImage, defStyle, 0);
setTintInternal(a.getColorStateList(R.styleable.TintedImage_tint));
a.recycle();
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
updateTintColor();
}
/**
* Sets the tint color for the given ImageButton for all button states.
* @param tint The set of colors to use to color the ImageButton.
*/
public void setTint(ColorStateList tint) {
if (mTint == tint) return;
setTintInternal(tint);
updateTintColor();
}
private void setTintInternal(ColorStateList tint) {
mTint = tint;
}
private void updateTintColor() {
if (mTint == null) return;
setColorFilter(mTint.getColorForState(getDrawableState(), 0), PorterDuff.Mode.SRC_IN);
}
}