package eu.ttbox.androgister.ui.admin.product;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import de.greenrobot.dao.query.LazyList;
import eu.ttbox.androgister.R;
import eu.ttbox.androgister.domain.Product;
import eu.ttbox.androgister.domain.ProductDao;
import eu.ttbox.androgister.domain.ProductDao.Properties;
import eu.ttbox.androgister.domain.Tag;
import eu.ttbox.androgister.domain.TagDao;
import eu.ttbox.androgister.domain.Taxe;
import eu.ttbox.androgister.domain.TaxeDao;
import eu.ttbox.androgister.ui.admin.product.photo.PhotoActionPopup;
import eu.ttbox.androgister.ui.admin.product.photo.PhotoSelectionHandler;
import eu.ttbox.androgister.ui.admin.tag.TagListAdapter;
import eu.ttbox.androgister.ui.admin.taxe.TaxeListAdapter;
import eu.ttbox.androgister.ui.core.crud.CrudHelper;
import eu.ttbox.androgister.ui.core.crud.EntityEditFragment;
import eu.ttbox.androgister.ui.core.validator.Form;
import eu.ttbox.androgister.ui.core.validator.validate.ValidateTextView;
import eu.ttbox.androgister.ui.core.validator.validator.NotEmptyValidator;
import eu.ttbox.androgister.ui.core.validator.validator.NumberValidator;
public class ProductEditFragment extends EntityEditFragment<Product> {
private static final String TAG = "ProductEditFragment";
private static final int PICK_FROM_CAMERA = 1;
private static final int CROP_FROM_CAMERA = 2;
// Photo
private Bitmap bitmap;
private ImageView imageView;
private PhotoHandler mPhotoHandler;
// Binding
private EditText nameText;
private EditText descText;
private EditText priceHTText;
private EditText tagText;
private Spinner tagSpinner;
private Spinner taxeSpinner;
// Instance
TaxeListAdapter taxeListAdapter;
TagListAdapter tagListAdapter;
// ===========================================================
// Constructors
// ===========================================================
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView BEGIN");
View v = inflater.inflate(R.layout.admin_product_edit, container, false);
// Binding
nameText = (EditText) v.findViewById(R.id.product_name);
descText = (EditText) v.findViewById(R.id.product_description);
priceHTText = (EditText) v.findViewById(R.id.product_price_ht);
tagText = (EditText) v.findViewById(R.id.product_tag);
tagSpinner = (Spinner) v.findViewById(R.id.product_tag_spinner);
taxeSpinner = (Spinner) v.findViewById(R.id.product_taxe_spinner);
// Photo
imageView = (ImageView) v.findViewById(R.id.product_photo);
// int mode = (mPhotoUri == null) ? PhotoActionPopup.Modes.NO_PHOTO :
// PhotoActionPopup.Modes.PHOTO_DISALLOW_PRIMARY;
mPhotoHandler = new PhotoHandler(getActivity(), imageView, PhotoActionPopup.Modes.NO_PHOTO);
imageView.setOnClickListener(mPhotoHandler);
// Listener
// tagSpinner.setOnItemSelectedListener(tagOnItemSelectedListener);
// Load Taxe Spinner
taxeListAdapter = new TaxeListAdapter(getActivity(), null);
taxeSpinner.setAdapter(taxeListAdapter);
// Load Tag Spinner
tagListAdapter = new TagListAdapter(getActivity(), null);
tagSpinner.setAdapter(tagListAdapter);
// Load
loadTagSpinner();
loadTaxeSpinner();
// Menu on Fragment
setHasOptionsMenu(true);
return v;
}
private void loadTaxeSpinner() {
TaxeDao taxeDao = getDaoSession().getTaxeDao();
LazyList<Taxe> taxes = taxeDao.queryBuilder()//
.orderAsc(TaxeDao.Properties.Title) //
.listLazy();
taxeListAdapter.changeCursor(taxes);
}
private void loadTagSpinner() {
TagDao tagDao = getDaoSession().getTagDao();
LazyList<Tag> tags = tagDao.queryBuilder()//
.orderAsc(TagDao.Properties.Name) //
.listLazy();
tagListAdapter.changeCursor(tags);
}
@Override
public void onDestroyView() {
if (tagListAdapter != null) {
// Close LazyListAdpater for closing LazyList
tagListAdapter.close();
tagListAdapter = null;
// Taxe
taxeListAdapter.close();
taxeListAdapter = null;
}
super.onDestroyView();
}
@Override
public ProductDao getEntityDao() {
return getDaoSession().getProductDao();
}
@Override
public Product prepareInsert(Bundle args) {
Log.d(TAG, "prepareInsert with args : " + (args != null));
if (args != null) {
Long tagId = args.getLong(Properties.TagId.columnName);
Log.d(TAG, "prepareInsert with tagId : " + tagId);
if (tagId != null) {
selectSpinnerToTagId(tagId);
}
}
return new Product();
}
// ===========================================================
// Validator
// ===========================================================
public Form createValidator(Context context) {
Form formValidator = new Form();
Log.d(TAG, " Validate nameTextField : " + nameText);
// Name
ValidateTextView nameTextField = new ValidateTextView(nameText)//
.addValidator(new NotEmptyValidator());
formValidator.addValidates(nameTextField);
// Price
ValidateTextView priceTextField = new ValidateTextView(priceHTText)//
.addValidator(new NotEmptyValidator()) //
.addValidator(new NumberValidator());
formValidator.addValidates(priceTextField);
// Tag
// ValidateTextView tagTextField = new ValidateTextView(tagSpinner)//
// .addValidator(new NotEmptyValidator());
return formValidator;
}
// ===========================================================
// Bindings
// ===========================================================
@Override
public void bindView(Product entity) {
nameText.setText(entity.getName());
descText.setText(entity.getDescription());
// String priceString =
// PriceHelper.getToStringPrice(entity.getPriceHT());
String priceString = String.valueOf(entity.getPriceHT());
priceHTText.setText(priceString);
// Tag
selectSpinnerToTagId(entity.getTagId());
selectSpinnerToTaxeId(entity.getTaxeId());
}
private void selectSpinnerToTagId(Long wantedTagId) {
if (wantedTagId != null) {
long tagId = wantedTagId.longValue();
for (int i = 0; i < tagListAdapter.getCount(); i++) {
if (tagListAdapter.getItemId(i) == tagId) {
this.tagSpinner.setSelection(i);
break;
}
}
}
}
private void selectSpinnerToTaxeId(Long wantedTaxeId) {
if (wantedTaxeId != null) {
long tagId = wantedTaxeId.longValue();
for (int i = 0; i < taxeListAdapter.getCount(); i++) {
if (taxeListAdapter.getItemId(i) == tagId) {
this.taxeSpinner.setSelection(i);
break;
}
}
}
}
@Override
public Product bindValue(Product entity) {
entity.setName(CrudHelper.getStringTrimmed(nameText));
entity.setDescription(CrudHelper.getStringTrimmed(descText));
// entity.setTag(tagText.getText().toString());
String priceString = CrudHelper.getStringTrimmed(priceHTText);
Long priceHt = Long.parseLong(priceString);
entity.setPriceHT(priceHt);
//
Long selectedTagId = Long.valueOf(tagSpinner.getSelectedItemId());
entity.setTagId(selectedTagId);
return entity;
}
private OnItemSelectedListener tagOnItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};
// ===========================================================
// Photo Picker
// ===========================================================
// http://www.vogella.com/articles/AndroidCamera/article.html
// http://developer.android.com/training/camera/photobasics.html
// ===========================================================
public void pickImage(View View) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//
// Intent intent = new Intent();
// intent.setType("image/*");
// intent.setAction(Intent.ACTION_GET_CONTENT);
// intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(takePictureIntent, PICK_FROM_CAMERA);
}
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
private void handleSmallCameraPhoto(Intent intent) {
Bundle extras = intent.getExtras();
setProductPhoto((Bitmap) extras.get("data"));
}
private void setProductPhoto(Bitmap bitmap) {
this.bitmap = bitmap;
this.imageView.setImageBitmap(bitmap);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (mPhotoHandler != null) {
mPhotoHandler.handlePhotoActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
private String mCurrentPhotoFile;
private final class PhotoHandler extends PhotoSelectionHandler {
private final PhotoActionListener mListener;
private PhotoHandler(Context context, View photoView, int photoMode) {
super(context, photoView, photoMode, false);
mListener = new PhotoListener();
}
@Override
public PhotoActionListener getListener() {
return mListener;
}
@Override
public void startPhotoActivity(Intent intent, int requestCode, String photoFile) {
Log.d(TAG, "startPhotoActivity for photoFile : " + photoFile);
// mSubActivityInProgress = true;
mCurrentPhotoFile = photoFile;
startActivityForResult(intent, requestCode);
}
private final class PhotoListener extends PhotoActionListener {
@Override
public void onPhotoSelected(Bitmap bitmap) {
Log.d(TAG, "onPhotoSelected Bitmap : " + bitmap);
setProductPhoto(bitmap);
// EntityDeltaList delta = getDeltaForAttachingPhotoToContact();
// long rawContactId = getWritableEntityId();
// final String croppedPath =
// ContactPhotoUtils.pathForCroppedPhoto(
// PhotoSelectionActivity.this, mCurrentPhotoFile);
// Intent intent = ContactSaveService.createSaveContactIntent(
// mContext, delta, "", 0, mIsProfile, null, null, rawContactId,
// croppedPath);
// startService(intent);
// finish();
}
@Override
public String getCurrentPhotoFile() {
Log.d(TAG, "getCurrentPhotoFile : " + mCurrentPhotoFile);
return mCurrentPhotoFile;
}
@Override
public void onPhotoSelectionDismissed() {
// if (!mSubActivityInProgress) {
// finish();
// }
}
}
}
}