diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index db3d21f0d..010f71bdb 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
diff --git a/android/res/layout-xlarge-land/motorbrowser.xml b/android/res/layout-xlarge-land/motorbrowser.xml
new file mode 100644
index 000000000..5cd0136c0
--- /dev/null
+++ b/android/res/layout-xlarge-land/motorbrowser.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/res/layout-xlarge-port/motorbrowser.xml b/android/res/layout-xlarge-port/motorbrowser.xml
new file mode 100644
index 000000000..61f8395cd
--- /dev/null
+++ b/android/res/layout-xlarge-port/motorbrowser.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/res/layout/motor_detail.xml b/android/res/layout/motor_detail.xml
deleted file mode 100644
index b36a44a36..000000000
--- a/android/res/layout/motor_detail.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/android/res/layout/motor_detail_form.xml b/android/res/layout/motor_detail_form.xml
index 751fb279e..551dab580 100644
--- a/android/res/layout/motor_detail_form.xml
+++ b/android/res/layout/motor_detail_form.xml
@@ -1,108 +1,125 @@
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/android/res/layout/motorbrowser.xml b/android/res/layout/motorbrowser.xml
new file mode 100644
index 000000000..0240e153a
--- /dev/null
+++ b/android/res/layout/motorbrowser.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/res/menu/motor_details_option_menu.xml b/android/res/menu/motor_details_option_menu.xml
deleted file mode 100644
index c2df357ed..000000000
--- a/android/res/menu/motor_details_option_menu.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
diff --git a/android/src/net/sf/openrocket/android/motor/BurnPlotActivity.java b/android/src/net/sf/openrocket/android/motor/BurnPlotActivity.java
new file mode 100644
index 000000000..f1d00cf39
--- /dev/null
+++ b/android/src/net/sf/openrocket/android/motor/BurnPlotActivity.java
@@ -0,0 +1,23 @@
+package net.sf.openrocket.android.motor;
+
+import net.sf.openrocket.android.util.AndroidLogWrapper;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+
+public class BurnPlotActivity extends FragmentActivity {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ AndroidLogWrapper.d(BurnPlotActivity.class,"onCreate Bundle = "+ String.valueOf(savedInstanceState));
+
+ Intent i = getIntent();
+ long motorId = i.getLongExtra("Motor",-1);
+
+ BurnPlotFragment burnPlot = BurnPlotFragment.newInstance(motorId);
+ getSupportFragmentManager().beginTransaction().replace(android.R.id.content, burnPlot).commit();
+
+ }
+
+}
diff --git a/android/src/net/sf/openrocket/android/motor/BurnPlotFragment.java b/android/src/net/sf/openrocket/android/motor/BurnPlotFragment.java
index 5f777dc14..7600f2a0d 100644
--- a/android/src/net/sf/openrocket/android/motor/BurnPlotFragment.java
+++ b/android/src/net/sf/openrocket/android/motor/BurnPlotFragment.java
@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Vector;
import net.sf.openrocket.R;
+import net.sf.openrocket.android.db.DbAdapter;
import net.sf.openrocket.android.util.AndroidLogWrapper;
import android.graphics.Color;
import android.graphics.PointF;
@@ -27,6 +28,7 @@ import com.androidplot.xy.YValueMarker;
public class BurnPlotFragment extends Fragment implements OnTouchListener {
private ExtendedThrustCurveMotor motor;
+ private long motorId;
private XYPlot mySimpleXYPlot;
private SimpleXYSeries mySeries;
@@ -39,12 +41,44 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
+ public static BurnPlotFragment newInstance( long motorId ) {
+ BurnPlotFragment frag = new BurnPlotFragment();
+ Bundle bundle = new Bundle();
+ bundle.putLong("motorId", motorId);
+ frag.setArguments(bundle);
+ return frag;
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
AndroidLogWrapper.d(BurnPlotFragment.class,"onCreate");
+
+ if ( savedInstanceState!= null) {
+ motorId = savedInstanceState.getLong("motorId",-1);
+ } else {
+ Bundle b = getArguments();
+ motorId = b.getLong("motorId");
+ }
+
+ DbAdapter mDbHelper = new DbAdapter(getActivity());
+ mDbHelper.open();
+
+ try {
+ motor = mDbHelper.getMotorDao().fetchMotor(motorId);
+ } catch ( Exception e ) {
+
+ }
+
+ mDbHelper.close();
super.onCreate(savedInstanceState);
}
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putLong("motorId", motorId);
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -53,6 +87,7 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
mySimpleXYPlot = (XYPlot) v.findViewById(R.id.xyplot);
mySimpleXYPlot.setOnTouchListener(this);
mScaleDetector = new ScaleGestureDetector(v.getContext(), new ScaleListener());
+ init(motor);
return v;
}
@@ -63,7 +98,8 @@ public class BurnPlotFragment extends Fragment implements OnTouchListener {
}
return l;
}
- void init( ExtendedThrustCurveMotor motor ) {
+
+ private void init( ExtendedThrustCurveMotor motor ) {
mySimpleXYPlot.setUserDomainOrigin(0);
mySimpleXYPlot.setUserRangeOrigin(0);
diff --git a/android/src/net/sf/openrocket/android/motor/MotorBrowserActivity.java b/android/src/net/sf/openrocket/android/motor/MotorBrowserActivity.java
index 469c712aa..4fc0c2c9d 100644
--- a/android/src/net/sf/openrocket/android/motor/MotorBrowserActivity.java
+++ b/android/src/net/sf/openrocket/android/motor/MotorBrowserActivity.java
@@ -6,6 +6,7 @@ import net.sf.openrocket.android.PreferencesActivity;
import net.sf.openrocket.android.util.AndroidLogWrapper;
import android.content.Intent;
import android.os.Bundle;
+import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
@@ -23,13 +24,8 @@ implements MotorListFragment.OnMotorSelectedListener
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
- motorList = MotorListFragment.newInstance();
- FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
- ft.add(android.R.id.content, motorList);
- ft.commit();
- }
+ setContentView(R.layout.motorbrowser);
+ getSupportFragmentManager().beginTransaction().add( R.id.motorBrowserList, new MotorListFragment()).commit();
}
@Override
@@ -59,23 +55,19 @@ implements MotorListFragment.OnMotorSelectedListener
View sidepane = findViewById(R.id.sidepane);
if ( /* if multi pane */ sidepane != null ) {
- /*
- Simulation sim = app.getRocketDocument().getSimulation(simulationId);
- SimulationChart chart = new SimulationChart(simulationId);
-
- Fragment graph = SimulationFragment.newInstance(chart);
+
+ Fragment graph = BurnPlotFragment.newInstance(motorId);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
// probably only want to update back stack for first time.
- ft.addToBackStack("simulationplot");
+ ft.addToBackStack("burnplot");
ft.replace(R.id.sidepane, graph);
ft.show(graph);
ft.commit();
-*/
} else {
- Intent i = new Intent(this,MotorDetailsActivity.class);
+ Intent i = new Intent(this,BurnPlotActivity.class);
i.putExtra("Motor", motorId);
startActivity(i);
}
diff --git a/android/src/net/sf/openrocket/android/motor/MotorDetailsActivity.java b/android/src/net/sf/openrocket/android/motor/MotorDetailsActivity.java
deleted file mode 100644
index 684ebc463..000000000
--- a/android/src/net/sf/openrocket/android/motor/MotorDetailsActivity.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.sf.openrocket.android.motor;
-
-import net.sf.openrocket.R;
-import net.sf.openrocket.android.db.DbAdapter;
-import net.sf.openrocket.android.util.AndroidLogWrapper;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.widget.ImageView;
-import android.widget.SlidingDrawer;
-
-public class MotorDetailsActivity extends FragmentActivity
-implements SlidingDrawer.OnDrawerCloseListener, SlidingDrawer.OnDrawerOpenListener {
-
- private SlidingDrawer slidingDrawer;
- private ImageView handle;
-
- private ExtendedThrustCurveMotor motor;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- AndroidLogWrapper.d(MotorDetailsActivity.class,"onCreate Bundle = "+ String.valueOf(savedInstanceState));
- setContentView(R.layout.motor_detail);
-
- Intent i = getIntent();
- long motorId = i.getLongExtra("Motor",-1);
-
- DbAdapter mDbHelper = new DbAdapter(this);
- mDbHelper.open();
-
- try {
- motor = mDbHelper.getMotorDao().fetchMotor(motorId);
- } catch ( Exception e ) {
-
- }
-
- mDbHelper.close();
-
- BurnPlotFragment burnPlot = (BurnPlotFragment) getSupportFragmentManager().findFragmentById(R.id.burnPlotFragment);
- burnPlot.init(motor);
-
- MotorDetailsFragment motorDetails = (MotorDetailsFragment) getSupportFragmentManager().findFragmentById(R.id.motorDetailForm);
- motorDetails.init(motor);
-
- slidingDrawer = (SlidingDrawer) findViewById(R.id.drawer);
-
- slidingDrawer.setOnDrawerOpenListener(this);
- slidingDrawer.setOnDrawerCloseListener(this);
-
- handle = (ImageView) findViewById(R.id.handle);
-
- }
-
- @Override
- public void onDrawerOpened() {
- handle.setImageResource(R.drawable.arrow_down_float);
- }
-
- @Override
- public void onDrawerClosed() {
- handle.setImageResource(R.drawable.arrow_up_float);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.motor_details_option_menu, menu);
- return true;
- }
-
- @Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
- switch(item.getItemId()) {
- case R.id.save:
- // Extract form data to Motor.
- // Save motor.
- return true;
- }
- return super.onMenuItemSelected(featureId, item);
- }
-
-
-}
diff --git a/android/src/net/sf/openrocket/android/motor/MotorDetailsFragment.java b/android/src/net/sf/openrocket/android/motor/MotorDetailsFragment.java
index f9083b646..b1fac2cb5 100644
--- a/android/src/net/sf/openrocket/android/motor/MotorDetailsFragment.java
+++ b/android/src/net/sf/openrocket/android/motor/MotorDetailsFragment.java
@@ -2,15 +2,17 @@ package net.sf.openrocket.android.motor;
import net.sf.openrocket.R;
import net.sf.openrocket.android.db.ConversionUtils;
+import net.sf.openrocket.android.db.DbAdapter;
import net.sf.openrocket.motor.ThrustCurveMotor;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
+import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.EditText;
-public class MotorDetailsFragment extends Fragment {
+public class MotorDetailsFragment extends DialogFragment {
EditText manuField;
EditText nameField;
@@ -19,7 +21,44 @@ public class MotorDetailsFragment extends Fragment {
EditText impulseClassField;
EditText diameterField;
EditText lengthField;
-
+
+ ExtendedThrustCurveMotor motor;
+
+ public static MotorDetailsFragment newInstance( long motorId ) {
+ MotorDetailsFragment fragment = new MotorDetailsFragment();
+ Bundle b = new Bundle();
+ b.putLong("motorId", motorId);
+ fragment.setArguments(b);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setStyle(DialogFragment.STYLE_NO_TITLE,getTheme());
+
+ Long motorId;
+ if ( savedInstanceState != null ) {
+ motorId = savedInstanceState.getLong("motorId");
+ } else {
+ Bundle b = getArguments();
+ motorId = b.getLong("motorId");
+ }
+ DbAdapter mDbHelper = new DbAdapter(getActivity());
+ mDbHelper.open();
+ try {
+ motor = mDbHelper.getMotorDao().fetchMotor(motorId);
+ } catch ( Exception e ) {
+ }
+ mDbHelper.close();
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle arg0) {
+ super.onSaveInstanceState(arg0);
+ arg0.putLong("motorId", motor.getId());
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -31,19 +70,37 @@ public class MotorDetailsFragment extends Fragment {
impulseClassField = (EditText) v.findViewById(R.id.motorDetailsImpuseClass);
diameterField = (EditText) v.findViewById(R.id.motorDetailsDiameter);
lengthField = (EditText) v.findViewById(R.id.motorDetailsLength);
+ init();
+ /* TODO - enable saving.
+ ((Button) v.findViewById(R.id.motorDetailsSaveButton)).setOnClickListener(
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ MotorDetailsFragment.this.saveChanges();
+ }
+ });
+ */
return v;
}
- public void init( ExtendedThrustCurveMotor m ) {
- ThrustCurveMotor tcm = m.getThrustCurveMotor();
+ private void init( ) {
+ ThrustCurveMotor tcm = motor.getThrustCurveMotor();
manuField.setText( tcm.getManufacturer().getDisplayName());
nameField.setText( tcm.getDesignation() );
delaysField.setText( ConversionUtils.delaysToString(tcm.getStandardDelays()) );
- caseField.setText( m.getCaseInfo());
- impulseClassField.setText( m.getImpulseClass());
+ caseField.setText( motor.getCaseInfo());
+ impulseClassField.setText( motor.getImpulseClass());
diameterField.setText( String.valueOf(tcm.getDiameter()*1000.0) );
lengthField.setText( String.valueOf(tcm.getLength()*1000.0) );
-
}
-
+
+ private void saveChanges() {
+ DbAdapter mDbHelper = new DbAdapter(getActivity());
+ mDbHelper.open();
+ try {
+ mDbHelper.getMotorDao().insertOrUpdateMotor(motor);
+ } catch ( Exception e ) {
+ }
+
+ }
}
diff --git a/android/src/net/sf/openrocket/android/motor/MotorListFragment.java b/android/src/net/sf/openrocket/android/motor/MotorListFragment.java
index 3f0bf5d6d..c480cbb85 100644
--- a/android/src/net/sf/openrocket/android/motor/MotorListFragment.java
+++ b/android/src/net/sf/openrocket/android/motor/MotorListFragment.java
@@ -12,6 +12,9 @@ import android.content.res.Resources;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
@@ -35,12 +38,12 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
}
public static MotorListFragment newInstance( ) {
-
MotorListFragment frag = new MotorListFragment();
return frag;
}
private static final int CONTEXTMENU_DELETE = Menu.FIRST+1;
+ private static final int CONTEXTMENU_EDIT = Menu.FIRST+2;
private String groupColumnPreferenceKey;
private String groupColumn = MotorDao.CASE_INFO;
@@ -165,6 +168,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Motor Operations");
menu.add(Menu.NONE,CONTEXTMENU_DELETE,CONTEXTMENU_DELETE,"Delete");
+ menu.add(Menu.NONE,CONTEXTMENU_EDIT,CONTEXTMENU_EDIT,"Edit");
super.onCreateContextMenu(menu, v, menuInfo);
}
@@ -178,6 +182,21 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
mDbHelper.getMotorDao().deleteMotor(motorId);
refreshData();
return true;
+ case CONTEXTMENU_EDIT:
+ // DialogFragment.show() will take care of adding the fragment
+ // in a transaction. We also want to remove any currently showing
+ // dialog, so make our own transaction and take care of that here.
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ Fragment prev = getFragmentManager().findFragmentByTag("dialog");
+ if (prev != null) {
+ ft.remove(prev);
+ }
+ ft.addToBackStack(null);
+
+ // Create and show the dialog.
+ DialogFragment newFragment = MotorDetailsFragment.newInstance(motorId);
+ newFragment.show(ft, "dialog");
+ return true;
}
return super.onContextItemSelected(item);
}
@@ -236,5 +255,5 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
setListAdapter(mAdapter);
}
}
-
+
}