1 package com.moiseum.wolnelektury.view.book.list;
3 import android.content.Context;
4 import android.content.res.Resources;
5 import android.graphics.Color;
6 import android.support.annotation.NonNull;
7 import android.text.SpannableString;
8 import android.text.style.AbsoluteSizeSpan;
9 import android.text.style.ForegroundColorSpan;
10 import android.text.style.RelativeSizeSpan;
11 import android.view.View;
12 import android.view.ViewGroup;
13 import android.widget.ImageButton;
14 import android.widget.ImageView;
15 import android.widget.RelativeLayout;
16 import android.widget.TextView;
18 import com.bumptech.glide.Glide;
19 import com.bumptech.glide.load.engine.DiskCacheStrategy;
20 import com.moiseum.wolnelektury.R;
21 import com.moiseum.wolnelektury.base.WLApplication;
22 import com.moiseum.wolnelektury.components.recycler.RecyclerAdapter;
23 import com.moiseum.wolnelektury.components.recycler.ViewHolder;
24 import com.moiseum.wolnelektury.connection.RestClient;
25 import com.moiseum.wolnelektury.connection.models.BookModel;
26 import com.moiseum.wolnelektury.utils.SharedPreferencesUtils;
28 import butterknife.BindView;
31 * Created by piotrostrowski on 16.11.2017.
34 public class BooksListAdapter extends RecyclerAdapter<BookModel, BooksListAdapter.BookViewHolder> {
36 public interface BooksListDeletionListener {
37 void onDeleteBookClicked(BookModel book, int position);
40 private BooksListDeletionListener listener;
41 private View.OnClickListener deleteButtonClick = new View.OnClickListener() {
43 public void onClick(View v) {
44 if (listener != null) {
45 int position = (int) v.getTag();
46 BookModel book = getItem(position);
47 listener.onDeleteBookClicked(book, position);
52 public BooksListAdapter(Context context) {
53 super(context, RecyclerAdapter.Selection.NONE);
57 protected String getItemId(BookModel item) {
58 return item.getSlug();
63 public BookViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
64 return new BookViewHolder(inflate(R.layout.list_search, parent));
68 public void onBindViewHolder(BookViewHolder viewHolder, int position) {
69 super.onBindViewHolder(viewHolder, position);
70 viewHolder.ibDeleteEbook.setTag(position);
71 viewHolder.ibDeleteEbook.setOnClickListener(deleteButtonClick);
74 public void setOnDeleteListener(BooksListDeletionListener listener) {
75 this.listener = listener;
78 static class BookViewHolder extends ViewHolder<BookModel> {
80 @BindView(R.id.ivBookCover)
81 ImageView ivBookCover;
82 @BindView(R.id.tvBookAuthor)
83 TextView tvBookAuthor;
84 @BindView(R.id.tvBookTitle)
86 @BindView(R.id.tvBookEpoch)
88 @BindView(R.id.tvBookGenre)
90 @BindView(R.id.tvBookKind)
92 @BindView(R.id.ibDeleteEbook)
93 ImageButton ibDeleteEbook;
94 @BindView(R.id.ivEbook)
96 @BindView(R.id.tvEbookReaden)
97 TextView tvEbookReaden;
98 @BindView(R.id.ivAudioBook)
99 ImageView ivAudioBook;
100 @BindView(R.id.tvAudioBookReaden)
101 TextView tvAudioBookReaden;
102 private final SharedPreferencesUtils preferences = WLApplication.getInstance().getPreferences();
104 BookViewHolder(View view) {
109 public void bind(BookModel item, boolean selected) {
110 if (item.getCoverThumb() != null) {
111 String coverUrl = item.getCoverThumb();
112 if (!coverUrl.contains(RestClient.MEDIA_URL) && !coverUrl.contains(RestClient.MEDIA_URL_HTTPS)) {
113 coverUrl = RestClient.MEDIA_URL_HTTPS + coverUrl;
115 Glide.with(getContext()).load(coverUrl).placeholder(R.drawable.list_nocover).diskCacheStrategy(DiskCacheStrategy.ALL).dontTransform().into(ivBookCover);
117 ivBookCover.setImageResource(R.drawable.list_nocover);
119 tvBookAuthor.setText(item.getAuthor());
120 tvBookTitle.setText(item.getTitle());
121 tvBookEpoch.setText(item.getEpoch());
122 tvBookGenre.setText(item.getGenre());
123 tvBookKind.setText(item.getKind());
124 ibDeleteEbook.setVisibility(item.isDeletable() ? View.VISIBLE : View.GONE);
125 if (item.getCurrentChapter() != 0 && item.getTotalChapters() != 0) {
126 SpannableString progressSpannable = spanStringSize(item, false, R.string.reading_progress);
127 tvEbookReaden.setVisibility(View.VISIBLE);
128 tvEbookReaden.setText(progressSpannable);
130 tvEbookReaden.setVisibility(View.GONE);
132 if (item.isHasAudio()) {
133 ivAudioBook.setVisibility(View.VISIBLE);
134 if (item.getCurrentAudioChapter() != 0 && item.getTotalAudioChapters() != 0) {
135 SpannableString progressSpannable = spanStringSize(item, true, R.string.listening_progress);
136 tvAudioBookReaden.setVisibility(View.VISIBLE);
137 tvAudioBookReaden.setText(progressSpannable);
139 tvAudioBookReaden.setVisibility(View.GONE);
142 ivAudioBook.setVisibility(View.GONE);
143 tvAudioBookReaden.setVisibility(View.GONE);
147 private SpannableString spanStringSize(BookModel item, boolean isAudioPart, int resourceId) {
148 float currentChapter = isAudioPart ? (float) item.getCurrentAudioChapter() : (float) item.getCurrentChapter();
149 float totalChapter = isAudioPart ? (float) item.getTotalAudioChapters() : (float) item.getTotalChapters();
150 int progress = (int) ((currentChapter / totalChapter) * 100.f);
152 String progressText = getContext().getString(resourceId, progress);
153 SpannableString progressSpannable = new SpannableString(progressText.toUpperCase());
154 int size = ((int) getContext().getResources().getDimension(R.dimen.list_title_text_size));
155 progressSpannable.setSpan(new AbsoluteSizeSpan(size), progressText.indexOf(" "), progressText.length() - 1, 0); // set size
156 return progressSpannable;