package com.xiaomi.xms.sales.adapter; import android.content.Context; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.ActNode; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.CartListNode; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.IncastNode; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.SupplyNode; import com.xiaomi.xms.sales.model.ShoppingCartListInfo.Item.TitleNode; import com.xiaomi.xms.sales.ui.IncastProductGalleryItem; import com.xiaomi.xms.sales.ui.ShoppingActItem; import com.xiaomi.xms.sales.ui.ShoppingListItem; import com.xiaomi.xms.sales.ui.ShoppingSupplyItem; import com.xiaomi.xms.sales.ui.ShoppingTitleItem; import com.xiaomi.xms.sales.util.LogUtil; import java.util.ArrayList; public class ShoppingAdapter extends BaseDataAdapter<Item> { private final static int BG_TYPE_TOP = 1; private final static int BG_TYPE_MIDDLE = 2; private final static int BG_TYPE_BOTTOM = 3; private final static int BG_TYPE_SINGLE = 4; private final static int BG_TYPE_TITLE = 5; private final static int BG_TYPE_BLACK = 6; private boolean mHideArrow; private boolean mShowTopLine; private boolean mPaperBackground; private SparseIntArray mTypeMap = new SparseIntArray(); private final static String TAG = "ShoppingAdapter"; public ShoppingAdapter(Context context) { super(context); } @Override public View newView(Context context, Item data, ViewGroup parent) { View view = null; if (data.getType() == Item.TYPE_CARTLIST) { ShoppingListItem item = new ShoppingListItem(context, null); item.hideArrow(mHideArrow); item.showTopLine(mShowTopLine); view = item; } else if (data.getType() == Item.TYPE_TITLE) { ShoppingTitleItem item = new ShoppingTitleItem(context, null); view = item; } else if (data.getType() == Item.TYPE_SUPPLY) { ShoppingSupplyItem item = new ShoppingSupplyItem(context, null); view = item; } else if (data.getType() == Item.TYPE_BLACK) { view = LayoutInflater.from(context).inflate(R.layout.list_black_item, parent, false); } else if (data.getType() == Item.TYPE_INCAST) { view = new IncastProductGalleryItem(context, null); } else if (data.getType() == Item.TYPE_ACT) { view = new ShoppingActItem(context, null); } return view; } @Override public int getItemViewType(int position) { Item item = mData.get(position); return item.getType(); } @Override public int getViewTypeCount() { return Item.TYPE_COUNT; } @Override public void bindView(View view, int position, Item data) { LogUtil.d(TAG, "bindView:" + position + ", data type: " + data.getType()); if (data.getType() == Item.TYPE_CARTLIST) { if (view instanceof ShoppingListItem) { ((ShoppingListItem) view).bind((CartListNode) data.getNode()); } } else if (data.getType() == Item.TYPE_TITLE) { if (view instanceof ShoppingTitleItem) { ((ShoppingTitleItem) view).bind((TitleNode) data.getNode()); } } else if (data.getType() == Item.TYPE_SUPPLY) { if (view instanceof ShoppingSupplyItem) { ((ShoppingSupplyItem) view).bind((SupplyNode) data.getNode()); } } else if (data.getType() == Item.TYPE_INCAST) { if (view instanceof IncastProductGalleryItem) { ((IncastProductGalleryItem) view).bind((IncastNode) data.getNode()); } } else if (data.getType() == Item.TYPE_ACT) { if (view instanceof ShoppingActItem) { ((ShoppingActItem) view).bind((ActNode) data.getNode()); } } else if (data.getType() == Item.TYPE_BLACK) { } } @Override public void updateData(ArrayList<Item> data) { super.updateData(data); LogUtil.d(TAG, "updateData: data size is" + data.size()); mTypeMap.clear(); boolean inArea = false; int n = 0; for (int i = 0; i < data.size(); i++) { Item item = data.get(i); if (item.getType() == Item.TYPE_BLACK) { mTypeMap.put(i, BG_TYPE_BLACK); if (n == 1) { mTypeMap.put(i - 1, BG_TYPE_SINGLE); } else { mTypeMap.put(i - 1, BG_TYPE_BOTTOM); } break; } if (item.getType() != Item.TYPE_TITLE) { if (inArea == false) { inArea = true; mTypeMap.put(i, BG_TYPE_TOP); } else { mTypeMap.put(i, BG_TYPE_MIDDLE); } n++; } else { inArea = false; if (i - 1 > 0) { if (n == 1) { mTypeMap.put(i - 1, BG_TYPE_SINGLE); } else { mTypeMap.put(i - 1, BG_TYPE_BOTTOM); } } mTypeMap.put(i, BG_TYPE_TITLE); n = 0; } } } public void hideArrow(boolean isHide) { mHideArrow = isHide; } public void showTopLine(boolean isShow) { mShowTopLine = isShow; } public void showPaperBackground() { mPaperBackground = true; } public void updateTitleAndBlack() { if (mData != null) { mDataValid = true; for (int i = 0; i < mData.size(); i++) { Item item = mData.get(i); if (item.getType() == Item.TYPE_BLACK || item.getType() == Item.TYPE_TITLE) { mData.remove(item); } } notifyDataSetChanged(); } else { mDataValid = false; notifyDataSetInvalidated(); } } @Override protected void bindBackground(View view, int position) { int type = getItemViewType(position); if (type == Item.TYPE_INCAST || type == Item.TYPE_ACT) { return; } if (mPaperBackground) { view.setBackgroundResource(R.drawable.order_view_body); return; } int bgType = mTypeMap.get(position); View bgView; if (type == Item.TYPE_CARTLIST) { bgView = ((ShoppingListItem) view).getContainer(); } else if (type == Item.TYPE_SUPPLY) { ShoppingSupplyItem supplyItem = (ShoppingSupplyItem) view; bgView = view; if (bgType == BG_TYPE_TOP) { supplyItem.setArrowBackgroundResource(R.drawable.op_arrow_up_bg); } else if (bgType == BG_TYPE_MIDDLE) { supplyItem.setArrowBackgroundResource(R.drawable.op_arrow_middle_bg); } else if (bgType == BG_TYPE_BOTTOM) { supplyItem.setArrowBackgroundResource(R.drawable.op_arrow_bottom_bg); } else if (bgType == BG_TYPE_SINGLE) { supplyItem.setArrowBackgroundResource(R.drawable.op_arrow_single_n); } } else { bgView = view; } LogUtil.d(TAG, "bindBackground: " + position + ", size is " + mData.size()); int background = 0; LogUtil.i(TAG, bgType + ""); if (bgType == BG_TYPE_TOP) { background = mPaperBackground ? R.drawable.order_view_body : R.drawable.cartlist_list_item_top_bg; } else if (bgType == BG_TYPE_MIDDLE) { background = mPaperBackground ? R.drawable.order_view_body : R.drawable.cartlist_list_item_middle_bg; } else if (bgType == BG_TYPE_BOTTOM) { background = mPaperBackground ? R.drawable.order_view_body : R.drawable.cartlist_list_item_bottom_bg; } else if (bgType == BG_TYPE_TITLE) { bgView.setBackgroundDrawable(null); } else if (bgType == BG_TYPE_SINGLE) { background = mPaperBackground ? R.drawable.order_view_body : R.drawable.cartlist_list_item_single_bg; } else if (bgType == BG_TYPE_BLACK) { bgView.setBackgroundDrawable(null); } bgView.setBackgroundResource(background); } @Override public boolean isEnabled(int position) { int bgType = mTypeMap.get(position); if (bgType == BG_TYPE_TITLE || bgType == BG_TYPE_BLACK) { return false; } return true; } }