package net.xpece.material.navigationdrawer.descriptors;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.AttrRes;
import android.support.annotation.ColorRes;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.view.View;
import android.widget.TextView;
import net.xpece.material.navigationdrawer.R;
import net.xpece.material.navigationdrawer.internal.Utils;
import net.xpece.material.navigationdrawer.internal.ViewHolder;
/**
* Created by pechanecjr on 14. 12. 2014.
*/
public class SimpleNavigationItemDescriptor extends BaseNavigationItemDescriptor {
/** Badge label. */
private String badge = null;
@StringRes
private int badgeId = 0;
/** Background color of badge. Text color is calculated automatically. */
int badgeColor = 0xff000000;
@ColorRes
int badgeColorId = android.R.color.black;
@AttrRes
int badgeColorAttr = android.R.attr.colorForeground;
public SimpleNavigationItemDescriptor(int id) {
super(id);
}
public SimpleNavigationItemDescriptor badge(String badge) {
this.badge = badge;
this.badgeId = 0;
return this;
}
public SimpleNavigationItemDescriptor badge(@StringRes int badge) {
this.badgeId = badge;
this.badge = null;
return this;
}
public String getBadge(Context context) {
if (badgeId != 0) {
return context.getString(badgeId);
} else {
return badge;
}
}
public SimpleNavigationItemDescriptor badgeColor(int color) {
this.badgeColor = color;
this.badgeColorId = 0;
this.badgeColorAttr = 0;
return this;
}
public SimpleNavigationItemDescriptor badgeColorResource(@ColorRes int color) {
this.badgeColorId = color;
this.badgeColorAttr = 0;
this.badgeColor = 0;
return this;
}
public SimpleNavigationItemDescriptor badgeColorAttribute(@AttrRes int color) {
this.badgeColorAttr = color;
this.badgeColorId = 0;
this.badgeColor = 0;
return this;
}
public int getBadgeColor(Context context) {
if (badgeColorAttr != 0) {
return Utils.getColor(context, badgeColorAttr, 0xff000000);
} else if (badgeColorId != 0) {
return context.getResources().getColor(badgeColorId);
} else {
return badgeColor;
}
}
@Override
public SimpleNavigationItemDescriptor sticky() {
return (SimpleNavigationItemDescriptor) super.sticky();
}
@Override
public SimpleNavigationItemDescriptor notSticky() {
return (SimpleNavigationItemDescriptor) super.notSticky();
}
@Override
public SimpleNavigationItemDescriptor iconResource(@DrawableRes int icon) {
return (SimpleNavigationItemDescriptor) super.iconResource(icon);
}
@Override
public SimpleNavigationItemDescriptor iconColorAlwaysPassiveOff() {
return (SimpleNavigationItemDescriptor) super.iconColorAlwaysPassiveOff();
}
@Override
public SimpleNavigationItemDescriptor iconColorAlwaysPassiveOn() {
return (SimpleNavigationItemDescriptor) super.iconColorAlwaysPassiveOn();
}
@Override
public SimpleNavigationItemDescriptor text(String text) {
return (SimpleNavigationItemDescriptor) super.text(text);
}
@Override
public SimpleNavigationItemDescriptor text(@StringRes int text) {
return (SimpleNavigationItemDescriptor) super.text(text);
}
@Override
public SimpleNavigationItemDescriptor activeColor(int color) {
return (SimpleNavigationItemDescriptor) super.activeColor(color);
}
@Override
public SimpleNavigationItemDescriptor activeColorResource(@ColorRes int color) {
return (SimpleNavigationItemDescriptor) super.activeColorResource(color);
}
@Override
public SimpleNavigationItemDescriptor activeColorAttribute(@AttrRes int color) {
return (SimpleNavigationItemDescriptor) super.activeColorAttribute(color);
}
@Override
public SimpleNavigationItemDescriptor passiveColor(int color) {
return (SimpleNavigationItemDescriptor) super.passiveColor(color);
}
@Override
public SimpleNavigationItemDescriptor passiveColorResource(@ColorRes int color) {
return (SimpleNavigationItemDescriptor) super.passiveColorResource(color);
}
@Override
public SimpleNavigationItemDescriptor passiveColorAttribute(@AttrRes int color) {
return (SimpleNavigationItemDescriptor) super.passiveColorAttribute(color);
}
@Override
public SimpleNavigationItemDescriptor enable() {
return (SimpleNavigationItemDescriptor) super.enable();
}
@Override
public SimpleNavigationItemDescriptor disable() {
return (SimpleNavigationItemDescriptor) super.disable();
}
@Override
public SimpleNavigationItemDescriptor activatedBackground(Drawable drawable) {
return (SimpleNavigationItemDescriptor) super.activatedBackground(drawable);
}
@Override
public SimpleNavigationItemDescriptor activatedBackgroundResource(@ColorRes int drawable) {
return (SimpleNavigationItemDescriptor) super.activatedBackgroundResource(drawable);
}
@Override
public SimpleNavigationItemDescriptor activatedBackgroundAttribute(@AttrRes int drawable) {
return (SimpleNavigationItemDescriptor) super.activatedBackgroundAttribute(drawable);
}
@Override
public SimpleNavigationItemDescriptor clearActivatedBackground() {
return (SimpleNavigationItemDescriptor) super.clearActivatedBackground();
}
@Override
public int getLayoutId() {
return R.layout.mnd_item_simple;
}
@Override
public void bindView(View view, boolean selected) {
super.bindView(view, selected);
Context context = view.getContext();
TextView badge = ViewHolder.get(view, R.id.badge);
int badgeColor = getBadgeColor(context);
String badgeString = getBadge(context);
if (badgeString != null) {
badge.setText(badgeString);
if (badgeColor == 0) {
badge.setBackgroundColor(0);
badge.setTextAppearance(context, R.style.TextAppearance_MaterialNavigationDrawer_Badge_NoBackground);
// int textColorPrimary = Utils.getColor(context, android.R.attr.textColorPrimary, 0xde000000);
// int textColorSecondary = Utils.getColor(context, android.R.attr.textColorSecondary, 0x89000000);
// ColorStateList badgeTextColor = Utils.createActivatedColor(textColorSecondary, textColorPrimary);
// badge.setTextColor(badgeTextColor);
int textColor;
if (selected) {
textColor = Utils.getColor(context, android.R.attr.textColorPrimary, 0xde000000);
} else {
textColor = Utils.getColor(context, android.R.attr.textColorSecondary, 0x89000000);
}
badge.setTextColor(textColor);
} else {
Utils.setBackground(badge, Utils.createRoundRect(context, badgeColor, 1));
badge.setTextAppearance(context, R.style.TextAppearance_MaterialNavigationDrawer_Badge);
badge.setTextColor(Utils.computeTextColor(context, badgeColor));
}
badge.setVisibility(View.VISIBLE);
} else {
badge.setVisibility(View.GONE);
}
}
@Override
public String toString() {
return "SimpleNavigationItemDescriptor{" +
"id=" + id +
"sticky=" + sticky +
'}';
}
}