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