package com.code44.finance.ui.categories;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Build;
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.EditText;
import com.code44.finance.R;
import com.code44.finance.common.model.TransactionType;
import com.code44.finance.common.utils.StringUtils;
import com.code44.finance.data.DataStore;
import com.code44.finance.data.db.Tables;
import com.code44.finance.data.model.Category;
import com.code44.finance.data.providers.CategoriesProvider;
import com.code44.finance.ui.SelectColorFragment;
import com.code44.finance.ui.common.ModelEditActivity;
import com.code44.finance.utils.analytics.Analytics;
public class CategoryEditActivity extends ModelEditActivity<Category> implements View.OnClickListener, SelectColorFragment.OnColorSelectedListener {
private static final String FRAGMENT_SELECT_COLOR = CategoryEditActivity.class.getName() + ".FRAGMENT_SELECT_COLOR";
private EditText titleEditText;
private View containerView;
private Button transactionTypeButton;
public static void start(Context context, String categoryId) {
final Intent intent = makeIntent(context, CategoryEditActivity.class, categoryId);
startActivity(context, intent);
}
@Override protected int getLayoutId() {
return R.layout.activity_category_edit;
}
@Override protected void onViewCreated(Bundle savedInstanceState) {
super.onViewCreated(savedInstanceState);
// Get views
titleEditText = (EditText) findViewById(R.id.titleEditText);
containerView = findViewById(R.id.containerView);
transactionTypeButton = (Button) findViewById(R.id.transactionTypeButton);
final Button colorButton = (Button) findViewById(R.id.colorButton);
// Setup
transactionTypeButton.setOnClickListener(this);
colorButton.setOnClickListener(this);
transactionTypeButton.setEnabled(isNewModel());
}
@Override public void onResume() {
super.onResume();
SelectColorFragment.setListenerIfVisible(getSupportFragmentManager(), FRAGMENT_SELECT_COLOR, this);
}
@Override public void onPause() {
super.onPause();
SelectColorFragment.removeListenerIfVisible(getSupportFragmentManager(), FRAGMENT_SELECT_COLOR);
}
@Override protected boolean onSave(Category model) {
boolean canSave = true;
if (TextUtils.isEmpty(model.getTitle())) {
canSave = false;
// TODO Show error
}
if (canSave) {
DataStore.insert().model(model).into(this, CategoriesProvider.uriCategories());
}
return canSave;
}
@Override protected void ensureModelUpdated(Category model) {
model.setTitle(titleEditText.getText().toString());
}
@Override protected CursorLoader getModelCursorLoader(String modelId) {
return Tables.Categories.getQuery(null).asCursorLoader(this, CategoriesProvider.uriCategory(modelId));
}
@Override protected Category getModelFrom(Cursor cursor) {
final Category category = Category.from(cursor);
if (StringUtils.isEmpty(category.getId())) {
category.setColor(0xff607d8b);
}
return category;
}
@Override protected void onModelLoaded(Category model) {
titleEditText.setText(model.getTitle());
containerView.setBackgroundColor(model.getColor());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(model.getColor());
getWindow().setNavigationBarColor(model.getColor());
}
transactionTypeButton.setText(model.getTransactionType() == TransactionType.Expense ? R.string.expense : R.string.income);
}
@Override public void onClick(View view) {
switch (view.getId()) {
case R.id.colorButton:
ensureModelUpdated(model);
SelectColorFragment.show(getSupportFragmentManager(), FRAGMENT_SELECT_COLOR, model.getColor(), this);
break;
case R.id.transactionTypeButton:
ensureModelUpdated(model);
onTransactionTypeChange();
break;
}
}
@Override public void onColorSelected(int color) {
model.setColor(color);
onModelLoaded(model);
}
@Override protected Analytics.Screen getScreen() {
return Analytics.Screen.CategoryEdit;
}
private void onTransactionTypeChange() {
if (model.getTransactionType() == TransactionType.Expense) {
model.setTransactionType(TransactionType.Income);
} else {
model.setTransactionType(TransactionType.Expense);
}
onModelLoaded(model);
}
}