diff --git a/android/src/net/sf/openrocket/android/PreferencesActivity.java b/android/src/net/sf/openrocket/android/PreferencesActivity.java index 9680c9e85..5aa544ad7 100644 --- a/android/src/net/sf/openrocket/android/PreferencesActivity.java +++ b/android/src/net/sf/openrocket/android/PreferencesActivity.java @@ -1,29 +1,52 @@ package net.sf.openrocket.android; import net.sf.openrocket.R; +import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.unit.UnitGroup; import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.Preference; import android.preference.PreferenceManager; public class PreferencesActivity extends android.preference.PreferenceActivity -implements SharedPreferences.OnSharedPreferenceChangeListener { +{ + @Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); addPreferencesFromResource(R.xml.preferences); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - prefs.registerOnSharedPreferenceChangeListener(this); + + PreferenceManager prefManager = getPreferenceManager(); + { + String key = getApplication().getResources().getString(R.string.PreferenceUnitLengthOption); + Preference pref = prefManager.findPreference(key); + new UnitPreferenceListener(pref, UnitGroup.UNITS_LENGTH, "Current value "); + + } + { + String key = getApplication().getResources().getString(R.string.PreferenceUnitMassOption); + Preference pref = prefManager.findPreference(key); + new UnitPreferenceListener(pref, UnitGroup.UNITS_MASS, "Current value "); + + } + { + String key = getApplication().getResources().getString(R.string.PreferenceUnitVelocityOption); + Preference pref = prefManager.findPreference(key); + new UnitPreferenceListener(pref, UnitGroup.UNITS_VELOCITY, "Current value "); + + } + { + String key = getApplication().getResources().getString(R.string.PreferenceUnitDistanceOption); + Preference pref = prefManager.findPreference(key); + new UnitPreferenceListener(pref, UnitGroup.UNITS_DISTANCE, "Current value "); + + } } - /* (non-Javadoc) - * @see android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged(android.content.SharedPreferences, java.lang.String) - */ @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - - initializePreferences(getApplication(), PreferenceManager.getDefaultSharedPreferences(this)); + protected void onDestroy() { + super.onDestroy(); } /** @@ -39,6 +62,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener { String len = sharedPreferences.getString(unitLength, "cm"); UnitGroup.UNITS_LENGTH.setDefaultUnit( len ); + AndroidLogWrapper.d(PreferencesActivity.class, "Chaning mass"); String unitMass = app.getResources().getString(R.string.PreferenceUnitMassOption); String mass = sharedPreferences.getString(unitMass, "g"); UnitGroup.UNITS_MASS.setDefaultUnit( mass ); @@ -53,12 +77,28 @@ implements SharedPreferences.OnSharedPreferenceChangeListener { } - @Override - protected void onStop() { - initializePreferences(getApplication(), PreferenceManager.getDefaultSharedPreferences(this)); - super.onStop(); + private class UnitPreferenceListener implements Preference.OnPreferenceChangeListener { + + private UnitGroup matchedGroup; + private String message; + private Preference pref; + + private UnitPreferenceListener( Preference pref, UnitGroup unit, String message) { + this.pref = pref; + this.matchedGroup = unit; + this.message = message; + pref.setSummary(message + unit.getDefaultUnit().getUnit()); + // todo figure out how to setSummary - need to get initial value. + pref.setOnPreferenceChangeListener(this); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + matchedGroup.setDefaultUnit((String)newValue); + preference.setSummary(message + newValue); + return true; + } + } - - } diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java index 8584c763d..9362c8bf2 100644 --- a/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java +++ b/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java @@ -13,9 +13,7 @@ import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; import net.sf.openrocket.rocketcomponent.Configuration; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; @@ -27,8 +25,7 @@ import android.view.View; import android.widget.TabHost; public class OpenRocketViewer extends FragmentActivity -implements SharedPreferences.OnSharedPreferenceChangeListener, -Simulations.OnSimulationSelectedListener +implements Simulations.OnSimulationSelectedListener { OpenRocketDocument rocketDocument; @@ -48,9 +45,6 @@ Simulations.OnSimulationSelectedListener setContentView(R.layout.openrocketviewer); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - prefs.registerOnSharedPreferenceChangeListener(this); - mTabHost = (TabHost)findViewById(android.R.id.tabhost); mTabHost.setup(); @@ -76,15 +70,6 @@ Simulations.OnSimulationSelectedListener outState.putString("tab", mTabHost.getCurrentTabTag()); } - /* (non-Javadoc) - * @see android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged(android.content.SharedPreferences, java.lang.String) - */ - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - // just in case the user changed the units, we redraw. - // TODO = updateContents(); redraw all children.. - } - @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); diff --git a/android/src/net/sf/openrocket/android/rocket/Overview.java b/android/src/net/sf/openrocket/android/rocket/Overview.java index d1b7a9ce8..d287a8165 100644 --- a/android/src/net/sf/openrocket/android/rocket/Overview.java +++ b/android/src/net/sf/openrocket/android/rocket/Overview.java @@ -17,7 +17,9 @@ import net.sf.openrocket.rocketcomponent.RocketUtils; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.Coordinate; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; @@ -27,7 +29,9 @@ import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; -public class Overview extends Fragment { +public class Overview extends Fragment +implements SharedPreferences.OnSharedPreferenceChangeListener +{ /* Calculation of CP and CG */ private AerodynamicCalculator aerodynamicCalculator = new BarrowmanCalculator(); @@ -46,11 +50,33 @@ public class Overview extends Fragment { return v; } - @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + prefs.registerOnSharedPreferenceChangeListener(this); + setup(); + + } + + @Override + public void onDestroy() { + super.onDestroy(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + prefs.unregisterOnSharedPreferenceChangeListener(this); +} + + @Override + public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) { + if ( this.isVisible() ) { + setup(); + } + } + + private void setup() { final OpenRocketDocument rocketDocument = ((Application)getActivity().getApplication()).getRocketDocument(); final Configuration rocketConfiguration = rocketDocument.getDefaultConfiguration(); Rocket rocket = rocketDocument.getRocket(); @@ -63,7 +89,7 @@ public class Overview extends Fragment { AndroidLogWrapper.d(Overview.class, "spinnerAdapter = " + spinnerAdapter); AndroidLogWrapper.d(Overview.class, "configurationSpinner = " + configurationSpinner); - + configurationSpinner.setAdapter(spinnerAdapter); configurationSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @@ -108,16 +134,13 @@ public class Overview extends Fragment { Unit lengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); Unit massUnit = UnitGroup.UNITS_MASS.getDefaultUnit(); - + Coordinate cg = RocketUtils.getCG(rocket, MassCalcType.NO_MOTORS); double length = RocketUtils.getLength(rocket); ((TextView)getActivity().findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner()); ((TextView)getActivity().findViewById(R.id.openrocketviewerLength)).setText(lengthUnit.toStringUnit(length)); ((TextView)getActivity().findViewById(R.id.openrocketviewerMass)).setText(massUnit.toStringUnit(cg.weight)); ((TextView)getActivity().findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount())); - - } - } diff --git a/android/src/net/sf/openrocket/android/rocket/Simulations.java b/android/src/net/sf/openrocket/android/rocket/Simulations.java index f36c1dd68..b30614175 100644 --- a/android/src/net/sf/openrocket/android/rocket/Simulations.java +++ b/android/src/net/sf/openrocket/android/rocket/Simulations.java @@ -8,7 +8,9 @@ import net.sf.openrocket.document.Simulation; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; import android.app.Activity; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; @@ -19,12 +21,14 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; -public class Simulations extends Fragment { +public class Simulations extends Fragment +implements SharedPreferences.OnSharedPreferenceChangeListener +{ public interface OnSimulationSelectedListener { public void onSimulationSelected( int simulationId ); } - + private ListView simulationList; private OnSimulationSelectedListener listener; @@ -54,6 +58,30 @@ public class Simulations extends Fragment { public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + prefs.registerOnSharedPreferenceChangeListener(this); + + setup(); + + } + + @Override + public void onDestroy() { + super.onDestroy(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + prefs.unregisterOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) { + if ( this.isVisible() ) { + setup(); + } + } + + + private void setup() { final OpenRocketDocument rocketDocument = ((Application)getActivity().getApplication()).getRocketDocument(); AndroidLogWrapper.d(Simulations.class,"activity = {0}", this.getActivity());