/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { if (DEBUG) { Log.d(TAG, "onCreate(" + savedInstanceState + ")"); } super.onCreate(savedInstanceState); setContentView(R.layout.main); mCelsius = (EditNumber) findViewById(R.id.celsius); mFahrenheit = (EditNumber) findViewById(R.id.fahrenheit); mCelsius.addTextChangedListener( new TemperatureChangeWatcher(mCelsius, mFahrenheit) { @Override protected double convert(double temp) { return TemperatureConverter.celsiusToFahrenheit(temp); } }); mFahrenheit.addTextChangedListener( new TemperatureChangeWatcher(mFahrenheit, mCelsius) { @Override protected double convert(double temp) { return TemperatureConverter.fahrenheitToCelsius(temp); } }); if (savedInstanceState != null) { if (savedInstanceState.containsKey(CELSIUS_KEY)) { final double c = savedInstanceState.getDouble(CELSIUS_KEY); final double f = TemperatureConverter.celsiusToFahrenheit(c); if (DEBUG) { Log.d(TAG, "onCreate: restoring celsius: " + c); } mCelsius.setNumber(c); mFahrenheit.setNumber(f); } else if (savedInstanceState.containsKey(FAHRENHEIT_KEY)) { final double f = savedInstanceState.getDouble(FAHRENHEIT_KEY); final double c = TemperatureConverter.fahrenheitToCelsius(f); if (DEBUG) { Log.d(TAG, "onCreate: restoring fahrenheit: " + f); } mFahrenheit.setNumber(f); mCelsius.setNumber(c); } } mCelsius.setOnFocusChangeListener(mTemperatureEntryFocusChangeListener); mFahrenheit.setOnFocusChangeListener(mTemperatureEntryFocusChangeListener); }
@Override public void onTextChanged(CharSequence input, int start, int before, int count) { if (!destinationEditNumber.hasWindowFocus() || destinationEditNumber.hasFocus() || input == null) { return; } String str = input.toString(); if ("".equals(str)) { destinationEditNumber.setText(""); return; } try { double temp = Double.parseDouble(str); double result = (option == Option.C2F) ? TemperatureConverter.celsiusToFahrenheit(temp) : TemperatureConverter.fahrenheitToCelsius(temp); String resultString = String.format("%.2f", result); destinationEditNumber.setNumber(result); destinationEditNumber.setSelection(resultString.length()); } catch (NumberFormatException ignore) { // WARNING this is generated whilst numbers are being entered, // for example just a '-' so we don't want to show the error just yet } catch (Exception e) { sourceEditNumber.setError("ERROR: " + e.getLocalizedMessage()); } }
/* * (non-Javadoc) * @see android.text.TextWatcher#onTextChanged(java.lang.CharSequence, * int, int, int) */ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (DEBUG) { Log.d(TAG, "onTextChanged(" + s + ", " + start + ", " + before + ") ###############"); } if (!mDest.hasWindowFocus() || mDest.hasFocus() || s == null) { return; } final String str = s.toString(); if ("".equals(str)) { mDest.setText(""); return; } try { android.util.Log.v(TAG, "converting temp=" + str + "{" + Double.parseDouble(str) + "}"); final double result = convert(Double.parseDouble(str)); android.util.Log.v("TemperatureChangeWatcher", "result=" + result); // final String resutlStr = String.format("%.2f", result); mDest.setNumber(result); } catch (NumberFormatException e) { // WARNING: // this is thrown while a number is entered // for example just a '-' } catch (Exception e) { Log.e(TAG, "ERROR", e); mSource.setError("ERROR: " + e.getLocalizedMessage()); } }