package openfoodfacts.github.scrachx.openfood.fragments; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.afollestad.materialdialogs.MaterialDialog; import com.squareup.picasso.Picasso; import java.io.File; import java.util.List; import butterknife.BindView; import butterknife.OnClick; import openfoodfacts.github.scrachx.openfood.R; import openfoodfacts.github.scrachx.openfood.models.Product; import openfoodfacts.github.scrachx.openfood.models.ProductImage; import openfoodfacts.github.scrachx.openfood.models.State; import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient; import openfoodfacts.github.scrachx.openfood.utils.Utils; import openfoodfacts.github.scrachx.openfood.views.FullScreenImage; import pl.aprilapps.easyphotopicker.DefaultCallback; import pl.aprilapps.easyphotopicker.EasyImage; import static android.Manifest.permission.CAMERA; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static openfoodfacts.github.scrachx.openfood.models.ProductImageField.FRONT; import static openfoodfacts.github.scrachx.openfood.models.ProductImageField.OTHER; import static openfoodfacts.github.scrachx.openfood.utils.Utils.MY_PERMISSIONS_REQUEST_CAMERA; import static openfoodfacts.github.scrachx.openfood.utils.Utils.bold; import static org.apache.commons.lang3.StringUtils.isBlank; import static org.apache.commons.lang3.StringUtils.isNotBlank; public class SummaryProductFragment extends BaseFragment { @BindView(R.id.textNameProduct) TextView nameProduct; @BindView(R.id.textGenericNameProduct) TextView genericNameProduct; @BindView(R.id.textBarcodeProduct) TextView barCodeProduct; @BindView(R.id.textQuantityProduct) TextView quantityProduct; @BindView(R.id.textPackagingProduct) TextView packagingProduct; @BindView(R.id.textBrandProduct) TextView brandProduct; @BindView(R.id.textManufacturingProduct) TextView manufacturingProduct; @BindView(R.id.textIngredientsOriginProduct) TextView ingredientsOrigin; @BindView(R.id.textCityProduct) TextView cityProduct; @BindView(R.id.textStoreProduct) TextView storeProduct; @BindView(R.id.textCountryProduct) TextView countryProduct; @BindView(R.id.textCategoryProduct) TextView categoryProduct; @BindView(R.id.textLabelProduct) TextView labelProduct; @BindView(R.id.imageViewFront) ImageView mImageFront; @BindView(R.id.addPhotoLabel) TextView addPhotoLabel; @BindView(R.id.buttonMorePictures) Button addMorePicture; private OpenFoodAPIClient api; private String mUrlImage; private String barcode; private boolean sendOther = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { api = new OpenFoodAPIClient(getActivity()); return createView(inflater, container, R.layout.fragment_summary_product); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Intent intent = getActivity().getIntent(); final State state = (State) intent.getExtras().getSerializable("state"); final Product product = state.getProduct(); barcode = product.getCode(); if (isNotBlank(product.getImageUrl())) { addPhotoLabel.setVisibility(View.GONE); Picasso.with(view.getContext()) .load(product.getImageUrl()) .into(mImageFront); mUrlImage = product.getImageUrl(); } //TODO use OpenFoodApiService to fetch product by packaging, brands, categories etc if(isNotBlank(product.getProductName())) { nameProduct.setText(product.getProductName()); } else { nameProduct.setVisibility(View.GONE); } if (isNotBlank(product.getGenericName())) { genericNameProduct.setText(bold(getString(R.string.txtGenericName))); genericNameProduct.append(' ' + product.getGenericName()); } else { genericNameProduct.setVisibility(View.GONE); } if(isNotBlank(barcode)) { barCodeProduct.setText(bold(getString(R.string.txtBarcode))); barCodeProduct.append(' ' + barcode); } else { barCodeProduct.setVisibility(View.GONE); } if(isNotBlank(product.getQuantity())) { quantityProduct.setText(bold(getString(R.string.txtQuantity))); quantityProduct.append(' ' + product.getQuantity()); } else { quantityProduct.setVisibility(View.GONE); } if(isNotBlank(product.getPackaging())) { packagingProduct.setText(bold(getString(R.string.txtPackaging))); packagingProduct.append(' ' + product.getPackaging()); } else { packagingProduct.setVisibility(View.GONE); } if(isNotBlank(product.getBrands())) { brandProduct.setText(bold(getString(R.string.txtBrands))); brandProduct.append(' ' + product.getBrands()); } else { brandProduct.setVisibility(View.GONE); } if(isNotBlank(product.getManufacturingPlaces())) { manufacturingProduct.setText(bold(getString(R.string.txtManufacturing))); manufacturingProduct.append(' ' + product.getManufacturingPlaces()); } else { manufacturingProduct.setVisibility(View.GONE); } if (isBlank(product.getOrigins())) { ingredientsOrigin.setVisibility(View.GONE); } else { ingredientsOrigin.setText(bold(getString(R.string.txtIngredientsOrigins))); ingredientsOrigin.append(' ' + product.getOrigins()); } String categ; if (isNotBlank(product.getCategories())) { categ = product.getCategories().replace(",", ", "); categoryProduct.setText(bold(getString(R.string.txtCategories))); categoryProduct.append(' ' + categ); } else { categoryProduct.setVisibility(View.GONE); } String labels = product.getLabels(); if (isNotBlank(labels)) { labelProduct.append(bold(getString(R.string.txtLabels))); labelProduct.append(" "); for (String label : labels.split(",")) { labelProduct.append(label.trim()); labelProduct.append(", "); } } else { labelProduct.setVisibility(View.GONE); } if(product.getCitiesTags() != null && !product.getCitiesTags().toString().trim().equals("[]")) { cityProduct.setText(bold(getString(R.string.txtCity))); cityProduct.append(' ' + product.getCitiesTags().toString().replace("[", "").replace("]", "")); } else { cityProduct.setVisibility(View.GONE); } if(isNotBlank(product.getStores())) { storeProduct.setText(bold(getString(R.string.txtStores))); storeProduct.append(' ' + product.getStores()); } else { storeProduct.setVisibility(View.GONE); } if(isNotBlank(product.getCountries())) { countryProduct.setText(bold(getString(R.string.txtCountries))); countryProduct.append(' ' + product.getCountries()); } else { countryProduct.setVisibility(View.GONE); } } @OnClick(R.id.buttonMorePictures) public void takeMorePicture() { if (ContextCompat.checkSelfPermission(getActivity(), CAMERA) != PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } else { sendOther = true; EasyImage.openCamera(this, 0); } } @OnClick(R.id.imageViewFront) public void openFullScreen(View v) { if (mUrlImage != null) { Intent intent = new Intent(v.getContext(), FullScreenImage.class); Bundle bundle = new Bundle(); bundle.putString("imageurl", mUrlImage); intent.putExtras(bundle); startActivity(intent); } else { // take a picture if (ContextCompat.checkSelfPermission(getActivity(), CAMERA) != PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } else { sendOther = false; EasyImage.openCamera(this, 0); } } } private void onPhotoReturned(File photoFile) { ProductImage image = new ProductImage(barcode, FRONT, photoFile); api.postImg(getContext(), image); addPhotoLabel.setVisibility(View.GONE); mUrlImage = photoFile.getAbsolutePath(); Picasso.with(getContext()) .load(photoFile) .fit() .into(mImageFront); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); EasyImage.handleActivityResult(requestCode, resultCode, data, getActivity(), new DefaultCallback() { @Override public void onImagePickerError(Exception e, EasyImage.ImageSource source, int type) { //Some error handling } @Override public void onImagesPicked(List<File> imageFiles, EasyImage.ImageSource source, int type) { if(!sendOther) { onPhotoReturned(imageFiles.get(0)); } else { ProductImage image = new ProductImage(barcode, OTHER, imageFiles.get(0)); api.postImg(getContext(), image); } } @Override public void onCanceled(EasyImage.ImageSource source, int type) { //Cancel handling, you might wanna remove taken photo if it was canceled if (source == EasyImage.ImageSource.CAMERA) { File photoFile = EasyImage.lastlyTakenButCanceledPhoto(getContext()); if (photoFile != null) photoFile.delete(); } } }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CAMERA: { if (grantResults.length <= 0 || grantResults[0] != PERMISSION_GRANTED) { new MaterialDialog.Builder(getActivity()) .title(R.string.permission_title) .content(R.string.permission_denied) .negativeText(R.string.txtNo) .positiveText(R.string.txtYes) .onPositive((dialog, which) -> { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null); intent.setData(uri); startActivity(intent); }) .show(); } else { sendOther = false; EasyImage.openCamera(this, 0); } } } } }