/*
* Copyright (C) 2012-2016 The Android Money Manager Ex Project Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.money.manager.ex.budget;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.codetroopers.betterpickers.numberpicker.NumberPickerBuilder;
import com.codetroopers.betterpickers.numberpicker.NumberPickerDialogFragment;
import com.money.manager.ex.Constants;
import com.money.manager.ex.R;
import com.money.manager.ex.common.MmxBaseFragmentActivity;
import com.money.manager.ex.core.MenuHelper;
import com.money.manager.ex.datalayer.BudgetRepository;
import com.money.manager.ex.domainmodel.Budget;
import com.money.manager.ex.utils.MmxDate;
import java.math.BigDecimal;
import java.math.BigInteger;
import butterknife.ButterKnife;
import butterknife.OnClick;
import timber.log.Timber;
public class BudgetEditActivity
extends MmxBaseFragmentActivity {
public static final String KEY_BUDGET_ID = "budgetId";
private BudgetViewModel mModel;
private BudgetEditViewHolder viewHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
// LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_budget_edit);
ButterKnife.bind(this);
initializeToolbar();
initializeModel();
showModel();
}
public boolean onActionDoneClick() {
if (save()) {
setResult(RESULT_OK);
finish();
return true;
} else {
return false;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuHelper menuHelper = new MenuHelper(this, menu);
menuHelper.addSaveToolbarIcon();
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// cancel clicked. Prompt to confirm?
Timber.d("going back");
break;
case MenuHelper.save:
return onActionDoneClick();
}
return super.onOptionsItemSelected(item);
}
@OnClick(R.id.budgetYearTextView)
public void onSelectYear(View v) {
int currentYear = new MmxDate().getYear();
int year;
if (mModel.year != 0) {
year = mModel.year;
} else {
year = currentYear;
}
new NumberPickerBuilder()
.setFragmentManager(getSupportFragmentManager())
.setStyleResId(R.style.BetterPickersDialogFragment)
.setLabelText(getString(R.string.year))
.setPlusMinusVisibility(View.INVISIBLE)
.setDecimalVisibility(View.INVISIBLE)
.setMinNumber(BigDecimal.valueOf(currentYear - 10))
.setMaxNumber(BigDecimal.valueOf(currentYear + 10))
.setCurrentNumber(year)
.addNumberPickerDialogHandler(new NumberPickerDialogFragment.NumberPickerDialogHandlerV2() {
@Override
public void onDialogNumberSet(int reference, BigInteger number, double decimal, boolean isNegative, BigDecimal fullNumber) {
mModel.setYear(number.intValue());
viewHolder.refreshYear();
viewHolder.refreshName();
}
})
.show();
}
@OnClick(R.id.budgetMonthTextView)
public void onSelectMonth(View v) {
int month;
if (mModel.month != 0) {
month = mModel.month;
} else {
month = new MmxDate().getMonthOfYear();
}
new NumberPickerBuilder()
.setFragmentManager(getSupportFragmentManager())
.setStyleResId(R.style.BetterPickersDialogFragment)
.setLabelText(getString(R.string.month))
.setPlusMinusVisibility(View.INVISIBLE)
.setDecimalVisibility(View.INVISIBLE)
.setMinNumber(BigDecimal.ONE)
.setMaxNumber(BigDecimal.valueOf(12))
.setCurrentNumber(month)
.addNumberPickerDialogHandler(new NumberPickerDialogFragment.NumberPickerDialogHandlerV2() {
@Override
public void onDialogNumberSet(int reference, BigInteger number, double decimal, boolean isNegative, BigDecimal fullNumber) {
mModel.setMonth(number.intValue());
viewHolder.refreshMonth();
viewHolder.refreshName();
}
})
.show();
}
/*
Private
*/
private int getBudgetId() {
return getIntent().getIntExtra(KEY_BUDGET_ID, Constants.NOT_SET);
}
private void initializeModel() {
Budget budget = null;
Intent intent = getIntent();
if (intent == null) return;
String action = intent.getAction();
if (TextUtils.isEmpty(action)) return;
if (action.equals(Intent.ACTION_INSERT)) {
// new record
budget = new Budget();
}
if (action.equals(Intent.ACTION_EDIT)) {
// existing record
int budgetId = getBudgetId();
BudgetRepository repo = new BudgetRepository(this);
budget = repo.load(budgetId);
}
mModel = BudgetViewModel.from(budget);
}
private void initializeToolbar() {
// Title
CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbarLayout.setTitle(getString(R.string.budget));
// Back arrow / cancel.
setDisplayHomeAsUpEnabled(true);
}
private boolean save() {
int budgetId = getBudgetId();
Budget budget = new Budget();
budget.setId(budgetId);
mModel.saveTo(budget);
BudgetRepository repo = new BudgetRepository(this);
return repo.save(budget);
}
private void showModel() {
this.viewHolder = new BudgetEditViewHolder(this);
viewHolder.bind(mModel);
}
}