/* * 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.currency; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.text.TextUtils; import android.widget.Spinner; import android.widget.Toast; import com.money.manager.ex.Constants; import com.money.manager.ex.R; import com.money.manager.ex.common.MmxBaseFragmentActivity; import com.money.manager.ex.domainmodel.Currency; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Arrays; /** * Edit currency */ public class CurrencyEditActivity extends MmxBaseFragmentActivity { // key intent public static final String KEY_CURRENCY_ID = "CurrencyEditActivity:CurrencyId"; // update-instance key private static final String KEY_CURRENCY_NAME = "CurrencyEditActivity:CurrencyName"; private static final String KEY_CURRENCY_SYMBOL = "CurrencyEditActivity:CurrencySymbol"; private static final String KEY_UNIT_NAME = "CurrencyEditActivity:UnitName"; private static final String KEY_CENTS_NAME = "CurrencyEditActivity:CentsName"; private static final String KEY_PREFIX_SYMBOL = "CurrencyEditActivity:PrefixSymbol"; private static final String KEY_SUFFIX_SYMBOL = "CurrencyEditActivity:SuffixSymbol"; private static final String KEY_DECIMAL_CHAR = "CurrencyEditActivity:DecimalChar"; private static final String KEY_GROUP_CHAR = "CurrencyEditActivity:GroupChar"; private static final String KEY_SCALE = "CurrencyEditActivity:Scale"; private static final String KEY_CONVERSION_TO_BASE = "CurrencyEditActivity:ConversionToBaseRate"; private static final String KEY_ACTION = "CurrencyEditActivity:Action"; private Integer mCurrencyId; // type of action private String mIntentAction = ""; CurrencyEditViewHolder holder; @Override public boolean onActionCancelClick() { finish(); return true; } @Override public boolean onActionDoneClick() { if (save()) { finish(); return true; } else { return false; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.currency_edit_activity); showStandardToolbarActions(); this.holder = CurrencyEditViewHolder.initialize(this); // update instance if (savedInstanceState != null) { restoreInstanceState(savedInstanceState); } // manage intent if (getIntent() != null) { if (savedInstanceState == null) { mCurrencyId = getIntent().getIntExtra(KEY_CURRENCY_ID, -1); if (getIntent().getAction() != null && Intent.ACTION_EDIT.equals(getIntent().getAction())) { mCurrencyId = getIntent().getIntExtra(KEY_CURRENCY_ID, -1); // load existing data loadData(mCurrencyId); } } mIntentAction = getIntent().getAction(); } // check default values for scale and base conversion rate if (Intent.ACTION_INSERT.equalsIgnoreCase(mIntentAction)) { if (TextUtils.isEmpty(holder.edtScale.getText())) holder.edtScale.setText("100"); if (TextUtils.isEmpty(holder.edtConversion.getText())) holder.edtConversion.setText("1"); // set default separator DecimalFormatSymbols symbols = ((DecimalFormat) DecimalFormat.getInstance()).getDecimalFormatSymbols(); if (TextUtils.isEmpty(holder.edtDecimal.getText())) holder.edtDecimal.setText(Character.toString(symbols.getDecimalSeparator())); if (TextUtils.isEmpty(holder.edtGroup.getText())) holder.edtGroup.setText(Character.toString(symbols.getGroupingSeparator())); // set default symbols if (TextUtils.isEmpty(holder.edtPrefix.getText())) holder.edtPrefix.setText(symbols.getCurrencySymbol()); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(KEY_CURRENCY_ID, mCurrencyId); outState.putString(KEY_CURRENCY_NAME, holder.edtCurrencyName.getText().toString()); if (holder.spinCurrencySymbol.getSelectedItemPosition() != Spinner.INVALID_POSITION) { outState.putString(KEY_CURRENCY_SYMBOL, getResources() .getStringArray(R.array.currencies_code)[holder.spinCurrencySymbol.getSelectedItemPosition()]); } outState.putString(KEY_UNIT_NAME, holder.edtCurrencyName.getText().toString()); outState.putString(KEY_CENTS_NAME, holder.edtCentsName.getText().toString()); outState.putString(KEY_PREFIX_SYMBOL, holder.edtPrefix.getText().toString()); outState.putString(KEY_SUFFIX_SYMBOL, holder.edtSuffix.getText().toString()); outState.putString(KEY_DECIMAL_CHAR, holder.edtDecimal.getText().toString()); outState.putString(KEY_GROUP_CHAR, holder.edtGroup.getText().toString()); outState.putString(KEY_SCALE, holder.edtScale.getText().toString()); outState.putString(KEY_CONVERSION_TO_BASE, holder.edtConversion.getText().toString()); } private boolean loadData(int currencyId) { CurrencyRepository repo = new CurrencyRepository(this); Cursor cursor = getContentResolver().query(repo.getUri(), repo.getAllColumns(), Currency.CURRENCYID + "=?", new String[]{Integer.toString(currencyId)}, null); // check if cursor is valid and open if ((cursor == null) || (!cursor.moveToFirst())) { return false; } // populate values holder.edtCurrencyName.setText(cursor.getString(cursor.getColumnIndex(Currency.CURRENCYNAME))); holder.spinCurrencySymbol.setSelection(Arrays.asList(getResources().getStringArray(R.array.currencies_code)) .indexOf(cursor.getString(cursor.getColumnIndex(Currency.CURRENCY_SYMBOL))), true); holder.edtUnitName.setText(cursor.getString(cursor.getColumnIndex(Currency.UNIT_NAME))); holder.edtCentsName.setText(cursor.getString(cursor.getColumnIndex(Currency.CENT_NAME))); holder.edtPrefix.setText(cursor.getString(cursor.getColumnIndex(Currency.PFX_SYMBOL))); holder.edtSuffix.setText(cursor.getString(cursor.getColumnIndex(Currency.SFX_SYMBOL))); holder.edtDecimal.setText(cursor.getString(cursor.getColumnIndex(Currency.DECIMAL_POINT))); holder.edtGroup.setText(cursor.getString(cursor.getColumnIndex(Currency.GROUP_SEPARATOR))); holder.edtScale.setText(cursor.getString(cursor.getColumnIndex(Currency.SCALE))); holder.edtConversion.setText(cursor.getString(cursor.getColumnIndex(Currency.BASECONVRATE))); cursor.close(); return true; } private void restoreInstanceState(Bundle savedInstanceState) { mCurrencyId = savedInstanceState.getInt(KEY_CURRENCY_ID); holder.edtCurrencyName.setText(savedInstanceState.getString(KEY_CURRENCY_NAME)); holder.spinCurrencySymbol.setSelection(Arrays.asList(getResources().getStringArray(R.array.currencies_code)) .indexOf(savedInstanceState.getString(KEY_CURRENCY_SYMBOL)), true); holder.edtUnitName.setText(savedInstanceState.getString(KEY_UNIT_NAME)); holder.edtCentsName.setText(savedInstanceState.getString(KEY_CENTS_NAME)); holder.edtPrefix.setText(savedInstanceState.getString(KEY_PREFIX_SYMBOL)); holder.edtSuffix.setText(savedInstanceState.getString(KEY_SUFFIX_SYMBOL)); holder.edtDecimal.setText(savedInstanceState.getString(KEY_DECIMAL_CHAR)); holder.edtGroup.setText(savedInstanceState.getString(KEY_GROUP_CHAR)); holder.edtScale.setText(savedInstanceState.getString(KEY_SCALE)); holder.edtConversion.setText(savedInstanceState.getString(KEY_CONVERSION_TO_BASE)); // action mIntentAction = savedInstanceState.getString(KEY_ACTION); } /** * This method is used to validate the data before saving * * @return true if data is valid */ private boolean validateData() { if (TextUtils.isEmpty(holder.edtCurrencyName.getText().toString())) { Toast.makeText(getApplicationContext(), R.string.currency_name_empty, Toast.LENGTH_LONG).show(); return false; } return true; } /** * This method update data into database * @return true if data is update into database */ private boolean save() { if (!validateData()) return false; Currency currency = new Currency(); currency.setName(holder.edtCurrencyName.getText().toString().trim()); if (holder.spinCurrencySymbol.getSelectedItemPosition() != Spinner.INVALID_POSITION) { String code = getResources() .getStringArray(R.array.currencies_code)[holder.spinCurrencySymbol.getSelectedItemPosition()]; currency.setCode(code); } currency.setUnitName(holder.edtUnitName.getText().toString().trim()); currency.setCentName(holder.edtCentsName.getText().toString().trim()); currency.setPfxSymbol(holder.edtPrefix.getText().toString().trim()); currency.setSfxSymbol(holder.edtSuffix.getText().toString().trim()); currency.setDecimalPoint(holder.edtDecimal.getText().toString().trim()); currency.setGroupSeparator(holder.edtGroup.getText().toString().trim()); // todo: convert to integer currency.contentValues.put(Currency.SCALE, holder.edtScale.getText().toString().trim()); // todo: convert to double currency.contentValues.put(Currency.BASECONVRATE, holder.edtConversion.getText().toString().trim()); // currency.setConversionRate(); CurrencyRepository repo = new CurrencyRepository(getApplicationContext()); // update data boolean success; switch (mIntentAction) { case Intent.ACTION_INSERT: success = repo.insert(currency); break; // todo: use ACTION_EDIT explicitly. default: // Add Id value only when updating. if (mCurrencyId != Constants.NOT_SET) { currency.setCurrencyid(mCurrencyId); } success = repo.update(currency); break; } return success; } }