package co.smartreceipts.android.settings.widget; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.support.v7.app.ActionBar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import javax.inject.Inject; import co.smartreceipts.android.R; import co.smartreceipts.android.model.PaymentMethod; import co.smartreceipts.android.model.factory.PaymentMethodBuilderFactory; import co.smartreceipts.android.persistence.database.controllers.TableController; import co.smartreceipts.android.persistence.database.controllers.impl.PaymentMethodsTableController; import co.smartreceipts.android.persistence.database.operations.DatabaseOperationMetadata; import dagger.android.support.AndroidSupportInjection; import wb.android.dialog.fragments.EditTextDialogFragment; public class PaymentMethodsListFragment extends SimpleInsertableListFragment<PaymentMethod> implements View.OnClickListener { public static final String TAG = PaymentMethodsListFragment.class.getSimpleName(); @Inject PaymentMethodsTableController paymentMethodsTableController; public static PaymentMethodsListFragment newInstance() { return new PaymentMethodsListFragment(); } @Override public void onAttach(Context context) { AndroidSupportInjection.inject(this); super.onAttach(context); } @Override public void onResume() { super.onResume(); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { getSupportActionBar().setTitle(R.string.payment_methods); getSupportActionBar().setSubtitle(null); } } @Override public void onClick(final View view) { if (view.getId() == R.id.edit) { editItem((PaymentMethod)view.getTag()); } else if (view.getId() == R.id.delete) { deleteItem((PaymentMethod)view.getTag()); } } @Override protected TableController<PaymentMethod> getTableController() { return paymentMethodsTableController; } @Override protected void addItem() { final EditTextDialogFragment.OnClickListener onClickListener = new EditTextDialogFragment.OnClickListener() { @Override public void onClick(String text, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { final PaymentMethod paymentMethod = new PaymentMethodBuilderFactory().setMethod(text).build(); getTableController().insert(paymentMethod, new DatabaseOperationMetadata()); } } }; final String title = getString(R.string.payment_method_add); final String positiveButtonText = getString(R.string.add); showDialog(title, null, positiveButtonText, onClickListener); } protected void editItem(final PaymentMethod oldPaymentMethod) { final EditTextDialogFragment.OnClickListener onClickListener = new EditTextDialogFragment.OnClickListener() { @Override public void onClick(String text, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { final PaymentMethod newPaymentMethod = new PaymentMethodBuilderFactory().setMethod(text).build(); getTableController().update(oldPaymentMethod, newPaymentMethod, new DatabaseOperationMetadata()); } } }; final String title = getString(R.string.payment_method_edit); final String positiveButtonText = getString(R.string.save); showDialog(title, oldPaymentMethod.getMethod(), positiveButtonText, onClickListener); } private void showDialog(final String title, final String text, final String positiveButtonText, final EditTextDialogFragment.OnClickListener onClickListener) { final String negativeButtonText = getString(android.R.string.cancel); final String hint = getString(R.string.payment_method); if (getFragmentManager().findFragmentByTag(EditTextDialogFragment.TAG) == null) { final EditTextDialogFragment fragment = EditTextDialogFragment.newInstance(title, text, hint, positiveButtonText, negativeButtonText, onClickListener); fragment.show(getFragmentManager(), EditTextDialogFragment.TAG); } } protected void deleteItem(final PaymentMethod item) { final DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { getTableController().delete(item, new DatabaseOperationMetadata()); } } }; final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(getString(R.string.delete_item, item.getMethod())); builder.setPositiveButton(R.string.delete, onClickListener); builder.setNegativeButton(android.R.string.cancel, onClickListener); builder.show(); } private static final class ViewHolder { public TextView title; public View edit; public View delete; } @Override public View getView(final LayoutInflater inflater, final PaymentMethod item, View convertView, final ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.simple_editable_card_item, parent, false); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(android.R.id.title); holder.edit = convertView.findViewById(R.id.edit); holder.delete = convertView.findViewById(R.id.delete); holder.edit.setOnClickListener(this); holder.delete.setOnClickListener(this); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.title.setText(item.getMethod()); holder.edit.setTag(item); holder.delete.setTag(item); return convertView; } }