Rev 15 | Rev 17 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 15 | Rev 16 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | import java.util.HashMap; |
3 | import java.util.HashMap; |
4 | import java.util.Map.Entry; |
4 | import java.util.Map.Entry; |
5 | 5 | ||
6 | import android.app.Activity; |
6 | import android.app.Activity; |
7 | import android.os.Bundle; |
7 | import android.os.Bundle; |
- | 8 | import android.os.Handler; |
|
8 | import android.text.Editable; |
9 | import android.text.Editable; |
9 | import android.view.KeyEvent; |
10 | import android.view.KeyEvent; |
10 | import android.view.Menu; |
11 | import android.view.Menu; |
11 | import android.view.MenuInflater; |
12 | import android.view.MenuInflater; |
12 | import android.view.MenuItem; |
13 | import android.view.MenuItem; |
Line 21... | Line 22... | ||
21 | import android.widget.TableLayout; |
22 | import android.widget.TableLayout; |
22 | import android.widget.TableRow; |
23 | import android.widget.TableRow; |
23 | import android.widget.TextView; |
24 | import android.widget.TextView; |
24 | import de.pointedears.converter.R; |
25 | import de.pointedears.converter.R; |
25 | import de.pointedears.converter.db.CurrenciesDatabase; |
26 | import de.pointedears.converter.db.CurrenciesDatabase; |
26 | import de.pointedears.converter.helpers.CurrenciesUpdateThread; |
27 | import de.pointedears.converter.helpers.ConverterThread; |
- | 28 | import de.pointedears.converter.net.RatesUpdater; |
|
27 | 29 | ||
28 | /**
|
30 | /**
|
29 | * Activity that implements currency conversion
|
31 | * Activity that implements currency conversion
|
30 | *
|
32 | *
|
31 | * @author pelinux
|
33 | * @author pelinux
|
Line 56... | Line 58... | ||
56 | /* Unit spinners (dropdowns) */
|
58 | /* Unit spinners (dropdowns) */
|
57 | private Spinner spinnerUnit1; |
59 | private Spinner spinnerUnit1; |
58 | private Spinner spinnerUnit2; |
60 | private Spinner spinnerUnit2; |
59 | private CurrenciesDatabase db; |
61 | private CurrenciesDatabase db; |
60 | 62 | ||
61 | private HashMap<String, HashMap<String, Double>> conversionRates; |
63 | private HashMap<String, Double> conversionRates; |
- | 64 | private ConverterThread updateThread; |
|
- | 65 | private Handler handler; |
|
- | 66 | ||
- | 67 | private RatesUpdater updateRates; |
|
62 | 68 | ||
63 | /** Called when the activity is first created. */
|
69 | /** Called when the activity is first created. */
|
64 | 70 | ||
65 | @Override |
71 | @Override |
66 | public void onCreate(Bundle savedInstanceState) |
72 | public void onCreate(Bundle savedInstanceState) |
Line 184... | Line 190... | ||
184 | {
|
190 | {
|
185 | editValue1.setText(""); |
191 | editValue1.setText(""); |
186 | editValue2.setText(""); |
192 | editValue2.setText(""); |
187 | }
|
193 | }
|
188 | }); |
194 | }); |
- | 195 | ||
- | 196 | if (this.handler == null) |
|
- | 197 | {
|
|
- | 198 | this.handler = new Handler(); |
|
- | 199 | }
|
|
- | 200 | ||
- | 201 | this.updateThread = null; |
|
189 | }
|
202 | }
|
190 | 203 | ||
191 | /**
|
204 | /**
|
192 | * Fills the table with currency conversion rates
|
205 | * Fills the table with currency conversion rates
|
193 | */
|
206 | */
|
194 | private void fillTableRates() |
207 | private void fillTableRates() |
195 | {
|
208 | {
|
196 | TableLayout tableRates = |
209 | TableLayout tableRates = |
197 | (TableLayout) this.findViewById(R.id.currencies_table_rates); |
210 | (TableLayout) this.findViewById(R.id.currencies_table_rates); |
198 | 211 | ||
199 | for (String key : this.conversionRates.keySet()) |
212 | for (Entry<String, Double> factorEntry : this.conversionRates.entrySet()) |
200 | {
|
213 | {
|
201 | for (Entry<String, Double> factorEntry : this.conversionRates.get(key) |
- | |
202 | .entrySet()) |
- | |
203 | {
|
- | |
204 | TableRow row = new TableRow(this); |
214 | TableRow row = new TableRow(this); |
205 | - | ||
206 | TextView columnCurrency1 = new TextView(this); |
- | |
207 | columnCurrency1.setText(key); |
- | |
208 | row.addView(columnCurrency1); |
- | |
209 | 215 | ||
210 | TextView columnCurrency2 = new TextView(this); |
216 | TextView columnCurrency1 = new TextView(this); |
211 | columnCurrency2.setText(factorEntry.getKey()); |
217 | columnCurrency1.setText(factorEntry.getKey()); |
212 | row.addView(columnCurrency2); |
218 | row.addView(columnCurrency1); |
213 | 219 | ||
214 | TextView columnRate = new TextView(this); |
220 | TextView columnRate = new TextView(this); |
215 | columnRate.setText(factorEntry.getValue().toString()); |
221 | columnRate.setText(factorEntry.getValue().toString()); |
216 | row.addView(columnRate); |
222 | row.addView(columnRate); |
217 | 223 | ||
218 | tableRates.addView(row); |
224 | tableRates.addView(row); |
219 | }
|
- | |
220 | }
|
225 | }
|
221 | }
|
226 | }
|
222 | 227 | ||
223 | /**
|
228 | /**
|
224 | * @param value
|
229 | * @param value
|
Line 240... | Line 245... | ||
240 | selectedItemValue2 = tmp;
|
245 | selectedItemValue2 = tmp;
|
241 | }
|
246 | }
|
242 | 247 | ||
243 | Double newValue = value; |
248 | Double newValue = value; |
244 | 249 | ||
- | 250 | /*
|
|
- | 251 | * NOTE: Had to do it the complicated way because somehow the Android SDK
|
|
245 | HashMap<String, Double> mapForCurrency = |
252 | * won't get it another way
|
- | 253 | */
|
|
246 | this.conversionRates.get(selectedItemValue1); |
254 | Double factorToEuro = null; |
247 | if (mapForCurrency != null) |
255 | if (selectedItemValue1 != null) |
248 | {
|
256 | {
|
249 | Double conversionFactor = mapForCurrency.get(selectedItemValue2); |
257 | factorToEuro = this.conversionRates.get(selectedItemValue1); |
250 | if (conversionFactor != null) |
- | |
251 | {
|
- | |
252 | newValue *= conversionFactor; |
- | |
253 | }
|
- | |
254 | }
|
258 | }
|
255 | 259 | ||
- | 260 | if (factorToEuro == null) |
|
- | 261 | {
|
|
- | 262 | factorToEuro = 1.0; |
|
- | 263 | }
|
|
- | 264 | ||
- | 265 | Double factorFromEuro = null; |
|
- | 266 | if (selectedItemValue2 != null) |
|
- | 267 | {
|
|
- | 268 | factorFromEuro = this.conversionRates.get(selectedItemValue2); |
|
- | 269 | }
|
|
- | 270 | ||
- | 271 | if (factorFromEuro == null) |
|
- | 272 | {
|
|
- | 273 | factorFromEuro = 1.0; |
|
- | 274 | }
|
|
- | 275 | ||
- | 276 | newValue = newValue / factorToEuro * factorFromEuro; |
|
- | 277 | ||
256 | return newValue.toString(); |
278 | return newValue.toString(); |
257 | }
|
279 | }
|
258 | 280 | ||
259 | /*
|
281 | /*
|
260 | * (non-Javadoc)
|
282 | * (non-Javadoc)
|
Line 284... | Line 306... | ||
284 | {
|
306 | {
|
285 | // Handle item selection
|
307 | // Handle item selection
|
286 | switch (item.getItemId()) |
308 | switch (item.getItemId()) |
287 | {
|
309 | {
|
288 | case R.id.item_options_update: |
310 | case R.id.item_options_update: |
- | 311 | if (this.updateThread == null) |
|
- | 312 | {
|
|
289 | Thread updateThread = new CurrenciesUpdateThread(); |
313 | this.updateRates = new RatesUpdater(this); |
- | 314 | this.updateThread = |
|
- | 315 | new ConverterThread(this.updateRates, this.handler); |
|
- | 316 | this.updateRates.setUpdateThread(this.updateThread); |
|
- | 317 | }
|
|
- | 318 | ||
- | 319 | try
|
|
- | 320 | {
|
|
290 | updateThread.start(); |
321 | this.updateThread.start(); |
- | 322 | // this.editValue1.setText("Gestartet!");
|
|
- | 323 | }
|
|
- | 324 | catch (IllegalThreadStateException e) |
|
- | 325 | {
|
|
- | 326 | // this.editValue1.setText("Bereits gestartet!");
|
|
- | 327 | }
|
|
- | 328 | return true; |
|
- | 329 | ||
- | 330 | case R.id.item_options_quit: |
|
- | 331 | if (this.updateThread != null) |
|
- | 332 | {
|
|
- | 333 | try
|
|
- | 334 | {
|
|
- | 335 | this.updateThread.join(); |
|
- | 336 | }
|
|
- | 337 | catch (InterruptedException e) |
|
- | 338 | {
|
|
- | 339 | // TODO Auto-generated catch block
|
|
- | 340 | }
|
|
- | 341 | ||
- | 342 | // this.editValue1.setText("Gestoppt -> Warten auf Start");
|
|
- | 343 | }
|
|
- | 344 | else
|
|
- | 345 | {
|
|
- | 346 | // this.editValue1.setText("Bereits gestoppt -> Warten auf Start");
|
|
- | 347 | }
|
|
291 | return true; |
348 | return true; |
292 | 349 | ||
293 | default:
|
350 | default:
|
294 | return super.onOptionsItemSelected(item); |
351 | return super.onOptionsItemSelected(item); |
295 | }
|
352 | }
|