package bf.io.openshop.ux.adapters; import android.content.Context; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.List; import bf.io.openshop.CONST; import bf.io.openshop.R; import bf.io.openshop.entities.delivery.Payment; /** * Simple arrayAdapter for payment selection. */ public class PaymentSpinnerAdapter extends ArrayAdapter<Payment> { private List<Payment> payments; private LayoutInflater layoutInflater; private Context context; private long selectedId = CONST.DEFAULT_EMPTY_ID; /** * Creates an adapter for payment selection. * * @param context activity context. * @param payments list of items. */ public PaymentSpinnerAdapter(Context context, List<Payment> payments) { super(context, android.R.layout.simple_spinner_item, payments); this.context = context; this.payments = payments; layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } /** * If in data exist equals payment, it will be highlighted. * * @param selectedPaymentType selected payment. */ public void preselectPayment(Payment selectedPaymentType) { if (selectedPaymentType != null) { selectedId = selectedPaymentType.getId(); } } public int getCount() { return payments.size(); } public Payment getItem(int position) { return payments.get(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.list_item_payment, parent, false); holder.title = (TextView) convertView.findViewById(R.id.payment_title); holder.description = (TextView) convertView.findViewById(R.id.payment_description); holder.isSelected = convertView.findViewById(R.id.payment_is_selected); holder.separator = convertView.findViewById(R.id.payment_separator); holder.price = (TextView) convertView.findViewById(R.id.payment_price); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Payment payment = getItem(position); // First item without top line separator if (position == 0) { holder.separator.setVisibility(View.GONE); } else { holder.separator.setVisibility(View.VISIBLE); } // Highlight selected item if (selectedId != CONST.DEFAULT_EMPTY_ID && payment.getId() == selectedId) { holder.title.setTextColor(ContextCompat.getColor(context, R.color.colorAccent)); holder.isSelected.setVisibility(View.VISIBLE); } else { holder.title.setTextColor(ContextCompat.getColor(context, R.color.textPrimary)); holder.isSelected.setVisibility(View.INVISIBLE); } holder.title.setText(payment.getName()); if (payment.getDescription() != null && !payment.getDescription().isEmpty()) { holder.description.setText(payment.getDescription()); holder.description.setVisibility(View.VISIBLE); } else holder.description.setVisibility(View.INVISIBLE); if (payment.getPrice() == 0) { holder.price.setText(R.string.free); holder.price.setTextColor(ContextCompat.getColor(context, R.color.colorAccent)); } else { holder.price.setText(context.getResources().getString(R.string.format_plus, payment.getPriceFormatted())); holder.price.setTextColor(ContextCompat.getColor(context, R.color.textPrimary)); } return convertView; } public static class ViewHolder { public TextView title; public View isSelected; public View separator; public TextView description; public TextView price; } }