import net.sf.openrocket.android.db.MotorDao;\r
import net.sf.openrocket.android.util.AndroidLogWrapper;\r
import net.sf.openrocket.android.util.PersistentExpandableListFragment;\r
-import net.sf.openrocket.motor.Motor;\r
import android.app.Activity;\r
+import android.app.AlertDialog;\r
import android.content.Context;\r
-import android.content.Intent;\r
import android.content.SharedPreferences;\r
import android.content.res.Resources;\r
import android.database.Cursor;\r
import android.os.Bundle;\r
import android.preference.PreferenceManager;\r
+import android.support.v4.app.DialogFragment;\r
+import android.support.v4.app.Fragment;\r
+import android.support.v4.app.FragmentTransaction;\r
import android.view.ContextMenu;\r
import android.view.ContextMenu.ContextMenuInfo;\r
import android.view.Menu;\r
import android.view.MenuItem;\r
import android.view.View;\r
-import android.widget.CursorTreeAdapter;\r
import android.widget.ExpandableListView;\r
import android.widget.ResourceCursorTreeAdapter;\r
import android.widget.TextView;\r
\r
\r
-/*\r
- * TODO - make this work with PersistentExpandableListFragment.\r
- * \r
- */\r
public class MotorListFragment extends PersistentExpandableListFragment\r
implements SharedPreferences.OnSharedPreferenceChangeListener\r
{\r
public interface OnMotorSelectedListener {\r
public void onMotorSelected( long motorId );\r
}\r
- \r
+\r
public static MotorListFragment newInstance( ) {\r
- \r
MotorListFragment frag = new MotorListFragment();\r
return frag;\r
}\r
- \r
+\r
private static final int CONTEXTMENU_DELETE = Menu.FIRST+1;\r
+ private static final int CONTEXTMENU_EDIT = Menu.FIRST+2;\r
\r
private String groupColumnPreferenceKey;\r
private String groupColumn = MotorDao.CASE_INFO;\r
MotorDao.MANUFACTURER\r
};\r
\r
- private CursorTreeAdapter mAdapter;\r
-\r
private DbAdapter mDbHelper;\r
- \r
+\r
private OnMotorSelectedListener motorSelectedListener;\r
- \r
+\r
public void setMotorSelectedListener(\r
OnMotorSelectedListener motorSelectedListener) {\r
this.motorSelectedListener = motorSelectedListener;\r
protected Cursor getChildrenCursor(Cursor arg0) {\r
AndroidLogWrapper.d(MotorListFragment.class,"getChildrenCursor");\r
String group = arg0.getString(arg0.getColumnIndex(groupColumn));\r
- AndroidLogWrapper.d(MotorListFragment.class," for: "+ groupColumn + " = " + group);\r
Cursor c = mDbHelper.getMotorDao().fetchAllInGroups(groupColumn,group);\r
- AndroidLogWrapper.d(MotorListFragment.class," got cursor");\r
- getActivity().startManagingCursor(c);\r
return c;\r
}\r
\r
@Override\r
protected void bindChildView(View arg0, Context arg1, Cursor arg2,\r
boolean arg3) {\r
- \r
+\r
TextView manu = (TextView) arg0.findViewById(R.id.motorChildManu);\r
manu.setText( arg2.getString(arg2.getColumnIndex(MotorDao.MANUFACTURER)));\r
- \r
+\r
TextView desig = (TextView) arg0.findViewById(R.id.motorChildName);\r
desig.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DESIGNATION)));\r
- \r
+\r
TextView delays = (TextView) arg0.findViewById(R.id.motorChildDelays);\r
delays.setText( arg2.getString(arg2.getColumnIndex(MotorDao.DELAYS)));\r
- \r
+\r
TextView totImpulse = (TextView) arg0.findViewById(R.id.motorChildImpulse);\r
totImpulse.setText( arg2.getString(arg2.getColumnIndex(MotorDao.TOTAL_IMPULSE)));\r
}\r
TextView v = (TextView) view.findViewById(R.id.motorGroup);\r
if ( MotorDao.DIAMETER.equals(groupColumn)) {\r
double d = cursor.getDouble( cursor.getColumnIndex(groupColumn));\r
- v.setText( String.valueOf(Math.round(d * 1000.0)) );\r
+ v.setText( String.valueOf(Math.round(d * 1000.0)) + " mm");\r
} else {\r
v.setText( cursor.getString( cursor.getColumnIndex(groupColumn)));\r
}\r
}\r
- \r
+\r
}\r
\r
@Override\r
@Override\r
public void onViewCreated(View view, Bundle savedInstanceState) {\r
super.onViewCreated(view, savedInstanceState);\r
- refreshData();\r
\r
registerForContextMenu(getExpandableListView());\r
\r
}\r
\r
+ \r
@Override\r
- public void onAttach(Activity activity) {\r
- super.onAttach(activity);\r
- mDbHelper = new DbAdapter(getActivity());\r
- mDbHelper.open();\r
+ public void onResume() {\r
\r
Resources resources = this.getResources();\r
groupColumnPreferenceKey = resources.getString(R.string.PreferenceMotorBrowserGroupingOption);\r
setGroupColumnFromPreferences(pref);\r
\r
pref.registerOnSharedPreferenceChangeListener(this);\r
- \r
+\r
+ Activity activity = getActivity();\r
if ( activity instanceof OnMotorSelectedListener ) {\r
motorSelectedListener = (OnMotorSelectedListener) activity;\r
}\r
\r
+ refreshData();\r
+\r
+ super.onResume();\r
+\r
}\r
\r
@Override\r
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {\r
menu.setHeaderTitle("Motor Operations");\r
menu.add(Menu.NONE,CONTEXTMENU_DELETE,CONTEXTMENU_DELETE,"Delete");\r
+ menu.add(Menu.NONE,CONTEXTMENU_EDIT,CONTEXTMENU_EDIT,"Edit");\r
super.onCreateContextMenu(menu, v, menuInfo);\r
}\r
\r
mDbHelper.getMotorDao().deleteMotor(motorId);\r
refreshData();\r
return true;\r
+ case CONTEXTMENU_EDIT:\r
+ // DialogFragment.show() will take care of adding the fragment\r
+ // in a transaction. We also want to remove any currently showing\r
+ // dialog, so make our own transaction and take care of that here.\r
+ FragmentTransaction ft = getFragmentManager().beginTransaction();\r
+ Fragment prev = getFragmentManager().findFragmentByTag("dialog");\r
+ if (prev != null) {\r
+ ft.remove(prev);\r
+ }\r
+ ft.addToBackStack(null);\r
+\r
+ // Create and show the dialog.\r
+ DialogFragment newFragment = MotorDetailsFragment.newInstance(motorId);\r
+ newFragment.show(ft, "dialog");\r
+ return true;\r
}\r
return super.onContextItemSelected(item);\r
}\r
@Override\r
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {\r
super.onChildClick(parent, v, groupPosition, childPosition, id);\r
- //Intent i = new Intent(this, BurnPlotActivity.class);\r
if( motorSelectedListener != null ) {\r
motorSelectedListener.onMotorSelected(id);\r
}\r
}\r
\r
@Override\r
- public void onDetach() {\r
- super.onDetach();\r
+ public void onPause() {\r
+ super.onPause();\r
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
pref.unregisterOnSharedPreferenceChangeListener(this);\r
\r
- // Null out the group cursor. This will cause the group cursor and all of the child cursors\r
- // to be closed.\r
- mAdapter.changeCursor(null);\r
- mAdapter = null;\r
-\r
mDbHelper.close();\r
}\r
\r
groupColumn = groupColumns[index];\r
\r
}\r
- private void refreshData() {\r
- if (mAdapter != null ) {\r
- mAdapter.changeCursor(null);\r
+\r
+ public void refreshData() {\r
+ if ( mDbHelper == null ) {\r
+ mDbHelper = new DbAdapter(getActivity());\r
+ }\r
+ mDbHelper.open();\r
+\r
+ Cursor motorCounter = mDbHelper.getMotorDao().fetchAllMotors();\r
+ int motorCount = motorCounter.getCount();\r
+ motorCounter.close();\r
+ \r
+ if ( motorCount == 0 ) {\r
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+ builder.setTitle("No Motors Found");\r
+ builder.setMessage("Motors can be downloaded from thrustcurve");\r
+ builder.setCancelable(true);\r
+ builder.create().show();\r
}\r
+\r
Cursor motorCursor = mDbHelper.getMotorDao().fetchGroups(groupColumn);\r
- getActivity().startManagingCursor(motorCursor);\r
- // Set up our adapter\r
- mAdapter = new MotorHierarchicalListAdapter( \r
+ MotorHierarchicalListAdapter mAdapter = new MotorHierarchicalListAdapter( \r
getActivity(),\r
motorCursor,\r
R.layout.motor_list_group,\r
R.layout.motor_list_child);\r
setListAdapter(mAdapter);\r
+ onContentChanged();\r
}\r
}\r