package ivl.android.moneybalance; import ivl.android.moneybalance.data.Currency; import java.text.NumberFormat; import java.text.ParseException; import java.util.List; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.AdapterView.OnItemSelectedListener; class CurrencyEditor { private final Context context; private final View view; private final CurrencySpinnerAdapter spinnerAdapter; private final Spinner currencyField; private final TextView thisCurrencyLabel; private final EditText thisCurrencyRate; private final EditText mainCurrencyRate; private final Currency mainCurrency; @SuppressLint("InflateParams") public CurrencyEditor(Context context, Currency mainCurrency, List<Currency> hiddenCurrencies) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.currency_editor, null, false); this.context = context; this.mainCurrency = mainCurrency; spinnerAdapter = new CurrencySpinnerAdapter(context); for (Currency c : hiddenCurrencies) spinnerAdapter.hideItem(c.getCurrencyCode()); currencyField = (Spinner) view.findViewById(R.id.additional_currency_spinner); currencyField.setAdapter(spinnerAdapter); currencyField.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { updateSelectedCurrency(); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); thisCurrencyLabel = (TextView) view.findViewById(R.id.currency_symbol_this); TextView mainCurrencyLabel = (TextView) view.findViewById(R.id.currency_symbol_main); mainCurrencyLabel.setText(mainCurrency.getSymbol()); thisCurrencyRate = (EditText) view.findViewById(R.id.exchange_rate_this); mainCurrencyRate = (EditText) view.findViewById(R.id.exchange_rate_main); updateSelectedCurrency(); } public View getView() { return view; } public void setValue(Currency value) { int position = spinnerAdapter.findItem(value.getCurrencyCode()); currencyField.setSelection(position); currencyField.setEnabled(false); thisCurrencyLabel.setText(value.getSymbol()); setExchangeRateThis(value.getExchangeRateThis()); setExchangeRateMain(value.getExchangeRateMain()); } public boolean validate() { final Resources res = context.getResources(); final String errNumber = res.getString(R.string.validate_number); final double EPSILON = 0.001; boolean thisValid = false; try { double rate = getExchangeRateThis(); thisValid = (rate > EPSILON); } catch (Exception ignored) {} thisCurrencyRate.setError(thisValid ? null : errNumber); boolean mainValid = false; try { double rate = getExchangeRateMain(); mainValid = (rate > EPSILON); } catch (Exception ignored) {} mainCurrencyRate.setError(mainValid ? null : errNumber); return thisValid && mainValid; } public Currency getValue(long calculationId) { try { Currency value = new Currency(calculationId); value.setCurrencyCode(getSelectedCurrencyCode()); value.setExchangeRate(getExchangeRateThis(), getExchangeRateMain()); return value; } catch (ParseException e) { return null; } } private void updateSelectedCurrency() { java.util.Currency c = (java.util.Currency) currencyField.getSelectedItem(); thisCurrencyLabel.setText(c.getSymbol()); } private String getSelectedCurrencyCode() { java.util.Currency c = (java.util.Currency) currencyField.getSelectedItem(); return c.getCurrencyCode(); } private void setExchangeRateThis(double rate) { java.util.Currency c = (java.util.Currency) currencyField.getSelectedItem(); CurrencyHelper helper = new CurrencyHelper(c); thisCurrencyRate.setText(helper.format(rate, false)); } private double getExchangeRateThis() throws ParseException { String str = thisCurrencyRate.getText().toString(); return NumberFormat.getNumberInstance().parse(str).doubleValue(); } private void setExchangeRateMain(double rate) { CurrencyHelper helper = mainCurrency.getCurrencyHelper(); mainCurrencyRate.setText(helper.format(rate, false)); } private double getExchangeRateMain() throws ParseException { String str = mainCurrencyRate.getText().toString(); return NumberFormat.getNumberInstance().parse(str).doubleValue(); } }