package carbon.widget;
import android.content.Context;
import android.support.v7.view.menu.MenuBuilder;
import android.support.v7.widget.LinearLayoutManager;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import carbon.CarbonContextWrapper;
import carbon.R;
public class NavigationView extends RecyclerView {
private OnItemClickedListener onItemClickedListener;
private Menu menu;
public NavigationView(Context context) {
super(context);
initNavigationView();
}
public NavigationView(Context context, AttributeSet attrs) {
super(context, attrs);
initNavigationView();
}
public NavigationView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initNavigationView();
}
private void initNavigationView() {
setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
}
public void setOnItemClickedListener(OnItemClickedListener onItemClickedListener) {
this.onItemClickedListener = onItemClickedListener;
}
protected void fireOnItemClickedEvent(View view, Object item, int position) {
if (onItemClickedListener != null)
onItemClickedListener.onItemClicked(view, item, position);
}
public void setMenu(int resId) {
Menu menu = new MenuBuilder(new CarbonContextWrapper(getContext()));
MenuInflater inflater = new MenuInflater(getContext());
inflater.inflate(resId, menu);
setMenu(menu);
}
public void setMenu(Menu menu) {
this.menu = menu;
if (getAdapter() == null) {
setAdapter(new Adapter());
}
((Adapter) getAdapter()).setItems(menu);
}
public Menu getMenu() {
return menu;
}
public class Adapter extends RecyclerView.Adapter<ViewHolder> {
private Menu items = null;
public MenuItem getItem(int position) {
return items.getItem(position);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.carbon_navigation_row, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
MenuItem item = items.getItem(position);
holder.tv.setText(item.getTitle());
holder.iv.setImageDrawable(item.getIcon());
holder.itemView.setOnClickListener(v -> fireOnItemClickedEvent(holder.itemView, item, holder.getAdapterPosition()));
}
@Override
public int getItemCount() {
return items.size();
}
public void setItems(Menu items) {
this.items = items;
notifyDataSetChanged();
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView tv;
ImageView iv;
public ViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.carbon_itemText);
iv = (ImageView) itemView.findViewById(R.id.carbon_itemIcon);
}
}
}