package openfoodfacts.github.scrachx.openfood.fragments; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.customtabs.CustomTabsIntent; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import openfoodfacts.github.scrachx.openfood.R; import openfoodfacts.github.scrachx.openfood.models.NutrientLevelItem; import openfoodfacts.github.scrachx.openfood.models.NutrientLevels; import openfoodfacts.github.scrachx.openfood.models.NutrimentLevel; import openfoodfacts.github.scrachx.openfood.models.Nutriments; import openfoodfacts.github.scrachx.openfood.models.Product; import openfoodfacts.github.scrachx.openfood.models.State; import openfoodfacts.github.scrachx.openfood.utils.Utils; import openfoodfacts.github.scrachx.openfood.views.adapters.NutrientLevelListAdapter; import openfoodfacts.github.scrachx.openfood.views.customtabs.CustomTabActivityHelper; import openfoodfacts.github.scrachx.openfood.views.customtabs.CustomTabsHelper; import openfoodfacts.github.scrachx.openfood.views.customtabs.WebViewFallback; import static openfoodfacts.github.scrachx.openfood.utils.Utils.bold; import static openfoodfacts.github.scrachx.openfood.utils.Utils.getRoundNumber; public class NutritionProductFragment extends BaseFragment implements CustomTabActivityHelper.ConnectionCallback { @BindView(R.id.imageGrade) ImageView img; @BindView(R.id.listNutrientLevels) ListView lv; @BindView(R.id.textServingSize) TextView serving; @BindView(R.id.textCarbonFootprint) TextView carbonFootprint; private CustomTabActivityHelper customTabActivityHelper; private Uri nutritionScoreUri; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return createView(inflater, container, R.layout.fragment_nutrition_product); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Intent intent = getActivity().getIntent(); State state = (State) intent.getExtras().getSerializable("state"); final Product product = state.getProduct(); List<NutrientLevelItem> levelItem = new ArrayList<>(); Nutriments nutriments = product.getNutriments(); NutrientLevels nutrientLevels = product.getNutrientLevels(); NutrimentLevel fat = null; NutrimentLevel saturatedFat = null; NutrimentLevel sugars = null; NutrimentLevel salt = null; if(nutrientLevels != null) { fat = nutrientLevels.getFat(); saturatedFat = nutrientLevels.getSaturatedFat(); sugars = nutrientLevels.getSugars(); salt = nutrientLevels.getSalt(); } if (fat == null && salt == null && saturatedFat == null && sugars == null) { levelItem.add(new NutrientLevelItem(getString(R.string.txtNoData), "", "", R.drawable.error_image)); } else { // prefetch the uri customTabActivityHelper = new CustomTabActivityHelper(); customTabActivityHelper.setConnectionCallback(this); // currently only available in french translations nutritionScoreUri = Uri.parse("https://fr.openfoodfacts.org/score-nutritionnel-france"); customTabActivityHelper.mayLaunchUrl(nutritionScoreUri, null, null); Context context = this.getContext(); if (fat != null) { String fatNutrimentLevel = fat.getLocalize(context); Nutriments.Nutriment nutriment = nutriments.get(Nutriments.FAT); levelItem.add(new NutrientLevelItem(getString(R.string.txtFat), getRoundNumber(nutriment.getFor100g()) + " " + nutriment.getUnit(), fatNutrimentLevel, fat.getImageLevel())); } if (saturatedFat != null) { String saturatedFatLocalize = saturatedFat.getLocalize(context); Nutriments.Nutriment nutriment = nutriments.get(Nutriments.SATURATED_FAT); String saturatedFatValue = getRoundNumber(nutriment.getFor100g()) + " " + nutriment.getUnit(); levelItem.add(new NutrientLevelItem(getString(R.string.txtSaturatedFat), saturatedFatValue, saturatedFatLocalize, saturatedFat.getImageLevel())); } if (sugars != null) { String sugarsLocalize = sugars.getLocalize(context); Nutriments.Nutriment nutriment = nutriments.get(Nutriments.SUGARS); String sugarsValue = getRoundNumber(nutriment.getFor100g()) + " " + nutriment.getUnit(); levelItem.add(new NutrientLevelItem(getString(R.string.txtSugars), sugarsValue, sugarsLocalize, sugars.getImageLevel())); } if (salt != null) { String saltLocalize = salt.getLocalize(context); Nutriments.Nutriment nutriment = nutriments.get(Nutriments.SALT); String saltValue = getRoundNumber(nutriment.getFor100g()) + " " + nutriment.getUnit(); levelItem.add(new NutrientLevelItem(getString(R.string.txtSalt), saltValue, saltLocalize, salt.getImageLevel())); } img.setImageDrawable(ContextCompat.getDrawable(context, Utils.getImageGrade(product.getNutritionGradeFr()))); img.setOnClickListener(view1 -> { CustomTabsIntent customTabsIntent = CustomTabsHelper.getCustomTabsIntent(getContext(), customTabActivityHelper.getSession()); CustomTabActivityHelper.openCustomTab(NutritionProductFragment.this.getActivity(), customTabsIntent, nutritionScoreUri, new WebViewFallback()); }); } lv.setAdapter(new NutrientLevelListAdapter(getContext(), levelItem)); if (TextUtils.isEmpty(product.getServingSize())) { serving.setVisibility(View.GONE); } else { serving.append(bold(getString(R.string.txtServingSize))); serving.append(" "); serving.append(product.getServingSize()); } if (!nutriments.contains(Nutriments.CARBON_FOOTPRINT)) { carbonFootprint.setVisibility(View.GONE); } else { Nutriments.Nutriment carbonFootprintNutriment = nutriments.get(Nutriments.CARBON_FOOTPRINT); carbonFootprint.append(bold(getString(R.string.textCarbonFootprint))); carbonFootprint.append(carbonFootprintNutriment.getFor100g()); carbonFootprint.append(carbonFootprintNutriment.getUnit()); } } @Override public void onCustomTabsConnected() { img.setClickable(true); } @Override public void onCustomTabsDisconnected() { img.setClickable(false); } }