Implement autosave rockets. Controlled by preference. When preference is set, the...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Mon, 2 Jul 2012 21:40:14 +0000 (21:40 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Mon, 2 Jul 2012 21:40:14 +0000 (21:40 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@856 180e2498-e6e9-4542-8430-84ac67f01cd8

android/res/values/pref_strings.xml
android/res/values/strings.xml
android/res/xml/preferences.xml
android/src/net/sf/openrocket/android/rocket/OpenRocketSaverFragment.java
android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java

index f9da2e828e5591438fc1f60c3f52d19766864896..5f3284ac4c7348c3ffcf0ab84120eb0bcbe82a33 100644 (file)
@@ -6,6 +6,7 @@
     <string name="PreferenceUseInternalFileBrowserOption">PreferenceUseInternalFileBrowserOpion</string>\r
     <string name="PreferenceFileBrowserBaseDirectory">PreferenceFileBrowserBaseDirectory</string>\r
     <string name="PreferenceShowOnlyOrkFiles">PreferenceShowOnlyOrkFiles</string>\r
+    <string name="PreferenceAutoSaveOption">PreferenceAutoSaveOption</string>\r
 \r
     <string-array name="PreferenceMotorBrowserGroupingValues">\r
         <item>0</item>\r
index 074c7a886ac6417c2f95a19afef2d6994e8767b0..81c048b6684f8a63cb2d0fbbada37f845e4dc0df 100644 (file)
@@ -19,6 +19,7 @@
     <string name="loadWarnUnsaved">Would you like to save the changes to the current model?</string>\r
     <string name="no">No</string>\r
     <string name="yes">Yes</string>\r
+    <string name="autoSaveMessage">Automatically saving rocket</string>\r
 \r
     <string-array name="PreferenceMotorBrowserGroupingEntries">\r
         <item>Case</item>\r
     <string name="simulationSeries1Label">Series 1</string>\r
     <string name="simulationSeries2Label">Series 2</string>\r
 \r
+    <string name="autosavetitle">Autosave Rocket</string>\r
+    <string name="autosavesummary">Automatically save the rocket document after simulations</string>\r
+    \r
     <string name="motorbrowsergrouptitle">Motor Browser Grouping</string>\r
+    <string name="motorbrowsergroupsummary">Set the grouping in Motor Browser</string>\r
+    \r
     <string name="motorbrowsertitle">Motor Browser</string>\r
     \r
     <string name="useinternalfilebrowsertitle">Use Internal File Browser</string>\r
index 7e27894f384f172e8df778e0f04a0475d61b9cbc..ff39a61f380c4cd0b2a45650deb82cfb6434011a 100644 (file)
@@ -8,9 +8,15 @@
         android:entries="@array/PreferenceMotorBrowserGroupingEntries"
         android:entryValues="@array/PreferenceMotorBrowserGroupingValues"
         android:key="@string/PreferenceMotorBrowserGroupingOption"
-        android:summary="Set the grouping in Motor Browser"
+        android:summary="@string/motorbrowsergroupsummary"
         android:title="@string/motorbrowsergrouptitle" />
 
+    <CheckBoxPreference
+        android:defaultValue="false"
+        android:title="@string/autosavetitle"
+        android:key="@string/PreferenceAutoSaveOption"
+        android:summary="@string/autosavesummary"/>
+    
     <CheckBoxPreference
         android:defaultValue="true"
         android:title="@string/useinternalfilebrowsertitle"
index 5a0b9b31fa66a3fc0f55087233697b7a2d7e0c0a..6f6745b725fab33cc015a7eed1aeae3a601ad243 100644 (file)
@@ -12,12 +12,16 @@ import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
+import android.view.Window;\r
+\r
+import com.actionbarsherlock.app.SherlockFragmentActivity;\r
 \r
 public class OpenRocketSaverFragment extends Fragment {\r
        \r
-       public static OpenRocketSaverFragment newInstance() {\r
+       public static OpenRocketSaverFragment newInstance( boolean showProgressDialog) {\r
                OpenRocketSaverFragment frag = new OpenRocketSaverFragment();\r
                Bundle b = new Bundle();\r
+               b.putBoolean(SHOW_PRGRESS_DIALOG_ARG, showProgressDialog);\r
                frag.setArguments(b);\r
                return frag;\r
        }\r
@@ -25,7 +29,10 @@ public class OpenRocketSaverFragment extends Fragment {
        public interface OnOpenRocketFileSaved {\r
                public void onOpenRocketFileSaved( Boolean result );\r
        }\r
+\r
+       private final static String SHOW_PRGRESS_DIALOG_ARG = "net.sf.openrocket.android.ShowProgressDialog";\r
        \r
+       private boolean showProgressDialog = true;\r
        private OpenRocketSaverTask task;\r
        private OnOpenRocketFileSaved listener;\r
        \r
@@ -34,6 +41,9 @@ public class OpenRocketSaverFragment extends Fragment {
                super.onCreate(savedInstanceState);\r
                setRetainInstance(true);\r
                Bundle b = getArguments();\r
+               if ( b != null ) {\r
+                       showProgressDialog = b.getBoolean(SHOW_PRGRESS_DIALOG_ARG, true);\r
+               }\r
                if ( task == null ) {\r
                        // since we retain instance state, task will be non-null if it is already loading.\r
                        task = new OpenRocketSaverTask();\r
@@ -63,9 +73,15 @@ public class OpenRocketSaverFragment extends Fragment {
                @Override\r
                protected void onPreExecute() {\r
                        super.onPreExecute();\r
-                       String savingMessage = getActivity().getResources().getString(R.string.saving);\r
-                       DialogFragment newFragment = ProgressDialogFragment.newInstance("", savingMessage);\r
-                       newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);\r
+                       if ( showProgressDialog ) {\r
+                               String savingMessage = getActivity().getResources().getString(R.string.saving);\r
+                               DialogFragment newFragment = ProgressDialogFragment.newInstance("", savingMessage);\r
+                               newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);\r
+                       } else {\r
+                               ((SherlockFragmentActivity)getActivity()).setSupportProgressBarIndeterminate(true);\r
+                               ((SherlockFragmentActivity)getActivity()).setSupportProgress(0);\r
+                       }\r
+                       \r
                }\r
 \r
                /* (non-Javadoc)\r
@@ -89,11 +105,16 @@ public class OpenRocketSaverFragment extends Fragment {
                protected void onPostExecute(Boolean result) {\r
                        super.onPostExecute(result);\r
                        AndroidLogWrapper.d(OpenRocketSaverFragment.class,"Finished saving " + OpenRocketSaverTask.this);\r
-                       Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
-                       if ( progress != null ) {\r
-                               // Remove the fragment instead of trying to use DialogFragment.dismiss.\r
-                               // If the dialog is now currently shown, dismiss fails.\r
-                               getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();\r
+                       if ( showProgressDialog ) {\r
+                               Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
+                               if ( progress != null ) {\r
+                                       // Remove the fragment instead of trying to use DialogFragment.dismiss.\r
+                                       // If the dialog is now currently shown, dismiss fails.\r
+                                       getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();\r
+                               }\r
+                       } else {\r
+                               ((SherlockFragmentActivity)getActivity()).setSupportProgress(Window.PROGRESS_END);\r
+                               ((SherlockFragmentActivity)getActivity()).setSupportProgressBarVisibility(false);\r
                        }\r
                        if ( listener != null ) {\r
                                listener.onOpenRocketFileSaved(result);\r
index b04f40eef3e4d5f54a947b2188ce320c67b896af..c621dab23a1b931a941cba1830da3e2dc9366502 100644 (file)
@@ -14,20 +14,25 @@ import net.sf.openrocket.document.Simulation;
 import android.app.AlertDialog;\r
 import android.content.DialogInterface;\r
 import android.content.Intent;\r
+import android.content.SharedPreferences;\r
+import android.content.res.Resources;\r
 import android.os.Bundle;\r
+import android.preference.PreferenceManager;\r
 import android.support.v4.app.Fragment;\r
 import android.support.v4.app.FragmentManager;\r
 import android.support.v4.app.FragmentPagerAdapter;\r
 import android.support.v4.app.FragmentTransaction;\r
 import android.support.v4.view.ViewPager;\r
 import android.view.View;\r
+import android.widget.Toast;\r
 \r
 import com.actionbarsherlock.view.Menu;\r
 import com.actionbarsherlock.view.MenuInflater;\r
 import com.actionbarsherlock.view.MenuItem;\r
+import com.actionbarsherlock.view.Window;\r
 \r
 public class OpenRocketViewer extends OpenRocketLoaderActivity\r
-implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnOpenRocketFileSaved\r
+implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnOpenRocketFileSaved, SharedPreferences.OnSharedPreferenceChangeListener\r
 {\r
 \r
        private final static int OVERVIEW_POS = 0;\r
@@ -37,9 +42,11 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
        private final static int TABSIZE = 4;\r
 \r
        private OpenRocketViewerPagerAdapter viewPagerAdapter;\r
-       \r
+\r
        private final static String LOAD_AFTER_SAVE = "net.sf.openrocket.android.loadAfterSave";\r
        private boolean loadAfterSave = false;\r
+       private String autoSaveEnabledKey;\r
+       private boolean autoSaveEnabled = false;\r
 \r
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
@@ -58,6 +65,10 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                if (savedInstanceState != null ) {\r
                        loadAfterSave = savedInstanceState.getBoolean(LOAD_AFTER_SAVE);\r
                }\r
+               // Must use com.actionbarsherlock.view.Window.FEATURE_INDETERMINATE_PROGRESS\r
+               requestWindowFeature(Window.FEATURE_PROGRESS);\r
+               setSupportProgressBarIndeterminate(true);\r
+\r
                setTitle(rocDoc.getRocket().getName());\r
                getSupportActionBar().setHomeButtonEnabled(true);\r
 \r
@@ -70,11 +81,20 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
        @Override\r
        protected void onPause() {\r
                CurrentRocketHolder.getCurrentRocket().setHandler(null);\r
+               SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);\r
+               pref.unregisterOnSharedPreferenceChangeListener(this);\r
                super.onPause();\r
        }\r
 \r
        @Override\r
        protected void onResume() {\r
+               Resources resources = this.getResources();\r
+               autoSaveEnabledKey = resources.getString(R.string.PreferenceAutoSaveOption);\r
+               SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);\r
+               autoSaveEnabled = pref.getBoolean(autoSaveEnabledKey, false);\r
+\r
+               pref.registerOnSharedPreferenceChangeListener(this);\r
+\r
                RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
                CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
                super.onResume();\r
@@ -119,9 +139,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                                        @Override\r
                                        public void onClick(DialogInterface dialog, int which) {\r
                                                OpenRocketViewer.this.loadAfterSave = true;\r
-                                               getSupportFragmentManager().beginTransaction()\r
-                                               .add( OpenRocketSaverFragment.newInstance(), "saver")\r
-                                               .commitAllowingStateLoss();\r
+                                               OpenRocketViewer.this.saveRocketDocument();\r
                                        }\r
                                });\r
                                builder.create().show();\r
@@ -130,9 +148,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                        }\r
                        return true;\r
                case R.id.menu_save:\r
-                       getSupportFragmentManager().beginTransaction()\r
-                       .add( OpenRocketSaverFragment.newInstance(), "saver")\r
-                       .commitAllowingStateLoss();\r
+                       OpenRocketViewer.this.saveRocketDocument();\r
                        return true;\r
                case android.R.id.home:\r
                        ActivityHelpers.goHome(this);\r
@@ -150,6 +166,13 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                return super.onMenuItemSelected(featureId, item);\r
        }\r
 \r
+       @Override\r
+       public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {\r
+               if ( autoSaveEnabledKey.equals(arg1) ) {\r
+                       autoSaveEnabled = arg0.getBoolean(autoSaveEnabledKey, false);\r
+               }\r
+       }\r
+\r
        @Override\r
        public void onSimulationSelected(int simulationId) {\r
 \r
@@ -185,6 +208,12 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                }\r
        }\r
 \r
+       private void saveRocketDocument() {\r
+               getSupportFragmentManager().beginTransaction()\r
+               .add( OpenRocketSaverFragment.newInstance(false), "saver")\r
+               .commitAllowingStateLoss();\r
+       }\r
+\r
        @Override\r
        public void onOpenRocketFileSaved(Boolean result) {\r
                invalidateOptionsMenu();\r
@@ -198,6 +227,10 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
 \r
                @Override\r
                protected void doSimsChanged() {\r
+                       if ( autoSaveEnabled ) {\r
+                               Toast.makeText(OpenRocketViewer.this, R.string.autoSaveMessage, Toast.LENGTH_SHORT).show();\r
+                               OpenRocketViewer.this.saveRocketDocument();\r
+                       }\r
                        invalidateOptionsMenu();\r
                        Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);\r
                        if ( sims != null ) {\r