/*
* This file is part of Popcorn Time.
*
* Popcorn Time is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Popcorn Time is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Popcorn Time. If not, see <http://www.gnu.org/licenses/>.
*/
package pct.droid.adapters;
import android.content.Context;
import android.graphics.PorterDuff;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Switch;
import android.widget.TextView;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.Bind;
import de.hdodenhof.circleimageview.CircleImageView;
import pct.droid.R;
import pct.droid.fragments.NavigationDrawerFragment;
public class NavigationAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private OnItemClickListener mItemClickListener;
private List<NavigationDrawerFragment.NavDrawerItem> mItems;
final int HEADER = 0, ITEM = 1;
final int mNormalColor, mCheckedColor, mCheckedBackgroundRes, mNormalBackgroundRes;
private Callback mCallback;
public NavigationAdapter(@NonNull Context context, @NonNull Callback callback, List<NavigationDrawerFragment.NavDrawerItem> items) {
mItems = items;
mCallback = callback;
mNormalColor = context.getResources().getColor(R.color.nav_drawer_deselected);
mCheckedColor = context.getResources().getColor(R.color.primary);
mNormalBackgroundRes = R.drawable.selectable_nav_background;
mCheckedBackgroundRes = R.color.nav_drawer_selected_bg;
}
public void setItems(List<NavigationDrawerFragment.NavDrawerItem> items) {
mItems = items;
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
switch (viewType) {
case HEADER:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.nav_drawer_header, parent, false);
return new HeaderHolder(v);
case ITEM:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.nav_drawer_list_item, parent, false);
return new ItemRowHolder(v);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int type = getItemViewType(position);
switch (type) {
case HEADER:
onBindHeaderViewHolder((HeaderHolder) holder, position);
break;
case ITEM:
onBindItemViewHolder((ItemRowHolder) holder, position);
break;
}
}
private void onBindHeaderViewHolder(HeaderHolder holder, int position) {
//do nothing for now
holder.mBackgroundImageView.setBackgroundResource(R.color.primary_dark);
holder.mProfileImageView.setVisibility(View.VISIBLE);
holder.mProfileImageView.setImageResource(R.drawable.popcorn_profile);
}
private void onBindItemViewHolder(ItemRowHolder viewHolder, int position) {
NavigationDrawerFragment.NavDrawerItem item = getItem(position);
item.setRowHolder(viewHolder);
if(item.isSwitch()) {
if(item.showProgress()) {
viewHolder.checkbox.setVisibility(View.INVISIBLE);
viewHolder.progressBar.setVisibility(View.VISIBLE);
} else {
viewHolder.checkbox.setVisibility(View.VISIBLE);
viewHolder.progressBar.setVisibility(View.INVISIBLE);
}
viewHolder.checkbox.setChecked(item.getSwitchValue());
} else {
viewHolder.checkbox.setVisibility(View.INVISIBLE);
viewHolder.progressBar.setVisibility(View.INVISIBLE);
}
viewHolder.title.setText(item.getTitle());
boolean isSelected = (getCorrectPosition(position)) == mCallback.getSelectedPosition();
viewHolder.title.setTextColor(isSelected ? mCheckedColor : mNormalColor);
viewHolder.itemView.setBackgroundResource(isSelected ? mCheckedBackgroundRes : mNormalBackgroundRes);
// vh.itemView.setBackgroundResource(isSelected ? R.color.nav_drawer_highlight : 0);
if (item.getIcon() > 0) {
viewHolder.icon.setImageResource(item.getIcon());
if (isSelected) viewHolder.icon.setColorFilter(mCheckedColor, PorterDuff.Mode.SRC_IN);
else viewHolder.icon.setColorFilter(mNormalColor, PorterDuff.Mode.SRC_IN);
}
}
@Override
public int getItemCount() {
return mItems.size();
}
public void setOnItemClickListener(OnItemClickListener listener) {
mItemClickListener = listener;
}
@Override
public int getItemViewType(int position) {
if (getItem(position).isHeader()) {
return HEADER;
}
return ITEM;
}
public interface OnItemClickListener {
public void onItemClick(View v, ItemRowHolder vh, NavigationDrawerFragment.NavDrawerItem item, int position);
}
public NavigationDrawerFragment.NavDrawerItem getItem(int position) {
if (position < 0 || mItems.size() <= position) return null;
return mItems.get(position);
}
/**
* Accounts for non Navigation Item rows and returns a position minus the correct offset
*
* @param position
* @return
*/
public int getCorrectPosition(int position) {
return position - 1;
}
public class ItemRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
@Bind(android.R.id.icon)
ImageView icon;
@Bind(android.R.id.text1)
TextView title;
@Bind(android.R.id.checkbox)
Switch checkbox;
@Bind(android.R.id.progress)
ProgressBar progressBar;
public ItemRowHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mItemClickListener != null) {
int position = getAdapterPosition();
NavigationDrawerFragment.NavDrawerItem item = getItem(position);
mItemClickListener.onItemClick(view, this, item, position);
}
}
public Switch getSwitch() {
return checkbox;
}
public ProgressBar getProgressBar() {
return progressBar;
}
}
public static class HeaderHolder extends RecyclerView.ViewHolder {
@Bind(R.id.bg_imageview)
ImageView mBackgroundImageView;
@Bind(R.id.profile_imageview)
CircleImageView mProfileImageView;
@Bind(R.id.title_textview)
TextView mTitleTextView;
@Bind(R.id.subtitle_textview)
TextView mSubtitleTextView;
public HeaderHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public interface Callback {
int getSelectedPosition();
}
}