package de.geeksfactory.opacclient.frontend.adapter; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewCompat; 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.Days; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import de.geeksfactory.opacclient.R; import de.geeksfactory.opacclient.apis.EbookServiceApi; import de.geeksfactory.opacclient.objects.LentItem; public class LentAdapter extends AccountAdapter<LentItem, LentAdapter.ViewHolder> { public interface Callback { void prolong(String prolongData); void download(String downloadData); void onClick(LentItem item, ViewHolder view); } private Callback callback; public LentAdapter(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<LentItem> { public ViewHolder(View itemView) { super(itemView); } @Override public void setItem(final LentItem item) { super.setItem(item); DateTimeFormatter fmt = DateTimeFormat.shortDate(); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); final int tolerance = Integer.parseInt(sp.getString("notification_warning", "3")); SpannableStringBuilder builder = new SpannableStringBuilder(); if (item.getDeadline() != null) { int start = builder.length(); builder.append(fmt.print(item.getDeadline())); // setSpan with a span argument is not supported before API 21 builder.setSpan(new ForegroundColorSpan(textColorPrimary), start, start + fmt.print(item.getDeadline()).length(), 0); if (item.getStatus() != null) builder.append(" – "); } if (item.getStatus() != null) { builder.append(Html.fromHtml(item.getStatus())); } setTextOrHide(builder, tvStatus); // Color codes for return dates if (item.getDeadline() != null) { if (item.getDeadline().equals(LocalDate.now()) || item.getDeadline().isBefore(LocalDate.now())) { vStatusColor.setBackgroundColor( ContextCompat.getColor(context, R.color.date_overdue)); } else if (Days.daysBetween(LocalDate.now(), item.getDeadline()).getDays() <= tolerance) { vStatusColor.setBackgroundColor( ContextCompat.getColor(context, R.color.date_warning)); } else if (item.getDownloadData() != null) { vStatusColor.setBackgroundColor( ContextCompat.getColor(context, R.color.account_downloadable)); } else { vStatusColor.setBackgroundResource(0); } } else if (item.getDownloadData() != null) { vStatusColor.setBackgroundColor( ContextCompat.getColor(context, R.color.account_downloadable)); } else { vStatusColor.setBackgroundResource(0); } ivCancel.setVisibility(View.GONE); ivBooking.setVisibility(View.GONE); if (item.getProlongData() != null) { ivProlong.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { callback.prolong(item.getProlongData()); } }); ivProlong.setVisibility(View.VISIBLE); ViewCompat.setAlpha(ivProlong, item.isRenewable() ? 1f : 0.4f); ivDownload.setVisibility(View.GONE); } else if (item.getDownloadData() != null && api != null && api instanceof EbookServiceApi) { ivDownload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { callback.download(item.getDownloadData()); } }); ivProlong.setVisibility(View.GONE); ivDownload.setVisibility(View.VISIBLE); } else { ivProlong.setVisibility(View.INVISIBLE); ivDownload.setVisibility(View.GONE); } itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callback.onClick(item, ViewHolder.this); } }); } } }