@Override public void onDialogPositiveClick(DialogFragment dialog) { // User touched the dialog's positive button - "Add to Meal" FoodInfoFragment frag = (FoodInfoFragment) dialog; if (replacedFood == null) { // First prompt for density or servings if (frag.food.usesMass()) { if (FoodItem.getAllDensities() == null) { displayToast("Error: Cannot access densities.", this); return; } findDensityMatches(frag.food); } else if (!frag.food.usesVolume()) { DialogFragment servingsDialog = FoodServingFragment.newInstance(frag.food, false); servingsDialog.show(getFragmentManager(), "FoodServingFragment"); } else { // Only uses volume, nothing else needed meal.addFoodItem(frag.food); displayToast("Added to meal.", this); saveAndFinish(); } } else { // Replace previously added food item if (frag.food.usesMass()) { if (FoodItem.getAllDensities() == null) { displayToast("Error: Cannot access densities.", this); return; } findDensityMatches(frag.food); } else if (!frag.food.usesVolume()) { DialogFragment servingsDialog = FoodServingFragment.newInstance(frag.food, false); servingsDialog.show(getFragmentManager(), "FoodServingFragment"); } else { // Only uses volume, nothing else needed meal.replaceFoodItem(replacedFood, frag.food); displayToast("Replaced food item.", this); saveAndFinish(); } } }
@Override protected Map<String, Double> doInBackground(Void... params) { Map<String, Double> results = new HashMap<>(); for (Map.Entry<String, Double> entry : FoodItem.getAllDensities().entrySet()) { String[] words = food.getName().split("\\s+"); for (String word : words) { // boolean contains = entry.getKey().toLowerCase().matches(".*\\b" + word.toLowerCase() + // "\\b.*"); String cleanedWord = word.replaceAll("[^\\w]", ""); if (cleanedWord.equals("")) { continue; } boolean contains = entry.getKey().toLowerCase().matches(".*\\b" + cleanedWord.toLowerCase() + "\\b.*"); if (contains) { results.put(entry.getKey(), entry.getValue()); } } } return results; }
public void findDensityMatchesCallback(Map<String, Double> matches, FoodItem food) { if (matches.size() == 0) { displayToast("Error: No density matches found.", this); } else if (matches.size() == 1) { // Only one match found, add it automatically Map.Entry<String, Double> entry = matches.entrySet().iterator().next(); food.setDensity(entry.getValue()); food.setDensityName(entry.getKey()); if (replacedFood == null) { meal.addFoodItem(food); displayToast("Added to meal.", this); saveAndFinish(); } else { meal.replaceFoodItem(replacedFood, food); displayToast("Replaced food item.", this); saveAndFinish(); } } else { // Multiple matches. Display dialog list to allow user to pick displayToast("Multiple densities found.", this); DialogFragment dialog = FoodDensityFragment.newInstance(food, matches); dialog.show(getFragmentManager(), "FoodDensityFragment"); } }
private FoodItem readFoodInfo(JsonReader reader) throws IOException { FoodItem food = new FoodItem(); reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("item_name") && reader.peek() != JsonToken.NULL) { food.setName(reader.nextString()); } else if (name.equals("brand_name") && reader.peek() != JsonToken.NULL) { food.setBrand(reader.nextString()); } else if (name.equals("nf_serving_size_qty") && reader.peek() != JsonToken.NULL) { food.setServingSize(reader.nextDouble()); } else if (name.equals("nf_serving_size_unit") && reader.peek() != JsonToken.NULL) { food.setServingSizeUnit(reader.nextString()); } else if (name.equals("nf_calories")) { if (reader.peek() == JsonToken.NULL) { food.setField("Calories", 0.0); reader.skipValue(); } else { food.setField("Calories", reader.nextDouble()); } } else if (name.equals("nf_total_fat")) { if (reader.peek() == JsonToken.NULL) { food.setField("Total Fat", 0.0); reader.skipValue(); } else { food.setField("Total Fat", reader.nextDouble()); } } else if (name.equals("nf_sodium")) { if (reader.peek() == JsonToken.NULL) { food.setField("Sodium", 0.0); reader.skipValue(); } else { food.setField("Sodium", reader.nextDouble()); } } else if (name.equals("nf_total_carbohydrate")) { if (reader.peek() == JsonToken.NULL) { food.setField("Total Carbohydrate", 0.0); reader.skipValue(); } else { food.setField("Total Carbohydrate", reader.nextDouble()); } } else if (name.equals("nf_sugars")) { if (reader.peek() == JsonToken.NULL) { food.setField("Sugars", 0.0); reader.skipValue(); } else { food.setField("Sugars", reader.nextDouble()); } } else if (name.equals("nf_protein")) { if (reader.peek() == JsonToken.NULL) { food.setField("Protein", 0.0); reader.skipValue(); } else { food.setField("Protein", reader.nextDouble()); } } else { reader.skipValue(); } } reader.endObject(); return food; }