예제 #1
0
  @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();
      }
    }
  }
예제 #2
0
    @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;
    }
예제 #3
0
 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");
   }
 }
예제 #4
0
 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;
 }