package com.simplecity.amp_library.ui.adapters;
import android.graphics.LightingColorFilter;
import android.graphics.PorterDuff;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.simplecity.amp_library.R;
import com.simplecity.amp_library.interfaces.DrawerListCallbacks;
import com.simplecity.amp_library.model.DrawerGroupItem;
import com.simplecity.amp_library.model.Playlist;
import com.simplecity.amp_library.ui.views.AnimatedExpandableListView;
import com.simplecity.amp_library.utils.ColorUtils;
import com.simplecity.amp_library.utils.DrawableUtils;
import com.simplecity.amp_library.utils.ShuttleUtils;
import com.simplecity.amp_library.utils.ThemeUtils;
import com.simplecity.amp_library.utils.TypefaceManager;
import java.util.ArrayList;
import java.util.List;
public class NavigationDrawerAdapter extends AnimatedExpandableListView.AnimatedExpandableListAdapter {
private static final String TAG = "NavigationDrawerAdapter";
List<DrawerGroupItem> mDrawerGroupItems = new ArrayList<>();
DrawerListCallbacks mDrawerListCallbacks;
private DrawerGroupItem mSelectedDrawerGroupItem;
private Playlist mSelectedPlaylist;
public NavigationDrawerAdapter() {
DrawerGroupItem library = new DrawerGroupItem(DrawerGroupItem.Type.LIBRARY, R.string.library_title, R.drawable.ic_library_white);
DrawerGroupItem folders = new DrawerGroupItem(DrawerGroupItem.Type.FOLDERS, R.string.folders_title, R.drawable.ic_folders_many_white);
DrawerGroupItem playlists = new DrawerGroupItem(DrawerGroupItem.Type.PLAYLISTS, R.string.playlists_title, R.drawable.ic_action_toggle_queue);
DrawerGroupItem settings = new DrawerGroupItem(DrawerGroupItem.Type.SETTINGS, R.string.settings, R.drawable.ic_action_settings);
DrawerGroupItem support = new DrawerGroupItem(DrawerGroupItem.Type.SUPPORT, R.string.pref_title_support, R.drawable.ic_settings_help);
DrawerGroupItem divider = new DrawerGroupItem(DrawerGroupItem.Type.DIVIDER, -1, -1);
mDrawerGroupItems.add(library);
mDrawerGroupItems.add(folders);
mDrawerGroupItems.add(playlists);
mDrawerGroupItems.add(divider);
mDrawerGroupItems.add(settings);
mDrawerGroupItems.add(support);
mSelectedDrawerGroupItem = library;
}
public void setListCallbacks(DrawerListCallbacks drawerListCallbacks) {
mDrawerListCallbacks = drawerListCallbacks;
}
public void setPlaylistData(List<Playlist> playlists) {
for (DrawerGroupItem groupItem : mDrawerGroupItems) {
if (groupItem.type == DrawerGroupItem.Type.PLAYLISTS) {
groupItem.children.clear();
groupItem.addChildren(playlists);
break;
}
}
notifyDataSetChanged();
}
public void setSelectedItem(DrawerGroupItem drawerGroupItem, Playlist playlist) {
mSelectedDrawerGroupItem = drawerGroupItem;
mSelectedPlaylist = playlist;
notifyDataSetChanged();
}
public void clearPlaylistData() {
for (DrawerGroupItem groupItem : mDrawerGroupItems) {
if (groupItem.type == DrawerGroupItem.Type.PLAYLISTS) {
groupItem.children.clear();
break;
}
}
notifyDataSetChanged();
}
@Override
public int getGroupCount() {
return mDrawerGroupItems.size();
}
@Override
public DrawerGroupItem getGroup(int groupPosition) {
return mDrawerGroupItems.get(groupPosition);
}
@Override
public Playlist getChild(int groupPosition, int childPosition) {
return mDrawerGroupItems.get(groupPosition).children.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
final GroupViewHolder viewHolder;
DrawerGroupItem groupItem = getGroup(groupPosition);
if (groupItem.type == DrawerGroupItem.Type.DIVIDER) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_drawer_divider, parent, false);
} else {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_drawer, parent, false);
viewHolder = new GroupViewHolder(convertView);
viewHolder.position = groupPosition;
convertView.setClickable(groupItem.getChildCount() == 0);
int imageResourceId = isExpanded ? R.drawable.ic_arrow_up : R.drawable.ic_arrow_down;
viewHolder.expandableIcon.setImageDrawable(parent.getResources().getDrawable(imageResourceId));
viewHolder.expandableIcon.setVisibility(groupItem.getChildCount() == 0 ? View.GONE : View.VISIBLE);
if (groupItem.iconResId != -1) {
viewHolder.icon.setImageDrawable(DrawableUtils.themeLightOrDark(parent.getContext(), parent.getResources().getDrawable(groupItem.iconResId)));
viewHolder.icon.setVisibility(View.VISIBLE);
} else {
viewHolder.icon.setVisibility(View.GONE);
}
viewHolder.lineOne.setText(parent.getResources().getString(groupItem.titleResId));
viewHolder.lineOne.setTypeface(TypefaceManager.getInstance().getTypeface(TypefaceManager.SANS_SERIF_MEDIUM));
if (mSelectedDrawerGroupItem != null && groupItem.type == mSelectedDrawerGroupItem.type) {
viewHolder.itemView.setActivated(true);
if (ColorUtils.isPrimaryColorLowContrast(parent.getContext())) {
viewHolder.lineOne.setTextColor(ColorUtils.getAccentColor());
viewHolder.icon.setColorFilter(ColorUtils.getAccentColor(), PorterDuff.Mode.MULTIPLY);
} else {
viewHolder.lineOne.setTextColor(ColorUtils.getPrimaryColor());
viewHolder.icon.setColorFilter(ColorUtils.getPrimaryColor(), PorterDuff.Mode.MULTIPLY);
}
} else {
viewHolder.itemView.setActivated(false);
viewHolder.lineOne.setTextColor(ColorUtils.getTextColorPrimary());
viewHolder.icon.setColorFilter(new LightingColorFilter(ThemeUtils.getBaseColor(parent.getContext()), 0));
viewHolder.icon.setAlpha(0.6f);
}
if (groupItem.type == DrawerGroupItem.Type.FOLDERS && !ShuttleUtils.isUpgraded()) {
viewHolder.itemView.setAlpha(0.4f);
} else {
viewHolder.itemView.setAlpha(1.0f);
}
if (groupItem.type == DrawerGroupItem.Type.PLAYLISTS) {
viewHolder.itemView.setAlpha(groupItem.children.isEmpty() ? 0.4f : 1.0f);
viewHolder.itemView.setEnabled(!groupItem.children.isEmpty());
}
}
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@Override
public View getRealChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final ChildViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_drawer, parent, false);
viewHolder = new ChildViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ChildViewHolder) convertView.getTag();
}
DrawerGroupItem groupItem = getGroup(groupPosition);
Playlist playlist = groupItem.children.get(childPosition);
if (playlist != null && mSelectedPlaylist != null) {
if (playlist.name.equals(mSelectedPlaylist.name)) {
if (ColorUtils.isPrimaryColorLowContrast(parent.getContext())) {
viewHolder.lineOne.setTextColor(ColorUtils.getAccentColor());
} else {
viewHolder.lineOne.setTextColor(ColorUtils.getPrimaryColor());
}
} else {
viewHolder.lineOne.setTextColor(ColorUtils.getTextColorPrimary());
}
}
convertView.setClickable(true);
viewHolder.groupPosition = groupPosition;
viewHolder.childPosition = childPosition;
viewHolder.expandableIcon.setVisibility(View.GONE);
viewHolder.lineOne.setText(playlist.name);
viewHolder.lineOne.setAlpha(0.54f);
return convertView;
}
@Override
public int getRealChildrenCount(int groupPosition) {
return mDrawerGroupItems.get(groupPosition).children.size();
}
private class GroupViewHolder implements
View.OnClickListener {
int position;
View itemView;
ImageView icon;
ImageView expandableIcon;
TextView lineOne;
public GroupViewHolder(final View itemView) {
this.itemView = itemView;
icon = (ImageView) itemView.findViewById(R.id.icon);
lineOne = (TextView) itemView.findViewById(R.id.line_one);
expandableIcon = (ImageView) itemView.findViewById(R.id.expandable_icon);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == itemView) {
if (mDrawerListCallbacks != null) {
mDrawerListCallbacks.onDrawerItemClick(mDrawerGroupItems.get(position));
}
}
}
}
private class ChildViewHolder implements
View.OnClickListener {
int groupPosition;
int childPosition;
View itemView;
ImageView icon;
ImageView expandableIcon;
TextView lineOne;
ImageButton overFlow;
public ChildViewHolder(final View itemView) {
this.itemView = itemView;
icon = (ImageView) itemView.findViewById(R.id.icon);
icon.setVisibility(View.INVISIBLE);
lineOne = (TextView) itemView.findViewById(R.id.line_one);
expandableIcon = (ImageView) itemView.findViewById(R.id.expandable_icon);
overFlow = (ImageButton) itemView.findViewById(R.id.btn_overflow);
overFlow.setVisibility(View.VISIBLE);
overFlow.setImageDrawable(DrawableUtils.getColoredStateListDrawable(overFlow.getContext(), R.drawable.ic_overflow_white));
overFlow.setOnClickListener(this);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == itemView) {
if (mDrawerListCallbacks != null) {
mDrawerListCallbacks.onPlaylistItemClick(mDrawerGroupItems.get(groupPosition), mDrawerGroupItems.get(groupPosition).children.get(childPosition));
}
} else if (v == overFlow) {
if (mDrawerListCallbacks != null) {
mDrawerListCallbacks.onOverflowButtonClick(v, mDrawerGroupItems.get(groupPosition).children.get(childPosition));
}
}
}
}
}