package com.mozu.mozuandroidinstoreassistant.app.product.adapter;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import com.mozu.api.contracts.productruntime.Product;
import com.mozu.mozuandroidinstoreassistant.app.R;
import com.mozu.mozuandroidinstoreassistant.app.adapters.GridToggleArrayAdapter;
import com.mozu.mozuandroidinstoreassistant.app.models.ImageURLConverter;
import com.mozu.mozuandroidinstoreassistant.app.tasks.InventoryButtonClickListener;
import com.mozu.mozuandroidinstoreassistant.app.views.RoundedTransformation;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.RequestCreator;
import java.text.NumberFormat;
public class ProductAdapter extends GridToggleArrayAdapter<Product> {
private ImageURLConverter mUrlConverter;
private NumberFormat mNumberFormat;
private InventoryButtonClickListener mInventoryClickListener;
private Context mContext;
public ProductAdapter(Context context, Integer tenantId, Integer siteId,String siteDomain,InventoryButtonClickListener inventoryClickListener) {
super(context, R.layout.product_grid_item, R.layout.product_list_item);
mContext = context;
mNumberFormat = NumberFormat.getCurrencyInstance();
mUrlConverter = new ImageURLConverter(tenantId, siteId,siteDomain);
mInventoryClickListener = inventoryClickListener;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ProductViewHolder viewHolder;
if ( convertView == null ||
( isGrid() && convertView.getId() == getGridResource()) ||
( !isGrid() && convertView.getId() == getListResource()) ) {
convertView = LayoutInflater.from(getContext()).inflate(getCurrentResource(), null);
viewHolder = new ProductViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ProductViewHolder) convertView.getTag();
}
final Product product = getItem(position);
viewHolder.productName.setText(product.getContent().getProductName());
viewHolder.productImage.setImageResource(R.drawable.icon_noproductphoto);
viewHolder.productImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
//load image asynchronously into the view
if (product.getContent().getProductImages() != null && product.getContent().getProductImages().size() > 0) {
RequestCreator creator = Picasso.with(getContext())
.load(mUrlConverter.getFullImageUrl(product.getContent().getProductImages().get(0).getImageUrl()));
if (!isGrid()) {
creator = creator.transform(new RoundedTransformation()).placeholder(R.drawable.icon_noproductphoto);
int dimenWidth = getContext().getResources().getDimensionPixelSize(R.dimen.product_list_item_width);
int dimenHeight = getContext().getResources().getDimensionPixelSize(R.dimen.product_list_item_height);
creator = creator.transform(new RoundedTransformation()).placeholder(R.drawable.icon_nocategoryphoto).resize(dimenWidth, dimenHeight).centerCrop();
} else {
int dimenWidth = getContext().getResources().getDimensionPixelSize(R.dimen.category_grid_image_width);
int dimenHeight = getContext().getResources().getDimensionPixelSize(R.dimen.category_grid_image_height);
creator = creator.placeholder(R.drawable.icon_noproductphoto).resize(dimenWidth, dimenHeight).centerInside();
}
creator.into(viewHolder.productImage, new Callback() {
@Override
public void onSuccess() {
Bitmap bitmap = ((BitmapDrawable) viewHolder.productImage.getDrawable()).getBitmap();
viewHolder.productImage.setBackgroundColor(bitmap.getPixel(0, 0));
viewHolder.productImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
viewHolder.productLoading.success();
}
@Override
public void onError() {
viewHolder.productImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
viewHolder.productLoading.success();
}
});
}else{
viewHolder.productImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
viewHolder.productLoading.success();
}
viewHolder.productSku.setText(product.getProductCode());
if(product.getPrice() != null && product.getPrice().getSalePrice() != null){
if(isGrid()) {
viewHolder.productPrice.setVisibility(View.GONE);
}else {
viewHolder.productPrice.setVisibility(View.VISIBLE);
}
viewHolder.productSalePrice.setVisibility(View.VISIBLE);
}else{
viewHolder.productPrice.setVisibility(View.VISIBLE);
if (isGrid()) {
viewHolder.productSalePrice.setVisibility(View.GONE);
}else {
viewHolder.productSalePrice.setVisibility(View.VISIBLE);
}
}
viewHolder.productSalePrice.setText(product.getPrice() != null && product.getPrice().getSalePrice() != null && product.getPrice().getSalePrice() > 0.0 ? mNumberFormat.format(product.getPrice().getSalePrice()) : "");
viewHolder.productPrice.setText(product.getPrice() != null && product.getPrice().getPrice() != null && product.getPrice().getPrice() > 0.0 ? mNumberFormat.format(product.getPrice().getPrice()) : "");
viewHolder.productInventory.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isGrid()) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setItems(R.array.product_overflow_options, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int position) {
if (position == 0) {
mInventoryClickListener.onClick(product);
}
}
});
Dialog dialog = builder.create();
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.show();
WindowManager.LayoutParams lParams = dialog.getWindow().getAttributes();
int[] coordinates = new int[]{0, 0};
lParams.gravity = Gravity.TOP | Gravity.LEFT;
view.getLocationOnScreen(coordinates);
lParams.x = (int) (coordinates[0] - view.getX());
lParams.y = (int) (coordinates[1] - view.getY());
lParams.width = 600;
lParams.height = 400;
dialog.getWindow().setAttributes(lParams);
} else {
mInventoryClickListener.onClick(product);
}
}
});
return convertView;
}
}