package de.geeksfactory.opacclient.frontend.adapter; import android.text.Html; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import de.geeksfactory.opacclient.R; import de.geeksfactory.opacclient.objects.ReservedItem; public class ReservationsAdapter extends AccountAdapter<ReservedItem, ReservationsAdapter.ViewHolder> { public interface Callback { void cancel(String prolongData); void bookingStart(String downloadData); void onClick(ReservedItem item, ViewHolder view); } private Callback callback; public ReservationsAdapter(Callback callback) { this.callback = callback; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.listitem_account_item, parent, false); return new ViewHolder(view); } public class ViewHolder extends AccountAdapter.ViewHolder<ReservedItem> { public ViewHolder(View itemView) { super(itemView); } @Override public void setItem(final ReservedItem item) { super.setItem(item); DateTimeFormatter fmt = DateTimeFormat.shortDate(); SpannableStringBuilder status = new SpannableStringBuilder(); if (item.getStatus() != null) { int start = status.length(); status.append(Html.fromHtml(item.getStatus())); // setSpan with a span argument is not supported before API 21 status.setSpan(new ForegroundColorSpan(textColorPrimary), start, start + Html.fromHtml(item.getStatus()).length(), 0); if (item.getReadyDate() != null || item.getExpirationDate() != null) { status.append(" – "); } } if (item.getReadyDate() != null) { status.append(fmt.print(item.getReadyDate())); } if (item.getExpirationDate() != null) { if (item.getReadyDate() != null) status.append(", "); status.append(context.getString(R.string.reservation_expire_until)).append(" ") .append(fmt.print(item.getExpirationDate())); } setTextOrHide(status, tvStatus); ivProlong.setVisibility(View.GONE); ivDownload.setVisibility(View.GONE); if (item.getBookingData() != null) { ivBooking.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { callback.bookingStart(item.getBookingData()); } }); ivBooking.setVisibility(View.VISIBLE); ivCancel.setVisibility(View.GONE); } else if (item.getCancelData() != null) { ivCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { callback.cancel(item.getCancelData()); } }); ivCancel.setVisibility(View.VISIBLE); ivBooking.setVisibility(View.GONE); } else { ivCancel.setVisibility(View.INVISIBLE); ivBooking.setVisibility(View.GONE); } itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callback.onClick(item, ViewHolder.this); } }); } } }