package com.quran.labs.androidquran.ui.adapter; import android.content.Context; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.quran.labs.androidquran.R; import com.quran.labs.androidquran.dao.translation.TranslationItem; import com.quran.labs.androidquran.dao.translation.TranslationRowData; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import io.reactivex.Observable; import io.reactivex.subjects.UnicastSubject; public class TranslationsAdapter extends RecyclerView.Adapter<TranslationsAdapter.TranslationViewHolder> { private final UnicastSubject<TranslationRowData> onClickDownloadSubject = UnicastSubject.create(); private final UnicastSubject<TranslationRowData> onClickRemoveSubject = UnicastSubject.create(); private List<TranslationRowData> translations = new ArrayList<>(); private Context context; public TranslationsAdapter(Context context) { this.context = context; } @Override public TranslationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false); return new TranslationViewHolder(view, viewType); } @Override public void onBindViewHolder(TranslationViewHolder holder, int position) { TranslationRowData rowItem = translations.get(position); switch (holder.getItemViewType()) { case R.layout.translation_row: TranslationItem item = (TranslationItem) rowItem; holder.getTranslationTitle().setText(item.name()); if (TextUtils.isEmpty(item.translation.translatorNameLocalized)) { holder.getTranslationInfo().setText(item.translation.translator); } else { holder.getTranslationInfo().setText(item.translation.translatorNameLocalized); } ImageView leftImage = holder.getLeftImage(); ImageView rightImage = holder.getRightImage(); if (item.exists()) { if (item.needsUpgrade()) { leftImage.setImageResource(R.drawable.ic_download); leftImage.setVisibility(View.VISIBLE); holder.getTranslationInfo().setText(R.string.update_available); } else { leftImage.setVisibility(View.GONE); } rightImage.setImageResource(R.drawable.ic_cancel); rightImage.setVisibility(View.VISIBLE); rightImage.setContentDescription(context.getString(R.string.remove_button)); } else { leftImage.setVisibility(View.GONE); rightImage.setImageResource(R.drawable.ic_download); rightImage.setVisibility(View.VISIBLE); rightImage.setOnClickListener(null); rightImage.setClickable(false); rightImage.setContentDescription(null); } break; case R.layout.translation_sep: holder.getSeparatorText().setText(rowItem.name()); break; } } @Override public int getItemCount() { return translations.size(); } @Override public int getItemViewType(int position) { return translations.get(position).isSeparator() ? R.layout.translation_sep : R.layout.translation_row; } public Observable<TranslationRowData> getOnClickDownloadSubject() { return onClickDownloadSubject.hide(); } public Observable<TranslationRowData> getOnClickRemoveSubject() { return onClickRemoveSubject.hide(); } public void setTranslations(List<TranslationRowData> data) { this.translations = data; } public List<TranslationRowData> getTranslations() { return translations; } class TranslationViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { @Nullable @BindView(R.id.translation_title) TextView translationTitle; @Nullable @BindView(R.id.translation_info) TextView translationInfo; @Nullable @BindView(R.id.left_image) ImageView leftImage; @Nullable @BindView(R.id.right_image) ImageView rightImage; @Nullable @BindView(R.id.separator_txt) TextView separatorText; TranslationViewHolder(View itemView, int viewType) { super(itemView); ButterKnife.bind(this, itemView); if (viewType == R.layout.translation_row) { itemView.setOnClickListener(this); } } TextView getSeparatorText() { return separatorText; } TextView getTranslationTitle() { return translationTitle; } TextView getTranslationInfo() { return translationInfo; } ImageView getLeftImage() { return leftImage; } ImageView getRightImage() { return rightImage; } @Override public void onClick(View v) { TranslationItem item = (TranslationItem) translations.get(getAdapterPosition()); if (item.exists()) { onClickRemoveSubject.onNext(item); } else { onClickDownloadSubject.onNext(item); } } } }