Subversion Repositories ES

Rev

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
    }