package eu.ttbox.androgister.ui.admin.tag;
import java.util.Random;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.query.QueryBuilder;
import eu.ttbox.androgister.R;
import eu.ttbox.androgister.domain.Product;
import eu.ttbox.androgister.domain.ProductDao;
import eu.ttbox.androgister.domain.Tag;
import eu.ttbox.androgister.ui.admin.tag.holocolorpicker.ColorPicker.OnColorChangedListener;
import eu.ttbox.androgister.ui.admin.tag.holocolorpicker.HoloColorPickerDialog;
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;
public class TagEditFragment extends EntityEditFragment<Tag> implements OnColorChangedListener {
private static final String TAG = "TagEditFragment";
private static final int PICK_COLOR = 325;
private EditText nameText;
// Instance
private Paint colorPaint = new Paint();
private Button colorPickerButton;
// ===========================================================
// Constructors
// ===========================================================
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView BEGIN");
View v = inflater.inflate(R.layout.admin_tag_edit, container, false);
// Binding
nameText = (EditText) v.findViewById(R.id.tag_name);
// Color
colorPickerButton = (Button) v.findViewById(R.id.tag_color_picker_button);
colorPickerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onColorPickerClick(v);
}
});
// Menu on Fragment
setHasOptionsMenu(true);
return v;
}
@Override
public AbstractDao<Tag, Long> getEntityDao() {
return getDaoSession().getTagDao();
}
// ===========================================================
// 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);
return formValidator;
}
// ===========================================================
// Bindings
// ===========================================================
@Override
public void bindView(Tag entity) {
nameText.setText(entity.getName());
onColorChanged(entity.getColor());
}
@Override
public Tag bindValue(Tag entity) {
entity.setName( CrudHelper.getStringTrimmed(nameText) );
entity.setColor(colorPaint.getColor());
return entity;
}
@Override
public Tag prepareInsert(Bundle args) {
doColorChangeRamdom();
return new Tag();
}
// ===========================================================
// Color Picker
// ===========================================================
public void onColorPickerClick(View v) {
HoloColorPickerDialog colorPicker = HoloColorPickerDialog.newInstance(colorPaint.getColor());
colorPicker.setTargetFragment(this, PICK_COLOR);
colorPicker.show(getFragmentManager(), "colorPickerDialog");
}
private void doColorChangeRamdom() {
Random rand = new Random();
int r = rand.nextInt(255);
int g = rand.nextInt(255);
int b = rand.nextInt(255);
int ramdomColor = Color.rgb(r, g, b);
onColorChanged(ramdomColor);
}
@Override
public void onColorChanged(int color) {
Log.d(TAG, "Choose Color : " + color);
colorPaint.setColor(color);
colorPickerButton.setBackgroundColor(color);
}
// ===========================================================
// Action
// ===========================================================
public ProductDao getProductDao() {
return getDaoSession().getProductDao();
}
@Override
public void onDeleteClick() {
// Validate Deps
long productCount = 0;
if (entity != null && entity.getId() != null) {
QueryBuilder<Product> queryCount = getProductDao().queryBuilder();
queryCount.where(ProductDao.Properties.TagId.eq(entity.getId()));
productCount = queryCount.count();
}
if (productCount < 1) {
super.onDeleteClick();
} else {
String text = getResources().getQuantityString(R.plurals.product_delete_constraints, (int)productCount, productCount);
Log.w(TAG, "Could not delete entity for " + productCount + " Products");
Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
}
}
}