package io.hefuyi.zhihudaily.ui.adapter;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
import io.hefuyi.zhihudaily.R;
import io.hefuyi.zhihudaily.mvp.model.Editor;
import io.hefuyi.zhihudaily.mvp.model.Story;
import io.hefuyi.zhihudaily.mvp.model.Theme;
import io.hefuyi.zhihudaily.ui.adapter.holder.StoryViewHolder;
import io.hefuyi.zhihudaily.util.UIUtils;
import io.hefuyi.zhihudaily.widget.AvatarsView;
import io.hefuyi.zhihudaily.widget.StoryHeaderView;
/**
* Created by hefuyi on 16/8/6.
*/
public class ThemeStoriesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Theme mTheme;
public ThemeStoriesAdapter() {
}
public void setTheme(Theme theme) {
this.mTheme = theme;
notifyDataSetChanged();
}
public void appendStories(List<Story> stories) {
mTheme.getStories().addAll(stories);
notifyDataSetChanged();
}
public static final class Type {
public static final int TYPE_HEADER = 0;
public static final int TYPE_AVATARS = 1;
public static final int TYPE_ITEM = 2;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
switch (viewType) {
case Type.TYPE_HEADER:
viewHolder = new HeaderViewHolder(StoryHeaderView.newInstance(parent));
break;
case Type.TYPE_AVATARS:
// AvatarsView avatarsView = new AvatarsView(parent.getContext());
// RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(
// ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT
// );
// layoutParams.setMargins(0, DensityUtil.dip2px(parent.getContext(), 8), 0, 0);
// avatarsView.setLayoutParams(layoutParams);
AvatarsView avatarsView =(AvatarsView) LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_avatars, parent,false);
viewHolder = new AvatarViewHolder(avatarsView);
break;
case Type.TYPE_ITEM:
viewHolder = new StoryViewHolder(UIUtils.inflate(R.layout.recycler_item_story, parent));
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case Type.TYPE_HEADER:
((StoryHeaderView)holder.itemView).bindData(mTheme.getDescription(),null,mTheme.getBackground());
break;
case Type.TYPE_AVATARS:
List<String> images = new ArrayList<>();
for (Editor editor : mTheme.getEditors()) {
images.add(editor.getAvatar());
}
((AvatarsView) holder.itemView).bindData(
holder.itemView.getResources().getString(R.string.avatar_title_editor), images);
break;
case Type.TYPE_ITEM:
StoryViewHolder stotyViewHolder = (StoryViewHolder) holder;
final int storyPosition = hasEditors() ? position - 2 : position - 1;
stotyViewHolder.bindStoryView(mTheme.getStories().get(storyPosition));
break;
default:
throw new IllegalArgumentException("error view type");
}
}
@Override
public int getItemCount() {
int count = 0;
if (mTheme != null) {
if (!TextUtils.isEmpty(mTheme.getBackground())) {
count += 1;
}
if (mTheme.getEditors() != null && mTheme.getEditors().size() > 0) {
count += 1;
}
if (mTheme.getStories() != null) {
count += mTheme.getStories().size();
}
}
return count;
}
@Override
public int getItemViewType(int position) {
if (!TextUtils.isEmpty(mTheme.getBackground()) && position == 0) {
return Type.TYPE_HEADER;
} else if (hasEditors() && position == 1) {
return Type.TYPE_AVATARS;
} else {
return Type.TYPE_ITEM;
}
}
private boolean hasEditors() {
return mTheme.getEditors() != null && mTheme.getEditors().size() > 0;
}
public static final class HeaderViewHolder extends RecyclerView.ViewHolder {
public HeaderViewHolder(View itemView) {
super(itemView);
}
}
public static final class AvatarViewHolder extends RecyclerView.ViewHolder {
public AvatarViewHolder(View itemView) {
super(itemView);
}
}
}