package com.biznow.ordernow.adapter; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.data.menu.MenuPropertyKey; import com.data.menu.MenuPropertyValue; import com.biznow.ordernow.IngredientsActivity; import com.biznow.ordernow.R; import com.biznow.ordernow.filter.MenuFilter; import com.biznow.ordernow.fragments.AddNoteListener; import com.biznow.ordernow.fragments.IndividualMenuTabFragment.numListener; import com.biznow.ordernow.model.FoodMenuItem; import com.biznow.ordernow.model.OrderNowConstants; import com.google.gson.Gson; import com.util.Utilities; public class FoodMenuItemAdapter extends ArrayAdapter<FoodMenuItem> implements Filterable { private ArrayList<FoodMenuItem> foodMenuItems; private ArrayList<FoodMenuItem> allfoodMenuItems; private numListener numCallBack; private AddNoteListener addNoteListener; private ModelFilter filter; private Context context; public FoodMenuItemAdapter(Context context, ArrayList<FoodMenuItem> foodMenuItems, numListener numCallBack, AddNoteListener addNoteListener) { super(context, R.layout.food_menu_item, foodMenuItems); this.context = context; this.addNoteListener = addNoteListener; allfoodMenuItems = new ArrayList<FoodMenuItem>(); if (foodMenuItems != null) { allfoodMenuItems.addAll(foodMenuItems); } this.foodMenuItems = foodMenuItems; this.numCallBack = numCallBack; } public View getView(int position, View convertView, ViewGroup parent) { final FoodMenuItem foodItem = foodMenuItems.get(position); LayoutInflater l_Inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final ViewHolder holder; if (convertView == null) { convertView = l_Inflater.inflate(R.layout.food_menu_item, null); holder = new ViewHolder(); holder.txt_itemName = (TextView) convertView.findViewById(R.id.dish_name); holder.txt_itemCategory = (TextView) convertView.findViewById(R.id.dish_category); holder.txt_itemDescription = (TextView) convertView.findViewById(R.id.dish_description); holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.dish_price); holder.txt_itemQuantity = (TextView) convertView.findViewById(R.id.dish_quantity); holder.itemImage = (ImageView) convertView.findViewById(R.id.dish_photo); holder.catImage = (ImageView) convertView.findViewById(R.id.dish_cat_image); holder.addItem = (ImageButton) convertView.findViewById(R.id.addbutton); holder.subItem = (ImageButton) convertView.findViewById(R.id.subbutton); holder.addNote = (ImageButton) convertView.findViewById(R.id.addnote); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.addItem.setTag(foodItem); holder.subItem.setTag(foodItem); holder.addNote.setTag(foodItem); holder.txt_itemName.setTag(foodItem); holder.txt_itemDescription.setTag(foodItem); holder.txt_itemPrice.setTag(foodItem); holder.itemImage.setTag(foodItem); holder.txt_itemName.setText(foodItem.getItemName()); if (foodItem.getDescription() == null || foodItem.getDescription().isEmpty()) { holder.txt_itemDescription.setVisibility(View.GONE); } else { holder.txt_itemDescription.setVisibility(View.VISIBLE); holder.txt_itemDescription.setText(foodItem.getDescription()); } holder.txt_itemPrice.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + foodItem.getItemPrice().toString()); if(foodItem.getCategory()!= null && !foodItem.getCategory().isEmpty()) { holder.txt_itemCategory.setText(foodItem.getCategory()); holder.txt_itemCategory.setVisibility(View.VISIBLE); } else { holder.txt_itemCategory.setVisibility(View.INVISIBLE); } MenuPropertyValue foodTypeValue = foodItem.getDishFilterProperties().get(MenuPropertyKey.FoodType); if (foodTypeValue != null && foodTypeValue.equals(MenuPropertyValue.Veg)) { holder.catImage.setVisibility(View.VISIBLE); holder.catImage.setImageResource(R.drawable.veg); } else if (foodTypeValue != null && foodTypeValue.equals(MenuPropertyValue.NonVeg)) { holder.catImage.setVisibility(View.VISIBLE); holder.catImage.setImageResource(R.drawable.non_veg); } else { holder.catImage.setVisibility(View.INVISIBLE); } Bitmap bitmap = foodItem.getImage(); if (bitmap == null) { holder.itemImage.setImageResource(R.drawable.default_food_icon); } else { holder.itemImage.setImageBitmap(bitmap); } View.OnClickListener addOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { FoodMenuItem foodItem = (FoodMenuItem) v.getTag(); numCallBack.incrementQuantity(foodItem); holder.subItem.setVisibility(View.VISIBLE); holder.addNote.setVisibility(View.VISIBLE); final Float quantity = numCallBack.getQuantity(foodItem); if ((quantity - quantity.intValue()) == 0) holder.txt_itemQuantity.setText(quantity.intValue() + ""); else holder.txt_itemQuantity.setText(quantity + ""); holder.itemImage.setAlpha(0.3f); } }; holder.addItem.setOnClickListener(addOnClickListener); holder.itemImage.setOnClickListener(addOnClickListener); holder.txt_itemDescription.setOnClickListener(addOnClickListener); holder.txt_itemName.setOnClickListener(addOnClickListener); holder.txt_itemPrice.setOnClickListener(addOnClickListener); holder.subItem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FoodMenuItem foodItem = (FoodMenuItem) v.getTag(); numCallBack.decrementQuantity(foodItem); Float quantity = numCallBack.getQuantity(foodItem); if (quantity - quantity.intValue() == 0) holder.txt_itemQuantity.setText(quantity.intValue() + ""); else holder.txt_itemQuantity.setText(quantity + ""); if (quantity == 0) { holder.subItem.setVisibility(View.INVISIBLE); holder.addNote.setVisibility(View.INVISIBLE); holder.txt_itemQuantity.setText(""); holder.itemImage.setAlpha(1f); } } }); holder.addNote.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FoodMenuItem foodItem = (FoodMenuItem) v.getTag(); addNoteListener.showNote(foodItem); } }); if(!foodItem.isAvailable()) { holder.itemImage.setImageResource(R.drawable.not_available); hideButtonsFromFoodItem(holder); View.OnClickListener ingredientOnClickListener = new View.OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(context.getApplicationContext(), "This item is currently unavailable", Toast.LENGTH_SHORT).show(); } }; holder.itemImage.setOnClickListener(ingredientOnClickListener); holder.txt_itemDescription.setOnClickListener(ingredientOnClickListener); holder.txt_itemDescription.setText("Currently Unavailable"); holder.txt_itemName.setOnClickListener(ingredientOnClickListener); holder.txt_itemPrice.setOnClickListener(ingredientOnClickListener); holder.txt_itemName.setTextColor(context.getResources().getColor(R.color.gray)); holder.txt_itemPrice.setTextColor(context.getResources().getColor(R.color.gray)); } else { //TODO without this first item view is screwed, look is it the right approach holder.addItem.setVisibility(View.VISIBLE); holder.txt_itemName.setTextColor(context.getResources().getColor(R.color.itemNameColor)); holder.txt_itemPrice.setTextColor(context.getResources().getColor(R.color.itemPriceColor)); } // imageLoader.DisplayImage("http://192.168.1.28:8082/ANDROID/images/BEVE.jpeg", // holder.itemImage); if(foodItem.isItemCustomizable()) { holder.itemImage.setImageResource(R.drawable.ic_category); hideButtonsFromFoodItem(holder); View.OnClickListener ingredientOnClickListener = new View.OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(context, IngredientsActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(IngredientsActivity.DISH_NAME, holder.txt_itemName.getText()); intent.putExtra(IngredientsActivity.FOOD_ITEM, foodItem); context.startActivity(intent); } }; holder.itemImage.setOnClickListener(ingredientOnClickListener); holder.txt_itemDescription.setOnClickListener(ingredientOnClickListener); holder.txt_itemName.setOnClickListener(ingredientOnClickListener); holder.txt_itemPrice.setOnClickListener(ingredientOnClickListener); } if (numCallBack.getQuantity(foodItem) == 0) { holder.subItem.setVisibility(View.INVISIBLE); holder.addNote.setVisibility(View.INVISIBLE); holder.txt_itemQuantity.setText(""); holder.itemImage.setAlpha(1f); } else { final Float quantity = numCallBack.getQuantity(foodItem); if (quantity - quantity.intValue() == 0) holder.txt_itemQuantity.setText(quantity.intValue() + ""); else holder.txt_itemQuantity.setText(quantity + ""); holder.subItem.setVisibility(View.VISIBLE); holder.addNote.setVisibility(View.VISIBLE); holder.itemImage.setAlpha(0.3f); } return convertView; } private void hideButtonsFromFoodItem(final ViewHolder holder) { holder.addItem.setVisibility(View.INVISIBLE); holder.subItem.setVisibility(View.INVISIBLE); holder.addNote.setVisibility(View.INVISIBLE); } static class ViewHolder { TextView txt_itemName; TextView txt_itemCategory; TextView txt_itemDescription; TextView txt_itemPrice; TextView txt_itemQuantity; ImageView itemImage; ImageView catImage; ImageButton addItem; ImageButton subItem; ImageButton addNote; } @Override public Filter getFilter() { if (filter == null) { filter = new ModelFilter(); } return filter; } private class ModelFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new FilterResults(); List<FoodMenuItem> filteredItemList = new ArrayList<FoodMenuItem>(); MenuFilter filter = null ; if (constraint != null && !constraint.equals("")) { Gson gs = new Gson(); filter = gs.fromJson(constraint.toString(), MenuFilter.class); } if(filter!=null && filter.getFilterProperties() !=null && !filter.getFilterProperties().isEmpty()) { for (FoodMenuItem foodItem : allfoodMenuItems) { if(filter.isItemFiltered(foodItem)) { filteredItemList.add(foodItem); } } } else { filteredItemList.addAll(allfoodMenuItems); } filterResults.count = filteredItemList.size(); filterResults.values = filteredItemList; return filterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { List<FoodMenuItem> filteredItemList = (List<FoodMenuItem>) results.values; foodMenuItems.clear(); foodMenuItems.addAll(filteredItemList); notifyDataSetChanged(); } } }