Fix up the unit preferences correctly. The preferences now show the current setting and when they are changed, the overview and simulations lists are updated.

This commit is contained in:
Kevin Ruland 2012-02-02 02:49:44 +00:00
parent 9e05cfeb29
commit 616dd8c1a7
4 changed files with 116 additions and 40 deletions

View File

@ -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;
}
}
}

View File

@ -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();

View File

@ -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()));
}
}

View File

@ -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());