package com.pedrocarrillo.expensetracker.adapters;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.pedrocarrillo.expensetracker.R;
import com.pedrocarrillo.expensetracker.entities.Expense;
import com.pedrocarrillo.expensetracker.interfaces.IDateMode;
import com.pedrocarrillo.expensetracker.interfaces.IExpensesType;
import com.pedrocarrillo.expensetracker.utils.DateUtils;
import com.pedrocarrillo.expensetracker.utils.ExpensesManager;
import com.pedrocarrillo.expensetracker.utils.Util;
/**
* Created by pcarrillo on 21/09/2015.
*/
public class MainExpenseAdapter extends BaseExpenseAdapter {
private static final int VIEW_TYPE_HEADER = 0;
private static final int VIEW_TYPE_EXPENSE_ROW = 1;
private @IDateMode int mCurrentDateMode;
public MainExpenseAdapter(Context context, ViewHolder.RecyclerClickListener onRecyclerClickListener, @IDateMode int currentDateMode) {
super(context, onRecyclerClickListener);
mCurrentDateMode = currentDateMode;
}
@Override
public MainExpenseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int layoutId = -1;
switch (viewType) {
case VIEW_TYPE_HEADER: {
layoutId = R.layout.layout_expense_header_item;
break;
}
case VIEW_TYPE_EXPENSE_ROW: {
layoutId = R.layout.layout_expense_item;
break;
}
}
View v = LayoutInflater.from(parent.getContext())
.inflate(layoutId, parent, false);
return new ViewHolder(v, onRecyclerClickListener);
}
@Override
public void onBindViewHolder(BaseExpenseViewHolder holder, int position) {
holder.itemView.setSelected(isSelected(position));
switch (getItemViewType(position)) {
case VIEW_TYPE_HEADER:
float total = Expense.getTotalExpensesByDateMode(mCurrentDateMode);
holder.tvTotal.setText(Util.getFormattedCurrency(total));
String date;
switch (mCurrentDateMode) {
case IDateMode.MODE_TODAY:
date = Util.formatDateToString(DateUtils.getToday(), Util.getCurrentDateFormat());
break;
case IDateMode.MODE_WEEK:
date = Util.formatDateToString(DateUtils.getFirstDateOfCurrentWeek(), Util.getCurrentDateFormat()).concat(" - ").concat(Util.formatDateToString(DateUtils.getRealLastDateOfCurrentWeek(), Util.getCurrentDateFormat()));
break;
case IDateMode.MODE_MONTH:
date = Util.formatDateToString(DateUtils.getFirstDateOfCurrentMonth(), Util.getCurrentDateFormat()).concat(" - ").concat(Util.formatDateToString(DateUtils.getRealLastDateOfCurrentMonth(), Util.getCurrentDateFormat()));
break;
default:
date = "";
break;
}
((ViewHolder)holder).tvDate.setText(date);
break;
case VIEW_TYPE_EXPENSE_ROW:
final Expense expense = (Expense) mExpensesList.get(position);
String prefix;
switch (expense.getType()) {
case IExpensesType.MODE_EXPENSES:
holder.tvTotal.setTextColor(colorExpense);
prefix = String.format(prefixExpense, Util.getFormattedCurrency(expense.getTotal()));
break;
case IExpensesType.MODE_INCOME:
holder.tvTotal.setTextColor(colorIncome);
prefix = String.format(prefixIncome, Util.getFormattedCurrency(expense.getTotal()));
break;
default:
prefix = "";
}
if (expense.getCategory() != null)holder.tvCategory.setText(expense.getCategory().getName());
if (expense.getDescription() != null && !expense.getDescription().isEmpty()) {
holder.tvDescription.setText(expense.getDescription());
holder.tvDescription.setVisibility(View.VISIBLE);
} else {
holder.tvDescription.setVisibility(View.GONE);
}
holder.tvTotal.setText(prefix);
holder.itemView.setTag(expense);
// ViewCompat.setTransitionName(holder.tvTotal, titleTransitionName);
break;
}
setAnimation(holder, position);
}
@Override
public int getItemCount() {
return mExpensesList.size();
}
@Override
public int getItemViewType(int position) {
// return (position == 0) ? VIEW_TYPE_HEADER : VIEW_TYPE_EXPENSE_ROW;
return VIEW_TYPE_EXPENSE_ROW;
}
public void updateExpenses(@IDateMode int mCurrentDateMode) {
this.mCurrentDateMode = mCurrentDateMode;
ExpensesManager.getInstance().setExpensesListByDateMode(mCurrentDateMode);
this.mExpensesList = ExpensesManager.getInstance().getExpensesList();
notifyDataSetChanged();
}
public static class ViewHolder extends BaseExpenseViewHolder {
TextView tvDate;
public ViewHolder(View v, RecyclerClickListener onRecyclerClickListener) {
super(v, onRecyclerClickListener);
tvDate = (TextView)v.findViewById(R.id.tv_date);
}
}
}