From fbc2c7c0ffe5f270fdd3de744a5fc9a5263e105b Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Mon, 6 Feb 2012 01:31:51 +0000 Subject: [PATCH] Rework the motor browser functionality to make it more tablet friendly. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@398 180e2498-e6e9-4542-8430-84ac67f01cd8 --- android/AndroidManifest.xml | 2 +- .../res/layout-xlarge-land/motorbrowser.xml | 20 ++ .../res/layout-xlarge-port/motorbrowser.xml | 20 ++ android/res/layout/motor_detail.xml | 39 --- android/res/layout/motor_detail_form.xml | 227 ++++++++++-------- android/res/layout/motorbrowser.xml | 12 + .../res/menu/motor_details_option_menu.xml | 6 - .../android/motor/BurnPlotActivity.java | 23 ++ .../android/motor/BurnPlotFragment.java | 38 ++- .../android/motor/MotorBrowserActivity.java | 22 +- .../android/motor/MotorDetailsActivity.java | 87 ------- .../android/motor/MotorDetailsFragment.java | 75 +++++- .../android/motor/MotorListFragment.java | 23 +- 13 files changed, 329 insertions(+), 265 deletions(-) create mode 100644 android/res/layout-xlarge-land/motorbrowser.xml create mode 100644 android/res/layout-xlarge-port/motorbrowser.xml delete mode 100644 android/res/layout/motor_detail.xml create mode 100644 android/res/layout/motorbrowser.xml delete mode 100644 android/res/menu/motor_details_option_menu.xml create mode 100644 android/src/net/sf/openrocket/android/motor/BurnPlotActivity.java delete mode 100644 android/src/net/sf/openrocket/android/motor/MotorDetailsActivity.java diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index db3d21f0..010f71bd 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 00000000..5cd0136c --- /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 00000000..61f8395c --- /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 b36a44a3..00000000 --- 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 751fb279..551dab58 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 00000000..0240e153 --- /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 c2df357e..00000000 --- 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 00000000..f1d00cf3 --- /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 5f777dc1..7600f2a0 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 469c712a..4fc0c2c9 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 684ebc46..00000000 --- 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 f9083b64..b1fac2cb 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 3f0bf5d6..c480cbb8 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); } } - + } -- 2.47.2