package com.example.administrator.cookman.ui.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.administrator.cookman.R;
import com.example.administrator.cookman.constants.Constants;
import com.example.administrator.cookman.model.entity.CookEntity.CookDetail;
import com.example.administrator.cookman.model.entity.CookEntity.CookRecipeMethod;
import com.example.administrator.cookman.model.manager.CookCollectionManager;
import com.example.administrator.cookman.ui.component.SwitchIconView;
import com.example.administrator.cookman.utils.GlideUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by Administrator on 2017/2/21.
*/
public class CookDetailAdapter extends RecyclerView.Adapter<CookDetailAdapter.ItemViewHolder>{
private Context context;
private CookDetail srcData;
private List<CookDetailStruct> datas;
private String sumary;
private ArrayList<String> ingredientsDatas;
private ArrayList<CookRecipeMethod> cookRecipeMethods;
private boolean isShowCollection;
private Gson gson;
private GlideUtil glideUtil;
public CookDetailAdapter(Context context, CookDetail data, boolean isShowCollection) {
this.context = context;
this.srcData = data;
this.isShowCollection = isShowCollection;
this.gson = new Gson();
this.glideUtil = new GlideUtil();
sumary = data.getRecipe().getSumary();
String str = data.getRecipe().getIngredients();
if(null == str || TextUtils.isEmpty(str)) {
ingredientsDatas = new ArrayList<>();
}
else{
str = str.replace("\\", "");
ingredientsDatas = gson.fromJson(
str
, new TypeToken<ArrayList<String>>() {
}.getType());
}
str = data.getRecipe().getMethod();
if(null == str || TextUtils.isEmpty(str)){
cookRecipeMethods = new ArrayList<>();
}
else {
str = str.replace("\\", "");
cookRecipeMethods = gson.fromJson(
str
, new TypeToken<ArrayList<CookRecipeMethod>>() {
}.getType());
}
this.datas = CookDetailStruct.create(cookRecipeMethods);
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
if(Cook_Detail_Item_Type_CookMan == viewType){
CookManItemViewHolder holder = new CookManItemViewHolder(
LayoutInflater.from(context).inflate(R.layout.item_cook_detail_cookman, parent, false)
);
return holder;
}
else if(Cook_Detail_Item_Type_Header == viewType){
HeaderItemViewHolder holder = new HeaderItemViewHolder(
LayoutInflater.from(context).inflate(R.layout.item_cook_detail_header, parent, false)
);
return holder;
}
else{
StepItemViewHolder holder = new StepItemViewHolder(
LayoutInflater.from(context).inflate(R.layout.item_cook_detail_step, parent, false)
);
return holder;
}
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position){
if(Cook_Detail_Item_Type_CookMan == getItemViewType(position)){
final CookManItemViewHolder holderView = (CookManItemViewHolder)holder;
if(isShowCollection){
holderView.switchIconView.setVisibility(View.VISIBLE);
holderView.switchIconView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holderView.switchIconView.isIconEnabled()){
CookCollectionManager.getInstance().delete(srcData);
}
else{
MobclickAgent.onEvent(context, Constants.Umeng_Event_Id_Collection_Add);
CookCollectionManager.getInstance().add(srcData);
}
holderView.switchIconView.switchState();
}
});
}
else{
holderView.switchIconView.setVisibility(View.GONE);
}
holderView.textSumary.setText(sumary);
return ;
}
if(Cook_Detail_Item_Type_Header == getItemViewType(position)){
HeaderItemViewHolder holderView = (HeaderItemViewHolder)holder;
if(ingredientsDatas.size() < 1){
holderView.view1.setVisibility(View.GONE);
holderView.view2.setVisibility(View.GONE);
holderView.view3.setVisibility(View.GONE);
holderView.textIngredients.setVisibility(View.GONE);
}
else if(ingredientsDatas.size() < 2) {
holderView.view1.setVisibility(View.VISIBLE);
holderView.view2.setVisibility(View.GONE);
holderView.view3.setVisibility(View.GONE);
holderView.textIngredientsContent1.setText(ingredientsDatas.get(0));
}
else if(ingredientsDatas.size() < 3){
holderView.view1.setVisibility(View.VISIBLE);
holderView.view2.setVisibility(View.VISIBLE);
holderView.view3.setVisibility(View.GONE);
holderView.textIngredientsContent1.setText(ingredientsDatas.get(0));
holderView.textIngredientsContent2.setText(ingredientsDatas.get(1));
}
else{
holderView.view1.setVisibility(View.VISIBLE);
holderView.view2.setVisibility(View.VISIBLE);
holderView.view3.setVisibility(View.VISIBLE);
holderView.textIngredientsContent1.setText(ingredientsDatas.get(0));
holderView.textIngredientsContent2.setText(ingredientsDatas.get(1));
holderView.textIngredientsContent3.setText(ingredientsDatas.get(2));
}
return ;
}
StepItemViewHolder holderView = (StepItemViewHolder)holder;
CookRecipeMethod data = datas.get(position).getData();
holderView.textContent.setText(data.getStep());
if(data.getImg() != null && (!TextUtils.isEmpty(data.getImg()))) {
holderView.imgvStep.setVisibility(View.VISIBLE);
glideUtil.attach(holderView.imgvStep).injectImageWithNull(data.getImg());
}
else{
holderView.imgvStep.setVisibility(View.GONE);
}
}
@Override
public int getItemCount(){
return datas.size();
}
@Override
public int getItemViewType(int position) {
return datas.get(position).getType();
}
private final static int Cook_Detail_Item_Type_CookMan = 0;
private final static int Cook_Detail_Item_Type_Header = 1;
private final static int Cook_Detail_Item_Type_Step = 2;
private static class CookDetailStruct{
private int type;
private CookRecipeMethod data;
public CookDetailStruct(int type){
this.type = type;
}
public CookDetailStruct(int type, CookRecipeMethod data){
this.type = type;
this.data = data;
}
public int getType() {
return type;
}
public CookRecipeMethod getData() {
return data;
}
public static List<CookDetailStruct> create(ArrayList<CookRecipeMethod> cookRecipeMethods){
List<CookDetailStruct> datas = new ArrayList<>();
datas.add(new CookDetailStruct(Cook_Detail_Item_Type_CookMan));
datas.add(new CookDetailStruct(Cook_Detail_Item_Type_Header));
if(null == cookRecipeMethods)
return datas;
for(CookRecipeMethod item : cookRecipeMethods) {
datas.add(new CookDetailStruct(Cook_Detail_Item_Type_Step, item));
}
return datas;
}
}
public class StepItemViewHolder extends ItemViewHolder{
@Bind(R.id.text_content)
public TextView textContent;
@Bind(R.id.imgv_step)
public ImageView imgvStep;
public StepItemViewHolder(View itemView){
super(itemView);
}
}
public class CookManItemViewHolder extends ItemViewHolder{
@Bind(R.id.switchIconView_collection)
public SwitchIconView switchIconView;
@Bind(R.id.text_sumary)
public TextView textSumary;
public CookManItemViewHolder(View itemView){
super(itemView);
}
}
public class HeaderItemViewHolder extends ItemViewHolder{
@Bind(R.id.text_ingredients)
public TextView textIngredients;
@Bind(R.id.relative_view1)
public RelativeLayout view1;
@Bind(R.id.relative_view2)
public RelativeLayout view2;
@Bind(R.id.relative_view3)
public RelativeLayout view3;
@Bind(R.id.text_ingredients_content1)
public TextView textIngredientsContent1;
@Bind(R.id.text_ingredients_content2)
public TextView textIngredientsContent2;
@Bind(R.id.text_ingredients_content3)
public TextView textIngredientsContent3;
public HeaderItemViewHolder(View itemView){
super(itemView);
}
}
public class ItemViewHolder extends RecyclerView.ViewHolder{
public ItemViewHolder(View itemView){
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}