@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;
    }