package com.florianmski.tracktoid.adapters.lists;
import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.florianmski.tracktoid.R;
import com.florianmski.tracktoid.TraktoidTheme;
import com.florianmski.tracktoid.adapters.RecyclerAdapter;
import java.util.ArrayList;
import java.util.List;
public class RecyclerDrawerAdapter extends RecyclerAdapter<RecyclerDrawerAdapter.DrawerItem, RecyclerAdapter.ViewHolder>
{
private final int ITEM = 0, SEPARATOR = 1, SUBHEADER = 2;
private int checkedPosition = -1;
private SparseArray<DrawerItem> items = new SparseArray<>();
private SparseArray<DrawerSeparator> separators = new SparseArray<>();
private SparseArray<DrawerSubheader> subheaders = new SparseArray<>();
public RecyclerDrawerAdapter(Context context, OnItemClickListener listener)
{
super(context, new ArrayList<RecyclerDrawerAdapter.DrawerItem>(), listener);
}
public RecyclerDrawerAdapter addItem(int id, String title, Drawable icon)
{
items.put(getItemCount(), new DrawerItem(id, title, icon.mutate()));
return this;
}
public RecyclerDrawerAdapter addItem(int id, String title, int iconResId)
{
addItem(id, title, context.getResources().getDrawable(iconResId));
return this;
}
public RecyclerDrawerAdapter addSeparator()
{
separators.put(getItemCount(), new DrawerSeparator());
return this;
}
public RecyclerDrawerAdapter addSubheader(String title)
{
subheaders.put(getItemCount(), new DrawerSubheader(title));
return this;
}
@Override
public void refresh(List<RecyclerDrawerAdapter.DrawerItem> data)
{
throw new UnsupportedOperationException();
}
@Override
public void reset()
{
items.clear();
separators.clear();
subheaders.clear();
super.reset();
}
public void setCheckedPosition(int position)
{
this.checkedPosition = position;
notifyDataSetChanged();
}
public int getCheckedPosition()
{
return checkedPosition;
}
public int getItemPosition(int id)
{
int i = 0;
for(DrawerItem item = items.valueAt(i); i < items.size() ; i++)
{
if(item.id == id)
return items.keyAt(i);
}
return -1;
}
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
RecyclerAdapter.ViewHolder vh;
switch(viewType)
{
case SEPARATOR:
default:
View v = LayoutInflater.from(context).inflate(R.layout.list_item_drawer_separator, parent, false);
vh = new SeparatorViewHolder(v);
break;
case ITEM:
v = LayoutInflater.from(context).inflate(R.layout.list_item_drawer, parent, false);
vh = new ItemViewHolder(v, listener);
break;
case SUBHEADER:
v = LayoutInflater.from(context).inflate(R.layout.list_item_drawer_subheader, parent, false);
vh = new SubheaderViewHolder(v);
break;
}
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
if(getItemViewType(position) == SEPARATOR)
{
SeparatorViewHolder castedHolder = (SeparatorViewHolder)holder;
DrawerSeparator separator = separators.get(position);
}
else if(getItemViewType(position) == ITEM)
{
boolean checked = checkedPosition == position;
ItemViewHolder castedHolder = (ItemViewHolder)holder;
DrawerItem item = items.get(position);
castedHolder.tvTitle.setText(item.title);
castedHolder.itemView.setActivated(checked);
if(checked)
{
int color = TraktoidTheme.DEFAULT.getColorDark(context);
castedHolder.tvTitle.setTextColor(color);
Drawable icon = item.icon;
icon.setColorFilter(color, PorterDuff.Mode.SRC_IN);
castedHolder.ivIcon.setImageDrawable(icon);
}
else
{
castedHolder.tvTitle.setTextColor(context.getResources().getColor(android.R.color.primary_text_dark));
item.icon.clearColorFilter();
castedHolder.ivIcon.setImageDrawable(item.icon);
}
}
else
{
SubheaderViewHolder castedHolder = (SubheaderViewHolder)holder;
DrawerSubheader subheader = subheaders.get(position);
castedHolder.tvTitle.setText(subheader.title);
}
}
@Override
public int getItemViewType(int position)
{
if(items.get(position) != null)
return ITEM;
else if(separators.get(position) != null)
return SEPARATOR;
return SUBHEADER;
}
@Override
public int getItemCount()
{
return separators.size() + items.size() + subheaders.size();
}
@Override
public DrawerItem getItem2(int position)
{
return items.get(position);
}
protected static class SeparatorViewHolder extends RecyclerAdapter.ViewHolder
{
public SeparatorViewHolder(View itemView)
{
super(itemView);
}
}
protected static class ItemViewHolder extends RecyclerAdapter.ViewHolder
{
private TextView tvTitle;
private ImageView ivIcon;
public ItemViewHolder(View itemView, OnItemClickListener listener)
{
super(itemView, listener);
tvTitle = (TextView) itemView.findViewById(R.id.textViewTitle);
ivIcon = (ImageView) itemView.findViewById(R.id.imageViewIcon);
}
}
protected static class SubheaderViewHolder extends RecyclerAdapter.ViewHolder
{
private TextView tvTitle;
public SubheaderViewHolder(View itemView)
{
super(itemView);
tvTitle = (TextView) itemView.findViewById(R.id.textViewTitle);
}
}
public class DrawerItem
{
public int id;
public String title;
public Drawable icon;
public DrawerItem(int id, String title, Drawable icon)
{
this.id = id;
this.title = title;
this.icon = icon;
}
}
protected class DrawerSeparator
{
public DrawerSeparator() {}
}
protected class DrawerSubheader
{
public String title;
public DrawerSubheader(String title)
{
this.title = title;
}
}
}