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;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
public class PreferencesActivity extends SherlockPreferenceActivity
{
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
addPreferencesFromResource(R.xml.preferences);
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 ");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
/**
* This method is to be called from Application setup to pull the saved preference
* values into the various datastructures used in OpenRocket.
* This method is located in this class because it is probably best to have as much
* of the code in the same place as possible.
* @param sharedPreferences
*/
public static void initializePreferences( android.app.Application app, SharedPreferences sharedPreferences ) {
String unitLength = app.getResources().getString(R.string.PreferenceUnitLengthOption);
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 );
String unitVelocity = app.getResources().getString(R.string.PreferenceUnitVelocityOption);
String velocity = sharedPreferences.getString(unitVelocity, "m/s");
UnitGroup.UNITS_VELOCITY.setDefaultUnit( velocity );
String unitDistance = app.getResources().getString(R.string.PreferenceUnitDistanceOption);
String distance = sharedPreferences.getString(unitDistance, "m");
UnitGroup.UNITS_DISTANCE.setDefaultUnit( distance );
}
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;
}
}
}