package com.pedrocarrillo.expensetracker.widget;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
import com.pedrocarrillo.expensetracker.ExpenseTrackerApp;
import com.pedrocarrillo.expensetracker.R;
import com.pedrocarrillo.expensetracker.entities.Expense;
import com.pedrocarrillo.expensetracker.interfaces.IExpensesType;
import com.pedrocarrillo.expensetracker.ui.expenses.ExpenseDetailFragment;
import com.pedrocarrillo.expensetracker.utils.DateUtils;
import com.pedrocarrillo.expensetracker.utils.Util;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import io.realm.Realm;
/**
* Created by Pedro on 9/28/2015.
*/
public class ListProvider implements RemoteViewsService.RemoteViewsFactory {
private Context context = null;
private int appWidgetId;
private List<Expense> expenseList;
public ListProvider(Context context, Intent intent) {
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
@Override
public void onCreate() {
getExpenses();
}
@Override
public void onDataSetChanged() {
getExpenses();
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public void onDestroy() {
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public int getCount() {
return expenseList.size();
}
@Override
public long getItemId(int position) {
return position;
}
/*
*Similar to getView of Adapter where instead of View
*we return RemoteViews
*
*/
@Override
public RemoteViews getViewAt(int position) {
final RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.layout_expense_widget_item);
Expense expense = expenseList.get(position);
remoteView.setTextViewText(R.id.tv_category, String.valueOf(expense.getCategory().getName()));
remoteView.setTextViewText(R.id.tv_description, expense.getDescription());
remoteView.setTextViewText(R.id.tv_total, Util.getFormattedCurrency(expense.getTotal()));
remoteView.setViewVisibility(R.id.tv_description, (expense.getDescription() != null && !expense.getDescription().isEmpty()) ? View.VISIBLE : View.GONE);
remoteView.setTextColor(R.id.tv_total, expense.getType() == IExpensesType.MODE_EXPENSES ? context.getResources().getColor(R.color.colorAccentRed) : context.getResources().getColor(R.color.colorAccentGreen));
Intent expenseIntent = new Intent();
expenseIntent.putExtra(ExpenseDetailFragment.EXPENSE_ID_KEY, expense.getId());
remoteView.setOnClickFillInIntent(R.id.widget_item, expenseIntent);
return remoteView;
}
public void getExpenses() {
Date today = DateUtils.getToday();
Date tomorrow = DateUtils.getTomorrowDate();
this.expenseList = new ArrayList<>();
Realm realm = Realm.getInstance(context);
//sync realm instance with other instances
realm.refresh();
this.expenseList = Expense.cloneExpensesCollection(realm.where(Expense.class).between("date", today, tomorrow).findAll());
}
}