package codetail.widget;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.nineoldandroids.view.ViewHelper;
import com.nineoldandroids.view.ViewPropertyAnimator;
import codetail.animation.ViewAnimationUtils;
import codetail.components.R;
import codetail.text.RobotoTextView;
import codetail.utils.ResourceUtils;
import codetail.utils.ViewUtils;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
public class Toolbar extends FrameLayoutCompat {
ImageView mHomeButton;
RobotoTextView mTitle;
TextView mSubtitle;
View mTitleLayout;
SearchView mSearchView;
final int mActionButtonSize;
final int mActionButtonPadding;
public Toolbar(Context context) {
this(context, null);
}
public Toolbar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public Toolbar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setClipChildren(false);
LayoutInflater factory = LayoutInflater.from(context);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CodetailToolbar);
Drawable drawable = array.getDrawable(R.styleable.CodetailToolbar_buttonsSelector);
Resources r = getResources();
mActionButtonSize = r.getDimensionPixelSize(R.dimen.toolbar_action_btn_mtrl_size);
mActionButtonPadding = r.getDimensionPixelSize(R.dimen.toolbar_edges_margin);
mHomeButton = new ImageView(context);
mHomeButton.setClickable(true);
mHomeButton.setPadding(mActionButtonPadding, mActionButtonPadding, mActionButtonPadding, mActionButtonPadding);
mHomeButton.setColorFilter(array.getColor(R.styleable.CodetailToolbar_homeTintColor, Color.TRANSPARENT),
PorterDuff.Mode.SRC_ATOP);
mHomeButton.setImageDrawable(array.getDrawable(R.styleable.CodetailToolbar_homeIcon));
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(mActionButtonSize, mActionButtonSize);
mTitleLayout = factory.inflate(R.layout.acb_title_layout, this, false);
mTitle = ViewUtils.findView(mTitleLayout, R.id.action_bar_title);
mTitle.setTextAppearance(context, array.getResourceId(R.styleable.CodetailToolbar_titleAppearance,
R.style.TextAppearance_AppCompat_Medium));
mTitle.setText(array.getText(R.styleable.CodetailToolbar_titleText));
mTitle.setTextColor(array.getColor(R.styleable.CodetailToolbar_titleColor, Color.BLACK));
mTitle.setFontFamily("Roboto-Bold");
mSubtitle = ViewUtils.findView(mTitleLayout, R.id.action_bar_subtitle);
mSubtitle.setTextAppearance(context, array.getResourceId(R.styleable.CodetailToolbar_subtitleAppearance,
R.style.TextAppearance_AppCompat_Medium));
mSubtitle.setText(array.getText(R.styleable.CodetailToolbar_subtitleText));
mSubtitle.setTextColor(array.getColor(R.styleable.CodetailToolbar_subtitleColor, Color.BLACK));
mSearchView = new SearchView(context);
addView(mHomeButton, params);
params = generateLayoutParams(mTitleLayout.getLayoutParams());
params.leftMargin = ResourceUtils.getPixelSize(R.dimen.toolbar_title_layout_left);
params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
addView(mTitleLayout, params);
params = new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT);
params.gravity = Gravity.RIGHT;
addView(mSearchView, params);
if(drawable == null){
mHomeButton.setBackgroundResource(R.drawable.overlay_background);
}else{
mSearchView.setSearchButtonBackground(drawable);
ViewUtils.setBackground(mHomeButton, drawable);
}
array.recycle();
}
public void setOnTitleClickListener(OnClickListener listener) {
mTitleLayout.setOnClickListener(listener);
}
public void setDropdownIcon(Drawable dropdownIcon) {
mTitle.setCompoundDrawablePadding(ResourceUtils.dp2px(getContext(), 8));
mTitle.setCompoundDrawablesWithIntrinsicBounds(null, null, dropdownIcon, null);
}
public View getTitleLayout() {
return mTitleLayout;
}
public SearchView getSearchView() {
return mSearchView;
}
public void setTitleVisible(boolean visibility) {
ViewUtils.setVisibility(mTitle, visibility);
}
public void doCreateAnimation() {
final int height = getHeight();
ViewHelper.setTranslationY(mHomeButton, -height);
ViewHelper.setTranslationY(mTitleLayout, -height);
ViewHelper.setTranslationY(mSearchView, -height);
ViewPropertyAnimator.animate(mHomeButton)
.translationY(0)
.setDuration(ViewAnimationUtils.DEFAULT_DURATION)
.setInterpolator(ViewAnimationUtils.ACCELERATE)
.setStartDelay(120);
ViewPropertyAnimator.animate(mTitleLayout)
.translationY(0)
.setDuration(ViewAnimationUtils.DEFAULT_DURATION)
.setInterpolator(ViewAnimationUtils.ACCELERATE)
.setStartDelay(240);
ViewPropertyAnimator.animate(mSearchView)
.translationY(0)
.setDuration(ViewAnimationUtils.DEFAULT_DURATION)
.setInterpolator(ViewAnimationUtils.ACCELERATE)
.setStartDelay(360)
.start();
}
public void setTitle(CharSequence title) {
mTitle.setText(title);
}
public void setTitle(int title) {
mTitle.setText(title);
}
public void setOnNavigationClickListener(OnClickListener menuClickListener) {
mHomeButton.setOnClickListener(menuClickListener);
}
public void setNavigationIcon(Drawable drawable) {
mHomeButton.setImageDrawable(drawable);
}
public Drawable getNavigationIcon() {
return mHomeButton.getDrawable();
}
}