package bf.io.openshop.ux.adapters;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import bf.io.openshop.R;
import bf.io.openshop.entities.order.Order;
import bf.io.openshop.utils.Utils;
import bf.io.openshop.views.ResizableImageView;
import timber.log.Timber;
/**
* Adapter handling list of order items.
*/
public class OrderRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM_ORDER = 1;
private LayoutInflater layoutInflater;
private Context context;
private Order order;
/**
* Creates an adapter that handles a list of order items.
*
* @param context activity context.
*/
public OrderRecyclerAdapter(Context context) {
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (layoutInflater == null)
layoutInflater = LayoutInflater.from(parent.getContext());
if (viewType == TYPE_ITEM_ORDER) {
View view = layoutInflater.inflate(R.layout.list_item_order_product_image, parent, false);
return new ViewHolderOrderProduct(view);
} else {
View view = layoutInflater.inflate(R.layout.list_item_order_header, parent, false);
return new ViewHolderHeader(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolderOrderProduct) {
ViewHolderOrderProduct viewHolderOrderProduct = (ViewHolderOrderProduct) holder;
Picasso.with(context).load(order.getProducts().get(position - 1).getVariant().getMainImage())
.fit().centerInside()
.placeholder(R.drawable.placeholder_loading)
.error(R.drawable.placeholder_error)
.into(viewHolderOrderProduct.productImage);
} else if (holder instanceof ViewHolderHeader) {
ViewHolderHeader viewHolderHeader = (ViewHolderHeader) holder;
viewHolderHeader.orderId.setText(order.getRemoteId());
viewHolderHeader.orderName.setText(order.getName());
viewHolderHeader.orderDateCreated.setText(Utils.parseDate(order.getDateCreated()));
viewHolderHeader.orderTotal.setText(order.getTotalFormatted());
viewHolderHeader.orderShippingMethod.setText(order.getShippingName());
viewHolderHeader.orderShippingPrice.setText(order.getShippingPriceFormatted());
} else {
Timber.e(new RuntimeException(), "Unknown holder type.");
}
}
// This method returns the number of items present in the list
@Override
public int getItemCount() {
if (order != null) {
if (order.getProducts() != null && order.getProducts().size() > 0) {
return order.getProducts().size() + 1; // the number of items in the list, +1 for header view.
} else {
return 1;
}
} else {
return 0;
}
}
@Override
public int getItemViewType(int position) {
if (position == 0)
return TYPE_HEADER;
else
return TYPE_ITEM_ORDER;
}
/**
* Add item to list, and notify dataSet changed.
*
* @param order item to add.
*/
public void addOrder(Order order) {
if (order != null) {
this.order = order;
notifyDataSetChanged();
} else {
Timber.e("Setting null order object.");
}
}
// Provide a reference to the views for each data item
public static class ViewHolderOrderProduct extends RecyclerView.ViewHolder {
ResizableImageView productImage;
public ViewHolderOrderProduct(View itemView) {
super(itemView);
productImage = (ResizableImageView) itemView.findViewById(R.id.list_item_product_images_view);
}
}
public static class ViewHolderHeader extends RecyclerView.ViewHolder {
public TextView orderId;
public TextView orderName;
public TextView orderDateCreated;
public TextView orderTotal;
public TextView orderShippingMethod;
public TextView orderShippingPrice;
public ViewHolderHeader(View headerView) {
super(headerView);
orderId = (TextView) headerView.findViewById(R.id.list_item_order_header_id);
orderName = (TextView) headerView.findViewById(R.id.list_item_order_header_name);
orderDateCreated = (TextView) headerView.findViewById(R.id.list_item_order_header_dateCreated);
orderTotal = (TextView) headerView.findViewById(R.id.list_item_order_header_total);
orderShippingMethod = (TextView) headerView.findViewById(R.id.list_item_order_header_shipping_method);
orderShippingPrice = (TextView) headerView.findViewById(R.id.list_item_order_header_shipping_price);
}
}
}