package com.biznow.ordernow; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import android.app.ActionBar; import android.app.AlertDialog; import android.app.ProgressDialog; import android.app.SearchManager; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.provider.SearchRecentSuggestions; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.widget.DrawerLayout; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewConfiguration; import android.widget.CursorAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.SearchView; import android.widget.TextView; import android.widget.Toast; import com.biznow.ordernow.R; import com.biznow.ordernow.adapter.DownloadResturantMenu; import com.biznow.ordernow.adapter.ImageService; import com.biznow.ordernow.adapter.NewNavDrawerListAdapter; import com.biznow.ordernow.filter.AvailableMenuFilter; import com.biznow.ordernow.filter.MenuFilter; import com.biznow.ordernow.fragments.AddNoteDialogFragment; import com.biznow.ordernow.fragments.AddNoteListener; import com.biznow.ordernow.fragments.IndividualMenuTabFragment; import com.biznow.ordernow.fragments.MenuFragment; import com.biznow.ordernow.fragments.IndividualMenuTabFragment.numListener; import com.biznow.ordernow.model.CategoryNavDrawerItem; import com.biznow.ordernow.model.FoodMenuItem; import com.biznow.ordernow.model.MyOrderItem; import com.biznow.ordernow.model.OrderNowConstants; import com.data.database.CustomDbAdapter; import com.data.database.RestaurantHelper; import com.data.menu.Category; import com.data.menu.CategoryLevelFilter; import com.data.menu.CustomerOrderWrapper; import com.data.menu.Dish; import com.data.menu.DishIngredients; import com.data.menu.Ingredient; import com.data.menu.IngredientOption; import com.data.menu.MenuPropertyKey; import com.data.menu.MenuPropertyValue; import com.data.menu.Restaurant; import com.dm.zbar.android.scanner.ZBarConstants; import com.util.AsyncNetwork; import com.util.OrderNowUtilities; import com.util.URLBuilder; import com.util.Utilities; public class FoodMenuActivity extends FragmentActivity implements numListener, AddNoteListener, SearchView.OnQueryTextListener, SearchView.OnSuggestionListener { private Context context; private static final int MY_ORDER_REQUEST_CODE = 1; private DrawerLayout mDrawerLayout; private ExpandableListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; // nav drawer title private CharSequence mTitle; // used to store app title private ArrayList<CategoryNavDrawerItem> navDrawerItems; private HashMap<String, ArrayList<CategoryNavDrawerItem>> childDrawerItems; private NewNavDrawerListAdapter adapter; private Restaurant restaurant; private RestaurantHelper dh; private static Map<String, Boolean> restaurantLoadedInDb = new HashMap<String, Boolean>(); private SearchRecentSuggestions suggestionProvider; private CursorAdapter suggestionAdapter; private SearchView searchView; private ApplicationState applicationContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.food_menu); context = this; Utilities.info("FoodMenuActivity object on create " + this); applicationContext = (ApplicationState) getApplicationContext(); mTitle = getTitle(); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ExpandableListView) findViewById(R.id.list_slidermenu); // enabling action bar app icon and behaving it as toggle button ActionBar actionBar = getActionBar(); actionBar.setCustomView(R.layout.search_layout); //load your layout actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_CUSTOM|ActionBar.DISPLAY_SHOW_TITLE); //show it getActionBar().setDisplayHomeAsUpEnabled(true); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, // nav menu toggle icon R.string.app_name, // nav drawer open - description for accessibility R.string.app_name // nav drawer close - description for accessibility ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); // calling onPrepareOptionsMenu() to show action bar icons invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); // calling onPrepareOptionsMenu() to hide action bar icons invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); suggestionProvider = new SearchRecentSuggestions(this, SearchSuggestionProvider.AUTHORITY,SearchSuggestionProvider.MODE); getOverflowMenu(); } @Override protected void onStart() { super.onStart(); Utilities.info("FoodMenuActivity onStart called"); navDrawerItems = new ArrayList<CategoryNavDrawerItem>(); childDrawerItems = new HashMap<String, ArrayList<CategoryNavDrawerItem>>(); adapter = new NewNavDrawerListAdapter(getApplicationContext(), navDrawerItems,childDrawerItems); mDrawerList.setOnGroupClickListener(new SlideMenuClickListener()); mDrawerList.setOnChildClickListener(new SlideMenuChildClickListener()); mDrawerList.setAdapter(adapter); if(OrderNowConstants.IS_DEBUG_MODE && OrderNowConstants.IS_LOCAL_RESTURANT_ENABLED) { restaurant = getResturantLocaly(); } else { //Download the Restaurant Menu Asynchronously new DownloadRestaurantTask(context).execute(); } } private void getOverflowMenu() { try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if(menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } } private List<Category> getCategories() { Utilities.info(restaurant.getMenu().toString()); return restaurant.getMenu().getCategories(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); //MenuItem searchMenuItem = menu.findItem(R.id.search); //searchView = (SearchView) searchMenuItem.getActionView(); ActionBar actionBar = getActionBar(); actionBar.setCustomView(R.layout.search_layout); searchView = (SearchView) actionBar.getCustomView().findViewById(R.id.search); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setOnQueryTextListener(this); searchView.setOnSuggestionListener(this); suggestionAdapter = searchView.getSuggestionsAdapter(); // searchMenuItem.collapseActionView(); // searchView.setIconifiedByDefault(false); ImageView call_waiter = (ImageView) actionBar.getCustomView().findViewById(R.id.waiter); call_waiter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { callWaiterFunction(FoodMenuActivity.this); } }); RelativeLayout food_cart_layout = (RelativeLayout)menu.findItem(R.id.action_cart).getActionView(); TextView food_item_notification = (TextView)food_cart_layout.findViewById(R.id.food_cart_notifcation_textview); HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap((ApplicationState) getApplicationContext()); food_item_notification.setText(Integer.toString(foodMenuItemQuantityMap.keySet().size())); ImageView cart_image = (ImageView)food_cart_layout.findViewById(R.id.action_cart_image); final Context context = this; cart_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startMyOrderActivity(context); } }); return super.onCreateOptionsMenu(menu); } public static void callWaiterFunction(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder( context); builder.setTitle("Call Waiter"); builder.setMessage("Would you like to call a waiter?"); builder.setPositiveButton(R.string.yes, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ApplicationState applicationContext = (ApplicationState) context.getApplicationContext(); String tableId = OrderNowUtilities.getKeyFromSharedPreferences(applicationContext.getApplicationContext(), OrderNowConstants.KEY_ACTIVE_TABLE_ID); String url = new URLBuilder() .addPath(URLBuilder.Path.serveTable) .addAction(URLBuilder.URLAction.callWaiter) .addParam(URLBuilder.URLParam.tableId, tableId) .build(); try { new AsyncNetwork().execute(url).get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } Toast.makeText( context.getApplicationContext(), "A waiter will be coming soon to help you!", Toast.LENGTH_LONG).show(); } }); builder.setNegativeButton(R.string.no, null); AlertDialog alert = builder.create(); alert.show(); } private void startParentOrderActivity(final Context context) { ArrayList<CustomerOrderWrapper> subOrderList = OrderNowUtilities.getObjectFromSharedPreferences(getApplicationContext(), OrderNowConstants.KEY_ACTIVE_SUB_ORDER_LIST); if (subOrderList !=null && subOrderList.size() >= 1) { Intent intent = new Intent(context, MyParentOrderActivity.class); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "You currently have no confirmed orders to view.", Toast.LENGTH_LONG).show(); } } private void startMyOrderActivity(final Context context) { HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState .getFoodMenuItemQuantityMap((ApplicationState) getApplicationContext()); ArrayList<MyOrderItem> myOrderItems = new ArrayList<MyOrderItem>(); myOrderItems.addAll(foodMenuItemQuantityMap.values()); if (myOrderItems != null && myOrderItems.size() >= 1) { Intent intent = new Intent(context, MyOrderActivity.class); startActivityForResult(intent, MY_ORDER_REQUEST_CODE); } else { Toast.makeText(getApplicationContext(), "Hey wait!! Let's add some items to the order first.", Toast.LENGTH_LONG).show(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // toggle nav drawer on selecting action bar app icon/title searchView.setQuery("", true); mDrawerLayout.closeDrawer(Gravity.LEFT); if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } Intent intent = null; switch (item.getItemId()) { case R.id.action_cart : startMyOrderActivity(getApplicationContext()); return true; case R.id.confirmed_order : startParentOrderActivity(getApplicationContext()); return true; case R.id.search: onSearchRequested(); return true; case R.id.filter_menu: intent = new Intent(this, FilterMenuActivity.class); startActivity(intent); return true; case R.id.historybutton: intent = new Intent(this, MyOrderHistoryActivity.class); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case MY_ORDER_REQUEST_CODE: if (resultCode == RESULT_OK) { final ApplicationState applicationContext = (ApplicationState)getApplicationContext(); Log.i("on RESULT_OK ",""+ApplicationState.getCategoryId(applicationContext) + " " + ApplicationState.getChildCategoryId(applicationContext)); displayView(ApplicationState.getCategoryId(applicationContext), ApplicationState.getChildCategoryId(applicationContext)); } else if(resultCode == RESULT_CANCELED && data != null) { String error = data.getStringExtra(ZBarConstants.ERROR_INFO); if(!TextUtils.isEmpty(error)) { Toast.makeText(this, error, Toast.LENGTH_SHORT).show(); } Intent intent = new Intent(this, FoodMenuActivity.class); startActivity(intent); } break; } invalidateOptionsMenu(); } /*** * Called when invalidateOptionsMenu() is triggered */ @Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } /** * When using the ActionBarDrawerToggle, you must call it during * onPostCreate() and onConfigurationChanged()... */ @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Pass any configuration change to the drawer toggls mDrawerToggle.onConfigurationChanged(newConfig); } /** * Slide menu item click listener * */ private class SlideMenuClickListener implements ExpandableListView.OnGroupClickListener { @Override public boolean onGroupClick(ExpandableListView parent, View v, int position, long id) { if(adapter.getChildrenCount(position)==0) { displayView(position, -1); return true; } return false; } } private class SlideMenuChildClickListener implements OnChildClickListener { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { displayView(groupPosition, childPosition); return true; } } private void displayView(int position, int childPosition) { Category parentCategory = getCategories().get(position); Category category = parentCategory; if(childPosition >= 0) { List<Category> categories = parentCategory.getCategories(); if(categories != null && !categories.isEmpty()) { ApplicationState.setChildCategoryId((ApplicationState)getApplicationContext(), childPosition); category = categories.get(childPosition); } } String categoryName = category.getName(); Fragment menuFragment = null; if (category.getCategoryLevelFilter().getFilterName() == MenuPropertyKey.NULL) { menuFragment = IndividualMenuTabFragment.newInstance(categoryName, OrderNowUtilities.getFoodMenuItems(null), new MenuFilter()); } else { menuFragment = MenuFragment.newInstance(category); } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.frame_container, menuFragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); /*fragmentManager.addOnBackStackChangedListener( new FragmentManager.OnBackStackChangedListener() { public void onBackStackChanged() { updateActionBarTitle(); http://stackoverflow.com/questions/18305945/how-to-resume-fragment-from-backstack-if-exists/18306258#18306258 } });*/ CustomDbAdapter dbManager = CustomDbAdapter.getInstance(getBaseContext()); dh = new RestaurantHelper(dbManager); mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); ApplicationState.setCategoryId((ApplicationState)getApplicationContext(), position); setTitle(categoryName); mDrawerLayout.closeDrawer(mDrawerList); } @Override public float getQuantity(FoodMenuItem foodMenuItem) { final String itemName = foodMenuItem.getItemName(); HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap((ApplicationState)getApplicationContext()); if (foodMenuItemQuantityMap.get(itemName) != null) { return foodMenuItemQuantityMap.get(itemName).getQuantity(); } return 0; } @Override public void incrementQuantity(FoodMenuItem foodMenuItem) { final String itemName = foodMenuItem.getItemName(); ApplicationState applicationContext = (ApplicationState)getApplicationContext(); HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap(applicationContext); if (foodMenuItemQuantityMap.get(itemName) == null) { MyOrderItem myOrderItem = new MyOrderItem(foodMenuItem, 1); foodMenuItemQuantityMap.put(itemName, myOrderItem); } else { float quantity = foodMenuItemQuantityMap.get(itemName).getQuantity(); foodMenuItemQuantityMap.get(itemName).setQuantity(++quantity); } //updateFoodCartNotificationText(); invalidateOptionsMenu(); } @Override public void decrementQuantity(FoodMenuItem foodMenuItem) { float quantity = 0; final String itemName = foodMenuItem.getItemName(); ApplicationState applicationContext = (ApplicationState)getApplicationContext(); HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap(applicationContext); if (foodMenuItemQuantityMap.get(itemName) != null) { quantity = foodMenuItemQuantityMap.get(itemName).getQuantity(); quantity--; if (quantity == 0) { foodMenuItemQuantityMap.remove(itemName); } else { foodMenuItemQuantityMap.get(itemName).setQuantity(quantity); } } // updateFoodCartNotificationText(); invalidateOptionsMenu(); } private void loadRestaurantDishes(final Restaurant restaurant) { Utilities.info("restaurant load " + restaurant.getName() + restaurantLoadedInDb + restaurant.toString()); if (!restaurantLoadedInDb.containsKey(restaurant.getName())) { // load filter first time AvailableMenuFilter availableMenuFilter = null; if (restaurant.getAvailableFilters() != null) { availableMenuFilter = new AvailableMenuFilter(restaurant.getAvailableFilters()); } else { Map<MenuPropertyKey, List<MenuPropertyValue>> dishProperties = new HashMap<MenuPropertyKey, List<MenuPropertyValue>>(); //dishProperties.put(MenuPropertyKey.FoodType, Arrays.asList(MenuPropertyValue.Veg, MenuPropertyValue.NonVeg)); dishProperties.put(MenuPropertyKey.CuisineType, Arrays.asList(MenuPropertyValue.NorthIndian, MenuPropertyValue.SouthIndian)); availableMenuFilter = new AvailableMenuFilter(dishProperties); } ApplicationState.setAvailableMenuFilter((ApplicationState) getApplicationContext(), availableMenuFilter); new Thread(new Runnable() { public void run() { try { CustomDbAdapter dbManager = CustomDbAdapter.getInstance(getBaseContext()); RestaurantHelper dh = new RestaurantHelper(dbManager); for (Category category : restaurant.getMenu().getCategories()) { if (category.getDishes() != null && !category.getDishes().isEmpty()) { for (Dish dish : category.getDishes()) { dh.addDish(dish, category.getName()); // Populating images during db creation. if (dish.getImg() != null) { try { ImageService.getInstance().getImageWithCache(dish.getImg()); } catch (Exception e) { Utilities.error("Could not load iamge " + dish.getImg()); } } } } } restaurantLoadedInDb.put(restaurant.getName(), true); } catch (Exception e) { Utilities.error("Failed to load into DB " + e); } } }).start(); } } private Restaurant getResturantLocaly() { List<Integer> categoryItemName = new LinkedList<Integer>(); categoryItemName.add(R.array.soups); categoryItemName.add(R.array.starters); categoryItemName.add(R.array.salads); categoryItemName.add(R.array.sizzlers); categoryItemName.add(R.array.favourites); categoryItemName.add(R.array.frybowl); List<Integer> categoryItemPrice = new LinkedList<Integer>(); categoryItemPrice.add(R.array.soups_prices); categoryItemPrice.add(R.array.starters_prices); categoryItemPrice.add(R.array.salads_prices); categoryItemPrice.add(R.array.sizzlers_prices); categoryItemPrice.add(R.array.favourites_prices); categoryItemPrice.add(R.array.frybowl_prices); List<Integer> categoryItemID = new LinkedList<Integer>(); categoryItemID.add(R.array.soups_ids); categoryItemID.add(R.array.starters_ids); categoryItemID.add(R.array.salads_ids); categoryItemID.add(R.array.sizzlers_ids); categoryItemID.add(R.array.favourites_ids); categoryItemID.add(R.array.frybowl_ids); List<Integer> imageId = new LinkedList<Integer>(); imageId.add(R.array.soups_icons); imageId.add(R.array.starters_icons); imageId.add(R.array.salads_icons); imageId.add(R.array.sizzlers_icons); imageId.add(R.array.favourites_icons); imageId.add(R.array.frybowl_icons); String[] categoryNames = getResources().getStringArray(R.array.nav_drawer_items); List<Category> categories = new LinkedList<Category>(); for (int i = 0; i < categoryNames.length-1; i++) { Category category = new Category(); CategoryLevelFilter categoryProperty; if(i==2){ List<MenuPropertyValue> propertyValue = new ArrayList<MenuPropertyValue>(Arrays.asList(MenuPropertyValue.Beer, MenuPropertyValue.Whisky, MenuPropertyValue.Wine, MenuPropertyValue.Scotch)); categoryProperty = new CategoryLevelFilter(MenuPropertyKey.DrinkType, propertyValue ); } else { List<MenuPropertyValue> propertyValue = new ArrayList<MenuPropertyValue>(Arrays.asList(MenuPropertyValue.All, MenuPropertyValue.Veg, MenuPropertyValue.NonVeg)); categoryProperty = new CategoryLevelFilter(MenuPropertyKey.FoodType, propertyValue ); } category.setCategoryLevelFilter(categoryProperty ); getCategory(categoryNames[i], categoryItemName.get(i), categoryItemPrice.get(i), categoryItemID.get(i), imageId.get(i), category); // if(category.getName().equals("Soups")) { // Category category1 = new Category(); // List<Category> categories1 = new ArrayList<Category>(); // categories1.add(category); // category1.setCategories(categories1); // category1.setName("Chinese"); // category = category1; // } categories.add(category); } Category category = new Category(); int i = categoryNames.length-1; getLastCategory(categoryNames[i], categoryItemName.get(i), categoryItemPrice.get(i), categoryItemID.get(i), imageId.get(i), category); categories.add(category); com.data.menu.Menu menu = new com.data.menu.Menu(); menu.setCategories(categories); Restaurant restaurant = new Restaurant(); restaurant.setName("Eat 3"); restaurant.setMenu(menu); Map<MenuPropertyKey, List<MenuPropertyValue>> availableFilters = new HashMap<MenuPropertyKey, List<MenuPropertyValue>>(); List<MenuPropertyValue> cuisineTypeAvailableFilter = new ArrayList<MenuPropertyValue>((Arrays.asList(MenuPropertyValue.NorthIndian, MenuPropertyValue.SouthIndian))); availableFilters.put(MenuPropertyKey.CuisineType, cuisineTypeAvailableFilter ); restaurant.setAvailableFilters(availableFilters ); Utilities.info("FoodMenuActivity " + restaurant.toString()); loadRestaurantDishes(restaurant); this.restaurant = restaurant; String restaurantName = restaurant.getName(); mDrawerTitle = restaurantName; OrderNowUtilities.putKeyToSharedPreferences(getApplicationContext(), OrderNowConstants.KEY_ACTIVE_RESTAURANT_NAME, restaurantName); //save preferences Utilities.info("onPostExecute " + ApplicationState.getCategoryId(applicationContext) +" "+ApplicationState.getChildCategoryId(applicationContext)); if (ApplicationState.getCategoryId(applicationContext)> -1 && ApplicationState.getChildCategoryId(applicationContext) > -1) { displayView(ApplicationState.getCategoryId(applicationContext), ApplicationState.getChildCategoryId(applicationContext)); } else { displayView(0, 0); } for (Category iCategory : getCategories()) { CategoryNavDrawerItem categoryNavDrawerItem = new CategoryNavDrawerItem(iCategory); navDrawerItems.add(categoryNavDrawerItem); List<Category> childCategories = iCategory.getCategories(); if (childCategories != null && !childCategories.isEmpty()) { ArrayList<CategoryNavDrawerItem> childArrayList = new ArrayList<CategoryNavDrawerItem>(); for (Category childCategory : childCategories) { CategoryNavDrawerItem childCategoryNavDrawerItem = new CategoryNavDrawerItem(childCategory); childArrayList.add(childCategoryNavDrawerItem); } childDrawerItems.put(categoryNavDrawerItem.getTitle(), childArrayList); } } if (applicationContext.isOpenCategoryDrawer()) { mDrawerLayout.openDrawer(Gravity.LEFT); } return restaurant; } private void getCategory(String categoryName, int itemNameResource, int itemPriceResource, int itemDishIds, int itemImage , Category soupCategory) { soupCategory.setName(categoryName); if(categoryName == "soups"){ } List<Dish> dishes = new LinkedList<Dish>(); getDishes(dishes, itemNameResource, itemPriceResource, itemDishIds, itemImage); soupCategory.setDishes(dishes); } private void getLastCategory(String categoryName, int itemNameResource, int itemPriceResource, int itemDishIds, int itemImage , Category soupCategory) { soupCategory.setName(categoryName); List<Dish> dishes = new LinkedList<Dish>(); getLastCategoryDishes(dishes, itemNameResource, itemPriceResource, itemDishIds, itemImage); soupCategory.setDishes(dishes); } private void getDishes(List<Dish> dishes, int itemNameResource, int itemPriceResource, int itemDishIds, int itemImage) { String[] itemNames = getResources().getStringArray(itemNameResource); int[] itemPrices = getResources().getIntArray(itemPriceResource); String[] itemids = getResources().getStringArray(itemDishIds); //String[] itemImages = getResources().getStringArray(itemImage); for (int i = 0; itemNames != null && i < itemNames.length; i++) { Dish dish = new Dish(); dish.setName(itemNames[i]); dish.setPrice(itemPrices[i]); //dish.setImg(itemImages[i]); dish.setImg(""); if (i % 2 == 0) { Map<MenuPropertyKey, MenuPropertyValue> dishProperties = dish.getDishProperties(); dishProperties.put(MenuPropertyKey.FoodType, MenuPropertyValue.Veg); } else { Map<MenuPropertyKey, MenuPropertyValue> dishProperties = dish.getDishProperties(); dishProperties.put(MenuPropertyKey.FoodType, MenuPropertyValue.NonVeg); } dish.setDescription("item description comes here"); dish.setDishId(itemids[i]); dishes.add(dish); } } private void getLastCategoryDishes(List<Dish> dishes, int itemNameResource, int itemPriceResource, int itemDishIds, int itemImage) { String[] itemNames = getResources().getStringArray(itemNameResource); int[] itemPrices = getResources().getIntArray(itemPriceResource); String[] itemids = getResources().getStringArray(itemDishIds); //String[] itemImages = getResources().getStringArray(itemImage); int i = 0; for ( i = 0; itemNames != null && i < itemNames.length - 1; i++) { Dish dish = new Dish(); dish.setName(itemNames[i]); dish.setPrice(itemPrices[i]); //dish.setImg(itemImages[i]); dish.setImg(""); if (i % 2 == 0) { Map<MenuPropertyKey, MenuPropertyValue> dishProperties = dish.getDishProperties(); dishProperties.put(MenuPropertyKey.FoodType, MenuPropertyValue.Veg); } else { Map<MenuPropertyKey, MenuPropertyValue> dishProperties = dish.getDishProperties(); dishProperties.put(MenuPropertyKey.FoodType, MenuPropertyValue.NonVeg); } dish.setDescription("item description comes here"); dish.setDishId(itemids[i]); dish.setDishIngredients(constructDishIngredients()); dish.setIngredientCustomizable(true); dishes.add(dish); } Dish dish = new Dish(); dish.setName(itemNames[i]); dish.setPrice(itemPrices[i]); //dish.setImg(itemImages[i]); dish.setImg(""); if (i % 2 == 0) { Map<MenuPropertyKey, MenuPropertyValue> dishProperties = dish.getDishProperties(); dishProperties.put(MenuPropertyKey.FoodType, MenuPropertyValue.Veg); } else { Map<MenuPropertyKey, MenuPropertyValue> dishProperties = dish.getDishProperties(); dishProperties.put(MenuPropertyKey.FoodType, MenuPropertyValue.NonVeg); } dish.setDescription("item description comes here"); dish.setDishId(itemids[i]); dish.setDishIngredients(constructDishIngredients()); ArrayList<IngredientOption> selectedIngredientOptions = new ArrayList<IngredientOption>(); List<String> names = Arrays.asList(getResources().getStringArray(R.array.chef0)); for(String optionName : names ) { IngredientOption op = new IngredientOption(optionName); selectedIngredientOptions.add(op); } dish.setSelectedIngredientOptions(selectedIngredientOptions); dish.setIngredientCustomizable(true); dishes.add(dish); } private DishIngredients constructDishIngredients() { DishIngredients di = new DishIngredients(); ArrayList<Ingredient> ingList = new ArrayList<Ingredient>(); String[] ingTitle = getResources().getStringArray( R.array.ingredients_title); Ingredient ing = new Ingredient(ingTitle[0],constuctionOptions(Arrays.asList(getResources().getStringArray(R.array.ing0)))); ing.setMinOptionSelection(2); //FoodIngredient fi = new FoodIngredient(ing); ingList.add(ing); Ingredient ing1 = new Ingredient(ingTitle[1],constuctionOptions(Arrays.asList(getResources().getStringArray(R.array.ing1)))); //FoodIngredient fi1 = new FoodIngredient(ing1); ingList.add(ing1); Ingredient ing2 = new Ingredient(ingTitle[2],constuctionOptions(Arrays.asList(getResources().getStringArray(R.array.ing2)))); //FoodIngredient fi2 = new FoodIngredient(ing2); ingList.add(ing2); Ingredient ing3 = new Ingredient(ingTitle[3],constuctionOptions(Arrays.asList(getResources().getStringArray(R.array.ing3)))); //FoodIngredient fi3 = new FoodIngredient(ing3); ingList.add(ing3); di.setIngredients(ingList); return di; } private ArrayList<IngredientOption> constuctionOptions(List<String> names) { //List<String> optionNames = Arrays.asList(getResources().getStringArray(R.array.ing0)); ArrayList<IngredientOption> optionList = new ArrayList<IngredientOption>(); for(String optionName : names) { IngredientOption op = new IngredientOption(optionName); int random = Utilities.randInt(); if((random % 7) == 0) { op.setDescription("small description comes here"); } optionList.add(op); } return optionList; } private class DownloadRestaurantTask extends AsyncTask<String, Integer, Restaurant> { private Context context; private ProgressDialog progressDialog; public DownloadRestaurantTask(Context context) { this.context = context; } @Override protected void onPreExecute() { Utilities.info("inside PreExecute"); super.onPreExecute(); progressDialog = new ProgressDialog(context); progressDialog.setTitle("Loading Menu..."); progressDialog.setMessage("Please wait."); progressDialog.setCancelable(false); progressDialog.setIndeterminate(true); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.show(); } @Override protected Restaurant doInBackground(String... params) { CustomDbAdapter dbManager = CustomDbAdapter.getInstance(context); RestaurantHelper restHelper = new RestaurantHelper(dbManager); String tableId = OrderNowUtilities.getKeyFromSharedPreferences(applicationContext.getApplicationContext(), OrderNowConstants.KEY_ACTIVE_TABLE_ID); String resturantId = OrderNowUtilities.getKeyFromSharedPreferences(applicationContext.getApplicationContext(), OrderNowConstants.KEY_ACTIVE_RESTAURANT_ID); return DownloadResturantMenu.getInstance().getResturant(tableId, resturantId,restHelper); } @Override protected void onPostExecute(Restaurant result) { Utilities.info("inside PreExecute"); super.onPostExecute(result); restaurant = result; if (restaurant == null){ AlertDialog.Builder builder = new AlertDialog.Builder(FoodMenuActivity.this); builder.setTitle("Invalid QR code"); builder.setMessage("Please scan a valid QR code"); builder.setCancelable(false); builder.setPositiveButton(R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { OrderNowUtilities.sessionClean(applicationContext); Intent intent = new Intent(getApplicationContext(), QRCodeScannerActivity.class); startActivity(intent); finish(); } }); AlertDialog alert = builder.create(); alert.show(); if (progressDialog != null) { progressDialog.dismiss(); } } else { loadRestaurantDishes(restaurant); String restaurantName = restaurant.getName(); mDrawerTitle = restaurantName; OrderNowUtilities.putKeyToSharedPreferences(getApplicationContext(), OrderNowConstants.KEY_ACTIVE_RESTAURANT_NAME, restaurantName); //save preferences OrderNowUtilities.putKeyToSharedPreferences(getApplicationContext(), OrderNowConstants.KEY_ACTIVE_RESTAURANT_ID, restaurant.getrId()); Utilities.info("onPostExecute " + ApplicationState.getCategoryId(applicationContext) +" "+ApplicationState.getChildCategoryId(applicationContext)); for (Category category : getCategories()) { CategoryNavDrawerItem categoryNavDrawerItem = new CategoryNavDrawerItem(category); navDrawerItems.add(categoryNavDrawerItem); List<Category> childCategories = category.getCategories(); if (childCategories != null && !childCategories.isEmpty()) { ArrayList<CategoryNavDrawerItem> childArrayList = new ArrayList<CategoryNavDrawerItem>(); for (Category childCategory : childCategories) { CategoryNavDrawerItem childCategoryNavDrawerItem = new CategoryNavDrawerItem(childCategory); childArrayList.add(childCategoryNavDrawerItem); } childDrawerItems.put(categoryNavDrawerItem.getTitle(), childArrayList); } } if (ApplicationState.getCategoryId(applicationContext)> -1 && ApplicationState.getChildCategoryId(applicationContext) > -1) { displayView(ApplicationState.getCategoryId(applicationContext), ApplicationState.getChildCategoryId(applicationContext)); } else { displayView(0, 0); } if (applicationContext.isOpenCategoryDrawer()) { mDrawerLayout.openDrawer(mDrawerList); new Handler().postDelayed(new Runnable() { @Override public void run() { if (progressDialog != null) { progressDialog.dismiss(); } } }, 50); } else { if (progressDialog != null) { progressDialog.dismiss(); } } } } } @Override public void showNote(FoodMenuItem foodMenuItem) { HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap((ApplicationState)getApplicationContext()); AddNoteDialogFragment noteFragment = AddNoteDialogFragment.newInstance(foodMenuItem, foodMenuItemQuantityMap.get(foodMenuItem.getItemName())); noteFragment.show(getSupportFragmentManager(), "notes"); invalidateOptionsMenu(); } @Override public void saveNote(FoodMenuItem foodMenuItem, HashMap<String, String> metaData) { HashMap<String, MyOrderItem> foodMenuItemQuantityMap = ApplicationState.getFoodMenuItemQuantityMap((ApplicationState)getApplicationContext()); foodMenuItemQuantityMap.get(foodMenuItem.getItemName()).setNotes(""); foodMenuItemQuantityMap.get(foodMenuItem.getItemName()).setMetaData(metaData); invalidateOptionsMenu(); } @Override public boolean onSearchRequested() { //overriding this method is letting onQueryTextChange to work return false; } @Override public boolean onQueryTextChange(String newText) { if(newText == null || newText.isEmpty()) { return false; } String query = newText; if(dh!=null) { ArrayList<FoodMenuItem> searchDishList = (ArrayList<FoodMenuItem>) dh.searchDishes(query); //IndividualMenuTabFragment.newInstance("Search", searchDishList); Fragment fragment = IndividualMenuTabFragment.newInstance("Search", searchDishList, null); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); setTitle(newText); return true; } return false; } @Override public boolean onQueryTextSubmit(String finalText) { onQueryTextChange(finalText); suggestionProvider.saveRecentQuery(finalText, null); searchView.clearFocus(); return true; } @Override public boolean onSuggestionClick(int position) { String suggestion = (String) suggestionAdapter.convertToString((Cursor) suggestionAdapter.getItem(position)); searchView.setQuery(suggestion, false); searchView.clearFocus(); return true; } @Override public boolean onSuggestionSelect(int position) { return false; } @Override protected void onResume() { super.onResume(); Utilities.info("FoodMenuActivity onResume called"); invalidateOptionsMenu(); } @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() == 1){ finish(); } else { super.onBackPressed(); } } }