package co.smartreceipts.android.ocr.widget.configuration;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import co.smartreceipts.android.R;
import co.smartreceipts.android.purchases.model.AvailablePurchase;
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
public class OcrPurchasesListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private final View headerView;
private final PublishSubject<AvailablePurchase> availablePurchaseClickSubject = PublishSubject.create();
private List<AvailablePurchase> availablePurchases = Collections.emptyList();
public OcrPurchasesListAdapter(@NonNull View headerView) {
this.headerView = Preconditions.checkNotNull(headerView);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEADER) {
return new HeaderViewHolder(headerView);
} else {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.ocr_purchase_list_item, parent, false);
return new ItemViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ItemViewHolder) {
final AvailablePurchase availablePurchase = availablePurchases.get(position - 1);
final ItemViewHolder itemHolder = (ItemViewHolder) holder;
itemHolder.purchaseName.setText(availablePurchase.getTitle());
itemHolder.purchaseDescription.setText(availablePurchase.getDescription());
itemHolder.purchasePrice.setText(availablePurchase.getPrice());
itemHolder.parentView.setOnClickListener(ignored -> availablePurchaseClickSubject.onNext(availablePurchase));
}
}
@Override
public int getItemCount() {
return availablePurchases.size() + 1;
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_HEADER;
} else {
return TYPE_ITEM;
}
}
public void setAvailablePurchases(@NonNull List<AvailablePurchase> availablePurchases) {
this.availablePurchases = new ArrayList<>(Preconditions.checkNotNull(availablePurchases));
notifyDataSetChanged();
}
@NonNull
public Observable<AvailablePurchase> getAvailablePurchaseClicks() {
return availablePurchaseClickSubject;
}
private static class HeaderViewHolder extends RecyclerView.ViewHolder {
final View headerView;
HeaderViewHolder(@NonNull View view) {
super(view);
headerView = view;
}
}
static class ItemViewHolder extends RecyclerView.ViewHolder {
View parentView;
@BindView(R.id.purchase_name) TextView purchaseName;
@BindView(R.id.purchase_description) TextView purchaseDescription;
@BindView(R.id.purchase_price) TextView purchasePrice;
ItemViewHolder(@NonNull View view) {
super(view);
parentView = view;
ButterKnife.bind(this, view);
}
}
}