create changelog entry
[debian/openrocket] / android / src / net / sf / openrocket / android / motor / MotorListFragment.java
index f7559854ffb4c69de24e77f7f64602daf8c1b6ed..efe5f40f16ad7e788604785c194ebdd09f4535f9 100644 (file)
@@ -5,44 +5,41 @@ import net.sf.openrocket.android.db.DbAdapter;
 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
@@ -54,12 +51,10 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                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
@@ -80,10 +75,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                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
@@ -98,16 +90,16 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                @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
@@ -121,12 +113,12 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                        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
@@ -140,17 +132,14 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
        @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
@@ -159,17 +148,23 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                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
@@ -183,6 +178,21 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                        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
@@ -190,7 +200,6 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
        @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
@@ -198,16 +207,11 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
        }\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
@@ -226,18 +230,32 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                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