package com.biznow.ordernow.adapter;
import java.util.HashMap;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.Toast;
import com.biznow.ordernow.ApplicationState;
import com.biznow.ordernow.R;
import com.biznow.ordernow.model.MyOrderItem;
import com.biznow.ordernow.model.OrderNowConstants;
public class MyOrderAdapter extends ArrayAdapter<MyOrderItem> {
private ApplicationState applicationState;
private static final String TEXT_COMMENT = "TextComment";
List<MyOrderItem> myOrderItemList ;
public MyOrderAdapter(Context context, List<MyOrderItem> myOrderItemList) {
super(context, R.layout.my_order, myOrderItemList);
applicationState = (ApplicationState) context.getApplicationContext();
this.myOrderItemList = myOrderItemList;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.my_order, null);
}
TextView itemName = (TextView) convertView.findViewById(R.id.itemName);
TextView itemNote = (TextView) convertView.findViewById(R.id.itemNote);
final TextView quantity = (TextView) convertView.findViewById(R.id.quantity);
final TextView itemTotalPrice = (TextView) convertView.findViewById(R.id.itemTotalPrice);
String orderItemName = myOrderItemList.get(position).getFoodMenuItem().getItemName();
String orderItemNote = null;
if (myOrderItemList.get(position).getMetaData() != null) {
orderItemNote = myOrderItemList.get(position).getMetaData().get(TEXT_COMMENT);
}
Float orderItemQuantity = myOrderItemList.get(position).getQuantity();
Float orderItemPrice = myOrderItemList.get(position).getFoodMenuItem().getItemPrice();
itemName.setText(orderItemName);
if(orderItemNote != null) {
itemNote.setText(orderItemNote);
} else {
itemNote.setVisibility(View.GONE);
itemName.setGravity(Gravity.CENTER_VERTICAL);
}
quantity.setText(Float.toString(orderItemQuantity));
itemTotalPrice.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString(orderItemPrice * orderItemQuantity));
final ImageButton decrementQtyBtn = (ImageButton) convertView.findViewById(R.id.decrementQtyButton);
final ImageButton incrementQtyBtn = (ImageButton) convertView.findViewById(R.id.incrementQtyButton);
decrementQtyBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap(applicationState);
Float qty = Float.parseFloat((String) quantity.getText());
String orderItemPriceStr = (String) itemTotalPrice.getText();
if (orderItemPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) != -1){
orderItemPriceStr = orderItemPriceStr.substring(orderItemPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) + 1).trim();
}
final Float orderItemPrice = Float.parseFloat(orderItemPriceStr);
RelativeLayout r = (RelativeLayout) ((ViewGroup) parent).getParent(); // This is to get the Parent View of the List View
final TextSwitcher orderTotalPriceView = (TextSwitcher) r.findViewById(R.id.relativeBtnLayout).findViewById(R.id.totalAmount);
if (qty > 1) {
itemTotalPrice.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString((orderItemPrice/qty) * (qty - 1)));
quantity.setText(Float.toString(qty - 1));
String orderTotalPriceStr = (String) ((TextView)orderTotalPriceView.getCurrentView()).getText();
if (orderTotalPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) != -1){
orderTotalPriceStr = orderTotalPriceStr.substring(orderTotalPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) + 1).trim();
}
Float newOrderTotalPrice = Float.parseFloat(orderTotalPriceStr) - (orderItemPrice/qty);
orderTotalPriceView.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString(newOrderTotalPrice));
myOrderItemList.get(position).setQuantity(qty - 1);
foodMenuItemQuantityMap.get(myOrderItemList.get(position).getFoodMenuItem().getItemName()).setQuantity(qty-1);
} else if (qty == 1){
//Show Dialog and Remove Item from ListView on Positive Button Action
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Remove Item");
builder.setMessage("Are you sure you want to remove this item from the order?");
builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap(applicationState);
foodMenuItemQuantityMap.remove(getItem(position).getFoodMenuItem().getItemName());
remove(getItem(position));
notifyDataSetChanged();
String orderTotalPriceStr = (String) ((TextView)orderTotalPriceView.getCurrentView()).getText();
if (orderTotalPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) != -1){
orderTotalPriceStr = orderTotalPriceStr.substring(orderTotalPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) + 1).trim();
}
Float newOrderTotalPrice = Float.parseFloat(orderTotalPriceStr) - (orderItemPrice);
orderTotalPriceView.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString(newOrderTotalPrice));
}
});
builder.setNegativeButton(R.string.cancel, null);
AlertDialog alert = builder.create();
alert.show();
} else {
Toast.makeText(getContext(), "Quantity cannnot be decreased below zero", Toast.LENGTH_SHORT).show();
}
}
});
incrementQtyBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Float qty = Float.parseFloat((String) quantity.getText());
String orderItemPriceStr = (String) itemTotalPrice.getText();
if (orderItemPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) != -1){
orderItemPriceStr = orderItemPriceStr.substring(orderItemPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) + 1).trim();
}
Float orderItemPrice = Float.parseFloat(orderItemPriceStr);
RelativeLayout r = (RelativeLayout) ((ViewGroup) parent).getParent(); // This is to get the Parent View of the List View
final TextSwitcher orderTotalPriceView = (TextSwitcher) r.findViewById(R.id.relativeBtnLayout).findViewById(R.id.totalAmount);
if (qty == 0){
Toast.makeText(getContext(), "Cannot determine Unit Price if the Quantity is zero", Toast.LENGTH_SHORT).show();
} else {
itemTotalPrice.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString((orderItemPrice/qty) * (qty + 1)));
quantity.setText(Float.toString(qty + 1));
String orderTotalPriceStr = (String) ((TextView)orderTotalPriceView.getCurrentView()).getText();
if (orderTotalPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) != -1){
orderTotalPriceStr = orderTotalPriceStr.substring(orderTotalPriceStr.indexOf(OrderNowConstants.INDIAN_RUPEE_UNICODE) + 1).trim();
}
Float newOrderTotalPrice = Float.parseFloat(orderTotalPriceStr) + (orderItemPrice/qty);
orderTotalPriceView.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString(newOrderTotalPrice));
myOrderItemList.get(position).setQuantity(qty + 1);
}
}
});
return convertView;
}
}