package de.geeksfactory.opacclient.frontend.adapter; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.model.stream.BaseGlideUrlLoader; import java.util.List; import de.geeksfactory.opacclient.R; import de.geeksfactory.opacclient.apis.OpacApi; import de.geeksfactory.opacclient.frontend.ResultsAdapter; import de.geeksfactory.opacclient.i18n.AndroidStringProvider; import de.geeksfactory.opacclient.objects.AccountItem; import de.geeksfactory.opacclient.utils.ISBNTools; public abstract class AccountAdapter<I extends AccountItem, VH extends AccountAdapter.ViewHolder<I>> extends RecyclerView.Adapter<VH> { protected List<I> items; protected OpacApi api; private boolean coversHidden; public AccountAdapter() { super(); } @Override public void onBindViewHolder(VH holder, int position) { holder.setCoversHidden(coversHidden); holder.setItem(items.get(position)); } @Override public int getItemCount() { if (items == null) { return 0; } else { return items.size(); } } public void setItems(List<I> items) { this.items = items; notifyDataSetChanged(); } public void setCoversHidden(boolean coversHidden) { if (this.coversHidden != coversHidden) { this.coversHidden = coversHidden; notifyDataSetChanged(); } } public void setApi(OpacApi api) { this.api = api; } public static class ViewHolder<I extends AccountItem> extends RecyclerView.ViewHolder { protected Context context; public TextView tvTitleAndAuthor; protected TextView tvStatus; protected View vStatusColor; protected ImageButton ivProlong; protected ImageButton ivDownload; protected ImageButton ivCancel; protected ImageButton ivBooking; protected ImageView ivCover; protected ImageView ivMediaType; protected int textColorPrimary; private AndroidStringProvider sp; private boolean coversHidden; public ViewHolder(View itemView) { super(itemView); this.context = itemView.getContext(); tvTitleAndAuthor = (TextView) itemView.findViewById(R.id.tvTitleAndAuthor); tvStatus = (TextView) itemView.findViewById(R.id.tvStatus); vStatusColor = itemView.findViewById(R.id.vStatusColor); ivProlong = (ImageButton) itemView.findViewById(R.id.ivProlong); ivDownload = (ImageButton) itemView.findViewById(R.id.ivDownload); ivCancel = (ImageButton) itemView.findViewById(R.id.ivCancel); ivBooking = (ImageButton) itemView.findViewById(R.id.ivBooking); ivCover = (ImageView) itemView.findViewById(R.id.ivCover); ivMediaType = (ImageView) itemView.findViewById(R.id.ivMediaType); TypedArray a = context.obtainStyledAttributes(new int[]{android.R.attr.textColorPrimary}); textColorPrimary = a.getColor(0, 0); a.recycle(); sp = new AndroidStringProvider(); } public void setItem(I item) { // Overview (Title/Author, Status/Deadline) if (item.getTitle() != null && item.getAuthor() != null) { tvTitleAndAuthor.setText(item.getTitle() + ", " + item.getAuthor()); } else if (item.getTitle() != null) { tvTitleAndAuthor.setText(item.getTitle()); } else { setTextOrHide(item.getAuthor(), tvTitleAndAuthor); } if (coversHidden) { ivMediaType.setVisibility(View.GONE); ivCover.setVisibility(View.GONE); } else { if (item.getCover() != null) { ivCover.setVisibility(View.VISIBLE); ivMediaType.setVisibility(View.GONE); Drawable loading = VectorDrawableCompat.create(context.getResources(), R.drawable.ic_loading, null); Glide.with(context).using(new ISBNToolsUrlLoader(context)) .load(item.getCover()) .placeholder(loading) .crossFade() .into(ivCover); } else { ivCover.setVisibility(View.GONE); Glide.clear(ivCover); if (item.getMediaType() != null) { ivMediaType.setImageResource( ResultsAdapter.getResourceByMediaType(item.getMediaType ())); ivMediaType.setContentDescription(sp.getMediaTypeName(item.getMediaType())); ivMediaType.setVisibility(View.VISIBLE); } else { ivMediaType.setVisibility(View.INVISIBLE); } } } } public void setCoversHidden(boolean coversHidden) { this.coversHidden = coversHidden; } public boolean isCoversHidden() { return coversHidden; } } protected static void setTextOrHide(CharSequence value, TextView tv) { if (!TextUtils.isEmpty(value)) { tv.setVisibility(View.VISIBLE); tv.setText(value); } else { tv.setVisibility(View.GONE); } } private static class ISBNToolsUrlLoader extends BaseGlideUrlLoader<String> { public ISBNToolsUrlLoader(Context context) { super(context); } @Override protected String getUrl(String url, int width, int height) { return ISBNTools.getBestSizeCoverUrl(url, width, height); } } }