package ca.uwaterloo.uwfoodservices; import java.util.ArrayList; import java.util.List; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import ca.uwaterloo.uwfoodservicesutility.NetworkReceiver; import ca.uwaterloo.uwfoodservicesutility.ParseProductInfo; import ca.uwaterloo.uwfoodservicesutility.ProductInfoHolder; import ca.uwaterloo.uwfoodservicesutility.RestaurantMenuHolder; import ca.uwaterloo.uwfoodservicesutility.RestaurantMenuItem; public class ProductInfo extends Activity{ int restaurantPosition; long productDay; String selectedItem; int currentPosition; int weekDay; ArrayList<Integer> productIds; int tabPosition; ArrayList<RestaurantMenuItem> productList; static List<String> productInfoUrls; static List<String> productNames; RestaurantMenuHolder menuHolder; SharedPreferences.Editor editor; SharedPreferences pref; NetworkReceiver receiver; static ParseProductInfo productInfoParser; static boolean loaded = false; @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_product_info); receiver = new NetworkReceiver(this); pref = PreferenceManager.getDefaultSharedPreferences(this); Intent intent = getIntent(); restaurantPosition = intent.getIntExtra("Restaurant Position", -1); productDay = intent.getLongExtra("Product Day", -1); currentPosition = intent.getIntExtra("Current Position", -1); weekDay = intent.getIntExtra("Weekday", -1); selectedItem = intent.getStringExtra("Selected Item"); productIds = new ArrayList<Integer>(); productNames = new ArrayList<String>(); menuHolder = RestaurantMenuHolder.getInstance(); if (menuHolder.getRestaurantMenu().get(restaurantPosition).getMenu()[weekDay].getLunch() != null) { if (currentPosition > menuHolder.getRestaurantMenu() .get(restaurantPosition).getMenu()[weekDay].getLunch().size()) { productList = menuHolder.getRestaurantMenu().get(restaurantPosition).getMenu()[weekDay].getDinner(); } else { productList = menuHolder.getRestaurantMenu().get(restaurantPosition).getMenu()[weekDay].getLunch(); } for (int i = 0; i < productList.size(); i++) { if (productList.get(i).getProductID() != null) { productIds.add(productList.get(i).getProductID()); productNames.add(productList.get(i).getProductName()); } } } productInfoUrls = new ArrayList<String>(); for (Integer id:productIds) { if (id != null) { productInfoUrls.add("http://api.uwaterloo.ca/public/v2/foodservices/product/" + id + ".json?key=98bbbd30b3e4f621d9cb544a790086d6"); } } productInfoParser = new ParseProductInfo(); new AsyncDataFetcher().execute(productInfoUrls); tabPosition = 0; for (int i = 0; i < productNames.size(); i ++) { if (productNames.get(i).equals(selectedItem)) { tabPosition = i; } } } private static class AsyncDataFetcher extends AsyncTask<List<String>, Void, Void> { public AsyncDataFetcher() { } @Override protected Void doInBackground(List<String>... urls) { List<JSONObject> jsonList = new ArrayList<JSONObject>(); JSONParser json_parse = new JSONParser(); for (int i = 0; i < urls[0].size(); i ++) { jsonList.add(json_parse.getJSONFromUrl(urls[0].get(i))); } if(jsonList != null){ productInfoParser.Parse(jsonList); loaded = true; } return null; } } public static class ProductInfoAdapter extends FragmentPagerAdapter { private ArrayList<ProductInfoFragment> mFragments; public ProductInfoAdapter(FragmentManager fm) { super(fm); mFragments = new ArrayList<ProductInfoFragment>(); for (int i = 0; i < productInfoUrls.size(); i++) { mFragments.add(new ProductInfoFragment()); } } @Override public int getCount() { return productInfoUrls.size(); } @Override public Fragment getItem(int position) { Fragment fragment = new ProductInfoFragment(); Bundle args = new Bundle(); args.putInt(ProductInfoFragment.ARG_SECTION_NUMBER, position); fragment.setArguments(args); return fragment; } } public static class ProductInfoFragment extends Fragment { public static final String ARG_SECTION_NUMBER = "section_number"; int position; List<String> left_list = new ArrayList<String>(); List<String> right_list = new ArrayList<String>(); String serving; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_restaurant_menu, container, false); position = getArguments().getInt(ARG_SECTION_NUMBER); ListView listView = (ListView) rootView.findViewById(R.id.list_menu); while(loaded == false) { } ProductInfoHolder productInfoHolder = ProductInfoHolder.getInstance(); left_list.clear(); right_list.clear(); serving = "Per " + productInfoHolder.productInfo.get(position).get_serving_size(); if (productInfoHolder.productInfo.get(position).get_serving_size_unit().equals("g")) { serving += " grams"; } else { serving += " ml"; } left_list.add(serving); right_list.add(""); left_list.add("Amount"); right_list.add("% Daily Value"); left_list.add("Calories " + productInfoHolder.productInfo.get(position).get_calories()); right_list.add(""); left_list.add("Fat " + productInfoHolder.productInfo.get(position).get_total_fat_g() + " g"); right_list.add(productInfoHolder.productInfo.get(position).get_total_fat_percent() + " %"); left_list.add(" Saturated " + productInfoHolder.productInfo.get(position).get_fat_saturated_g() + " g"); right_list.add(productInfoHolder.productInfo.get(position).get_fat_saturated_percent() + " %"); if (productInfoHolder.productInfo.get(position).get_fat_trans_g() != null) { left_list.add(" Trans " + productInfoHolder.productInfo.get(position).get_fat_trans_g() + ""); right_list.add(productInfoHolder.productInfo.get(position).get_fat_trans_percent() + " %"); } left_list.add("Cholesterol " + productInfoHolder.productInfo.get(position).get_cholesterol_mg() + " mg"); right_list.add(""); left_list.add("Sodium " + productInfoHolder.productInfo.get(position).get_sodium_mg() + " mg"); right_list.add(productInfoHolder.productInfo.get(position).get_sodium_percent() + " %"); if (productInfoHolder.productInfo.get(position).get_carbo_g() != null) { left_list.add("Carbohydrate " + productInfoHolder.productInfo.get(position).get_carbo_g() + " g"); right_list.add(productInfoHolder.productInfo.get(position).get_carbo_percent() + " %"); if (productInfoHolder.productInfo.get(position).get_carbo_fibre_g() != null) { left_list.add(" Fibre " + productInfoHolder.productInfo.get(position).get_carbo_fibre_g() + " g"); right_list.add(""); } if (productInfoHolder.productInfo.get(position).get_carbo_fibre_percent() != null) { left_list.add(" Sugars " + productInfoHolder.productInfo.get(position).get_carbo_fibre_percent() + " g"); right_list.add(""); } } left_list.add("Protein " + productInfoHolder.productInfo.get(position).get_protein_g() + " g"); right_list.add(""); if (productInfoHolder.productInfo.get(position).get_vitamin_a_percent() != null) { left_list.add("Vitamin A"); right_list.add(productInfoHolder.productInfo.get(position).get_vitamin_a_percent() + " %"); } if (productInfoHolder.productInfo.get(position).get_vitamin_c_percent() != null) { left_list.add("Vitamin C"); right_list.add(productInfoHolder.productInfo.get(position).get_vitamin_c_percent() + " %"); } if (productInfoHolder.productInfo.get(position).get_calcium_percent() != null) { left_list.add("Calcium"); right_list.add(productInfoHolder.productInfo.get(position).get_calcium_percent() + " %"); } if (productInfoHolder.productInfo.get(position).get_iron_percent() != null) { left_list.add("Iron"); right_list.add(productInfoHolder.productInfo.get(position).get_iron_percent() + " %"); } ProductInfoAdapter productInfoAdapter = new ProductInfoAdapter(getActivity()); listView.setAdapter(productInfoAdapter); return rootView; } private class ProductInfoAdapter extends BaseAdapter { private final Context mContext; public ProductInfoAdapter(Context context) { mContext = context; } @Override public int getCount() { return left_list.size(); } @Override public boolean areAllItemsEnabled() { return true; } @Override public boolean isEnabled(int position) { return true; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View item = convertView; item = LayoutInflater.from(mContext).inflate(R.layout.lv_nutrition, parent, false); Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "Roboto-Light.ttf"); TextView item_nutrition = (TextView)item.findViewById(R.id.lv_item_nutrition); item_nutrition.setText(left_list.get(position % left_list.size())); item_nutrition.setTypeface(tf); TextView item_percent = (TextView)item.findViewById(R.id.lv_item_percent); item_percent.setText(right_list.get(position % right_list.size())); item_percent.setTypeface(tf); return item; } } } }