/******************************************************************************* * Copyright (c) 2010 Denis Solonenko. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v2.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * Denis Solonenko - initial API and implementation ******************************************************************************/ package ru.orangesoftware.financisto2.activity; import android.app.Activity; import android.content.Intent; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Spinner; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.res.StringArrayRes; import java.text.DecimalFormatSymbols; import ru.orangesoftware.financisto2.R; import ru.orangesoftware.financisto2.db.DatabaseAdapter; import ru.orangesoftware.financisto2.model.Currency; import ru.orangesoftware.financisto2.model.SymbolFormat; import ru.orangesoftware.financisto2.utils.CurrencyCache; import ru.orangesoftware.financisto2.utils.PinProtection; import static ru.orangesoftware.financisto2.utils.Utils.checkEditText; import static ru.orangesoftware.financisto2.utils.Utils.text; @EActivity(R.layout.currency) public class CurrencyActivity extends Activity { public static final String CURRENCY_ID_EXTRA = "currencyId"; private static final DecimalFormatSymbols s = new DecimalFormatSymbols(); @Bean protected DatabaseAdapter db; @Extra protected long currencyId = -1; @StringArrayRes(R.array.decimal_separators) protected String[] decimalSeparatorsItems; @StringArrayRes(R.array.group_separators) protected String[] groupSeparatorsItems; private SymbolFormat[] symbolFormats = SymbolFormat.values(); @ViewById(R.id.name) protected EditText name; @ViewById(R.id.title) protected EditText title; @ViewById(R.id.symbol) protected EditText symbol; @ViewById(R.id.is_default) protected CheckBox isDefault; @ViewById(R.id.spinnerDecimals) protected Spinner decimals; @ViewById(R.id.spinnerDecimalSeparators) protected Spinner decimalSeparators; @ViewById(R.id.spinnerGroupSeparators) protected Spinner groupSeparators; @ViewById(R.id.spinnerSymbolFormat) protected Spinner symbolFormat; private int maxDecimals; private Currency currency = new Currency(); @AfterViews protected void afterViews() { groupSeparators.setSelection(1); symbolFormat.setSelection(0); maxDecimals = decimals.getCount() - 1; if (currencyId != -1) { currency = db.load(Currency.class, currencyId); editCurrency(); } else { makeDefaultIfNecessary(); } } @Click(R.id.bOK) protected void onOK() { if (checkEditText(title, "title", true, 100) && checkEditText(name, "code", true, 3) && checkEditText(symbol, "symbol", true, 3)) { currency.title = text(title); currency.name = text(name); currency.symbol = text(symbol); currency.isDefault = isDefault.isChecked(); currency.decimals = maxDecimals - decimals.getSelectedItemPosition(); currency.decimalSeparator = decimalSeparators.getSelectedItem().toString(); currency.groupSeparator = groupSeparators.getSelectedItem().toString(); currency.symbolFormat = symbolFormats[symbolFormat.getSelectedItemPosition()]; long id = db.saveOrUpdate(currency); CurrencyCache.initialize(db); Intent data = new Intent(); data.putExtra(CURRENCY_ID_EXTRA, id); setResult(RESULT_OK, data); finish(); } } @Click(R.id.bCancel) protected void onCancel() { setResult(RESULT_CANCELED, null); finish(); } private void makeDefaultIfNecessary() { isDefault.setChecked(db.getAllCurrenciesList().isEmpty()); } private void editCurrency() { Currency currency = this.currency; EditText name = (EditText) findViewById(R.id.name); name.setText(currency.name); EditText title = (EditText) findViewById(R.id.title); title.setText(currency.title); EditText symbol = (EditText) findViewById(R.id.symbol); symbol.setText(currency.symbol); CheckBox isDefault = (CheckBox) findViewById(R.id.is_default); isDefault.setChecked(currency.isDefault); decimals.setSelection(maxDecimals - currency.decimals); decimalSeparators.setSelection(indexOf(decimalSeparatorsItems, currency.decimalSeparator, s.getDecimalSeparator())); groupSeparators.setSelection(indexOf(groupSeparatorsItems, currency.groupSeparator, s.getGroupingSeparator())); symbolFormat.setSelection(currency.symbolFormat.ordinal()); } private int indexOf(String[] a, String v, char c) { int count = a.length; int d = -1; for (int i = 0; i < count; i++) { String s = a[i]; if (v != null && s.charAt(1) == v.charAt(1)) { return i; } if (s.charAt(1) == c) { d = i; } } return d; } @Override protected void onPause() { super.onPause(); PinProtection.lock(this); } @Override protected void onResume() { super.onResume(); PinProtection.unlock(this); } }