diff --git a/android/res/layout/openrocketviewer.xml b/android/res/layout/openrocketviewer.xml index 12634b90b..6b6a8a2cd 100644 --- a/android/res/layout/openrocketviewer.xml +++ b/android/res/layout/openrocketviewer.xml @@ -1,18 +1,119 @@ - - - + android:layout_height="match_parent" + android:background="@android:color/black" > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index 5ff104495..d79944fdb 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -95,6 +95,34 @@ Submit Download from ThrustCurve Series 1 - Series 2 - + Series 2 + PreferenceUnitLengthOption + + Millimeters + Centimeters + Meters + Inches + Feet + + + mm + cm + m + in + ft + + PreferenceUnitMassOption + + Grams + Kilograms + Ounces + Pounds + + + g + kg + oz + lb + + \ No newline at end of file diff --git a/android/res/xml/preferences.xml b/android/res/xml/preferences.xml index 05fc59c83..1a37a8df0 100644 --- a/android/res/xml/preferences.xml +++ b/android/res/xml/preferences.xml @@ -14,4 +14,20 @@ android:summary="Set the grouping in Motor Browser" android:title="Motor Browser Group" /> + + \ No newline at end of file diff --git a/src/net/sf/openrocket/android/Application.java b/src/net/sf/openrocket/android/Application.java index 61b368c74..6628e5fbc 100644 --- a/src/net/sf/openrocket/android/Application.java +++ b/src/net/sf/openrocket/android/Application.java @@ -2,6 +2,8 @@ package net.sf.openrocket.android; import java.util.Locale; +import android.preference.PreferenceManager; + import net.sf.openrocket.database.ThrustCurveMotorSetDatabase; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.l10n.DebugTranslator; @@ -54,6 +56,15 @@ public class Application extends android.app.Application { initialize(); } + /* (non-Javadoc) + * @see android.app.Application#onCreate() + */ + @Override + public void onCreate() { + super.onCreate(); + PreferencesActivity.initializePreferences(this, PreferenceManager.getDefaultSharedPreferences(this)); + } + /** * @return the rocketDocument */ diff --git a/src/net/sf/openrocket/android/PreferencesActivity.java b/src/net/sf/openrocket/android/PreferencesActivity.java index 4ce05878f..66f4d7788 100644 --- a/src/net/sf/openrocket/android/PreferencesActivity.java +++ b/src/net/sf/openrocket/android/PreferencesActivity.java @@ -1,14 +1,48 @@ package net.sf.openrocket.android; import net.sf.openrocket.R; +import net.sf.openrocket.unit.UnitGroup; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; -public class PreferencesActivity extends android.preference.PreferenceActivity { +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); + } + + /* (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)); + } + + /** + * 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 ); + + String unitMass = app.getResources().getString(R.string.PreferenceUnitMassOption); + String mass = sharedPreferences.getString(unitMass, "g"); + UnitGroup.UNITS_MASS.setDefaultUnit( mass ); + } } diff --git a/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java b/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java index aa0083455..1037d1b89 100644 --- a/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java +++ b/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java @@ -10,11 +10,19 @@ import net.sf.openrocket.android.motor.MotorHierarchicalBrowser; import net.sf.openrocket.android.simulation.SimulationViewer; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; +import net.sf.openrocket.rocketcomponent.Rocket; +import net.sf.openrocket.rocketcomponent.RocketComponent; +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.app.Activity; import android.app.ProgressDialog; import android.content.Intent; +import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; +import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; @@ -26,15 +34,18 @@ import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; +import android.widget.TabHost; import android.widget.TextView; -public class OpenRocketViewer extends Activity { +public class OpenRocketViewer extends Activity +implements SharedPreferences.OnSharedPreferenceChangeListener +{ private static final String TAG = "OpenRocketViewer"; private ProgressDialog progress; - private TextView header; + private ListView componentList; private ListView simulationList; private Application app; @@ -54,8 +65,31 @@ public class OpenRocketViewer extends Activity { setContentView(R.layout.openrocketviewer); - header = (TextView) findViewById(R.id.heading); - simulationList = (ListView) findViewById(R.id.rocketSimulations); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + prefs.registerOnSharedPreferenceChangeListener(this); + + TabHost tabs=(TabHost)findViewById(R.id.openrocketviewerTabHost); + + tabs.setup(); + + TabHost.TabSpec spec=tabs.newTabSpec("tag1"); + + spec.setContent(R.id.openrocketviewerOverview); + spec.setIndicator("Overview"); + tabs.addTab(spec); + + spec=tabs.newTabSpec("tag2"); + spec.setContent(R.id.openrocketviewerComponentList); + spec.setIndicator("Components"); + tabs.addTab(spec); + + spec=tabs.newTabSpec("tag3"); + spec.setContent(R.id.openrocketviewerSimulationList); + spec.setIndicator("Simulations"); + tabs.addTab(spec); + + componentList = (ListView) findViewById(R.id.openrocketviewerComponentList); + simulationList = (ListView) findViewById(R.id.openrocketviewerSimulationList); Intent i = getIntent(); Uri file = i.getData(); @@ -118,23 +152,48 @@ public class OpenRocketViewer extends Activity { } + /* (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. + PreferencesActivity.initializePreferences(getApplication(), PreferenceManager.getDefaultSharedPreferences(this)); + updateContents(); + } + private void updateContents() { - OpenRocketDocument rocket = app.getRocketDocument(); - header.setText( rocket.getRocket().getName()); + OpenRocketDocument rocketDocument = app.getRocketDocument(); + Rocket rocket = rocketDocument.getRocket(); + + setTitle(rocket.getName()); + + Unit LengthUnit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); + Unit MassUnit = UnitGroup.UNITS_MASS.getDefaultUnit(); + + Coordinate cg = RocketUtils.getCG(rocket); + double length = RocketUtils.getLength(rocket); + ((TextView) findViewById(R.id.openrocketviewerRocketName)).setText( rocket.getName()); + ((TextView)findViewById(R.id.openrocketviewerDesigner)).setText(rocket.getDesigner()); + ((TextView)findViewById(R.id.openrocketviewerCG)).setText(LengthUnit.toStringUnit(cg.x) ); + ((TextView)findViewById(R.id.openrocketviewerLength)).setText(LengthUnit.toStringUnit(length)); + ((TextView)findViewById(R.id.openrocketviewerMass)).setText(MassUnit.toStringUnit(cg.weight)); + ((TextView)findViewById(R.id.openrocketviewerStageCount)).setText(String.valueOf(rocket.getStageCount())); + ((TextView)findViewById(R.id.openrocketviewerComment)).setText(rocket.getComment()); - ArrayAdapter sims = new ArrayAdapter(this,android.R.layout.simple_list_item_1,rocket.getSimulations()) { + ArrayAdapter sims = new ArrayAdapter(this,android.R.layout.simple_list_item_2,rocketDocument.getSimulations()) { @Override - public View getView(int position, View convertView, - ViewGroup parent) { + public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if ( v == null ) { LayoutInflater li = getLayoutInflater(); - v = li.inflate(android.R.layout.simple_list_item_1,null); + v = li.inflate(android.R.layout.simple_list_item_2,null); } Simulation sim = this.getItem(position); ((TextView)v.findViewById(android.R.id.text1)).setText( sim.getName() ); + ((TextView)v.findViewById(android.R.id.text2)).setText( "motors: " + sim.getConfiguration().getMotorConfigurationDescription() + " apogee: " + sim.getSimulatedData().getMaxAltitude() + "m time: " + sim.getSimulatedData().getFlightTime() + "s"); return v; } @@ -151,6 +210,27 @@ public class OpenRocketViewer extends Activity { }); simulationList.setAdapter(sims); + ArrayAdapter comps = new ArrayAdapter(this, android.R.layout.simple_list_item_1,rocket.getChildren()) { + + /* (non-Javadoc) + * @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup) + */ + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = convertView; + if ( v == null ) { + LayoutInflater li = getLayoutInflater(); + v = li.inflate(android.R.layout.simple_list_item_1,null); + } + RocketComponent comp = this.getItem(position); + ((TextView)v.findViewById(android.R.id.text1)).setText( comp.getName() ); + return v; + } + + + }; + componentList.setAdapter(comps); + if ( progress.isShowing() ) { progress.dismiss(); }