Subversion Repositories ES

Rev

Rev 7 | Rev 11 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8 PointedEar 1
package de.pointedears.converter.app;
5 PointedEar 2
 
7 PointedEar 3
import java.util.HashMap;
4
 
5 PointedEar 5
import android.app.Activity;
6
import android.os.Bundle;
7 PointedEar 7
import android.text.Editable;
8
import android.view.KeyEvent;
8 PointedEar 9
import android.view.Menu;
10
import android.view.MenuInflater;
11
import android.view.MenuItem;
7 PointedEar 12
import android.view.View;
13
import android.view.View.OnKeyListener;
14
import android.widget.AdapterView;
15
import android.widget.AdapterView.OnItemSelectedListener;
16
import android.widget.EditText;
17
import android.widget.Spinner;
8 PointedEar 18
import de.pointedears.converter.R;
5 PointedEar 19
 
20
/**
7 PointedEar 21
 * Activity that implements currency conversion
5 PointedEar 22
 *
7 PointedEar 23
 * @author pelinux
5 PointedEar 24
 */
25
public class CurrenciesActivity extends Activity
26
{
7 PointedEar 27
  /*
8 PointedEar 28
   * Constants for mapping value strings
7 PointedEar 29
   */
30
  private static final String VALUE_CHF = "CHF"; //$NON-NLS-1$
31
  private static final String VALUE_EUR = "EUR"; //$NON-NLS-1$
32
  private static final String VALUE_USD = "USD"; //$NON-NLS-1$
33
 
8 PointedEar 34
  private static HashMap<String, HashMap<String, Double>> currencyConversions;
7 PointedEar 35
 
36
  /* Unit spinners (dropdowns) */
37
  private Spinner spinnerUnit1;
38
  private Spinner spinnerUnit2;
39
 
40
  /** Called when the activity is first created. */
41
 
5 PointedEar 42
  @Override
7 PointedEar 43
  public void onCreate(Bundle savedInstanceState)
5 PointedEar 44
  {
45
    super.onCreate(savedInstanceState);
7 PointedEar 46
    this.setContentView(R.layout.activity_currencies);
5 PointedEar 47
 
8 PointedEar 48
    /* TODO: Set up currency database */
49
    CurrenciesActivity.currencyConversions =
50
      new HashMap<String, HashMap<String, Double>>();
51
 
52
    HashMap<String, Double> conversionFactors = new HashMap<String, Double>();
53
    conversionFactors.put(CurrenciesActivity.VALUE_EUR, 0.767842293);
54
    conversionFactors.put(CurrenciesActivity.VALUE_USD, 1.03413);
55
    CurrenciesActivity.currencyConversions.put(CurrenciesActivity.VALUE_CHF,
56
      conversionFactors);
57
 
58
    conversionFactors = new HashMap<String, Double>();
59
    conversionFactors.put(CurrenciesActivity.VALUE_CHF, 1.30235077);
60
    conversionFactors.put(CurrenciesActivity.VALUE_CHF, 1.3468);
61
    CurrenciesActivity.currencyConversions.put(CurrenciesActivity.VALUE_EUR,
62
      conversionFactors);
63
 
64
    conversionFactors = new HashMap<String, Double>();
65
    conversionFactors.put(CurrenciesActivity.VALUE_CHF, 0.966996412);
66
    conversionFactors.put(CurrenciesActivity.VALUE_EUR, 0.742500743);
67
    CurrenciesActivity.currencyConversions.put(CurrenciesActivity.VALUE_USD,
68
      conversionFactors);
69
 
7 PointedEar 70
    final EditText editValue1 =
71
      (EditText) this.findViewById(R.id.currencies_edit_value1);
72
    final EditText editValue2 =
73
      (EditText) this.findViewById(R.id.currencies_edit_value2);
74
 
75
    final OnKeyListener editValue1OnKey = new OnKeyListener() {
76
      @Override
77
      public boolean onKey(View v, int keyCode, KeyEvent event)
78
      {
79
        Editable editable1 = ((EditText) v).getText();
80
 
81
        Double value1;
82
        try
83
        {
84
          value1 = Double.parseDouble(editable1.toString());
85
        }
86
        catch (NumberFormatException e)
87
        {
88
          value1 = null;
89
        }
90
 
91
        String string2 = ""; //$NON-NLS-1$
92
        if (value1 != null)
93
        {
94
          string2 = CurrenciesActivity.this.getConvertedValue(value1, false);
95
        }
96
 
97
        editValue2.setText(string2);
98
 
99
        return false;
100
      }
101
    };
102
    editValue1.setOnKeyListener(editValue1OnKey);
103
 
104
    final OnKeyListener editValue2OnKey = new OnKeyListener() {
105
      @Override
106
      public boolean onKey(View v, int keyCode, KeyEvent event)
107
      {
108
        Editable editable2 = ((EditText) v).getText();
109
 
110
        Double value2;
111
        try
112
        {
113
          value2 = Double.parseDouble(editable2.toString());
114
        }
115
        catch (NumberFormatException e)
116
        {
117
          value2 = null;
118
        }
119
 
120
        String string1 = ""; //$NON-NLS-1$
121
        if (value2 != null)
122
        {
123
          string1 = CurrenciesActivity.this.getConvertedValue(value2, true);
124
        }
125
 
126
        editValue1.setText(string1);
127
 
128
        return false;
129
      }
130
    };
131
    editValue2.setOnKeyListener(editValue2OnKey);
132
 
133
    this.spinnerUnit1 =
134
      (Spinner) this.findViewById(R.id.currencies_spinner_unit1);
135
    this.spinnerUnit2 =
136
      (Spinner) this.findViewById(R.id.currencies_spinner_unit2);
137
 
138
    this.spinnerUnit1.setOnItemSelectedListener(new OnItemSelectedListener() {
139
      @Override
140
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
141
        long arg3)
142
      {
143
        /* Simulate input in second EditText so that first EditText is updated */
144
        editValue2OnKey.onKey(editValue2, 0, null);
145
      }
146
 
147
      @Override
148
      public void onNothingSelected(AdapterView<?> arg0)
149
      {
150
        /* no-op */
151
      }
152
    });
153
 
154
    this.spinnerUnit2.setSelection(1);
155
    this.spinnerUnit2.setOnItemSelectedListener(new OnItemSelectedListener() {
156
      @Override
157
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
158
        long arg3)
159
      {
160
        /* Simulate input in first EditText so that second EditText is updated */
161
        editValue1OnKey.onKey(editValue1, 0, null);
162
      }
163
 
164
      @Override
165
      public void onNothingSelected(AdapterView<?> arg0)
166
      {
167
        /* no-op */
168
      }
169
    });
