package com.code44.finance.ui.accounts;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.view.View;
import android.widget.TextView;
import com.code44.finance.R;
import com.code44.finance.adapters.NavigationAdapter;
import com.code44.finance.data.db.Tables;
import com.code44.finance.data.model.Account;
import com.code44.finance.data.model.Currency;
import com.code44.finance.data.model.Model;
import com.code44.finance.data.providers.AccountsProvider;
import com.code44.finance.qualifiers.Main;
import com.code44.finance.ui.common.BaseModelsAdapter;
import com.code44.finance.ui.common.ModelListActivity;
import com.code44.finance.utils.MoneyFormatter;
import com.code44.finance.utils.analytics.Analytics;
import javax.inject.Inject;
public class AccountsActivity extends ModelListActivity {
@Inject @Main Currency mainCurrency;
private TextView balanceTextView;
public static Intent makeViewIntent(Context context) {
return makeViewIntent(context, AccountsActivity.class);
}
public static void startSelect(Activity activity, int requestCode) {
startActivityForResult(activity, makeSelectIntent(activity, AccountsActivity.class), requestCode);
}
@Override protected void onCreate(Bundle savedInstanceState) {
setShowDrawer(true);
setShowDrawerToggle(true);
super.onCreate(savedInstanceState);
}
@Override protected int getLayoutId() {
return R.layout.activity_accounts;
}
@Override protected void onViewCreated() {
super.onViewCreated();
// Get views
balanceTextView = (TextView) findViewById(R.id.balanceTextView);
}
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (loader.getId() == LOADER_MODELS) {
updateBalance(data);
}
super.onLoadFinished(loader, data);
}
@Override protected BaseModelsAdapter createAdapter() {
return new AccountsAdapter(this, mainCurrency);
}
@Override protected CursorLoader getModelsCursorLoader() {
return Tables.Accounts.getQuery().asCursorLoader(this, AccountsProvider.uriAccounts());
}
@Override protected Model modelFrom(Cursor cursor) {
return Account.from(cursor);
}
@Override protected void onModelClick(View view, int position, String modelId, Model model) {
AccountActivity.start(this, modelId);
}
@Override protected void startModelEdit(String modelId) {
AccountEditActivity.start(this, modelId);
}
@Override protected NavigationAdapter.NavigationScreen getNavigationScreen() {
return NavigationAdapter.NavigationScreen.Accounts;
}
@Override protected Analytics.Screen getScreen() {
return Analytics.Screen.AccountList;
}
private void updateBalance(Cursor cursor) {
long balance = 0;
if (cursor.moveToFirst()) {
do {
final Account account = Account.from(cursor);
if (account.includeInTotals()) {
balance += account.getBalance() * account.getCurrency().getExchangeRate();
}
} while (cursor.moveToNext());
}
balanceTextView.setText(MoneyFormatter.format(mainCurrency, balance));
}
}