package com.code44.finance.ui.reports.categories;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.widget.ListView;
import com.code44.finance.R;
import com.code44.finance.adapters.NavigationAdapter;
import com.code44.finance.common.model.TransactionType;
import com.code44.finance.data.db.Tables;
import com.code44.finance.data.model.Currency;
import com.code44.finance.data.providers.TransactionsProvider;
import com.code44.finance.qualifiers.Main;
import com.code44.finance.ui.reports.BaseReportActivity;
import com.code44.finance.utils.ActiveInterval;
import com.code44.finance.utils.analytics.Analytics;
import com.squareup.otto.Subscribe;
import javax.inject.Inject;
public class CategoriesReportActivity extends BaseReportActivity implements LoaderManager.LoaderCallbacks<Cursor> {
private static final int LOADER_TRANSACTIONS = 1;
@Inject ActiveInterval activeInterval;
@Inject @Main Currency mainCurrency;
private CategoriesReportView categoriesReportView;
private CategoriesReportAdapter adapter;
private TransactionType transactionType = TransactionType.Expense;
public static Intent makeIntent(Context context) {
return makeIntentForActivity(context, CategoriesReportActivity.class);
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setShowDrawer(true);
setShowDrawerToggle(true);
setContentView(R.layout.activity_categories_report);
// Get views
categoriesReportView = (CategoriesReportView) findViewById(R.id.categoriesReportView);
final ListView listView = (ListView) findViewById(R.id.listView);
// Setup
adapter = new CategoriesReportAdapter(this, mainCurrency);
listView.setAdapter(adapter);
}
@Override protected NavigationAdapter.NavigationScreen getNavigationScreen() {
return NavigationAdapter.NavigationScreen.Reports;
}
@Override protected Analytics.Screen getScreen() {
return Analytics.Screen.CategoriesReport;
}
@Override public void onResume() {
super.onResume();
getEventBus().register(this);
}
@Override public void onPause() {
super.onPause();
getEventBus().unregister(this);
}
@Override public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch (id) {
case LOADER_TRANSACTIONS:
return Tables.Transactions
.getQuery()
.selection(" and " + Tables.Transactions.DATE + " between ? and ?", String.valueOf(activeInterval.getInterval().getStartMillis()), String.valueOf(activeInterval.getInterval().getEndMillis() - 1))
.asCursorLoader(this, TransactionsProvider.uriTransactions());
}
return null;
}
@Override public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
switch (loader.getId()) {
case LOADER_TRANSACTIONS:
onTransactionsLoaded(cursor);
break;
}
}
@Override public void onLoaderReset(final Loader<Cursor> loader) {
}
@Subscribe public void onActiveIntervalChanged(ActiveInterval interval) {
getSupportLoaderManager().restartLoader(LOADER_TRANSACTIONS, null, this);
}
private void onTransactionsLoaded(Cursor cursor) {
final CategoriesReportData categoriesReportData = new CategoriesReportData(this, cursor, mainCurrency, transactionType);
categoriesReportView.setPieChartData(categoriesReportData.getPieChartData());
categoriesReportView.setTotalExpense(categoriesReportData.getPieChartData().getTotalValue());
adapter.setData(categoriesReportData, categoriesReportData.getPieChartData().getTotalValue());
}
}