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.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import com.code44.finance.R;
import com.code44.finance.data.DataStore;
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.providers.AccountsProvider;
import com.code44.finance.qualifiers.Main;
import com.code44.finance.ui.CalculatorActivity;
import com.code44.finance.ui.ModelListActivityOld;
import com.code44.finance.ui.common.ModelEditActivity;
import com.code44.finance.ui.currencies.CurrenciesActivity;
import com.code44.finance.utils.MoneyFormatter;
import com.code44.finance.utils.analytics.Analytics;
import javax.inject.Inject;
public class AccountEditActivity extends ModelEditActivity<Account> implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private static final int REQUEST_CURRENCY = 1;
private static final int REQUEST_BALANCE = 2;
@Inject @Main Currency mainCurrency;
private EditText titleEditText;
private Button currencyButton;
private Button balanceButton;
private EditText noteEditText;
private CheckBox includeInTotalsCheckBox;
public static void start(Context context, String accountId) {
startActivity(context, makeIntent(context, AccountEditActivity.class, accountId));
}
@Override protected int getLayoutId() {
return R.layout.activity_account_edit;
}
@Override protected void onViewCreated(Bundle savedInstanceState) {
super.onViewCreated(savedInstanceState);
// Get views
titleEditText = (EditText) findViewById(R.id.titleEditText);
currencyButton = (Button) findViewById(R.id.currencyButton);
balanceButton = (Button) findViewById(R.id.balanceButton);
noteEditText = (EditText) findViewById(R.id.noteEditText);
includeInTotalsCheckBox = (CheckBox) findViewById(R.id.includeInTotalsCheckBox);
// Setup
currencyButton.setOnClickListener(this);
balanceButton.setOnClickListener(this);
includeInTotalsCheckBox.setOnCheckedChangeListener(this);
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case REQUEST_CURRENCY:
ensureModelUpdated(model);
model.setCurrency(data.<Currency>getParcelableExtra(ModelListActivityOld.RESULT_EXTRA_MODEL));
onModelLoaded(model);
return;
case REQUEST_BALANCE:
model.setBalance(data.getLongExtra(CalculatorActivity.RESULT_EXTRA_RESULT, 0));
onModelLoaded(model);
return;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override protected boolean onSave(Account model) {
boolean canSave = true;
if (TextUtils.isEmpty(model.getTitle())) {
canSave = false;
// TODO Show error
}
if (canSave) {
DataStore.insert().values(model.asValues()).into(this, AccountsProvider.uriAccounts());
}
return canSave;
}
@Override protected void ensureModelUpdated(Account model) {
model.setTitle(titleEditText.getText().toString());
model.setNote(noteEditText.getText().toString());
}
@Override protected CursorLoader getModelCursorLoader(String modelId) {
return Tables.Accounts.getQuery().asCursorLoader(this, AccountsProvider.uriAccount(modelId));
}
@Override protected Account getModelFrom(Cursor cursor) {
final Account account = Account.from(cursor);
if (account.getCurrency() == null) {
account.setCurrency(mainCurrency);
}
return account;
}
@Override protected void onModelLoaded(Account model) {
titleEditText.setText(model.getTitle());
currencyButton.setText(model.getCurrency().getCode());
balanceButton.setText(MoneyFormatter.format(model.getCurrency(), model.getBalance()));
noteEditText.setText(model.getNote());
includeInTotalsCheckBox.setChecked(model.includeInTotals());
}
@Override public void onClick(View view) {
switch (view.getId()) {
case R.id.currencyButton:
CurrenciesActivity.startSelect(this, REQUEST_CURRENCY);
break;
case R.id.balanceButton:
CalculatorActivity.start(this, REQUEST_BALANCE, model.getBalance());
break;
}
}
@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
model.setIncludeInTotals(isChecked);
}
@Override protected Analytics.Screen getScreen() {
return Analytics.Screen.AccountEdit;
}
}