5 PointedEar 170
  }
7 PointedEar 171
 
172
  /**
173
   * @param value
174
   * @return
175
   */
176
  private String getConvertedValue(double value, boolean reverse)
177
  {
178
    int selectedItemPosition1 = this.spinnerUnit1.getSelectedItemPosition();
179
    int selectedItemPosition2 = this.spinnerUnit2.getSelectedItemPosition();
8 PointedEar 180
    String[] items =
7 PointedEar 181
      this.getResources().getStringArray(R.array.currency_units_values);
8 PointedEar 182
    String selectedItemValue1 = items[selectedItemPosition1];
183
    String selectedItemValue2 = items[selectedItemPosition2];
7 PointedEar 184
 
185
    if (reverse)
186
    {
187
      String tmp = selectedItemValue1;
188
      selectedItemValue1 = selectedItemValue2;
189
      selectedItemValue2 = tmp;
190
    }
191
 
192
    Double newValue = value;
193
 
8 PointedEar 194
    HashMap<String, Double> mapForCurrency =
195
      CurrenciesActivity.currencyConversions.get(selectedItemValue1);
196
    if (mapForCurrency != null)
7 PointedEar 197
    {
8 PointedEar 198
      Double conversionFactor = mapForCurrency.get(selectedItemValue2);
199
      if (conversionFactor != null)
200
      {
201
        newValue *= conversionFactor;
202
      }
7 PointedEar 203
    }
204
 
205
    return newValue.toString();
206
  }
8 PointedEar 207
 
208
  /*
209
   * (non-Javadoc)
210
   *
211
   * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
212
   */
213
  @Override
214
  public boolean onCreateOptionsMenu(Menu menu)
215
  {
216
    MenuInflater inflater = this.getMenuInflater();
217
    inflater.inflate(R.menu.options, menu);
218
    return true;
219
  }
220
 
221
  /*
222
   * (non-Javadoc)
223
   *
224
   * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
225
   */
226
  @Override
227
  public boolean onOptionsItemSelected(MenuItem item)
228
  {
229
    /* update here */
230
    return super.onOptionsItemSelected(item);
231
  }
5 PointedEar 232
}